Repository navigation
fix(pm): the four blocker readers say merged for a PR target, closed unmerged for an abandoned one, closed for an issue - #28074
Conversation
…unmerged for an abandoned one, closed for an issue dispatch-runbook flag two names the event the patrol fires on: an issue closed, a PR merged, never a PR closed unmerged. H28 names a spent body target the way namedTargets renders it instead of calling every one CLOSED. The H4 prose mixed line names only the counts it has, so an abandoned PR beside an unresolved target no longer opens with `0 still read OPEN`. The scheduled full-run block row carries `merged` on a PR closed with a merged_at, and the body note and log render it as merged. Wording only: no verdict moves, no new gate. Six pins added to the existing H4 prose PR and H28 lines and the merged-PR self-test case. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cycQZLtWnoRe2XWgyz
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 708c0ce · 2026-10-30T11:41Z |
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract reviewHead-sha: ① Derived judgmentsBase is
② Semver levelNo published package is touched ( ③ Boundary flags
④ Design judgmentRules face, per
Implemented-by: VERDICT: PASS Must-fix: none. Should-fix (file on a follow-up card; 3 is carried from record 6519545846):
|
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS 维护者速读
席位意见:ACCEPT。契约复核 PASS,没有 must-fix。探测覆盖了以下组合:
所有判定都没有差异,每条新字符串都与实际状态相符。should-fix 1–3 转到跟进卡 #28083:
席位核对
|
Requested by Elon · project thread
Fixes #28033
What changes
Wording only, in the four readers the card names. No verdict moves and no gate is added.
.claude/skills/pm-dispatch/references/dispatch-runbook.md:85, flag two. 「目标已关闭」 → 「目标已关单(PR 则已合并;关而未合并不算)」. The line now says what H19 fires on: an issue closed, a PR merged, never a PR closed unmerged. In-line, line count 245 → 245, 100 bytes (ceiling 120).scripts/pm/check-half-states.mjsh28StaleBodyBlockerLine. The spent body targets are no longer all calledCLOSED: the row saystarget(s) no longer OPENand names each the waynamedTargetsrenders it (closed, orclosed UNMERGEDfor an abandoned PR, which it says released nothing while the body line is spent either way). Thespentfilter is unchanged, so the row fires exactly where it did.scripts/pm/check-half-states.mjsproseBlockerClause, the mixed branch. Each count is named only when non-zero, so an abandoned PR beside an unresolved target readsNone of them has released — 1 closed UNMERGED (which withholds), 1 could not be resolved from this installinstead of opening with0 still read OPEN.scripts/ci/scheduled-full-run.mjs.judgeCardBlockcarriesmerged: trueon a closed PR row whosepull_request.merged_atis set;renderBlockNoterenders that row(merged <date>)and its headline saysclosed (a PR: merged);targetReadinglogs it asmerged.staleBlockVerdictis untouched.Pins: six added to the existing H4 prose PR and H28 lines of
check-half-states --self-test(5105 → 5111 cases), and the merged-PR case ofscheduled-full-run --self-testnow checks the note and the log name the merge. The optionalplatform-readings.mdmeasured-leg line was not added: the file sits at its 458-line ceiling with no headroom, so it would have cost a line elsewhere.Why
After PR #28031 a
Blocked-by:PR target releases on merged and a PR closed unmerged releases nothing, but these four places still said closed for every target. A seat reading them could take an abandoned PR for a released blocker. Follow-up card #28033 took review should-fixes 1, 2, 4 and 5 from that PR's contract review.Verification
node scripts/pm/check-half-states.mjs --self-test: 5111 cases, exit 0.node scripts/ci/scheduled-full-run.mjs --self-test: OK, exit 0.mergednever set injudgeCardBlock→ the merged-PR case throwsthe note does not name the merge.pnpm check:pm-skill-ratchet,pnpm check:pm-skill-id-lint(105 files clean),node scripts/check-skills-token-ratchet.mjs: exit 0.node scripts/pm/dispatch-gates.mjs --commandsderives 54 families on the committed change; every one run locally afterpnpm install --frozen-lockfile --ignore-scriptsand reconciled with--ran(see the os-dev report on the card).check-governed-merges.mjs --teston the three paths: one.claude/**hit, Tier S; the two scripts are not on the register. The landing tier is read off the register at PR time.Clause-②: no
Metadata-protocol: none
维护者速读
Blocked-by:的 PR 目标说成「关闭」的读器改成「合并」:runbook 旗二、H28 的「已关」措辞、H4 混合行的0 still read OPEN、定时全量运行备注里的(closed …)。三个文件,规则文本行数不变(245)。scheduled-full-run.mjs的judgeCardBlock(新增merged: true标记)和renderBlockNote。node scripts/pm/check-half-states.mjs --self-test(5111 例)与node scripts/ci/scheduled-full-run.mjs --self-test,都 exit 0。Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses.main, one pull request.skip-changeset)packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_016WV4cycQZLtWnoRe2XWgyz