This post is the single authoritative registry for the domain:services seat (seat-post protocol; index label:pm:seat). Single writer: incumbent only. Read side: body + comments later than the body's last edit. ⛔ 班次叙事不进正文;本贴只载当前值 。
1. Current PM — 🟢 在任
在任 : session_01ToDPcx9AESFubJkDiFMtKW (GitHub os-sales ), 2026-09-10T13:0xZ 起。分支 claude/pm-dispatch-services-8cy4x8。
就座依据 —— 干净坐席,非接管、非惰性回收。 互斥四读于 2026-09-10T13:02–13:10Z 取得。读数一/二:座位贴最新事件就是前任 session_012zTkyNHJ7TkuN2oXtP5x37(os-tesla,原 os-trump)的收班简报 (#issuecomment-5619060948,12:59:08Z)及其更正(#issuecomment-5619084654,13:00:54Z),其后无开轮标记 。⇒ 按「收班简报是释放标记不是锁:简报即最新事件 ⇒ 立即坐席」直接就座,⛔ 无需保守确认。读数三/四只增加自退,本轮未触发。
✅ 围栏已解除(2026-09-10T15:11Z) : 前任点名的唯一留守尾巴 PR fix(security): OAuth-connected MCP agents run at the delegator's recorded scope, and a narrowed delegated read says so #17332 (卡 OAuth-connected MCP agents run under the mcp_agent_data_* ceiling ∩ user, not "as yourself": a viewAllRecords manager sees 5 accounts / 0 opportunities over OAuth vs 9 / 23 over an API key #16549 )已 MERGED 。⇒ 前任的留守义务已履行完毕 ,本席全程未碰。⚠️ 随之解除的串行约束 :plugin-security 的五个受围栏文件(explain-engine.ts、objects/default-permission-sets.ts、permission-evaluator.ts、security-plugin.test.ts、security-plugin.ts)现已空出 —— 之前因它们被延后的卡(如 A permission set accepts a hierarchy readScope beside viewAllRecords: true, never reads it, and emits no diagnostic — the declaration materialises and a capability census counts it as coverage #16870 )可重新定价。⛔ 但重新定价要对合并后 的 ref 重验。
上一任台账 : session_012zTkyNHJ7TkuN2oXtP5x37 09-07T09:29Z 起,R25→本班,12:59Z 收班。⚠️ 该班跨越一次 GitHub 账号停用事故(os-trump → os-tesla),复盘见 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 。
接手 : /pm-dispatch services,先读本贴。范围与常设承诺在 references/lanes/services.md。
红线:零 packages/spec(触即转 domain:spec 席);安全边界放宽 是维护者地板;⛔ 永不在代码 PR 里改 content/docs/releases/**。
⛔ 并发上限 = 5 (维护者 2026-09-03 上调)· 🔴 运行水位 = 3,维护者 2026-09-10 明示
维护者本会话逐字:「任务很多,并发保持3」。⇒ 上限仍是 5,运行目标是保持 3 个 dev 在飞,槽位空出即补,⛔ 不因「等这一波复核完」而空转。⚠️ 补位不豁免任何前置 。
🔴 现 0 在飞,而水位 3 够不着,这是测出来的不是选出来的 (04:55:43Z 落地探针 + 04:51Z 全车道读数,见 §2 候选表):整条车道此刻只有两张 pm:queue 无 assignee 的可派卡(#16315 / #16384 ),两张都在 PR #17454 的 45 路径集里,而 (#17454) 落地探针 = 0 (阳性对照 (#17603) = 1,阴性 0)。⇒ ⛔ 不硬派、⛔ 不自退(队列并非空,只是够不着;⛔ 「够不着」≠「空」)。
🟢 席位档位 —— 本席跑默认判断档 ,这是现行规则下的正确档位
维护者 2026-09-10 裁定(skills 席敲门 #issuecomment-5612096731,逐字):「现有的卡片如果写了要求fable的,也要让相关的项目经理知道,opus就够了。」⇒ 契约复审档只保留给 skills 席、spec 席的条款②复核、与维护者召唤的总监席。⛔ R25 那条「本席低于契约复审档 ⇒ 一律派 fable 隔离复审子代理」的纪律已作废 。⚠️ 触 packages/spec 的 diff 仍照旧路由 spec 席。
🟢 REST 对本席可达 (200,13:0xZ 实测;04:1xZ 与 04:59Z 再次实测可用,含 PATCH /issues/comments/{id} 与公共 GET)
⚠️ 与 R25 的读数相反 (那一班测得 403)。见修正 95。
2. Ledger — 现值 2026-09-11T22:52Z,读数在 origin/main @ 6fa2a8ae1(22:50Z 取,非浅检出;与上一枪同 tip)
在飞 dev 0 · 落地窗口 0 · 待复核 0 · 决策箱 4
🟢 本轮交付已收口,无半状态遗留。 #17601 的测量轮从认领到进决策箱全程闭合,逐笔都有回读。
卡
状态
#17601
✅ 两轮全部完成,卡已关(completed),pm:* 残留已摘、回读无残留。 R1 = 测量轮 PR #17613 (dea214f81);R2 = 裁决执行轮 PR #17686 (6465cc0a7,13:26:24Z) —— 落地探针 1、阳性对照 1、阴性 0,并打印代码块 做文件面复验(⛔ 不用短语 grep,见修正 133),被禁触的两个 guard 5/2 未动。时标:挂 13:02:56Z → enqueued 13:03:43Z(47 秒 )→ merged(队列约 23 分钟 )。⭐ 裁决(选项 B,一类自裁,召唤 #22 待维护者追认)点名本席执行,Clause-②: no、patch;dev 交付 0 条非注释行 。⚠️ 遗留按裁决记为可接受残渣 :审计行翻倍若日后要求「一次推进一行」,那是 A 形态的新卡 (Clause-②: yes,且须同轮回答出口路由),#15970 是其兄弟;同族「at most one」断言仍是已申报的未测零 。
✅ 本班落地 23
前段 6:#17441 · #17443 · #17450 · #17460 · #17436 · #17470 。
中段 9:#17489 · #17491 · #17496 · #17514 · #17522 · #17525 · #17537 · #17539 · #17549 。
后段 8:#17559 · #17565 · #17570 · #17575 · #17583 · #17593 · #17613 (卡 #17601 R1,dea214f81,04:5xZ)· #17686 (卡 #17601 R2 裁决执行,6465cc0a7,13:26:24Z)。
⚠️ #17599 / 卡 #17571 ⛔ 不计入 22 :他席派发、复核、武装,本席只持落地窗口(02:37:28Z 合并后已关闭交还)。⛔ 不把「在本车道落地」与「本席交付」混为一谈。
🔬 本班立卡:席位 9 · dev 6 · ⭐ 主动不立 1
席位:#17451 · #17452 · #17467 · #17483 · #17493 · #17495 · #17579 · #17598 · #17720 (四个巡查锚的心跳行不写自己的周期;车道映射 domain:skills,⛔ 本席未打 domain:*)。
dev:#17541 · #17560 · #17561 · #17562 · #17573 · #17596 。🔴 本行先前的表头写 5 而这里列了 6 个号 —— 数错的是表头,已改为 6(⛔ 不是删一个号来迁就它)。
⭐ 不立:页脚重复那条撞 open 的 #17239 ,改为在其上补读数(两张 PR 互证,仍不立第二卡)。
⚠️ 候选:2 张可派、两张都挡着(04:51Z 全车道 68 张 open;04:55:43Z 重取落地探针)
卡
挡因(实测)
怎么重测
#16315 / #16384
在 PR #17454 的 45 路径集里(head b57c135c0,仍 open + draft);两个阻塞路径 packages/plugins/plugin-auth/src/find-envelope-limb-removal.test.ts、packages/plugins/plugin-auth/src/auth-plugin.ts 逐条复验在内 ;阳性对照 pnpm-lock.yaml 在场。17:26Z 重取(第 14 次):PR API 直读 merged: false · state: open · draft: true,head b57c135c0 十四次未动;45 条路径清单本次改用 PR 自己的 get_files 直读,两条阻塞路径逐条在列
git fetch origin claude/adopt-account-issuer-rollback-17440 后 git diff --name-only $(git merge-base FETCH_HEAD origin/main) FETCH_HEAD,对三个探针 + 两个对照各 grep 一次;另跑 git log origin/main --oneline | grep -c '(#17454)' 带双对照
#16160
双挂 domain:spec ⇒ 红线,路由 domain:spec 席(该席 🟢 在任,os-bill / #6017 )
读该卡标签集
#14496
✅ 已出候选集 —— 17:29Z 关闭(completed),pm:queue 同笔摘掉,标签回读 = union(零剥落)。 四张 sub-issue 全 closed/completed;裁决步骤三(#14361 )已于 09-09T01:54Z 释放进 domain:devx 队列,并已点名落地目标 ADR-0133 / 0134 / 0135 ⇒ 本父单不再协调任何东西。⚠️ 唯一残项是裁决派给「接受该 PR 的席位」的 cloud 侧「加指针」杂事卡 ,objectstack-ai/cloud 本会话不可达 ⇒ NOT MEASURED (⛔ 不是「已做」也不是「缺失」),已逐字写进关闭评论
⛔ 不需重测;复核读 #issuecomment-5638213915。重开免费
本轮进本车道的其余 3 张,⛔ 没有一张是本席可派的 :#17610 (p1,pm:dispatched,assignee hotlong)· #17611 (needs-user-decision)· #17612 (pm:blocked)。
⚠️ #15074 / #15120 仍有 domain:services 而无任何 pm-state(04:51Z 第四次重测)⇒ 析取 ③ 半状态,治愈归分诊席 。
✅ 19:46Z sweep 的本车道 H 行已逐行处置(锚 #9857 ,commit 66440147a)
锚已刷新 (Swept 19:46:06Z)⇒ 18:26Z 那次「心跳停摆」判断确认是假警报 ,周期 37 1,7,13,19 * * * 所致,已立卡 #17720 。本贴无 H38 行。
H 行
卡
处置
H19 · H26 · H28 · H52
#11973
⛔ 无动作 —— 本班修正 132 已判过:卡面正文预先答过这四条(「⛔ Do not promote on (a) alone」),assignee 是 os-steve。⛔ 不重判、不留噪音评论
H26(经 #11979 )
#11978
✅ 见下 —— H26 的成因是本卡错戴 pm:on-hold
H52
#11286 · #11453
✅ 已处置 —— 而且是本 session 2026-09-10T13:2xZ 就处置完的 (issuecomment-5619228978 / 5619234640):#11286 答 A (维持 #7497 之后的排序)并就地更正了卡面一条不存在的依赖断言;#11453 的残留问题早已被执行 (选项 B 已在树上)。⛔ 本轮零动作、零评论
🔁 已站下但永不自清 的 H 行(⛔ 每轮先读这张表,再读锚)
H52 的谓词是结构性的(「最新 os-dev-report 带非空 open_questions 且卡无 needs-user-decision」)⇒ 一条处置评论不会让它消失,它会在此后每一次 sweep 里继续出现 。本轮为此付了一次完整重读的代价(两卡正文 + 17 条评论),而处置是本 session 自己 18 小时前做的。
行
卡
站下依据(读这条,⛔ 不重做)
H52
#11286
issuecomment-5619228978(答 A + 依赖断言更正)
H52
#11453
issuecomment-5619234640(选项 B 已执行,⛔ 不向 spec 席立卡)
H19·H26·H28·H52
#11973
修正 132;卡面正文预先答过,assignee 他席
H9(本就不亮)
#11286 · #11453
两卡的 Restart-when: 住在评论通道 :5536814313(closed #7497)与 5481796501(机器形全行)⇒ 合法持有,⛔ 不得翻标
✅ 本轮修复两张卡的半状态:#11978 与 #11975 ,pm:on-hold → pm:blocked(各自一条评论 + 一次标签 replace,回读 = union,零剥落)。
判据是机械的,不是判断:两卡正文各带一条 Blocked-by: 行(指向仍 open 的 #11975 / #13515 )、都没有 Restart-when: 行 —— 而 pm:on-hold 仅当带机器可读 Restart-when: 才合法。⭐ 阳性对照:同一条正则在 #13515 上取回了 Restart-when: 全行(plugin-security 的某个 minor 大于承载 L4 的那个,附 2026-08-31 实测)⇒ 另两卡的 NONE 是真缺席,不是仪器答不出。两卡自己最近的评论也逐字 写着 pm:blocked 才对(#11978 的 5478577663 与 5536462985)。
⭐ ⛔ 这不是放行,也没有消音 H26。 链条真正不能动的原因坐落在 #13515 (发版边界的合法 hold,本轮实测其 Restart-when: / Restart-touch: 齐备、无 Blocked-by:),本席刻意未动它 。修完的链是:#11973 / #11979 → #11978 (blocked)→ #11975 (blocked)→ #13515 (on-hold + 机器可读重启条件)。
🔴 本轮测到的他席欠账:#15970 / #15556 的 pm:blocked 前提已被证伪
#15970 已挂 pm:retriage + 异议评论(#issuecomment-5629344090;标签回读 6 个,pm:blocked 未被剥)。实测链:两卡 09-07T04:14Z 转 pm:on-hold「阻塞于 #16472 」→ #16472 已于 09-07T08:28:33Z 关闭(completed) ,裁决(总监席批 #76 ,维护者「同意」)逐字写明「#15970 and #15556 leave pm:on-hold for pm:queue」→ 卡上 08:28:26Z 有该中继 → 但两卡今天都是 pm:blocked ,updated_at 停在 09-07T09:33:5xZ / 09:33:39Z(比中继晚 65 分钟、相差 15 秒、且无任何评论 )→ 且正文无 Blocked-by: 行 。⇒ 很可能是对的状态缺了那行(裁决自己点名 packages/spec 前置),但没有那行任何扫描都放不回来 。⛔ 本席不改其标、不搜那张 spec 卡(归分诊)。
🗳️ 决策箱勤务台账(21:5xZ 实测四卡,⛔ 下轮不重审)
四棱块与速读两个通道都查 (正文 ∪ 评论 —— 修正 138a;只查正文会把三张完好的卡误报成缺)。
卡
四棱
os-decision-facets 标记
维护者速读
缺口
#16974
✅ 4/4(评论 5620688836)
✅
✅
无
#16678
✅ 4/4(评论 5627670266)
⛔ 有意不补
✅
无 (见下)
#17396
✅ 4/4(正文)
✅
✅ 22:52Z 补齐 (5641534630)
无
#17611
✅ 本轮补齐 (评论 5641086533)
✅ 两形
✅
无
⭐ #17611 的补齐不是抄模板:实测定出卡面没有定价的那一项 —— MessagingChannel(channel.ts:96)只有 id / send() / 可选 classifyError?(),无可用性查询 ⇒ 选项 A 要在已发布接口上新增成员 (Clause-②: yes 级);而选项 C 的 onlyWhen 是已在 spec、已被 Reaper 消费、三处上线先例 的键 ⇒ 零新契约 ;并测出选项 B 单独做一行也不少写 (suppressed 早是合法终态,所以 B 不减行、只换标签)⇒ B 是 C 的搭配而非 A 的替代。推荐 C + A 另立卡,回退 C+B,置信缺口点名「那个部署的 Reaper 到底跑不跑」。
⛔ #16678 的标记有意不补,判据是实测的 :os-decision-facets 在全仓只出现 1 次 —— 即 references/decision-analysis.md:39 那句定义它自己 的话,没有任何脚本读它 (阳性对照:同类标记 os-dev-report / os-half-state-sweep 出现在 8+ 个文件,含 check-half-states.mjs 与 check-clause2-carriers.mjs,确有具名读者)。⇒ 补一个无人读的标记是 cargo cult。⭐ 而且「没有读者」本身是维护者裁过的状态,不是缺陷 :#9886 (「把 facet-block rollup 冻进 scripts/pm/」)以 not_planned 关闭,出处是维护者 2026-08-19「之前定期生成的决策汇总 issue 没什么用」→ PR #9982 删掉了 digest 逐轮刷新职责、批量决裁通道与该脚本化出口条款本身 ;现行收件箱形态是「不推送、不指派、维护者逐卡裁决」⇒ 可 rollup 的对象不存在。⇒ 本席没有 按 declared≠enforced 立 enforce-or-remove 卡 —— 那会重新审理一条已关闭的裁决。⚠️ 相关:#14237 (completed)正是把标记改成「纯文本行与 HTML 注释形等价、任一即满足」的那张卡,其收尾明写「⛔ 注释形读不到永不读作无四棱块」⇒ 本台账的审计用字面串计数,两形皆计,判据成立。
⇒ 决策箱勤务本轮收口:四卡全部形状完整,⛔ 下轮不再审这一项。
决策箱 4 (⛔ 只列不催;13:28Z 按 label:needs-user-decision 现查所得,⛔ 不从记忆推 )
#16974 (等一个字母 A/B/C)· #17396 · #17611 · #16678
🔴 写这个数字时我差点又写成 3 (凭记忆列 #16974 / #17396 / #17611 ),现查才发现 #16678 也在箱里 —— 修正 130 在写下它三小时后就第二次兑现。⇒ 全仓 30 张 needs-user-decision(返回数 = totalCount),其中 domain:spec 独占 16 。#17601 已于 11:53Z 被裁并出箱。
🔴 本行先前写 5 并含 #17369 ,那是错的 —— 见修正 130。 #17369 已于 2026-09-11T04:36:11Z 被裁(批 #114 第 3 项,选项 3),当时已离箱转 pm:queue;本席 04:59Z 那次 flush 仍按 03:51Z 的列表快照把它写成在箱。现状(10:12Z 实测):pm:queue + pm:retriage (本席 05:54Z 挂,问车道归属),⛔ 不可派 —— 其 MUST-FIX 面全在活着的 domain:cli 席(R73)领地。
⚠️ 分诊席 #6015 自 2026-09-11T04:34Z 起 🔴 vacant(维护者令收班) ⇒ 本车道两条 pm:retriage(#17369 · #15970 )与两张无 pm-state 的卡(#15074 · #15120 )当前无读者 ;按「交给空席是停放不是路由」已逐次点名交维护者,⛔ 不自答、⛔ 不自行改 domain:*。
⚠️ 补位钥匙 PR #17454 连续 20 次读数未动 (最近一次 18:26Z 落地探针 (#17454) = 0 ,阳性对照 (#17686) = 1、阴性 (#99999) = 0,--is-shallow-repository = false / 13 679 提交)⇒ #16315 / #16384 仍挡着。⚠️ 该 PR 是他席 (hotlong,卡 #17440 pm:dispatched)的 draft,⛔ 本席不翻 ready、不催、不碰。
3. Hot-file serial queue
本席持有:无。 #17686 落地后 approval-service.ts 与 stranded-resubmit-second-door.test.ts 两条均已释放。 #17613 落地后其两条路径已释放:packages/plugins/plugin-approvals/src/stranded-resubmit-second-door.test.ts(新建)与 scripts/engine-double-contract.pinned.json(+2 行)。⭐ approval-service.ts 全程未触 —— 派发令申报的文件面含它,交付的 diff 一行生产代码都没动。
⚠️ 给其它车道的一条:scripts/engine-double-contract.pinned.json 是全仓 ledger,任何新增 engine double 的 PR 都会碰它。 它不是 single-writer 路径(SINGLE_CLAIM_PATHS 实测恰 1 个成员 .objectui-sha,阳性对照命中;该 ledger 在那个门禁里 0 命中)⇒ 普通共享并发,后落地方解冲突。门禁会用 --write 的 remedy 指路,⛔ 不要手改。
本班其余全部释放:service-automation/src/engine.ts · service-analytics/src/{dataset-executor,dataset-compiler}.ts · service-analytics/src/strategies/{objectql,native-sql}-strategy.ts 与 src/preview-evaluator.ts · content/docs/automation/approvals.mdx 与 capabilities/approvals.mdx · service-automation/src/{suspended-run-store,sys-automation-run.object}.ts · scripts/check-durability-degradation-log-level.mjs 与 measure-durability-swallow-family.mjs · service-storage 的 S3 适配器面(他席)。
他席持有:
⚠️ File-level, ⛔ never package-level。⚠️ 围栏读数会腐烂,而腐烂时没有读数会告诉你 (修正 64 / 116)⇒ 围栏句必须带测于何时 ,本表每行另带「怎么重测」。
4. Standing corrections
Items 1–15 stand. 16–20 只存活为摘要 :16 安静的座位贴 ≠ 安静的座位 · 17「等别人」清单会无声腐烂 · 18 卡可以指名一个不存在的 API 而仍正确 · 19 单一所有权会在缺陷被评估前把它围起来 · 20 关掉的卡会永远挂着在飞标签。
mutex 协议两态、班次三态 ⇒ 需维护者仲裁。[finding] A seat post can go stale for a whole shift and nothing detects it — the staleness has a one-query signature, and prose in the seat post has now failed to prevent it twice running #13493
继承来的围栏是关于代码的断言 —— 重测它。
动手前先清掉卡的必验项 ⇒ 对树核,⛔ 永不对卡核。
🔴 记录持久性受限于承载卡的作者账户。Dangling-reference patrol: nothing detects an issue reference that fails to RESOLVE (as distinct from closed) — measured 6+ times, and a card's author is unreadable once it is unreachable #13634
issue_read 的 comments 不是可读评论数;分页读。
🔴 来自「回答不了该问题的命令」的零不是零,是 NOT MEASURED。⛔ 没有反向对照的零不是证据。
共享主检出不是 origin/main ⇒ 判据在 origin/main 的 worktree 里跑。⛔ 永不 git stash。
🔴 修正 26 管「某物不存在」的任何断言。「死在第 N 步」推不出「没做过第 M 步」。
check:i18n 与 check:skill-examples 用 exit 1 报「前置未满足」⇒ 读 verdict 行,永不读裸退出码。
跨陈旧基线的 git diff origin/main..HEAD 会把后来合入的文件显示成删除 ⇒ 用 git diff ..HEAD。
🔴 updated_at 晚于你上次读评论的时间 = 有你没读过的东西。
改动集变化后必须重推导门族。
⛔ 开轮标记不是坐席。 坐席 = 正文 §1/§2 + 标题 + assignee 三者同笔改成在任现值。
上一班简报里的「在飞 0」只管子代理,不管标签 ⇒ 接班按卡逐张核 pm:dispatched。
串行判断要对着围栏读 (git diff --name-only),不对着包名读。
issue_read get_labels 对 PR 号报错 ⇒ PR 侧标签用 pull_request_read get;issue_write 对 PR 号写 labels 可用(整体替换,先读现集)。
多 ref 一次 git fetch 后 FETCH_HEAD 不可靠 ⇒ 一律显式 sha。
🔴 标签 read-modify-write 的「read」必须紧贴「write」 。
get_check_runs 列表落后于 job API 且分页只给前几条 ⇒ 久挂的 job 用 job id 直读。
🔴 「已挂 auto-merge / 已入队」不是状态,MERGED 才是。 最便宜的权威读数是 git log origin/main --oneline | grep '(#PR)'。⚠️ 前提是完整历史 —— 见修正 89。⭐ 本轮再加一层:连落地探针也只证明了提交主题在 main 上 ,最好同时核交付物本身(git cat-file -e origin/main:<path>)。
[Decision] 标题 + pm:queue = 已裁、同笔转队的常态 ⇒ 读最新裁决评论定状态。
触 packages/spec 的已裁卡先切 contract-first 。
⚠️ dispatch-gates 不为「移动了被锚定行」的改动推导 check-system-context-census ⇒ 派发令要求 dev 显式跑。
⚠️ PASS 后 head 移动要重挂 needs:contract-review ⇒ 补丁轮后落地前再读双载体一次。⭐ 本轮照此执行:head 277f3cad6 → 78d95af86 后把 --pair 重取一遍(两次都 EXIT 0),一个取自被取代 head 的 PASS 是 recall 不是读数 。
⚠️ 维护者的并发指示随时改,以最新一条为准并写进 §1。
🔴 子代理被用量上限(429)终止 ≠ 死认领,⛔ 不重派。 SendMessage 原 agent 续跑。
⚠️ system-context.mdx 是本车道自己的冲突磁铁。
🔴 隔离复审 FAIL/DECISION 的处置 = 裁决逐字贴卡 + 补丁轮令只引用裁决、不改写 。
⚠️ 复审子代理的 DECISION 不是「PR 失败」。
⚠️ 复审 §5 的非阻塞项落地后成组立一张 finding,⛔ 不逐项立卡。
⚠️ 多批次卡的剩余批次派前重核锚定规则。
⚠️ send_later 投递可迟到且不保证 ⇒ 每个轮次边界重挂;枪里的判断会过期 ⇒ 每枪先写「幂等,重读状态」。
⚠️ 合并队列的位置与进度可读:actions_list 过滤 event=merge_group,队列分支名形如 gh-readonly-queue/main/pr-NUMBER-MAINSHA。
⚠️ 认领可与 dev 启动分离,前提是认领评论写明启动闸门。
⚠️ 本地 git merge-tree 对 census 页的「driver 拒绝」≠ GitHub 侧冲突。
⚠️ dev 报告里的 open question 若属 PM 判断范围 ⇒ 席位当场答在卡上 ,⛔ 不上交维护者;安全放宽类才上交。
⚠️ 「测量卡」的派发令必须把「⛔ 停在测量」写成硬约束并复述分诊原话。⭐ 本轮生效:dev 带回 POSITIVE 却零生产代码、零修法推荐 ,并把修法选择原样留给决策箱。
⚠️ 两个提交可有逐字相同的树:核 ^{tree} 相等 + git diff --stat 为空。
🔴 正文里的四棱块 + pm:queue = 已裁,不是待裁 。⇒ 本轮把 [finding · UNVERIFIED, derived from reading] On a stranded resubmit strand the row stays returned, so a second submitter resubmit appears to pass every approvals door guard and insert a second action: 'resubmit' row against the "at most one such action row" assumption #17601 的四棱块放在评论 里而不是正文,正是为了不制造这个歧义。
⚠️ 完整的分支围栏扫描可行:先一次 git fetch 再逐个 git diff --name-only。
🔴 merge_group 上你这张 PR 的批次 completed success ≠ 它合并了。
🔴 队列 flake 的处置姿态五条。
⚠️ dev 可以静默死在一条不会到达的通知上;续跑令要它自己去测那个它在等的状态 。
🔴 围栏 grep 只覆盖你问到的路径,而卡的文件面会长大 ⇒ dev 交付后按实际 diff 重扫。⭐ 本轮兑现:申报面是 approval-service.ts + 一个测试文件,实际交付是一个测试文件 + 一条全仓 ledger ,两条都重扫过(与 feat(auth)!: adopt better-auth's account-issuer rollback — drop sys_account.issuer, retire the backfill, lift the family to 1.7.3 #17454 零相交,阳性对照在场)。
⚠️ 必需检查 TypeScript Type Check 在其 lane 被 cancelled 时报的是 failure ⇒ 读 lane 的结论再判。
Corrections 66–88 只以评论存在 ,⛔ 未回填。最常被踩的三条:79 认领的对偶不是「有没有 Claim: 评论」而是「Claim: 之后有没有释放/交付/关单」· 84 一个可能就是答案的对照不是对照 · 88 读回声明不得与它所报告的写动作同处一条评论。
🔴 全新会话的检出可能是 SHALLOW,而修正 40 的落地探针在它上面会静默答错。 ⇒ 接手第一件事跑 --is-shallow-repository;为 true 就先 git fetch --unshallow。⛔ 派发前的前提过时检查在浅检出上是假读数。
🔴 一个 hold 的解除条件可以键在一个「没有任何流程会更新」的字段上,于是永远不可能触发。 ⇒ 写 Restart-when: 时问:什么动作会改变这个读数?
⚠️ 受管面 PR 请审必须显式带 draft: true,写后读回 draft 位。 ⭐ 本轮的对偶动作也照此做了:翻 ready 之后读回 draft: false 才去挂 auto-merge。
⚠️ 合并队列提交的时间戳是队列构建它的时刻,不是它落地的时刻。
🔴 一张卡可以在已被裁决之后被另一个席位重新挂回决策箱 —— 因为那个席位没读裁决。 ⇒ 挂 needs-user-decision 之前,先分页读到该卡评论的真正末尾。⚠️ 本轮补的作用域 :风险不止在本卡 —— 当卡 A 的修法挂在卡 B 的未决裁决上([finding · UNVERIFIED, derived from reading] On a stranded resubmit strand the row stays returned, so a second submitter resubmit appears to pass every approvals door guard and insert a second action: 'resubmit' row against the "at most one such action row" assumption #17601 ⇢ approvals: a recall whose resume strands reports it as an ordinary non-failure — no repairable discriminator, where the identical strand through decide carries one #15970 ⇢ service-automation: a subflow's bubbleToParent failure is swallowed, so an approval decision answers 200 resumed: true while the run behind it is stranded — #13807's three-outcome shape, one level up #15556 ⇢ [Decision] Must a resume failure reach the CALLER in a shape it can act on? — the family question triage reserved, now that its instance cards have each measured their own half and stopped at the same contract #16472 就是这形状),B 上的已存在裁决同样会让 A 的升级变成白跑 ⇒ 要读到被点名的那张卡 ,而且要读到它所指的那张 。本轮正是这样才挖到 [Decision] Must a resume failure reach the CALLER in a shape it can act on? — the family question triage reserved, now that its instance cards have each measured their own half and stopped at the same contract #16472 已落地。
🔴 阻塞可以成环:A Blocked-by: B,而 B 在本仓的剩余项就是 A。
🔴 REST 可达性是逐 session 的属性,⛔ 不可从座位贴继承。 每班自己探一次。
🔴 把卡移交给一个空席位 = 停放,不是路由。 ⇒ 移交时多读一个读数:目标座位贴的死活。
⚠️ enable_pr_auto_merge 的 mergeMethod 参数会被静默忽略。 ⭐ 本轮第二次实测同一现象:省略该参数,工具仍回报 method: MERGE,而本仓 allow_merge_commit = false ⇒ 那个字段恒与仓库设置矛盾且与结果无关 ,最终提交由队列决定。⇒ 读到它 ⛔ 不要当成问题,也 ⛔ 不要试图改(本会话 GraphQL 被限制)。
🔴 Clause-② 的申报是席位的,而 PR 正文是 dev 写的。 Check Changeset 只认正文行首的字面 Clause-②: yes|no。
🔴 PR 正文每写一次,服务端就追加一条页脚 ⇒ 补声明时同一笔把 dev 的 session-URL 页脚一并删掉。⚠️ 本轮 dev 报了一个方向相反的读数 (REST 通道上 create 追加 session-URL 形、edit 追加裸形,各自之后都只存 1 条 );而 AGENTS.md 440–444 附近已写明这类现象并明令「Which layer does this is unknown; don't go establishing it 」⇒ ⛔ 本席不改写 99、也不去建立机制 ,只记:实测本 PR 最终只有 1 条页脚 ,所以 99 的缓解措施在该形态上无须动用。
🔴 读任何 aggregate 检查的红之前,先问「我读的这个 head 还是当前 head 吗」。 并且 cancelled + 零证明放行是裁决 CI: Dogfood Regression Gate 把 cancelled 当失败 —— 每次连续推送都产生一条假红 #3668 的设计处置,⛔ 不是漏洞、⛔ 不立卡。
⚠️ 轮次号是座位贴上可读的事实。 grep 本贴最新的 R 标记,且要看是谁的 R (巡查 tick 的 R8 与座位贴的 R1 是两个计数器)。
⚠️ 修正 99 的作用域只到 PR 正文:评论的编辑与 issue 正文的编辑都不追加页脚。 ⭐ 本轮第三次实测成立:就地改认领评论后回读页脚 1 条;本贴 flush 后页脚亦 1 条。
🔴 finding 与 pm:queue 同挂 ⛔ 不是半状态。 判据在门禁自己的读法里(check-half-states.mjs 的自测断言)。
🔴 本席自己的「被挡候选」清单会腐烂,而它腐烂时没有任何读数会告诉你。 ⇒ ① 被挡清单每行必须带「挡因 + 怎么重测」;② 多选项卡在判「决策形状」前必须把分诊评论读到末尾。
🔴 一个回合里每次要写时间戳就重读一次时钟 ,⛔ 不从回合开头那一次读数往后推算。最便宜的自检:回读的 updated_at 比你写的「现值」早 ,就说明你在写未来。
🔴 量载体只用门禁自己的读取器 (check-clause2-carriers.mjs --pair);grep 顶多是线索,⛔ 永不作「载体不存在」的判据。
🔴 机械地板的原话是「新导出符号」或「已发布载荷上的新键」,⛔ 不是「已有导出的行为变了」。 ⇒ 申报 yes 前先问「新增了什么」;读裁决要连它的范围一起读。
🔴 把某个门禁说成一条规则的权威时,点名实现那条规则的脚本并驱它。 yes ⇒ minor 的耦合住在 check-changeset-no-major.mjs 的 level axis,不在 carriers 门禁。
🔴 申报住在带 Claim: 行的那条评论里 —— 另起一条评论说「我更正了」在门禁眼里是 near-miss。⇒ 在门禁读取的那个位置就地改。
🔴 落地前检③「每条 check 全绿」必须按 check 名取其最新一次运行来判。 ⭐ 本轮再加一形:skipped 不是 green 也不是 红 —— skip-changeset 标签让 Check Changeset 整个 job 跳过 而非通过,判据是「非 failure」而不是「等到一个绿」(dev 在报告里点名提醒了这一点,是对的)。
⚠️ 入队滞后挂 auto-merge 几十秒,三个判据三个时标 :pull_request.enqueued 事件 最快、队列 ref 可滞后到 2m12s、auto_merge 字段恒不可作判据、落地只认落地探针带双对照。
🔴 贴紧写的那次读取必须「喂给」那次写入,否则它只是装饰。 ⇒ ① 目标集在读之后生成(target = (read - remove) | add),⛔ 不手打 labels:[...];② ⛔ 定时器/检查点文本里永不写现成的标签集、载荷或申报值。⭐ 本轮三次标签写(approvals: a recall whose resume strands reports it as an ordinary non-failure — no repairable discriminator, where the identical strand through decide carries one #15970 加 pm:retriage、[finding · UNVERIFIED, derived from reading] On a stranded resubmit strand the row stays returned, so a second submitter resubmit appears to pass every approvals door guard and insert a second action: 'resubmit' row against the "at most one such action row" assumption #17601 转决策箱)全部照此算出并回读为 union,零剥落。
🔴 一张「只加测试文件」的 PR 必定在 Check Changeset 上红,正确修法是标签而不是 changeset,且那条红不会自己清掉。 门禁日志自己把 skip-changeset 标成 <<< PREFERRED,空 frontmatter 的 changeset 路线已关闭 (空 frontmatter changeset 相对 skip-changeset 标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471 ;全空集合会让 Release 跑 0 秒、不出 version PR、而且照样绿 —— 空 changeset 会静默卡死已 version 的发布:Release run 全绿,但 npm 和 Docker 什么都没发(17.0.0-rc.2 现在就卡着) #4898 )。⇒ ① 测量卡/只加测试的派发令必须把 skip-changeset 写成交付项 (这次红了才说,是本席派发令的缺口);② 那条红是历史运行,按名取最新即退场;③ ⛔ 永不替 dev 打这个标签了事。⭐ 附带仪器:「只加测试」的条款②怎么测 —— 读包的发布面声明(files / exports / tsconfig exclude),并用「src/ 里已有 40 个测试文件」作阳性对照。⭐ 本轮 dev 给了更强的一版:把包构建出来,对 files[] 里每条路径 grep 探针符号(0 命中),阳性对照 continueRestoredRun 命中 4 个已发布文件 ⇒ 声明级与构建级两种方法互证。
🔴 派发的 Claim: 必须点名 dev 的分支 —— 我漏了,是 dev 在报告里逮到的。 AGENTS.md:398 逐字:PM「sets the assignee (step 1) and posts the Claim: naming the dev's branch (step 2)」;:400 让 dev 核对最新 Claim: 是否点名自己的分支 、不符就停下报告 。我 03:30Z 在 [finding · UNVERIFIED, derived from reading] On a stranded resubmit strand the row stays returned, so a second submitter resubmit appears to pass every approvals door guard and insert a second action: 'resubmit' row against the "at most one such action row" assumption #17601 的认领只写了席位、session、轮次 —— 共享账号下分支就是执行者的身份位 ,少了它那道核对无物可比。⇒ 已在门禁/读者真正读的那个位置 就地补上(修正 121 的同一条纪律),留可见更正说明,回读 6187 字节、页脚 1 条,⛔ 未另发第二条 Claim:。⭐ 两件要记牢:① dev 报自己派发令的缺陷是本席要的行为 ,⛔ 不粉饰、⛔ 不当噪音;② 它选择继续而不是停摆 (认领来自派发会话、它没写 assignee、没发第二条 claim)也是对的 —— 规则要它停下报告,它报告了且没造成歧义。
🔴 「挂完等够 ~60 秒再判」这个阈值本身是错的仪器 —— 本轮实测 arm → enqueued 是 78 秒。 修正 123 把观测区间记作 43–67 秒并据此定了 ~60 秒;本轮 04:28:25Z 挂、04:29:43Z 入队,78 秒 ,即一个 60 秒的阈值会第三次 把「还没到」读成「失败了」。⇒ 纪律改成:判据是事件到达,⛔ 不是秒数 。等 pull_request.enqueued(或到点再取队列 ref),⛔ 永不在窗口内重挂,⛔ 也不再给这件事写一个新的秒数 —— 我已经为同一个错调过两次阈值(先 60 秒太紧、再 3 分钟太松),第三次的修法不是再调一次数字,是不用数字 。⭐ 同族的正向读数:enqueue → merged ≈ 25.5 分钟 (本班先前一次 20 分钟)⇒ 队列耗时也只能当分布看,⛔ 不当承诺。
🔴 决策卡的模板 要求一个推荐,而我差点因为「修法选择是裁决级」把它省掉 —— 那会写出一个形状不合规的四棱块,也就是一个半状态。 references/decision-analysis.md 的六项写法第六条是「推荐 + 回退 + 置信缺口 :荐一项、给回退项、明说本分析看不见什么」,四棱块的固定形状末尾也明写「一行推荐 + 字母选项」。而卡面与分诊都写着修法选择「⛔ 不可由实现轮选择」,我的认领评论也写了「⛔ 不自己选」。⇒ 两者不冲突,是我读混了两件事 :红线管的是 ⛔ 代维护者作答 与 ⛔ 擅自实施 ;模板要的是分析里的一个具名推荐 ,维护者仍然裁。推荐 ≠ 答案。 ⇒ 正确做法(本轮已执行):荐一项(B)、给带条件的回退(A)、把置信缺口写狠(没做同族断言普查、不知有无真实客户到过、未为「与 approvals: a recall whose resume strands reports it as an ordinary non-failure — no repairable discriminator, where the identical strand through decide carries one #15970 合并成通则」定价),然后 ⛔ 不实施任何一项。⚠️ 反向的错同样要防:省掉推荐不是更谨慎,是交付了一个不合规的决策卡 —— 维护者要在没有推荐的情况下自己重建四轴,那正是模板存在的理由。
🔴 本贴的归属页脚在一次 flush 中被 静默剥掉**,而我只是因为回读时顺手 grep 了它才发现 —— 注册表可以在你以为写对的时候丢掉一部分。** 实测:经 MCP issue_write 更新正文,我带在载荷里 的 --- + 页脚在存储端不在了 (回读命中 0),而正文其余部分逐段完好 (末段 SINGLE_CLAIM_PATHS 在场,所以不是截断);随后用 REST PATCH /issues/6021 把同一串字节加回去,回读命中 1 并保留全部标签与 assignee。⛔ 不去建立是哪一层做的 —— AGENTS.md 440 附近对这类页脚现象明令「Which layer does this is unknown; don't go establishing it 」,本条严格只记读数与动作。⇒ 两条可操作纪律:① 每次 flush 的回读必须把页脚当一个显式探针 (连同「现值」「在飞」「最新一条修正号」一起按字面 grep),⛔ 不要只看 updated_at 或工具回的 200 —— API 200 不等于落地正确(多席可写面恒读回,这条把它扩到「单席可写面也要读回内容」);② 发现缺失就用 REST 从 回读到的字节补,⛔ 不重打正文 —— 重打一遍 16 KB 的注册表才是真正会丢东西的动作。⭐ 与修正 114 的关系要说清:114 测到「评论编辑与 issue 正文编辑都不追加 页脚」,那条仍然成立;129 补的是另一半 —— 不追加 之外还可能被剥 ,两者叠起来的净效果就是 0 条,而 114 当时没有把「0」这个可能性量出来。 ⭐ 2026-09-11T18:28Z 又测到第三种形态,作用域随之扩大:MCP issue_write 的 create 路径同样剥页脚。 新立卡 [finding] Four patrol anchors tell the reader that a stalled Swept line means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 的载荷里带了页脚,创建后 REST 回读命中 0 ,正文其余部分逐字完好(末段「nearest neighbour」在场,所以不是截断);按本条既定修法用 REST 从回读到的字节 追加页脚,再回读命中 1 、字节数 5648 → 5707、标签与 type: Task 未动。⇒ 129 的纪律从「每次 flush 的回读」扩成 「经 MCP 写任何正文之后都把页脚当显式探针」 ,create 与 update 同等对待;⛔ 仍不去建立是哪一层做的(AGENTS.md 440 附近明令)。
🔴 我把一份列表快照写进了「现值」,于是座位贴的决策箱数字在 flush 的那一刻就是假的 —— 而且是我自己的规则逐字禁止的那件事。 04:59Z 那次 flush 写「决策箱 5 」并列入 verify's cross-tenant proofs are skipped for a reason ADR-0132 falsified — but the obvious fix is pinned shut by the entitlement boundary #17369 ;实测 verify's cross-tenant proofs are skipped for a reason ADR-0132 falsified — but the obvious fix is pinned shut by the entitlement boundary #17369 已于 04:36:11Z 被裁(批 🔗 Broken links detected in documentation #114 第 3 项,选项 3)并转 pm:queue,比我写入早 23 分钟 。数字的来源是 03:51Z 的那次整车道列表读数 ,而协议写着「⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废 」。⇒ 本条与修正 124 是同一根:124 是「读了却用了提前打好的载荷」,130 是「压根没为这次写入重读,用了一小时前的列表」。两者的共同解法是写入前对被写到的每一项现读一次 ,⛔ 不是「这一轮早些时候扫过了」。⚠️ 附带一条更窄的教训:决策箱的成员数是最容易腐烂的一个数 ,因为它同时被裁决(出箱)与新卡(入箱)两头改,而两头都不由本席驱动 ⇒ 写它之前按 label:needs-user-decision + 本车道标签现查一次 ,⛔ 不从记忆或上一次全扫推。⭐ 发现路径也要记:这条不是巡检发现的,是半状态巡查锚的 H38 行点名本贴 之后我去核对才掉出来的 —— 锚行处置的副产品比锚行本身更值钱的情形,本班第二次。
⚠️ H38(座位贴 STALE)可以由 别人的认领触发,而修法仍是本席改正文。 本轮实测:锚(swept 07:48:27Z)点名 [PM seat] domain:services — 🟢 os-sales · session_01ToDPcx9AESFubJkDiFMtKW · R1 #6021 「its lane domain:services carries a Claim: on service-messaging: a late HTTP ack from a REAPED claim overwrites the live re-claim on sys_http_delivery — IHttpOutbox.ack(id, …) carries no claim credential (the notification outbox fixed this shape in #11859) #17634 written 1.6h AFTER this post's last event(claim 06:40:36Z,post 05:05:20Z)」—— 而那条认领不是本席写的 (service-messaging: a late HTTP ack from a REAPED claim overwrites the live re-claim on sys_http_delivery — IHttpOutbox.ack(id, …) carries no claim credential (the notification outbox fixed this shape in #11859) #17634 由他席定级并派给 hotlong)。⇒ H38 的谓词是车道范围 的,不是「本席有没有新动作」:只要本车道任一卡的 Claim: 晚于本贴最后一次事件,它就亮。⛔ 不要因为「那张卡不是我的」就把这一行读作不适用;处置照旧是一次正文编辑 (评论不清 H38)。⭐ 反过来也成立:本席连续数枪静默无产出时,H38 仍可能因他席在本车道的活动而亮 —— 那是信号不是噪音。
🔴 半状态巡查锚的 H19「阻塞已活过它的阻塞者」不是一条可直接执行的行 —— 它会在一张 被正确停放的卡上亮,因为扫描表达不了「合取」。 本轮实测,platform-admin re-anchor L3 (plugin-auth): re-point ensure-default-organization; re-price last-admin-guard as its own reviewed step #11973 同时被 H19 / H26 / H28 / H52 四条谓词点名,读起来像一张该放回队列的卡。去读卡本身,答案已经写在正文里、而且是预先 写的:该卡的重启条件是 (a) Blocked-by: #13689 关闭 AND (b) 验收条款 3 的 walled-rig 端到端通过 ,而 (b) 明写「⛔ not claimable from this repo」。正文还逐字预言了这条锚行:「The unlock scan reads issue.body only, and a single Blocked-by: edge would promote this card the moment Seam (enterprise organizations package): its ensureDefaultOrganization wiring still triggers on grant inserts, which never fire on a fresh walled rig — adopt the exported isDefaultOrganizationBootstrapTrigger #13689 closes while acceptance clause 3 is still unmet. That exact false-promotion already happened once on The by-id write pre-image gate resolves the row under the caller's own read scope, so an app-authored widener is still dead on private even once checkAuthoredRowWrite admits it #7401 tonight, because its correction lived in a comment. ⛔ Do not promote on (a) alone. 」⇒ 三条读法:① H19 是输入不是判决 (锚自己写着 report-only),处置它=去读卡,⛔ 不是去改标;② 扫描只会读 issue.body 的单条 Blocked-by: 边,所以任何「合取式」重启条件必须整条写进正文 ,写进评论就会被无声跨过(The by-id write pre-image gate resolves the row under the caller's own read scope, so an app-authored widener is still dead on private even once checkAuthoredRowWrite admits it #7401 已付过这个代价);③ H26 的「这个 target 永远不会 close」在这里是卡的既述属性而非缺陷 —— (b) 本来就没有仓内机制,卡点名了两个载体。⭐ 与修正 90 / 94 的关系要分清:那两条是「条件永不满足 / 互相等待」的真缺陷 ;132 是它们的假阳性 形态 —— 同样的外观,而卡已经答过。⇒ 判据永远是卡的正文 ,⛔ 不是锚行的措辞。⚠️ 本条也是本席对该锚行的处置记录 :已判、⛔ 无动作、⛔ 未改任何标签(该卡 assignee 是 os-steve,非本席的),⛔ 未在他人卡上留噪音评论。
🔴 「某段文字在不在这个文件里」这个问题,我今晚用手搓的文本查询答错了三次,三次的形状都不同 —— 而第三次错在 更危险的方向**。** ① 正则比权威读者窄 :对 PR fix(service-analytics): refuse an unrecognised compareTo.kind instead of answering a previous-period window under a 200 #17570 的正文跑「行首 Clause-②:,容许 - /> /** 前缀」,零命中,而申报一直在那儿(它以反引号开头,门禁的读取器认)⇒ 假缺席 。② 行锚 grep 撞上硬换行的句子 :git grep -F 'at most one such action row exists per request' 返回 0,而那句话就在 approval-service.ts 里、只是折成两行 ⇒ 假缺席 ,差一步把「这句话不在 main 上」写进派发令。③ 把换行 tr 掉还不够,因为每条续行都带 // 前缀与缩进 :join 之后文本成了 NEW row — so at // most one such...,短语依旧不匹配 ⇒ 这次是假存在/假消失的反向 —— 我的检查报「旧措辞已消失」,若采信就等于报告「改动已落地」,比前两次的假缺席更危险 。⇒ 收敛成一条纪律:⛔ 永不让手搓的文本查询充当「X 在/不在文件里」的判据 。三个合规替代,按优先级:(a) 用权威读者 (门禁自己的脚本、--pair、--pr);(b) 把区域打印出来用眼读 (本轮落地复验就是这么做的,所以没被第三次咬到);(c) 若必须程序化,先剥注释前缀再 join,并且配一个必须命中的阳性对照 。⭐ 与修正 26 / 118 同族,但 133 是把它们收成一句可执行的话:26 说「没有对照的零不是证据」,118 说「零可能来自比权威读者更窄的问法」,133 说连带对照的零也可能来自一个读不到该形状的仪器 ,所以换仪器而不是加对照。⚠️ 本条的反向也要记:落地/交付的复验同样不能靠短语 grep —— 判据是落地探针(带双对照)加上打印交付物本身 。
🔴 我给别人的方案写了一个二分,而那个二分把它说窄了 —— 窄掉的恰好是该方案的全部要点。 本轮在 [Decision] 平台自带的四个定时示例流一个都声明不了组织 —— 而新规则要求它们必须声明 #17396 上分析跨席提来的候选 E(装机时按组织克隆声明),我实测出「cloneFlowDefinition 只改 name/label/status,organization 不在其中 ⇒ 克隆照样声明不出组织」,这一条是对的。错在随后写的二分:「E 要么 要求管理员 克隆后再手工补,要么 要给那个三字段 mutation 集加第四个字段」。⇒ 漏掉的第三支是 安装器代做那次写入 —— 而那正是 E 的定义本身(提案原话是「由安装器代管理员做」)。照我的写法读,E 会被读成「必然人工」,也就是它被提出来要避免的那件事;附带还把一个不存在的 ADR-0126 §7.1 修订摆到了维护者面前当成必答题。⇒ 纪律:写「要么…要么…」之前先把执行者枚举一遍 (人 / 安装器 / 运行时 / 门禁),⛔ 别把「谁来做」默认成人;更一般地,复述他席方案时,先用它自己的原话核对一遍你的转写 ,⛔ 不要只核对其中的技术事实。⭐ 处置照修正 121 的同族纪律做了:在同一张卡上发一条短订正 (3 分钟内),明写结论不变、E2/E3 不受影响、并把交给维护者的那个问题一起收紧,⛔ 没有重写原评论(它已被读过,重写等于改记录)。
🔴 一条裁决可以把某张卡判成「⛔ 永不派发」,而那张卡照旧挂着 pm:queue —— 于是它每一轮都作为候选出现,每一轮都要被完整读一遍才能再次判出「不能派」。 本轮实测 [Decision] Where does a decision that governs OPEN code live? — cloud (private) ADRs are cited from this public repo in 60 files with a qualifier and ~110 more times bare, squatting on unrelated local numbers (0024 · 0071 · 0081); mirror them here, or qualify only #14496 :总监席 2026-09-02 裁决明写「本卡 needs-user-decision → pm:queue,作父单/协调节点(⛔ 永不派发)」,分诊席 09-04 照裁决保留该标 —— 两侧都没错,但净效果是队列里一个永久的假候选 ,而本席的「被挡候选」表里它已经躺了九天(修正 116 说的腐烂的另一种形态:不是读数腐烂,是一个永远不会变的读数每轮重付一次 )。⇒ 判据:父单/协调节点的 pm:queue 是有期限的 —— 期限 = 它还在协调东西。子树全 closed 且剩余步骤已落到别的车道并点名了目标 ⇒ 它不再协调任何东西,正确转换是关闭 (completed,同笔摘 pm:*),⛔ 不是让它继续占着队列。⚠️ 两条配套的自律:① 关闭不得吞掉未完成的义务 —— 本卡裁决派了一件 cloud 仓的「加指针」杂事,本会话读不到那个仓 ⇒ 按 NOT MEASURED 写进关闭评论并点名谁能做,⛔ 不写成「已完成」、也⛔ 不写成「缺失」;② 关这种卡要把「重开免费」写在评论里 —— 这是一个可逆动作,维护者与任何后来者都可以一键推翻,说出来它才真的是可逆的。⭐ 与修正 41 的关系:41 说「[Decision] 标题 + pm:queue = 已裁、同笔转队的常态,读最新裁决评论定状态」—— 135 是它的下一段:读完裁决之后还要问一句「这张卡现在还在协调什么?」 ,答案是「没有」就该关掉。
🔴 我连着两枪把「现值」写成了一个比写入落地时刻更晚的整时刻 —— 第一次自己抓到了,第二次又犯,说明抓到不等于改掉。 实测两次:17:33Z 那次写「现值 17:35Z」,回读 updated_at = 17:32:43Z ;18:29Z 那次写「现值 18:31Z」,回读 updated_at = 18:29:17Z 。两次的读数其实都取在更早(17:25Z / 18:25Z),我却在写入时把时钟「凑整往前推」。⇒ 根因不是算错,是用了一个不存在的输入 :「现在大概几点」不是读数,而现值这一栏要的恰恰是读数。⇒ 纪律:现值 = 产出这份台账的那次读数的时刻 ,直接抄那次读数打印出来的时间戳,⛔ 不取「写的时候大概几点」、⛔ 不凑整、⛔ 不往前留余量。自检仍按修正 117:回读的 updated_at 早于 你写的现值 = 你在写未来,当场改回去。⭐ 与修正 130 同根:130 是「用了一小时前的列表当现值」,136 是「用了几分钟后的时钟当现值」——两头都是没有让那次写入去读它要写的东西 ,与修正 124 是同一条脊椎。
🔴 我把过滤放在截断之后,于是自己造了一次假缺席 —— 而这次差一步就把它写成一条平台事实。 查 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 的标签改动史时,脚本先取 events 的最后 10 条 labeled/unlabeled,再从中筛 pm:*。非 pm 的标签事件(priority、type)会把 pm 事件挤出那个窗口 ⇒ 读数显示「从来没有过 pm:on-hold 事件」,而我几乎据此下结论说「标签变了却没有事件 = 某个通道绕过了事件日志」。⇒ 改成先筛后看全量 (并打印本页事件总数、查 Link 头确认单页)重测:platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 共 5 条事件、platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 共 13 条,都是单页 ,结论这才站得住。⇒ 纪律:过滤永远排在截断之前 ;凡 [-N:]、head、perPage 与「只看最近几条」出现在一个否定性断言的链路里,那个否定就不成立。⚠️ 本条是修正 133 的第四形态:133 的三种都是查询本身 读不到目标,137 是查询对了、但我先把目标扔掉了 。⭐ 也记一条正向:发现它的不是复核,是「这个结论太惊人了」这个感觉 —— 一个会推翻平台行为认知的读数,必须先怀疑仪器再怀疑平台。
🔴 两条今晚一起撞上的:Restart-when: 的合法通道是「正文 或 评论」,而我用的是只读正文的正则 —— 它在危险方向上出错;以及一条处置评论永远清不掉结构性的 H 行,于是我差点重做自己 18 小时前做完的活。 (a) 仪器 :本轮对 [finding] sys_user.manager_id now carries two independent organization screens, in two packages, with no shared code #11286 / INotificationOutbox has no cancellation, and ack() on an unclaimed pending row silently succeeds in both implementations #11453 跑只读正文的 Restart-when: 正则得 NONE,照昨夜对 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 的同一判据就该把两卡翻标 —— 把正则扩到全部评论 后,两卡各有一条真条件:[finding] sys_user.manager_id now carries two independent organization screens, in two packages, with no shared code #11286 的 Restart-when: closed #7497(5536814313),INotificationOutbox has no cancellation, and ack() on an unclaimed pending row silently succeeds in both implementations #11453 的机器形全行(5481796501)。⇒ 两卡合法持有;只读正文会把它们误判成半态,导致一次错误的翻标。 昨夜那两卡在两个通道里都确实没有 条件,所以结论侥幸是对的 —— 对的答案配错的仪器,仍然要改仪器 (已在 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 各补一条范围订正评论,结论不变)。⭐ 本该更早警觉的信号:锚上 H9 根本没点名这两卡 ,而我的自制判据说它们违法 ⇒ 自制判据与门禁读数相左时,先怀疑自制判据 (INotificationOutbox has no cancellation, and ack() on an unclaimed pending row silently succeeds in both implementations #11453 的 triage 评论逐字写着 H9 读「in either channel」)。⚠️ 与修正 132 ②不矛盾,两者说的是两个扫描:解锁扫描只读 issue.body 的 Blocked-by: 边 (132),而H9 的 Restart-when: 谓词读两个通道 (138)⇒ 写条件时仍以正文为最安全的家,但判「这个 hold 合不合法」必须查两个通道。(b) 记录 :H52 的谓词是结构性的(最新 dev 报告有非空 open_questions + 卡无 needs-user-decision),处置评论不改变这两个事实 ⇒ 该行此后每次 sweep 都会再出现 。本轮为此付了两卡正文 + 17 条评论的完整重读,而那两条处置恰是本 session 2026-09-10T13:2xZ 自己写的。⇒ 纪律:座位贴必须载「已站下但永不自清」的 H 行表 (§2 已建),每轮先读它再读锚 ;⛔ 处置只写在卡上而不进注册表,就等于每个 fire 重付一次。
🔴 回读探针必须从「我发出去的字节」里切,⛔ 不能凭记忆重打 —— 本班已为同一个根因付了三次。 今晚的三次:① 改座位贴时凭记忆转写待匹配串(「自标」vs 正文的「自己标了」)⇒ assert 中止,已改为按行号替换 ;② 给 service-messaging: fan-out writes an email delivery for a tenant with no email transport — it dead-letters on its first attempt and is kept 90d, so the hot outbox grows ~1 dead row per notification #17611 的回读探针打成 ① **项目长远合理性**,而我实际写的是 **① 项目长远合理性** ⇒ 四条轴全报 0 ,差一步就去「修」一条其实完好的评论;③ 修正 136 的现值也是同一根(用「大概几点」而非读数)。⇒ 共同根因不是手误,是在一个需要读数的位置使用了记忆 。⇒ 纪律:回读探针由发出的 payload 切片生成 (写文件时就把探针串一起算出来),或退而用结构化断言 (如正则 ^\*\*[①②③④][^*]*\*\* 把实际形状打印出来给眼看),⛔ 不手打预期字面量;凡一次回读得到一串不可信的零 ,先怀疑探针再怀疑内容(③ 的零就是这么拆穿的:4 条轴同时缺,比「我写漏了」更可能是「我问错了」)。⭐ 与 137 的分工:137 管查询链路的顺序 (先筛后截),139 管查询字面量的来源 (切片而非回忆)。
🔴 把一条 declared≠enforced 送进 enforce-or-remove 通道之前,先查「没有执行」是不是维护者裁出来的结果 —— 本轮我差一步就立卡去重新审理一条已关闭的裁决。 实测链:决策卡形状强制 一个「机器可寻」标记 os-decision-facets,而它在全仓只出现 1 次(定义它自己的那句),零脚本读它 (阳性对照:os-dev-report / os-half-state-sweep 在 8+ 文件、含两个门禁脚本)。这看起来是教科书式的 declared≠enforced,协议也明写该转 enforce-or-remove。⇒ 查重救了一次:pm: decision-digest extraction has hit its scripted-escalation trigger (42 open inbox cards) — freeze the facet-block rollup into a scripts/pm/ script #9886 正是「把 facet-block rollup 冻进 scripts/pm/」那张卡,以 not_planned 关闭 ,依据是维护者 2026-08-19 的原话「之前定期生成的决策汇总 issue 没什么用」,随后 PR skills(pm-dispatch): notification handover — review-request and assign os-zhuang, retire the decision digest #9982 删掉了 digest 职责、批量决裁通道与那条脚本化出口条款本身 ;现行形态「不推送、不指派、维护者逐卡裁决」下,可 rollup 的对象不存在 。⇒ 所谓「无读者」的真实读者是手动 grep 的人或 agent ,而那正是现行模型要的。⇒ 纪律:declared≠enforced 的立卡前置问句是「执行是被忘掉的,还是被裁掉的?」 —— 后者 ⛔ 不立卡(优先序:维护者裁决 > 座位判断),只把出处记进注册表。⭐ 附带一条正向:本条的全部判据来自查重那一步 ,而查重本来只是为了防撞 —— ⇒ 查重不只防重复,它是读既有裁决最便宜的入口 。
5. Notes
Round reports to the maintainer go in chat(中文);this post carries only current values.
⚠️ 门禁与派发脚本一律在 scratchpad/os-main-ro(detached worktree,每次派前 git fetch origin main)里跑,⛔ 不用共享主检出。
🟢 本会话 REST 对本席可达(200) —— REST 可达性是逐 session 的属性,⛔ 不可从座位贴继承(修正 95)。⚠️ 门禁脚本答 exit 3 时:⛔ 不是通过也不是红,按 NOT MEASURED 记 ;⛔ 不要给它喂一份自己拼出来的 --pair-json。
⚠️ 受管面判据要驱动而不是回忆 :node scripts/pm/check-governed-merges.mjs --pr <号> 三点式自己派生路径面;阳性对照用 --test AGENTS.md(答 GOVERNED / exit 3)。本轮 #17613 答 0 of 2 ⇒ NOT governed / exit 0 ,与仓内 Governed Surface Queue Guard 的 success 互证。⚠️ 该 register 两天内长过几次 ⇒ 每次对最终 文件面重取,⛔ 早先的读数是 recall。
⚠️ check-governed-merges 只审到本仓:objectui / cloud / objectos / hotcrm 无检出 ⇒ 未审 ,而未审的仓不是干净的仓 。
⚠️ 实测(2026-09-11T19:5xZ):三张卡的实时标签集与其完整 events 日志不一致 —— #11978 (5 事件,末 pm 事件 pm:blocked)、#11975 (13 事件,末 pm 事件 pm:blocked)、#15556 (末 pm 事件 pm:queue @ 09-07T08:28:35Z),而三者实时标签分别是 pm:on-hold / pm:on-hold / pm:blocked,且 updated_at 都晚于全部事件。⛔ 机制不去建立 (与页脚那条同纪律)。唯一可操作的推论:这些卡上 pm 状态无法只靠 events API 审计 ⇒ 取证时以实时标签集为权威,事件日志按可能不完整处理。完整读法见 #11978 的 issuecomment-5639937182。
⚠️ list_issues 多标签过滤是 OR ⇒ 单标签整车道读全,本地求交。返回数须等于 totalCount 才算读全。⚠️ 但 #16641 报过单标签过滤漏卡 ⇒ 关键判断仍需逐卡直读。
⚠️ GitHub API 用户配额 曾耗尽。⛔ 撞上时不轮询、不循环重试,退避等待。
⭐ #12981 的真实账本是仪器 :scripts/measure-durability-swallow-family.mjs。
⚠️ #13398 的维护者裁决管一整类 :通过已发布 sink 形状上报的站点不得抬到 error。
⚠️ SINGLE_CLAIM_PATHS 实测恰 1 个成员 (.objectui-sha,阳性对照命中)⇒ 绝大多数共享文件是普通并发,后落地方解冲突;⛔ 不要把「共享」当「串行」。
Generated by Claude Code
This post is the single authoritative registry for the
domain:servicesseat (seat-post protocol; indexlabel:pm:seat). Single writer: incumbent only. Read side: body + comments later than the body's last edit. ⛔ 班次叙事不进正文;本贴只载当前值。1. Current PM — 🟢 在任
session_01ToDPcx9AESFubJkDiFMtKW(GitHubos-sales), 2026-09-10T13:0xZ 起。分支claude/pm-dispatch-services-8cy4x8。session_012zTkyNHJ7TkuN2oXtP5x37(os-tesla,原os-trump)的收班简报(#issuecomment-5619060948,12:59:08Z)及其更正(#issuecomment-5619084654,13:00:54Z),其后无开轮标记。⇒ 按「收班简报是释放标记不是锁:简报即最新事件 ⇒ 立即坐席」直接就座,⛔ 无需保守确认。读数三/四只增加自退,本轮未触发。mcp_agent_data_*ceiling ∩ user, not "as yourself": a viewAllRecords manager sees 5 accounts / 0 opportunities over OAuth vs 9 / 23 over an API key #16549)已 MERGED。⇒ 前任的留守义务已履行完毕,本席全程未碰。plugin-security的五个受围栏文件(explain-engine.ts、objects/default-permission-sets.ts、permission-evaluator.ts、security-plugin.test.ts、security-plugin.ts)现已空出 —— 之前因它们被延后的卡(如 A permission set accepts a hierarchyreadScopebesideviewAllRecords: true, never reads it, and emits no diagnostic — the declaration materialises and a capability census counts it as coverage #16870)可重新定价。⛔ 但重新定价要对合并后的 ref 重验。session_012zTkyNHJ7TkuN2oXtP5x3709-07T09:29Z 起,R25→本班,12:59Z 收班。os-trump→os-tesla),复盘见 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374。/pm-dispatch services,先读本贴。范围与常设承诺在references/lanes/services.md。packages/spec(触即转domain:spec席);安全边界放宽是维护者地板;⛔ 永不在代码 PR 里改content/docs/releases/**。⛔ 并发上限 = 5(维护者 2026-09-03 上调)· 🔴 运行水位 = 3,维护者 2026-09-10 明示
维护者本会话逐字:「任务很多,并发保持3」。⇒ 上限仍是 5,运行目标是保持 3 个 dev 在飞,槽位空出即补,⛔ 不因「等这一波复核完」而空转。⚠️ 补位不豁免任何前置。
🔴 现 0 在飞,而水位 3 够不着,这是测出来的不是选出来的(04:55:43Z 落地探针 + 04:51Z 全车道读数,见 §2 候选表):整条车道此刻只有两张
pm:queue无 assignee 的可派卡(#16315 / #16384),两张都在 PR #17454 的 45 路径集里,而(#17454)落地探针 = 0(阳性对照(#17603)= 1,阴性 0)。⇒ ⛔ 不硬派、⛔ 不自退(队列并非空,只是够不着;⛔ 「够不着」≠「空」)。🟢 席位档位 —— 本席跑默认判断档,这是现行规则下的正确档位
维护者 2026-09-10 裁定(skills 席敲门⚠️ 触
#issuecomment-5612096731,逐字):「现有的卡片如果写了要求fable的,也要让相关的项目经理知道,opus就够了。」⇒ 契约复审档只保留给 skills 席、spec 席的条款②复核、与维护者召唤的总监席。⛔ R25 那条「本席低于契约复审档 ⇒ 一律派 fable 隔离复审子代理」的纪律已作废。packages/spec的 diff 仍照旧路由 spec 席。🟢 REST 对本席可达(200,13:0xZ 实测;04:1xZ 与 04:59Z 再次实测可用,含
PATCH /issues/comments/{id}与公共 GET)2. Ledger — 现值 2026-09-11T22:52Z,读数在
origin/main@6fa2a8ae1(22:50Z 取,非浅检出;与上一枪同 tip)在飞 dev 0 · 落地窗口 0 · 待复核 0 · 决策箱 4
🟢 本轮交付已收口,无半状态遗留。 #17601 的测量轮从认领到进决策箱全程闭合,逐笔都有回读。
completed),pm:*残留已摘、回读无残留。 R1 = 测量轮 PR #17613(dea214f81);R2 = 裁决执行轮 PR #17686(6465cc0a7,13:26:24Z) —— 落地探针 1、阳性对照 1、阴性 0,并打印代码块做文件面复验(⛔ 不用短语 grep,见修正 133),被禁触的两个 guard 5/2 未动。时标:挂 13:02:56Z →enqueued13:03:43Z(47 秒)→ merged(队列约 23 分钟)。⭐ 裁决(选项 B,一类自裁,召唤 #22 待维护者追认)点名本席执行,Clause-②: no、patch;dev 交付 0 条非注释行。Clause-②: yes,且须同轮回答出口路由),#15970 是其兄弟;同族「at most one」断言仍是已申报的未测零。✅ 本班落地 23
前段 6:#17441 · #17443 · #17450 · #17460 · #17436 · #17470。
中段 9:#17489 · #17491 · #17496 · #17514 · #17522 · #17525 · #17537 · #17539 · #17549。
后段 8:#17559 · #17565 · #17570 · #17575 · #17583 · #17593 · #17613(卡 #17601 R1,
dea214f81,04:5xZ)· #17686(卡 #17601 R2 裁决执行,6465cc0a7,13:26:24Z)。🔬 本班立卡:席位 9 · dev 6 · ⭐ 主动不立 1
席位:#17451 · #17452 · #17467 · #17483 · #17493 · #17495 · #17579 · #17598 · #17720(四个巡查锚的心跳行不写自己的周期;车道映射
domain:skills,⛔ 本席未打domain:*)。dev:#17541 · #17560 · #17561 · #17562 · #17573 · #17596。🔴 本行先前的表头写 5 而这里列了 6 个号 —— 数错的是表头,已改为 6(⛔ 不是删一个号来迁就它)。
⭐ 不立:页脚重复那条撞 open 的 #17239,改为在其上补读数(两张 PR 互证,仍不立第二卡)。
b57c135c0,仍 open + draft);两个阻塞路径packages/plugins/plugin-auth/src/find-envelope-limb-removal.test.ts、packages/plugins/plugin-auth/src/auth-plugin.ts逐条复验在内;阳性对照pnpm-lock.yaml在场。17:26Z 重取(第 14 次):PR API 直读merged: false·state: open·draft: true,headb57c135c0十四次未动;45 条路径清单本次改用 PR 自己的get_files直读,两条阻塞路径逐条在列git fetch origin claude/adopt-account-issuer-rollback-17440后git diff --name-only $(git merge-base FETCH_HEAD origin/main) FETCH_HEAD,对三个探针 + 两个对照各 grep 一次;另跑git log origin/main --oneline | grep -c '(#17454)'带双对照domain:spec⇒ 红线,路由domain:spec席(该席 🟢 在任,os-bill/ #6017)#14496completed),pm:queue同笔摘掉,标签回读 = union(零剥落)。 四张 sub-issue 全closed/completed;裁决步骤三(#14361)已于 09-09T01:54Z 释放进domain:devx队列,并已点名落地目标 ADR-0133 / 0134 / 0135 ⇒ 本父单不再协调任何东西。objectstack-ai/cloud本会话不可达 ⇒ NOT MEASURED(⛔ 不是「已做」也不是「缺失」),已逐字写进关闭评论#issuecomment-5638213915。重开免费本轮进本车道的其余 3 张,⛔ 没有一张是本席可派的:#17610(p1,
pm:dispatched,assigneehotlong)· #17611(needs-user-decision)· #17612(pm:blocked)。domain:services而无任何 pm-state(04:51Z 第四次重测)⇒ 析取 ③ 半状态,治愈归分诊席。✅ 19:46Z sweep 的本车道 H 行已逐行处置(锚 #9857,commit
66440147a)锚已刷新(
Swept 19:46:06Z)⇒ 18:26Z 那次「心跳停摆」判断确认是假警报,周期37 1,7,13,19 * * *所致,已立卡 #17720。本贴无 H38 行。os-steve。⛔ 不重判、不留噪音评论pm:on-holdissuecomment-5619228978/5619234640):#11286 答 A(维持 #7497 之后的排序)并就地更正了卡面一条不存在的依赖断言;#11453 的残留问题早已被执行(选项 B 已在树上)。⛔ 本轮零动作、零评论🔁 已站下但永不自清的 H 行(⛔ 每轮先读这张表,再读锚)
H52 的谓词是结构性的(「最新
os-dev-report带非空open_questions且卡无needs-user-decision」)⇒ 一条处置评论不会让它消失,它会在此后每一次 sweep 里继续出现。本轮为此付了一次完整重读的代价(两卡正文 + 17 条评论),而处置是本 session 自己 18 小时前做的。issuecomment-5619228978(答 A + 依赖断言更正)issuecomment-5619234640(选项 B 已执行,⛔ 不向 spec 席立卡)Restart-when:住在评论通道:5536814313(closed #7497)与5481796501(机器形全行)⇒ 合法持有,⛔ 不得翻标✅ 本轮修复两张卡的半状态:#11978 与 #11975,
pm:on-hold→pm:blocked(各自一条评论 + 一次标签 replace,回读 = union,零剥落)。判据是机械的,不是判断:两卡正文各带一条
Blocked-by:行(指向仍 open 的 #11975 / #13515)、都没有Restart-when:行 —— 而pm:on-hold仅当带机器可读Restart-when:才合法。⭐ 阳性对照:同一条正则在 #13515 上取回了Restart-when:全行(plugin-security 的某个 minor 大于承载 L4 的那个,附 2026-08-31 实测)⇒ 另两卡的 NONE 是真缺席,不是仪器答不出。两卡自己最近的评论也逐字写着pm:blocked才对(#11978 的5478577663与5536462985)。⭐ ⛔ 这不是放行,也没有消音 H26。 链条真正不能动的原因坐落在 #13515(发版边界的合法 hold,本轮实测其
Restart-when:/Restart-touch:齐备、无Blocked-by:),本席刻意未动它。修完的链是:#11973 / #11979 → #11978(blocked)→ #11975(blocked)→ #13515(on-hold + 机器可读重启条件)。🔴 本轮测到的他席欠账:#15970 / #15556 的
pm:blocked前提已被证伪#15970 已挂
pm:retriage+ 异议评论(#issuecomment-5629344090;标签回读 6 个,pm:blocked未被剥)。实测链:两卡 09-07T04:14Z 转pm:on-hold「阻塞于 #16472」→ #16472 已于 09-07T08:28:33Z 关闭(completed),裁决(总监席批 #76,维护者「同意」)逐字写明「#15970 and #15556 leavepm:on-holdforpm:queue」→ 卡上 08:28:26Z 有该中继 → 但两卡今天都是pm:blocked,updated_at停在 09-07T09:33:5xZ / 09:33:39Z(比中继晚 65 分钟、相差 15 秒、且无任何评论)→ 且正文无Blocked-by:行。⇒ 很可能是对的状态缺了那行(裁决自己点名packages/spec前置),但没有那行任何扫描都放不回来。⛔ 本席不改其标、不搜那张 spec 卡(归分诊)。🗳️ 决策箱勤务台账(21:5xZ 实测四卡,⛔ 下轮不重审)
四棱块与速读两个通道都查(正文 ∪ 评论 —— 修正 138a;只查正文会把三张完好的卡误报成缺)。
os-decision-facets标记5620688836)5627670266)5641534630)5641086533)⭐ #17611 的补齐不是抄模板:实测定出卡面没有定价的那一项 ——
MessagingChannel(channel.ts:96)只有id/send()/ 可选classifyError?(),无可用性查询 ⇒ 选项 A 要在已发布接口上新增成员(Clause-②: yes级);而选项 C 的onlyWhen是已在 spec、已被 Reaper 消费、三处上线先例的键 ⇒ 零新契约;并测出选项 B 单独做一行也不少写(suppressed早是合法终态,所以 B 不减行、只换标签)⇒ B 是 C 的搭配而非 A 的替代。推荐 C + A 另立卡,回退 C+B,置信缺口点名「那个部署的 Reaper 到底跑不跑」。⛔ #16678 的标记有意不补,判据是实测的:⚠️ 相关:#14237(completed)正是把标记改成「纯文本行与 HTML 注释形等价、任一即满足」的那张卡,其收尾明写「⛔ 注释形读不到永不读作无四棱块」⇒ 本台账的审计用字面串计数,两形皆计,判据成立。
os-decision-facets在全仓只出现 1 次 —— 即references/decision-analysis.md:39那句定义它自己的话,没有任何脚本读它(阳性对照:同类标记os-dev-report/os-half-state-sweep出现在 8+ 个文件,含check-half-states.mjs与check-clause2-carriers.mjs,确有具名读者)。⇒ 补一个无人读的标记是 cargo cult。⭐ 而且「没有读者」本身是维护者裁过的状态,不是缺陷:#9886(「把 facet-block rollup 冻进scripts/pm/」)以 not_planned 关闭,出处是维护者 2026-08-19「之前定期生成的决策汇总 issue 没什么用」→ PR #9982 删掉了 digest 逐轮刷新职责、批量决裁通道与该脚本化出口条款本身;现行收件箱形态是「不推送、不指派、维护者逐卡裁决」⇒ 可 rollup 的对象不存在。⇒ 本席没有按 declared≠enforced 立 enforce-or-remove 卡 —— 那会重新审理一条已关闭的裁决。⇒ 决策箱勤务本轮收口:四卡全部形状完整,⛔ 下轮不再审这一项。
决策箱 4(⛔ 只列不催;13:28Z 按
label:needs-user-decision现查所得,⛔ 不从记忆推)#16974(等一个字母 A/B/C)· #17396 · #17611 · #16678
🔴 写这个数字时我差点又写成 3(凭记忆列 #16974 / #17396 / #17611),现查才发现 #16678 也在箱里 —— 修正 130 在写下它三小时后就第二次兑现。⇒ 全仓 30 张
needs-user-decision(返回数 =totalCount),其中domain:spec独占 16。#17601 已于 11:53Z 被裁并出箱。🔴 本行先前写 5 并含 #17369,那是错的 —— 见修正 130。 #17369 已于 2026-09-11T04:36:11Z 被裁(批 #114 第 3 项,选项 3),当时已离箱转
pm:queue;本席 04:59Z 那次 flush 仍按 03:51Z 的列表快照把它写成在箱。现状(10:12Z 实测):pm:queue+pm:retriage(本席 05:54Z 挂,问车道归属),⛔ 不可派 —— 其 MUST-FIX 面全在活着的domain:cli席(R73)领地。pm:retriage(#17369 · #15970)与两张无 pm-state 的卡(#15074 · #15120)当前无读者;按「交给空席是停放不是路由」已逐次点名交维护者,⛔ 不自答、⛔ 不自行改domain:*。(#17454)= 0,阳性对照(#17686)= 1、阴性(#99999)= 0,--is-shallow-repository= false / 13 679 提交)⇒ #16315 / #16384 仍挡着。hotlong,卡 #17440pm:dispatched)的 draft,⛔ 本席不翻 ready、不催、不碰。3. Hot-file serial queue
本席持有:无。 #17686 落地后
approval-service.ts与stranded-resubmit-second-door.test.ts两条均已释放。 #17613 落地后其两条路径已释放:packages/plugins/plugin-approvals/src/stranded-resubmit-second-door.test.ts(新建)与scripts/engine-double-contract.pinned.json(+2 行)。⭐approval-service.ts全程未触 —— 派发令申报的文件面含它,交付的 diff 一行生产代码都没动。scripts/engine-double-contract.pinned.json是全仓 ledger,任何新增 engine double 的 PR 都会碰它。 它不是 single-writer 路径(SINGLE_CLAIM_PATHS实测恰 1 个成员.objectui-sha,阳性对照命中;该 ledger 在那个门禁里 0 命中)⇒ 普通共享并发,后落地方解冲突。门禁会用--write的 remedy 指路,⛔ 不要手改。本班其余全部释放:
service-automation/src/engine.ts·service-analytics/src/{dataset-executor,dataset-compiler}.ts·service-analytics/src/strategies/{objectql,native-sql}-strategy.ts与src/preview-evaluator.ts·content/docs/automation/approvals.mdx与capabilities/approvals.mdx·service-automation/src/{suspended-run-store,sys-automation-run.object}.ts·scripts/check-durability-degradation-log-level.mjs与measure-durability-swallow-family.mjs·service-storage的 S3 适配器面(他席)。他席持有:
b57c135c0;18 → 37 → 44 → 45)。🔴 本贴先前写过「该集合不含content/docs/**」,那句是假的并已作废:它含content/docs/permissions/tenant-audit-census.mdx。仍不含plugin-approvals(阴性对照 0)、不含service-analytics、不含service-automation(阳性对照pnpm-lock.yaml在场)。4. Standing corrections
Items 1–15 stand. 16–20 只存活为摘要:16 安静的座位贴 ≠ 安静的座位 · 17「等别人」清单会无声腐烂 · 18 卡可以指名一个不存在的 API 而仍正确 · 19 单一所有权会在缺陷被评估前把它围起来 · 20 关掉的卡会永远挂着在飞标签。
mutex 协议两态、班次三态 ⇒ 需维护者仲裁。[finding] A seat post can go stale for a whole shift and nothing detects it — the staleness has a one-query signature, and prose in the seat post has now failed to prevent it twice running #13493
继承来的围栏是关于代码的断言 —— 重测它。
动手前先清掉卡的必验项 ⇒ 对树核,⛔ 永不对卡核。
🔴 记录持久性受限于承载卡的作者账户。Dangling-reference patrol: nothing detects an issue reference that fails to RESOLVE (as distinct from closed) — measured 6+ times, and a card's author is unreadable once it is unreachable #13634
issue_read的comments不是可读评论数;分页读。🔴 来自「回答不了该问题的命令」的零不是零,是 NOT MEASURED。⛔ 没有反向对照的零不是证据。
共享主检出不是
origin/main⇒ 判据在origin/main的 worktree 里跑。⛔ 永不git stash。🔴 修正 26 管「某物不存在」的任何断言。「死在第 N 步」推不出「没做过第 M 步」。
check:i18n与check:skill-examples用 exit 1 报「前置未满足」⇒ 读 verdict 行,永不读裸退出码。跨陈旧基线的
git diff origin/main..HEAD会把后来合入的文件显示成删除 ⇒ 用git diff ..HEAD。🔴
updated_at晚于你上次读评论的时间 = 有你没读过的东西。改动集变化后必须重推导门族。
⛔ 开轮标记不是坐席。 坐席 = 正文 §1/§2 + 标题 + assignee 三者同笔改成在任现值。
上一班简报里的「在飞 0」只管子代理,不管标签 ⇒ 接班按卡逐张核
pm:dispatched。串行判断要对着围栏读(
git diff --name-only),不对着包名读。issue_read get_labels对 PR 号报错 ⇒ PR 侧标签用pull_request_read get;issue_write对 PR 号写 labels 可用(整体替换,先读现集)。多 ref 一次
git fetch后FETCH_HEAD不可靠 ⇒ 一律显式 sha。🔴 标签 read-modify-write 的「read」必须紧贴「write」。
get_check_runs列表落后于 job API 且分页只给前几条 ⇒ 久挂的 job 用 job id 直读。🔴 「已挂 auto-merge / 已入队」不是状态,MERGED 才是。 最便宜的权威读数是⚠️ 前提是完整历史 —— 见修正 89。⭐ 本轮再加一层:连落地探针也只证明了提交主题在 main 上,最好同时核交付物本身(
git log origin/main --oneline | grep '(#PR)'。git cat-file -e origin/main:<path>)。[Decision]标题 +pm:queue= 已裁、同笔转队的常态 ⇒ 读最新裁决评论定状态。触
packages/spec的已裁卡先切 contract-first。dispatch-gates不为「移动了被锚定行」的改动推导check-system-context-census⇒ 派发令要求 dev 显式跑。needs:contract-review⇒ 补丁轮后落地前再读双载体一次。⭐ 本轮照此执行:head277f3cad6→78d95af86后把--pair重取一遍(两次都 EXIT 0),一个取自被取代 head 的 PASS 是 recall 不是读数。🔴 子代理被用量上限(429)终止 ≠ 死认领,⛔ 不重派。
SendMessage原 agent 续跑。system-context.mdx是本车道自己的冲突磁铁。🔴 隔离复审 FAIL/DECISION 的处置 = 裁决逐字贴卡 + 补丁轮令只引用裁决、不改写。
send_later投递可迟到且不保证 ⇒ 每个轮次边界重挂;枪里的判断会过期 ⇒ 每枪先写「幂等,重读状态」。actions_list过滤event=merge_group,队列分支名形如gh-readonly-queue/main/pr-NUMBER-MAINSHA。git merge-tree对 census 页的「driver 拒绝」≠ GitHub 侧冲突。^{tree}相等 +git diff --stat为空。🔴 正文里的四棱块 +
pm:queue= 已裁,不是待裁。⇒ 本轮把 [finding · UNVERIFIED, derived from reading] On a strandedresubmitstrand the row staysreturned, so a second submitterresubmitappears to pass every approvals door guard and insert a secondaction: 'resubmit'row against the "at most one such action row" assumption #17601 的四棱块放在评论里而不是正文,正是为了不制造这个歧义。git fetch再逐个git diff --name-only。🔴
merge_group上你这张 PR 的批次completed success≠ 它合并了。🔴 队列 flake 的处置姿态五条。
🔴 围栏 grep 只覆盖你问到的路径,而卡的文件面会长大 ⇒ dev 交付后按实际 diff 重扫。⭐ 本轮兑现:申报面是
approval-service.ts+ 一个测试文件,实际交付是一个测试文件 + 一条全仓 ledger,两条都重扫过(与 feat(auth)!: adopt better-auth's account-issuer rollback — drop sys_account.issuer, retire the backfill, lift the family to 1.7.3 #17454 零相交,阳性对照在场)。TypeScript Type Check在其 lane 被cancelled时报的是failure⇒ 读 lane 的结论再判。Corrections 66–88 只以评论存在,⛔ 未回填。最常被踩的三条:79 认领的对偶不是「有没有
Claim:评论」而是「Claim:之后有没有释放/交付/关单」· 84 一个可能就是答案的对照不是对照 · 88 读回声明不得与它所报告的写动作同处一条评论。🔴 全新会话的检出可能是 SHALLOW,而修正 40 的落地探针在它上面会静默答错。 ⇒ 接手第一件事跑
--is-shallow-repository;为 true 就先git fetch --unshallow。⛔ 派发前的前提过时检查在浅检出上是假读数。🔴 一个 hold 的解除条件可以键在一个「没有任何流程会更新」的字段上,于是永远不可能触发。 ⇒ 写
Restart-when:时问:什么动作会改变这个读数?draft: true,写后读回 draft 位。 ⭐ 本轮的对偶动作也照此做了:翻 ready 之后读回draft: false才去挂 auto-merge。🔴 一张卡可以在已被裁决之后被另一个席位重新挂回决策箱 —— 因为那个席位没读裁决。 ⇒ 挂⚠️ 本轮补的作用域:风险不止在本卡 —— 当卡 A 的修法挂在卡 B 的未决裁决上([finding · UNVERIFIED, derived from reading] On a stranded
needs-user-decision之前,先分页读到该卡评论的真正末尾。resubmitstrand the row staysreturned, so a second submitterresubmitappears to pass every approvals door guard and insert a secondaction: 'resubmit'row against the "at most one such action row" assumption #17601 ⇢ approvals: arecallwhose resume strands reports it as an ordinary non-failure — norepairablediscriminator, where the identical strand throughdecidecarries one #15970 ⇢ service-automation: a subflow'sbubbleToParentfailure is swallowed, so an approval decision answers 200resumed: truewhile the run behind it is stranded — #13807's three-outcome shape, one level up #15556 ⇢ [Decision] Must a resume failure reach the CALLER in a shape it can act on? — the family question triage reserved, now that its instance cards have each measured their own half and stopped at the same contract #16472 就是这形状),B 上的已存在裁决同样会让 A 的升级变成白跑 ⇒ 要读到被点名的那张卡,而且要读到它所指的那张。本轮正是这样才挖到 [Decision] Must a resume failure reach the CALLER in a shape it can act on? — the family question triage reserved, now that its instance cards have each measured their own half and stopped at the same contract #16472 已落地。🔴 阻塞可以成环:A
Blocked-by: B,而 B 在本仓的剩余项就是 A。🔴 REST 可达性是逐 session 的属性,⛔ 不可从座位贴继承。 每班自己探一次。
🔴 把卡移交给一个空席位 = 停放,不是路由。 ⇒ 移交时多读一个读数:目标座位贴的死活。
enable_pr_auto_merge的mergeMethod参数会被静默忽略。 ⭐ 本轮第二次实测同一现象:省略该参数,工具仍回报method: MERGE,而本仓allow_merge_commit= false ⇒ 那个字段恒与仓库设置矛盾且与结果无关,最终提交由队列决定。⇒ 读到它 ⛔ 不要当成问题,也 ⛔ 不要试图改(本会话 GraphQL 被限制)。🔴
Clause-②的申报是席位的,而 PR 正文是 dev 写的。Check Changeset只认正文行首的字面Clause-②: yes|no。🔴 PR 正文每写一次,服务端就追加一条页脚 ⇒ 补声明时同一笔把 dev 的 session-URL 页脚一并删掉。⚠️ 本轮 dev 报了一个方向相反的读数(REST 通道上 create 追加 session-URL 形、edit 追加裸形,各自之后都只存 1 条);而
AGENTS.md440–444 附近已写明这类现象并明令「Which layer does this is unknown; don't go establishing it」⇒ ⛔ 本席不改写 99、也不去建立机制,只记:实测本 PR 最终只有 1 条页脚,所以 99 的缓解措施在该形态上无须动用。🔴 读任何 aggregate 检查的红之前,先问「我读的这个 head 还是当前 head 吗」。 并且
cancelled+ 零证明放行是裁决 CI: Dogfood Regression Gate 把 cancelled 当失败 —— 每次连续推送都产生一条假红 #3668 的设计处置,⛔ 不是漏洞、⛔ 不立卡。R标记,且要看是谁的 R(巡查 tick 的R8与座位贴的R1是两个计数器)。🔴
finding与pm:queue同挂 ⛔ 不是半状态。 判据在门禁自己的读法里(check-half-states.mjs的自测断言)。🔴 本席自己的「被挡候选」清单会腐烂,而它腐烂时没有任何读数会告诉你。 ⇒ ① 被挡清单每行必须带「挡因 + 怎么重测」;② 多选项卡在判「决策形状」前必须把分诊评论读到末尾。
🔴 一个回合里每次要写时间戳就重读一次时钟,⛔ 不从回合开头那一次读数往后推算。最便宜的自检:回读的
updated_at比你写的「现值」早,就说明你在写未来。🔴 量载体只用门禁自己的读取器(
check-clause2-carriers.mjs --pair);grep 顶多是线索,⛔ 永不作「载体不存在」的判据。🔴 机械地板的原话是「新导出符号」或「已发布载荷上的新键」,⛔ 不是「已有导出的行为变了」。 ⇒ 申报
yes前先问「新增了什么」;读裁决要连它的范围一起读。🔴 把某个门禁说成一条规则的权威时,点名实现那条规则的脚本并驱它。
yes⇒minor的耦合住在check-changeset-no-major.mjs的 level axis,不在 carriers 门禁。🔴 申报住在带
Claim:行的那条评论里 —— 另起一条评论说「我更正了」在门禁眼里是 near-miss。⇒ 在门禁读取的那个位置就地改。🔴 落地前检③「每条 check 全绿」必须按 check 名取其最新一次运行来判。 ⭐ 本轮再加一形:
skipped不是 green 也不是红 ——skip-changeset标签让Check Changeset整个 job 跳过而非通过,判据是「非 failure」而不是「等到一个绿」(dev 在报告里点名提醒了这一点,是对的)。pull_request.enqueued事件最快、队列 ref 可滞后到 2m12s、auto_merge字段恒不可作判据、落地只认落地探针带双对照。🔴 贴紧写的那次读取必须「喂给」那次写入,否则它只是装饰。 ⇒ ① 目标集在读之后生成(
target = (read - remove) | add),⛔ 不手打labels:[...];② ⛔ 定时器/检查点文本里永不写现成的标签集、载荷或申报值。⭐ 本轮三次标签写(approvals: arecallwhose resume strands reports it as an ordinary non-failure — norepairablediscriminator, where the identical strand throughdecidecarries one #15970 加pm:retriage、[finding · UNVERIFIED, derived from reading] On a strandedresubmitstrand the row staysreturned, so a second submitterresubmitappears to pass every approvals door guard and insert a secondaction: 'resubmit'row against the "at most one such action row" assumption #17601 转决策箱)全部照此算出并回读为 union,零剥落。🔴 一张「只加测试文件」的 PR 必定在
Check Changeset上红,正确修法是标签而不是 changeset,且那条红不会自己清掉。 门禁日志自己把skip-changeset标成<<< PREFERRED,空 frontmatter 的 changeset 路线已关闭(空 frontmatter changeset 相对skip-changeset标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471;全空集合会让 Release 跑 0 秒、不出 version PR、而且照样绿 —— 空 changeset 会静默卡死已 version 的发布:Release run 全绿,但 npm 和 Docker 什么都没发(17.0.0-rc.2 现在就卡着) #4898)。⇒ ① 测量卡/只加测试的派发令必须把skip-changeset写成交付项(这次红了才说,是本席派发令的缺口);② 那条红是历史运行,按名取最新即退场;③ ⛔ 永不替 dev 打这个标签了事。⭐ 附带仪器:「只加测试」的条款②怎么测 —— 读包的发布面声明(files/exports/ tsconfigexclude),并用「src/里已有 40 个测试文件」作阳性对照。⭐ 本轮 dev 给了更强的一版:把包构建出来,对files[]里每条路径 grep 探针符号(0 命中),阳性对照continueRestoredRun命中 4 个已发布文件 ⇒ 声明级与构建级两种方法互证。🔴 派发的
Claim:必须点名 dev 的分支 —— 我漏了,是 dev 在报告里逮到的。AGENTS.md:398逐字:PM「sets the assignee (step 1) and posts theClaim:naming the dev's branch (step 2)」;:400让 dev 核对最新Claim:是否点名自己的分支、不符就停下报告。我 03:30Z 在 [finding · UNVERIFIED, derived from reading] On a strandedresubmitstrand the row staysreturned, so a second submitterresubmitappears to pass every approvals door guard and insert a secondaction: 'resubmit'row against the "at most one such action row" assumption #17601 的认领只写了席位、session、轮次 —— 共享账号下分支就是执行者的身份位,少了它那道核对无物可比。⇒ 已在门禁/读者真正读的那个位置就地补上(修正 121 的同一条纪律),留可见更正说明,回读 6187 字节、页脚 1 条,⛔ 未另发第二条Claim:。⭐ 两件要记牢:① dev 报自己派发令的缺陷是本席要的行为,⛔ 不粉饰、⛔ 不当噪音;② 它选择继续而不是停摆(认领来自派发会话、它没写 assignee、没发第二条 claim)也是对的 —— 规则要它停下报告,它报告了且没造成歧义。🔴 「挂完等够 ~60 秒再判」这个阈值本身是错的仪器 —— 本轮实测 arm →
enqueued是 78 秒。 修正 123 把观测区间记作 43–67 秒并据此定了 ~60 秒;本轮 04:28:25Z 挂、04:29:43Z 入队,78 秒,即一个 60 秒的阈值会第三次把「还没到」读成「失败了」。⇒ 纪律改成:判据是事件到达,⛔ 不是秒数。等pull_request.enqueued(或到点再取队列 ref),⛔ 永不在窗口内重挂,⛔ 也不再给这件事写一个新的秒数 —— 我已经为同一个错调过两次阈值(先 60 秒太紧、再 3 分钟太松),第三次的修法不是再调一次数字,是不用数字。⭐ 同族的正向读数:enqueue → merged ≈ 25.5 分钟(本班先前一次 20 分钟)⇒ 队列耗时也只能当分布看,⛔ 不当承诺。🔴 决策卡的模板要求一个推荐,而我差点因为「修法选择是裁决级」把它省掉 —— 那会写出一个形状不合规的四棱块,也就是一个半状态。⚠️ 反向的错同样要防:省掉推荐不是更谨慎,是交付了一个不合规的决策卡 —— 维护者要在没有推荐的情况下自己重建四轴,那正是模板存在的理由。
references/decision-analysis.md的六项写法第六条是「推荐 + 回退 + 置信缺口:荐一项、给回退项、明说本分析看不见什么」,四棱块的固定形状末尾也明写「一行推荐 + 字母选项」。而卡面与分诊都写着修法选择「⛔ 不可由实现轮选择」,我的认领评论也写了「⛔ 不自己选」。⇒ 两者不冲突,是我读混了两件事:红线管的是 ⛔ 代维护者作答与 ⛔ 擅自实施;模板要的是分析里的一个具名推荐,维护者仍然裁。推荐 ≠ 答案。 ⇒ 正确做法(本轮已执行):荐一项(B)、给带条件的回退(A)、把置信缺口写狠(没做同族断言普查、不知有无真实客户到过、未为「与 approvals: arecallwhose resume strands reports it as an ordinary non-failure — norepairablediscriminator, where the identical strand throughdecidecarries one #15970 合并成通则」定价),然后 ⛔ 不实施任何一项。🔴 本贴的归属页脚在一次 flush 中被静默剥掉**,而我只是因为回读时顺手 grep 了它才发现 —— 注册表可以在你以为写对的时候丢掉一部分。** 实测:经 MCP
issue_write更新正文,我带在载荷里的---+ 页脚在存储端不在了(回读命中 0),而正文其余部分逐段完好(末段SINGLE_CLAIM_PATHS在场,所以不是截断);随后用 RESTPATCH /issues/6021把同一串字节加回去,回读命中 1 并保留全部标签与 assignee。⛔ 不去建立是哪一层做的 ——AGENTS.md440 附近对这类页脚现象明令「Which layer does this is unknown; don't go establishing it」,本条严格只记读数与动作。⇒ 两条可操作纪律:① 每次 flush 的回读必须把页脚当一个显式探针(连同「现值」「在飞」「最新一条修正号」一起按字面 grep),⛔ 不要只看updated_at或工具回的 200 —— API 200 不等于落地正确(多席可写面恒读回,这条把它扩到「单席可写面也要读回内容」);② 发现缺失就用 REST 从回读到的字节补,⛔ 不重打正文 —— 重打一遍 16 KB 的注册表才是真正会丢东西的动作。⭐ 与修正 114 的关系要说清:114 测到「评论编辑与 issue 正文编辑都不追加页脚」,那条仍然成立;129 补的是另一半 —— 不追加之外还可能被剥,两者叠起来的净效果就是 0 条,而 114 当时没有把「0」这个可能性量出来。 ⭐ 2026-09-11T18:28Z 又测到第三种形态,作用域随之扩大:MCPissue_write的create路径同样剥页脚。 新立卡 [finding] Four patrol anchors tell the reader that a stalledSweptline means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 的载荷里带了页脚,创建后 REST 回读命中 0,正文其余部分逐字完好(末段「nearest neighbour」在场,所以不是截断);按本条既定修法用 REST 从回读到的字节追加页脚,再回读命中 1、字节数 5648 → 5707、标签与type: Task未动。⇒ 129 的纪律从「每次 flush 的回读」扩成 「经 MCP 写任何正文之后都把页脚当显式探针」,create与update同等对待;⛔ 仍不去建立是哪一层做的(AGENTS.md 440 附近明令)。🔴 我把一份列表快照写进了「现值」,于是座位贴的决策箱数字在 flush 的那一刻就是假的 —— 而且是我自己的规则逐字禁止的那件事。 04:59Z 那次 flush 写「决策箱 5」并列入 verify's cross-tenant proofs are skipped for a reason ADR-0132 falsified — but the obvious fix is pinned shut by the entitlement boundary #17369;实测 verify's cross-tenant proofs are skipped for a reason ADR-0132 falsified — but the obvious fix is pinned shut by the entitlement boundary #17369 已于 04:36:11Z 被裁(批 🔗 Broken links detected in documentation #114 第 3 项,选项 3)并转⚠️ 附带一条更窄的教训:决策箱的成员数是最容易腐烂的一个数,因为它同时被裁决(出箱)与新卡(入箱)两头改,而两头都不由本席驱动 ⇒ 写它之前按
pm:queue,比我写入早 23 分钟。数字的来源是 03:51Z 的那次整车道列表读数,而协议写着「⛔ 写入前对每张卡现读当前状态;任何列表快照读数一律作废」。⇒ 本条与修正 124 是同一根:124 是「读了却用了提前打好的载荷」,130 是「压根没为这次写入重读,用了一小时前的列表」。两者的共同解法是写入前对被写到的每一项现读一次,⛔ 不是「这一轮早些时候扫过了」。label:needs-user-decision+ 本车道标签现查一次,⛔ 不从记忆或上一次全扫推。⭐ 发现路径也要记:这条不是巡检发现的,是半状态巡查锚的 H38 行点名本贴之后我去核对才掉出来的 —— 锚行处置的副产品比锚行本身更值钱的情形,本班第二次。domain:servicescarries aClaim:on service-messaging: a late HTTP ack from a REAPED claim overwrites the live re-claim onsys_http_delivery—IHttpOutbox.ack(id, …)carries no claim credential (the notification outbox fixed this shape in #11859) #17634 written 1.6h AFTER this post's last event(claim 06:40:36Z,post 05:05:20Z)」—— 而那条认领不是本席写的(service-messaging: a late HTTP ack from a REAPED claim overwrites the live re-claim onsys_http_delivery—IHttpOutbox.ack(id, …)carries no claim credential (the notification outbox fixed this shape in #11859) #17634 由他席定级并派给hotlong)。⇒ H38 的谓词是车道范围的,不是「本席有没有新动作」:只要本车道任一卡的Claim:晚于本贴最后一次事件,它就亮。⛔ 不要因为「那张卡不是我的」就把这一行读作不适用;处置照旧是一次正文编辑(评论不清 H38)。⭐ 反过来也成立:本席连续数枪静默无产出时,H38 仍可能因他席在本车道的活动而亮 —— 那是信号不是噪音。🔴 半状态巡查锚的 H19「阻塞已活过它的阻塞者」不是一条可直接执行的行 —— 它会在一张被正确停放的卡上亮,因为扫描表达不了「合取」。 本轮实测,platform-admin re-anchor L3 (plugin-auth): re-point ensure-default-organization; re-price last-admin-guard as its own reviewed step #11973 同时被 H19 / H26 / H28 / H52 四条谓词点名,读起来像一张该放回队列的卡。去读卡本身,答案已经写在正文里、而且是预先写的:该卡的重启条件是 (a)⚠️ 本条也是本席对该锚行的处置记录:已判、⛔ 无动作、⛔ 未改任何标签(该卡 assignee 是
Blocked-by: #13689关闭 AND (b) 验收条款 3 的 walled-rig 端到端通过,而 (b) 明写「⛔ not claimable from this repo」。正文还逐字预言了这条锚行:「The unlock scan readsissue.bodyonly, and a singleBlocked-by:edge would promote this card the moment Seam (enterprise organizations package): itsensureDefaultOrganizationwiring still triggers on grant inserts, which never fire on a fresh walled rig — adopt the exportedisDefaultOrganizationBootstrapTrigger#13689 closes while acceptance clause 3 is still unmet. That exact false-promotion already happened once on The by-id write pre-image gate resolves the row under the caller's own read scope, so an app-authored widener is still dead onprivateeven once checkAuthoredRowWrite admits it #7401 tonight, because its correction lived in a comment. ⛔ Do not promote on (a) alone.」⇒ 三条读法:① H19 是输入不是判决(锚自己写着 report-only),处置它=去读卡,⛔ 不是去改标;② 扫描只会读issue.body的单条Blocked-by:边,所以任何「合取式」重启条件必须整条写进正文,写进评论就会被无声跨过(The by-id write pre-image gate resolves the row under the caller's own read scope, so an app-authored widener is still dead onprivateeven once checkAuthoredRowWrite admits it #7401 已付过这个代价);③ H26 的「这个 target 永远不会 close」在这里是卡的既述属性而非缺陷 —— (b) 本来就没有仓内机制,卡点名了两个载体。⭐ 与修正 90 / 94 的关系要分清:那两条是「条件永不满足 / 互相等待」的真缺陷;132 是它们的假阳性形态 —— 同样的外观,而卡已经答过。⇒ 判据永远是卡的正文,⛔ 不是锚行的措辞。os-steve,非本席的),⛔ 未在他人卡上留噪音评论。🔴 「某段文字在不在这个文件里」这个问题,我今晚用手搓的文本查询答错了三次,三次的形状都不同 —— 而第三次错在更危险的方向**。** ① 正则比权威读者窄:对 PR fix(service-analytics): refuse an unrecognised compareTo.kind instead of answering a previous-period window under a 200 #17570 的正文跑「行首⚠️ 本条的反向也要记:落地/交付的复验同样不能靠短语 grep —— 判据是落地探针(带双对照)加上打印交付物本身。
Clause-②:,容许-/>/**前缀」,零命中,而申报一直在那儿(它以反引号开头,门禁的读取器认)⇒ 假缺席。② 行锚 grep 撞上硬换行的句子:git grep -F 'at most one such action row exists per request'返回 0,而那句话就在approval-service.ts里、只是折成两行 ⇒ 假缺席,差一步把「这句话不在 main 上」写进派发令。③ 把换行tr掉还不够,因为每条续行都带//前缀与缩进:join 之后文本成了NEW row — so at // most one such...,短语依旧不匹配 ⇒ 这次是假存在/假消失的反向 —— 我的检查报「旧措辞已消失」,若采信就等于报告「改动已落地」,比前两次的假缺席更危险。⇒ 收敛成一条纪律:⛔ 永不让手搓的文本查询充当「X 在/不在文件里」的判据。三个合规替代,按优先级:(a) 用权威读者(门禁自己的脚本、--pair、--pr);(b) 把区域打印出来用眼读(本轮落地复验就是这么做的,所以没被第三次咬到);(c) 若必须程序化,先剥注释前缀再 join,并且配一个必须命中的阳性对照。⭐ 与修正 26 / 118 同族,但 133 是把它们收成一句可执行的话:26 说「没有对照的零不是证据」,118 说「零可能来自比权威读者更窄的问法」,133 说连带对照的零也可能来自一个读不到该形状的仪器,所以换仪器而不是加对照。🔴 我给别人的方案写了一个二分,而那个二分把它说窄了 —— 窄掉的恰好是该方案的全部要点。 本轮在 [Decision] 平台自带的四个定时示例流一个都声明不了组织 —— 而新规则要求它们必须声明 #17396 上分析跨席提来的候选 E(装机时按组织克隆声明),我实测出「
cloneFlowDefinition只改name/label/status,organization不在其中 ⇒ 克隆照样声明不出组织」,这一条是对的。错在随后写的二分:「E 要么要求管理员克隆后再手工补,要么要给那个三字段 mutation 集加第四个字段」。⇒ 漏掉的第三支是 安装器代做那次写入 —— 而那正是 E 的定义本身(提案原话是「由安装器代管理员做」)。照我的写法读,E 会被读成「必然人工」,也就是它被提出来要避免的那件事;附带还把一个不存在的 ADR-0126 §7.1 修订摆到了维护者面前当成必答题。⇒ 纪律:写「要么…要么…」之前先把执行者枚举一遍(人 / 安装器 / 运行时 / 门禁),⛔ 别把「谁来做」默认成人;更一般地,复述他席方案时,先用它自己的原话核对一遍你的转写,⛔ 不要只核对其中的技术事实。⭐ 处置照修正 121 的同族纪律做了:在同一张卡上发一条短订正(3 分钟内),明写结论不变、E2/E3 不受影响、并把交给维护者的那个问题一起收紧,⛔ 没有重写原评论(它已被读过,重写等于改记录)。🔴 一条裁决可以把某张卡判成「⛔ 永不派发」,而那张卡照旧挂着⚠️ 两条配套的自律:① 关闭不得吞掉未完成的义务 —— 本卡裁决派了一件 cloud 仓的「加指针」杂事,本会话读不到那个仓 ⇒ 按 NOT MEASURED 写进关闭评论并点名谁能做,⛔ 不写成「已完成」、也⛔ 不写成「缺失」;② 关这种卡要把「重开免费」写在评论里 —— 这是一个可逆动作,维护者与任何后来者都可以一键推翻,说出来它才真的是可逆的。⭐ 与修正 41 的关系:41 说「
pm:queue—— 于是它每一轮都作为候选出现,每一轮都要被完整读一遍才能再次判出「不能派」。 本轮实测 [Decision] Where does a decision that governs OPEN code live? — cloud (private) ADRs are cited from this public repo in 60 files with a qualifier and ~110 more times bare, squatting on unrelated local numbers (0024 · 0071 · 0081); mirror them here, or qualify only #14496:总监席 2026-09-02 裁决明写「本卡needs-user-decision→pm:queue,作父单/协调节点(⛔ 永不派发)」,分诊席 09-04 照裁决保留该标 —— 两侧都没错,但净效果是队列里一个永久的假候选,而本席的「被挡候选」表里它已经躺了九天(修正 116 说的腐烂的另一种形态:不是读数腐烂,是一个永远不会变的读数每轮重付一次)。⇒ 判据:父单/协调节点的pm:queue是有期限的 —— 期限 = 它还在协调东西。子树全closed且剩余步骤已落到别的车道并点名了目标 ⇒ 它不再协调任何东西,正确转换是关闭(completed,同笔摘pm:*),⛔ 不是让它继续占着队列。[Decision]标题 +pm:queue= 已裁、同笔转队的常态,读最新裁决评论定状态」—— 135 是它的下一段:读完裁决之后还要问一句「这张卡现在还在协调什么?」,答案是「没有」就该关掉。🔴 我连着两枪把「现值」写成了一个比写入落地时刻更晚的整时刻 —— 第一次自己抓到了,第二次又犯,说明抓到不等于改掉。 实测两次:17:33Z 那次写「现值 17:35Z」,回读
updated_at= 17:32:43Z;18:29Z 那次写「现值 18:31Z」,回读updated_at= 18:29:17Z。两次的读数其实都取在更早(17:25Z / 18:25Z),我却在写入时把时钟「凑整往前推」。⇒ 根因不是算错,是用了一个不存在的输入:「现在大概几点」不是读数,而现值这一栏要的恰恰是读数。⇒ 纪律:现值 = 产出这份台账的那次读数的时刻,直接抄那次读数打印出来的时间戳,⛔ 不取「写的时候大概几点」、⛔ 不凑整、⛔ 不往前留余量。自检仍按修正 117:回读的updated_at早于你写的现值 = 你在写未来,当场改回去。⭐ 与修正 130 同根:130 是「用了一小时前的列表当现值」,136 是「用了几分钟后的时钟当现值」——两头都是没有让那次写入去读它要写的东西,与修正 124 是同一条脊椎。🔴 我把过滤放在截断之后,于是自己造了一次假缺席 —— 而这次差一步就把它写成一条平台事实。 查 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 的标签改动史时,脚本先取⚠️ 本条是修正 133 的第四形态:133 的三种都是查询本身读不到目标,137 是查询对了、但我先把目标扔掉了。⭐ 也记一条正向:发现它的不是复核,是「这个结论太惊人了」这个感觉 —— 一个会推翻平台行为认知的读数,必须先怀疑仪器再怀疑平台。
events的最后 10 条labeled/unlabeled,再从中筛pm:*。非 pm 的标签事件(priority、type)会把 pm 事件挤出那个窗口 ⇒ 读数显示「从来没有过pm:on-hold事件」,而我几乎据此下结论说「标签变了却没有事件 = 某个通道绕过了事件日志」。⇒ 改成先筛后看全量(并打印本页事件总数、查Link头确认单页)重测:platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 共 5 条事件、platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 共 13 条,都是单页,结论这才站得住。⇒ 纪律:过滤永远排在截断之前;凡[-N:]、head、perPage与「只看最近几条」出现在一个否定性断言的链路里,那个否定就不成立。🔴 两条今晚一起撞上的:⚠️ 与修正 132 ②不矛盾,两者说的是两个扫描:解锁扫描只读
Restart-when:的合法通道是「正文 或 评论」,而我用的是只读正文的正则 —— 它在危险方向上出错;以及一条处置评论永远清不掉结构性的 H 行,于是我差点重做自己 18 小时前做完的活。 (a) 仪器:本轮对 [finding]sys_user.manager_idnow carries two independent organization screens, in two packages, with no shared code #11286 / INotificationOutbox has no cancellation, andack()on an unclaimedpendingrow silently succeeds in both implementations #11453 跑只读正文的Restart-when:正则得 NONE,照昨夜对 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 的同一判据就该把两卡翻标 —— 把正则扩到全部评论后,两卡各有一条真条件:[finding]sys_user.manager_idnow carries two independent organization screens, in two packages, with no shared code #11286 的Restart-when: closed #7497(5536814313),INotificationOutbox has no cancellation, andack()on an unclaimedpendingrow silently succeeds in both implementations #11453 的机器形全行(5481796501)。⇒ 两卡合法持有;只读正文会把它们误判成半态,导致一次错误的翻标。 昨夜那两卡在两个通道里都确实没有条件,所以结论侥幸是对的 —— 对的答案配错的仪器,仍然要改仪器(已在 platform-admin re-anchor L6 (reap): reader census on a walled rig; organization-scope auto-org-admin-grant's resolver; stop minting org-less rows; only then reap #11978 / platform-admin re-anchor L5 (migration): time-boxed legacy-grant dual read, then its removal one minor later #11975 各补一条范围订正评论,结论不变)。⭐ 本该更早警觉的信号:锚上 H9 根本没点名这两卡,而我的自制判据说它们违法 ⇒ 自制判据与门禁读数相左时,先怀疑自制判据(INotificationOutbox has no cancellation, andack()on an unclaimedpendingrow silently succeeds in both implementations #11453 的 triage 评论逐字写着 H9 读「in either channel」)。issue.body的Blocked-by:边(132),而H9 的Restart-when:谓词读两个通道(138)⇒ 写条件时仍以正文为最安全的家,但判「这个 hold 合不合法」必须查两个通道。(b) 记录:H52 的谓词是结构性的(最新 dev 报告有非空open_questions+ 卡无needs-user-decision),处置评论不改变这两个事实 ⇒ 该行此后每次 sweep 都会再出现。本轮为此付了两卡正文 + 17 条评论的完整重读,而那两条处置恰是本 session 2026-09-10T13:2xZ 自己写的。⇒ 纪律:座位贴必须载「已站下但永不自清」的 H 行表(§2 已建),每轮先读它再读锚;⛔ 处置只写在卡上而不进注册表,就等于每个 fire 重付一次。🔴 回读探针必须从「我发出去的字节」里切,⛔ 不能凭记忆重打 —— 本班已为同一个根因付了三次。 今晚的三次:① 改座位贴时凭记忆转写待匹配串(「自标」vs 正文的「自己标了」)⇒ assert 中止,已改为按行号替换;② 给 service-messaging: fan-out writes an
emaildelivery for a tenant with no email transport — it dead-letters on its first attempt and is kept 90d, so the hot outbox grows ~1 dead row per notification #17611 的回读探针打成① **项目长远合理性**,而我实际写的是**① 项目长远合理性**⇒ 四条轴全报 0,差一步就去「修」一条其实完好的评论;③ 修正 136 的现值也是同一根(用「大概几点」而非读数)。⇒ 共同根因不是手误,是在一个需要读数的位置使用了记忆。⇒ 纪律:回读探针由发出的 payload 切片生成(写文件时就把探针串一起算出来),或退而用结构化断言(如正则^\*\*[①②③④][^*]*\*\*把实际形状打印出来给眼看),⛔ 不手打预期字面量;凡一次回读得到一串不可信的零,先怀疑探针再怀疑内容(③ 的零就是这么拆穿的:4 条轴同时缺,比「我写漏了」更可能是「我问错了」)。⭐ 与 137 的分工:137 管查询链路的顺序(先筛后截),139 管查询字面量的来源(切片而非回忆)。🔴 把一条 declared≠enforced 送进 enforce-or-remove 通道之前,先查「没有执行」是不是维护者裁出来的结果 —— 本轮我差一步就立卡去重新审理一条已关闭的裁决。 实测链:决策卡形状强制一个「机器可寻」标记
os-decision-facets,而它在全仓只出现 1 次(定义它自己的那句),零脚本读它(阳性对照:os-dev-report/os-half-state-sweep在 8+ 文件、含两个门禁脚本)。这看起来是教科书式的 declared≠enforced,协议也明写该转 enforce-or-remove。⇒ 查重救了一次:pm: decision-digest extraction has hit its scripted-escalation trigger (42 open inbox cards) — freeze the facet-block rollup into a scripts/pm/ script #9886 正是「把 facet-block rollup 冻进scripts/pm/」那张卡,以 not_planned 关闭,依据是维护者 2026-08-19 的原话「之前定期生成的决策汇总 issue 没什么用」,随后 PR skills(pm-dispatch): notification handover — review-request and assign os-zhuang, retire the decision digest #9982 删掉了 digest 职责、批量决裁通道与那条脚本化出口条款本身;现行形态「不推送、不指派、维护者逐卡裁决」下,可 rollup 的对象不存在。⇒ 所谓「无读者」的真实读者是手动 grep 的人或 agent,而那正是现行模型要的。⇒ 纪律:declared≠enforced 的立卡前置问句是「执行是被忘掉的,还是被裁掉的?」 —— 后者 ⛔ 不立卡(优先序:维护者裁决 > 座位判断),只把出处记进注册表。⭐ 附带一条正向:本条的全部判据来自查重那一步,而查重本来只是为了防撞 —— ⇒ 查重不只防重复,它是读既有裁决最便宜的入口。5. Notes
Round reports to the maintainer go in chat(中文);this post carries only current values.
scratchpad/os-main-ro(detached worktree,每次派前git fetch origin main)里跑,⛔ 不用共享主检出。🟢 本会话 REST 对本席可达(200) —— REST 可达性是逐 session 的属性,⛔ 不可从座位贴继承(修正 95)。⚠️ 门禁脚本答
exit 3时:⛔ 不是通过也不是红,按 NOT MEASURED 记;⛔ 不要给它喂一份自己拼出来的--pair-json。node scripts/pm/check-governed-merges.mjs --pr <号>三点式自己派生路径面;阳性对照用--test AGENTS.md(答 GOVERNED / exit 3)。本轮 #17613 答 0 of 2 ⇒ NOT governed / exit 0,与仓内Governed Surface Queue Guard的 success 互证。check-governed-merges只审到本仓:objectui / cloud / objectos / hotcrm 无检出 ⇒ 未审,而未审的仓不是干净的仓。events日志不一致 —— #11978(5 事件,末 pm 事件pm:blocked)、#11975(13 事件,末 pm 事件pm:blocked)、#15556(末 pm 事件pm:queue@ 09-07T08:28:35Z),而三者实时标签分别是pm:on-hold/pm:on-hold/pm:blocked,且updated_at都晚于全部事件。⛔ 机制不去建立(与页脚那条同纪律)。唯一可操作的推论:这些卡上 pm 状态无法只靠 events API 审计 ⇒ 取证时以实时标签集为权威,事件日志按可能不完整处理。完整读法见 #11978 的issuecomment-5639937182。list_issues多标签过滤是 OR ⇒ 单标签整车道读全,本地求交。返回数须等于totalCount才算读全。⭐ #12981 的真实账本是仪器:
scripts/measure-durability-swallow-family.mjs。error。SINGLE_CLAIM_PATHS实测恰 1 个成员(.objectui-sha,阳性对照命中)⇒ 绝大多数共享文件是普通并发,后落地方解冲突;⛔ 不要把「共享」当「串行」。Generated by Claude Code