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 无产出可回收 —— ⚠️ 该阈值在维护者加急令面前不适用(注记 14)。

范围

packages/metadata*(含 metadata-fsmetadata-protocolmetadata-core)、packages/platform-objects

红线:⛔ 元数据格式/接受面归 domain:spec(#6017);ObjectQL 编译/查询执行/formula/core runtime 归 domain:engine-core;/meta 路由本体在 packages/restdomain:cli;packages/lint 属 devx;⛔ content/docs/releases/ 恒不许碰。
⚠️ domain:spec(#6017) 与 domain:spec-surface(#6298) 不是一回事:接受面变更(给响应 schema 加携带字段等)归 #6017;spec-surface 的第一条红线明确排除接受面。本席 08-10 在 #4717 上曾把 STOP 误指向 #6298,由 dev 更正。

当前 PM

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

  • 姿态:Round 10 在飞期(2026-08-10T05:3xZ)——在飞 1、决策箱 1、队列 2 张。
  • 批次上限 5;常设指令「继续派发,优先 v17」——⚠️ v17 板持续为空

台账(os-zhuang 任期)

已 MERGED(28 卡 28 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
#7000#7152 a1b66efbb · #6992#7154 bf32d4a0e · #6231#7182 55da611e5
#6825#6981 0f539bdc9(hotlong 手动 merge)· #6853#7087 fb5ebc5df(hotlong 亲自加入队列;D9 设计由此批准)

v17 摘 7 张。派发 33 单 33 中(28 落地 + 1 在飞 + 4 STOP 设计出口;另 1 张让位他席后落地)。

后继卡必读的落地事实:

  1. #4463 运行时发布门在 host-config 拓扑(environmentId 未绑定)上整体不跑——#5086 只把 code-only 拒绝移出了同一条短路 #6710 —— 发布门改读 authoringChannel⚠️ 边界:它 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;判据有证明。⚠️ Implement ADR-0029 D9 — register a tenant object overlay as its own contributor layer instead of splicing out the packaged owner #7277 落地后应复查它能否收窄/退役
  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 轴两半。⚠️ summary/rollup 真实列;COMPUTED_VALUE_TYPES契约不可用于 gate 排序。⚠️ 已知未覆盖: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 落地时变红。
  4. cli/metadata: os migrate plan still creates .objectstack/metadata/ on a fresh project (the residual half of #6743's dry-run write side effect) #7000 —— FileSystemRepository.start() 不再建目录。⚠️ 必须的补偿:chokidar 无法 watch 不存在的路径,watcher 改为 root 出现时才装 —— 无此补偿会静默杀掉外部编辑检测⚠️ cli/driver-sql: os migrate plan 自称 dry-run,却仍会在全新项目上创建空数据库文件(#6469 的残余写副作用) #6743 的数据库半边(PR fix(cli,driver-sql): os migrate plan stops creating a database on a fresh project (#6743) #6997)仍未合并。落点是 packages/metadata-fs
  5. Plugin-registered metadata types can carry org-scoped rows that cold boot skips — neither refused nor reported #6992 —— 冷启动审计扫 live registry;拒绝区未动且分歧被测试钉死。真正载体是 SchemaRegistry
  6. [finding][drivers] DriverQuery 已经存在,但几处驱动调用方仍在用 as any / as QueryAST 兜住冗余的 object —— 连带把 where/orderBy/fields 的检查一起关掉 #6231 —— 根修复是把 database-loader.ts 三个读 helper 的参数改成 DriverQuery,在九个调用点恢复检查。三个相邻 engine cast 被 EngineQueryOptionsSchema.search rejects the bare query string that ADR-0061 D1 calls canonical — so every engine caller that wants it must as any, losing the whole query's checking #7178 的 spec 分歧阻塞,保持原样 + 注释。
  7. docs(adr-0029): amend D3 — a tenant object overlay is its own contributor layer (#6853) #7087 = ADR-0029 D9 已批准:overlay 为第三种非拥有 kind,base = overlay ?? own,解析逐位不变;assertSingleOwnerPerObject 字面不变;base 选择按 kind 非 priority。

在飞(1 张)

决策箱(维护者)—— 1 张

队列(2 张)

本任期新立跨车道卡(⛔ 只记录不催)

#7150(chokidar 监听在生产布局下疑似从未触发,立卡者未自行定级因未测严重性输入)、#7177(drivers:测试文件还有 10 个同形状站点,一个拼作 as never)、#7178(spec:EngineQueryOptionsSchema.searchQueryAST.search/ADR-0061 D1 分歧,阻塞 #6231 三个 cast)、#7294(spec:POST /meta/:type/:name/publish 是已服务的 REST 路由却零 spec 声明)、#7095(engine-core)、#6995(被 D9 吸收,#7277 落地后应可关)、objectui#3950

运维注记(交接必读)

  1. flip 定点 6-9 分钟核 job 结论;落地双读数是唯一抓手。AM 返回值常为空(六次),但 docs(adr-0029): amend D3 — a tenant object overlay is its own contributor layer (#6853) #7087 返回非空且报 method: MERGE(请求 SQUASH)——判准始终是队列分支出现或 main 上有 commit
  2. ⭐⭐ 继承来的状态句必须回源核实(本任期三次实证,代价递增):cli/driver-sql: os migrate plan 自称 dry-run,却仍会在全新项目上创建空数据库文件(#6469 的残余写副作用) #6743「已落地」(实为 open draft)、docs(adr-0005): amend the overlay-index section instead of rewriting it #6981「未落地」(实为 17 小时前已合并,窗口 grep 之误 —— 查落地绝不可用 git log -N,须无界/按日期/读 merged 字段)、[P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716+[P2/P3] 运行时授权门的 advisory findings 要进响应并被 Studio 渲染 + docs「the gate」补第四列(#4463 收尾) #4717「被 [metadata-core] sys_view_definition 的"活跃行唯一"从未生效——归档视图仍占用 (name, organization_id, owner) 名额 #5839 阻塞」([metadata-core] sys_view_definition 的"活跃行唯一"从未生效——归档视图仍占用 (name, organization_id, owner) 名额 #5839 在本席上任前就已关闭,该阻塞整个任期从未成立)。模式相同:把一句写下来的状态描述当成当前事实,不核实其依赖条件是否仍成立。凡「X 被 Y 阻塞 / X 已落地 / 落点在 Z」,消费前一律回源。
  3. 裁决常由他席 PM 会话代记 —— 只认卡上评论。
  4. session limit 灭批 ×3(11 人次):按 spawn 返回的 agentId 直发可复活,零丢失。
  5. worktree footgun ×3:git checkout <ref> -- <path> 首提交前静默回退。复盘项:进 os-dev 定义。
  6. 派发令三分区 + 后继定价必答项:33 单 33 中零返工。锚定函数名而非行号(engine.ts 一天漂 ~800 行;repository.ts 换了包)。
  7. PR body 必须英文。
  8. STOP / needs_decision 是设计出口而非返工(本任期 4 次):#4463 运行时发布门在 host-config 拓扑(environmentId 未绑定)上整体不跑——#5086 只把 code-only 拒绝移出了同一条短路 #6710[finding] validateEmptyCombinators gates the runtime publish path for flow only — the other filter-carrying metadata types reach the same door ungated #6715Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853[P2/P3] 运行时授权门的 advisory findings 要进响应并被 Studio 渲染 + docs「the gate」补第四列(#4463 收尾) #4717。菜单须给推荐 + 每项长期代价。
  9. 晋级不等于已验证 —— 须回读未兑现的前置闸(四次实证);Registry heal restores the metadata-map view but never re-registers a packaged contributor definition an overlay save replaced #6853 的越闸理由被实测正面证伪,裁决据此正式撤回该前提。
  10. 反向验证的四种诚实结果:预测中的红;预测漏的红(记原因);双向绿的行(guards 非证据);因短路未测量的预测(明说不 claim)。无测试覆盖的改动应直言「无反向验证」——伪造的比缺席的更糟。⭐ revert 到自己的 base。⭐ 测试替身比真实实现「更能干」是缺陷发生器(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)。⭐ 读到陈旧构建的反向验证等于没测(cli/metadata: os migrate plan still creates .objectstack/metadata/ on a fresh project (the residual half of #6743's dry-run write side effect) #7000)。⭐ 变体验证:再跑一个「天真修复」变体证明补偿是必需的(cli/metadata: os migrate plan still creates .objectstack/metadata/ on a fresh project (the residual half of #6743's dry-run write side effect) #7000)。⭐ 自我防御验证:把缺陷重新引入且不加逃逸,确认 CI 会抓([finding][drivers] DriverQuery 已经存在,但几处驱动调用方仍在用 as any / as QueryAST 兜住冗余的 object —— 连带把 where/orderBy/fields 的检查一起关掉 #6231 得到精确 TS2353)。
  11. PM 的机制假设会错,必须公开纠正(九次,九次零返工)。派发令的「机制假设(须实测,鼓励证伪)」分区正为此存在。
  12. PM 亦会程序性失误:[docs] ADR-0005 的「Index migration」段落描述的是已不存在的机制:addSysMetadataOverlayIndex 已随 #6771 删除,段落还写着 project_id 与 partial 键 #6825 派发前未读完卡上评论;[P2/P3] 运行时授权门的 advisory findings 要进响应并被 Studio 渲染 + docs「the gate」补第四列(#4463 收尾) #4717 把 STOP 误指向 [PM seat] domain:spec-surface — 🟢 os-help #6298(应为 [PM seat] domain:spec — 🟢 os-zhuang #6017)。教训:派发前读完全部评论;跨席路由要核对方座位的红线
  13. ACCEPT 绑定 head sha:head 变动须重核门禁。
  14. ⭐⭐ 空窗代价:09:26Z→14:01Z 空 ~4.5 小时,期间维护者裁了 org 作用域的 flow overlay 只在「本进程内发布后」绑定触发器,重启后静默失绑——冷启动两条读路径都把 organization_id 非空的行滤掉了 #6190、HOLD 解除,他席按加急令正当接管。教训:(a) 长空窗后第一动作全面回源;(b) 遇他席正当接管立即公开 stand down 并留下免重推导的信息。结局:两边零浪费。
  15. 被踢出合并队列先读五项签名(无 triage 机器评论 + head 未变 + 全绿 + mergeable_state: clean + 整队清空且同批他卡已落地 ⇒ 批次连带,可重挂;fix(metadata-protocol): tier 3 refuses to unregister an object bound to an installed package (#7012) #7093 实证)。
  16. 「仅在门口拒绝」必须回答「是否留下未覆盖调用方」(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 并另立卡。
  17. 不给自己没测过的东西定级(metadata-fs: the FileSystemRepository chokidar watcher is inert in the production layout — its own ignored dotfile regex matches the .objectstack segment of the root path #7150)。
  18. 改完回头验证自己的措辞是否仍字面为真,结论干净也要报出这次检查(Plugin-registered metadata types can carry org-scoped rows that cold boot skips — neither refused nor reported #6992)。
  19. 纪律的目的达成后,剩下的形式不是保护:docs/adr/** 的「no agent queue entry」在维护者批准到位、门禁转绿后,卡住 PR 的已不是保护而是无人按钮 —— 此时挂 AM 并留痕说明偏离理由是正确的(docs(adr-0029): amend D3 — a tenant object overlay is its own contributor layer (#6853) #7087;维护者随后亲自把它加入队列)。
  20. SKILL 复盘:前任 [skill] pm-dispatch: 5 lessons from the domain:metadata seat's first term (8 cards MERGED / 0 rework / 4 dev-side falsifications) #6644;本任期复盘立卡安排在座位移交/收工信号时,候选见注记 2/5/9/10/13/14/15/16/17/19。

定时器:巡逻链 send_later(现役 trig_01UdVK1gux84j3J6xEF5sBXr @ 2026-08-10T06:15Z)。

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