Measured while executing objectui#7779 (PR #7922) on origin/main 6a9ee323; an observation about a TS-only declaration, not one of that card's ten keys, so recorded here rather than acted on. Filed by the dev of session_01BAZFhALsQsGqxui8sNqM8s's dispatch.
The measurement
NamedListView (packages/types/src/objectql.ts:1957–:2134) declares about 52 top-level members: the seven below plus the legacy list-view vocabulary (showSearch … showDensity, compactToolbar, allowExport, color, inlineEdit, wrapHeaders, clickIntoRecordDetails, addRecordViaForm, addDeleteRecordsInline, collapseAllByDefault, fieldTextColor, prefixField, description, showDescription, navigation, selection, pagination, searchableFields, filterableFields, resizable, densityMode, rowHeight, hiddenFields, exportOptions, rowActions, bulkActions, bulkActionDefs, sharing, addRecord, conditionalFormatting, userFilters, showRecordCount, allowPrinting, emptyState, aria, …).
- The
object-view node renderer (packages/plugin-view/src/ObjectView.tsx) reads exactly seven members off currentNamedViewConfig: label, type, columns, filter, sort, options, data (derived off disk with a regex and pinned in packages/types/src/__tests__/object-view-unmirrored-keys-7779.test.ts; data is read through an as any cast and is not even declared). Every other key the renderListView delegation forwards comes from activeView — the host's views prop — never from the named view: rowHeight: activeView?.rowHeight, navigation: activeView?.navigation ?? (schema as any).navigation, searchableFields: activeView?.searchableFields ?? …, and so on (ObjectView.tsx:1745–:1822).
- So a named view authored with
rowHeight, navigation, selection, pagination, searchableFields, showSearch or any of the other ~45 members validates green (passthrough) and changes nothing — the published type invites the author to write it.
Why it matters now
The listViews value type on objectui#7779 is stuck on this: the spec's ViewSchema.listViews is a record of the strict ObjectListViewSchema (requires columns; refuses options, tuple filters and default), which refuses the named views the docs teach; a key-for-key mirror of NamedListView would enforce ~45 members nothing reads — the "enforced dead key" ruling B refused for the six local keys. The measurement is pinned against the spec in the test above and listViews stays in the parity ledger until this is decided (the report on #7779 carries the four-axis analysis).
What a card would do
A per-member liveness census on NamedListView itself, then either the objectui#7129 route (?: never tombstones for the unread members, leaving the seven the renderer honours) or an implementation card that makes the delegation read them from the named view — the second is capability growth and is not assumed. Either way the listViews mirror then admits exactly what runs.
Refs: objectui#7779 · PR #7922 · objectui#2890 (ObjectView / DetailView audit) · objectui#6152 (the mirror-pair worklist — a different instrument: this declaration has no zod twin to ledger)
Measured while executing objectui#7779 (PR #7922) on
origin/main6a9ee323; an observation about a TS-only declaration, not one of that card's ten keys, so recorded here rather than acted on. Filed by the dev ofsession_01BAZFhALsQsGqxui8sNqM8s's dispatch.The measurement
NamedListView(packages/types/src/objectql.ts:1957–:2134) declares about 52 top-level members: the seven below plus the legacy list-view vocabulary (showSearch…showDensity,compactToolbar,allowExport,color,inlineEdit,wrapHeaders,clickIntoRecordDetails,addRecordViaForm,addDeleteRecordsInline,collapseAllByDefault,fieldTextColor,prefixField,description,showDescription,navigation,selection,pagination,searchableFields,filterableFields,resizable,densityMode,rowHeight,hiddenFields,exportOptions,rowActions,bulkActions,bulkActionDefs,sharing,addRecord,conditionalFormatting,userFilters,showRecordCount,allowPrinting,emptyState,aria, …).object-viewnode renderer (packages/plugin-view/src/ObjectView.tsx) reads exactly seven members offcurrentNamedViewConfig:label,type,columns,filter,sort,options,data(derived off disk with a regex and pinned inpackages/types/src/__tests__/object-view-unmirrored-keys-7779.test.ts;datais read through anas anycast and is not even declared). Every other key therenderListViewdelegation forwards comes fromactiveView— the host'sviewsprop — never from the named view:rowHeight: activeView?.rowHeight,navigation: activeView?.navigation ?? (schema as any).navigation,searchableFields: activeView?.searchableFields ?? …, and so on (ObjectView.tsx:1745–:1822).rowHeight,navigation,selection,pagination,searchableFields,showSearchor any of the other ~45 members validates green (passthrough) and changes nothing — the published type invites the author to write it.Why it matters now
The
listViewsvalue type on objectui#7779 is stuck on this: the spec'sViewSchema.listViewsis a record of the strictObjectListViewSchema(requirescolumns; refusesoptions, tuple filters anddefault), which refuses the named views the docs teach; a key-for-key mirror ofNamedListViewwould enforce ~45 members nothing reads — the "enforced dead key" ruling B refused for the six local keys. The measurement is pinned against the spec in the test above andlistViewsstays in the parity ledger until this is decided (the report on #7779 carries the four-axis analysis).What a card would do
A per-member liveness census on
NamedListViewitself, then either the objectui#7129 route (?: nevertombstones for the unread members, leaving the seven the renderer honours) or an implementation card that makes the delegation read them from the named view — the second is capability growth and is not assumed. Either way thelistViewsmirror then admits exactly what runs.Refs: objectui#7779 · PR #7922 · objectui#2890 (ObjectView / DetailView audit) · objectui#6152 (the mirror-pair worklist — a different instrument: this declaration has no zod twin to ledger)