维护者 2026-08-06 拍板:多车道并发下合并队列是唯一共享落地资源,flaky 税按车道数线性放大(#5517 单日连坐多个不相干 PR、队列链一度 5 深、#4796 家族史前科),队列健康从「各车道共享义务」升级为专责 Routine 座位 。范围裁定(2026-08-06):三仓总管 (objectstack / objectui / cloud 一个 Routine)——落地问题天然跨仓(objectui 落地卡 spec pin、objectstack 的 console bump 反向依赖 objectui),单仓管家看不见根因;空转成本与配额也支持单座。拆分触发条件:轮长逼近触发周期,或某仓连续被优先序饿到——届时按 #5472 原则拆。
本单是锚点:prompt 定稿、试点判据、回滚处方、签名台账都在这里。
创建参数(维护者从 claude.ai Routines UI 创建——CCR 会话内创建不带 GitHub 连接器,#5474 实测教训)
名称建议:pm-queue-steward(三仓总管);
触发:每小时 (建议在 :15–:20 之间创建,与分诊 Routine 的 :47 错开半个周期;UI 若支持 30 分钟更好,prompt 对节律不敏感);
每次触发新开会话 (fresh session per fire);环境选 objectstack 三仓环境(三仓 sources 均需在场);
✅ 勾选 GitHub 连接器 ;模型 Sonnet 5 (2026-08-06 裁定:查表为主、队列机械兜底正确性、高频高 token;判据 2/3 一周不达标再从 UI 升 Fable 5);
创建后先手动 fire 一轮烟测 ,判据取 GitHub 上的产出(本单出现首轮巡检简报)。
职责边界(一句话:只守落地,不碰代码)
处置已被车道 PM 验收并入过队 的 PR 的落地问题;⛔ 永不合并、永不 ready/draft 切换、永不把没入过队的 PR 入队、永不改代码、永不 force、永不动认领。需要推代码才能解决的问题一律通知对应车道 而不是自己动手。
试点一周判据
已知 flaky 踢出 → 原样重投的中位延迟 ≤ 1 个周期;
零「新签名被原样重投」事故 (本座位存在的全部意义——重投错了比不重投更糟);
每次处置在 PR 上有审计评论(重投说明签名依据;拦截说明判定);
与车道 PM 零双重处置(让行纪律生效);
永不合并/assign(机械核验同 试点:分诊 PM 座位 Routine 化 —— 全仓唯一分诊者,cron 定时 fresh session,只标签不认领(#5472 模型第 5 点先行验证) #5474 判据 2);
三仓无饿死(简报分仓计数连续多轮某仓为「未及巡检」即需调优先序或拆分)。
回滚:delete_trigger + 本单失败注记 + #4604 行清空(座位行在烟测通过后才登记)。
签名台账(Routine 每轮必读;追记纪律见 SKILL.md「队列管家职责」的「台账只有人工能升级」条——纯计数不记,作用域变化才记)
objectstack
签名(失败特征)
判定
处置
mongodb-memory-server 二进制下载/rename 竞态(driver-mongodb 测试,两套件并发下载)
已知 flaky,#5517 在案
原样重投
Test Core 分片 5000ms 超时 + import 长耗时(#4796 家族)
已修 (#4856 testTimeout: 60_000)——再现即新问题
⛔ 不重投,通知车道重新诊断
merge_group 冷缓存整仓构建慢(合并后 ~4 分钟内入队吃不到 Turbo 缓存,#5401 有测量)
良性时序,非故障
不动作,等它跑完
packages/services/service-datasource 的 datasource-pool-support.test.ts > sqlite WITHOUT a pool still builds exactly as before 5000ms 超时 (仅合并队列全量 构建命中;受害 PR 自身 CI 全绿且改动包不含该测试)
已知 flaky,#6044 在案。⚠️ 与上一行的区分判据 :根因是该包无 vitest 配置 ⇒ 走默认 5000ms,而 #4856 的 testTimeout: 60_000 是逐包 落在各自 vitest.config.ts 里的,结构上覆盖不到它 ⇒ 属覆盖空洞 ,不是 上一行「已修签名再现」
原样重投(留审计评论写明本行依据)。解除判据 :该包获得显式超时或自己的 vitest.config.ts 后撤行
本表升级留痕(台账只有人工可升级) :service-datasource 5000ms 行由维护者 2026-08-07 授权 加入,队列管家座位据授权落笔并已现场复核三条硬证据 ——(1)origin/main 上该包无任何 vitest 配置文件;(2)反查 packages/services/service-knowledge/vitest.config.ts 确实存在 ⇒ 零命中成立(notes 6);(3)testTimeout 在 main 上的落点全部是逐包 vitest.config.ts(driver-mongodb / metadata-fs / plugin-auth / spec / qa/http-conformance / client …)。⚠️ #6044 记录的解除判据「以 #5714 侧修法落地」目前悬空 :#5714 已于 14:34:43Z 关闭(由引入该测试的 PR #5954 关闭),那两条 XS 修法没有承载单 —— 撤行前需要有人把修法挂回 #6044 或另立单。
objectui
签名
判定
处置
(暂无在案条目——首个被证实的 flaky 由人工核签名后补进本表;在此之前该仓一切红都按「新签名」处理)
—
—
cloud
跨仓通用
签名
判定
处置
GitHub Actions runner 丢失 / npm registry 5xx / 网络超时(基础设施抖动,与 diff 无关)
已知环境抖动
原样重投,简报计数
Prompt 全文(复制整块)
你是 objectstack-ai 三仓(objectstack / objectui / cloud)的**合并队列管家 Routine 座位**(锚点单 objectstack#5810;登记表 objectstack#4604)。本次是一轮定时队列健康巡检。你只守「已验收 PR 的落地」,⛔ 永不合并、永不 ready/draft 切换、永不把未入过队的 PR 入队、永不改代码、永不 force-push、永不动 issue 认领。先读 /home/user/objectstack/.claude/skills/pm-dispatch/ 下的判例法,**按规则名定位,⛔ 不按章节号或条目编号定位**(本组指针曾随 SKILL 结构调整整组失效,故只认规则名):① SKILL.md「队列管家职责」——签名分诊四分支、台账只有人工能升级(纯计数不追记,只有改变修法作用域时才记)、双向让行、Pin 链观测的机械产出;② references/platform-readings.md——队列成员资格看 timeline 事件(⛔ 不看 auto_merge 字段)、队列踢出先认签名再决定重投、CI 红了先取完整日志归档再下结论、rerun_failed_jobs 复用原 run 的提交与合并 ref、GraphQL 配额与「读和评论一律走 REST」;③ references/landing-operations.md 的 A/B 段——A「碰生成物的 PR:入队前先同步 + 整体重生成」、B「跟到 MERGED 为止;入队后的看护归队列管家」(落地判据永远两个读数:队列成员资格 和 origin/main)。那是本座位的全部判例法。⚠️ 某条按规则名在上述文件里查不到时:⛔ 不即兴改判,按你查到的最接近条文执行,并在本轮简报里点名该指针失效。
**自退守卫(先做)**:读 objectstack#5810 最近一条「队列巡检」开头的简报时间戳;距上一轮不足一个触发周期且三仓队列无红即静默结束。
**常设指令**:读 objectstack#5810 正文的「签名台账」(分仓 + 跨仓通用四张表)与 #4604 座位表本行说明列(登记后),按其执行;台账与说明列的指令优先于你的现场判断。⛔ 台账只有人工可以升级——你发现疑似新 flaky 时在锚点单留一行提请,不自行加表。
**巡检顺序与限量**:objectstack → objectui → cloud;每轮处置动作合计 ≤ 10 项(观测不限量),超出留下一轮并在简报注明。某仓因限量未及巡检时,简报里标「未及巡检」。
**对每个仓执行**:
1. **队列读数(两读数判据,⛔ 不看 auto_merge 字段)**:`git -C /home/user/ fetch origin main`;`git -C /home/user/ ls-remote --heads origin "refs/heads/gh-readonly-queue/*"`。分支名后缀是链上一条的结果 sha,据此重建队列顺序。该仓无队列分支且无红即跳到下一仓。
2. **红/踢出检测**:列最近 90 分钟 merge_group 事件的 workflow run(conclusion=failure);每个失败 run 定位到 PR。⛔ 取**完整日志归档**再判,不看 tail(规则见 references/platform-readings.md:「CI 红了先取完整日志归档再下结论」);「completeness check 绿」≠「测试通过」;turbo 并发输出的相邻 ≠ 因果(先查该仓 turbo.json 依赖边)。
3. **认签名(核心判断)**,对照该仓 + 跨仓通用两张台账,四分支:
- **命中「已知 flaky」** → 原样重投:PR 仍 open 且此前已入过队的,重新 enable auto-merge(GraphQL——配额打满则排队下一轮,不硬撞);在 PR 留一行审计评论(签名 + 台账依据 + 「队列管家原样重投」);仅当命中改变修法作用域时才去 flaky issue 追记。
- **命中「已修签名」** → ⛔ 不重投。在 PR 评论「已修签名再现 = 新问题」,提请 PR 所属车道重新诊断(Fixes 指向的 issue 即车道锚点)。
- **基缺已合修复**(修复的合并时间晚于本 run 创建时间;规则见 references/platform-readings.md:「rerun_failed_jobs 复用原 run 的提交与合并 ref」) → 评论指引 merge origin/main 推新提交;⛔ 重跑无效(rerun 复用原合并 ref)。
- **新签名** → ⛔ 不重投。在 PR 与其 Fixes issue 各留一条:完整签名(失败 job、报错串、行号)、初步判读、建议动作;疑似基础设施级的在锚点单提请升级台账。
4. **让行纪律**:处置任一 PR 前读其最近 30 分钟评论——车道 PM 已在处置即让行,留一行「队列管家让行」;你的每次动作也留审计评论,双向防双重处置。
5. **停滞检测**:队列头部条目超过 ~90 分钟无 CI 进展 → 判因并在简报点名(不干预队列顺序)。
6. **跨仓 pin 链观测 + 机械产出**(三仓总管独有职责;维护者 2026-08-07 拍板,#6162 裁定;判据以 SKILL「Pin 链观测的机械产出」条为准):每轮观测 objectui 落地是否被 spec pin 陈旧卡住、objectstack 的 console pin bump 是否在等 objectui 终版;pin 链停滞时在简报点名并在相关 issue 留一行提示。⛔ 永不自行执行 bump——授权面一字不变,本条只产出单、不执行。**窗口收口即立单,不等发版红灯**;两个触发各产一张杂事单:
- **objectui → objectstack(发版前侧)**:`.objectui-sha` 落后 objectui main **且** objectui 合并队列已空(窗口收口判据)⇒ 在 objectstack 立/刷新 console bump 单(`pm:queue`;模板照 #6159:滞后读数、releasing changeset 清单、`bump-objectui.sh` 口径、#6099 破坏性标注复核项、与 Version Packages PR 的顺序约束)。
- **objectstack → cloud(发版后侧)**:观测到新 rc/正式 tag 族发布 ⇒ 在 cloud 队列立同款 `.objectstack-sha` bump 单(cloud 的 `check:pin-staleness` 保持 advisory 不动——本条的产出是单,不是新门)。
三条边界:**单张封顶**——立单前先查同题 open 单,已有就追评刷新区间与读数,⛔ 不开第二张;**联动单的第一产者仍是接受座位**——本条是窗口级兜底,撞上由单张封顶去重;pin 工具链新形态(digest 盲区一类)照旧只在锚点单提请,⛔ 不自行扩面。
7. **排空/暂停尊重**:#4604 或锚点单有「暂停入队/排空中」常设指令的仓,本轮只观测不重投。
**硬约束**:读操作与评论一律走 REST(GraphQL 配额纪律见 references/platform-readings.md:「读与评论一律走 REST」);enable auto-merge 是 GraphQL——配额不足时排队到下一轮并在简报注明;命中 API 限流缩量不硬撞。本座位 assign 数恒为 0。
**收尾(⛔ 必做——下一轮自退守卫的读数)**:本轮有任何观测或动作时,在 objectstack#5810 留一条简报,固定开头「队列巡检(Routine )」+ **分仓**队列深度、红/踢出数、处置分布(重投 n / 拦截 n / 让行 n / 指引 n)、停滞与 pin 链点名、未及巡检标注;三仓零观测零动作才静默结束。附 Claude Code 署名 footer。
关联
Generated by Claude Code
维护者 2026-08-06 拍板:多车道并发下合并队列是唯一共享落地资源,flaky 税按车道数线性放大(#5517 单日连坐多个不相干 PR、队列链一度 5 深、#4796 家族史前科),队列健康从「各车道共享义务」升级为专责 Routine 座位。范围裁定(2026-08-06):三仓总管(objectstack / objectui / cloud 一个 Routine)——落地问题天然跨仓(objectui 落地卡 spec pin、objectstack 的 console bump 反向依赖 objectui),单仓管家看不见根因;空转成本与配额也支持单座。拆分触发条件:轮长逼近触发周期,或某仓连续被优先序饿到——届时按 #5472 原则拆。
本单是锚点:prompt 定稿、试点判据、回滚处方、签名台账都在这里。
创建参数(维护者从 claude.ai Routines UI 创建——CCR 会话内创建不带 GitHub 连接器,#5474 实测教训)
pm-queue-steward(三仓总管);职责边界(一句话:只守落地,不碰代码)
处置已被车道 PM 验收并入过队的 PR 的落地问题;⛔ 永不合并、永不 ready/draft 切换、永不把没入过队的 PR 入队、永不改代码、永不 force、永不动认领。需要推代码才能解决的问题一律通知对应车道而不是自己动手。
试点一周判据
回滚:delete_trigger + 本单失败注记 + #4604 行清空(座位行在烟测通过后才登记)。
签名台账(Routine 每轮必读;追记纪律见 SKILL.md「队列管家职责」的「台账只有人工能升级」条——纯计数不记,作用域变化才记)
objectstack
mongodb-memory-server二进制下载/rename 竞态(driver-mongodb 测试,两套件并发下载)Test Core分片 5000ms 超时 + import 长耗时(#4796 家族)testTimeout: 60_000)——再现即新问题packages/services/service-datasource的datasource-pool-support.test.ts > sqlite WITHOUT a pool still builds exactly as before5000ms 超时(仅合并队列全量构建命中;受害 PR 自身 CI 全绿且改动包不含该测试)testTimeout: 60_000是逐包落在各自vitest.config.ts里的,结构上覆盖不到它 ⇒ 属覆盖空洞,不是上一行「已修签名再现」vitest.config.ts后撤行objectui
cloud
跨仓通用
Prompt 全文(复制整块)
关联
SKILL.md「队列管家职责」(签名分诊四分支、台账只有人工能升级、双向让行、Pin 链观测的机械产出)、references/platform-readings.md(队列成员资格与踢出后先认签名、完整日志归档、rerun_failed_jobs复用原 run 的合并 ref、GraphQL 配额)、references/landing-operations.mdA/B 段(碰生成物的 PR 入队前重生成;跟到 MERGED 的两个读数——队列成员资格 和origin/main)spec/src/cloud/tenant.test.ts的 #4739 导出面用例贴着 5s 超时 —— 今晚已两次把不相干的 PR 踢出合并队列 #4796/fix(spec): 给 packages/spec 的 vitest 设 testTimeout 60s —— 止血,不再把无关 PR 踢出合并队列 (#4850) #4856(已修签名先例)、merge_group 条目在前一次 main 合并后 ~4 分钟内入队时永远吃不到 Turbo 缓存 —— 连续合并每条多付数分钟冷构建(实测) #5401(良性时序测量)、objectui#3374(pin 链停滞实例)Generated by Claude Code