Skip to content

Close the remaining findings from the full-catalog read - #37

Merged
cbrock84 merged 1 commit into
mainfrom
claude/import-agents-drive-gmci3h
Sep 3, 2026
Merged

Close the remaining findings from the full-catalog read#37
cbrock84 merged 1 commit into
mainfrom
claude/import-agents-drive-gmci3h

Conversation

@cbrock84

@cbrock84 cbrock84 commented Sep 3, 2026

Copy link
Copy Markdown
Owner

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 ## Never block, 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.py holds 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.

lint hits on the tree before this change
bullet lacks terminal punctuation 59 — mostly the deliberate style
block mixes the two styles 5 — every affected file, nothing else

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 --porcelain wraps any path containing a space in literal quotes and octal-escapes non-ASCII bytes, so a changed file at skills/a b.md arrived as "skills/a b.md" and failed the startsWith() 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 finance as the surface under test:

 M "plugins/finance/skills/a b.md"
RM plugins/finance/skills/plain.md -> "plugins/finance/skills/re named.md"
 M "plugins/finance/skills/\303\274n\303\257/c.md"

before:  inside plugins/finance/ : 0 of 3
after:   inside plugins/finance/ : 3 of 3

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.md gains 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 ## Never blocks internally consistent, manifests parse.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FaQP2WCqeFYH7s9pi1CJ5u

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
@cbrock84
cbrock84 marked this pull request as ready for review September 3, 2026 02:12
@cbrock84
cbrock84 merged commit 4fb761f into main Sep 3, 2026
1 check passed
@cbrock84
cbrock84 deleted the claude/import-agents-drive-gmci3h branch September 3, 2026 02:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants