Skip to content

ADR-0076 的状态行仍是 Proposed,但它已被 AGENTS.md、runtime 代码注释与多个在飞 issue 当作生效决定引用 #5063

Closed

Description

@os-zhuang

观察类发现(observation-class),在起草 ADR-0121(#5060)核查 ADR-0076 时顺带发现,未认领,不带 pm:queue —— 今天没有任何用户或作者会撞上它,但它是 ADR-0078 状态行校准(#4787 → #4919)同一形状的问题,按 Prime Directive #10「不要把发现埋掉」记录备查,严重度交 PM 分诊定。

基线:origin/main @ 94f7b6a。

事实

docs/adr/0076-objectql-core-tiering.md 第 3 行:

**Status**: Proposed (2026-06-28, rev. 9) — D1–D12 below. ...
Verified 2026-07-16: D1 (metadata-protocol extraction + back-compat re-export),
D2 (core-boundary ratchet test), D9-step1 (segmented protocol interfaces) confirmed in code;
... D12 framework side landed in #3028 ...

状态行自己就记着 D1 / D2 / D9-step1 / D12 已在代码中确认落地,而抬头仍是 Proposed。

同一份 ADR 在仓内被当作生效决定引用(非穷举):

引用处 用法
AGENTS.md(dev-stack 一节) 「mount everything advertised (ADR-0076 D12)」—— 作为纪律陈述
packages/runtime/src/domains/actions.ts 文件头 「/actions domain — extracted dispatcher body (ADR-0076 D11 step ③, PR-9)」—— 该文件的存在理由
packages/runtime/src/domains/*.ts 一族 D11 的 domain registry 分解即其产物
#4936 正文 「正是 ADR-0076「一条路由一个属主」小节点名的那类输入」
#4939 正文 「这本身就是 ADR-0076「一条路由一个属主」要防的形状」
#5040 设计文档 §1 保留前缀方案的论证前提
ADR-0121(本次起草,#5060) 明确声明「扩充 ADR-0076,不取代」

为什么值得记一笔

Prime Directive #13 的原文是「An accepted ADR binds until a superseding ADR says otherwise」,而 AGENTS.md 把「改动 docs/adr/ 治理的领域前先 grep ADR」写成每个 agent 的必做动作。这两条合起来,状态行就是读者判断「这条决定是否约束我」的唯一开关。一份实际上在约束 runtime 目录结构、被 AGENTS.md 引用、且正在被新 ADR 扩充的记录,抬头写着 Proposed,等于邀请下一个 agent 判定它可以绕过。

这正是 #4787 对 ADR-0078 描述过的机制 ——「An ADR that says "not built" about a built gate is a live misinformation source: the next reader re-opens the project or routes around a gate that is already load-bearing」。方向相反(那次是 Proposed 说自己没建成,这次是 Proposed 说自己建成了一半),失效方式相同。

建议处置(不预判,交分诊)

按 #4919 的做法逐条校准而不是整体翻牌 —— 一份分阶段 ADR 被整体标成「已完成」比标成「没开始」更坏,因为它会让人停止检查。ADR-0076 的分布本来就参差:

所以合理的形态大约是 Accepted — D1/D2/D9-step1/D11/D12 implemented; D3 unbuilt; D7/D10 deliberately deferred,逐条标注,与 ADR-0078 校准后的house form 一致。

⚠️ 这是纯文档动作:不改任何代码、schema 或 content/docs/releases/。若要一并做,scripts/adr-anchors.json 可考虑为 D11 的 domain registry 落点补锚(PD #13 推论:让实现决定的文件指回决定),但那是可分开的第二步。

关联:#4787 / #4919(ADR-0078 同形状的先例与做法)、#5060 / ADR-0121(本次起草,扩充 0076)、#4936、#4939、#5040。

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    on Aug 4, 2026
  2. added
    target:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA
    on Aug 4, 2026
  3. self-assigned this
    on Aug 5, 2026
  4. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    认领:PM 循环第 2 轮(v17 C 组 docs 门面)
    会话:session_01FTszibd6C8sUCCZnM4VcrL
    分支:claude/issue-5063-adr-0076-status-line
    Worktree:objectstack-issue-5063
    域:domain:devx
    文件面:docs/adr/0076-objectql-core-tiering.md(状态行校准);scripts/adr-anchors.json(D11 锚点,issue 明说可分开 —— 由 dev 判断是否同 PR)。⛔ content/docs/releases/ 零改动、⛔ 不碰 packages/** 源码、⛔ 不碰 os-regen 生成物。

    同批 #5269 文件面为 content/docs/deployment/tenancy-modes.mdx,与本单互斥。


    Generated by Claude Code

  5. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    PM 复核(第 2 轮):ACCEPT → PR #5356

    会话 session_01FTszibd6C8sUCCZnM4VcrL。

    这一单交付的东西比 issue 要求的多:它不是把 Proposed 翻成 Accepted,而是逐条对码核证 D1–D12,结果发现 rev.9 的叙述两个方向都不准 —— 既有少报也有多报。这正是「逐条校准而非整体翻牌」该有的产出。

    四条承重 claim,PM 独立核验(不取报告自述)

    $ git grep -nE "^(export )?(type|interface) ObjectStackProtocol\b" origin/main -- 'packages/**/*.ts'
    (零命中)
    $ git grep -cE "^(export )?(type|interface) DataProtocol\b" origin/main -- 'packages/**/*.ts'
    1                          # 反查:邻近词命中,证明检索面是活的,零命中成立
    
    $ git show origin/main:packages/rest/src/rest-server.ts | wc -l
    7693                       # ADR 记 ~5.1k —— 确实更大,不是更小
    
    $ git show origin/main:packages/metadata-protocol/src/protocol.ts | grep -n "class ObjectStackProtocolImplementation"
    1800:export class ObjectStackProtocolImplementation implements
    
    $ git show origin/main:packages/core/src/kernel.ts | sed -n '299,303p'
            if (missingCoreServices.length > 0) {
                this.logger.warn(`System started with degraded capabilities. …`);
            }                  # D3 确实不是 fail-closed,只 warn
    

    四条全部属实。零命中做了反向对照,这是我在派发词里点名要求的,做到了。

    值得记下的两个方向

    • 少报:D9 不只落了 step-1,而是走到了 rev.7 终态 —— ObjectStackProtocol 组合别名被解散了,不是被弃用,全仓零声明;D7 虽按设计推迟,却已被 check-engine-split-ratio.mjs + engine-split-metric.yml 仪表化(刻意 report-only,因为阈值本身仍是开放问题);D11 的域体已搬进 runtime/src/domains/*,dispatcher 从约 3.8k 降到 1721 行。
    • 多报:D10 与 D11 各只落一半 —— 中心 facade 类仍在(OQ#6 未决),而 D11 点名的第二个中心路由生成器 rest-server.ts 反而长到 7693 行;D1 的 OQ#2 从未执行(SysMetadataEngine 仍在 metadata-protocol,没搬进 metadata-core)。

    新抬头 Accepted — D1/D2/D4/D5/D6/D8/D9 implemented; D10/D11/D12 partially landed; D3 unbuilt; D7 deliberately deferred 与实测一致。顺带修正 D9 back-compat 那条(它声称保留一个已不存在的别名),否则新抬头会与正文自相矛盾 —— 这个连带判断是对的。

    其它

    • 门禁行为问题已回答(我派发时点名要求):改 Accepted 不会让任何门以不同方式对待本 ADR —— check-adr-anchors.mjs 对 Status/Accepted/Proposed 三词零命中(纯在场检查),ADR-0076 在 adr-anchors.json 里根本没条目,全仓无其它脚本解析状态行。
    • 诚实边界:纯文档改动,dev 明说「没有可跑的包级 test/typecheck,与其编造证据不如如实说明」—— 对。跑的是真正相关的六个 docs/ADR 门禁,输出都贴了。
    • changeset 用空 frontmatter,先例 .changeset/adr-0044-revise-service-owned-note.md,同类 ADR 文档单。
    • 拆出 ADR-0076 D11 的落点没有 adr-anchors 锚点:dispatcher 拆解后的 runtime/src/domains/* 与 domain-handler-registry.ts 未被在场门守住 #5357(为 D11 落点补 anchor)已入 finding 待分诊;拆单理由成立:该门自己的文档要求「每条锚点必须挣得它的失败模式」,在 14 个 domain 模块里挑哪几个值得锚是独立判断。

    两条 ADR 内部开放项,留给维护者(不催,PM 不代拍)

    dev 如实记录、未自行立单,我同意不立:D1 的 OQ#2(SysMetadataEngine 迁移)与 D10 的 OQ#6(中心 facade 的 DataProtocol 实现搬到传输层)现在已被状态行如实陈述。它们是 ADR 自己的开放问题,不是缺陷;是否要为其立实施单,属于路线决定,维护者可在读到新状态行后决定。

    CI 全绿后转 ready 入队。


    Generated by Claude Code

  6. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    已落地 —— PR #5356 经合并队列合入 main(0c1660306)

    会话 session_01FTszibd6C8sUCCZnM4VcrL。落地判据复核,origin/main 上的状态行:

    **Status**: Accepted — D1/D2/D4/D5/D6/D8/D9 implemented; D10/D11/D12 partially landed;
    D3 unbuilt; D7 deliberately deferred (proposed 2026-06-28, rev. 9 · …)
    

    与逐条核证结果一致。Prime Directive #13 的形状补上了:一个已被 AGENTS.md、packages/runtime/src/domains/* 文件头、ADR-0121 当作生效决定引用的 ADR,抬头不再写着 Proposed。

    拆出的 #5357(为 D11 落点补 adr-anchors.json 锚点)仍在 finding 待分诊,本会话按暂停指示不派,留给下一任。


    Generated by Claude Code

  7. added a commit that references this issue on Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationdomain:devxDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch looptarget:v17Release blocker for v17 — on the board until fixed, dropped as no longer valid, or accepted for GA

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions