Skip to content

docs(pm-dispatch): the seat that sees a main-red files and dispatches it; triage first-touch follows - #26210

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-1r3slx
Oct 26, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/project-thread-1r3slx

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #26143
Clause-②: no
Metadata-protocol: none

What changed

Skill text only, four files under .claude/skills/pm-dispatch/** (Tier S), every file line-neutral against its check-skill-line-ratchet ceiling, every touched line at or under 120 bytes, no issue numbers in operative text.

references/landing-operations.md §B — the main-red convention gains its actor. 约定① now reads: the seat that sees a full-battery red on main or a merge-queue build looks for the anchor card first; finding none, it files the p0 anchor card (filing-gate class ①) with the failing surface's lane domain, claims it, and dispatches the stanch — in the words the card asks for, ⛔ 不等分诊首触、不等维护者. The first stanch is the revert of the commit that introduced the red, found on main between the last green and the first red; root cause goes on its own card. Triage first-touch follows after the fact and may change the domain, never the action. The two existing conventions stay: p0 fix-forward jumps the queue (mechanical, root cause verified) and the maintainer may hand-merge a one-line fix — compressed from two lines to one; 约定② (one failing check anchors one card, first filer wins, later seers comment on the anchor) is byte-unchanged. The fourth existing convention, no lane PR arms the queue meanwhile, lives in AGENTS.md's Two-speeds paragraph and was never in this file.

references/execution-duties.md — the candidate rule gains main-red as its second exception, in the same shape as the sub-issue clause: line 10 names both exceptions and points at landing-operations.md; line 40 (dispatched past triage, sweep audits after) now covers both instead of being duplicated.

references/triage-duties.md — one line beside the urgent-triage rule tells the triage seat that a main-red anchor the seat already filed and dispatched still gets its first touch, as a recorded grade: domain may change, action never, and the card's in-flight state is no reason to skip it. The blanket "in-flight cards are not touched" line (70) names that first touch as an exception so the two lines cannot be read against each other.

SKILL.md lines 170–171, edited in place (no line added): domain:* production and the queue/level/claim-eligibility line now say 两例外 (sub-issue, main-red anchor) instead of 例外一. Without this the new rule would contradict SKILL.md's own "only triage produces domain:*" and "no triage audit, no claim" lines, and SKILL.md's stricter-rule tie-break would have sent the seat back to waiting for triage. The lane charter references/lanes/skills.md line 「本车道 finding 同走分诊席首触,⛔ 不自分诊」 is untouched: it is about lane findings, and main-red is now the named exception.

Not touched, by the card's own scope: AGENTS.md's main-red sentence ("triage files it") is Tier H prose and is the seat's to raise with the maintainer; machine-filed anchor cards (option B) were not chosen.

Line budget

file before after ceiling
references/landing-operations.md 101 101 101
references/execution-duties.md 188 188 188
references/triage-duties.md 103 103 103
SKILL.md 319 319 319

New and edited lines, measured in bytes: landing-operations 118 / 109 / 92 / 116; execution-duties 114 / 116; triage-duties 109 / 116; SKILL.md 118 / 118. Nothing re-wrapped; no ceiling moved.

Rules retired (every deleted clause and where it now lives)

  • landing-operations.md old line 61 (受管路径全在 .claude/** 者 Tier S:席内达档复核过落地前检两条即转正式入队) → SKILL.md 路径分叉 line 204 (受管面两层:Tier S = .claude/** 全树 … S 经达档复核 PASS 后 ready → 入队) and references/contract-review.md line 37 (落地前检两条,过则 Tier S 入队、Tier H 等人批), which this file's line 59 already points at.
  • landing-operations.md old line 62 (Tier H(其余受管面)者:四件套留 draft 等人批,⛔ 不翻正式不入队;获授权批准后认领席落地) → SKILL.md 路径分叉 lines 186–189 and 197, references/lanes/skills.md line 17 (Tier H 受管 PR 恒 draft 等维护者的字), references/contract-review.md line 37. Line 60 of this file keeps the operational step (check-governed-merges.mjs --pr N:受管面照两层) and line 63 keeps ⛔ 两层不由席位批准.
  • landing-operations.md old lines 82–83 (p0 fix-forward 允许跳队 … / 也可按既有 governed 例外由维护者人工直合一行修复;仅限 main-red 修复) → compressed into the new line 4 of the block; "仅限 main-red" is carried by the block's position between 约定① and 约定②.
  • execution-duties.md line 10, clause 预贴 pm:queue 视同无 → SKILL.md line 171 (预贴标签只是建议,队列与级别只由分诊落笔). Clause 例外一的 sub-issue 承父卡首触 is kept, now beside the second exception.
  • execution-duties.md line 40, clause 带父卡域与优先级 → generalised to 各带域与级; the sub-issue's inheritance is stated at line 39 (优先级继承) and SKILL.md line 170 (承父卡域).
  • triage-duties.md old line 78 (裁决恒归维护者人工:分诊只分析、推荐、入箱;⛔ 无代裁车道、置信门与 auto-adjudicated) → SKILL.md 红线 line 30 (⛔ 永不代维护者答产品或架构问题,⛔ 无代裁通道:席位只分析与推荐,裁决恒出自人工), SKILL.md line 276 (⛔ 无代裁无自裁无子代理), this file's line 5 tail (⛔ 无代裁通道) and references/lanes/director.md line 22 (⛔ 无裁决线程、代裁、置信门). A true duplicate of a 红线, which the rules-only rewrite convention already names as the class to retire.
  • triage-duties.md line 70, clause 敲门在先 → lines 71–72 of the same file, whose sequence (敲门一次 → 敲门后 … 无答复 ⇒ 释放) is that rule.

Tests and gates

Docs-only diff: no package is touched, so there is no ① closure build and no ② package test; no ablation (the diff pins no tested behaviour). Local readings are on the final head 46774c37 (the merge of origin/main 7111e14a into the change commit 6fb2d7eb); the full derived union was run after that merge.

Local derived subset — node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack with no paths (change set derived from git: 4 paths vs merge base 7111e14a), 22 families, every exit code captured by redirect before any pipe, then reconciled: ✓ dispatch-gates --ran: 22 derived famil(ies) accounted for — 22 run, 0 NOT-MEASURED (a DERIVED zero — all 22 recorded an exit code and none of them is 3).

command exit
node scripts/check-closing-keyword-parity.mjs 0
node scripts/check-closing-keyword-parity.mjs --self-test 0
node scripts/check-comment-mask-corpus.mjs 0
node scripts/pm/check-governed-queue-guard.mjs --self-test 0
node scripts/pm/check-harness-current.mjs --self-test 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions 3 on the unbuilt tree (PREREQUISITE NOT MET: @objectstack/formula and @objectstack/lint not built — "Nothing was measured"), then 0 after pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under the verify lock (VERDICT command-exit 0 · held the lock 114s)
pnpm check:agent-test-spelling 0
pnpm check:cross-package-test-inputs 0
pnpm check:doc-authoring 0
pnpm check:driver-memory-census 0
pnpm check:gitlink-declared 0
pnpm check:nul-bytes 0
pnpm check:pm-expected-skips 0
pnpm check:pm-governed-merges 0
pnpm check:pm-governed-prose 0
pnpm check:pm-half-states 0
pnpm check:pm-label-write 0
pnpm check:pm-skill-id-lint 0 — ✓ check-skill-id-lint: 104 file(s) clean (pattern /#[0-9]{3,}/g)
pnpm check:pm-skill-ratchet 0 — SKILL.md is 319 lines (ceiling 319; headroom 0) · landing-operations.md is 101 lines (ceiling 101; headroom 0) · triage-duties.md is 103 lines (ceiling 103; headroom 0) · execution-duties.md is 188 lines (ceiling 188; headroom 0); no line-length offender
pnpm check:refd-timer-probe 0
pnpm check:skill-frame-sync 0 — ✓ check-skill-frame-sync: the one declared copy of the decision frame is internally coherent (.claude/skills/pm-dispatch/SKILL.md …)
pnpm check:watch-hint-literal 0

Local-only family, not derived but owed because SKILL.md holds the four-axis frame: pnpm check:skill-frame-freshness exit 0 — ✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now). Reading stays local, as the role file says.

Every family CI runs on this PR: its check-runs had not started when this body was written (the PR is created by this write), so they are in_progress here, the honest value; the seat reads the PR's check-runs. Not waited for. Dogfood battery: n/a — no ! in the title and no (narrowing) arm.

Acceptance notes

  • Cross-lane claiming of the anchor: the ruling says the seat that sees the red claims it, and the failing surface's lane may not be that seat's lane. The text states the ruling as given; the existing cross-lane channel it rides is SKILL.md line 175 「接手无主阻塞项」 together with execution-duties.md line 45 (阻塞项无主 ⇒ 被挡席认领做掉) — a main-red blocks every lane's landing. The 红线 line 34 (执行席只在本车道认领) is not edited; the maintainer's ruling outranks it by SKILL.md's own 优先序. Named for the seat's review, not resolved here.
  • The after-the-fact clause (首触事后补,可改域、⛔ 不改动作) appears twice on purpose: once in landing-operations §B from the acting seat's side, once in triage-duties from the triage seat's side, where the in-flight exemption also has to be said.
  • Carrier: the seat raises AGENTS.md's "triage files it" sentence with the maintainer (Tier H, the maintainer's hand only); noted, not filed.

维护者速读(草稿)

改了什么

pm-dispatch 技能里的 main-red 约定补上了「谁来做」:看见主干或合并队列全量红的席位先找锚卡,没有就自己立 p0 锚卡(域按出红的面所属车道)、认领、派止血;首道止血是回退引入红的那个提交,根因另立卡;⛔ 不等分诊首触、不等维护者。分诊首触事后补,可以改域、不改动作。既有约定(一个签名一张卡、p0 fix-forward 跳队、维护者可直合一行修复、止血期间车道 PR 不挂队列)全部保留。执行席的候选规则把 main-red 锚卡列为 sub-issue 之外的第二个免分诊例外;分诊席职责加一行:在飞的 main-red 锚卡照样补首触,只作记录级。四个文件行数一行不增,全部按 120 字节/行写。

为什么改

你 2026-10-26 在席位线程的原话:「主干 Test Core 超时红这种应该立刻立卡啊,skills 没有约定吗?」「所以 main红这一类卡应该是 devx 立卡并立刻处理吗」「按照目前的规则,等分诊太慢了」,决策卡上选的是「席位直接立卡派发,分诊后补」。当天实测的延迟全在「看见红 → 立卡」这一段(两个半小时),立卡之后 47 分钟就修好了。

风险与代价(含回滚)

  • 风险一:主干红时可能出现两张锚卡。约定②(一个签名一张卡、先立者赢、后见者评论到锚卡)原样保留,sweep 事后查重,重复的关 duplicate。
  • 风险二:看见红的席位可能跨车道认领。规则文本照裁决写「认领并派止血」,走的是既有「接手无主阻塞项」越界通道;红线「执行席只在本车道认领」没有动,按技能自己的优先序由裁决压过。席位复核时请留意这一点。
  • 代价:为保持行数不增,从 landing-operations 退了两行 Tier S/Tier H 说明(SKILL.md 路径分叉与 contract-review.md 已有同样的规则),从 triage-duties 退了一行「裁决归人工」(SKILL.md 红线第 30 行原文)。所有退掉的内容在 PR 正文「Rules retired」逐条列了去处。
  • 回滚:revert 这一个提交即可,无数据、无发布面、无门禁常量改动。

席位意见

(留空,席位定稿)

你要做的

一个动作:AGENTS.md「Two speeds」段里的「triage files it」一句是你亲手的 Tier H 文字,本 PR 没碰;要不要把它改成「the seat that sees it files it」,由你定。


Generated by Claude Code

os-warren and others added 2 commits October 26, 2026 15:19
landing-operations.md §B: 约定① names the seat that sees a full-battery red
on main or a merge-queue build as the actor — anchor lookup first, then a p0
anchor card (filing class ①) carrying the failing surface's lane domain,
claimed and dispatched without waiting for triage first-touch or the
maintainer's word; the first stanch is the revert of the commit that
introduced the red, root cause on its own card; triage first-touch follows
and may change the domain, never the action. The p0 fix-forward and
hand-merge conventions stay, compressed to one line; 约定② is unchanged.
Paid line for line by retiring the two Tier S / Tier H lines already stated
in SKILL.md 路径分叉 and contract-review.md.

execution-duties.md: the candidate rule names main-red as its second
exception beside the sub-issue clause, and the dispatched-past-triage line
now covers both.

triage-duties.md: the in-flight main-red anchor still gets its first touch,
as a recorded grade that may change the domain and never the action; paid
by retiring the human-ruling line already stated as a SKILL.md 红线.

SKILL.md: the domain-production and queue/level lines name two exceptions
instead of one, edited in place.

Claude-Session: https://claude.ai/code/session_01LqKsGyMNFwwnbF5FTAqyPn
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 26, 2026
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Oct 26, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Reviewed at 2026-10-26T15:52Z

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 46774c371359c01d3d1d9a190cd61056dd09bcbc
Local-runs: none
Scope: .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/landing-operations.md, .claude/skills/pm-dispatch/references/execution-duties.md, .claude/skills/pm-dispatch/references/triage-duties.md + .claude/skills/pm-dispatch/references/contract-review.md, .claude/skills/pm-dispatch/references/lanes/skills.md, .claude/skills/pm-dispatch/references/lanes/director.md, .claude/skills/pm-dispatch/references/lanes/ui.md, .claude/skills/pm-dispatch/references/dispatch-runbook.md, .claude/skills/pm-dispatch/references/cross-repo-coordination.md, .claude/skills/pm-dispatch/references/filing-gate.md, .claude/skills/pm-dispatch/references/reading-discipline.md, scripts/pm/check-skill-line-ratchet.mjs, AGENTS.md

Inputs: card #26143 body and its three comments (triage first grade 6417894401, claim 6419390894, os-dev-report 6420148592); PR #26210 object, file list and net diff against main; the check-runs on 46774c37; the rules text on origin/main at 6b935529 (no commit between merge-base 7111e14a and origin/main touches .claude/skills/pm-dispatch/**, scripts/pm/check-skill-line-ratchet.mjs or AGENTS.md, so the homes read on origin/main are the diff's own base text); the head tree by git show 46774c37:PATH. PR author user.login = objectstack-fleet[bot] (type Bot), relay-written as the claim says. Diff = 4 files, +10 / -10, all under .claude/skills/pm-dispatch/**; reviewFace hits = those four paths.

① Derived judgments

Judged against the order on the card — the maintainer's verbatim lines 「主干 Test Core 超时红这种应该立刻立卡啊,skills 没有约定吗?」「所以 main红这一类卡应该是 devx 立卡并立刻处理吗」「按照目前的规则,等分诊太慢了」 and the option chosen on the decision card 「席位直接立卡派发,分诊后补」 — against the triage first grade (first touch follows as a recorded grade, not a gate), and against the rest of the skill on origin/main.

Rules added — right against the order, except as noted under (b).

  • landing-operations.md:80 「见主干/队列全量红的席位先找锚卡,无则立 p0 锚卡(门类 ①),域随失败面」 — the seeing seat named as actor, anchor lookup first, p0, filing class ① (filing-gate.md:9: a defect with a named landing), domain of the failing surface. Right.
  • :81 「认领并派止血,⛔ 不等分诊首触、不等维护者;首触事后补,可改域、⛔ 不改动作」 — the card's exact words 不等分诊首触、不等维护者 are there; after-the-fact first touch, domain may change and action never, matches the triage grade. Right as an order; not executable cross-lane, see (b).
  • :82 「首道止血 = 回退引入红的提交(主干末绿与首红之间找),根因另立卡」 — revert-first stanch, root cause on its own card. Right.
  • :83 the compressed fix-forward and hand-merge line, see (a).
  • execution-duties.md:10 and :40 — the main-red anchor as the candidate rule's second exception, dispatched past triage, sweep audits after; the same shape as the sub-issue clause, as the card orders. Right.
  • triage-duties.md:25 and :71 — triage still owes the in-flight anchor its first touch as a recorded grade, and the blanket in-flight line names it. Matches the triage seat's own reading in 6417894401. Right.
  • SKILL.md:170–171 例外一 → 两例外 — needed, or the new rule loses SKILL.md's stricter-rule tie-break to 「domain:* 只由分诊席产出」 and 「无分诊审计评论 ⛔ 不得认领」. Right, and the same reasoning was owed to line 34, see (b).

(a) Every retired line has a home or is a true duplicate — no lost rule. Each claimed home opened on origin/main:

  • landing-operations.md old 61 (Tier S) → SKILL.md:204 「受管面两层:Tier S = .claude/** 全树,余皆 Tier H 等人批;S 经达档复核 PASS 后 ready → 入队」 and contract-review.md:37 「落地前检两条,过则 Tier S 入队、Tier H 等人批」 with the two checks at :37 and :40; this file's :59 already points at contract-review.md. Same rule, same force.
  • old 62 (Tier H) → SKILL.md:186–189 and :197, lanes/skills.md:17 「Tier H 受管 PR 恒 draft 等维护者的字」, contract-review.md:37, and, stronger than any of those, 红线 SKILL.md:27 「⛔ 受管面 PR 无授权批准时永不翻 ready、入队或挂 auto-merge;批准在案后席位落地」. A true duplicate of a 红线. Old lines 60 「受管面照两层」 and 63 「⛔ 两层不由席位批准」 (head 60 and 61) still bind: the tiering is mechanical (check-governed-merges.mjs --pr N on the same line 60) and the reader reaches this file from the 路径分叉 fork (SKILL.md:181), which defines both tiers. The point of use loses only an in-file restatement.
  • old 82–83 → new 83 「p0 fix-forward 止血跳队,限机械、根因已核实;维护者可按 governed 例外人工直合一行修复」: p0, 止血, 机械, 根因已核实 all kept; 「仅限 main-red 修复」 is carried by position (the line sits inside the block labelled 「main-red 约定①」 at line 80, before 「约定②」 at 84). Enough: the actor of the hand-merge clause is the maintainer, so no seat can act on a wider reading, and old line 83 (「也可…」) already leaned on the same label for its scope. A weakening of wording, not a lost rule; no other home exists and AGENTS.md carries none.
  • triage-duties.md old 78 → 红线 SKILL.md:30 「⛔ 无代裁通道:席位只分析与推荐,裁决恒出自人工」, SKILL.md:36 (需裁事项落卡进决策箱), SKILL.md:276 「⛔ 无代裁无自裁无子代理」, this file's :5 tail 「⛔ 无代裁通道」, lanes/director.md:22 (置信门). The literal token auto-adjudicated is read by no script on origin/main (a repo grep finds only this line, two protocol.ts comments and a ui CHANGELOG entry). A true duplicate of a 红线.
  • execution-duties.md:10 clause 「预贴 pm:queue 视同无」 → SKILL.md:171 「预贴标签只是建议,队列与级别只由分诊落笔」; the surviving head of line 10 (no audit comment ⇒ not a candidate) already implies it.
  • execution-duties.md:40 clause 「带父卡域与优先级」 → 「各带域与级」, the sub-issue's inheritance at :39 「优先级继承」 and SKILL.md:170 「sub-issue 承父卡域」; the anchor's domain and level come from landing-operations.md:80.
  • triage-duties.md:70 clause 「敲门在先」 → the sequence of head :72–74 (敲门一次 → 12 小时无答复 ⇒ 释放) is that rule; the enumeration after 「例外:」 stays closed.

(b) The cross-lane claim — FAIL, with the exact wording gap. The card's own incident is cross-lane: the skills seat saw a Test Core red, which is no skills-lane surface, so the cross-lane case is the common case. New landing-operations.md:80–81 has the seeing seat file with 「域随失败面」 and then 「认领并派止血」. 红线 SKILL.md:34 「执行席只在本车道认领」 is untouched; SKILL.md:41 ranks 红线 above 细则, :43 says a 红线 ⛔ 不因更合理的理由被推翻, and :44 sends two conflicting 细则 to the stricter one. A seat reading the text, which by the rules-only convention carries no ruling quotation and so no ruling rank, files the anchor and then stops at 红线 34: the discovery-to-action gap the maintainer ordered away moves from 「等分诊」 to waiting for the owning lane. The channel the dev rides does not license it as written: SKILL.md:175 admits cross-domain work through three channels only, and the third, 接手无主阻塞项, is defined at dispatch-runbook.md:176 as 「只做 Blocked-by: 点名的那一张」 — a freshly filed anchor is named by no Blocked-by: line, and a seat with nothing in flight (the ruling says any seat that sees the red) has no card to name it from; execution-duties.md:45 (「阻塞项无主 ⇒ 被挡席认领做掉」) has the same trigger. cross-repo-coordination.md:38 「执行座位信任标签,只在本车道认领」 and :42 「不跨车道认领」 restate the 红线. The corpus's own precedent for a ruled main-red stanch claim writes the exception into the text: lanes/ui.md:9 「维护者裁决例外于上条与 SKILL.md 无标签禁认领:main/队列 Spec Main Shape Gate 红即止血认领」. The gap is one clause on SKILL.md, where the 红线 lives: name the main-red anchor as a fourth channel on SKILL.md:175, or as the exception on 红线 :34. Payable in place, measured: :175 is 117 bytes on the head and 「- 越界只四通道:跨域例外路径、认领席跟到底的越界面、接手无主阻塞项、main-red 锚卡。」 is 117 bytes; :34 is 114 bytes and every 「除外」 form measured lands at 122–139 bytes, so :175 is the cheaper carrier. SKILL.md stays at 319, no re-wrap. Without that clause the new rule is the losing side of SKILL.md's own 优先序 in exactly the case that motivated the card.

(c) Surviving lines read against the new rule (the whole skill on origin/main grepped for 分诊首触, 无分诊审计, 锚卡, main-red, 止血, 在飞, 不动, 例外一):

  • SKILL.md:34, cross-repo-coordination.md:38 and :42 — contradict, see (b).
  • triage-duties.md:74 (head 75) 「车道席…⛔ 不定级不改标…车道 ⛔ 不自分诊」 — the seat now files with priority:p0 and a domain:*; covered by the head's SKILL.md:171 「两例外豁免」 and by :25 of the same file, so a reader of either file meets the exception. Residual only; the patch round may touch it if bytes allow (117 on the head).
  • lanes/skills.md:22 「本车道 finding 同走分诊席首触,⛔ 不自分诊」 — about findings; an anchor is a class ① defect card. No conflict.
  • lanes/ui.md:9, reading-discipline.md:25 「任何车道发现都立即止血并立单,见 landing-operations B」, contract-review.md:41 「主干红止血立单不变」, execution-duties.md:42 「分诊首触定域可改判」 — consistent; reading-discipline.md:25 already pointed at §B for exactly this and §B now says it.
  • cross-repo-coordination.md:46 「pm:retriage 改路由只对未派发卡」 against 「可改域」 on an in-flight anchor — no conflict: the claim stays to MERGED (:45), the domain change is a label correction, and the triage side carves it at triage-duties.md:25 and :71.
  • AGENTS.md:534–535 「triage files it under the main-red convention」 — contradicted by design: Tier H prose excluded by the card, and AGENTS.md wins over .claude/skills/** by its own header until the maintainer edits it. Said, not failed on. The fourth existing convention (no lane PR arms the queue meanwhile) lives on that AGENTS.md line and was never in landing-operations.md, as the PR body says.
  • 「仅限 main-red 修复」 — position-carried, see (a). Nothing else in the grep set conflicts.

Ratchet and lint — read on the head tree, verdict from the check-runs. Line counts on 46774c37: SKILL.md 319, landing-operations.md 101, execution-duties.md 188, triage-duties.md 103 = the CEILINGS rows on origin/main (check-skill-line-ratchet.mjs:403, :1207, :1340, :1301). Every rewritten or added line measured in bytes: SKILL.md 170/171 = 118/118; execution-duties 10/40 = 114/116; landing-operations 80–84 = 118/109/92/116/110; triage-duties 25/71 = 109/116; MAX_LINE_BYTES = 120 (:2472). No re-wrap: every hunk is an in-place rewrite or a whole-line retire-and-add. id-lint: no # followed by three or more digits in the four head files; no control bytes in the added lines. Check-runs on 46774c37 read at 2026-10-26T15:48Z: 44 runs, 26 success, 18 skipped, none in progress, none failed — among them Lint · PM dispatch-gates, Lint · repo & tooling gates, Lint & Repo Gates, Governed Surface Queue Guard, Check Changeset, Test Core.

② Semver level

.claude/** only: nothing from any released package publishes, so skip-changeset is right and Check Changeset is green. The PR body carries Clause-②: no and Metadata-protocol: none at line start, matching the claim comment; the diff touches no accept set, no public surface and no metadata protocol. Right.

③ Boundary flags

PR body Acceptance notes:

  • Cross-lane claiming, 「named for the seat's review, not resolved here」 — resolved here as the FAIL in ①(b): the text needs the exception on SKILL.md, not only the ruling's rank behind it.
  • The after-the-fact clause stated twice (landing-operations §B for the acting seat, triage-duties for the triage seat) — accepted: the two phase files have disjoint readers (landing-operations.md:3, triage-duties.md:3) and the second copy was paid by a true 红线 duplicate.
  • Carrier: AGENTS.md 「triage files it」 to the maintainer — accepted; Tier H, by design, see ①(c).

os-dev-report deviations: SKILL.md 170–171 touched in place — accepted (necessary, line-neutral; the card allowed a paid SKILL.md line). triage-duties.md touched — accepted (the card said only if a word is needed; old lines 70 and 74 would otherwise bar the ordered first touch; paid by old 78). Derived sweep restarted on the merged head, branch pushed with the first commit, install timing, commits authored as os-warren with the model-free trailer pair — process notes, nothing for this review to answer. Cross-lane tension — ①(b). rules_retired — each answered in ①(a). out_of_scope_findings — the AGENTS.md carrier, acknowledged. open_questions — none.

PR author objectstack-fleet[bot] confirmed from the PR object; no off-relay login to name.

Implemented-by: claude/project-thread-1r3slx
Reviewed-by: session_01LqKsGyMNFwwnbF5FTAqyPn

VERDICT: FAIL

…channel

SKILL.md line 175, in place: the closed list of channels through which a seat
may work across a domain gains the main-red anchor beside the cross-domain
exception path, the claiming seat's follow-through surface and the unowned
blocker. Without it the seeing seat files the anchor and then stops at the
own-lane-only claim line, which is the gap the ruling ordered away; the
contract review measured this clause as the cheapest carrier. SKILL.md stays
at 319 lines, the line at 117 bytes; 红线 line 34 untouched.

Claude-Session: https://claude.ai/code/session_01LqKsGyMNFwwnbF5FTAqyPn
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Reviewed at 2026-10-26T16:04Z

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: a289a0552b48ec886522fd6d6d03de61b620041c
Local-runs: none
Scope: .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/landing-operations.md, .claude/skills/pm-dispatch/references/execution-duties.md, .claude/skills/pm-dispatch/references/triage-duties.md + .claude/skills/pm-dispatch/references/contract-review.md, .claude/skills/pm-dispatch/references/lanes/skills.md, .claude/skills/pm-dispatch/references/lanes/director.md, .claude/skills/pm-dispatch/references/lanes/ui.md, .claude/skills/pm-dispatch/references/dispatch-runbook.md, .claude/skills/pm-dispatch/references/cross-repo-coordination.md, .claude/skills/pm-dispatch/references/filing-gate.md, .claude/skills/pm-dispatch/references/reading-discipline.md, scripts/pm/check-skill-line-ratchet.mjs, AGENTS.md

Inputs: card #26143 body and its four comments (triage first grade 6417894401, claim 6419390894, os-dev-report 6420148592, patch-round os-dev-report 6420603205); PR #26210 object (body byte-unchanged since the first record), file list and net diff against main (4 files, +11 / -11); the patch commit a289a055, one commit on top of 46774c37 (parent confirmed), one in-place line; the check-runs on a289a055; the rules text on origin/main at 43b47156 (still no commit since merge-base 7111e14a touching .claude/skills/pm-dispatch/**, scripts/pm/check-skill-line-ratchet.mjs or AGENTS.md); the head tree by git show a289a055:PATH. Prior record on 46774c37: comment 6420514256, FAIL on ①(b). This record re-judges ①(b) and re-affirms the rest only where the new head changes it. PR author user.login = objectstack-fleet[bot] (type Bot), relay-written.

① Derived judgments

The patch. SKILL.md:175 「跨域相交只经三条越界通道:跨域例外路径、认领席跟到底的越界面、接手无主阻塞项。」 → 「越界只四通道:跨域例外路径、认领席跟到底的越界面、接手无主阻塞项、main-red 锚卡。」, in place, 117 → 117 bytes. Nothing else in the tree moved: landing-operations.md, execution-duties.md and triage-duties.md are byte-identical to 46774c37, and SKILL.md's net diff against origin/main is lines 170, 171 and 175.

(b) closed. The main-red anchor is now an entry of the closed channel list (「只」 kept) that already licensed the three cross-domain channels beside 红线 SKILL.md:34 「执行席只在本车道认领」 on origin/main. The 红线 is untouched (114 bytes) and reads exactly as it did before the PR — in-lane only, except through the channels SKILL.md names — with the anchor claim now one of them; a seat that sees a red in another lane's surface files the anchor under SKILL.md:170, claims it under :175 and dispatches under landing-operations.md:81, and stops nowhere. The channel's substance (who files, with what domain, which stanch, what triage does after) stays at landing-operations.md:80–83, the same way the other three entries carry theirs at SKILL.md:172, cross-repo-coordination.md:45 and execution-duties.md:45 with dispatch-runbook.md:176. The wording drops the subject 「跨域相交」 for 「越界」; the three existing names are verbatim; nothing is lost. This is the clause the first record specified, byte for byte. No surviving line restates the channel count: the whole skill on origin/main grepped for 越界 finds line 175 only, and the other 三条 hits (SKILL.md:206, execution-duties.md:172 and :188, landing-operations.md:18 and :67, triage-duties.md:92, lane and platform-readings lines) are 三条件 or 三条判据 lines unrelated to channels; dispatch-runbook.md:173–178 「在飞卡衍生与阻塞项三类细则」 enumerates three kinds of derived and blocker items, not the channel list. cross-repo-coordination.md:38 「执行座位信任标签,只在本车道认领」 and :42 「代扫…不跨车道认领」 restate the 红线 without enumerating channels: they coexisted with three channels and coexist with four by the same reading, and :42 is the triage-substitute case, which never reached a stanch claim. No contradiction is left that the text cannot resolve.

(c) revised only here. triage-duties.md:75 「车道席可附证据/前提重验,⛔ 不定级不改标;每张卡欠一次分诊首触,车道 ⛔ 不自分诊」 is left as is: it stands at 117 bytes on the head and the dev measured every in-place form carrying the exception at 124 and 128 bytes, over MAX_LINE_BYTES 120. Acceptable as left, as the first record already read it: the head's SKILL.md:171 「两例外豁免」 exempts the anchor from 队列与级别只由分诊落笔, :25 of the same file has the seat file and dispatch first with the first touch owed after, and filing a new card with its labels is not 改标 on an existing one; a reader of either file meets the exception before acting. A later compression round may fold it in; not a lost rule and not a contradiction a seat would act on.

(a) re-affirmed, unchanged. The patch retires no line and touches none of the homes the first record opened; old line 175 is rewritten, not retired, and keeps 只 and all three names. The rest of (a), (c) and the rules-added findings stand as written in comment 6420514256, including the AGENTS.md 「triage files it」 sentence: contradicted by design, Tier H, said and not failed on.

Ratchet and lint, read on the head tree. Line counts on a289a055: SKILL.md 319, landing-operations.md 101, execution-duties.md 188, triage-duties.md 103 = the CEILINGS rows (check-skill-line-ratchet.mjs:403, :1207, :1340, :1301); line 175 = 117 bytes, under MAX_LINE_BYTES 120 (:2472); no re-wrap, no ceiling moved; id-lint: no # followed by three or more digits in SKILL.md; no control bytes in the new line. Check-runs on a289a055 read at 2026-10-26T16:03Z: 39 runs, 25 success, 14 skipped, none in progress, none failed — among them Lint · PM dispatch-gates, Lint · repo & tooling gates, Lint & Repo Gates, Lint · docs & code guards, Governed Surface Queue Guard and Test Core; Check Changeset skipped, the skip-changeset label's expected path.

② Semver level

Unchanged by the patch: .claude/** only, nothing from any released package publishes, skip-changeset is right; the PR body is byte-unchanged and carries Clause-②: no and Metadata-protocol: none at line start, matching the claim comment; no accept set, public surface or metadata protocol is touched. Right.

③ Boundary flags

Patch-round os-dev-report 6420603205, each flag:

  • PR body not patched (os-dev.md writes the body once, ⛔ no PATCH) — accepted. The body's 「SKILL.md lines 170–171, edited in place」 paragraph and its Acceptance-notes sentence that rode the claim on 接手无主阻塞项 are now stale and are superseded by the dev's clause, quoted here so the record carries it: 「SKILL.md line 175, in place: the closed list of cross-lane channels gains the main-red anchor as its fourth entry (越界只四通道:…、main-red 锚卡), so the seeing seat's claim of an anchor in another lane's domain rides a named channel; 红线 line 34 untouched.」 The seat folds it into the final 速读 when it corrects the draft against the diff it read (SKILL.md:194). The Rules-retired list is unaffected.
  • triage-duties.md:75 skipped — answered in ①(c).
  • Derived sweep narrowed to the ratchet family on the patch head, declared — the check-runs on a289a055 are the verdict; the four local readings the report quotes match the head-tree readings above.
  • Base not merged (origin/main moved 6b93552 → 43b4715 since the first head; ff-only refused) — no governed-path commit since merge-base 7111e14a; the PR reads mergeable: true, state blocked (draft, governed); the base is the landing window's business under landing-operations §B, not a contract item.
  • Worktree recreated; commit authored as os-warren with the model-free trailer pair — process notes.
  • open_questions none; out_of_scope_findings none this round; the first round's AGENTS.md carrier stands.

PR author objectstack-fleet[bot] confirmed from the PR object; no off-relay login to name.

Implemented-by: claude/project-thread-1r3slx
Reviewed-by: session_01LqKsGyMNFwwnbF5FTAqyPn

VERDICT: PASS

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — ACCEPT · domain:skills#2 · session_01LqKsGyMNFwwnbF5FTAqyPn · 2026-10-26T16:05Z

Seat review of record for #26143 on head a289a055, against GitHub, not the report's own account. Governed .claude/skills/pm-dispatch/** PR, Tier S: the record that unlocks landing is the independent ## Contract review at comment 6420788844 (Served-tier: CONTRACT_REVIEW_TIER, head a289a055, VERDICT: PASS, drafted by a reviewer other than the implementer), after a first round on 46774c37 (6420514256, FAIL on one point, patched in one in-place line). This seat adds the landing read, not a second contract read.

  1. Shape. Draft, base main at fbb75998, mergeable: true / clean; body line 1 Fixes #26143, no closing keyword beside any other card number; Clause-②: no, Metadata-protocol: none. Files: SKILL.md (lines 170, 171, 175 in place), references/landing-operations.md (§B main-red block, two Tier S/H restatements retired to their homes), references/execution-duties.md (lines 10 and 40 in place), references/triage-duties.md (one line added beside the urgent-triage rule, one 红线 duplicate retired, line 71 in place); +11/−11, all inside the claim's file surface. check-governed-merges.mjs --pr 26210: GOVERNED, Tier S, 22 changed lines. Labels documentation, size/s, skip-changeset — correct, nothing published ships from this tree.
  2. Record, measured. The two records together name every touched line, open every claimed home of a retired line on origin/main and find the same rule with the same force (Tier S/H forms at SKILL.md 路径分叉 and contract-review.md; 裁决恒归人工 at 红线 SKILL.md:30), measure the ratchet from the head tree (319/101/188/103 = CEILINGS, every touched line ≤ 120 bytes, no re-wrap, no script touched), and grep the whole skill for a surviving contradiction. The one found — the seeing seat claiming an anchor in another lane's domain against 红线 「执行席只在本车道认领」 — is closed on a289a055 by naming the main-red anchor as the fourth entry of SKILL.md's closed cross-lane channel list; 红线 line 34 untouched. The seat re-read the four hunks against the card's order (「席位直接立卡派发,分诊后补」, 不等分诊首触、不等维护者, revert-first stanch, triage first touch after the fact as a recorded grade): the text says exactly that.
  3. Gates, pinned to head a289a055. 39 check-runs, 25 success and 14 skipped, none red or pending — among them Lint & Repo Gates, TypeScript Type Check, Test Core, Governed Surface Queue Guard, Lint · PM dispatch-gates, Lint · scoped · tooling self-tests, Check PR Size, and all four claim/close guards.
  4. 维护者速读, corrected against the diff (the PR body is written once; this supersedes its stale paragraph): the four files now say that any seat that sees a full-battery red on main or a merge-queue build looks for the anchor card and, finding none, files a p0 anchor with the failing surface's lane domain, claims it through the named cross-lane channel and dispatches the stanch (revert of the commit that introduced the red; root cause on its own card), without waiting for triage first touch or the maintainer; triage adds its first touch afterwards as a recorded grade and may change the domain, never the action. The existing conventions (one signature one card, first filer wins; p0 fix-forward jumps the queue; the maintainer may hand-merge a one-line fix) stay.
  5. Accepted deviations. (a) triage-duties.md:75 left as is: no ≤ 120-byte in-place form (124/128 measured); covered by SKILL.md:171 两例外豁免 and triage-duties.md:25. (b) Base not merged after the patch: no governed-path commit since merge-base, mergeable: true; the queue builds against main. (c) PR body not patched: os-dev.md writes the body once; item 4 carries the correction.
  6. Carrier, not filed here. AGENTS.md Two-speeds 「triage files it under the main-red convention」 now reads against the skill; Tier H prose, the maintainer's hand only. Raised to the maintainer in the seat thread; a card only on his word.
  7. Landing. Tier S with a PASS record on the current head and every check green ⇒ the owning seat readies it and arms auto-merge through the relay (pr_ready, then automerge_enable), on the maintainer's standing word in the seat thread (2026-10-26: 「你按照 pm-dispatch 技能审核的pr都可以落地」), follows it to MERGED, and confirms on both the queue branch and origin/main.

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pm-dispatch: a main-red is filed and dispatched by the seat that sees it; triage first-touch follows, never gates it (maintainer 2026-10-26)

1 participant