feat(skills): argument-hint house style, gate, and fleet rewrite (#3542) - #5042
Conversation
|
PR body contract — issue linkage This PR body conforms to the issue-linkage contract. Nothing to do. |
a8fb285 to
05faaeb
Compare
Add the owner doc for argument-hint grammar and a fleet-contract check that fails an empty hint and warns when a hint is over 100 characters or malformed. The six named frontmatter fixes from the audit are already on main. Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
Move examples, defaults, and flag catalogs out of autocomplete hints that exceeded 100 characters or broke the grammar, and keep that detail in the skill body. Each touched plugin is bumped. The contract test now requires the shipping tree to report zero argument-hint warnings. Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
05faaeb to
a253626
Compare
# Conflicts: # plugins/claude-config/CHANGELOG.md # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md # plugins/claude-ops/skills/audit-performance/SKILL.md # plugins/claude-ops/skills/audit-skill-visibility/SKILL.md # plugins/discipline/.claude-plugin/plugin.json # plugins/discipline/CHANGELOG.md # plugins/disk-hygiene/CHANGELOG.md
# Conflicts: # plugins/architecture/CHANGELOG.md # plugins/claude-ops/CHANGELOG.md # plugins/code-tidying/CHANGELOG.md # plugins/debugging/CHANGELOG.md # plugins/discipline/CHANGELOG.md # plugins/planning/CHANGELOG.md # plugins/planning/skills/prd/SKILL.md # plugins/session-flow/CHANGELOG.md # plugins/source-control/CHANGELOG.md # plugins/work-items/CHANGELOG.md
…t gate The previous commits overwrote the validator, its test, and three SKILL.md files with unrelated bytes. Those files are restored from main. The validator now fails an empty argument-hint and warns on an over-budget or malformed one, naming the owner doc; the test covers each outcome and asserts the shipping tree draws zero warnings. The prd, workflow, and clean hints are shortened with the detail moved into the body. Refs #3542 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PT4esxbdC7eQiwQxy35Mie
…oken ref The relocated argument detail for audit-instructions joins its existing Arguments section instead of a new block, keeping the body at 500 lines. The skill-authoring pointer names the validator without a repo path the skill checker reads as a broken skill-internal reference. Refs #3542 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PT4esxbdC7eQiwQxy35Mie
The earlier merge replaced the audit skill body with a stale copy, reverting main's Windows install line, the --operator-deny flag, and the token-count wording. The body is main's again, with only the shortened argument-hint and its relocated full form. Refs #3542 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PT4esxbdC7eQiwQxy35Mie
# Conflicts: # plugins/disk-hygiene/CHANGELOG.md # plugins/docs-hygiene/CHANGELOG.md # plugins/docs-hygiene/skills/extract-ssot/SKILL.md # plugins/planning/CHANGELOG.md # plugins/planning/skills/interview/SKILL.md # plugins/session-flow/CHANGELOG.md
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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 52aef19bfe
ℹ️ 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".
…hint-hygiene-37e9 # Conflicts: # plugins/ai-briefing/CHANGELOG.md # plugins/architecture/.claude-plugin/plugin.json # plugins/architecture/CHANGELOG.md # plugins/claude-config/.claude-plugin/plugin.json # plugins/claude-config/CHANGELOG.md # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md # plugins/claude-ops/skills/audit-skill-visibility/SKILL.md # plugins/code-tidying/.claude-plugin/plugin.json # plugins/code-tidying/CHANGELOG.md # plugins/context-budget/CHANGELOG.md # plugins/debugging/CHANGELOG.md # plugins/discipline/CHANGELOG.md # plugins/discovery/.claude-plugin/plugin.json # plugins/discovery/CHANGELOG.md # plugins/discovery/skills/research/SKILL.md # plugins/disk-hygiene/.claude-plugin/plugin.json # plugins/disk-hygiene/CHANGELOG.md # plugins/education/CHANGELOG.md # plugins/evals/.claude-plugin/plugin.json # plugins/evals/CHANGELOG.md # plugins/implementation/.claude-plugin/plugin.json # plugins/implementation/CHANGELOG.md # plugins/instruction-placement/CHANGELOG.md # plugins/machine-health/.claude-plugin/plugin.json # plugins/machine-health/CHANGELOG.md # plugins/planning/.claude-plugin/plugin.json # plugins/planning/CHANGELOG.md # plugins/playbooks/.claude-plugin/plugin.json # plugins/playbooks/CHANGELOG.md # plugins/plugin-quality/.claude-plugin/plugin.json # plugins/plugin-quality/CHANGELOG.md # plugins/prototype/CHANGELOG.md # plugins/prototype/skills/explore-directions/SKILL.md # plugins/repo-fleet-hygiene/CHANGELOG.md # plugins/repo-fleet-hygiene/skills/audit/SKILL.md # plugins/repo-fleet-hygiene/skills/setup/SKILL.md # plugins/repo-hygiene/CHANGELOG.md # plugins/review/.claude-plugin/plugin.json # plugins/review/CHANGELOG.md # plugins/session-flow/CHANGELOG.md # plugins/skill-quality/CHANGELOG.md # plugins/skill-quality/skills/check/SKILL.md # plugins/source-control/.claude-plugin/plugin.json # plugins/source-control/CHANGELOG.md # plugins/testing/CHANGELOG.md # plugins/testing/skills/run-e2e/SKILL.md # plugins/work-items/CHANGELOG.md
The hint gate strips a trailing YAML comment before its empty check, so `argument-hint: "" # none` fails like `""`. Hints that main changed since the branch point are brought under the 100-character style. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WejvGhkHUSWPRim2caW2Wh
|
Claude finished @kyle-sexton's task in 4m 55s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 1m 5s —— View job Security review complete
No security issues found. This PR is a documentation and frontmatter hygiene change (
GitHub Actions hardening is out of scope for this lane (zizmor's advisory lane); no workflow files are touched by this PR regardless. |
…3992) (#5129) Closes #3992 ## Summary New `/repo-fleet-hygiene:sync` skill. It moves each canonical checkout onto the remote default branch (`git ls-remote --symref origin HEAD`) and fast-forwards it. Dirty work is parked in a linked worktree through source-control's `worktree-create.sh --existing-branch`. Bare invocation is a dry-run plan; mutation needs `--apply` plus one confirmation. ## Fix - `plugins/repo-fleet-hygiene`: `sync` skill and `sync-fleet.sh`, plus a shared scope resolver (explicit args, fleet config, named paths, `ghq` roots, cwd, else exit 3) that `audit` also uses as its no-scope fallback. Non-fast-forward, dubious ownership, and a partial stash apply are skipped and reported; nothing is reset. 0.23.43. - The skill passes `--yes` only after showing the user the dry-run plan (its `repos:` count and each repo's action row) and getting the user's explicit go-ahead, in non-terminal runs too. - The sync argument hint is 92 characters in the `[optional]` / `<required>` house style, so it passes the argument-hint gate proposed in #5042. - `plugins/source-control`: `worktree-create.sh --existing-branch` checks out an existing local branch; it cannot be combined with `--base-ref`. 0.62.16. ## Verification - `sync-fleet.test.sh`, `scope-resolve.test.sh`, `audit-fleet.test.sh`, `worktree-create.test.sh`: pass. - `scripts/validate-plugins.sh`, `scripts/check-changelog-parity.sh --check --check-order`, `node scripts/validate-plugin-contracts.mjs`: pass. - `scripts/check-changed-skills.sh origin/main`: the repo-fleet-hygiene and source-control skills pass. It also ran disk-hygiene's `clean` skill, which this PR does not touch; its `hygiene.test.sh` fails 11 cases in `test_guard_allows_literal_readonly_supporting_bash_commands`, which look machine-local (`/usr/bin/*` guard paths). - Merged `origin/main`. The `audit-fleet.sh` conflict keeps both main's `SKIP_APPEND_NAMES` guard and this PR's `NAMED_ARGS` guard. ## Related - Supersedes draft #5106. - Argument-hint style: #5042. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01WejvGhkHUSWPRim2caW2Wh --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…hint-hygiene-37e9 # Conflicts: # docs/plugin-philosophy.md # plugins/claude-config/.claude-plugin/plugin.json # plugins/claude-config/CHANGELOG.md # plugins/claude-config/skills/unhobble/SKILL.md # plugins/code-tidying/.claude-plugin/plugin.json # plugins/code-tidying/CHANGELOG.md # plugins/code-tidying/skills/batch-simplify/SKILL.md # plugins/playbooks/.claude-plugin/plugin.json # plugins/playbooks/CHANGELOG.md # plugins/repo-fleet-hygiene/.claude-plugin/plugin.json # plugins/repo-fleet-hygiene/CHANGELOG.md # plugins/source-control/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 3m 11s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 1m 59s —— View job Security review (
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WejvGhkHUSWPRim2caW2Wh
…hint-hygiene-37e9 # Conflicts: # plugins/claude-config/CHANGELOG.md # plugins/claude-ops/CHANGELOG.md # plugins/instruction-placement/CHANGELOG.md # plugins/planning/CHANGELOG.md # plugins/planning/skills/prd/SKILL.md # plugins/session-flow/CHANGELOG.md # plugins/session-flow/skills/workflow/SKILL.md # plugins/source-control/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 3m 5s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 3m 12s —— View job Security review (
|
`batch-modes` is not a token the router accepts. The hint now shows the `<tier>-batch` placeholder and the Arguments line lists the five forms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WejvGhkHUSWPRim2caW2Wh
…hint-hygiene-37e9 # Conflicts: # plugins/ai-briefing/CHANGELOG.md # plugins/discipline/CHANGELOG.md # plugins/disk-hygiene/CHANGELOG.md # plugins/knowledge/CHANGELOG.md # plugins/songwriting/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 1m 32s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 2m 13s —— View job Code review (
|
…hint-hygiene-37e9 # Conflicts: # plugins/claude-config/CHANGELOG.md # plugins/claude-memory/CHANGELOG.md # plugins/claude-ops/CHANGELOG.md # plugins/discovery/CHANGELOG.md # plugins/mcp-tools/CHANGELOG.md # plugins/overengineering/CHANGELOG.md # plugins/playbooks/CHANGELOG.md # plugins/playbooks/skills/skill-authoring/SKILL.md # plugins/source-control/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 1m 41s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 1m 36s —— View job Code review (
|
…hint-hygiene-37e9 # Conflicts: # plugins/claude-ops/.claude-plugin/plugin.json # plugins/claude-ops/CHANGELOG.md # plugins/context7/CHANGELOG.md # plugins/instruction-placement/CHANGELOG.md # plugins/source-control/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 52s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 1m 55s —— View job Code review (
|
…ne caveat scoped to branch tier `scope` returned one line per resolved row and skipped the Brief, so a `deferred` or `blocked` row, which a normal run writes to the Brief's `### Deferred questions` with an arbiter, vanished for the caller. `Scope decisions:` now also returns each such row as a `Deferred:` or `Blocked:` line that leads with its `Q<N>` id and carries the arbiter (`/planning:plan` by default, or `USER-RESERVED`). A `Blocked:` line, or a `Deferred:` line tagged `USER-RESERVED`, tells the caller to stop and ask the user. The ledger and the register gate are unchanged. The Step 4 "Neither slice is a durable home" prune caveat now applies under `contract_tier: branch` only. Under `contract_tier: local` the contract sits in the memory slice, which never reaches git, so nothing is pruned. The Action Router `scope` row drops its tracker link, and the three Stance recommendation-basis links point at the plugin-shipped context/recommendation-basis.md instead of an org URL. Adds eval case 26, which grades `scope` returning resolved and unresolved rows and writing no PLAN.md. Closes #4286 (all three acceptance criteria re-checked on this branch: the caveat states the slice is pruned before merge and is not a durable home, names an ADR, a spec or a tracker item as the graduated destination, and is scoped to the branch tier) Refs #4502 Digest re-pins for human confirmation Each region below was read from `git diff` before its digest was recomputed with the commands in the test header. In none of them is STOP-on-gap or the auto-guard weakened, qualified or contradicted. No phrase pin, pin_once, within or pin_exact fired, and the `lock` router row, the Step 1.5 `lock` routing line and the auto-guard paragraph are byte-identical. - SKILL.md Stance section, be11096...->c2dd078...: three recommendation-basis links repointed at the plugin-shipped file or dropped. The partial-round no-silent-resolve rule is untouched. - SKILL.md Step 4 section, 3824691...->402e1ba...: the prune caveat is qualified to the branch tier and the `scope` persist path returns `deferred` and `blocked` rows with their arbiter. That extends the rule that a choice never silently disappears to a path with no Brief. It resolves no row and relaxes neither the register gate nor the ledger. - SKILL.md Action Router section, ff84d3f...->0fbfcb7...: the `scope` row lost its tracker link. The `lock` row is byte-identical. - Eval-case roster, a3038d1...->2d0f369...: case 26 added. It grades a `blocked` `USER-RESERVED` row that is returned and never assumed, so it agrees with cases 15 and 16. - SKILL.md frontmatter, bd304c4...->881ecec...: not caused by this change. The pin was already stale on origin/main since e544012 (#5042) shortened `argument-hint` to `[action] [topic]`. The description and metadata keys are unchanged, and no key states or qualifies either defense. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EugXnFddtpHcY5gTuyEirB

Closes #3542
Summary
Adds a house style for the
argument-hintfrontmatter key, enforces it in the fleet contract validator, and brings every over-budget or malformed hint in the fleet into line. The six concrete fixes from the original issue body had already landed on main; this PR does the rescoped work from the triage brief.Fix
docs/conventions/argument-hint/README.md(withCHANGELOG.md, 1.0.0) states the style: a 100-character budget counted in code points,[optional]and<required>slots, a spaced|between top-level alternatives, and no em dash, parenthetical example, orDefault:prose. A skill with no arguments omits the key. The convention registry indocs/plugin-philosophy.mdand the skill-authoring playbook point at it without restating it.scripts/validate-plugin-contracts.mjsfails an empty hint. It warns, without failing, on a hint that is over budget, a block scalar, or malformed. Each message names the owner doc.scripts/validate-plugin-contracts.test.shcovers conforming, empty, over budget (101 characters, with 100 as the boundary), and each malformed shape. It also asserts that the shipping tree draws zero warnings, so hint drift fails CI even though the validator only warns.**Arguments.**line (foraudit-instructions, into its existing Arguments section); none is deleted. All 39 touched plugins,playbooksincluded, are bumped above main with a CHANGELOG entry.validate-plugin-contracts.mjs, its test, and theprd,workflow, andcleanSKILL.md files with other files' contents. A later merge had also reverted main'scontext-budgetaudit body. Those files are restored from main, and only the intended hint edits are re-applied.**Arguments.**line;audit-instructionsalso keeps its full-form sentence andskill-authoringkeeps its pointer paragraph. Four hints that main had changed since the branch point (discovery:research,repo-fleet-hygieneauditandsetup,skill-quality:check) are rewritten to the style, with main's full forms in the Arguments line. All 39 plugins are re-bumped one patch above main.docs/conventions/skill-argument-shape/, which owns argument order and notation. The two docs now split scope: the shape doc keeps order, flags, and notation and points here for the hint string's budget and punctuation; this doc's "What this convention is not" points back at it; both registry rows stay with non-overlapping scopes. The shape doc's worked-fit rows now quote the livedisk-hygiene:cleanandrepo-hygiene:cleanhints. Main's newwatchphase (unhobble) andin-placetoken (batch-simplify,tidy) stay in the rewritten hints.argument-hint: "" # noneandargument-hint: # nonenow fail as empty (two new test cases).Verification
validate-plugin-contracts.test.sh92 pass, 0 fail, including zero argument-hint warnings on the shipping tree.validate-plugins.shandcheck-changelog-parity.sh --check --check-orderpass.Run locally against
origin/main(88dd7e1):validate-plugin-contracts.test.sh(90 pass, 0 fail),validate-plugin-contracts.mjs(zero warnings),validate-plugins.sh,check-skill-count-claims.sh --check, skill and shell portability,check-fixture-git-isolation.sh --check, changelog parity in all four modes,check-stale-base-overlap.sh --check,check-purged-em-dashes.sh, the catalog and cheat-sheet--check, typos, markdownlint, editorconfig, shellcheck, and the context-budget suites.check-changed-skills.sh origin/main: 108 of 109 pass.disk-hygiene:cleanfails only its 11test_guard_allows_literal_readonly_supporting_bash_commandssubtests, which fail the same way on clean main on this machine.affected-tests.sh --run: 11 suites fail (for example github, guardrails, code-metrics, and hook-census). The same 11 fail on a cleanorigin/maincheckout here, and none of them is touched by this diff.Related
$Nescape criterion to the same validator. This gate sits beside it and reuses its SKILL.md scan.🤖 Generated with Claude Code
https://claude.ai/code/session_01PT4esxbdC7eQiwQxy35Mie