Repository navigation
refactor(setup): split setup and isolated-setup-update, completing the family - #1337
Merged
Merged
Conversation
Item 3 of *What to check* was 1,592 tokens — nearly a third of the body — and most of it was not instruction but inventory: a single run-on paragraph naming every user-scope file, the framework source it pairs with, and the exceptions, with three decision rules tangled through it. The inventory is now `script-inventory.md`, as a table plus the four pairs that are not a plain content diff: symlinks compared by target, the two Python packages diffed file-by-file, the eval harness where absent-on-both-sides is the default posture rather than drift, and `git-hooks/` whose shape depends on which Step P.3 flavour installed it. The `claude-iso.sh` rename migration went with it — it applies only when a pre-rename copy exists. What stayed in the body is what the step decides: diff every copy against its source, report as a unified diff, never re-`cp`; establish the agent-guard wiring *before* diffing anything, because with the plugin enabled an absent `agent-guard.py` is the expected shape and reporting it missing sends the user to install a second copy of a guard already running; and the `Co-Authored-By:` canary that proves the hook actually fires, whatever the files say. Baseline on unmodified `main` was 14/15 with `step-after-report/case-2-framework-behind` failing, twice in a row. After the split: 14/15, the same case. An earlier run reported four cases *errored* rather than failed; a second baseline run showed zero, so that was transient and not a property of the tree. Generated-by: Claude Opus 5
The last skill in the family over budget, and the one with the most callers. Nothing here was reworded for brevity's sake; every cut is either content moved to where it already belonged or a second telling of something the file says once already. Four moves. `Failure modes` is read when something has already gone wrong, so it is `failure-modes.md`. The pinned-snapshot machinery marked its own cold half — *"a marketplace install needs none of it"* — and marketplace is the default, so it is `snapshot-model.md`, together with the four golden rules that bind only on that path: the lock files, drift remediation, `.gitignore`, and copy-versus-symlink. Rule 1 stays inline; every other skill's preamble cites it. Three cuts of duplication. The detail-file index restated the purpose of each sub-action, which *Sub-actions* already gives keyed by invocation — it now names only the files no invocation dispatches to. The prose after the sub-actions table re-explained the `main-checkout-only` marker the table already carries on every affected row. And golden rule 8 listed which skills belong to the two always-on families, directly under a rule saying membership is read from frontmatter and never inferred — a list that contradicts its own rule and goes stale on the next skill added. **The eval suite was not run.** It is 83 cases and the maintainer declined the run this time. That matters more here than it did for the other four: this suite has graded 81, 79 and 80 of 83 across three runs of an unchanged tree, so it could not have adjudicated a wording change anyway — but these are structural moves plus duplicate removal, the validator is green, and `lychee` caught the one real breakage, a `#golden-rules` anchor that no longer resolved once the text left `SKILL.md`. Worth a run before merge. Generated-by: Claude Opus 5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The last two setup skills over the 5,000-token budget from #1332. With these, every skill in the family is under it.
isolated-setup-updatesetupNothing was reworded for brevity's sake. Every cut is either content moved to where it already belonged, or a second telling of something the file says once already.
Type of change
isolated-setup-update: inventory masquerading as instructionItem 3 of What to check was 1,592 tokens — nearly a third of the body — and most of it was a single run-on paragraph naming every user-scope file, the framework source it pairs with, and the exceptions, with three decision rules tangled through it.
The inventory is now
script-inventory.md: a table, plus the four pairs that are not a plain content diff — symlinks compared by target, two Python packages diffed file-by-file, the eval harness where absent-on-both-sides is the default posture rather than drift, andgit-hooks/whose shape depends on which Step P.3 flavour installed it. Theclaude-iso.shrename migration went with it, since it applies only when a pre-rename copy exists.What stayed is what the step decides, including the one most worth keeping in front of the reader: establish the agent-guard wiring before diffing anything, because when the plugin is enabled an absent
~/.claude/scripts/agent-guard.pyis the expected shape, and reporting it missing sends the user to install a second copy of a guard that is already running.setup: two moves, three duplicationsMoved —
Failure modesis read when something has already gone wrong, so it isfailure-modes.md. The pinned-snapshot machinery marked its own cold half in the text — "a marketplace install needs none of it" — and marketplace is the default, so it issnapshot-model.md, together with the four golden rules that bind only on that path: the lock files, drift remediation,.gitignore, copy-versus-symlink. Rule 1 stays inline — every other skill's preamble cites it.Duplication removed — the detail-file index restated each sub-action's purpose, which Sub-actions already gives keyed by invocation; it now names only the files no invocation dispatches to. The prose after the sub-actions table re-explained the
main-checkout-onlymarker the table already carries on every affected row. And golden rule 8 listed which skills belong to the two always-on families, directly beneath a rule saying membership is read from frontmatter and never inferred — a list that contradicts its own rule and goes stale on the next skill added.Test plan
prek run --all-filesclean,lycheeincluded.skill-and-tool-validate— only the pre-existingoverride-contractfinding, unrelated.isolated-setup-update: 14/15, against a 14/15 baseline measured twice on unmodifiedmain; the same single case (step-after-report/case-2-framework-behind) fails on both.setup: the 83-case suite was not run — see below.The gap, stated plainly
I did not run the
setupeval suite. It is 83 cases and the run was declined this time.It matters less than it sounds: that suite has graded 81, 79 and 80 of 83 across three runs of an unchanged tree, so it could not have adjudicated a wording change in any case, and what is here is structural moves plus duplicate removal rather than rewording.
But the class of error is live —
lycheecaught a real one: a#golden-rulesanchor that stopped resolving once the text leftSKILL.md. Worth a run before merge.Notes for reviewers
An earlier baseline run of the
updatesuite reported four cases errored rather than failed; a second run on the same tree reported zero. Transient, not a property of the tree — recorded here so it is not mistaken for a regression if it recurs.With this, the family sits at:
setup4,971 ·verify4,967 ·doctor4,897 ·upstream-fix4,614 ·update4,356 ·shared-config-sync4,185 ·install3,879 ·override-upstream3,960 ·status2,321 ·privacy-llm2,055. Always-on across all ten: 1,378, down from 2,574.🤖 Generated with Claude Code