docs(pm-dispatch): retire duty-7's reader half per maintainer ruling - #13603
Merged
Conversation
Maintainer ruling 2026-08-31, verbatim: 「13580 B(荐」 — option B adopted. Deletes the two bullets of the runbook's duty-7 section that carry the reader-count method: the 读者半边 bullet (the git-grep-per-key method) and the 正对照恒先跑 bullet (the sys_share_link.email_allowlist calibration). The instrument they describe was measured structurally blind on 104 of 121 keys, so prose explaining when to trust a blind instrument helps no PM decision. Construct removal, net-negative lines. The section heading and the surface half (canonical member-level diff, measured good) stay. No replacement prose is added. One coherence repair rides along, byte-bounded and in place: the heading suffix drops 「与校准」 now that the calibration bullet is gone (73 -> 64 bytes, shrinks). The surviving bullet's name is left untouched because renaming it would grow its line by 2 bytes. 271 -> 265 lines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de
This was referenced Aug 31, 2026
os-zhuang
approved these changes
Aug 31, 2026
os-zhuang
marked this pull request as ready for review
August 31, 2026 05:11
os-zhuang
enabled auto-merge
August 31, 2026 05:12
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.
Fixes #13304
Retires duty ⑦'s reader half from
.claude/skills/pm-dispatch/references/dispatch-runbook.md, executing the maintainer ruling.The ruling
Maintainer ruling 2026-08-31 (chat), verbatim:
Option B as put to the maintainer, verbatim from the ruling comment on the card:
The ruling also settles what does not land here, verbatim:
Accordingly this diff adds zero replacement prose. PR #13580 (the earlier +7-line applicability-domain repair on this card) was stood down unmerged and is superseded by this one; none of its text is imported here.
The diff
One file,
.claude/skills/pm-dispatch/references/dispatch-runbook.md. 271 → 265 lines (1 insertion, 7 deletions).Deleted — the two bullets carrying the reader-count method:
git greprecipe plus its three hit-adjudication rules.sys_share_link.email_allowlistcalibration control.Kept, untouched — the section heading and the surface half bullet (canonical member-level diff, measured good), including its pinned baseline ref.
The one coherence repair
The heading suffix 「与校准」 ("and calibration") named the calibration bullet that this PR deletes, so leaving it would have made the heading actively false. It is dropped in place, word-level, no re-wrap:
## security-object 无判决枚举(座位贴常设 ⑦)的方法与校准→## security-object 无判决枚举(座位贴常设 ⑦)的方法Measured: that line goes 73 → 64 bytes — it shrinks, so it is byte-bounded in the sense the in-passage word-tightening rounds on this file established (#13427, #13403, #13505 are cited here as precedent for the shape of an in-passage tightening, not as a standing permission — the authority for this edit is the ruling above).
A second rename was considered and rejected on measurement. Renaming the surviving bullet 「表面半边」 ("surface half") — whose name still references a two-half structure that no longer exists — to 「成员级 diff」 would take its line from 116 → 118 bytes, i.e. it grows. Under the byte-bound it is therefore not taken: the words stay as-is and the residual naming incoherence is left for the corpus-audit card's Phase 3 to fold in.
Verification
Acceptance table, evaluated at BOTH refs via
git show REF:pathBase
d47583841(merge base) vs head0a424c942:sys_share_link.email_allowlistb000ab59survivesThe positive-control rows are load-bearing, not decoration: a zero on those would mean the instrument broke rather than that the text is gone. All three read 1 at head, so the negative-anchor zeros above them are measurements and not instrument failure.
Repo-wide sweep:
git grep -n 读者半边andgit grep -n 正对照恒先跑over the whole tree return no hits after this change — the runbook was the only carrier, so no other file needs a follow-up and none was edited.Why no ablation applies
The ratchet is a ceiling (an upper bound on line count), and this diff only removes lines. A deletion cannot breach an upper bound, so there is no red to predict and no mutation that would produce one — an ablation here would have no failing leg to demonstrate. The reverse verification that is meaningful for a pure deletion is the two-ref acceptance table above, which is why that is what was run.
Gates
Family derived from the ACTUAL diff with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(7 families; the script derived the change set itself from the merge base). All 7 run and green at head0a424c942. Each gate's own verdict line:check:agent-test-spelling—✓ check-agent-test-spelling: 0 violations — 413 file(s) · 5084 bare -- token(s) · 1284 launcher-rooted run(s) · 9 separator(s) JUDGED · 5 vitest-backed script name(s) derived from 80 manifest(s)check:doc-authoring—✓ doc authoring guard: 393 files clean — no bare metadata literals.and✓ doc authoring guard: 48 published skill files clean — no internal issue-id references.check:doc-formula-expressions—✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 426 files / 1451 TS blocks judged clean by @objectstack/formula.check:pm-governed-merges—✓ check-governed-merges --self-test: 228 assertionscheck:pm-skill-id-lint—✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).check:pm-skill-ratchet—✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 265 lines (ceiling 278; headroom 13).check:skill-frame-sync—✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 filesTwo of the seven first reported
PREREQUISITE NOT METin the fresh worktree and were treated as NOT MEASURED rather than as failures, per each gate's own text:check:doc-authoringnamedpnpm install, andcheck:doc-formula-expressionsnamedpnpm installthen two builds (@objectstack/formula, then@objectstack/lint). Each prerequisite was satisfied and the gate re-run; the green lines quoted above are from those re-runs. Every exit code was captured directly (cmd > log 2>&1; EXIT=$?), never through a pipe.The ratchet pin is deliberately not followed down (278 → 265) in this PR:
scripts/pm/check-skill-line-ratchet.mjsis serial behind another in-flight chain, and the pin follow-down is deferred to the corpus audit's Phase 3 per the ruling. The ceiling is an upper bound, so 265 ≤ 278 passes it untouched — as the quoted verdict line shows, with headroom 13.Posture
.claude/**): this PR stays draft. No ready flip, no auto-merge, no review submitted — landing is the maintainer's call.skip-changeset: applied. The diff publishes nothing from any package — it is confined to.claude/**.Generated by Claude Code
Generated by Claude Code