docs(pm-dispatch): the runbook level rationale covers p1–p3, and the sweep line routes by the finding threshold - #16603
Merged
os-zhuang merged 1 commit intoSep 7, 2026
Conversation
…es by the finding threshold Two line-neutral riders on `references/dispatch-runbook.md`, recorded at flight Z's ACCEPT and outside that flight's declared file surface. 1. The level rationale explained only p0 / blocking / bug / age; the selection order also ranks p1 > p2 > p3 > 无级, so the rationale gains the level half: a ruled level is an explicit ordering, 无级 is a triage gap rather than a ruled low priority. 2. 「范围外发现照旧单开」 read as "every out-of-scope finding gets a card", contradicting the finding admission threshold; it now routes by that threshold and names where the rest goes. The added line is paid by folding a same-file restatement — the emergency section's summary sentence, whose content survives on the line above it. File stays at 241 lines, every line ≤ 120 bytes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX
Collaborator
Author
维护者速读(终稿 · skills 席,2026-09-07T12:1xZ)
Generated by Claude Code |
os-zhuang
approved these changes
Sep 7, 2026
os-zhuang
marked this pull request as ready for review
September 7, 2026 12:33
os-zhuang
enabled auto-merge
September 7, 2026 12:33
os-zhuang
deleted the
claude/issue-16490-runbook-level-rationale-and-threshold
branch
September 7, 2026 13:06
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 #16490
Two line-neutral riders on
.claude/skills/pm-dispatch/references/dispatch-runbook.md, recorded atflight Z's ACCEPT (PR #16486) and outside that flight's declared file surface. One file, one commit,
241 lines before and after, every line at or under 120 bytes.
Rider 1 — the level rationale had no level half
The rationale line explained
p0/pm:blocking/Bug/ card age and stopped there, while theselection order in
SKILL.mdalso ranksp1 > p2 > p3 > 无级. A reader had the order without itsreason, and the tempting reading of the tail — "无级 is simply the lowest priority" — is the wrong
one: it is a card triage never ruled on at all. Added, directly under the existing rationale:
It matches
SKILL.md's own tail (无级卡轮报记分诊缺口) and adds no order restatement — the orderitself stays where it lives, in
SKILL.md.Rider 2 — the sweep line read as "every out-of-scope finding gets a card"
Before:
After:
照旧单开is unconditional, and read as written it contradicts the finding admission threshold(
SKILL.mdlines 347–348,core-rules.mdline 88): three classes get a card, everything else goesto the PR's
## 验收备注. The rewrite points at that threshold and names where the rest goes; thethree classes are not restated here — they already live in the two files above. The sweep block
still enumerates five items, and PR #16557's line two rows below is untouched.
The fold that pays for the added line
Deleted, same file, from
## 紧急卡直接分诊:Where its content survives: the "not the number of producers" half is the line immediately above it,
which states the discipline and its operative test —
- 单一生产者纪律照旧:分诊座位在班且已在处理同卡即让行。(now line 15) — and the "changes the cadence" half is carried by the section heading plus its trigger
line
- 正文自报 P0 或 data-integrity 的命中即走本节紧急通道。. The folded line names no object, noaction and no test; it only summarised the two lines above it. Nothing operative left the file.
The currency is a deletion, not a re-wrap: no two lines were merged to buy the row.
Why a fold rather than a tighter rewrite of line 7 — the four axes
cap, and the level clause is at least 39 bytes, so it fits only by deleting an operative clause.
The candidate for compression was
bug 是已坏的不变量先于增强, which is the reasonBugoutranks anenhancement — a test the triage seat actually applies each round. The folded line is a summary no
seat applies as a test. Deleting the unused summary beats shortening the used rule.
one would have bought the row without removing anything, which the line-ratchet currency rule
forbids outright.
无级read as aruled low priority invites a seat to treat an untriaged card as deliberately deprioritised;
照旧单开read literally makes a dev file a card for every passing observation, which is the exactover-filing the threshold exists to stop.
one deletion, and the file stays pinned at its ceiling.
Verification — all at
4d6cd158c, the final commitGate list derived mechanically, never hand-listed:
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack→ 14 commands, allrun, exit code captured by redirect before any pipe. Reconciliation with
--ran:Verdict lines the gates printed themselves:
One gate first returned
exit 3—check:doc-formula-expressions, PREREQUISITE NOT MET(
@objectstack/lintnot built). That is NOT MEASURED, not a red: afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the sharedverify lock it re-ran at
EXIT=0. The other 13 were green first time.Beyond the derived set:
node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/dispatch-runbook.md→ exit 3, GOVERNED (
.claude/**×1). No seat flips this ready, enqueues it or arms auto-merge.pnpm lintthroughscripts/pm/os-verify-lock.sh(slotissue-16490):VERDICT command-exit 0 · held the lock 82s · waited 26s. Not a narrowed run — the full scan.--sharedclone withmerge.os-regen.driverunset (configread exits 1),
git merge-tree --write-tree --name-only origin/main HEAD→ exit 0, tree sha only,zero conflicted paths.
(docs(pm-dispatch): read the verify-lock queue depth before each dispatch and hold at depth ≥ 2 (#14944 Q1 B) #16271, skills(pm-dispatch): the
Thread-read:claim field with its H50 patrol row, and the carried-assertion rule #16597, docs(skills): teach the calendar-hours rule where a hook stamps a deadline #16591, agents(os-dev): the one foreground wait shape, step ① on the file surface, one skip-changeset criterion, the anchor's only writer — five cards, one file, 403/403 #16594, docs(ci, AGENTS.md): the merge queue runs the affected set, not the full package list — two stale sentences corrected #16573, skills(objectstack-data): re-lock field-types.md token ceiling, drop SKILL.md index blurb #16601) were each fetched by theirrefs/pull/N/headanddiffed against their merge base —
dispatch-runbook.mdhits: 0 for all six. No commit has landed onmaintouching this file since the branch point; the file's last landing is PR skills(pm-dispatch, os-dev): five measured refinements to the finding admission threshold #16557.grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'→ no match.skip-changeset: nothing is published from any package — the diff is one internal agent playbookunder
.claude/, which ships to no consumer.验收备注
noted, not filed— below the admission threshold, no card:五条are spread across three rows, with rows 3–5 sharing one line, so the countis not readable off the layout. Not a defect and not a contract violation; it costs a reader one
extra pass. Whoever next edits
## 发现分诊轮细则picks it up — the file is at its ceiling, so anyre-layout has to pay for itself the same way this PR did.
维护者速读(草稿)
dispatch-runbook.md一个文件,两句改写、一句删除,行数 241 → 241 不变。① 取卡级序的理由行原本只解释 p0 / blocking / bug / 卡龄,现补一行说明 p1–p3 为什么依次相先、
以及末位的「无级」是分诊缺口而不是一个已裁的低优先级。② sweep 打包晋级那条里的「范围外发现照旧
单开」改为按立卡三类门槛分流、三类外进验收备注。③ 为付第①条新增的那一行,删掉紧急卡一节里的一句
纯复述(「紧急通道改的是节奏,不是生产者数目」),其内容在它上一行与本节标题里原样幸存。
席位把根本没分诊过的卡当成有意压后;「照旧单开」按字面读是「范围外发现一律立卡」,与立卡三类门槛
正好相反,是当前过度立卡的直接出处。
棘轮零余量下唯一合法的付账方式(re-wrap 不算)。风险极低:纯规则文本,无脚本、无契约、无发布面。
回滚 =
git revert这一个提交,一个文件三行,不牵动任何其他文件或门禁基线。.claude/**),按 Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 由维护者人工合并。请确认两处新措辞与你心里的裁决一致:①「无级 = 分诊缺口」而非「最低优先级」;②「范围外发现按门槛分流」而非
「一律单开」。确认后人工合并即可,无需 seat 审批、不入队、不挂 auto-merge。
Generated by Claude Code