Skip to content

Commit 0d5cc5b

Browse files
qq9340100claude
andauthored
docs(pm-dispatch): 2026-08-08 spec 车道班次沉淀 —— 实测坑位 14–20 七条 (#6650)
* docs(pm-dispatch): sweep 打包晋级条款(#6243 试点定稿)+ mode:cloud 交付通道二修(自开 PR + 订阅唤醒) 发现分诊轮新增 sweep 打包晋级:同类判据、逐项清单、零 rider 自证、范围外 照旧单开、成员单防双派 —— 五条均出自 #6243/PR #6288 试点实测。 mode:cloud 第 3 课改写:create_session 卡实测持有 GitHub API 工具(三例), 正道改为 dev 自开 draft PR + 终报 issue 评论 + PM 挂 subscribe_pr_activity 秒级唤醒;降级通道收窄到 trigger 拉起的会话;巡检退为兜底心跳。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY * chore: re-run CI after skip-changeset label (gate reads live labels on rerun) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY * docs(pm-dispatch): seven operational notes from the 2026-08-08 spec-lane shift (14-20) Battle-tested additions to the 实测坑位 section, each anchored to the incident that paid for it: 14. GraphQL quota debt as an ordered ledger — issue_write's LOOKUP half is GraphQL too, so claims are unavailable during quota-red, not just slow (four zero-outs in one morning; three PRs queued in one recovery window). 15. Parallel spec PRs both moving the pin-count assertion get kicked from the merge queue — stack receipts in merge order, recount from the file (#6512 resolved the same line twice: +1 under #6515, then -7 under #6526). 16. Findings-sweep promotions and sweep cards must re-verify against the main of NOW — an ADR phase commit can absorb members wholesale (#6488's two members absorbed by #6279; the dev's evidence-backed zero-impl stop is the correct output). 17. When a ruled action collides with a measured counter-fact (#6483 vs ADR-0094): execute the ruling, invert the pins honestly, no promote, file the decision card, hold auto-merge for an explicit objection window. 18. Container-restart recovery: triage each dead dev's site into three states — pushed+PR / mid-regen (PM finishes mechanically, 'Recovery commit:' prefix) / mid-source-edit (judge the diff first). 19. Contract-surface changes must run consumer-package tests — a broken fixture in package B only fails from B's own suite (#6287, #5046 family). 20. When a hard precondition needs a repo this seat cannot reach, post the exact commands for the owning seat and wait for readings (#4914); unreachable is not zero-hit. --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent eb1b231 commit 0d5cc5b

1 file changed

Lines changed: 73 additions & 0 deletions

File tree

.claude/skills/pm-dispatch/SKILL.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,79 @@ REST 取 `body`(原文 4321 / 5183 / 4181 字符)+ 取 `body_html`(渲染版)—
397397
`POST /issues/{n}/labels`(真追加),或读-合-写三步;写后照上面 label
398398
discipline 的「写后回读」核对。
399399

400+
**14. GraphQL 配额欠账要清单化,恢复窗口一次连清 —— `issue_write` 连读半边都吃
401+
GraphQL。** notes 3 说过读走 REST、写排队;2026-08-08 spec 车道一个上午配额四度
402+
归零,补上三条实测:
403+
404+
- **`issue_write` 的查找半边也是 GraphQL**:配额红时连「改标签」都失败在
405+
`failed to get issue ID` —— 认领(assign+label)因此整体不可用,⛔ 不要以为
406+
「只是写慢点」;认领类动作在配额红期就是排队,评论(REST)可先行落地把结论
407+
发出去。
408+
- **欠账列成有序清单挂进巡逻词**,不靠记忆:哪个 PR 欠 ready 切换、哪个欠
409+
auto-merge、哪单欠 close/标签,恢复后按序连打 —— ready → auto-merge → 入队
410+
可以在同一个恢复窗口内一气完成(实测三个 PR 十分钟内全部入队)。
411+
- 每轮巡逻**先探一个最便宜的 GraphQL 写**当配额读数,红了立刻回事件流,不逐个
412+
试报错。
413+
414+
**15. 并行 spec PR 都动 pin 计数断言时,队列会踢后进者 —— 收据按合并顺序堆叠,
415+
计数从文件重数。** `type-alias-convention.pin.test.ts` 的计数断言是同一行,两支
416+
在飞 PR 各自 +N/−N 时文本必冲突:入队合并撞上前车结果树 ⇒ `MERGE_CONFLICT` 踢出
417+
(#6512 实测,同一分支解了**两轮**:先撞 #6515 的 +1,再撞 #6526 的 −7)。规程:
418+
419+
- 解冲突时**两侧收据都保留**,按合并顺序堆叠,新计数**从合并后源码重数**
420+
(`grep -c '^export type Iso'`),⛔ 不从两侧收据做算术 ——「the file, not the
421+
history, is the operand」,#6526 的收据注释原文;
422+
- 双方都占用同一个 Iso 编号是常态(各取当时 max+1),重编号**后进侧**;
423+
- 预期这种 PR 被踢不是事故:踢出通知到达 ⇒ 按 os-regen 四步再解一轮即可,不必
424+
预防性串行化两支 PR。
425+
426+
**16. findings sweep 晋级与 sweep 立卡,前提核查要对「此刻的 main」—— 同族 ADR
427+
的 phase 提交能整体吸收成员。** #6488(X/XParsed 恢复卡)两成员 #5507/#5975
428+
晋级(00:40)与立卡(01:48)都晚于 ADR-0122 phase 2 的合并(前夜 19:47,#6279 一次
429+
翻转全仓 1384 个裸别名)却未对其后的 main 重验 —— 派发后 dev 动工前置门才发现
430+
**零剩余工作**,两成员整体被吸收。晋级/立卡不是免检通道:它们与派发一样要吃
431+
「前提对此刻 main 成立」这条判据,同族里有在飞或新落的 ADR phase 提交时尤其要查
432+
其合并时间线。dev 的正确产出是**带证据的零实现停手**(空提交承载报告),PM 抽验
433+
后关卡 —— 这是流程产出的「好的失败」,勿当返工计。
434+
435+
**17. 裁决明令的动作在实施中测出对向事实 —— 照裁决执行、如实反转 pin、不
436+
promote、立独立决策卡、扣 auto-merge 留异议窗口。** #6483 裁决①明令 permission
437+
免测量回滚,实施测量发现 ADR-0094 有 2026-07-14 的方向确认 + 4 处生产写点,回滚
438+
即打断它。处置形状(全套缺一不可):按裁决字面执行;把被打断行为的功能 pin
439+
**反转为拒绝 pin**(不是删除);⛔ 不在同 PR 里做任何 promote/回退;PM 把冲突立成
440+
`needs-user-decision` 卡(A/B/C + 推荐);该 PR **不挂 auto-merge**,合并前留给
441+
维护者一个显式异议窗口。既不拿新事实推翻已下的裁决(那是维护者的权限),也不让
442+
新事实被合并流程静默碾过。
443+
444+
**18. 容器重启杀死在飞 dev —— 现场三态判读,四步 regen 中途的可机械续作。**
445+
2026-08-08 一次重启同时杀死四个容器内 dev(云端工头不受影响 —— 独立容器)。
446+
恢复前先对每个现场做三态判读:
447+
448+
- **分支已推 + PR 已开**:只欠验收 —— CI 重跑 + step-7,不动代码;
449+
- **死在四步 regen 中途**(工作树里未提交的全是生成物,merge commit 已在):PM
450+
直接续作 —— build → 整链 regen → `check:generated` 10/10 → 提交推送;恢复
451+
commit 统一 `Recovery commit:` 前缀留审计;⚠️ 有的现场 regen 一件没跑
452+
(#5628 实测:CI 的 check:docs 红了才暴露),推送前先跑一遍 `check:generated`
453+
别赌;
454+
- **死在源码编辑中途**(未提交的是 src):先读 diff 判完整性 —— docblock 把动机
455+
/失效模式/判据写全的(#5583 的 TDZ cycle fix 实测),PM 可代跑其终验(eager
456+
重现路径 + 定向 + 全量)后提交;写了一半、意图不明的,⛔ 不代提交,记进交接。
457+
458+
dev 的 `.os-scratch/` 一类临时目录是工作物不是交付物,清掉,⛔ 不进 feature PR。
459+
460+
**19. spec 改动的 fixture triage 必须跑消费包测试 —— B 包的坏 fixture 只有
461+
消费者面能跑红。** #6287 的映射变更让 metadata-protocol 一条 conformance fixture
462+
反着断言,spec 范围内任何 sweep 都看不见它(PR #5046 同族:改在 A 包,坏 fixture
463+
在 B 包)。派发令里「消费者面跑一遍」不是礼貌性复测,是唯一能抓到这类断裂的一步
464+
—— step 5 的派发模板对动契约面的单,消费包测试清单要点名列出,dev 报告里要有
465+
各消费包的真实读数。
466+
467+
**20. 硬前置要的仓不可达时 —— 请对应座位代跑并回贴读数,勿派勿硬做。** #4914
468+
裁决硬前置是 cloud/objectui 两仓裸名反查,实测本席凭证 `add_repo` cloud 被拒
469+
(工头会话同样看不见该仓)。处置:在 issue 上贴出**给对应座位的现成命令**(含
470+
notes 6 的对照反查),等读数回贴再派;⛔ 不因「查不了」就当「查过了干净」——
471+
不可达 ≠ 零命中,这是 notes 6「缺失类读数先证伪扫描器坏了」的跨仓版。
472+
400473
The product spans three repos with a fixed dependency direction:
401474
`objectstack` (backend; `packages/spec` is the single contract) →
402475
`objectui` (frontend; its build flows back via `pnpm objectui:refresh`) and

0 commit comments

Comments
 (0)