You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The internal dispatch runbook has no step that pastes the decision frame into the dev prompt — after #14685 item 4 (PR #14862) the dev definition expects it there and has no copy of its own #14869
Recorded by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1) from the #14685 item-4 flight (PR #14862, finding F5), whose dev measured it and left it alone because .claude/skills/pm-dispatch/** was outside that flight. Unassigned, bare, for triage; the landing files are governed .claude/skills/pm-dispatch/**.
What
Decision #14685 item 4 (ruled B, comment 5520452691) keeps two copies of the four-axis decision frame — internal-pm (.claude/skills/pm-dispatch/SKILL.md:880-897) and published-pm — and replaces the two dev-side copies with the {decision_frame} path "the dispatching PM fills at dispatch time". PR #14862 executes that: the published entry's :623 instruction now tells the published PM to paste the frame section in place of rules/dev-template.md:99's {decision_frame} line, and .claude/agents/os-dev.md:400-403 now says the frame arrives in the dispatch prompt from the PM's copy, with a stop-and-ask clause if it does not.
The internal lane has no such step. Measured at origin/main2263ca4d67 (2026-09-03T06:17Z): {decision_frame} occurs only under skills/objectstack-pm-dispatch/; .claude/skills/pm-dispatch/references/dispatch-runbook.md § 派发词构造细则 (:221 onward) constructs the internal dispatch prompt and never names the frame; .claude/skills/pm-dispatch/SKILL.md's dispatch step does not either. Once PR #14862 lands, an internal dev whose PM did not paste the frame has no frame — the stop-and-ask clause fails loud rather than silent, which is the right failure, but it costs a round-trip per dispatch until the runbook says to paste.
Why it matters
The frame is binding text for every escalation (needs_decision analysis on four axes, long-term soundness ≥ 50%). Before #14862 every dev carried it in its own definition; after, the internal PM is the only source. A runbook that does not say so is an instruction surface promising a behaviour it no longer produces — the same shape #14017 / #14031 fenced for the "report before acting" form.
Scope (shrink-or-neutral under the line ratchet)
references/dispatch-runbook.md § 派发词构造细则: one bullet — every dispatch prompt carries the internal-pm frame section (SKILL.md每个方案必须沿四条固定评估轴… through 推荐意见必须基于这四条轴给出理由…) verbatim, pasted from the PM's own copy, never retyped; the dev definition stops and asks if it is missing.
⛔ Do not add a third copy of the frame anywhere — the anti-dormancy scan in scripts/check-skill-frame-sync.mjs refuses one in an undeclared file, and the instruction points at the existing copy by its anchor sentences.
Interim, already in force: the skills seat's own briefs carry the frame from 2026-09-03T06:19Z (condition recorded on the item-4 review, comment 5521428238).
dispatch-runbook.md ceiling row ['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 280] at scripts/pm/check-skill-line-ratchet.mjs; file is 280 lines at 2263ca4d67.
Recorded by the skills lane seat (session
session_01LraLgQVGq8egUwfYZpbYt1) from the #14685 item-4 flight (PR #14862, finding F5), whose dev measured it and left it alone because.claude/skills/pm-dispatch/**was outside that flight. Unassigned, bare, for triage; the landing files are governed.claude/skills/pm-dispatch/**.What
Decision #14685 item 4 (ruled B, comment 5520452691) keeps two copies of the four-axis decision frame — internal-pm (
.claude/skills/pm-dispatch/SKILL.md:880-897) and published-pm — and replaces the two dev-side copies with the{decision_frame}path "the dispatching PM fills at dispatch time". PR #14862 executes that: the published entry's:623instruction now tells the published PM to paste the frame section in place ofrules/dev-template.md:99's{decision_frame}line, and.claude/agents/os-dev.md:400-403now says the frame arrives in the dispatch prompt from the PM's copy, with a stop-and-ask clause if it does not.The internal lane has no such step. Measured at
origin/main2263ca4d67(2026-09-03T06:17Z):{decision_frame}occurs only underskills/objectstack-pm-dispatch/;.claude/skills/pm-dispatch/references/dispatch-runbook.md§ 派发词构造细则 (:221onward) constructs the internal dispatch prompt and never names the frame;.claude/skills/pm-dispatch/SKILL.md's dispatch step does not either. Once PR #14862 lands, an internal dev whose PM did not paste the frame has no frame — the stop-and-ask clause fails loud rather than silent, which is the right failure, but it costs a round-trip per dispatch until the runbook says to paste.Why it matters
The frame is binding text for every escalation (
needs_decisionanalysis on four axes, long-term soundness ≥ 50%). Before #14862 every dev carried it in its own definition; after, the internal PM is the only source. A runbook that does not say so is an instruction surface promising a behaviour it no longer produces — the same shape #14017 / #14031 fenced for the "report before acting" form.Scope (shrink-or-neutral under the line ratchet)
references/dispatch-runbook.md§ 派发词构造细则: one bullet — every dispatch prompt carries the internal-pm frame section (SKILL.md每个方案必须沿四条固定评估轴… through 推荐意见必须基于这四条轴给出理由…) verbatim, pasted from the PM's own copy, never retyped; the dev definition stops and asks if it is missing.dispatch-runbook.mdis at its ceiling (280/280). Pay by a same-file deletion, or by the cross-file move rule PR tooling(pm): admit a same-PR cross-file line-budget move, and take the first one #14860 introduces (Restart-when:that PR is onmain); ⛔ no ceiling raise otherwise, ⛔ no re-wrap funding.scripts/check-skill-frame-sync.mjsrefuses one in an undeclared file, and the instruction points at the existing copy by its anchor sentences.Verified
search_issues, 6 results read): pm-dispatch token economics: sonnet tier for S-class mechanical cards, scoped local gates (CI runs the full farm), slimmed dispatch prompts with standard clauses sunk into the os-dev definition (maintainer-approved 2026-08-09) #6863 (standard clauses sunk into os-dev.md — the design this reverses for the frame), pm-dispatch decision framework: add three maintainer-ruled standing rules — pull-directed priority order, startup-stage no-gradualism, release-reminder discipline (2026-08-27) #12668, [finding]OS_VERIFY_LOCK_SLOTis the only mechanism that serves a queue longer than one foreground turn, and the dispatch prompt never names it — every dev meets it in a failure message #12784, pm-dispatch: the decision inbox gets a standard machine-marked four-facet block, a pinned digest view, and a batch-adjudication channel #9761,scripts/pm/dispatch-gates.mjsdoes not knowcheck:slot-lookupexists, so no dev brief ever derives it — it cost a p0 a CI round-trip today #9721, [decision] engine-core lane dropspm:queueat dispatch without applyingpm:dispatched— 7 instances of the ghost-card shape; pick the repair #7239 — none carries this gap.dispatch-runbook.mdceiling row['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 280]atscripts/pm/check-skill-line-ratchet.mjs; file is 280 lines at2263ca4d67.Refs: #14685 (item 4, ruled B) · PR #14862 · PR #14860 (the payment path) · #13597 (corpus audit Phase 3).