Skip to content

feat(spec)!: 移除 ./automation 的孤儿 EventSchema —— C6 双源清账,基线 13 → 12 (#4658) - #4745

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-4658-event-dual-source
Aug 3, 2026
Merged

feat(spec)!: 移除 ./automation 的孤儿 EventSchema —— C6 双源清账,基线 13 → 12 (#4658)#4745
os-zhuang merged 1 commit into
mainfrom
claude/issue-4658-event-dual-source

Conversation

@os-zhuang

@os-zhuang os-zhuang commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Fixes #4658

关联:#4535(主账本 C6)、#4650(删行自证门禁,本单走其「整 def 消失」路径)、#4642(pin 形态)、#4446 / #4506(gate 本体)。

按维护者裁决走路线 A:删除 ./automation 侧的孤儿 EventSchema。两侧键集完全不相交 —— automation 侧是 XState 式信号声明 { type, schema? },kernel 侧是事件总线信封 { id?, name, payload, metadata } —— 收敛等于在合同里写假话,故删孤儿而非收敛;kernel 侧一字未动,成为全包唯一声明。

1. 重验前提(未采信旧结论,全部实测)

三仓 import 语句级扫描(objectstack @ 本分支基线 / cloud @ 5df2c69 / objectui @ 785b8a5,后者恰为本次 rebase 携带的 console pin 版本):

  • packages/spec 之外裸名 EventSchema 零命中(cloud 连子串命中都是 0;objectui 仅 TimelineEventSchema / CalendarEventSchema 等复合名,及 packages/typesexport type * as Automation / as Kernel 命名空间隔离再导出)。
  • 本仓消费方:automation 侧零引用(定义行即全部);kernel 侧消费链完好 —— kernel/events/dlq.zod.ts:24,71 嵌入 + kernel/events.test.ts,export type Event 同文件。
  • StateMachineSchema 确不引用被删 schema:状态机事件类型是 on:记录键(纯字符串)。

真图可达性(以 #4650 门禁同款真 Zod 图 BFS,对合并基线版源码实测):

roots: 24 metadata types [action, agent, app, book, dashboard, dataset, datasource, doc,
  email_template, field, flow, hook, job, mapping, object, page, permission, position,
  report, seed, skill, tool, translation, view]
closure: 4689 schema instances reachable from the roots
  automation EventSchema (merge-base orphan): NOT reachable
  automation StateMachineSchema: REACHABLE
  kernel EventSchema (envelope): NOT reachable
  kernel EventTypeDefinitionSchema: NOT reachable

孤儿不可达、而 StateMachineSchema 本身可达 —— 删除是外科式的,不伤作者面。与裁决零冲突。

2. #4650 门禁对被删行的判定(实跑输出,rebase 后重跑)

ℹ️  1 baseline deletion(s) since 072806aa58a5 carry their own proof (#4650):
     - automation/Event:* (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.

即「整 def 消失」自证路径;两个裁决点本 PR 均满足:json-schema.manifest.jsonautomation/Event 键(#2978 蓄意移除通道,门禁错误信息指定的同 PR 手删),check:api-surface 全绿(api-surface.json 恰好只有 ./automation 一行删除)。authorable-surface.json 删的两行(automation/Event:type / :schema)与生成器规范形逐字节一致(check:authorable-surface ✓)。

3. 基线 13 → 12(实跑)

dual-source-exports.baseline.jsonEventSchema — [./automation (const)] ≠ [./kernel (const)] 一行,其余 12 行一字未动:

✅  self-test: flags same-name different-declaration exports, and nothing else.
✅  no new dual-source exports: 4328 names across 16 entry points — 168 re-exported
    (single declaration), 12 accepted dual-source (baseline).

4. 回归 pin + sabotage(C14 形态,#4642 纪律)

packages/spec/src/automation/state-machine.test.ts 新增 [#4658] describe 块:

  • compiler-API pin:入口从 package.json exports map 枚举(17 个,防新入口逃逸),断言 ./automation 不再命名 EventSchema(且表面非平凡,防真空通过)、./kernel 仍导出且声明落在 src/kernel/events/core.zod.ts全入口范围内任何叫 EventSchema 的导出都必须解析到该唯一声明;模块符号解析带防空转守卫。

  • 运行时命名空间断言:automation 命名空间无该属性、kernel 有;信封样例 parse 通过、XState 信号声明样例(type 为 APPROVE 的对象)被拒 —— 两概念从未收敛的运行时证据。

  • sabotage 实证(均已回滚):

    S1 重加 export const EventSchema → 2 条 pin 红:

    × resolves the export surface: no entry but ./kernel declares `EventSchema`
      AssertionError: expected [ 'flowForm', 'defineFlow', …(262) ] to not include 'EventSchema'
    × keeps the runtime namespaces consistent with the compiler view
      AssertionError: expected true to be false
    

    S2 走被否决的收敛路线(符号同一性此时是单声明,骗得过 dual-source gate 的视角):

    export { EventSchema } from '../kernel/events/core.zod';

    → pin 仍是同样 2 条红 —— 拦的是「名字离开 ./automation」这条裁决本身,不只是名字存在性。

  • 干净态:state-machine.test.ts 8/8 通过。

5. changeset 定级(逐条自证)

@objectstack/spec major:已发布导出名的移除,外部消费方将以 TS2305 编译失败(与 C14 同形):

// FROM —— TS2305
import { EventSchema } from '@objectstack/spec/automation';
// TO(要信封)
import { EventSchema } from '@objectstack/spec/kernel';
// TO(要事件定义)
import { EventTypeDefinitionSchema } from '@objectstack/spec/kernel';
// 要状态机信号声明:该表面从来不存在 —— 事件类型写在 on: 的记录键上,无需替代物

同时零元数据迁移:def 从元数据根不可达(§1 BFS 输出),没有任何元数据文档曾被它解析,无 tombstone、无 ADR-0087 conversion / migration(spec-changes.json / upgrade-guide 两 gate 零变化)。三仓零消费者 ⇒ 预期 TS2305 实际命中数为 0。全文见 .changeset/event-schema-dual-source-c6.md

6. 全量验证(实跑)

验证 结果
check:generated(8 门) ✓ 全部 up to date(rebase 后重跑)
check:dual-source-exports ✓ 12 条基线(13 → 12)
check:liveness ✓ all governed-type properties classified
check:strictness-ledger ✓(automation 段 87 → 86 sites、state-machine.zod.ts 行 7 → 6,按 gate 实跑指令更新并留 −1 注记 —— C3 教训)
check:empty-state ✓ all classified (1 closed, 2 open, 4 output, 9 scope)
check:variant-docs ✓ 19 unions — 8 governed, 11 exempt
check:exported-any ✓ 1893 types + 1637 schemas across 16 entry points
check:skill-examples ✓ 202 prose examples type-check
spec pnpm test 294 files / 7400 tests 全过
spec typecheck
全仓 pnpm typecheck 122/122 tasks successful

7. 并行协议合规(#4535 2026-08-03 新纪律)

改动清单(11 文件):state-machine.zod.ts(删孤儿 + 指路注释)、state-machine.test.ts(pin)、基线/manifest/api-surface/authorable-surface/docs-import-surface 各一行级收缩、references/automation/events-core.mdx 随生成器消失 + meta.json 同步、严格性台账、changeset。

🤖 Generated with Claude Code

https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

…./kernel` (#4658)

`EventSchema` 曾由 `./automation` 与 `./kernel` 各自导出一个声明,且两侧键集完全
不相交:automation 侧是 XState 式信号声明 `{ type, schema? }`,kernel 侧是事件总线
信封 `{ id?, name, payload, metadata }`。收敛等于在合同里写假话(把信号声明说成信
封),按维护者裁决(#4658,路线 A)删除 automation 侧孤儿:`StateMachineSchema` 从
不引用它(状态机事件类型是 `on:` 的记录键),objectstack / cloud / objectui 三仓
import 语句级零消费者,且以 #4650 门禁同款真 Zod 图 BFS 实测其从 24 个元数据根不可达
(同一次 BFS 中 `StateMachineSchema` 本身可达 —— 删除是外科式的)。

- state-machine.zod.ts:删除孤儿声明,留 #4658 指路注释
- dual-source-exports.baseline.json:删 `EventSchema` 行(13 → 12)
- authorable-surface.json:`automation/Event:type` / `:schema` 随整 def 出账
  (#4650 门禁判定:def no longer emitted,输出见 PR)
- json-schema.manifest.json:删 `automation/Event` 键(#2978 蓄意移除通道)
- api-surface.json:`./automation` 仅一行删除;docs-import-surface.baseline.json
  经生成器收缩一行;references/automation/events-core.mdx 随生成器消失
- 回归 pin(state-machine.test.ts):compiler-API 断言 `./automation` 无
  `EventSchema`、`./kernel` 为全包唯一声明(package.json exports 全入口枚举),
  防空转守卫;S1(重加导出)/ S2(禁止的 re-export 收敛路线)sabotage 均红
- 严格性台账:automation 87 → 86 sites,state-machine 行 7 → 6(实跑判定)
- changeset:@objectstack/spec major(移除已发布导出名,TS2305),零元数据迁移

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:26am

Request Review

@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.

@github-actions github-actions Bot added the size/m label Aug 3, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 01:28
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 01:28
@os-zhuang
os-zhuang marked this pull request as draft August 3, 2026 01:29
auto-merge was automatically disabled August 3, 2026 01:29

Pull request was converted to draft

@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 01:30
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 01:30
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 51c5227 Aug 3, 2026
24 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4658-event-dual-source branch August 3, 2026 01:49
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…6 双源清账,TenantPlan 唯一真源在 ./cloud (objectstack-ai#4739) (objectstack-ai#4752)

`TenantPlan(Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个声明:cloud 侧
5 值(free/starter/pro/enterprise/custom)嵌 `EnvironmentSchema.plan` /
`TenantContextSchema.plan` / `ProvisionTenantRequestSchema.plan`,cloud 仓
service-tenant 实际消费;system 侧 3 值子集只嵌 `TenantProvisioningRequest/
Result`,而该 provisioning 协议(连同 contracts 的 `IProvisioningService` /
`ITenantRouter`)objectstack / cloud / objectui 三仓 import 语句级实测零实现
零调用 —— declared-only,已被 cloud 的 `Provision*` 家族整体取代。按维护者
裁决(objectstack-ai#4739,路线 B)删 system 侧全家族,cloud 侧一字未动。

- 删 system/provisioning.zod.ts(+测试):TenantPlan / TenantRegion /
  TenantProvisioningStatus / ProvisioningStep / TenantProvisioningRequest /
  TenantProvisioningResult 六 def 全家
- 删 contracts/provisioning-service.ts、contracts/tenant-router.ts(+测试):
  两文件除三个 declared-only 接口外无他物,整文件退役;两 index 留 objectstack-ai#4739
  指路注释(objectstack-ai#4212/objectstack-ai#4451 同款)
- dual-source-exports.baseline.json:删 TenantPlan / TenantPlanSchema 两行
  (12 → 10,rebase 携带 C6 objectstack-ai#4745 落地后的起点)
- authorable-surface.json:21 行随三个整 def 出账(objectstack-ai#4650 门禁判定三组
  「def no longer emitted」自证路径,输出见 PR)
- json-schema.manifest.json:删六 def 键(objectstack-ai#2978 蓄意移除通道)
- api-surface.json:恰好 15 行删除(./system 12 + ./contracts 3),零新增
- docs:system/provisioning.mdx 与幽灵页 cloud/provisioning.mdx 随生成器
  消失,cloud/TenantPlan 文档回到真家 cloud/tenant.mdx(objectstack-ai#4696 病灶随重名
  根因消除);docs-import-surface.baseline.json 经生成器收缩一行
- 回归 pin(cloud/tenant.test.ts):compiler-API 断言全入口(package.json
  exports 枚举)任何叫 TenantPlan(Schema) 的导出唯一解析到 cloud 声明、
  ./system 不再命名之、三个契约接口全包消失,防空转守卫;S1(重加声明)/
  S2(禁止的 re-export 路线)sabotage 均红
- changeset:@objectstack/spec major(移除 15 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化(该文件不在台账辖区)


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

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 size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

spec 双源清账 C6:EventSchema(./automation ≠ ./kernel)—— 1 条

2 participants