Close the remaining findings from the full-catalog read - #37
Merged
Conversation
Follow-up to the two mechanical fixes already merged. Five items, each verified against the tree first. Never blocks. A fifth skill carried the same authoring artifact as the four already repaired — a second list of rules spliced into an existing `## Never` block in a different voice. It was missed because nothing was orphaned there, so a split-detecting lint could not see it. All eleven spliced bullets are now in the house voice, and `scripts/check-never-blocks.py` fails the build on a block whose bullets disagree on terminal punctuation. That is the precise signature: two styles are in use across the catalog and both are deliberate, but both inside one block is what a splice looks like. On the tree before this change it flagged all five affected files and nothing else, where a flat terminal-punctuation rule produced fifty-nine hits, mostly style. Surface guard. `git status --porcelain` quotes any path containing a space and octal-escapes non-ASCII bytes, so a changed file at `skills/a b.md` arrived as `"skills/a b.md"` and failed the prefix test — the guard reported no violation for a file squarely inside another agent's surface. Reproduced in a throwaway repository: three such paths, zero detected before, three after. Both commands now read NUL-delimited output, which also removes the rename-arrow ambiguity. Dangling reference. A skill pointed at a repository file that ships in no plugin, so it resolved for a reader of this repository and dangled for everyone who installed the department. The point is stated inline instead. Contradictory threshold. Two skills in one department gave different queue utilization thresholds. Aligned on the lower one, which is where the non-linearity actually begins, with the chief-level skill pointing at the specialist that holds the working version. Overlapping claims. One description promised affiliate coverage that another department covers properly and this skill never had; it now hands affiliates over explicitly. A second pair had a one-way boundary note — the reciprocal is now stated, so the split is visible from both sides. D35 records the one open convention question and, so the next reader does not re-raise it, the one reported inconsistency that is a misreading: the agent count describes the implementation the method was extracted from, not this roster. CONTRIBUTING's check table listed four of the ten checks; the decision log's status table stopped at D16 while eighteen later entries existed. Both are current. All ten checks pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FaQP2WCqeFYH7s9pi1CJ5u
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.
Follow-up to the two mechanical fixes already merged. Each item was verified against the tree before being acted on; two of the reported findings turned out to be wider than reported and one turned out to be a misreading.
A fifth skill had the same defect
Four skills had a second list of rules spliced into an existing
## Neverblock, landing inside a wrapped bullet and stranding its continuation on an unrelated rule. Those are fixed. A fifth carried the same splice in the same foreign voice — nothing was orphaned there, so a lint keyed on the split could not see it.All eleven spliced bullets are now in the house voice, and
scripts/check-never-blocks.pyholds it.Why this check and not the obvious one. Two bullet styles are in use across the catalog and both are deliberate: most blocks are bare imperatives ending in a period, while the chief-level blocks are
Never …/Do not …lines without terminal punctuation. Either is fine. What is never fine is both inside one block, because that is exactly what a list spliced in from elsewhere looks like.Red on the pre-fix tree, green after, and red on the tree as it stood before the earlier fix too.
The surface guard missed real violations
git status --porcelainwraps any path containing a space in literal quotes and octal-escapes non-ASCII bytes, so a changed file atskills/a b.mdarrived as"skills/a b.md"and failed thestartsWith()prefix test. The guard then reported no violation for a file squarely inside another agent's surface — the one thing it exists to catch.Reproduced in a throwaway repository with three such paths, using
financeas the surface under test:Both commands now read NUL-delimited output, which also removes the need to guess whether a
->is a rename arrow or part of a filename. Latent in this tree — no such paths exist here — but live for anyone who installs the hierarchy skill and runs the guard against their own repository, which is the point of shipping it.A skill referenced a file it does not ship
A skill pointed at a repository document that ships in no plugin. It resolves for a reader of this repository and dangles for everyone who installed the department. The point is now stated inline.
A blanket dead-path check would false-positive on the hierarchy skill, whose
docs/paths are instructions to create those files in the reader's own repository rather than references to files here. The rule is written into CONTRIBUTING with that exception named, rather than enforced by a checker that would cry wolf.Two skills in one department gave different thresholds
One said queue utilization above roughly 80% is where wait times rise sharply; the other headed a section with ninety percent. Both statements are individually true, but a reader asking one department gets two numbers.
Aligned on the lower one — that is where the non-linearity actually begins, and it is the specialist skill that owns the topic. The chief-level skill now points at the specialist for which threshold applies to a given queue.
Two overlapping claims, resolved in opposite directions
One description promised affiliate coverage. The body never had it, and another department covers affiliates properly — mechanics, commercial terms, fraud control. The claim is dropped and the skill hands affiliates over explicitly, which also fixes the routing: a question about affiliates should not load the skill that says least about them.
A second pair already had a boundary note, but only on one side. The reciprocal is now stated in the other skill's description and body, so the split is visible whichever one a reader reaches first. Both survive — they are genuinely different jobs, one about a format across platforms and one about a single platform in depth.
Recorded rather than changed
docs/DECISION-LOG.mdgains D35 for the one open convention question — whether description shape should be constrained beyond the length and promise-versus-coverage checks that already exist. Recommendation is to leave it unconstrained; the two existing checks catch the failures that cost something, and shape is not one of them.The same entry records the one reported inconsistency that is a misreading, so the next reader does not raise it again: the agent count in the hierarchy skill describes the implementation the method was extracted from, not this roster. Both instances say "extracted from". Changing the number would make it wrong.
Two indexes were stale
CONTRIBUTING's check table listed four of the ten checks CI runs. The decision log's status table stopped at D16 while eighteen later entries existed — an index that omits over half its entries is how an open decision goes unnoticed. Both are current.
Verification
./scripts/check-all.sh— all ten green: 172 skills valid, provenance clean, README / social card / org chart current, 277 skill references resolve, 0 British spellings, 172## Neverblocks internally consistent, manifests parse.🤖 Generated with Claude Code
https://claude.ai/code/session_01FaQP2WCqeFYH7s9pi1CJ5u