Skip to content

refactor(spec)!: 退役 activationEvents(两处键)与 ActivationEventSchema 词表 —— 四仓零 runtime reader 的惰性激活声明 (#4657) - #4831

Merged
os-zhuang merged 4 commits into
mainfrom
claude/issue-4657-activation-events-retirement
Aug 3, 2026
Merged

refactor(spec)!: 退役 activationEvents(两处键)与 ActivationEventSchema 词表 —— 四仓零 runtime reader 的惰性激活声明 (#4657)#4831
os-zhuang merged 4 commits into
mainfrom
claude/issue-4657-activation-events-retirement

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4657

裁决与事实

ADR-0049 enforce-or-remove,走 remove(v17 破坏窗口内,.changeset/pre.jsonmode: pre)。

activationEvents 在两个可创作面上承诺惰性激活("plugins remain dormant until an activation event fires"):

  • DynamicLoadRequest.activationEvents(@objectstack/spec/kernel)
  • StudioPluginManifest.activationEvents(@objectstack/spec/studio,defineStudioPlugin 入参)

四仓(objectstack / cloud / cloud-v1 / objectui)没有任何 runtime reader。 实施时按裸名重扫(不是 import 扫描 —— #4616 的教训):objectstack 全仓命中仅 spec 自身源码/测试、生成物、历史 CHANGELOG 与 packages/vscode-objectstack/package.json(VS Code 自己的字段,不碰);objectui 唯一命中是 packages/vscode-extension/package.json(同上);cloud 唯一命中是一条 changeset 散文。cloud-v1 ROADMAP 自记 ❌ 未实现(v0.4.0 计划)。所有插件从来都是安装即激活 —— 这个键在语义上撒谎,作者写 activationEvents: [{ type: 'onMetadataType', pattern: 'flow' }] 期待延迟加载,拿到的是立即激活加一次干净的 parse。

#4653 的同 major 合成:#4653 刚在同一个未发布 major 里把双源收敛到结构化形状;裁决落在 remove,该收敛词表在发布前退役。对 v16 作者合成后的迁移就是一句话:删掉这个键,无论你拿的是哪种形状。行为零变化(前后都是 eager)。#4653 未登记任何 conversion,无可吸收项;其 changeset 不动(已在 main)。

退役形态(按门禁实跑输出裁定,非照抄先例)

gen:schema#4650 门禁实报(merge 后基线 023c00b5590d):

ℹ️  3 baseline deletion(s) since 023c00b5590d carry their own proof (#4650):
     - studio/StudioPluginManifest:activationEvents — def not reachable from the 24 metadata-type roots
       (BUILTIN_METADATA_TYPE_SCHEMAS + EXTRA_METADATA_TYPE_SCHEMAS overlay; BFS over this
       build's in-memory Zod graph): an over-collected entry, never parsed against a
       metadata document. This waives ONLY the tombstone requirement of this file — it is
       not a license to change the schema (#4650).
     - kernel/ActivationEvent:* (2 line(s)) — def no longer emitted by this build; whole-schema
       removals are adjudicated by json-schema.manifest.json (#2978) and check:api-surface.
     - studio/ActivationEvent:* (2 line(s)) — def no longer emitted by this build; whole-schema
       removals are adjudicated by json-schema.manifest.json (#2978) and check:api-surface.

据此三处三种形态:

  1. kernel 键 → retiredKey() 墓碑(feat(spec)!: 退役 DriverCapabilities 31 个零读者能力位 —— 全表活性审计,3 活 31 死(#4634,ADR-0049) #4783 谱系)。DynamicLoadRequestSchema.strict(),裸删 = Zod 静默 strip(fix(showcase): register Mark Done action handler via inline body #2169 形状);墓碑让删除在 tsc(input 为 never)和 parse(处方本身)两个通道都可听见。authorable-surface.json 该行转为 [RETIRED],gate (b) 由 D3 semantic surface 满足。
  2. studio 键 → strict 删除 + guidance 处方StudioPluginManifestSchemastrictObject,删键后 strict parse 拒绝,guidance 携带处方。原三个 VS Code 味 alias(activation/events/onActivate)一并移入 guidance 同一处方 —— alias 决不能指向 schema 无法接受的键(triggerPhrases suggester 陷阱)。基线行删除由 authorable-surface 的 tombstone 门禁可被手编基线绕过 —— 删掉基线行就删掉了证据(#4638 / #4643 已两次这样过绿) #4650 路线 2 放行(def 不可达 metadata-type 根,见上方实报)。
  3. ActivationEventSchema / ActivationEvent def → 整体删除(authorable-surface 的 tombstone 门禁可被手编基线绕过 —— 删掉基线行就删掉了证据(#4638 / #4643 已两次这样过绿) #4650 路线 3,spec/system 通知模板语汇在 C3 后成为零消费方孤儿:EmailTemplate/SMSTemplate/PushNotification/InAppNotification(Schema) 待 enforce-or-remove 处置 #4616 谱系)。两个父键都退役后 def 是孤儿值 schema —— 有导出无消费者会被读成能力(refactor(spec)!: remove the plugin sandboxing / integrity / approval config that never existed (#3896 follow-up) #3950);kernel/ActivationEventstudio/ActivationEvent 两个 manifest 条目与 4 条 authorable 行有意删除,由 manifest ratchet(gen:schema silently drops PageTabsProps since #2967 — references regen would delete real docs #2978)与 check:api-surface 裁定(见上方实报第二、三条)。

ADR-0087 conversion 逐条评估

D2 不适用。 D2 重写的是 load path 上的 sys_metadata 存量行/stack 源:StudioPluginManifest 是 TS config(defineStudioPlugin 入参,root schema,从不入 stack 树 —— 对照 #4579 RestServerConfig.openApi31 的同款论证);DynamicLoadRequest 是 runtime 请求形状,且四仓零 caller。不存在任何可被 D2 改写的存量源,登记 D2 会是给不存在的输入写变换(fixture 也无从取真)。

D3 登记:plugin-activation-events-retired(migrations/registry.ts step17.semantic),surface kernel.dynamicLoadRequest.activationEvents / studio.studioPluginManifest.activationEvents(两个 clause 都以键名结尾,满足 gate (b) 的 endsWith 匹配),reason / acceptanceCriteria 非空,并扩写 step17 rationale。对照:#4734 需要 D2(有存量可改写)—— 本单没有;#4767 / #4783 / #4616 不需要 D2 —— 本单同类,且与 #4579(plugin TS config)、#4618(nothing ever parsed it,def 整删 + 基线有意删)两个先例逐点同构。

Pin 与 sabotage 实跑

新增 packages/spec/src/kernel/activation-events-retirement.test.ts:compiler API 符号身份路线 —— exports-map 枚举全部入口(> 10 防空转)、module symbol 必须 resolve(防空转守卫)、holdersOf(name) 精确相等 [](两个退役名在所有公共入口零 holder)、幸存邻居(DynamicLoadRequestSchema / StudioPluginManifestSchema)仍在(> 40 导出面防空转)、runtime namespace 一致性、live path 正反向 parse。另在 plugin-runtime.test.ts / plugin.test.ts 各有处方负向 pin(.toThrow(/activationEvents.*removed.*#4657/s))与 not.toHaveProperty 正向 pin(absence 不物化)。

三轮 sabotage 全部实跑、全部红、全部已还原:

  1. 复活声明(kernel 重新导出 ActivationEventSchema):
    AssertionError: ActivationEventSchema must have zero holders: expected [ './kernel' ] to deeply equal [] + runtime 断言同红(2 failed)。
  2. 别的入口顶名 re-export(./studioStudioPluginContributionsSchema 以退役名 re-export):
    AssertionError: ActivationEventSchema must have zero holders: expected [ './studio' ] to deeply equal [](2 failed)。
  3. 空转检验(枚举指向不存在文件):
    AssertionError: ./kernel module symbol must resolve: expected undefined to be truthy —— 守卫先红,断言不会空转通过。

连带面

  • studio/plugin.zod.ts alias hints 与 dependencies 提示语改写(不再指向已删键);studio/index.ts re-export 删除;两处 zod 文件均留 REMOVED 注释指明活机制(eager)。
  • content/docs/plugins/development.mdx:os:check 示例删键,"Activation Events" 小节(仍在教 pre-v17 字符串词表)改为 eager 事实陈述 + 处方;check:skill-examples 对 built dist 编译通过。
  • packages/spec/PLUGIN_STANDARDS.md 两处更新;references 文档由 gen:docs 重生(studio/plugin-runtime.mdx 整页随 def 消失)。
  • changeset .changeset/retire-activation-events.md(@objectstack/spec: major),按 ✅ spec 双源清账主单:基线 52 → 0(2026-08-03 收官)—— #4446 gate 落地后的偿还 worklist #4535 §5 三问自证:TS2305 有(两入口两导出);元数据迁移无(无存量可改写,D3 记录);形状变更两键删除、行为零变化。FROM → TO 明写"删掉该键;所有插件本来就是安装即激活"。
  • **content/docs/releases/ 未触碰。**不碰三个 VS Code 扩展的 package.json

Main 同步

实施期间 main 前进两次,均 git merge origin/main(未 rebase / 未 force-push):

验证读数(全部在合并源上实跑)

验证 读数
spec build exit 0
gen:schema exit 0,#4650 实报见上(3 组删除各携证明)
check:generated ✓ All 8 generated artifacts are up to date
check:authorable-surface / check:api-surface / check:docs / check:spec-changes / check:upgrade-guide / check:skill-refs / check:skill-docs PASS(全量循环逐项捕获 exit code)
check:dual-source-exports 0 accepted dual-source(4276 names / 16 entry points / 171 re-exported)
源码审计组(check:liveness / check:empty-state / check:skill-examples / check:exported-any / check:react-declaration-parity) PASS
根级(check:doc-authoring / check:adr-anchors / check:i18n / check:nul-bytes) PASS
spec test 295 files / 7358 tests passed(merge 前 7376,差值为 #4616 并入的测试增减与本单删除的 18 个 activation 用例)
spec typecheck exit 0
全仓 typecheck Tasks: 122 successful, 122 total

liveness ledger 无涉(两父 schema 均非 metadata-type,ledger 无对应行,check:liveness PASS 佐证);forms / i18n bundle 无涉(无 *.form.ts 输入引用该键,check:i18n PASS);CLI advisory lint ledger 驱动,无行即无 warn。

范围外发现

packages/spec/PLUGIN_STANDARDS.md §5.3 仍在罗列 #3896 follow-up 已删除的 PluginDiscoveryConfigSchema / DynamicLoadingConfigSchema(本 PR 只改了自己范围内的 ActivationEventSchema 行),连同 DynamicLoadRequest 家族"零 runtime consumer、是否整族 enforce-or-remove"的悬置问题,已另行立案(见 issue 评论区链接)。

🤖 Generated with Claude Code

https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9


Generated by Claude Code

claude added 4 commits August 3, 2026 08:47
…onEventSchema vocabulary (#4657, ADR-0049)

Lazy plugin activation was declared on two authorable surfaces and
implemented by no runtime in any repo — every plugin activates
immediately on load/registration. Enforce-or-remove, ruled remove:

- kernel DynamicLoadRequest.activationEvents → retiredKey() tombstone
  (non-strict schema; a plain delete would strip silently)
- studio StudioPluginManifest.activationEvents → strict-parse guidance
  prescription (with the former activation/events/onActivate aliases)
- ActivationEventSchema / ActivationEvent def deleted from ./kernel and
  ./studio (orphaned value schema, #3950); manifest + authorable-surface
  baseline lines dropped deliberately (#4650 route: defs no longer
  emitted / def not root-reachable — gate-adjudicated)
- ADR-0087 D3 semantic migration plugin-activation-events-retired
  (no sys_metadata source exists for a D2 rewrite)
- compiler-API export pin with anti-vacuity guards; docs + changeset

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9
Ratchet files reset to origin/main and regenerated (never textually
merged); the delta vs main is exactly this PR's intent — 2 manifest def
removals, 6 authorable lines dropped / 1 [RETIRED], 4 api-surface export
removals — and #4616's system/*Template*/*Notification* deletions remain
absent.

Co-Authored-By: Claude Opus 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 9:32am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/l 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.

106 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 @objectstack/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/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.

Copy link
Copy Markdown
Contributor Author

CI:Test Core (1/2) 失败 —— 诊断为 DTS 构建 OOM,非本 PR 内容问题,待 run 结束后重跑

job 91647932822 日志读数:

零错误输出的进程终止是 SIGKILL 的签名,而 DTS(声明生成)是本包内存峰值所在。判为 runner OOM,与本 PR 的改动性质(纯删除:−2 manifest def、−6/+1 authorable、−4 api-surface)无关 —— 删除不会增加 DTS 负载。

本地实施侧读数佐证:同一合并基上 spec build exit 0、check:generated 8/8、spec test 295 files / 7358 tests、全仓 typecheck 122/122

处置:run 结束后重跑失败 job(当下重跑被 GitHub 拒:403 This workflow is already running)。已排定自检跟进,不需要人工介入。若重跑后同一位置复现,再按真实缺陷处理(含是否需要给 spec 的 DTS 步骤加 NODE_OPTIONS=--max-old-space-size)并回报。


Generated by Claude Code

@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 3, 2026
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 7445149 Aug 3, 2026
32 of 34 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4657-activation-events-retirement branch August 3, 2026 10:18
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
`packages/spec/spec-changes.json` 与 `docs/protocol-upgrade-guide.md` 在
`.gitattributes` 里走 `merge=os-regen`。合并 origin/main(含 #4831 退役
activationEvents)后实测:两文件**零冲突标记**地只保留了本分支一侧 ——
`plugin-activation-events-retired` 被静默吞掉(`grep -c` = 0),正是 #4616
预警的失效形态。

按规矩不做文本合并:`git checkout origin/main --` 取回两文件后,从合并后的
**源**(`conversions/registry.ts` 的 summary + `migrations/registry.ts` 的
step17.semantic)整体重新生成,得到正确并集。

重生成后核对:两条条目并存;#4616 的四个删除(system/EmailTemplate、
SMSTemplate、PushNotification、InAppNotification)未复活,幸存的
EmailTemplateDefinition 仍在;#4657/#4831 的 kernel/studio ActivationEvent
def 与 ActivationEventSchema 导出未复活,authorable-surface 里 activationEvents
仅剩 #4831 自己的 `[RETIRED]` 墓碑行。五张 ratchet 重生成后与 main 逐字节一致,
本分支一张未动。

Co-Authored-By: Claude Opus 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
os-regen 合并驱动对 spec-changes.json / protocol-upgrade-guide.md 不做文本合并,
本次合并零冲突标记地只保留了本分支一侧,静默吞掉 #4657 的条目(实测:
origin/main 的 spec-changes.json 含 4 条 activationEvents 条目,合并后为 0)。

按协议 git checkout origin/main -- <生成物> 后从合并后的源整体重新生成:
- spec-changes.json:现同时含 #4657 的 activationEvents 4 条与本单
  batch-row-result-schema-shape 2 条
- protocol-upgrade-guide.md:同时含 plugin-activation-events-retired 与
  batch-row-result-schema-shape
- 四张 ratchet(api-surface / api-surface-signatures / authorable-surface /
  json-schema.manifest)与 origin/main 逐字节相同 —— 本单不增删任何导出

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9
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 size/l tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ADR-0049:两份 activationEvents 声明四仓零 reader —— declared-but-unenforced,且 studio 侧 z.string() 零校验

2 participants