Skip to content

fix(spec): #3207 收尾 — 补上 enable.trash/mru 退役缺失的 ADR-0087 迁移面,墓碑改指 #3146 - #4734

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-3207-retire-enable-trash-mru
Aug 3, 2026
Merged

fix(spec): #3207 收尾 — 补上 enable.trash/mru 退役缺失的 ADR-0087 迁移面,墓碑改指 #3146#4734
os-zhuang merged 1 commit into
mainfrom
claude/issue-3207-retire-enable-trash-mru

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #3207

现场核实:退役主体已由 PR #3414 落地(2026-07-24 合入)

动手前按纪律重验现场,发现 issue 的 7 步主体工作已在 PR #3414(commit 88346ba58)合入 main:schema 移除 + .strict() 化、CAPABILITIES_RETIRED_KEY_GUIDANCE 墓碑、~45 处 setter 删除、liveness ledger 两行删除 + README 计数表、object.form.ts 两行删除 + 4 locale i18n 再生、docs/skills 清理、changeset(remove-enable-trash-mru,已被 rc 消费)。issue 未随之关闭,PM 派单时未察觉。

但对照 2026-08-02 裁决与 spec-property-retirement 清单,已落地实现存在两处实质缺口,本 PR 只做这两件事(不重复 #3414 的工作):

缺口一:未登记 ADR-0087 D2 conversion(存量数据被误伤)

ObjectCapabilities.strict(),而退役时没有登记任何 conversion。后果:

  1. 存量 16.x sys_metadata 行永久报警。带 enable.trash 的旧行经 applyConversionsToStoredItem 重放后键仍在,registry 的 spec 一致性诊断每次 rehydration 都记 metadata_spec_invalid —— 违反 [P2] The spec contract stops at authored source — stored metadata is rehydrated unparsed, unconverted, and ungated #3903 的不变式(该诊断的前提是「链已收编全部历史形状,报警即真实的现行契约违规」);
  2. os migrate meta --from 16 无法改写作者源码,与墓碑处方的 house style(第 5 条:仅当 conversion 改写源码时才引用该命令)无法闭环。

本 PR 新增 object-enable-trash-mru-removed(protocol 17,retiredFromLoadPath: true,stripKeys 嵌套下钻,照 datasource-inert-blocks-removed 先例),接入 CONVERSIONS_BY_MAJOR[17]MIGRATIONS_BY_MAJOR[17].conversionIds + rationale;fixture 证明剥离是外科式的(同块存活键 searchable 原样保留),expectedNotices: 2(按键计数)。

缺口二:墓碑指向已关闭的 #1893(违背 2026-08-02 裁决)

裁决原文:「UNKNOWN_KEY_GUIDANCE 墓碑指向 #3146 作为立项位」。而 #3414 落地的墓碑指向 #1893 —— 该 issue 已于 2026-07-24 关闭,作者撞上墓碑后顺着指针只能找到一个已完结的审计杂务单,而非软删除的立项位。本 PR 修正:

证据

1. 三处零 reader 重验(不引立单结论,2026-08-03 实跑)

$ grep -rn --include="*.ts" -E "enable\??\.(trash|mru)\b" packages/ examples/  (排除 node_modules/test)
→ 仅 5 处命中,全部在 spec 自身的墓碑文案/注释里;core/runtime/objectql/rest/metadata*/plugins/services 零命中

$ grep -rn --include="*.object.ts" -E "^\s*(trash|mru)\s*:" packages/ examples/
→ 0 命中(~83 处 setter 已由 #3414 全部删除,现重验为零残留)

宽松 \b(trash|mru)\b 的其余命中逐一核过:全是 icon 名(icon: 'trash-2')、注释、与本键无关的保留权限位 allowRestore。objectui/cloud 兄弟仓本容器无检出;键已删除 10 天且 main 全绿,若有消费者早已显形。

2. 墓碑 sabotage(dist 实跑)

作者写 enable: { trash: false, mru: true } → 解析拒绝,全文:

Unrecognized key(s) on `enable`: `trash`, `mru`.
  • `enable.trash` was removed from @objectstack/spec in the 16.x line (#2377/#3207, ADR-0049) — … Delete the key. For recoverability use per-field `trackHistory` (audit trail) or a `lifecycle` policy; soft delete is parked at #3146 and, if built, returns as a live enforced flag (ADR-0049 prune-or-build). Run `os migrate meta --from 16` to rewrite it automatically.
  • `enable.mru` was removed from @objectstack/spec in the 16.x line (#2377/#3207, ADR-0049) — … Delete the key. If MRU tracking is built it returns as a live enforced flag (ADR-0049 prune-or-build). Run `os migrate meta --from 16` to rewrite it automatically.

存活键防「拒绝一切」:{ searchable: true, trackHistory: true, apiEnabled: true, activities: false } → 正常通过。

链路行为(dist 实跑):

  • 存量行:applyConversionsToStoredItem('object', {…enable: {trash:false, mru:false, searchable:true}})enable: {"searchable":true},notices = object-enable-trash-mru-removed @ objects[0].enable.trash / .mru(2 条);
  • 默认加载路径:retired 条目不自动剥离(0 notices,键原样留给墓碑当场拒绝)—— 拒绝教作者、链路收历史,各归其位。

3. Retirement 路径门禁(全部实跑捕获退出码,无 tail 掩码)

check:liveness               PASS   (strict 路线:ledger 行已删,无 UNCLASSIFIED/ORPHAN)
check:empty-state            PASS
check:authorable-surface     PASS
check:docs                   PASS
check:api-surface            PASS
check:spec-changes           PASS   (再生后;新增 conversion 条目见 diff)
check:upgrade-guide          PASS   (再生后;v17 表新增一行 + rationale 段落)
check:skill-refs / skill-docs / skill-examples  PASS
check:strictness-ledger      PASS

#4650 门禁说明(PM 现势修正一的核实结论):authorable-surface.json 对嵌套 enable 块只记 一行不透明的 data/Object:enable,不逐键展开 —— 两键从未有过基线行,本次 diff 里 authorable-surface.json 零变更,#4650 检查 (c) 不涉及、[RETIRED] 转换不适用(该机制属 retiredKey() 墓碑路线;本键走的是 .strict() + guidance map 路线,skill §2 判则下 ledger 行删除与基线行不存在均为正确形状)。check:authorable-surface 实跑 PASS 为准。

4. 测试与类型

@objectstack/spec        build ✓  test 7400/7400 ✓  typecheck ✓
@objectstack/cli         test 581/581 ✓(含 migrate-meta e2e:全链重放 + 幂等断言)
@objectstack/metadata-protocol  test 231/231 ✓(stored-conversions/stored-migration 套件)
metadata / objectql / cli  typecheck ✓

新增 pin:处方必须含 #3146os migrate meta --from 16、必须不再含 #1893;stored 行重放恰剥两键。未做全仓 typecheck:本 PR 未删任何 setter(#3414 已删完,上文 grep 证零残留),spec 导出面零变化(check:api-surface PASS),全仓扫描无增量信息,按资源纪律 scoped。

5. i18n 逐行证明

本 PR 不触 object.form.ts(#3414 已删两行并再生 4 locale)。pnpm check:i18n 实跑:9 包全部 in sync,diff 为空 —— 「只含目标键」在此退化为「零 diff」,严格满足。

6. Changeset 定级(issue 旧第 7 步的纠正)

issue 第 7 步的「minor(launch-window 政策,check-changeset-no-major)」已过时:现处 v17 pre/rc 窗口(.changeset/pre.json mode: "pre" 实测),check-changeset-no-major.mjs 在 pre-mode 自动让行(脚本内注明 RC EXEMPTION,无需 allow-major 标签)。据此:

7. 裁决引用

裁决(2026-08-02):remove —— 删除 enable.trash / enable.mru;#3146 维持 parked,现阶段不实现软删除。…实施走 spec-property-retirement 流程,UNKNOWN_KEY_GUIDANCE 墓碑指向 #3146 作为立项位。v17 major 窗口内落地。
维护者确认(2026-08-02 19:53Z):「这个功能暂时不是重点,可以移除」

#3146 本 PR 未触碰(维持 parked,仅在墓碑/注释中引用)。content/docs/releases/ 未触碰。


🤖 Generated with Claude Code

https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9


Generated by Claude Code

…h/mru removal + repoint tombstones at #3146 (#3207)

The 16.x removal of the dead object capability flags (PR #3414) tombstoned
enable.trash / enable.mru in the .strict() capabilities block but registered
no ADR-0087 D2 conversion, and its prescriptions pointed at #1893 — closed
2026-07-24. Per the #3207 ruling (2026-08-02): soft delete is parked at
#3146, and the retirement follows the full spec-property-retirement kit.

- New conversion `object-enable-trash-mru-removed` (protocol 17,
  retiredFromLoadPath): stored 16.x rows replay clean through
  applyConversionsToStoredItem instead of flagging metadata_spec_invalid on
  every rehydration (#3903 invariant — chain-owned history is not a
  current-contract violation), and `os migrate meta --from 16` rewrites
  authored sources. Wired into MIGRATIONS_BY_MAJOR[17] with rationale;
  fixture proves the strip is surgical (surviving `searchable` untouched).
- Tombstones now name #3146 (trash) and the `os migrate meta --from 16`
  rewrite (both); the restore legacy-apiMethod guidance and the
  api-derivation note drop the dead #1893 pointer.
- remove-enable-trash-mru changeset flipped minor -> major: v17 is the
  breaking window and the guard stands aside in pre-mode; a breaking
  removal listed under "Minor Changes" in the compiled CHANGELOG would
  mislead upgrading agents.
- Pin tests: prescription must name #3146 + the migrate command and must
  not resurrect #1893; stored-row replay strips exactly the two keys.

Gates: spec build green; check:generated all 8 green after
gen:spec-changes/gen:upgrade-guide; liveness/empty-state/strictness-ledger/
skill gates green; spec 7400, cli 581, metadata-protocol 231 tests pass;
check:i18n 9/9 in sync (zero drift).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9
@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 3, 2026 1:06am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:data tests tooling size/m labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 01:08
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 01:09
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 155507e Aug 3, 2026
22 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-3207-retire-enable-trash-mru branch August 3, 2026 01:29
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…零运行时读者 (#4579)

按 2026-08-02 委托裁决(remove)整块删除 OpenApi31ExtensionsSchema /
CallbackSchema / OpenApiWebhookEventSchema + RestServerConfig.openApi31 键:
normalizeConfig 只读 api/crud/metadata/batch/routes,/openapi.json 由预生成
契约 enrich 而来,gen:openapi 零 webhook/callback 引用 —— 作者写进
openApi31.webhooks 的定义从未出现在任何服务出的文档里(ADR-0049 假合规)。
三仓(objectstack / cloud@5df2c699b / objectui@785b8a5d4)import 级零消费者。

- rest-server.zod.ts:三 schema 删除留指路注释;openApi31 走 retiredKey()
  墓碑(非 strict schema,裸删会静默剥离 —— requireAuth #3963 同款)
- conversion 评估(#4734 先例):RestServerConfig 是插件 TS 配置面,
  stack 树的 api 块只声明四个 scoping/auth 键,sys_metadata 不可能携带
  openApi31,无源可改写 ⇒ 不登记 D2 conversion,登记 D3 semantic
  migration rest-server-openapi31-block-removed(validateOnly 先例)
- authorable-surface:14 行随三个整 def 出账(#4650 门禁判定 def no
  longer emitted,输出见 PR);api/RestServerConfig:openApi31 → [RETIRED]
- json-schema.manifest.json:三 def 删行(#2978 蓄意移除通道)
- api-surface.json:./api 六行删除(3 const + 3 type)
- 回归 pin(rest-server.test.ts):compiler-API 断言全入口不再命名六个
  导出名(防空转守卫)+ 运行时命名空间一致性;墓碑 sabotage(authored
  openApi31 → 拒绝且文案指向本单;正常键仍过);S1 sabotage 实测两 pin 红
- changeset:@objectstack/spec major(删已发布导出名 + 键,TS2305);
  同 major 内吸收 #4572 的 WebhookEvent→OpenApiWebhookEvent 改名
  (webhook-dual-source-api-side.md 的 TO 指引同步更正)
- 严格性台账:check:strictness-ledger 实跑 PASS,api/ 行属 coarse 汇总
  层(非门禁校验面),不动

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…re 形,./cloud re-export (#4740)

`EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个
声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata =
ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse
(packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓
3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋
metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓
(objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer
产出过。两侧互相解析不过。按维护者裁决(#4740,路线 A′)收敛:

- system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明);
  Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出)
- cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口)
- 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone
  退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087
  conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker
  的 stack 树上,存量行不可能携带(#4734 先例逐条评估,论证见 PR)
- v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个
  system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json
  #2978 蓄意删键;authorable-surface 46 行经 #4650 门禁 7 组「def no
  longer emitted」自证删除)
- 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫):
  三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1
  (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红
- #4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse
  pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示
- packages/metadata runtime parse 一字未动(收敛目标即其已解析形状),
  14 文件 290 测试全绿
- north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形)
- 基线 6 → 3(dual-source-exports.baseline.json 删 3 行)
- changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化

Fixes #4740

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…re 形,./cloud re-export (#4740)

`EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个
声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata =
ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse
(packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓
3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋
metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓
(objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer
产出过。两侧互相解析不过。按维护者裁决(#4740,路线 A′)收敛:

- system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明);
  Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出)
- cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口)
- 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone
  退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087
  conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker
  的 stack 树上,存量行不可能携带(#4734 先例逐条评估,论证见 PR)
- v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个
  system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json
  #2978 蓄意删键;authorable-surface 46 行经 #4650 门禁 7 组「def no
  longer emitted」自证删除)
- 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫):
  三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1
  (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红
- #4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse
  pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示
- packages/metadata runtime parse 一字未动(收敛目标即其已解析形状),
  14 文件 290 测试全绿
- north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形)
- 基线 6 → 3(dual-source-exports.baseline.json 删 3 行)
- changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化

Fixes #4740

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…零运行时读者 (objectstack-ai#4579) (objectstack-ai#4764)

按 2026-08-02 委托裁决(remove)整块删除 OpenApi31ExtensionsSchema /
CallbackSchema / OpenApiWebhookEventSchema + RestServerConfig.openApi31 键:
normalizeConfig 只读 api/crud/metadata/batch/routes,/openapi.json 由预生成
契约 enrich 而来,gen:openapi 零 webhook/callback 引用 —— 作者写进
openApi31.webhooks 的定义从未出现在任何服务出的文档里(ADR-0049 假合规)。
三仓(objectstack / cloud@5df2c699b / objectui@785b8a5d4)import 级零消费者。

- rest-server.zod.ts:三 schema 删除留指路注释;openApi31 走 retiredKey()
  墓碑(非 strict schema,裸删会静默剥离 —— requireAuth objectstack-ai#3963 同款)
- conversion 评估(objectstack-ai#4734 先例):RestServerConfig 是插件 TS 配置面,
  stack 树的 api 块只声明四个 scoping/auth 键,sys_metadata 不可能携带
  openApi31,无源可改写 ⇒ 不登记 D2 conversion,登记 D3 semantic
  migration rest-server-openapi31-block-removed(validateOnly 先例)
- authorable-surface:14 行随三个整 def 出账(objectstack-ai#4650 门禁判定 def no
  longer emitted,输出见 PR);api/RestServerConfig:openApi31 → [RETIRED]
- json-schema.manifest.json:三 def 删行(objectstack-ai#2978 蓄意移除通道)
- api-surface.json:./api 六行删除(3 const + 3 type)
- 回归 pin(rest-server.test.ts):compiler-API 断言全入口不再命名六个
  导出名(防空转守卫)+ 运行时命名空间一致性;墓碑 sabotage(authored
  openApi31 → 拒绝且文案指向本单;正常键仍过);S1 sabotage 实测两 pin 红
- changeset:@objectstack/spec major(删已发布导出名 + 键,TS2305);
  同 major 内吸收 objectstack-ai#4572 的 WebhookEvent→OpenApiWebhookEvent 改名
  (webhook-dual-source-api-side.md 的 TO 指引同步更正)
- 严格性台账:check:strictness-ledger 实跑 PASS,api/ 行属 coarse 汇总
  层(非门禁校验面),不动


Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…re 形,./cloud re-export (objectstack-ai#4740) (objectstack-ai#4767)

* feat(spec)!: EnvironmentArtifact 信封收敛为单一声明 —— C10 双源清账,./system 持活 wire 形,./cloud re-export (objectstack-ai#4740)

`EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个
声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata =
ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse
(packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓
3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋
metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓
(objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer
产出过。两侧互相解析不过。按维护者裁决(objectstack-ai#4740,路线 A′)收敛:

- system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明);
  Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出)
- cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口)
- 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone
  退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087
  conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker
  的 stack 树上,存量行不可能携带(objectstack-ai#4734 先例逐条评估,论证见 PR)
- v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个
  system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json
  objectstack-ai#2978 蓄意删键;authorable-surface 46 行经 objectstack-ai#4650 门禁 7 组「def no
  longer emitted」自证删除)
- 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫):
  三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1
  (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红
- objectstack-ai#4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse
  pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示
- packages/metadata runtime parse 一字未动(收敛目标即其已解析形状),
  14 文件 290 测试全绿
- north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形)
- 基线 6 → 3(dual-source-exports.baseline.json 删 3 行)
- changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化

Fixes objectstack-ai#4740

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

* fix(docs): 头注措辞避开行首 `import` —— 生成器按行成段,MDX 把该行当 ESM 解析(Build Docs 红)

build-docs.ts 把 docblock 按行拆成独立段落,`system/environment-artifact.zod.ts`
头注中断行后有一行以 `import ` 开头,MDX/acorn 将其解析为 ESM import 语句,
`content/docs/references/system/environment-artifact.mdx` SyntaxError。改写措辞
(「so the chosen entry point can never change the shape a consumer gets」),
重生成后两个 environment-artifact.mdx 均无行首 `import `/`export `(代码围栏内
的 TypeScript Usage 示例不受影响),`pnpm --filter @objectstack/docs build`
exit 0,`check:docs` 248 文件同步。

生成器坑本体(docblock 行成段 + 行首 import 炸 MDX,objectstack-ai#4696 家族)记入 PR 顺带
发现,不在本 PR 修生成器。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

* chore(spec): rebase 到含 objectstack-ai#4764 的 main 后全量重生成 —— 蓄意删键重放 + 生成物从新基重算(objectstack-ai#4535 §7)

os-regen merge driver 对 json-schema.manifest.json / authorable-surface.json /
api-surface.json 不做文本合并,rebase 回退了蓄意手删;本 commit 重放:manifest
删 system/EnvironmentArtifact* 9 键 + system/Sha256Digest 在列,authorable-surface
删 46 行(objectstack-ai#4650 门禁以新 merge-base 695cfbd 重新自证,7 组「def no longer
emitted」),api-surface / spec-changes / upgrade-guide / docs 全量重生成。
复验:check:generated 8/8、check:dual-source-exports(基线 6 → 3)、
strictness-ledger / variant-docs / liveness / empty-state 全绿;spec 测试
292 文件 / 7348 全过;全仓 typecheck 122/122;docs 产物无行首 import/export
(Build Docs 措辞修复在 rebase 后仍生效)。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:data size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove dead object enable.trash / enable.mru capability flags (ADR-0049 enforce-or-remove)

2 participants