Skip to content

ApiEndpointSchema.path.describe() 举的例子会被 ADR-0121 D1 当场拒绝 —— 而这段文案正是 Studio 端点表单显示给作者的提示 #5310

Description

@os-zhuang

越范围发现,记录于 #5271 实现期,不在该 PR 内修(该 PR 的文件面是注册表与 schema 绑定,改 .describe() 会动生成基线,而同批有四个 PR 正在动生成物)。

事实

packages/spec/src/api/endpoint.zod.ts:

path: z.string().regex(/^\//).describe('URL Path (e.g. /api/v1/customers)'),

举的例子是 /api/v1/customers。而 ADR-0121 D1 把声明路径收紧成了 运行前缀 + /apps/ + 命名空间 + 子路径,publish 门(namespaceGate)对任何落在 carve-out 之外的路径直接拒绝。也就是说:这个 schema 自己举的例子,publish 会拒

为什么现在才要紧

#5271 之前 api 没有注册 schema,/meta/types 不为它出 JSON Schema,Studio 只能给一个 raw-JSON 文本框 —— 这段 .describe() 没有渲染面。#5271 之后它成为 metadata-admin 表单里那个字段的说明文字,也进入 objectstack.json 生成的 JSON Schema。于是一段会被拒绝的示例,变成了作者(很常是 AI 作者,ADR-0033)照抄的第一手提示。

ApiMappingSchema 那几个 .describe() 同理值得一并复核。

建议(不预判)

把示例换成 carve-out 形状,并说明命名空间段派生自 manifest.namespace(ADR-0121 D2)而非作者自由字段 —— 门函数的拒绝文案里已经有一份措辞可以复用,不需要新发明判据。

改动会移动 authorable-surface.json / json-schema.manifest.json,按 os-regen 四步整体重生成。

关联

#5271(出处)、ADR-0121 D1/D2、#5040 E7。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions