Skip to content

ServiceStatus 在 ./api 与 ./system 各有一个不同声明,#4593 的别名补齐卡在这个名字上 #6604

Description

@qq9340100

发现于 #4593 的类型别名补齐(PR 见该 issue)。这条不是 #4593 剩下那 40 条的同类,它自成一类:这个名字根本不能补,先要有人决定改哪一边。

事实

@objectstack/spec 现在有两个语义不同的 ServiceStatus:

  • packages/spec/src/api/discovery.zod.ts:18export const ServiceStatus = z.enum([...]),discovery 的健康状态枚举,并且在 :29 已经有 export type ServiceStatus,经 ./api 导出。
  • packages/spec/src/system/core-services.zod.tsServiceStatusSchema,一个描述内核服务状态的 object,经 ./system 导出。它的参考页在 content/docs/references/system/core-services.mdx

docs-import-surface.baseline.jsonsystem/ServiceStatus — no type export 这一行,正是因为 system 这一侧只有 schema const、没有裸名别名。

为什么今天是哑的

check:dual-source-exports 按"两个入口点导出同名但不同声明"判定。system 侧没有 type 别名,所以两侧目前只有一侧有 ServiceStatus 这个类型名,门看不见。一旦按 #4593 的做法补上 export type ServiceStatus = z.input< typeof ServiceStatusSchema >,门当场判红:

❌ 1 NEW dual-source export name(s) — two entry points now export the same name for different declarations:
• ServiceStatus — [./api (type)] ≠ [./system (type)]

实测如此(#4593 的分支上补了又撤)。dual-source-exports.baseline.jsonentries 目前是空的,是条干净棘轮,不该为这条破例。

要决定的事

两个名字里有一个是错的,选哪个是改名决定,不是补齐动作:

  • A:./api 的。它是 discovery 的健康枚举,DiscoveryServiceStatus / ServiceHealth 更准;但 ./api 侧那个名字已经发布,改名是破坏性的。
  • B:./system 的。KernelServiceStatus 与同文件的 KernelServiceMapSchema 更一致;system 侧还没有该名的类型导出,改名的成本只落在 schema const 与它的参考页名字上,明显更小
  • C: 判定两者其实是一个概念,合并成一个声明、另一个入口点 re-export(gate 明确说 re-export 不算 dual-source)。读下来不像:一个是 z.enum 的健康值,一个是带 features 数组的 object。

倾向 B,理由是破坏面最小且命名更准;但这是公开导出面的命名决定,按仓规不猜。

定下来之后,system/ServiceStatus 那条基线行才能跟着 #4593 的方式删掉。

影响

今天没有用户可见故障 —— 两个名字目前不会在同一个 import 里相遇。这是 #4593 完成范围里的一个卡口,不是一个在线上的 bug。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions