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 #10 挂 finding、不入 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.ts 里 async getView / async listViews / async createView / async updateView / async deleteView 零命中(该文件唯一的 view 解析方法是 getUiView,:4179);
packages/rest/src/rest-server.ts 里 viewId 零命中,没有任何按 viewId 寻址的 view 路由;
- 全仓
getView( 的另外两处命中都不是这套契约:packages/metadata/src/metadata-manager.ts:1332 是 getView(name: string) 的另一个类;objectui packages/data-objectstack/src/index.ts:2572 的 getView(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(别名对)。
Blocked-by: #6083(仅排期依赖:五套 schema 各有 ADR-0122 别名对,与在飞的全仓翻转卡相交于同一 pin 文件与别名区 —— 等它落地再退役,避免给翻转卡加合并面)
观察类发现,在实施 #5948 时核出。不是今天用户会碰到的缺陷(纯休眠声明面),故按 Prime Directive #10 挂
finding、不入pm:queue、不认领,交分诊定级。事实(
origin/main@773f80aab)packages/spec/src/api/protocol.zod.ts的 "View Management Operations" 段声明了一整套 view CRUD:listViews:1559:687:692getView:1560:697:702createView:1561:707:712updateView:1562:718:724deleteView:1563:730:735核实方式:
packages/metadata-protocol/src/protocol.ts里async getView/async listViews/async createView/async updateView/async deleteView零命中(该文件唯一的 view 解析方法是getUiView,:4179);packages/rest/src/rest-server.ts里viewId零命中,没有任何按 viewId 寻址的 view 路由;getView(的另外两处命中都不是这套契约:packages/metadata/src/metadata-manager.ts:1332是getView(name: string)的另一个类;objectuipackages/data-objectstack/src/index.ts:2572的getView(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 处置,三选一:
/meta/view/:name与/ui/view/:object/:type覆盖,这套 CRUD 想解决的问题并不自明。关联:#5948(误当契约的现场)、ADR-0049(enforce-or-remove)、ADR-0087(移除转换)、ADR-0122(别名对)。