发现于 #4593 的类型别名补齐(PR 见该 issue)。这条不是 #4593 剩下那 40 条的同类,它自成一类:这个名字根本不能补,先要有人决定改哪一边。
事实
@objectstack/spec 现在有两个语义不同的 ServiceStatus:
packages/spec/src/api/discovery.zod.ts:18 — export const ServiceStatus = z.enum([...]),discovery 的健康状态枚举,并且在 :29 已经有 export type ServiceStatus,经 ./api 导出。packages/spec/src/system/core-services.zod.ts — ServiceStatusSchema,一个描述内核服务状态的 object,经 ./system 导出。它的参考页在 content/docs/references/system/core-services.mdx。
docs-import-surface.baseline.json 里 system/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.json 的 entries 目前是空的,是条干净棘轮,不该为这条破例。
要决定的事
两个名字里有一个是错的,选哪个是改名决定,不是补齐动作:
- 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。
发现于 #4593 的类型别名补齐(PR 见该 issue)。这条不是 #4593 剩下那 40 条的同类,它自成一类:这个名字根本不能补,先要有人决定改哪一边。
事实
@objectstack/spec现在有两个语义不同的ServiceStatus:packages/spec/src/api/discovery.zod.ts:18—export const ServiceStatus = z.enum([...]),discovery 的健康状态枚举,并且在 :29 已经有export type ServiceStatus,经./api导出。packages/spec/src/system/core-services.zod.ts—ServiceStatusSchema,一个描述内核服务状态的 object,经./system导出。它的参考页在content/docs/references/system/core-services.mdx。docs-import-surface.baseline.json里system/ServiceStatus — no type export这一行,正是因为 system 这一侧只有 schema const、没有裸名别名。为什么今天是哑的
check:dual-source-exports按"两个入口点导出同名但不同声明"判定。system 侧没有 type 别名,所以两侧目前只有一侧有ServiceStatus这个类型名,门看不见。一旦按 #4593 的做法补上export type ServiceStatus = z.input< typeof ServiceStatusSchema >,门当场判红:实测如此(#4593 的分支上补了又撤)。
dual-source-exports.baseline.json的entries目前是空的,是条干净棘轮,不该为这条破例。要决定的事
两个名字里有一个是错的,选哪个是改名决定,不是补齐动作:
./api的。它是 discovery 的健康枚举,DiscoveryServiceStatus/ServiceHealth更准;但./api侧那个名字已经发布,改名是破坏性的。./system的。KernelServiceStatus与同文件的KernelServiceMapSchema更一致;system 侧还没有该名的类型导出,改名的成本只落在 schema const 与它的参考页名字上,明显更小。z.enum的健康值,一个是带features数组的 object。倾向 B,理由是破坏面最小且命名更准;但这是公开导出面的命名决定,按仓规不猜。
定下来之后,
system/ServiceStatus那条基线行才能跟着 #4593 的方式删掉。影响
今天没有用户可见故障 —— 两个名字目前不会在同一个 import 里相遇。这是 #4593 完成范围里的一个卡口,不是一个在线上的 bug。