From fac4602f3f24f288bd27f648c7fc8b6d40ee9951 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Aug 2026 03:58:06 +0000 Subject: [PATCH] fix(pm): add a line ceiling for root AGENTS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit check-skill-line-ratchet.mjs covered every .claude/skills/** instruction surface and .claude/agents/os-dev.md, but not AGENTS.md itself — the largest, most-read, most binding instruction file in the repo, and the hole the oversized 39-line read-layer clause (compacted by #9715) entered through. Add a CEILINGS entry set at its line count on origin/main (post-#9715, e57524c): 958 lines, headroom 0, same shrink-only convention as the existing entries. Extend the self-test coverage case. Fixes #9792 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd --- scripts/pm/check-skill-line-ratchet.mjs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index b81051af4b..89282f7158 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -65,6 +65,11 @@ export const CEILINGS = new Map([ ['.claude/skills/checklist-author/SKILL.md', 61], ['.claude/skills/dogfood-verification/SKILL.md', 155], ['.claude/skills/spec-property-retirement/SKILL.md', 328], + // #9792: root AGENTS.md is the largest, most-read, most binding instruction + // file in the repo and had no ceiling — the hole the oversized 39-line + // read-layer clause (compacted by #9715) entered through. Set at its line + // count on `origin/main` after #9715 landed (headroom 0, same convention). + ['AGENTS.md', 958], ]); export function verdict(rel, lineCount, maxLines) { @@ -126,6 +131,7 @@ function selfTest() { ['the dev-agent definition is covered', CEILINGS.has('.claude/agents/os-dev.md'), true], ['all five compressed references are covered', ['dispatch-runbook', 'platform-readings', 'review-checklist', 'landing-operations', 'seat-post-protocol'].every((n) => CEILINGS.has(`.claude/skills/pm-dispatch/references/${n}.md`)), true], ['the other four skills are covered (#9473)', ['checklist-test', 'checklist-author', 'dogfood-verification', 'spec-property-retirement'].every((n) => CEILINGS.has(`.claude/skills/${n}/SKILL.md`)), true], + ['root AGENTS.md is covered (#9792)', CEILINGS.has('AGENTS.md'), true], ]; let failed = 0; for (const [name, actual, expected] of cases) {