feat(plugins): bake native route phrases into the remaining sweep units - #5570
Conversation
Ships the remaining description-phrase sweep units as one change: - context-budget 0.6.47: /context-budget:audit description routes the session-token account to the bundled explain-usage skill. - evals 0.3.7: /evals:methodology description routes the model-and-effort sweep over an existing suite to claude-api's hillclimb. - playbooks 0.15.2: /playbooks:fable-5 description routes current model, price and API facts and the cost audit to the bundled claude-api skill. - prototype 0.13.5 and visualization 0.8.3: the bundled design skill is model-invocation-disabled in 2.1.285, so both rows move from route to suggest; the description phrase is dropped and the Boundary offers /design to the person. Boundary bullets follow the `- **`<name>` (<class>)**: what it does` template and no longer assert availability. records.json marks the three route rows baked.description_phrase true; native-surfaces.md is regenerated; the native-references convention takes one 3.3.5 entry and updated Adopters rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 3m 5s —— View job Claude finished the code review
No findings. This is a coordinated documentation/routing sweep across five plugins (
One purely cosmetic thing I noticed but am not flagging as a finding: two lines land noticeably longer than their neighboring wrapped lines in a couple of the touched files (e.g. Note on verification: I did not independently re-run |
|
Claude finished @kyle-sexton's task in 1m 10s —— View job Security review — PR #5570
Scope: all 25 changed files ( Findings: none. This PR is documentation/description-only: skill Instruction-surface lens applied. The diff narrows presence-check/gating language in No finding: the removed checks existed to gate model-initiated invocation of the bundled Also checked and clean: no |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 564afebba1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A targeted string search of the 2.1.285 binary shows the `design`
registration is a user-only design-Artifact creator ('Make a new Design
artifact from a brief'), the 2.1.263 canvas strings are gone, and the
claude.ai/design hub text now belongs to a separate ClaudeDesign tool.
The records.json design rows and both skills' verification records now
state this instead of leaving the identity open.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Something went wrong. Try again later by commenting “@codex review”. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
@codex review |
|
Codex Review: Something went wrong. Try again later by commenting “@codex review”. ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Claude finished @kyle-sexton's task in 1m 5s —— View job Security review — PR #5570
Scope: synchronize event — reviewed the new commit Findings: none.
It does not change the Re-checked the instruction-surface lens ( |
|
Claude finished @kyle-sexton's task in 2m 48s —— View job Code review — PR #5570
2 findings posted inline, both on the same theme: the second commit (
Everything else in the diff (description-phrase/Boundary/records.json changes for the three |
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
The prototype and visualization Boundary bullets and design-canvas offers restated 2026-09-11 canvas mechanics (pan/zoom, properties panel, save-gated editing, research preview). The commands and artifacts pages fetched 2026-09-30 describe artboards on one canvas published as a Claude Design artifact, edited in a desktop browser with edits saved automatically, PNG or PDF export per artboard, v2.1.265 or later, and an account where the Design template is available. The skill bodies and both verification records now state that. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 48s —— View job Code review — PR #5570
Scope. Diffed 2 findings posted inline, both about the verification-record convention this PR is otherwise carefully following:
Everything else checked clean. The three |
|
Claude finished @kyle-sexton's task in 47s —— View job Security review — PR #5570
Scope: delta review of the new commit Findings: none.
It replaces the 2026-09-11 canvas description (pan/zoom, versioned artifact, "hand-editable where saving is enabled", research-preview rollout flag) with the 2026-09-30 commands/artifacts-page description (artboards on one canvas, edited in a desktop browser with autosave, PNG/PDF export per artboard, v2.1.265 floor, Design-template account gate). This is the fix for the two earlier code-review findings on this PR (the "artboard/pan-zoom mechanics unconfirmed" gap on the Instruction-surface lens applied (per this skill's criteria, since the diff edits No executable code, workflow, script, or config is touched by this commit (or by the PR as a whole — it remains a documentation/description sweep). Combined with the two prior clean security reviews on this branch ( |
|
@codex review |
The visualize decision-matrix kept the 2026-09-11 verification block after the 2.1.285 record above it, so the two contradicted each other on editing and the version floor. The block now keeps only its still-current facts (artifacts Availability gates, changelog, design-sync pointer). The prototype record's changelog row no longer borrows the docs' version floor with a date its own As-of column does not carry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Claude finished @kyle-sexton's task in 30s —— View job Security review — PR #5570
Scope: delta review of the new commit Findings: none.
This is the fix for the code-review lane's two open findings on this branch (the mismatched "as of 2026-09-30" claim-cell date, and the stale 2026-09-11 v2.1.263-canvas blockquote contradicting the newer re-verification block above it). The commit removes the superseded 2026-09-11 canvas-mechanics claims from both files, leaving the version-floor and availability-table facts that are still current, and pointing to Instruction-surface lens applied: this commit deletes stale verification-record prose, not a standing instruction, rule, or mutation gate — the "reserved for the person to run" / "the model does not invoke it" gate text is untouched (it was edited by the earlier No executable code, workflow, script, or config is touched. Combined with the three prior clean security reviews on this branch ( |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6fd31c3291
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ize design row The 2026-09-30 docs describe the /design canvas as saving edits automatically and say nothing of version history, so the records.json reason no longer calls it versioned; native-surfaces.md is regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 59s —— View job Code review — PR #5570
Scope. Delta review of the two commits landed since this lane's last pass on
Findings: none. Verified both fixes directly:
Both commits are narrowly scoped to the exact lines the review comments identified, and I didn't find any new inconsistency they introduced. I did not re-run |
|
Claude finished @kyle-sexton's task in 2m 1s —— View job Code review — PR #5570
Scope. Delta review of
1 finding posted inline, low severity:
Everything else checked clean:
I did not re-run |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2891271608
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The /context suggest sentence names "the verification record below" as its gate basis; the Boundary now carries that four-part record in the SKILL.md itself, and the headless-capture note points at the cli-parse rung in reference/engine.md instead of a section that does not exist. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 49s —— View job Security review — PR #5570
Scope: delta review of the new commit Findings: none.
Instruction-surface lens applied: this commit only adds a verification record and fixes two dangling pointers; it does not delete, narrow, or soften the mutation-gate text itself — "This skill never runs No executable code, script, workflow, or config is touched. Combined with the nine prior clean security reviews on this branch, the full PR at head |
|
Claude finished @kyle-sexton's task in 1m 17s —— View job Code review — PR #5570
Scope. Delta review of
Findings: none. Verified both fixes directly:
No executable code, workflow, script, or config is touched. Combined with the nine prior clean review passes on this branch, the full PR at head |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e62584ebd8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The design rows' decisive evidence is the 2026-09-30 targeted search of the 2.1.285 binary, so recheck.verified now reads 2026-09-30 on both; native-surfaces.md regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Codex Review: Didn't find any major issues. Already looking forward to the next diff. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
…weep-rest # Conflicts: # plugins/evals/CHANGELOG.md
|
@codex review |
|
Claude finished @kyle-sexton's task in 1m 41s —— View job Code review — PR #5570
Scope. Two things landed since this lane's last review (of
Findings: none. Verified the Checked the This lane has now reviewed every commit on this branch with no outstanding findings. |
|
Claude finished @kyle-sexton's task in 44s —— View job Security review — PR #5570
Scope: delta review of the new commit Findings: none.
This is the fix for Codex's P2 comment on Instruction-surface lens applied: this is a two-field date correction in generated registry data, not a standing instruction, rule, or mutation gate — no No executable code, workflow, script, or config is touched. Combined with the ten prior clean security reviews on this branch, the full PR at head |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a80f67a285
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…nges Both /design offers quote the bundled command's description as the identity check, so every design verification record and both records.json rows now recheck when a release changes that description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
Claude finished @kyle-sexton's task in 51s —— View job Security review — PR #5570
Scope: delta review of the new commit Findings: none.
This is the fix for Codex's latest P2 comment ("Recheck the exact Instruction-surface lens applied: this commit only adds a recheck trigger to existing verification records — it doesn't delete, narrow, or soften the mutation-gate text (both "the model does not invoke it" / "This skill never runs..." sentences are untouched) or any other standing instruction. No executable code, workflow, script, or config is touched. Combined with the eleven prior clean security reviews on this branch, the full PR at head |
|
Claude finished @kyle-sexton's task in 1m 11s —— View job Code review — PR #5570
Scope. Delta review of Findings: none. Verified the fix is complete and consistent across all six touched locations:
Confirmed no site quoting the identity string was missed: This is a narrowly-scoped, purely additive fix with no functional or structural change beyond the previously-requested recheck trigger. Combined with the eleven prior clean review passes on this branch, the full PR at head |
|
Codex Review: Didn't find any major issues. 👍 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
) No related issue: records one native-overlap dismissal; no tracked issue. ## Summary Records a dismissal of the built-in `worker` agent against `session-flow:tidy-work` in the native-surfaces store and regenerates the registry view. ## Fix Name overlap only ('work'): tidy-work is a user-only skill that tidies the gitignored .work memory tiers; the built-in worker agent executes delegated tasks. Different jobs, no routing. Added via `overlap.py dismiss`, then `overlap.py generate`. ## Verification - `overlap.py detect`: 23 candidates, 0 with `store_verdict` null, 0 resurfaced. - `overlap.py self-check`: degraded only on its 2 standing advisories. - `scripts/check-changelog-parity.sh --check` and `--check-bump origin/main`: pass, no bump needed. - `node scripts/generate-catalog.mjs`: catalog already in sync. ## Related #5447 (added tidy-work), #5570 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…laude Design projects (#5610) No related issue: operator ruling on 2026-09-30 to record the built-in ClaudeDesign tool as route rows with Boundary sections; no tracker item was filed for it. ## Summary Claude Code 2.1.285 ships a model-invocable built-in tool, `ClaudeDesign`, that reads and writes files in an existing claude.ai/design project. Two of our skills, `/prototype:explore-directions` and `/visualization:visualize`, produce the same kind of output (mockups, decks, layouts). Until now nothing told the model to use the tool when the person points at an existing project. The operator ruled on 2026-09-30 that these become `route` rows with Boundary sections, because the tool is in the shipped binary and the model can use it, documented or not. ## Fix - `docs/native-surfaces/records.json`: two new rows, `ClaudeDesign` (`builtin-tool`, markers `gated`), verdict `complementary`, integration `route`, one against each skill. Evidence records that the extraction reports the tool's description as unresolved (a separate PR fixes the extractor) and gives the string found by a targeted binary search. - Both skills get a Boundary entry for the tool: `- **`ClaudeDesign` (built-in tool)**: ...`, the routing split, and a mutation gate. The gate says: write only to the project the person named, and only after they asked; report the tool's approval and refusal cases and never retry around them. The four-part records are in `reference/claude-design-tool.md` (prototype) and `context/claude-design-tool.md` (visualization). - Both descriptions start with a phrase that states the whole routing condition: when the person names or links an existing claude.ai/design project, or asks for the work to go into one, and the tool resolves in this session, use the tool; otherwise the skill renders its own output as today. Two restating clauses were cut from each description to stay under the 1,024-character limit (visualize is at 1,000, explore-directions at 975). - These rows are separate from the `design` bundled-skill rows: `design` creates a new Design artifact and only the person can run it, while `ClaudeDesign` works on an existing project. - The native-references Adopters table was updated and that convention's CHANGELOG is now at 3.3.6. prototype is at 0.13.6 and visualization at 0.8.4, each with a CHANGELOG entry. - `Explore -> prototype:explore-directions` came back from detect after the description change. It was dismissed again with its original reason. Affected store rows (quoted, reason field): > The built-in tool reads and writes files in an existing claude.ai/design project; ours builds throwaway variants on the real stack or as a local HTML mockup and keeps only the winning-variant key. When the person names or links an existing claude.ai/design project, or asks for the work to go into one, and the tool resolves in this session, use the tool; otherwise this skill builds its variants as today. > The built-in tool reads and writes files in an existing claude.ai/design project; ours picks a visual form and medium and renders its own output (inline, a local file, or a published Artifact). When the person names or links an existing claude.ai/design project, or asks for the work to go into one, and the tool resolves in this session, use the tool; otherwise this skill renders its own output as today. ## Verification - `overlap.py generate`: wrote docs/native-surfaces.md (66 rows, 79 dismissals). `node scripts/generate-catalog.mjs`: catalog already in sync. - `overlap.py detect --inventory <main>/.work/native-surfaces-2-1-284/inv-2.1.285.json --repo .` (exit 3, degraded inventory): one pair resurfaced, `Explore -> prototype:explore-directions`, and it was dismissed again. The re-run shows 0 resurfaced, 79 suppressed and no unrecorded candidates for either plugin. - `overlap.py self-check`: `SELF-CHECK degraded: 2 advisory(ies), 66 row(s) checked`. Both advisories are pre-existing: older extraction versions and upstream SHA not checked. No problems. - `validate-plugin-contracts.mjs`, `check-changed-skills.sh origin/main` (both skills PASS), `check-skill-description-voice.sh`, `check-changelog-parity.sh --check-bump origin/main`, markdownlint and typos all pass. - The binary facts were cross-checked by string search of `/home/kyle/.local/share/claude/versions/2.1.285`: the description string, the operation names, the `plan_token` flow and the interactive-approval reason. ## Related - #5570, the route-phrase sweep for these plugins - The sibling `design` (suggest) and `design-sync` (defer) rows in the same store 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…plugins (#5629) Closes #4661 ## Summary Eight listed skill descriptions in plugins the issue names were still over 500 characters on `origin/main` (description plus `when_to_use`, whitespace-normalised, YAML-parsed). This PR trims them, so no listed skill in the issue's 18 plugins is over 500. The prior drain PR (#5422) covered `architecture` and `improvement:find`; the native-route sweeps (#5556, #5570) then re-grew several descriptions by prepending a `When the bundled <x> skill resolves ... prefer ...` clause. ## Fix Frontmatter only. Each skill keeps its native-route phrase in shortened form, its quoted trigger phrases and its sibling boundary. No rename, merge or `disable-model-invocation` change, no `plugin.json` description change. | Skill | Before | After | |---|---|---| | `claude-config:audit-instructions` | 838 | 494 | | `claude-config:audit-permission-state` | 677 | 497 | | `claude-config:audit` | 623 | 474 | | `context-budget:audit` | 767 | 439 | | `claude-ops:observability` | 721 | 456 | | `claude-ops:inventory` | 522 | 464 | | `code-tidying:audit-dead-code` | 501 | 439 | | `fleet:reach` | 1112 | 475 | Patch bumps with a CHANGELOG entry: `claude-config` 0.55.1, `claude-ops` 0.77.3, `context-budget` 0.6.48, `code-tidying` 0.25.3, `fleet` 0.2.1. ## Verification - `check-listing-budget.sh plugins/*/skills` aggregate: 131638 chars before (`origin/main`), 129613 after. - Measured by YAML parse over the issue's 18 plugins: 8 skills over 500 on `origin/main`, 0 on this branch. - `check-changelog-parity.sh --check`, `--check-bump origin/main` and `--check-order`: pass. - `validate-plugins.sh`: pass. `validate-plugin-contracts.mjs`: pass (59 setup skills, 4976 files). - `check-changed-skills.sh origin/main`: 8 skills checked, 0 failed. - `check-purged-em-dashes.sh --check`: no em dashes. `markdownlint-cli2` on 13 changed files: 0 issues. - `affected-tests.sh`: no suites selected (every changed file is a no-suite class). - Diff against `origin/main` shows only modified files and no `name:` or `disable-model-invocation` change. ## Related - #4657 (parent), #5422 (earlier trims), #5288 (deleted the cap-exceptions doc), #5556 and #5570 (native-route phrases kept here), #5561 (edits the `claude-config:audit` body, not its frontmatter). - Not covered here: listed skills over 500 in plugins the issue does not name. On this branch that is 82 skills across `adhd`, `ai-slop`, `animation`, `attribution`, `bugs`, `claude-memory`, `codebase-health`, `computer-use`, `context7`, `coupling`, `debugging`, `disk-hygiene`, `domain-driven-design`, `education`, `evals`, `event-storming`, `firecrawl`, `gaming`, `github`, `kindle-dedrm`, `machine-health`, `mcp-tools`, `mutation-testing`, `naming`, `pixel-art`, `playbooks`, `playgrounds`, `playwright`, `plugin-quality`, `prototype`, `repo-fleet-hygiene`, `repo-hygiene`, `review`, `skill-quality`, `songwriting`, `source-control`, `tdd`, `testing`, `toolchain`, `verification`, `visualization`, `wizard`, `writing` and `x`. This PR does not trim them. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
No related issue: operator-directed batch of the remaining native description-phrase sweep units, tracked in the sweep PRs listed under Related.
Summary
Ships the five remaining description-phrase sweep units (context-budget, evals, playbooks, prototype, visualization) as one PR, per operator direction.
Fix
context-budget0.6.47:/context-budget:auditdescription routes a plain-language account of this session's tokens to the bundledexplain-usageskill; this skill keeps startup cost, per-tool attribution, and before/after checks.evals0.3.8:/evals:methodologydescription routes the model-and-effort sweep over an existing suite toclaude-api'shillclimb; this skill keeps suite and criteria design.playbooks0.15.2:/playbooks:fable-5description routes current model, price, and API facts and the cost audit to the bundledclaude-apiskill.prototype0.13.5 andvisualization0.8.3: the bundleddesignskill is model-invocation-disabled in 2.1.285, so both rows move fromroutetosuggest. The description phrase is dropped and the Boundary offers/designto the person.- **(<class>)**: what it doestemplate and no longer assert availability.docs/native-surfaces/records.json: the threerouterows carrybaked.description_phrase: true; the twodesignrows aresuggestwithsuggest_sentence: true.docs/native-surfaces.mdregenerated withoverlap.py generate./designevidence: a targeted string search of the 2.1.285 binary shows thedesignregistration is a user-only design-Artifact creator ("Make a new Design artifact from a brief"), not the claude.ai/design hub (now a separateClaudeDesigntool). The canvas behavior in both skills is restated from the commands and artifacts docs fetched 2026-09-30; the converteddesignrows dropbudget_caveatand the "versioned" claim.context-budget:auditgains asuggestrow and a## Boundarysection for the built-in/contextcommand (2.1.285: builtin-command, "Visualize current context usage as a colored grid", argument hint[all], gated, model invocation disabled), with four-part records inreference/native-context.md.overlap.py dismiss:Bash(builtin-tool) vsbash-format:check: "Name overlap only: bash-format:check is a read-only check that the shfmt and shellcheck binaries resolve for the bash-format hook; the built-in Bash tool executes shell commands. Different jobs, no routing."PowerShell(builtin-tool) vspowershell-format:check: "Name overlap only: powershell-format:check is a read-only check that pwsh, PSScriptAnalyzer, jq and node resolve for the powershell-format hook; the built-in PowerShell tool executes PowerShell commands. Different jobs, no routing."Verification
overlap.py generate --check: in sync (64 rows, 78 dismissals).overlap.py self-check: degraded on the two standing advisories only (older extraction versions, no--upstream-sha).overlap.py detectagainst the 2.1.285 inventory: 0 resurfaced dismissals, 0 orphaned, 0 unruled discovered pairs.git grep -i 'ships with Claude Code'over the five plugins' SKILL.md files: empty.validate-plugin-contracts.mjs,check-changed-skills.sh origin/main(7 skills, 0 failed),check-skill-description-voice.sh(5 PASS),check-changelog-parity.sh --check,--check-bump,--check-order,--check-preserved,check-skill-portability.sh,check-purged-em-dashes.sh, andmarkdownlint-cli2on the touched files: all pass.node scripts/generate-catalog.mjs: in sync.Related
🤖 Generated with Claude Code