Skip to content

[spec] View-Management 五方法(listViews/getView/createView/updateView/deleteView)是零实现零路由的声明面 —— 已导致 #5948 把它的响应 schema 误当成线上路由的契约 #6239

Description

@qq9340100

Blocked-by: #6083(仅排期依赖:五套 schema 各有 ADR-0122 别名对,与在飞的全仓翻转卡相交于同一 pin 文件与别名区 —— 等它落地再退役,避免给翻转卡加合并面)

维护者裁决(2026-08-07):A —— 按 ADR-0049/ADR-0087 退役,五方法与十套 schema 一并移除;将来真需要「按 viewId 读写 view」随实现一起回来(implementation-first)。窗口 v17。退役剧本(含 08-07 两条收尾经验)适用;⚠️ 本单退役对象含判别联合与别名对 —— variant-docs 账本与 ADR-0122 pin 的清理照 #5552/#6078 先例。#6083 MERGED 后由解锁清扫回队,spec 座位派发。

观察类发现,在实施 #5948 时核出。不是今天用户会碰到的缺陷(纯休眠声明面),故按 Prime Directive #10finding、不入 pm:queue、不认领,交分诊定级。

事实(origin/main @ 773f80aab)

packages/spec/src/api/protocol.zod.ts 的 "View Management Operations" 段声明了一整套 view CRUD:

方法 接口行 请求 schema 响应 schema 生产实现 REST 路由
listViews :1559 :687 :692
getView :1560 :697 :702
createView :1561 :707 :712
updateView :1562 :718 :724
deleteView :1563 :730 :735

核实方式:

  • packages/metadata-protocol/src/protocol.tsasync getView / async listViews / async createView / async updateView / async deleteView 零命中(该文件唯一的 view 解析方法是 getUiView,:4179);
  • packages/rest/src/rest-server.tsviewId 零命中,没有任何按 viewId 寻址的 view 路由;
  • 全仓 getView( 的另外两处命中都不是这套契约:packages/metadata/src/metadata-manager.ts:1332getView(name: string) 的另一个类;objectui packages/data-objectstack/src/index.ts:2572getView(objectName, viewId) 内部走的是 client.meta.getItem('view', viewId),即 metadata 路由。

这五套 schema 仍照常出现在 api-surface.json / json-schema.manifest.json / authorable-surface.json 基线里,并有完整的 XParsed 别名对(ADR-0122 第一期铺设),即维护成本照付。

为什么值得记一笔

它已经造成过一次实际代价:#5948 的正文与其 2026-08-07 维护者裁决,都把 GetViewResponseSchema(本表第二行,零实现)当成了 GET /ui/view/:object/:type 的契约。那条路由实际声明的是 GetUiViewResponseSchema(:363)。裁决理由里「nobody can consume {object, view} successfully today」之所以碰巧成立,不是因为读 .view 会抛,而是因为没有任何路由能到达这个方法。详见 #5948 的核实评论。

一个与实现同名、语义相近、却谁也没实现的声明面,正是这类张冠李戴的温床 —— 它在 grep 里和真契约长得一模一样。

建议方向(已裁,见顶部)

按 ADR-0049 enforce-or-remove 处置,三选一:

  • A. 退役(✅ 已裁):五方法与十套 schema 一并按 ADR-0087 转换移除。若「按 viewId 读写单个 view」的能力将来真的需要,它会随实现一起回来(implementation-first)。
  • B. 保留并实现:需要先量清真实业务拉力 —— 目前 view 的读写已经由 /meta/view/:name/ui/view/:object/:type 覆盖,这套 CRUD 想解决的问题并不自明。
  • C. 保留声明并标注:成本最低,但按 declared = enforced 的项目取向,这是最弱的一档。

关联:#5948(误当契约的现场)、ADR-0049(enforce-or-remove)、ADR-0087(移除转换)、ADR-0122(别名对)。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions