Skip to content

ADR-0117 D1 声明面:ownership 枚举扩展 'business_unit'(须与列注入同 PR 或严格后置) #5678

Description

@os-zhuang

Blocked-by: #5677(引擎侧 wantOwner 翻正面清单 + 列注入)
Blocked-by: #5675(ADR-0117 scoped 接受)

ADR-0117 已按 Accepted (D1/D3 scoped) 落地名字面(#4611 / PR #5675),owning_business_unit_id 的规范名已登记。本单补上 D1 的作者可见声明面:ownership 枚举的第四档 'business_unit'

⛔ 顺序约束(本单存在的唯一理由)

本单不得先于 #5677 落地,也不建议与之分开。 packages/objectql/src/registry.tswantOwner 是排除式判定,在它翻成正面清单之前,新增的 'business_unit' 会被照常注入 owner_id —— 与 ADR-0117 D1 表格相反,属 ADR-0049 禁止的「声明而不执行」。PR #5675 正是因此刻意没有扩展枚举;#4611 上有实测证据。

最稳妥的落地方式是#5677 合并为同一个 PR;若确要分开,本单必须严格后置,且合并前需确认 #5677 已在 main 上。

工作面

  1. packages/spec/src/data/object.zod.ts:1152 —— z.enum(['user', 'org', 'none']) 扩展为四值,并同步其 error 文案与 describe()(两处都逐字列出了合法值)。
  2. 同文件 ownership 的 JSDoc 与 systemFields 段落 —— 补上新档位与 owning_business_unit_id 的注入规则。
  3. 改写 packages/spec/src/data/object.test.ts 中的 #4611 pin。该 pin 目前钉住「business_unit 被拒绝且错误信息列出三个合法值」,并在注释里写明:它失败正是本单到来的预期信号,应改写而非删除——改成断言新值被接受、且第五个非法值仍被拒绝并列出四个合法值。
  4. CLI 消费半径(易漏,PR fix(lint): 收敛 validate-expressions / validate-security-posture 的 spec 不声明键 ?? 别名读法 (#5017) #5046 同型教训):packages/cli/test/commands.test.ts:83 断言 os explain object 的类型串 token 集合恰好等于 {'user','org','none'}(explain: os explain object documents ownership as "own" | "extend" — real values are user | org | none #3244 的目录精度钉子)。枚举扩展必须同步该断言,否则 CI 在 packages/cli 红 —— 一个只扫 packages/spec 的改动看不见它。
  5. 生成物走生成器:ownership 是 authorable 键,packages/spec/authorable-surface.base.json:3590 有其条目,新增枚举值可能合法移动 authorable-surface / spec-changes。逐行解释每处生成物 diff 与本改动的对应关系(check:authorable-surface--check 模式下也会重写 authorable-surface.base.json —— 一次纯核验会改工作区,且任何无关 PR 都能因此静默推进删除门的锚点 #5358 纪律)。
  6. changeset:@objectstack/spec minor(新增枚举成员,作者可见)。

不在本单范围

D2 盖章策略与其默认值、D3 运行时校验、D4 守卫、D8 迁移与启用门、D6 契约变更 —— 均为 ADR-0117 的未决或后续项,其中 D2 默认值 / D5 / D8 粒度 / D4 权限位这四项尚未裁定,不得在本单顺手选定。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions