Anchor card for the maintainer-directed corpus audit. Filed by the skills lane seat (session session_01EXxTW8mvPBhoHxmyPZ63de), PM loop round 5.
Mandate (verbatim, 2026-08-31, chat)
「最近我也感觉项目经理越来越笨,是不是胡乱写的文字太多了,要不要完整的认真重新整理一下,哪些是关键条款,哪些应该删除。」 — GO given as 「做」.
Companion rulings the same hour: 「你的工作不应该是不把issue 全收,还需要重点审核skills 改进值不值」 (reject authority — the value gate) · 「13580 B(荐」 (first construct removal under this posture: duty ⑦'s reader half).
Thesis
#12911 : rule accretion degrades execution — every marginal instruction line taxes every future turn of every seat; construct removal (#11901 precedent) held where added rules kept failing. This audit executes that thesis corpus-wide instead of card-by-card.
Scope (measured at origin/main 9c120f030)
file
lines
.claude/skills/pm-dispatch/SKILL.md
947 (→960 when PR #13505 lands)
.claude/skills/pm-dispatch/references/ (dispatch-runbook 271 · platform-readings 314 · review-checklist 84 · contract-review 48 · decision-analysis 46 · lanes/* · state-machine · compile-surfaces · the rest)
≈1,900
.claude/agents/os-dev.md
466
AGENTS.md
1,162
CLAUDE.md
86
total
≈4,500
Phases
Phase 1 — zero-edit classification (this seat, in progress). Every passage classified: KEY (binding; changes a specific decision) / DUPLICATE (same rule stated elsewhere — one anchor survives) / DEMOTABLE (true but decision-neutral: narrative, justification, history) / DELETE (methodology prose, stale, superseded). Each row carries a measured justification, not taste. Posted as comments on this card, file by file. ⛔ No edits in this phase.
Phase 2 — maintainer batch ruling on the classification table (决裁批 mechanism; director seat records verbatim rulings).
Phase 3 — rewrite PRs per ruling , then every ratchet ceiling re-locked DOWN to the new counts in one pin PR (single writer on check-skill-line-ratchet.mjs, after PR docs(pm-dispatch): three maintainer-ruled standing rules + the Part-of bookkeeping-sentence warning #13505 's serial chain clears).
Standing effects while this card is open
Value gate on every skills queue admission : ① does the text change a specific decision? ② can deletion replace addition? ③ construct over prose. Already applied: Carry the ls-tree enumeration idiom into its three remaining instruction-text homes (os-dev.md · platform-readings · AGENTS.md §9) — deferred from #13305 by face-holds and the re-wrap funding ban #13484 and os-dev.md's Part-of bullet lacks the bookkeeping-sentence / quote-backtick shapes that PR #13505 sharpened in review-checklist.md — deferred by the frame-region fence #13506 rejected not_planned; PR docs(pm-dispatch): state the duty-7 reader-count method's applicability domain #13580 closed unmerged per the B ruling.
Prose-additive queue cards FROZEN into this audit (pm:queue → pm:on-hold; restart = Phase-2 ruling): [finding] The re-wrap funding ban lives only in the PM's SKILL.md — two devs paying line ratchets hit it independently in one hour because the dev contract never shows it #13116 · [finding] .claude/agents/os-dev.md rule 1 lists the verify lock's four guarantees and no non-guarantee, one line above a wall-clock absolute — every dev agent reads exclusivity the brief never promised #12800 · Make check:generated's "not run here" source-audit list a hard obligation in the os-dev contract — disposition 2 of #13207, routed to the skills lane #13300 · [finding] The os-dev contract states skip-changeset as BOTH a closed path list and a publication test — a src/ file that never reaches dist satisfies one and violates the other #13432 .
Parked escalations become audit inputs : [finding] A contract-review PASS leaves ZERO trace on the PR itself — verdict on the card, label cleared, no review object — so a legitimate un-park is indistinguishable from an intruder from the PR side #13417 (PR-side PASS trace — one funded line against contract-review.md's 48/48, headroom 0) · the platform-readings ceiling escalation (branch claude/issue-13326-platform-readings-family @ 71b4005bb, 359 lines vs ceiling 314; whitespace-only re-wrap measured to GROW that file, sha-proven ⇒ it is at maximal density, so Phase 3 must cut or split content there, never compress; family: [finding] MCP search_issues is returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326 [finding] The zero-quota payload channel silently drops the NEWEST timeline items once an issue outgrows the SSR first window — measured 3 of 5 comments, both 2026-08-30 dispatch comments missing #13373 [finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385 [finding] An issue body ending in a --- rule followed by the attribution footer loses EVERYTHING FROM THE RULE ONWARD on create — 5 measured instances, silently stripping the required footer #13384 [finding] The zero-quota issue-page payload is CDN-CACHED and can be minutes-to-hours stale — cache-busting and no-cache did NOT defeat it, and one seat asserted a half-state about another seat's work on that stale read #13387 Record the agent-created-Routine transport facts in references/platform-readings.md — fired sessions get no GitHub MCP tools, and self-binding trades new-session recoverability for tool availability #13257 [finding] MCP issue_read get_labels fails on a FRESH PR number while list_pull_requests returns its labels — misread as "no labels", the mandated RMW fallback strips concurrent bot labels #13141 [finding] LIVE: os-elon is no longer assignable on this repo — every seat's claim protocol silently loses its assignee half, mid-session #13561 [finding] MCP issue_read get_labels cannot resolve a PR number ("Could not resolve to an Issue") while pull_request_read get returns the same PR's labels — one wasted call per misread #13583 ).
Ruled-but-unlanded ceiling raises HELD : [finding] git worktree add -b can fail writing upstream config and leave the branch created but no worktree — the recipe's own half-state, and .git/config is shared like the stash #13052 -A (AGENTS.md 1162→1164) · [finding] A timeout-killed command reports near-zero CPU to the shell's time, understating cost 14x-82x — and it reads exactly like "this step blocks rather than computes" #12980 -A-FLOOR (os-dev.md 466→471) — serial behind PR docs(pm-dispatch): three maintainer-ruled standing rules + the Part-of bookkeeping-sentence warning #13505 regardless; the audit may render both moot. If the maintainer wants either landed before the audit, say so and it rides the chain as already ruled.
Corrections still flow : text contradicting a standing ruling stays fixable now (e.g. the SKILL.md:758 pre-hang contradiction, card finding(skills): 预挂 needs:contract-review 在 2026-08-28 裁定后持续复发——两日 9 例,分诊/执行席的定级流程文本未吸收「可复审增量存在前永不挂标」 #13557 ). The freeze is for additions, not for making the corpus honest.
Refs: #12911 (thesis) · #11901 (construct-removal precedent) · #13304 (first construct removal executed) · #13484 / #13506 (first value-gate rejections).
Generated by Claude Code
Anchor card for the maintainer-directed corpus audit. Filed by the skills lane seat (session
session_01EXxTW8mvPBhoHxmyPZ63de), PM loop round 5.Mandate (verbatim, 2026-08-31, chat)
「最近我也感觉项目经理越来越笨,是不是胡乱写的文字太多了,要不要完整的认真重新整理一下,哪些是关键条款,哪些应该删除。」 — GO given as 「做」.
Companion rulings the same hour: 「你的工作不应该是不把issue 全收,还需要重点审核skills 改进值不值」 (reject authority — the value gate) · 「13580 B(荐」 (first construct removal under this posture: duty ⑦'s reader half).
Thesis
#12911: rule accretion degrades execution — every marginal instruction line taxes every future turn of every seat; construct removal (#11901 precedent) held where added rules kept failing. This audit executes that thesis corpus-wide instead of card-by-card.
Scope (measured at origin/main
9c120f030).claude/skills/pm-dispatch/SKILL.md.claude/skills/pm-dispatch/references/(dispatch-runbook 271 · platform-readings 314 · review-checklist 84 · contract-review 48 · decision-analysis 46 · lanes/* · state-machine · compile-surfaces · the rest).claude/agents/os-dev.mdAGENTS.mdCLAUDE.mdPhases
check-skill-line-ratchet.mjs, after PR docs(pm-dispatch): three maintainer-ruled standing rules + the Part-of bookkeeping-sentence warning #13505's serial chain clears).Standing effects while this card is open
.claude/agents/os-dev.mdrule 1 lists the verify lock's four guarantees and no non-guarantee, one line above a wall-clock absolute — every dev agent reads exclusivity the brief never promised #12800 · Make check:generated's "not run here" source-audit list a hard obligation in the os-dev contract — disposition 2 of #13207, routed to the skills lane #13300 · [finding] The os-dev contract statesskip-changesetas BOTH a closed path list and a publication test — asrc/file that never reachesdistsatisfies one and violates the other #13432.claude/issue-13326-platform-readings-family@71b4005bb, 359 lines vs ceiling 314; whitespace-only re-wrap measured to GROW that file, sha-proven ⇒ it is at maximal density, so Phase 3 must cut or split content there, never compress; family: [finding] MCPsearch_issuesis returning FALSE ZEROS — reproduced on three seats across two repos, and it DEGRADED mid-session, so every dedup that rode on it passed vacuously #13326 [finding] The zero-quota payload channel silently drops the NEWEST timeline items once an issue outgrows the SSR first window — measured 3 of 5 comments, both 2026-08-30 dispatch comments missing #13373 [finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385 [finding] An issue body ending in a---rule followed by the attribution footer loses EVERYTHING FROM THE RULE ONWARD on create — 5 measured instances, silently stripping the required footer #13384 [finding] The zero-quota issue-page payload is CDN-CACHED and can be minutes-to-hours stale — cache-busting and no-cache did NOT defeat it, and one seat asserted a half-state about another seat's work on that stale read #13387 Record the agent-created-Routine transport facts in references/platform-readings.md — fired sessions get no GitHub MCP tools, and self-binding trades new-session recoverability for tool availability #13257 [finding] MCPissue_read get_labelsfails on a FRESH PR number whilelist_pull_requestsreturns its labels — misread as "no labels", the mandated RMW fallback strips concurrent bot labels #13141 [finding] LIVE:os-elonis no longer assignable on this repo — every seat's claim protocol silently loses its assignee half, mid-session #13561 [finding] MCPissue_read get_labelscannot resolve a PR number ("Could not resolve to an Issue") whilepull_request_read getreturns the same PR's labels — one wasted call per misread #13583).git worktree add -bcan fail writing upstream config and leave the branch created but no worktree — the recipe's own half-state, and.git/configis shared like the stash #13052-A (AGENTS.md 1162→1164) · [finding] Atimeout-killed command reports near-zero CPU to the shell'stime, understating cost 14x-82x — and it reads exactly like "this step blocks rather than computes" #12980-A-FLOOR (os-dev.md 466→471) — serial behind PR docs(pm-dispatch): three maintainer-ruled standing rules + the Part-of bookkeeping-sentence warning #13505 regardless; the audit may render both moot. If the maintainer wants either landed before the audit, say so and it rides the chain as already ruled.Refs: #12911 (thesis) · #11901 (construct-removal precedent) · #13304 (first construct removal executed) · #13484 / #13506 (first value-gate rejections).
Generated by Claude Code