Skip to content

[PM seat] domain:spec-surface — 🟢 os-project-manager #6298

Description

@qq9340100

本贴是 domain:spec-surface 座位的唯一权威登记。 座位贴协议(维护者 2026-08-06 批准):索引 = label:pm:seat,总入口 #4604(指针页)。本席由维护者 2026-08-07 批准自 domain:spec 拆出。

单写手规则:只有在任座位 PM 编辑本贴正文;接管/移交 = 改正文 + 一条审计评论(评论只作交接存档,不承载状态)。空缺争用:动手前重拉正文、审计评论时间戳先到先得、写后回读。活性判定(惰性,无心跳,仅接管冲突时评估):>24h 无产出即可回收。

范围

packages/spec文本面:describe / JSDoc / 墓碑迁移散文 / 错误 guidance 与 alias 表 —— 即契约「怎么解释自己」的那些行。

准入判据 = 校验不变量:改动前合法的元数据改动后逐字节依然合法,非法依然非法;客户零迁移,changeset 恒 patch。

三条红线:

渲染输入判据 —— 现在有免费代理,不必再测

⚠️ 判据是「改的是不是渲染输入」,不是「改的是不是文本」。

免费代理(2026-08-09 实证):看 PR 上 Build Docs 作业是 run 还是 skipped。 run = 触达参考页(#6852 重生成 permission.mdx 两格),skipped = 不触达(#6846)。双向实证,任何 PR 一眼可读。

机制:packages/spec/scripts/build-docs.ts:186if (!entry.name.endsWith('.zod.ts')) continue; —— 生成器只遍历 .zod.ts

九类实证:

触达
.describe() ✅ 参考页(#6852)
registry reason ✅ upgrade-guide + spec-changes(#6495)
registry acceptanceCriteria upgrade-guide —— spec-changes.json 不含该字段(#6875 实测,grep -c = 0)
#6389 ledger 数据行 ✅ 11 页
#5059 模块头 ✅ 恰好 6 页(#6447)
guidance / error-map ❌ 零(#6423/#6453)
contracts/** 纯 JSDoc ❌ 零(#6463)
TSDoc @example ❌ 零(#6729 证伪)
.zod.ts 文件的 JSDoc ❌ 零(#6846/#6759)

卡点自报信号

  1. 队列水位:连续 3 天 >15 张或平均滞留 >48h → 提频/加 batch/继续拆域;
  2. 同一 references 树在飞重生成 PR >2 → 打包;
  3. 分诊脉冲(单次灌入 20+)→ 一次性 sweep 专项。

运行模式:sweep-first。并发:维护者 2026-08-08 令「至少三个」,实测舒适区 4;5 dev + 1 审计会打满共享身份 REST 配额。

当前 PM(会话或 Routine ID)

🟢 In office: GitHub os-project-manager / session session_018ffcE95NaMJcL9XJ9VDYgk / takeover 2026-08-07T16:45Z。

前任:hotlong / session_01JTSZAjgtL3oR6YcpNDhW3T,2026-08-07T13:45Z → 16:40Z 注销;其三项在手由其自己跟完。

说明 — 座位现状(2026-08-09T02:2xZ 全量刷新)

在飞 0 / 队列 0

#6875(#6844)在合并队列中,已 ACCEPT + ready + arm。合入后账面 18 卡。

账面(本任期,2026-08-07T16:45Z 起)

17 卡闭环(16 PR 合入 + 1 证伪收卡)+ 1 张在队 + 14 张新单入库;0 返工;0 决策箱新增;发版板本席清零 ×2。

已闭环:#6365/#6423#6145/#6447#6416/#6453#6438/#6463#5781+#5809/#6495#6605/#6689#6641/#6729(v17)、#6630(#6701 part 1 + #6753 part 2)、#6628/#6759#6631/#6789#6619/#6804#6696/#6846#6698/#6852#6758/#6847#6756/#6854#6413(证伪)。

待分诊供给(8,⛔ 只读跟踪,domain:* 单一生产者是分诊席)

本车道 finding:#6805(strictToolError/strictCapabilitiesError 仍在 alias-integrity 视野外;更省修法 = 把 #6804 的闭合钉放宽到「任何新手写 unrecognized_keys map」)、#6856(migrate 动词 rewrite 32 : remove 6,filer 明说审计哪些盖在 strip 上)、#6762(using describe 在 ADR-0058 后 under-promise)。
他车道:#6855(domain:cli,NDJSON e2e flaky)、#6750#6763#6842、objectui#3901。

决策箱(本席相关 0;全仓 5,只列不 nag)

#6640(metadata, v17)、#6604(spec, v17)、#5617(devx)、#4585#1825(engine-core)。

E. 实测结论(接任者直接可用)

  1. 渲染输入判据 —— 见上,含免费代理。
  2. 耗时基线:S 卡 ~40–65min 至 PR,M 卡 ~50–90min;判死看 93–96min 上沿。宿主 worker 重启账号级 session limit都会整批杀 dev(后者报 You've hit your session limit · resets HH:MM);reset 后 SendMessage 原 agent 即从 transcript 复活续跑,已推送工作零损失(三只同批 + 一只二次实证)。
  3. 探针回执即活性读数;中期探针无害且常促早推。
  4. flaky: format.exit-code.test.ts pins timer.elapsed() + 531 to a fixed low byte — any 1ms of scheduling delay turns it red #6380 flaky 签名:format.exit-code.test.tsexpected 20 to be 19
  5. 拒收/删除类复核硬判据:删除类 PM 自跑引用面普查;拒收类最低断言 code + status
  6. 提前复核 + 翻转前置(E6):PR 一出即复核、ACCEPT 先落 issue;ready 翻转必须等 (a) 两门禁族作业 success 且 (b) dev 终报已达或确认死亡。序:先 ready 后 arm(draft 转换掉队列与 auto-merge)。
  7. 被合并解锁的卡,解锁前在合并后 ref 重验文件面(E7)
  8. 编辑口径 (a):已发布 CHANGELOG 永不改写;未消费 changeset 直接改;活源散文直接改。
  9. PM 供词里的数字与锚点一律标「须实测」(E9) —— 六度实证(docs(spec): correct #4610's falsified "zero importers" evidence and its uncompilable FROM → TO, forward-note the stale rc.2 areas caveat (#5781, #5809) #6495 枚举数、[finding][spec] lifecycle.storage guidance says "Rotation does not reap by age … DROPs the oldest shard whole (O(1) reclaim)" — true only on SQLite; Postgres/MySQL take the age-based rotation-fallback leg #6631 锚点、[finding][spec] position.delegatable JSDoc names a security-delegatable-admin-position lint rule that does not exist — the runtime D12 gate is the only enforcer #6628/rls.zod.ts 的 check @example status IN ('draft', 'pending') 编译不出来 —— 照抄 schema 自带示例的策略会 fail-closed 拒绝全部访问 #6641 regen 假设、[finding][spec] The dashboard.widgets[].aria tombstone sends the author to app.aria as a surviving live surface — App.aria is itself a retiredKey() tombstone removed in the same major #6756dashboard.mdx 路径根本不存在、spec: the D3 ledger's resume-authority-undeclared… acceptance criteria still says "supportsPause is a declaration nothing enforces (#5703)" — the same staleness #6749 fixed in the TSDoc, one channel over #6844 的「两个通道」实为一个)。卡片正文也会错,不只是 PM 的口述。
  10. 卡片文件面以读完整正文为准(E10);撞面优先拆两半派(Part of 不带 Fixes)。
  11. 门控判断只读 issue_read / git log,永不读 search_issues(E11) —— 索引可滞后 2.5h+,曾致四卡错挂 50min。搜索只用于发现。
  12. 补丁轮续派原 dev(E12),SendMessage 投诊断签名 + 修法口子 + 红线(fix(spec): the RLS check clause's enumerated-values @example is CEL, and compiles (#6641) #6729 实证)。
  13. changeset 判据(E13,已收口):判「这段散文有没有触达使用方」,不判「文件发不发布」。参考页 / .d.ts / parse 可达错误串,任一即算 ⇒ patch。三者皆不沾 ⇒ skip-changeset(fix(spec): stop teaching the retired ETL layer as a live retry surface in flow.zod.ts (#6630, part 2) #6753)。关键 datum:docs(spec): describeHighPrivilegeBits 的裸通配符举例换成仍带 '*' 的 viewer_readonly (#6696) #6846 的源文件不在 files glob,但 dist 在,文案经 dist/**/*.d.ts 悬停触达 ⇒ patch(先例 8ad609c69)。
  14. ⚠️ 字面量 pin 检索对转义正则断言是盲的(E14) —— fix(spec): aria 墓碑不再指向同一大版本里已退休的落点 (#6756) #6854 dev 自曝:expect(msg).toMatch(/app\.aria/) 字面量搜不到,两条钉住缺陷的既有断言因此漏检,修复后才炸出来。问「这段文案有没有 pin」必须连 toMatch(/…/) 写法一起搜。docs(spec): D3 账本 resumeAuthority 一条不再要求手工排查 supportsPause 不一致 (#6844) #6875 已按此执行并明确报告。
  15. 队列失败三路分诊 + 同签名只重排一次(E15) —— ①失败在本 PR 触及的包 ⇒ 真回归;②无关且他处见过 ⇒ flaky,立卡别重排;③两者皆非 ⇒ 可能同批语义冲突,重排一次。⛔ 同签名再红 = 升级,不重复重排(每次烧全队列重建)。fix(spec): wait-timeout 处方改印能真正解析的 timerDuration: '60000'(#6758) #6847 实证:重排即过,最终样本三过一失败。
  16. dev 死亡时,其未竟的只读核验步骤 PM 可自行完成 —— refactor(spec): 三个手写 unrecognized_keys 错误映射折叠进 strictObject 的按集合取键 guidance(#6619) #6804 实测(消费半径清扫走 git grep 即可),E6 的「确认死亡」分支因此能提前满足,省 3.5h 空等。⛔ 边界:只读核验可代做,写代码不行

F. 跨车道备忘

G. 环境注记(⛔ 接任会话必读,每条都咬过人)

Metadata

Metadata

Labels

domain:spec-surfacepm:seatPM seat registry issue - single-writer body, index = this label

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions