You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Filed by the domain:spec @ objectui execution seat (session session_01BAZFhALsQsGqxui8sNqM8s) as the follow-up triage 5548347502 on #7279 reserved for the manual floor: "若重推导后发现 ObjectViewSchema 的 key 该走 LOCAL 且数量可观、构成加宽 mirror 的可授权面,那是 manual floor 的事,届时另起". The re-derivation landed with PR #7776 (test-file routing record; no mirror moved). This card asks for the remedy decision; ⛔ nothing is dispatched until it is answered. domain:* and grading are triage's.
What was measured (PR #7776, on origin/main16a725f9)
objectql.zod.ts:196ObjectViewSchema = BaseSchema.extend({…}) is a hand-written mirror of local literals and z.lazy siblings; it references no spec schema and is not in SPEC_DERIVED_PAIRS. Ten keys the TypeScript interface declares are absent from the mirror (UnmirroredDeclared ledger entry), so a document authoring any of them passes the validator unexamined through BaseSchema's passthrough while the published type invites the author to write it — the declared ≠ enforced shape. Read through the installed @objectstack/spec@17.2.0 (ui entry, all 122 exported object schemas walked, control keys hit):
Filed by the
domain:spec@ objectui execution seat (sessionsession_01BAZFhALsQsGqxui8sNqM8s) as the follow-up triage 5548347502 on #7279 reserved for the manual floor: "若重推导后发现ObjectViewSchema的 key 该走 LOCAL 且数量可观、构成加宽 mirror 的可授权面,那是 manual floor 的事,届时另起". The re-derivation landed with PR #7776 (test-file routing record; no mirror moved). This card asks for the remedy decision; ⛔ nothing is dispatched until it is answered.domain:*and grading are triage's.What was measured (PR #7776, on
origin/main16a725f9)objectql.zod.ts:196ObjectViewSchema = BaseSchema.extend({…})is a hand-written mirror of local literals andz.lazysiblings; it references no spec schema and is not inSPEC_DERIVED_PAIRS. Ten keys the TypeScript interface declares are absent from the mirror (UnmirroredDeclaredledger entry), so a document authoring any of them passes the validator unexamined throughBaseSchema's passthrough while the published type invites the author to write it — the declared ≠ enforced shape. Read through the installed@objectstack/spec@17.2.0(uientry, all 122 exported object schemas walked, control keys hit):navigationListViewSchema.navigation/ObjectListViewSchema.navigationNavigationConfigSchema; the declaration already imports that very typesearchableFields,filterableFieldsListViewSchema/ObjectListViewSchemafilterableFieldsa legacy shorthand foruserFilters.fields)listViewsViewSchema.listViewsNamedListView, so the value type is a unification questionallowCreateView,defaultListView,defaultViewType,showViewSwitcher,viewActions,viewTabBarRead sites for the six were NOT measured by #7279 (out of its scope); that measurement is the first step of option B below.
Options
@object-ui/types: minor(accept set narrows for wrong-typed values, widens nothing the type does not already promise). Cost: any of the six that nothing reads becomes an enforced-but-dead key — the [Decision]hideEmptyonrecord:detailssections: the spec REFUSES the key,@object-ui/typesdeclares it, the zod mirror omits it, and the renderer honours it — plushideEmpty: falseis not an override #7129 / finding(types):DashboardComponentSchema.titleis declared-but-unread once the #7509 retirement lands #7623 precedent says such a key is retired, not mirrored.listViewsvalue type decided, not papered over withz.any()); for each of the six, measure the renderer / app-shell reads — mirror where a read exists, retire (?: never+retirementTombstone(), the [Decision]hideEmptyonrecord:detailssections: the spec REFUSES the key,@object-ui/typesdeclares it, the zod mirror omits it, and the renderer honours it — plushideEmpty: falseis not an override #7129 route) where nothing reads it. One or two PRs,minor, "Breaking for authored metadata" where a key is retired.决策四维分析
ObjectView节点上已发布的 TS 声明面;四个键规范已建模(navigation/searchableFields/filterableFields/listViews),是真实存在的视图配置;另外六个是 objectui 本地的 UI 旋钮,谁在读尚未实测——B 把实测放在动手之前,A 假设它们都活着,C 假设它们都不归本仓管。hideEmptyonrecord:detailssections: the spec REFUSES the key,@object-ui/typesdeclares it, the zod mirror omits it, and the renderer honours it — plushideEmpty: falseis not an override #7129 路线退役,避免把死键固化成契约(A 的长期代价)。C 把不属于 Unify hand-written @object-ui/types zod with @objectstack/spec/ui (ListViewSchema drift) #2231 的问题挂到 Unify hand-written @object-ui/types zod with @objectstack/spec/ui (ListViewSchema drift) #2231 上,永远等不到解锁。Seat recommendation: B. The dev of PR #7776 reached the same recommendation independently (report 5553436702,
open_questions).Refs: #7279 (the re-derivation, PR #7776) · #6152 (the 121-key worklist this entry belongs to;
pm:blocked,domain:devx) · #6058 / PR #6149 (the ledger) · #6705 / PR #7277 (the scanner fix) · #7129 / #7623 (the retire-by-deleting-the-declaration route) · #2231 (spec unification — not this entry's route).