Skip to content

feat(audit): check 79 pins doc facts to the tree; README lists all 10 gates (#388) - #401

Merged
wasikarn merged 1 commit into
developfrom
claude/audit-check-79-388
Oct 3, 2026
Merged

wasikarn merged 1 commit into
developfrom
claude/audit-check-79-388

Conversation

@wasikarn

@wasikarn wasikarn commented Oct 3, 2026

Copy link
Copy Markdown
Owner

What

  • New audit check 79 (skills/meta/harness-audit/scripts/checks/79-doc-facts-match-tree.sh). It compares prose facts to values taken from the tree:
    • The manifest's "Nine computational deny/ask gates (...) plus a SubagentStop verdict-check gate" (plugin.json and marketplace.json): N + 1 must equal the gate ids in hooks/hook-registry.json, with -handback twins dropped.
    • The README gate table rows must match that same id set. The WARN names the missing or extra id.
    • README Skills (N) must equal the SKILL.md count minus MANIFEST_EXPECTED_EXCLUDED. README Agents (N) and agent-authoring-conventions.md's "N-agent fleet" must equal the agents/*.md count.
    • The harness-audit SKILL.md "What it checks" ids must match audit.sh _exp_ids. Only an id at the start of a segment counts, so 25 words and 1536 chars are not read as ids.
    • plugin.json .version must equal the marketplace.json entry's version.
  • Severity is WARN. An absent source file gives an INFO skip. A file that is present but has lost its pinned phrase WARNs, so rewording the prose cannot silently drop the pin.
  • The README gate table now has a row for gate:tool:routine-trigger-guard, so it lists all 10 gates.
  • Check 79 is registered in _exp_ids and in SKILL.md's check table (Doc rot row). The test header now lists 79. The fleet-good manifest gained a description that carries the pinned phrase.

Why

The README listed 9 of the 10 gates and has never named routine-trigger-guard since that gate landed (1.1.151). This is the second time a stated count has drifted (CHANGELOG records an earlier "6 gates" drift), so per the repeated-mistake rule it gets a check.

Proof

  • Test first: I added 9 fixtures (check-79-*) and their asserts before the check existed. The self-test went red with 18 FAIL, because --only 79 matched no fragment.
  • After the check was added: self-test: 144 passed, 0 failed.
  • Live run before the README fix: WARN: README.md gate table lacks gate:tool:routine-trigger-guard (in hooks/hook-registry.json). After the fix: 0 WARN.
  • Mutation pass: 9 mutants, each kills at least one check-79 assert (drop the +1, keep the handback twins, ignore the exclusion list, read any number as an id, remove the vanished-phrase guard, flip the version compare, skip missing set members, drop the agent-doc pin, silence the INFO skip).
  • audit.sh: 0 CRIT, 0 WARN. GAUNTLET_JOBS=2 scripts/run-gauntlet.sh: all layers passed.

No manifest bump.

Closes #388

… gates (GH #388)

Check 79 compares prose facts to values the tree derives: the manifest
gate count and README gate table vs hook-registry.json gate ids, README
Skills/Agents counts and the agent-doc fleet size vs the tree, the
harness-audit check table vs audit.sh _exp_ids, and the marketplace
entry version vs plugin.json. WARN on mismatch or when a pinned phrase
vanishes. Live run caught README missing gate:tool:routine-trigger-guard;
the row is added here.

Closes #388
@wasikarn
wasikarn merged commit 2c3fffa into develop Oct 3, 2026
3 checks passed
@wasikarn
wasikarn deleted the claude/audit-check-79-388 branch October 3, 2026 15:27
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.

audit: check 79 pins doc facts to the tree; README lists 9 of 10 gates

1 participant