Skip to content

refactor(setup): split setup and isolated-setup-update, completing the family - #1337

Merged
potiuk merged 2 commits into
apache:mainfrom
potiuk:refactor/slim-setup-update
Sep 22, 2026
Merged

potiuk merged 2 commits into
apache:mainfrom
potiuk:refactor/slim-setup-update

Conversation

@potiuk

@potiuk potiuk commented Sep 22, 2026

Copy link
Copy Markdown
Member

Summary

The last two setup skills over the 5,000-token budget from #1332. With these, every skill in the family is under it.

skill before after
isolated-setup-update 5,512 4,356
setup 8,853 4,971

Nothing 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

  • Skill change — two bodies split into four new siblings
  • Documentation — regenerated counts

isolated-setup-update: inventory masquerading as instruction

Item 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, and git-hooks/ whose shape depends on which Step P.3 flavour installed it. The claude-iso.sh rename 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.py is 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 duplications

Moved — 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 in the text — "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, 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-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 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-files clean, lychee included.
  • skill-and-tool-validate — only the pre-existing override-contract finding, unrelated.
  • isolated-setup-update: 14/15, against a 14/15 baseline measured twice on unmodified main; 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 setup eval 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 — lychee caught a real one: a #golden-rules anchor that stopped resolving once the text left SKILL.md. Worth a run before merge.

Notes for reviewers

An earlier baseline run of the update suite 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: setup 4,971 · verify 4,967 · doctor 4,897 · upstream-fix 4,614 · update 4,356 · shared-config-sync 4,185 · install 3,879 · override-upstream 3,960 · status 2,321 · privacy-llm 2,055. Always-on across all ten: 1,378, down from 2,574.

🤖 Generated with Claude Code

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
@potiuk
potiuk merged commit 8725513 into apache:main Sep 22, 2026
10 checks passed
@potiuk potiuk added capability:platform Framework / agent substrate skills (install, verify, doctor, override, status, setup bootstrap) family:docs Docs, MISSION.md, READMEs family:setup setup-* skills labels Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

capability:platform Framework / agent substrate skills (install, verify, doctor, override, status, setup bootstrap) family:docs Docs, MISSION.md, READMEs family:setup setup-* skills

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant