Skip to content

Commit 3a76e40

Browse files
pm-dispatch(triage): triage pushes the maintainer only from a seven-case list, no progress table (#28972)
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} --> _Requested by **Irene** · [project thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67xVcXmFXUUMj998HaK2NdanT)_ Fixes #28921 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:分诊不再出进度表,只在七种情况下推送你;清单写进分诊席章程 `lanes/triage.md`。 - 为什么改:你说「有问题的时候要找我,没问题我也不需要看」,并「同意推送清单」;另补「pr 超过 6小时没更新」这一条。 - 风险与回滚:只改席位规则文本和行数上限,不加门禁不加标签;回滚即 revert。分诊章程上限 8 → 15,分诊职责 102 → 99,合计 +4 行。 - 先看:① `lanes/triage.md` 第 8–15 行(清单本身);② `triage-duties.md` 三处合并行;③ `check-skill-line-ratchet.mjs` 两条上限及注释。 - 两分钟验证:`node scripts/pm/check-skill-line-ratchet.mjs`,预期 lanes/triage.md 15 行(上限 15)、triage-duties.md 99 行(上限 99),退出 0。 - 需要你做的:无,席位复核后落地;若不同意把分诊章程上限抬到 15 行,在卡上回「否」。 ## What changes `lanes/triage.md` now carries the push list (lines 8–15): no progress table and no chat round report; the channel follows SKILL.md's push clause; everything else goes only into the seat post's round record. At-once cases ① security finding, ② p0 still unclaimed one round after the name escalation or a self-dispatched stop-bleed, ③ `main` or the merge queue red over 2 h with no fix PR in flight. End-of-round cases, merged into at most one push per round: ④ human-floor decision (names the decision card and the one letter), ⑤ release (new blocker, RC retest regression, Version PR waiting only on the maintainer's merge), ⑥ a lane that cannot move (p1 waiting over 4 h on a seatless lane; name escalation unanswered over 6 h where the reclaim needs the maintainer's word; an open PR with no update for over 6 h after the seat knock goes unanswered past the next round, with the addendum's exclusions), ⑦ a permission block, never done in the seat's place. Not pushed: grading, healing half-states, unlocks, contract reviews (PASS/FAIL go to the lane), doorbell answers, a green health reading. Ruling of record (card body, maintainer verbatim): 「由分诊每天出一次中文进度表,频率太低,而且有问题的时候要找我,没问题我也不需要看」 · 「需要我协助的时候你应该推送消息给我 os-zhuang,但是需要和我沟通哪些情况下」 · 「同意推送清单,立卡?」; addendum comment 6568980556: 「pr 超过 6小时没更新,如果不是带决策或者是被阻塞,应该都属于有问题吧」. The raise follows the ratchet header's ruling-of-record path (ruling record 6184799323) by the measured delta only, on the seat's reading that these words order the text into `lanes/triage.md`. ### Line budget (measured on a418225) | File | Before | After | Ceiling | |:--|--:|--:|:--| | `lanes/triage.md` | 8 | 15 | 8 → 15 (+8 landed, −1 paid in place) | | `triage-duties.md` | 102 | 99 | 102 → 99 (lowered) | | both | 110 | 114 | net +4 | New lines in `lanes/triage.md`, bytes against the 120-byte line budget: 117, 113, 106, 118, 118, 118, 120, 111. ### Deletions and the surviving home of each | Deleted text | Surviving home | Reader | |:--|:--|:--| | `lanes/triage.md` scope line (objectstack incl. `ui/`, first touch, cross-lane dedupe, no app-repo triage seat) | `cross-repo-coordination.md` lines 4, 9, 11, 31; business rationale in `filing-gate.md` 24–26 | triage seat, before every routing and dedupe (SKILL.md index) | | `triage-duties.md` 10–11: the owed-review reading set, same-round claim-then-take, isolated subagent same-shape record, ⛔ no tier downgrade | `contract-review.md` lines 21, 23–27, 32, 45–46 | triage seat, when it takes an owed review | | `triage-duties.md` 94: the trigger "two reds on untouched packages in an hour, any seat flips to report-only" | AGENTS.md Build & Test ("any seat flips a gate that reds untouched packages twice in an hour to report-only before any ruling") | every seat | | `triage-duties.md` 101: report only at milestones, real blockers, when asked | superseded by the push list (`lanes/triage.md` line 8); its tail (intermediate state and rate-limit detail go only to the seat post and trigger) kept on the new pointer line | triage seat | | `triage-duties.md` 102: human-floor items still need explicit words, batched not one by one | explicit words: SKILL.md 216 and the `needs-user-decision` row (human only) plus the human-floor list in `triage-duties.md`; batching: the push list's one merged end-of-round push | triage seat | Two wordings were tightened in the merged lines without changing the rule: 「不同意即翻回」 → 「否即翻回」, 「同笔送待决策汇总入下批,附两红 run」 → 「同笔附两红 run 入下批待决」. ## Tests No code path changed; `check-skill-line-ratchet.mjs` changed only in two `CEILINGS` rows and their comments. `node scripts/pm/check-skill-line-ratchet.mjs --self-test` :: exit 0. ## Acceptance notes - `seat-lifecycle.md` still tells every seat to send a Chinese round-report table by chat each round; the new rule overrides it for triage only. Left alone on the seat's order (out-of-scope finding, carrier: seat). - PR #28935 also edits `triage-duties.md` (adds one line, deletes the round-report line); no overlap with the lines here. Whichever lands second re-measures the ceiling. - No new gate and no new label. ## Verification <details><summary>dispatch-gates derivation and reconciliation (head a418225)</summary> `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` :: exit 0 — 39 commands (the ratchet script in the diff widens the derivation). All 39 run, each exit 0; `pnpm --filter @objectstack/lint run check:doc-formula-expressions` first answered exit 3 (prerequisite: unbuilt formula/lint), re-run after `turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` (lock VERDICT command-exit 0) :: exit 0. `pnpm check:pm-dispatch-gates` :: exit 0 (fast tier, 1937 cases). `check:pm-skill-ratchet` :: exit 0. `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran FILE` :: exit 0 — "39 derived famil(ies) accounted for — 39 run, 0 NOT-MEASURED (a DERIVED zero — all 39 recorded an exit code and none of them is 3)". </details> --- _Generated by [Claude Code](https://claude.ai/code/session_01J8VVAkXwVid5ZPTwRQJ5Yo)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5d7cfe6 commit 3a76e40

3 files changed

Lines changed: 30 additions & 9 deletions

File tree

‎.claude/skills/pm-dispatch/references/lanes/triage.md‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
见 triage-duties.md;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。
33

44
- 由维护者一句召唤到任一项目,默认同总监席项目;只写标签与审计评论,⛔ 无 PR、无认领。
5-
- 范围 = objectstack(`ui/` 在内)每张卡首触(业务理由与定级)与跨车道查重;应用仓无分诊席。
65
- 应用仓业务理由由该项目召唤的总监席复核;第三方应用的总监是其自身维护者。
76
- 每 fire 最旧优先;最旧未路由超 4h 的卡本轮先清。
87
- 补半状态前先确认无人在动,读后新现六态属他席即停手;⛔ 不加第二席、不改 fire 频率。
8+
- 推维护者仅限需其出手,通道照 SKILL.md;⛔ 无进度表与聊天轮报,余只进座位贴轮次记录。
9+
- 即推:①安全发现(机制只在会话给);②p0 点名升级后一轮仍无认领,或分诊已自派止血;
10+
- ③`main` 或合并队列红逾 2h 且无修复 PR 在飞。余下轮末合为一推,每轮至多一推:
11+
- ④人工地板待裁,点名决策卡与所需一字;⑤新发版阻塞、RC 复测回退、Version PR 只待其合;
12+
- ⑥车道不动:p1 卡在无席车道逾 4h;点名升级逾 6h 无答且回收需其一句;open PR 逾 6h 未更新,
13+
先敲其席(无信箱按名)过下轮无答且回收需其一句;待裁或被具名 `Blocked-by:`、`status:parked`
14+
卡、所骑栈阻者与信箱、Version PR 不算。⑦席位或子代理被拒、需人做的动作,⛔ 不代做。
15+
- 不推:定级、治半状态、解锁、契约复核(PASS/FAIL 归车道)、门铃答复、健康绿读数。

‎.claude/skills/pm-dispatch/references/triage-duties.md‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
- 查重缓存住席内:新会话全量拉,其后 `since` 增量;⛔ 不建分支、不共享、不依赖备份。
88
- 每日一 fire 跑两仓全量对账并归集日频职责;选层按 fire 时刻 ⛔ 不用计数器,简报写明层。
99
- 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。
10-
- 复审:每轮先跑 `check-owed-reviews.mjs`(open PR 含 draft,读交接/认领/hold 行),欠审同轮认领后接。
11-
- 隔离子代理达档跑同形记录、署本席;本席也被配额拒 ⇒ PR 写一次留标,⛔ 永不降档审。
10+
- 复审每轮先跑 `check-owed-reviews.mjs`,照 contract-review.md 接;配额拒 ⇒ PR 留标,⛔ 不降档审。
1211
- 每轮比对自审记录 `Head-sha` 与现 head,越过即过期,纯重生成/只动散文面例外(判已提交树)。
1312
- 自审 FAIL 过期 ⇒ 同轮达档重审新 head,逐条复查 must-fix,delta commit 当改动审。
1413
- 自审 PASS 过期 ⇒ PR 记一条 PASS 不再管辖、欠 delta 复审,归本席或新交接行。
@@ -92,11 +91,9 @@
9291
- 不呈:实现细节、不升级类、记账类、p3 排序、CI 重跑、分支清理、patch 依赖、既裁执行。
9392
- 不呈四门同立:无产品可见行为变化、无契约变化、可回滚、有门禁兑底;呈裁卡注判据。
9493
- 例外一:`platform-readings.md` 增量抬上限到落地行数,免决策卡,记 `ruledRaises` 引常设裁决。
95-
- 例外二:一小时内两次红未触包的门禁,任一席位可先翻 report-only,三条硬条件缺一不可:
96-
- ①只翻 report-only,不删门不跳测;②同笔送待决策汇总入下批,附两红 run;③不同意即翻回。
94+
- 例外二:AGENTS.md 报告态翻转,须①不删门不跳测;②同笔附两红 run 入下批待决;③否即翻回。
9795
- 条件:席位验收评论逐条核实、去重计数(候选/落地/已有/拒收)、一事一行、不计重排。
9896
- 机械边界测试(条款②判据):改动扩大接受集或公开面 ⇒ 是;拉回已声明契约 ⇒ 否。
9997
- 回翻条款:实施中发现契约终究要动 ⇒ dev 停手,卡回决策箱,⛔ 永不静默重裁。
10098
- 请示纪律:方向性授权覆盖整条执行链一并做完,⛔ 不逐项回问。
101-
- 汇报只在里程碑、真阻塞、被问到时;中间状态与限流/重试类细节只进座位贴和触发器。
102-
- 人工地板项(发版、天花板、契约扩大)仍需明确字句,但攒批不逐项弹。
99+
- 推送维护者只照 `lanes/triage.md` 推送清单;中间状态与限流/重试细节只进座位贴和触发器。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,7 +1309,11 @@ export const CEILINGS = new Map([
13091309
// same convention (lowering is always legitimate).
13101310
// Lowered 103 → 102 when the whole-card cloud route (PR #26749) merged with
13111311
// main's cloud-involvement lines; landed count, headroom 0, same convention.
1312-
['.claude/skills/pm-dispatch/references/triage-duties.md', 102],
1312+
// Lowered 102 → 99 by the triage push-list card (#28921): lines 10-11 and
1313+
// 94-95 each merged after deleting what contract-review.md and AGENTS.md
1314+
// already state, and the reporting pair 101-102 replaced by one pointer to the
1315+
// push list in lanes/triage.md. Landed count, headroom 0, same convention.
1316+
['.claude/skills/pm-dispatch/references/triage-duties.md', 99],
13131317
// execution-duties.md, raised 183 → 185 by the split-off-card ruling — an
13141318
// ORDINARY raise, ⛔ not a cross-file move (card #23579). The text is two rule
13151319
// lines beside the derived-sub-issue rules in 〈候选与批次〉: a queued card found
@@ -1496,7 +1500,20 @@ export const CEILINGS = new Map([
14961500
// maintainer 「#25558 记为 D」 (2026-10-24), adopting the record's workload
14971501
// 「`lanes/triage.md`「应用仓无分诊席」之后补「应用仓业务理由由该项目召唤的
14981502
// 总监席复核;第三方应用的总监是其自身维护者」」. Measured +1, ceiling +1.
1499-
['.claude/skills/pm-dispatch/references/lanes/triage.md', 8],
1503+
// 8 → 15 by the triage push-list card (#28921). Ruling of record: the card
1504+
// body's maintainer words, verbatim and untranslated, 「由分诊每天出一次中文进度
1505+
// 表,频率太低,而且有问题的时候要找我,没问题我也不需要看」, 「需要我协助的时候你
1506+
// 应该推送消息给我 os-zhuang,但是需要和我沟通哪些情况下」 and 「立卡」 on the push
1507+
// list (「同意推送清单,立卡?」) whose card names this file, plus the addendum
1508+
// comment 6568980556 「pr 超过 6小时没更新,如果不是带决策或者是被阻塞,应该都属于
1509+
// 有问题吧」. The text is the push list:
1510+
// no progress table, the seven cases split at-once / end-of-round, one push per
1511+
// round, the 6 h stale-PR case and the not-pushed list. Eight lines landed, one
1512+
// paid in place (the scope line, which cross-repo-coordination.md states for
1513+
// the same reader), so the measured delta is +7; triage-duties.md fell 102 → 99
1514+
// in the same PR, net +4 over both. Not a CROSS_FILE_MOVES destination, so no
1515+
// `ruledRaises` record applies. Landed count, headroom 0, same convention.
1516+
['.claude/skills/pm-dispatch/references/lanes/triage.md', 15],
15001517
// 399 → 405 (#11126): maintainer-ruled (2026-08-23, option B, quoted in that
15011518
// PR) — the +6-line cross-repo dispatch-gates caveat, sized so the queued
15021519
// #11137 (395→399 on main) and this PR's +6 compose to exactly 405.

0 commit comments

Comments
 (0)