Skip to content

[PM seat] domain:metadata — 🟢 os-zhuang #6367

Description

@hotlong

本贴是 domain:metadata 座位的唯一权威登记。 索引 = label:pm:seat,总入口 #4604。本席由维护者 2026-08-07 批准自 domain:engine-core 拆出(PR #6370)。

单写手规则:只有在任座位 PM 编辑本贴正文;接管/移交 = 改正文 + 一条审计评论。争用:动手前重拉正文、审计评论时间戳先到先得、写后回读。活性判定(惰性,仅接管冲突时评估):>24h 无产出可回收。⚠️ 实战修正:该阈值在维护者加急令面前不适用 —— 见注记 13。

范围

engine 的元数据半边:packages/metadata*packages/platform-objects

红线:⛔ 元数据格式/接受面domain:spec;ObjectQL 编译/查询执行/formula/core runtime 归 domain:engine-core;/meta 路由本体在 packages/restdomain:cli;packages/lint 属 devx(#6715 实测);⛔ content/docs/releases/ 恒不许碰。跨半边按主要落点判,拿不准 FLAG 回分诊。

当前 PM

os-zhuang · session_01W6bLax4KMrSfnE1ydFU8Dw · Seated 2026-08-08T08:35Z

  • 姿态:Round 8 已收束,车道待命(2026-08-09T19:0xZ)——在飞 0、等维护者亲 merge 2、队列 3 张全外部依赖。巡逻节奏 60-70 分钟,任何 dev 起飞收紧 ≤45。
  • 批次上限 5;常设优先级「继续派发,优先 v17」——⚠️ 本席 v17 板已清零(全仓 domain:metadata+target:v17 实测为 0 张)。
  • protocol.ts 并行授权:区域不相交可并行;落地端逐张串行;同函数/同区域恒不同批。
  • 前任:baozhoutao / session_01KDU3qAuJyajAQm3GkUXdfA,至 2026-08-08T08:2xZ。

台账(os-zhuang 任期)

已 MERGED(23 卡 23 PR,零返工零升级)

卡 → PR → commit
#6563#6642 e6025e9 · #6417#6666 bb7cb417c · #5079#6687 114e72795 · #6036#6700 61282f906 · #6285#6708 a5d25734c
#6479(v17)→#6709 252f71bd6 · #6620(v17)→#6768 75e6871bf · #6660#6767 d42a92fc6 · #6418#6770 bed427f7e · #6602(v17)→#6779 4bb6f01af
#6659#6787 e78760861 · #6621(v17)→#6807 271cee131 · #6562#6811 5e247fd6b · #6772#6817 50a8d115a · #6640#6823 2ab1257c9
#6771(major,ADR-0087)→#6824 9960cd2a0 · #6780(v17)→#6826 725c7b023 · #6699#6845 53aeb027f
#6710(A1 裁决,v17)→#6971 30283263c · #6848#6989 c733ae8e0 · #6924#6996 6443b792c · #7012(止血 C)→#7093 f6e59f7e1 · #6994#7096 9f7a7c25a

v17 摘 7 张;#6250 家族第五、六词表连落;revertCommit 三部曲全落。派发 27 单 27 中(23 落地 + 2 停 ready 待人工闸 + 3 STOP 设计出口 + 1 让位他席落地;#6853 一卡两出口)。

后继卡必读的四条落地事实:

  1. #4463 运行时发布门在 host-config 拓扑(environmentId 未绑定)上整体不跑——#5086 只把 code-only 拒绝移出了同一条短路 #6710 —— 发布门改读 authoringChannel: 'environment'|'package-author',默认在装配缝与构造器两处解析 ⇒ 覆盖拓扑变多(CLI host-config 入网)。⚠️ [finding] validateEmptyCombinators gates the runtime publish path for flow only — the other filter-carrying metadata types reach the same door ungated #6715 实测澄清边界:它 settle 的是哪些 kernel 激活门,不是哪些 type 门会 dispatch —— 后者是 [P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716,至今零类型开放。cloud control-plane-preset.ts:99 一行声明为实际欠账
  2. Stop-the-bleed: tier-3 heal must not unregister a package-bound object — decide on the contributor's package binding, not isArtifactBacked (#6853 ruling C) #7012 —— tier-3 heal 改判 owner contributor 的 package binding,不再用 isArtifactBacked(overlay 覆写后它恰好翻 false)。判据有证明:registerObject 的 splice 只在两个 package id 匹配时触发 ⇒ 幸存 contributor 可证明携带 packaged owner 的 id。故意不问 enabled/status不问 manifest objects 列表,各有 pin。ruled cost:少数真删的 package-bound 对象 listable-but-rowless 至重启。
  3. assertSortFieldsExist's dotted-path SORT hint also prescribes an unmaterializable "formula or rollup" denormalization — same defect class as #6673, different axis #6924 + A non-dotted orderBy naming a formula field answers 200 in arbitrary order — the sort is silently dropped (measured on driver-sql + driver-memory) #6994 —— SORT 轴两半。dotted hint 改判 a stored field(代码 + query-syntax.mdx 同 PR);非 dotted 的 formula 排序改为 400 INVALID_SORT⚠️ 两条实测更正:(a) summary/rollup 真实列且 ORDER BY 可用,卡原文的「同样被排除」为假,它被移出 hint 是另一个更弱的理由;(b) spec 的 COMPUTED_VALUE_TYPES(formula/summary/autonumber)是契约,拿它 gate 排序会误拒两个能正确排序的类型 —— 实测家族恰为 {formula}⚠️ 已知未覆盖:直接调 engine.find() 的内部调用方仍静默丢排序,套件内有标注 RECORD OF A KNOWN HOLE 的 pin 断言该未修复行为,应在另一半(engine.find() still drops a formula ORDER BY silently — decide whether the engine refuses or keeps its internal-caller tolerance #7095,engine-core)落地时变红。
  4. org 作用域的 flow overlay 只在「本进程内发布后」绑定触发器,重启后静默失绑——冷启动两条读路径都把 organization_id 非空的行滤掉了 #6190(他席落地) —— 协议侧对非 org-overridable 类型的 org-scoped 写入 403;runtime 只对 allowOrgOverride 类型传 org。范围实测为 19/27 类型。

停 ready 等维护者亲 merge(⛔ 本席永不挂 AM、不进队列;#6741)

PR head 状态
#6981 #6825 ADR-0005 §Index migration 三句现逐句为假 ⇒ Amended 段 + 小节横幅 + Status 行第四条;顺带把两个 owner 文件注册进 adr-anchors.json(43→45,此前都未锚定,#6191 根因复发形状) c4ac01f3e 门禁已复核全绿;requested_reviewers=hotlong
#7087 #6853 ADR-0029 修订提案(裁决 B 的设计交付) 746c47d 门禁已复核全绿

#7087 的 D9(实现卡必读):租户 overlay 注册为第三种非拥有 overlay kind,对 base 层 replace 语义(base = overlay ?? own,extender 照常折叠)。决定性论据:逐位解析出与今日 splice 相同的结果 —— 解析后 schema(含 _provenance:'org')不动,动的只是注册表记住什么 ⇒ assertSingleOwnerPerObject 字面不变(ADR-0028 D5/D6 依赖 D3 无条件)、computeFQN 保持 identity、base 选择按 kind 而非 priority。⚠️ 单独一条:getArtifactItem 的 object 分支须读 owner contributor 而非合并 body,否则 B 落地后 isArtifactBacked 仍说谎。#6995 被模型吸收。两处 open:ADR-0005 的「Amended by」指针待接受时再加;「迟装」留给实现卡。

STOP 收口(设计出口,非返工)

队列与供给(3 张,全部外部依赖;可派 0)

跨车道备忘

运维注记(本任期实测,交接必读)

  1. flip 定点 6-9 分钟核 job 结论;AM 首挂可能静默失效(fix(objectql,metadata-protocol): a deleted runtime-created overlay leaves the registry, so list/get/dispatch agree (#5079) #6687)——落地双读数是唯一抓手;读 main 窗口宁大勿小(fix(metadata-protocol): PATCH /data/:object/:id binds the PATH row, not the body's id (#6479) #6709 grep ≥40;fix(metadata-protocol): classify a failed index build from the ERROR, not its message (#6699) #6845 perPage=5 差点漏)。AM 返回值字段为空是本仓已知假警报(四次实证)——判准是队列分支出现
  2. 台账读数会过期:跨席/决策箱条目消费前必须回源核实。裁决常由他席 PM 会话代记(#4463 运行时发布门在 host-config 拓扑(environmentId 未绑定)上整体不跑——#5086 只把 code-only 拒绝移出了同一条短路 #6710/org 作用域的 flow overlay 只在「本进程内发布后」绑定触发器,重启后静默失绑——冷启动两条读路径都把 organization_id 非空的行滤掉了 #6190/Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 均是)——只认卡上评论,不等专属通知。
  3. session limit 灭批 ×3(共 11 人次):SendMessage 复活 = resume from transcript 零丢失;按名字不可达时用 spawn 返回的 agentId 直发(五发五中)。
  4. worktree footgun ×2:git checkout <分支> -- <文件> 首提交前静默回退 —— 派发令带警示行(A non-dotted orderBy naming a formula field answers 200 in arbitrary order — the sort is silently dropped (measured on driver-sql + driver-memory) #6994 的 dev 又踩一次并自陈)。复盘项:进 os-dev 定义。
  5. 派发令三分区(裁决/机制假设/标准条款)+ 后继定价必答项:27 单 27 中零返工。文件锚点会漂移 —— 锚定函数名而非行号。
  6. 开发产出的 PR body 必须英文(Round-5 起写进派发令)。
  7. needs_decision / STOP 是设计出口而非返工:#4463 运行时发布门在 host-config 拓扑(environmentId 未绑定)上整体不跑——#5086 只把 code-only 拒绝移出了同一条短路 #6710(dev STOP→PM 菜单→裁决→原认领续派→落地)、[finding] validateEmptyCombinators gates the runtime publish path for flow only — the other filter-carrying metadata types reach the same door ungated #6715(实测触发分诊自设停止条件→关闭并转交测量)、Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853(升级获裁→拆出止血卡 Stop-the-bleed: tier-3 heal must not unregister a package-bound object — decide on the contributor's package binding, not isArtifactBacked (#6853 ruling C) #7012 已落地 + ADR 提案 docs(adr-0029): amend D3 — a tenant object overlay is its own contributor layer (#6853) #7087)。菜单须给推荐 + 每项长期代价。
  8. 晋级不等于已验证 —— 消费分诊晋级时必须回读未兑现的前置闸(四次实证):assertSortFieldsExist's dotted-path SORT hint also prescribes an unmaterializable "formula or rollup" denormalization — same defect class as #6673, different axis #6924 闸=「一条实测 repro」、Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 闸=「一个 API 决定」、[finding] validateEmptyCombinators gates the runtime publish path for flow only — the other filter-carrying metadata types reach the same door ungated #6715 闸=「gap 是否普遍」。前两张被一次性 pass 越过;Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 的越闸理由被实测正面证伪,裁决据此正式撤回该前提。处置:改 verification-first / decision-scoping 派发,把未兑现的闸变成 dev 第一交付物。
  9. 反向验证的四种诚实结果都要保留:预测中的红;预测漏的红(记原因);结构上不可能红的行(幸存 carve-out 的覆盖,非本次证据)与方向反转的行;⭐ 因短路而未被测量的预测(明说不 claim)。无测试覆盖的改动(ADR 散文)应直言「无反向验证」并改报实际 gate 输出——伪造的比缺席的更糟。⭐ 方法学:revert 到自己的 base,不是移动中的 origin/main。⭐⭐ 测试替身比真实实现「更能干」是缺陷发生器(A non-dotted orderBy naming a formula field answers 200 in arbitrary order — the sort is silently dropped (measured on driver-sql + driver-memory) #6994 实证:conformance stub 交回活引用 ⇒ applyFormulaPlan 把虚拟值持久化,下次读真按不存在的列排序;用真实 driver 的 asc===desc 判定是替身在和它替代的 driver 矛盾 ⇒ 修替身、不弱化断言)。
  10. PM 的机制假设会错,必须公开纠正(本任期七次,七次零返工):[finding] validateEmptyCombinators gates the runtime publish path for flow only — the other filter-carrying metadata types reach the same door ungated #6715 注册表注释、fix(metadata-protocol): the dialect arm of classifyIndexFailure walks cause to the conflict arm's depth (#6848) #6989 的可复用 collector、fix(metadata-protocol): the dialect arm of classifyIndexFailure walks cause to the conflict arm's depth (#6848) #6989 的 cycle-safety(predicate visited set)、Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 三卡必须同行、assertSortFieldsExist's dotted-path SORT hint also prescribes an unmaterializable "formula or rollup" denormalization — same defect class as #6673, different axis #6924rollup 同属虚拟、Stop-the-bleed: tier-3 heal must not unregister a package-bound object — decide on the contributor's package binding, not isArtifactBacked (#6853 ruling C) #7012getPackage 返 null、A non-dotted orderBy naming a formula field answers 200 in arbitrary order — the sort is silently dropped (measured on driver-sql + driver-memory) #6994 的「materializability 在 gate 处不可答」(实测可答 —— 同一 helper 已返回 fields)。派发令的「机制假设(须实测,鼓励证伪)」分区正为此存在。
  11. PM 亦会程序性失误:[docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825 派发前未读完卡上评论却写了「冲突时以分诊为准」,致 dev 收到矛盾指令。教训:派发前必须读完卡上全部评论
  12. ACCEPT 绑定 head sha:docs(adr-0005): amend the overlay-index section instead of rewriting it #6981 在 ACCEPT 后被他会话推了合并提交解冲突,旧 head 门禁结论即刻失效。head 变动须重核门禁(不重做 step 7,只把证据重锚到会真正合并的 head)。
  13. ⭐⭐ 空窗代价 —— 本任期最贵的一课:09:26Z 定点到 14:01Z 实际动作空了 ~4.5 小时。期间维护者裁了 org 作用域的 flow overlay 只在「本进程内发布后」绑定触发器,重启后静默失绑——冷启动两条读路径都把 organization_id 非空的行滤掉了 #6190、runtime 半边合并、HOLD 解除,本席未接;维护者遂下加急令,他席正当接管。教训:(a) 长空窗后第一动作必须全面回源(时间、v17 板、决策箱、队列),⛔ 不得基于上一枪读数行动;(b) 遇他席按正当理由接管,立即公开 stand down 并留下免重推导的信息——重复劳动比慢更糟(CLAUDE.md isSystem 写入仍可产生悬空 lookup 引用——需要一条只报告不拦截的巡检(#4441 残留) #4551/process: #4551 被两个会话重复实现(#4555 与 #4559)——需要 Fixes 唯一性 CI 闸 + 认领评论带会话 ID + 分支名带 issue 号 #4588)。结局验证:org 作用域的 flow overlay 只在「本进程内发布后」绑定触发器,重启后静默失绑——冷启动两条读路径都把 organization_id 非空的行滤掉了 #6190 顺利落地,两边零浪费。
  14. 被踢出合并队列先读签名再决定:判据 = 无 merge-queue-triage 机器评论 + head 未变 + PR 自身全绿 + mergeable_state: clean + 整个队列被清空且同批他卡已落地 ⇒ 判分组批次连带,可直接重挂(fix(metadata-protocol): tier 3 refuses to unregister an object bound to an installed package (#7012) #7093 实证,重挂一次即过)。有指向本 PR 的签名则先修再挂。
  15. 「仅在门口拒绝」必须回答「是否留下未覆盖调用方」(A non-dotted orderBy naming a formula field answers 200 in arbitrary order — the sort is silently dropped (measured on driver-sql + driver-memory) #6994 立范):答案为「是」时,把缺口做成一个标注 KNOWN HOLE 的 pin(断言未修复行为、注明应在另一半落地时变红)并另立卡,而不是写一句 PR body 里的免责声明 —— 缺口从此会在被填上时自己报警。
  16. SKILL 复盘:前任 [skill] pm-dispatch: 5 lessons from the domain:metadata seat's first term (8 cards MERGED / 0 rework / 4 dev-side falsifications) #6644;本任期复盘立卡安排在座位移交/收工信号时,候选见注记 4/8/9/12/13/14/15。

定时器:巡逻链 send_later(现役 trig_013xTVzGwshnt7b5jv4M7Uwx @ 2026-08-09T20:04Z);旧钟均已 spent。

Metadata

Metadata

Assignees

Labels

domain:metadatapm: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