diff --git a/.changeset/23434-component-read-points-part-2.md b/.changeset/23434-component-read-points-part-2.md
new file mode 100644
index 00000000000..cbdb2ccc552
--- /dev/null
+++ b/.changeset/23434-component-read-points-part-2.md
@@ -0,0 +1,11 @@
+---
+'@objectstack/spec': patch
+---
+
+Component-member read points, part 2 of 3: the doc comments in the second half of `src/ui/component.zod.ts` no longer cite objectui files, lines or commits as read points.
+
+Clause-②: no
+
+- The doc comments of the `ComponentPropsMap` rows from the rest of object-kanban through object-calendar, object-form, object-master-detail-form, object-map, object-gantt, object-tree and object-timeline, and the row registrations at the end of the file now say "read points recorded in `liveness/page.json`, row `regions`". The per-hop re-read chains are removed. What each record claims about the renderer is kept in the shorter comment.
+- `liveness/page.json`, row `regions`, gains one evidence list in its `note`: 120 entries spelled `COMPONENT.member: objectui @SHA FILE#SYMBOL`. The list asserts no verdict, so component-level liveness stays unclassified. All three parts of this change carry the same list.
+- No schema, type, export, default, accept or refuse change. No `.describe()` text changed.
diff --git a/packages/spec/liveness/page.json b/packages/spec/liveness/page.json
index b960a0e5c9a..56cc0b6bd03 100644
--- a/packages/spec/liveness/page.json
+++ b/packages/spec/liveness/page.json
@@ -54,7 +54,7 @@
"verifiedAt": "2026-08-10",
"evidenceScope": "cross-repo",
"evidence": "objectui: packages/components/src/renderers/layout/page.tsx:290 branches on schema.regions, :197-204 resolves the named slots (header/sidebar/main/aside/footer) and appends the remainder below main at :211, and :157 flattens their components for the JSX-source path — measured objectui @11c1e71e",
- "note": "region → component tree rendering (header/main/sidebar/footer). RE-CITED 2026-08-10 (#7133/#7142): same split-citation pruning as `template` — at objectui @11c1e71e the containers.tsx half names `regions` only in a comment (:798, 'page:section — thin wrapper used inside regions'). Verdict unchanged: LIVE. Component-level liveness stays unclassified (undrilled container, #4956); one component key carries a verdict OUTSIDE this file: `components[].responsive` is a retiredKey tombstone (#11027, ADR-0049 D2 — dead on a two-repo measurement; see the file _note)."
+ "note": "region → component tree rendering (header/main/sidebar/footer). RE-CITED 2026-08-10 (#7133/#7142): same split-citation pruning as `template` — at objectui @11c1e71e the containers.tsx half names `regions` only in a comment (:798, 'page:section — thin wrapper used inside regions'). Verdict unchanged: LIVE. Component-level liveness stays unclassified (undrilled container, #4956); one component key carries a verdict OUTSIDE this file: `components[].responsive` is a retiredKey tombstone (#11027, ADR-0049 D2 — dead on a two-repo measurement; see the file _note). COMPONENT-MEMBER READ POINTS (moved out of packages/spec/src, #23434; ruling 6165388570 letter C, Q1 A as the seat read it): an EVIDENCE LIST only — no verdict is asserted, so component-level liveness stays unclassified as above. Each entry names the ComponentPropsMap row and member it reads, then its read points in the spelling `objectui @SHA FILE#SYMBOL` (the SHA is the objectui tree the point was last read in; a pin hop moves nothing here, and a renamed or deleted symbol is the event that re-measures it). Inside one entry, a letter defined at its head abbreviates a repeated file: with `P = objectui @SHA FILE`, `P#a P#b` reads `objectui @SHA FILE#a`, `objectui @SHA FILE#b`. Entries, in source order: [1] page:header (H = objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx#PageHeaderRenderer): title (`schema?.title ?? schema?.properties?.title`), the refused `icon` (resolved only per header action) and `breadcrumb` (an empty slot), `actions` (resolvedHeaderActions then headerActionPlan), recordChrome (`=== false` on either carrier, branching the header), showStar and showCopyId (the record chip), maxVisible and mobileMaxVisible (`?? 3` / `?? 1`), all in H; re-read 2026-10-15, first cited sha-less; [2] page:tabs (T = objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx#PageTabsRenderer): tabStyle (`schema?.properties?.type || schema?.tabStyle || 'line'`), alwaysShowStrip (`schema?.alwaysShowStrip === true || schema?.properties?.alwaysShowStrip === true`), items[].value (`it.value`, falling back to `tab-${idx}`; the refused `key` is the designer's `page:tabs.items.itemFields` input in objectui @b9814b334 packages/app-shell/src/views/metadata-admin/previews/block-config.ts#BLOCK_CONFIG), all in T; the retired props key `type` (the reason for the rename): left unhoisted by objectui @b9814b334 packages/react/src/SchemaRenderer.tsx#HOIST_PROTECTED_KEYS, and skipped as a base prop by objectui @b9814b334 packages/sdui-parser/src/validate.ts#BASE_PROPS; re-read 2026-10-15, first cited sha-less; [3] page:tabs items[].icon (C = objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx): C#triggerClass (`LazyIcon` inside the TabsTrigger) in C#PageTabsRenderer; published by its registration's `items` input; vocabulary objectui @b9814b334 packages/components/src/lib/lazy-icon.tsx#getLazyIcon; [4] page:tabs items[].visibleWhen (the tab-item evaluator: `data` is the row, bare fields spread flat, ambient roots after it): objectui @1fb1ced36243 packages/components/src/renderers/layout/containers.tsx#isItemVisible (its ExpressionEvaluator) in PageTabsRenderer; [5] record:details / record:highlights / record:related_list / record:quick_actions .requiredPermissions (RECORD_BLOCK_REQUIRED_PERMISSIONS_DESCRIPTION; R = objectui @b9814b334 packages/plugin-detail/src/renderers/, P = objectui @b9814b334 packages/permissions/src/): the gate `perms.hasCapabilities(required)` and the notice in R record-details.tsx#RecordDetailsBody, R record-highlights.tsx#highlightsAllowed (RecordHighlightsBody), R record-related-list.tsx#RecordRelatedListBody, R record-quick-actions.tsx#RecordQuickActionsBody; earlier withholding: no record R record-details.tsx#RecordDetailsBody, no object and the related read gate R record-related-list.tsx#RecordRelatedListBody; a gated highlights registers no fields R record-highlights.tsx#RecordHighlightsBody (useRegisterHighlightFields); ALL OF THEM and fail-open on unreported P MePermissionsProvider.tsx#hasCapabilities; fail-open P PermissionProvider.tsx#ALL_CAPABILITIES and P usePermissions.ts#NO_PROVIDER_PERMISSIONS; the binding wrapper (objectui#12294) objectui @b9814b334 packages/plugin-detail/src/renderers/recordBinding.tsx#recordBindingBlock; [6] record:details sections[].headerColor (closed enum, #12126): the six class literals of objectui @b9814b334 packages/plugin-detail/src/headerColor.ts#headerColorClass (objectui#6294, merged 2026-08-25); re-read 2026-10-15, first cited sha-less; [7] record:details sections[] hideEmpty, collapsible, showBorder and the #11661 trio (renderer defaults measured; the trio at objectui @190fbd01): objectui @190fbd01 packages/plugin-detail/src/renderers/record-details.tsx#RecordDetailsRenderer and objectui @190fbd01 packages/plugin-detail/src/DetailSection.tsx#DetailSection (`hideEmpty ?? true`; the undeclared `s.title ?? s.label` limb); [8] record:related_list.parentDataSource (the name): the sibling record blocks' binding read objectui @f0532d8a packages/plugin-detail/src/renderers/recordBinding.tsx#recordBindingBlock (`isElementDataSourceConfig(schema.dataSource)`), measured on objectui main; [9] record:details sections[].count (read since objectui c08c9332a, objectui#12192): objectui @b9814b334 packages/plugin-detail/src/renderers/record-details.tsx#countField (inside filteredSections; fills every `{{ count }}` hole); [10] record:related_list.parentDataSource (PLANNED): the objectui measurement is the file _note's (objectui @f0532d8a, the record context read in RecordRelatedListBody); no new evidence here; [11] record:activity guidance `items` / `loading` (host feed slot; R = objectui @89cad75d5570 packages/plugin-detail/src/renderers/): R record-activity.tsx#hostItems and R record-activity.tsx#loading in RecordActivityRenderer; record:chatter / record:discussion `feed` reads neither, R record-chatter.tsx#RecordChatterRenderer; [12] record:chatter.position (vocabulary bottom / right / left, #8762): objectui @665661ab0932 packages/plugin-detail/src/RecordChatterPanel.tsx#position (`right`/`left` dock vs `bottom` in-flow); the designer's CHATTER_INPUTS and the merge fallback in objectui @665661ab0932 packages/plugin-detail/src/renderers/record-chatter.tsx#RecordChatterRenderer; [13] record:reference_rail (RecordReferenceRailProps): objectui @b9814b334 packages/plugin-detail/src/renderers/record-reference-rail.tsx#RecordReferenceRailRenderer ( an entry `icon` is unread, `title` a raw React child); the synthesizer emitting `icon` objectui @b9814b334 packages/plugin-detail/src/synth/buildDefaultPageSchema.ts#buildDefaultPageSchema; re-read 2026-10-15, first cited sha-less; [14] record:alert, record:quick_actions, record:history: objectui @b9814b334 packages/plugin-detail/src/renderers/record-alert.tsx#RecordAlertRenderer, objectui @b9814b334 packages/plugin-detail/src/renderers/record-quick-actions.tsx#RecordQuickActionsRenderer, objectui @b9814b334 packages/plugin-detail/src/renderers/record-history.tsx#RecordHistoryRenderer and objectui @b9814b334 packages/plugin-detail/src/HistoryTimeline.tsx#HistoryTimeline (each renderer's ACTUAL reads, against its registration's declared inputs); re-read 2026-10-15, first cited sha-less; [15] record:line_items (RecordLineItemsProps; L = objectui @31971ff1e28f packages/plugin-form/src/LineItemsPanel.tsx): registered as `line_items` (namespace `record`) in objectui @31971ff1e28f packages/plugin-form/src/index.tsx with its mapping objectui @31971ff1e28f packages/plugin-form/src/index.tsx#RECORD_LINE_ITEMS_DATA_SOURCE; the fifteen `schema.KEY` reads in L#LineItemsPanel (childObject L#heldReloadRef; parentObject L#parentObject; parentId, recordId L#parentId; amountField, totalField L#parentPatch; filter L#scopeFilter; limit L#message; columns L#gridField (applyColumnPermissions)); the gate objectui @31971ff1e28f packages/react/src/element-data-source/ElementDataSourceGate.tsx#useElementDataSourceSchema; read set unchanged at objectui main d59f11c0d3dc; [16] record:line_items guidance (addLabel, sortField, onRowExpand not handed to the grid): objectui @9dfaca654311 packages/plugin-form/src/LineItemsPanel.tsx#gridField; [17] record:approvals (RecordApprovalsProps, EMPTY key set; A = objectui @47b1f0bb71 packages/app-shell/src/views/): registered as `approvals` (namespace `record`) in A record-approvals-renderer.tsx#RecordApprovalsRenderer; approvals A record-approvals-renderer.tsx#hostApprovals, threaded by A RecordDetailView.tsx#RecordDetailView and emitted by objectui @47b1f0bb71 packages/plugin-detail/src/synth/buildDefaultPageSchema.ts#buildDefaultPageSchema; currentUserId falls back in A RecordApprovalsPanel.tsx#isSubmitter; Studio page create seeds without options in A metadata-admin/anchors.ts#synth; [18] page:accordion items[].value (refused): objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx#PageAccordionRenderer overwrites it with `panel-${idx}`; the designer input `page:accordion.items.itemFields` in objectui @b9814b334 packages/app-shell/src/views/metadata-admin/previews/block-config.ts#BLOCK_CONFIG (objectui#7973); re-read 2026-10-15, first cited sha-less; [19] page:accordion items[].icon (C = objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx): C#commonChildren (`LazyIcon` in the AccordionTrigger) inside C#PageAccordionRenderer; published by its `accordion` registration's `items` input; vocabulary objectui @b9814b334 packages/components/src/lib/lazy-icon.tsx#getLazyIcon; [20] page:accordion.variant: objectui @b9814b334 packages/components/src/renderers/layout/containers.tsx#PageAccordionRenderer (`schema?.variant ?? schema?.properties?.variant ?? 'flush'`); re-read 2026-10-15, first cited sha-less; [21] element:text.variant retired `heading` / `subheading`: objectui @89cad75d55 packages/components/src/renderers/basic/elements.tsx#VARIANT_TAG; [22] element:button.icon (B = objectui @b9814b334 packages/components/src/renderers/form/button.tsx, R = objectui @b9814b334 packages/components/src/renderers/action/resolve-icon.ts): B#Icon (resolveIcon) and its render on either side of the label in B#ButtonRenderer; R#resolveIcon R#describeIconLookup R#toPascalCase R#iconNameMap R#recordIconName (the vocabulary: the generated objectui @b9814b334 packages/components/src/lib/lucide-record-icon-names.ts#LUCIDE_RECORD_ICON_NAME_TABLE); contrast objectui @b9814b334 packages/components/src/lib/lazy-icon.tsx#getLazyIcon; no `icon` in the registration's inputs inside B#ButtonRenderer (objectui#9910 added the `children` slot input); history: the read point moved files on the hop onto objectui 9602dc820, and the registration ranges were first wrong-since-written at objectui a472b0716; [23] action:* rows, the effective executor and the runner's reads (R = objectui @b9814b334 packages/core/src/actions/ActionRunner.ts, first read at objectui @1fb1ced36243 with every anchor at the same symbols; A = objectui @b9814b334 packages/components/src/renderers/action/): executor resolution R#execute (`action.type || action.actionType || action.name`); forwarded executor A action-button.tsx#forwarded, A action-icon.tsx#forwarded (`type: schema.actionType`), A action-group.tsx#paramsPayload, A action-menu.tsx#paramsPayload (`type: action.type`); the name leg documented in A action-button.tsx#forwarded; built-in executors and the `navigation` alias R#ActionRunner (`builtinExecutors`), url navigation executeUrl / executeNavigation / navigateTo in R#ActionRunner; no console host handler under `url` / `navigation`: objectui @b9814b334 packages/app-shell/src/console/ConsoleShell.tsx, packages/app-shell/src/hooks/useConsoleActionRuntime.tsx, packages/app-shell/src/console/AppContent.tsx, packages/app-shell/src/hooks/useObjectActions.ts; onSuccess R#handlePostExecution R#readOnSuccessNavigation; operation read before any executor R#execute (isUpdateOperationAction), forwarded A action-button.tsx#forwarded; patch merged only when a plain object (executeUpdateOperation in R#ActionRunner); unchanged at objectui main 866763bd and 72594f29; [24] section 4b, the action:* quartet and element:* lists (shared reads; A = objectui @b9814b334 packages/components/src/renderers/action/): publication objectui @b9814b334 packages/core/src/registry/public-blocks.ts#PUBLIC_BLOCKS; `autoTrigger` \"NOT persisted metadata\" in the header of A auto-trigger.ts#useAutoTriggerOnce; the Button primitive vocabulary objectui @b9814b334 packages/components/src/ui/button.tsx#buttonVariants; `objectName` forwarded by A action-button.tsx#forwarded and A action-icon.tsx#forwarded, and per member by A action-group.tsx#paramsPayload and A action-menu.tsx#paramsPayload; history: objectui#11168 slices 1-2, objectui#11212 (fail-closed `visible`), objectui#11182 (host `disabled` verdict), objectui#11344 (`outcomeMessages`), objectui#11638 (member `properties.params` read retired), objectui#11839 (disabled reason), objectui#11880 (repeater binding), objectui#12085 (repeater publishes only the binding); [25] action:button (ActionButtonPropsSchema; B = objectui @b9814b334 packages/components/src/renderers/action/action-button.tsx; the retired gate's quoted first line `type: schema.actionType,` holds at B#forwarded): name B#isVisible (diagnostic label) B#forwarded; label B#button (React child) B#isVisible B#forwarded; icon B#Icon (resolveIcon); actionType B#forwarded (`type`); variant, size B#variant and its `size` twin; visible B#isVisible B#ActionButtonRenderer (hasDeclaredVisibilityGate); disabled B#isDisabled B#button; params B#staticValues (withUndoBaseline) and objectui @b9814b334 packages/components/src/renderers/action/static-params.ts#readStaticParamValues; the forwarded set B#forwarded (outcomeMessages forwarded since objectui#11344, left unpublished in the registration's inputs inside B#ActionButtonRenderer); undo baseline B#withUndoBaseline; [26] action:icon (ActionIconPropsSchema; I = objectui @b9814b334 packages/components/src/renderers/action/action-icon.tsx; the retired gate's quoted first line `type: schema.actionType,` holds at I#forwarded): size not read I#size (fixed `'icon'`); the forward I#forwarded (no undoable / recordIdField; outcomeMessages since objectui#11344); label I#isVisible I#forwarded I#button (aria-label, initial letter, DisabledReasonTrigger heading) I#ActionIconRenderer (tooltip); visible I#isVisible I#ActionIconRenderer; disabled I#isDisabledPred I#button; variant I#variant; params I#staticValues (readStaticParamValues); [27] action:group / action:menu members (actionContainerMember; G = objectui @2e818d0b51ec packages/components/src/renderers/action/action-group.tsx, M = objectui @2e818d0b51ec packages/components/src/renderers/action/action-menu.tsx, P = objectui @2e818d0b51ec packages/components/src/renderers/action/static-params.ts): drawn G#InlineActionButton G#DropdownActionItem M#ActionMenuItem; visible G#useMemberVisible M#useMenuActionVisible; size (group only) G#btnSize; tags G#showSeparator; locations G#actions (actionRendersAt); forwarded G#staticValues M#staticValues (the forward block); object params forwarded on `api` and dropped, with a development-build warning only, for every other `type` P#readActionEntryParamValues (first cited at objectui @0abd4f9f8, same symbol); refused: properties.params P#readMemberStaticParamValues, className G#handleClick, autoTrigger M#ActionAutoTrigger (useAutoTriggerOnce), onClick G#handleExecute M#handleExecute; the array forward (the retired gate's quoted first line `const paramsPayload: ActionDef = Array.isArray(action.params)`) objectui @b9814b334 packages/components/src/renderers/action/action-group.tsx#paramsPayload and objectui @b9814b334 packages/components/src/renderers/action/action-menu.tsx#paramsPayload, other values objectui @b9814b334 packages/components/src/renderers/action/static-params.ts#readActionEntryParamValues; the fork measured at objectui @ab1879721595, files byte-identical at objectui main 2abec3a96; [28] action:group (ActionGroupPropsSchema; G = objectui @b9814b334 packages/components/src/renderers/action/action-group.tsx): actions G#declaredActions G#actions (actionRendersAt) G#useMemberVisible G#paramsPayload; display G#display; label, icon, variant, size G#TriggerIcon (the trigger; size raw to inline members) G#btnSize; visible G#isVisible; the host `disabled` verdict (objectui#11182) G#ActionGroupRenderer; group `name` unread (the comment above G#ActionGroupRenderer, objectui#11168); the registration's inputs inside G#ActionGroupRenderer; [29] action:menu (ActionMenuPropsSchema; M = objectui @b9814b334 packages/components/src/renderers/action/action-menu.tsx): actions M#ActionMenuRenderer M#ActionMenuItem M#ActionAutoTrigger M#paramsPayload; label, icon, variant, size, visible and the host `disabled` verdict (objectui#11182) M#ActionMenuRenderer; the registration's inputs inside M#ActionMenuRenderer (objectui#11168 slice 1); [30] element:definition-list (ElementDefinitionListPropsSchema; L = objectui @b9814b334 packages/components/src/renderers/basic/data-list.tsx; the retired gate's quoted first line `const props = readProps<{` holds at L#props): items, columns (`=== 2`), inline, term, description L#DefinitionListRenderer (an item's `description` shown through L#toText: a string or number as text, an object as JSON; first cited at objectui @89cad75d55); the registration's number enum and optional `items` (objectui#11168 slice 2) at its `definition-list` registration in L; the designer's number control objectui @b9814b334 packages/app-shell/src/views/metadata-admin/previews/block-config.ts#BLOCK_CONFIG; [31] element:repeater (ElementRepeaterPropsSchema; L = objectui @b9814b334 packages/components/src/renderers/basic/data-list.tsx; the quoted first line `const props = readProps<{` holds at L#props in L#RepeaterRenderer): object, filter, sort, limit, emptyText, divided, titleField, fields L#RepeaterRenderer; the binding L#dataBinding (useElementDataSource, objectui#11880, aaba8655a); resolved filter tokens L#filterScope; delivery objectui @b9814b334 packages/data-objectstack/src/index.ts#ObjectStackAdapter (translateFilterArray arm) and objectui @b9814b334 packages/data-objectstack/src/index.ts#serializeOrderBy; the registration wrapped by elementDataSourceBlock publishes no `object` input since objectui#12085 (ce991bd70); the registration's `object` required flag read at objectui @20c6d351a; [32] object-grid.aggregations[] (GridAggregationSchema): objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx#groupHeaders (useGroupedData) and objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx#serverGroupSource (useServerGroupHeaders); the grid's own function vocabulary objectui @89cad75d55 packages/plugin-grid/src/useGroupedData.ts#AggregationType (unchanged at objectui @b9814b334); [33] object-grid (ObjectGridPropsSchema, per key; E = objectui @eb7f586b packages/plugin-grid/src/ObjectGrid.tsx): columns, fields E#schemaFields; filter E#schemaFilterSource (toFilterNode); defaultFilters E#cols (legacy fallback); sort E#schemaSort; defaultSort E#cols; pagination, pageSize, showPagination E#lastFindParamsRef E#schemaPageSize E#paginationEnabled; searchableFields, showSearch E#trimmedSearch E#searchEnabled; rowHeight E#ObjectGrid (resolveRowHeightMode); grouping, aggregations E#grouping E#groupValueFormatter; rowColor E#getRowClassName; conditionalFormatting E#predicateFields E#rules; selection, selectable E#ObjectGrid; rowActions E#rowActionsList; batchActions, bulkActions E#declaredBulkActions; bulkActionDefs E#legacyBulkNames; navigation E#navigation; editable, singleClickEdit, resizable, resizableColumns, reorderableColumns E#dataTableSchema; frozenColumns E#effectiveFrozenColumns; showColumnTypeIcons E#fieldMeta; exportOptions, operations E#declared; label, title E#fileNameFor E#dataTableSchema; data, staticData E#getDataConfig; [#20694] description objectui @db11afd4967c packages/plugin-grid/src/ObjectGrid.tsx#resolvedDescription (drawn as `gridDescription`); emptyState objectui @db11afd4967c packages/plugin-grid/src/ObjectGrid.tsx#authoredEmptyState (DataEmptyState in renderedGridContent); keyboardNavigation 0 read points at objectui @db11afd4967c, 15 hit lines at objectui @ab1879721595 and at objectui @b9814b334 against 3 then 4 for the control `schema.editable` (the fourth objectui @b9814b334 packages/plugin-grid/src/ObjectGrid.tsx#carriesConcurrencyToken); [34] object-grid.description, object-grid.emptyState (B = objectui @b9814b334 packages/plugin-grid/src/ObjectGrid.tsx): description objectui @db11afd4967c packages/plugin-grid/src/ObjectGrid.tsx#resolvedDescription; emptyState title/message B#authoredEmptyTitle (resolveInlineI18nLabel, objectui#11227 carried by 6158e4c93; raw at objectui @89cad75d5570) drawn in B#renderedGridContent, link (objectui#12270, b434f5f47) B#renderedGridContent (EmptyStateLink); [35] object-grid.columns (ListViewSchema.shape.columns; A = objectui @ab1879721595 packages/plugin-grid/src/ObjectGrid.tsx): A#normalizeColumns (first-entry dispatch) A#cols A#fieldName (resolvesToDataColumn); the retired `colOverride?.options` read: A#groupValueFormatter A#rawOptions (objectui b0bf413, objectui#11544); the footer summary's off-contract column keys objectui @ab1879721595 packages/plugin-grid/src/useColumnSummary.ts#columnHints; [36] object-grid.fields (O = objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx): O#schemaFields O#fieldsToShow O#generateColumns; the host hand-off projection O#getSelectFields; [37] object-grid.filter: objectui @53ded82b packages/plugin-grid/src/ObjectGrid.tsx#ObjectGrid (toFilterNode before `$filter`); [38] object-grid.sort (S = objectui @53ded82b packages/plugin-grid/src/ObjectGrid.tsx): S#schemaSort S#cols (the fetch path's string arm and array arm) S#declaredSort (parseSchemaSort, `TableSortItem[]`); the registration's array input objectui @53ded82b packages/plugin-grid/src/index.tsx (`{ name: 'sort', type: 'array' }`); [39] object-grid.defaultSort (REMOVED, tombstone; D = objectui @190fbd01d packages/plugin-grid/src/ObjectGrid.tsx): D#cols (`$orderby` fallback) and D#declaredSort (`[schema.defaultSort]`); [40] object-grid.pagination (D = objectui @d18322415 packages/plugin-grid/src/ObjectGrid.tsx): pageSize D#lastFindParamsRef D#schemaPageSize D#pageSize; pageSizeOptions D#dataTableSchema; presence D#paginationEnabled; the registry input objectui @d18322415 packages/plugin-grid/src/index.tsx (`pagination`, type object); [41] object-grid members read at objectui @89cad75d55 (O = objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx): rowHeight O#resolveRowHeightMode; aggregations O#groupHeaders (useGroupedData) O#serverGroupSource (useServerGroupHeaders); conditionalFormatting O#getRowStyle (resolveConditionalFormatting); rowColor O#getRowClassName (useRowColor); selection and selectable O#ObjectGrid (the selection-mode branch) O#dataTableSchema (`selectable`), read by objectui @89cad75d55 packages/components/src/renderers/complex/data-table.tsx#resolveSelectionMode; rowActions O#rowActionsDeclared; bulkActions, batchActions O#declaredBulkActions (`batchActions ?? bulkActions`); bulkActionDefs O#legacyBulkNames (resolveBulkActions); [42] object-grid.navigation: objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx#navigation (useNavigationOverlay); [43] object-grid.keyboardNavigation (built by objectui 154075ab1, objectui#11068; declared ahead of its reader, which read nothing at objectui @db11afd4967c): objectui @b9814b334 packages/plugin-grid/src/ObjectGrid.tsx#dataTableSchema (`schema.keyboardNavigation ?? inlineEditable`) with objectui @b9814b334 packages/plugin-grid/src/ObjectGrid.tsx#inlineEditable; objectui @b9814b334 packages/components/src/renderers/complex/data-table.tsx#DataTableRenderer (default false, `role=\"grid\"`, the roving tabIndex), objectui @b9814b334 packages/components/src/renderers/complex/data-table.tsx#navigationTarget and objectui @b9814b334 packages/components/src/renderers/complex/data-table.tsx#handleCellKeyDown; [44] object-grid.resizableColumns (REMOVED, tombstone): objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx#dataTableSchema (`schema.resizable ?? schema.resizableColumns ?? true`); [45] object-grid.operations (GridOperationsSchema; O = objectui @89cad75d55 packages/plugin-grid/src/ObjectGrid.tsx): create O#dataTableSchema (showAddRow); update, delete O#wantDeleteAction; export O#handleExport O#dataTableSchema (exportable) O#exportEnabled; a declared block replaces the default O#explicitOperations; [46] object-grid.data: the registry input objectui @b9814b334 packages/plugin-grid/src/index.tsx#GRID_QUERY_INPUTS (`{ name: 'data', type: 'object' }`, held by gridDataInputContract.test.ts); re-read 2026-10-15, first cited sha-less; [47] object-metric.aggregate (ObjectMetricAggregateSchema; M = objectui @89cad75d55 packages/plugin-dashboard/src/ObjectMetricWidget.tsx): field, function M#computeOne; function also M#fieldUnitApplies (answersInFieldUnit) M#inferredFormat (min/max width); groupBy M#computeOne (objectAggregateSpecQuery; floored at `'_all'`) typed on M#ObjectMetricWidgetProps (`ChartAggregate['groupBy']`); objectui's unit-rule pin ObjectMetricWidget.countNotCurrency-10356.test.tsx mounts one tile per AggregationFunction member; [48] object-metric.trend (ObjectMetricTrendSchema; W = objectui @89cad75d55 packages/plugin-dashboard/src/): drawn in W MetricWidget.tsx#MetricWidget (`{value}%`, direction arrow), caption W MetricWidget.tsx#localizedTrendLabel (pickLocalized); declared on W MetricWidget.tsx#MetricWidgetProps, mirrored on W ObjectMetricWidget.tsx#ObjectMetricWidgetProps; replaced by a derived trend in W ObjectMetricWidget.tsx#effectiveTrend; [49] object-metric.drillDown (ObjectMetricDrillDownSchema; A = objectui @ab1879721595): enabled A packages/plugin-dashboard/src/ObjectMetricWidget.tsx#drillEnabled (isDrillEnabled); title A packages/plugin-dashboard/src/ObjectMetricWidget.tsx#drawerTitle (resolveDrillTitle against an empty event); target, columns, maxRows A packages/plugin-dashboard/src/ObjectMetricWidget.tsx#drillDrawer (DrillDownDrawer); `filter` / `mode` refused as objectui's own A packages/types/src/data-display.ts#ObjectMetricDrillDownConfig refuses them; measured writers, objectui's drill-down member pins A packages/plugin-dashboard/src/__tests__/objectMetricDrillDownMembers-8071.test.tsx and A packages/plugin-dashboard/src/__tests__/ObjectMetricWidget.drillRoutedToSharedDrawer-8970.test.tsx; [50] object-metric.drillDown.report (R = objectui @2e818d0b51ec packages/plugin-dashboard/src/): handed verbatim in R ObjectMetricWidget.tsx#drillDrawer; drawn when R DrillDownDrawer.tsx#isDatasetBoundReport holds (R DrillDownDrawer.tsx#isReportDrill), joining the metric filter into `runtimeFilter` (R DrillDownDrawer.tsx#body); typed `SpecReportInput` in objectui @2e818d0b51ec packages/types/src/data-display.ts; the fork measured at objectui @ab1879721595, both files byte-identical at objectui main 2abec3a96; [51] object-metric.compareTo (ObjectMetricCompareToSchema; A = objectui @ab1879721595): A packages/plugin-dashboard/src/ObjectMetricWidget.tsx#comparisonFilter (second aggregate over shiftFilterByCompareTo) and A packages/plugin-dashboard/src/ObjectMetricWidget.tsx#derivedTrend (compareToTrendLabelKey); both dispatch on `kind === 'previousYear'` in A packages/core/src/utils/compare-to.ts#shiftFilterByCompareTo and A packages/core/src/utils/compare-to.ts#compareToTrendLabelKey; `dimension` \"deliberately never read on this path\" in that module's header; [52] object-metric (ObjectMetricPropsSchema): objectui @eb7f586b packages/plugin-dashboard/src/ObjectMetricWidget.tsx#ObjectMetricWidgetProps (the complete destructured read set); [53] object-metric.icon (B = objectui @b9814b334 packages/plugin-dashboard/src/): published by B index.tsx#ObjectMetricBlock (`{ name: 'icon', type: 'string' }`); destructured and forwarded by B ObjectMetricWidget.tsx#ObjectMetricWidget; resolved and drawn by B MetricWidget.tsx#MetricWidget (getLazyIcon, guarded on a string); vocabulary objectui @b9814b334 packages/components/src/lib/lazy-icon.tsx#getLazyIcon; not B MetricCard.tsx (off this key's path); [54] object-metric.filter: the analytics wire lowering objectui @53ded82b packages/data-objectstack/src/index.ts#lowerAnalyticsFilterForWire (objectui#7754); before it the adapter at objectui @a472b07 posted an array verbatim (a 400, #15828); [55] object-kanban.columns[] lane (ObjectKanbanLaneSchema; K = objectui @89cad75d55 packages/plugin-kanban/src/): id K index.tsx#bucketCardsIntoColumns; title K ObjectKanban.tsx#localizeColumn; cards K index.tsx#bucketCardsIntoColumns (kept ahead of the bucketed records); limit K KanbanImpl.tsx#isLimitExceeded; className K KanbanImpl.tsx#KanbanColumnView; collapsed K KanbanImpl.tsx#isColumnCollapsed; [56] object-kanban (ObjectKanbanPropsSchema; E = objectui @eb7f586b packages/plugin-kanban/src/ObjectKanban.tsx): columns E#effectiveColumns; filter E#fetchData (`$filter`); data E#boundData; cardTitle, titleField E#explicitTitleField; cardFields E#explicitCardFields; swimlaneField, grouping E#effectiveSwimlaneField; coverImageField, conditionalFormatting via objectui @eb7f586b packages/plugin-kanban/src/index.tsx#KanbanRenderer (the spread of the authored bag); limit objectui @b9814b334 packages/plugin-kanban/src/ObjectKanban.tsx#query (`$top: resolveRowLimit(schema.limit, DEFAULT_KANBAN_FETCH_BATCH_SIZE)`), first re-read at objectui @87af769e9 where `$top: schema.limit ?? DEFAULT_KANBAN_LIMIT` had become resolveRowLimit; [57] object-kanban.columns (the first-entry dispatch): objectui @89cad75d55 packages/plugin-kanban/src/ObjectKanban.tsx#effectiveColumns (string arm only without `groupBy`); [58] object-kanban.filter: objectui @53ded82b packages/plugin-kanban/src/ObjectKanban.tsx#ObjectKanban (`$filter: schema.filter`, verbatim, lowered by ObjectStackAdapter.convertQueryParams through translateFilterArray); [59] object-kanban.limit (B = objectui @b9814b334): query B packages/plugin-kanban/src/ObjectKanban.tsx#query (`$top: resolveRowLimit(schema.limit, DEFAULT_KANBAN_FETCH_BATCH_SIZE)`) with B packages/plugin-kanban/src/ObjectKanban.tsx#DEFAULT_KANBAN_FETCH_BATCH_SIZE and the resolved filter B packages/plugin-kanban/src/ObjectKanban.tsx#filterScope; mapping B packages/plugin-kanban/src/index.tsx#OBJECT_KANBAN_DATA_SOURCE (`limit: 'limit'`); type B packages/types/src/objectql.ts#ObjectKanbanSchema (`limit?: number`); docs B content/docs/plugins/plugin-kanban.mdx (`limit: 250` snippet and Properties row); precedence B packages/react/src/element-data-source/ElementDataSourceGate.tsx#useElementDataSourceSchema (binding cap over this key; a view's pagination.pageSize only when unset) and B packages/react/src/element-data-source/ElementDataSourceGate.tsx#isUsableRowLimit; the saved-view fallback B packages/core/src/data-scope/element-data-source.ts#savedViewRawLimit; first re-read at objectui @87af769e9 2026-09-20; [60] object-master-detail-form (ObjectMasterDetailFormPropsSchema): objectui @eb7f586b packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailForm; auto-derivation objectui @eb7f586b packages/plugin-form/src/deriveMasterDetail.ts; the `formType` pair objectui's MasterDetailFormSchema declares; [61] object-kanban.quickAdd (RETIRED, tombstone; K = objectui @b9814b334 packages/plugin-kanban/src/): K index.tsx#KanbanRenderer passes `quickAdd` / `onQuickAdd` (the host-mounted React component); gated on both in K KanbanImpl.tsx#KanbanColumnView; K KanbanBoardCore.tsx#KanbanBoardCoreProps reads neither off `schema` (objectui#11234); K ObjectKanban.tsx#ObjectKanban names `quickAdd` and `onQuickAdd` 2 times each (both in comments) against 11 for `onCardClick` (method: occurrences in that file, re-counted 2026-10-15); no `kanban-ui` registration at that sha (objectui#8257; the name survives only in tests and the changelog); through objectui @db11afd49 the board's spread forwarded the key; [62] object-kanban.conditionalFormatting (A = objectui @ab1879721595): A packages/plugin-kanban/src/KanbanBoardCore.tsx#processedColumns hands it to the board; A packages/plugin-kanban/src/KanbanImpl.tsx#getCardStyles evaluates it through A packages/core/src/evaluator/listConditional.ts#resolveConditionalFormatting, the evaluator of A packages/plugin-grid/src/ObjectGrid.tsx#getRowStyle; objectui's declaration A packages/types/src/zod/objectql.zod.ts#KanbanConditionalFormattingRuleSchema and A packages/types/src/objectql.ts#KanbanConditionalFormattingRule (objectui#11522, landed by objectui#11532 c73cdb5695); the stored-dialect arms in A packages/plugin-kanban/src/KanbanImpl.tsx#getCardStyles; blank-predicate fallback A packages/core/src/evaluator/listConditional.ts#evalRowPredicate; the four reader files byte-identical at objectui main 2e818d0b51; the writer census also read objectui at main; [63] object-kanban.navigation (K = objectui @b9814b334 packages/plugin-kanban/src/ObjectKanban.tsx): K#navConfig (`schema.navigation ?? { mode: 'drawer' }`) K#navigation (useNavigationOverlay) K#boardView (card click) K#renderRecordOverlay (NavigationOverlay); first re-derived at objectui @87af769e9, where the `(schema as any)` cast was still spelled; [64] object-calendar flat field keys (OBJECT_CALENDAR_FLAT_FIELD_GUIDANCE): objectui @b9814b334 packages/plugin-calendar/src/ObjectCalendar.tsx#getCalendarConfig (the backward-compat flat fallback); re-read 2026-10-15, first cited sha-less; [65] object-calendar (ObjectCalendarPropsSchema; C = objectui @eb7f586b packages/plugin-calendar/src/ObjectCalendar.tsx): calendar C#getCalendarConfig; defaultView C#schemaDefaultView; locale, loading via the registry shell objectui @eb7f586b packages/plugin-calendar/src/index.tsx; [66] object-calendar.calendar (CalendarConfigSchema by reference; C = objectui @89cad75d55 packages/plugin-calendar/src/ObjectCalendar.tsx): C#getCalendarConfig returns the block; its five bindings read in C#queryFilter, C#handleEventDropDefault and C#submitQuickCreate; [67] object-calendar.filter: objectui @53ded82b packages/plugin-calendar/src/ObjectCalendar.tsx#fetchData (`$filter: schema.filter`, verbatim); [68] object-tree.navigation: objectui @89cad75d55 packages/plugin-tree/src/ObjectTree.tsx#navigation (useNavigationOverlay); [69] object-calendar.sort: objectui @53ded82b packages/plugin-calendar/src/ObjectCalendar.tsx#fetchData (`$orderby: convertSortToQueryParams(schema.sort)`), whose sink objectui @53ded82b packages/core/src/utils/sort-query.ts#convertSortToQueryParams still lowered the string clause there; no `sort` input on objectui @53ded82b packages/plugin-calendar/src/index.tsx; [70] object-timeline flat config keys (OBJECT_TIMELINE_FLAT_CONFIG_GUIDANCE): the backward-compat flat rung (with the `dateField` alias) in objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#startDateField and its siblings; emitted by objectui @b9814b334 packages/plugin-list/src/ListView.tsx#viewComponentSchema (`case 'timeline'`); re-read 2026-10-15, first cited sha-less; [71] object-calendar.navigation (C = objectui @b9814b334 packages/plugin-calendar/src/ObjectCalendar.tsx): C#navConfig (`schema.navigation ?? { mode: 'drawer' }`) C#navigation (useNavigationOverlay) C#calendarView (event click) C#renderRecordOverlay (NavigationOverlay); [72] object-timeline.mapping (ObjectTimelineMappingSchema; A = objectui @ab1879721595 packages/plugin-timeline/src/ObjectTimeline.tsx; unchanged at objectui main 94985a92ba): title A#titleField; date A#startDateField; description A#descField; variant A#variantField; declared on A#ObjectTimelineProps (`mapping`) and A#TimelineMappingSchema; [73] object-timeline.items[] arms (R = objectui @2e818d0b51ec packages/plugin-timeline/src/renderer.tsx; unchanged at objectui main 2abec3a96): gantt bar startDate / endDate R#dimensions R#calculateDateRange, variant and title in R#TimelineRenderer (the bar and its tooltip); feed entry time R#dateLabel and title, description, variant, icon, content (renderChildren), className in R#TimelineRenderer; gantt row label R#TimelineRenderer (TimelineGanttLabel), items R#classifyGanttRows; vocabulary objectui @2e818d0b51ec packages/types/src/data-display.ts#TimelineItemVariant; element shape and refinement objectui @2e818d0b51ec packages/types/src/zod/data-display.zod.ts#TimelineItemSchema and objectui @2e818d0b51ec packages/types/src/zod/data-display.zod.ts#timelineItemsFitVariant; [74] object-form.layout retired values `inline` / `grid` (OBJECT_FORM_LAYOUT_RETIRED; P = objectui @f8a9d0fb0 packages/plugin-form/src/): folded to 'vertical' in P ObjectForm.tsx#SimpleObjectForm; only 'vertical' / 'horizontal' passed through by P ObjectForm.tsx#drawerLayout, ObjectForm.tsx#modalLayout, DrawerForm.tsx#formLayout, ModalForm.tsx#formLayout; 'vertical' hard-coded in P TabbedForm.tsx#TabbedForm, SplitForm.tsx#panes, WizardForm.tsx#WizardForm; [75] object-form.mobile (ObjectFormMobileSchema; F = objectui @89cad75d55 packages/plugin-form/src/ObjectForm.tsx): F#mobileOpts (the flat arm); stickyActions F#formSchema; stepper, stepperMinFields, stepperFieldsPerStep F#stepperMode; fullscreenLongText F#fieldsWithMobile; the `data-mobile-form` marker in F#SimpleObjectForm; [76] object-form.fields and object-master-detail-form.fields (formFieldNameList): objectui @ab1879721595 packages/plugin-form/src/MasterDetailForm.tsx#parentSchema (hands `fields` over verbatim), read by objectui @ab1879721595 packages/plugin-form/src/ObjectForm.tsx#fieldsToShow and objectui @ab1879721595 packages/plugin-form/src/flatFields.ts#buildFlatFields (a stored `{ name }` entry drawn by name; any other object entry warned by warnUnresolvedTopLevelField); unchanged at objectui main 94985a92ba; the retired inline field entry an author was taught by objectui @ab1879721595 skills/objectui/guides/page-builder.md (its object-form example; first cited sha-less); [77] object-form.customFields[] `grid` widget keys (minRows, maxRows, allowAdd, allowDelete, allowReorder, totalField, addLabel, sortField; W = objectui @9dfaca654311 packages/fields/src/widgets/GridField.tsx): declared on objectui @9dfaca654311 packages/types/src/field-types.ts#GridFieldMetadata, carried by objectui @9dfaca654311 packages/types/src/form.ts#FormField, mirrored in objectui @9dfaca654311 packages/types/src/zod/form.zod.ts#FormFieldSchema; read W#cfg W#allowAdd W#removeRow (minRows) W#totalField W#showTotal W#emit (sortField) W#GridFieldBody (maxRows, allowReorder, addLabel); objectui#11610 (merge 2abec3a96c) camelCased them; the parent-field `totalField` hand-off objectui @9dfaca654311 packages/plugin-form/src/LineItemsPanel.tsx#gridField and objectui @9dfaca654311 packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailLines; the writer shape (one `grid` field carrying all eight camelCase keys) objectui @9dfaca654311 examples/schema-catalog/src/schemas/fields-grid/line-items-grid.json; [78] object-form.customFields[] retired snake_case `grid` keys (OBJECT_FORM_GRID_WIDGET_SNAKE_KEYS): objectui @9dfaca654311 packages/types/src/field-types.ts#GRID_FIELD_RETIRED_KEYS; refused by objectui @9dfaca654311 packages/fields/src/widgets/GridField.tsx#GridField, tombstoned on objectui @9dfaca654311 packages/types/src/field-types.ts#GridFieldMetadata and objectui @9dfaca654311 packages/types/src/form.ts#FormField, named in objectui @9dfaca654311 packages/types/src/zod/form.zod.ts#FormFieldSchema (retiredGridFieldKey); [79] object-form.customFields[].validation: objectui @2e818d0b51ec packages/components/src/renderers/form/form.tsx#rules (inside renderFormField: minLength/maxLength/min/max spread as `{ value, message }`, `required` read only as a message string); objectui's declaration objectui @2e818d0b51ec packages/types/src/form.ts#FieldValidationRules; [80] object-timeline.navigation: objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#navigation (useNavigationOverlay) and objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#effectiveSchema (entry click, overlay); re-read 2026-10-15, first cited sha-less, when the read still spelled `(schema as any).navigation`; [81] object-form.customFields[].options[] (buildObjectFormRuntimeOption; F = objectui @2e818d0b51ec packages/components/src/renderers/form/form.tsx): label, value F#BuiltinSelectControl and objectui @2e818d0b51ec packages/core/src/evaluator/optionRules.ts#optionDisplayLabel (the four option widgets); visibleWhen F#cascade (resolveCascadingOptions; each widget's useCascadingOptions); description objectui @2e818d0b51ec packages/fields/src/widgets/LookupField.tsx#filteredOptions; `value` a runtime value: F#BuiltinSelectControl (matchOptionValue), objectui @2e818d0b51ec packages/types/src/zod/form.zod.ts#SelectOptionSchema (deliberate divergence comment), objectui @2e818d0b51ec packages/plugin-designer/src/ObjectManager.tsx#formSchema (writes `{ label, value }` pairs); unchanged at objectui main fd060f076; [82] object-form.customFields[] and the inline section entry (buildObjectFormRuntimeField; F = objectui @2e818d0b51ec packages/components/src/renderers/form/form.tsx, W = objectui @2e818d0b51ec packages/fields/src/widgets/): merge objectui @2e818d0b51ec packages/plugin-form/src/customFieldsMerge.ts#mergeCustomFields from objectui @2e818d0b51ec packages/plugin-form/src/ObjectForm.tsx#generateField; carrier F#builtinBranchHasNoControl (`field.field || field`); field row F#renderFormField (name, label, description, type, required, disabled, readonly, hidden, colSpan via F#colSpanClass), widget F#resolvedType, validation F#rules, the three `*When` rules F#ruleState, placeholder and inputType F#builtinBranchHasNoControl, options and dependsOn F#cascade, multiple F#resolvedType; layout objectui @2e818d0b51ec packages/plugin-form/src/autoLayout.ts#resolveColSpan (span, colSpan) and objectui @2e818d0b51ec packages/plugin-form/src/fieldGroups.ts#deriveFieldGroupSections (group); widgets W TextAreaField.tsx#rows, FileField.tsx#multiple (accept, multiple), VectorField.tsx#dimensions, LookupField.tsx#referenceTo, NumberField.tsx#NumberField (min, max), F#renderFieldComponent (minLength, maxLength), FormulaField.tsx#returnType, SummaryField.tsx#summaryType, GridField.tsx#allColumns (columns); read and refused: visibleOn F#ruleState, condition F#legacyConditionCel, id F#fieldKey; a measured writer, the object-manager create / edit dialog (a `formType: 'modal'` block): objectui @b9814b334 packages/plugin-designer/src/ObjectManager.tsx#formSchema (first cited sha-less); [83] object-form / object-master-detail-form sections[].fields[] `{ field }` entry (buildObjectFormSectionFieldEntry): objectui @2e818d0b51ec packages/plugin-form/src/sectionFields.ts#resolveSectionEntry (names an object field by `field`, every other key overrides its generated definition; label/placeholder/helpText copied as they stand); [84] object-form / object-master-detail-form sections[] (buildObjectFormSection; F = objectui @2e818d0b51ec packages/plugin-form/src/ObjectForm.tsx): handed over verbatim by objectui @2e818d0b51ec packages/plugin-form/src/MasterDetailForm.tsx#parentSchema; name, label F#sectionCtx (heading) F#inertPredicateSections (per-formType maps); collapsible, collapsed F#collapse (resolveSectionCollapse); visibleWhen F#sectionCtx (divider-row predicate); columns F#secCols F#clampCol (a NUMBER only); pane objectui @2e818d0b51ec packages/plugin-form/src/SplitForm.tsx#paneOf; the inline runtime field drawn as it stands in objectui @2e818d0b51ec packages/plugin-form/src/sectionFields.ts#resolveSectionEntry; objectui's own declaration objectui @2e818d0b51ec packages/types/src/objectql.ts#ObjectFormSection; [85] object-form (ObjectFormPropsSchema: the UNION of `schema.*` reads of the simple form and the sub-forms it forwards the bag into): objectui @eb7f586b packages/plugin-form/src/ObjectForm.tsx#ObjectForm, with TabbedForm, WizardForm, SplitForm, DrawerForm, ModalForm under objectui @eb7f586b packages/plugin-form/src/; `layout` `inline` / `grid` folded to `vertical` there while the registry inputs and the designer palette offered them; [86] object-form.fields (the `{ name }` entry retired from the authoring faces by objectui#11550): a census of objectui @ab1879721595 found it written only by fixtures probing the stored read and the refusal; [87] object-form.customFields: objectui @2e818d0b51ec packages/plugin-form/src/customFieldsMerge.ts#mergeCustomFields (merged over the generated fields); at objectui @2e818d0b51ec the open runtime field spelled the eight `grid` widget keys in snake_case, camelCased by objectui#11610 (carried at objectui @9dfaca654311); [88] object-form.contentLayout: objectui @89cad75d55 packages/plugin-form/src/ModalForm.tsx#renderContent (`schema.contentLayout === 'tabbed' && groups.length > 1`), declared on objectui @89cad75d55 packages/plugin-form/src/ModalForm.tsx#ModalFormSchema; [89] object-form.submitBehavior: objectui @89cad75d55 packages/plugin-form/src/ObjectForm.tsx#handleSubmit and objectui @89cad75d55 packages/plugin-form/src/WizardForm.tsx#handleStepSubmit (switch on `kind`), redirect `url` judged by objectui @89cad75d55 packages/plugin-form/src/submitRedirect.ts#resolveSubmitRedirect (FormViewSchema.safeParse); [90] object-form.navigateOnSuccess: objectui @89cad75d55 packages/plugin-form/src/successBehavior.ts#resolveSuccessNavigate, called from objectui @89cad75d55 packages/plugin-form/src/ObjectForm.tsx#handleSubmit and objectui @89cad75d55 packages/plugin-form/src/WizardForm.tsx#handleStepSubmit; a refused value reported on the success toast in objectui @89cad75d55 packages/plugin-form/src/ObjectForm.tsx#handleSubmit; [91] object-master-detail-form.details[] (the eleven entry keys): objectui @31971ff1e28f packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailDetailConfig and every `d.KEY` read in objectui @31971ff1e28f packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailLines; re-read at objectui @89cad75d5570 for #21589; [92] object-master-detail-form.details[].sortField (REMOVED, tombstone): objectui @89cad75d5570 packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailDetailConfig (no `sortField` member), derived by objectui @89cad75d5570 packages/plugin-form/src/deriveMasterDetail.ts#deriveDetail (SORT_FIELD_NAMES) and handed to the grid as `sort_field` in objectui @89cad75d5570 packages/plugin-form/src/MasterDetailForm.tsx#MasterDetailLines; at objectui @9dfaca654311 the same hand-off spells `sortField` (objectui#11610) from objectui @9dfaca654311 packages/plugin-form/src/deriveMasterDetail.ts#deriveDetail; an entry the renderer does not resolve loads no child schema (objectui @9dfaca654311 packages/plugin-form/src/MasterDetailForm.tsx#entries); [93] object-master-detail-form.sections, .fields: objectui @2e818d0b51ec packages/plugin-form/src/MasterDetailForm.tsx#parentSchema (handed to the parent object-form verbatim); [94] object-map flat config keys (OBJECT_MAP_FLAT_CONFIG_GUIDANCE): objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#getMapConfig (branch 2) and objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#warnOnShadowedFlatMapKeys and objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#FLAT_MAP_CONFIG_KEYS; emitted by objectui @b9814b334 packages/plugin-view/src/ObjectView.tsx#ObjectView and objectui @b9814b334 packages/plugin-list/src/ListView.tsx#viewComponentSchema (`case 'map'`); re-read 2026-10-15, first cited sha-less at the then pin; [95] object-map (ObjectMapPropsSchema, per key; P = objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx, C = objectui @b9814b334 packages/core/src/utils/record-source.ts, I = objectui @b9814b334 packages/plugin-map/src/index.tsx): data P#getDataConfig C#resolveRecordSourceConfig (rung 1; the deleted array head and its carriers are recorded in the docblock above P#FLAT_MAP_CONFIG_KEYS); staticData C#resolveRecordSourceConfig (rung 2); objectName C#resolveRecordSourceConfig (rung 3) P#navigation P#warnOnLegacyFilterMapConfig P#warnOnTopLevelStyleUrl P#warnOnShadowedFlatMapKeys (cache keys) P#recordSourceObjectName (useSettledSchema); filter P#queryFilter P#fetchData (`$filter` on both fetches); sort P#fetchData (convertSortToQueryParams); map P#getMapConfig (branch 1; validates against ObjectMapConfigSchema) I#ObjectMapRenderer (its registration's `map` input); mapStyle P#getMapConfig (`schema.mapStyle || schema.map?.style`) I#ObjectMapRenderer; navigation P#navigation I#ObjectMapRenderer; enableClustering P#clusteredData I#ObjectMapRenderer; measured and not declared: style P#warnOnTopLevelStyleUrl (read only to say it is not a map style); [96] object-map.filter: objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#queryFilter (useResolvedFilter) and objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#fetchData (`$filter` on the inline and the object fetch); the registration's `filter` input objectui @b9814b334 packages/plugin-map/src/index.tsx#ObjectMapRenderer; [97] object-map.sort: objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#fetchData (convertSortToQueryParams to `$orderby`, both fetches); the registration's array-form `sort` input (objectui#8220) objectui @b9814b334 packages/plugin-map/src/index.tsx#ObjectMapRenderer; [98] object-map.navigation: objectui @89cad75d55 packages/plugin-map/src/ObjectMap.tsx#navigation (hands `schema.navigation` to useNavigationOverlay) and objectui @89cad75d55 packages/react/src/hooks/useNavigationOverlay.ts#useNavigationOverlay (`navigation?.mode ?? 'page'`); [99] object-gantt flat config keys (OBJECT_GANTT_FLAT_CONFIG_GUIDANCE): objectui @b9814b334 packages/plugin-gantt/src/ObjectGantt.tsx#FLAT_GANTT_CONFIG_KEYS and objectui @b9814b334 packages/plugin-gantt/src/ObjectGantt.tsx#getGanttConfig (branch 2 reads them; a present `gantt` block is taken whole and the flat keys beside it named as ignored); re-read 2026-10-15, first cited sha-less at the then pin; [100] object-gantt.markers (objectGanttMarker): G = objectui @ab1879721595 packages/plugin-gantt/src/GanttView.tsx: objectui @ab1879721595 packages/plugin-gantt/src/ObjectGantt.tsx#ganttView (hands `schema.markers` to GanttView verbatim); date G#markers (time-zone re-base) G#resolvedMarkers (axis mapping, drops unparsable or out-of-range dates); color G#resolvedMarkers (`m.color || 'hsl(var(--primary))'`); drawn in G#GanttView and in G#buildExportSvg; the declaration taken: objectui @ab1879721595 packages/types/src/objectql.ts#ObjectGanttSchema and objectui @ab1879721595 packages/types/src/zod/objectql.zod.ts#ObjectGanttSchema (`markers`); unchanged at objectui main 94985a92ba; [101] object-gantt (ObjectGanttPropsSchema, per key; P = objectui @b9814b334 packages/plugin-gantt/src/ObjectGantt.tsx, C = objectui @b9814b334 packages/core/src/utils/record-source.ts): data P#rawDataConfig C#resolveRecordSourceConfig (rung 1); staticData C#resolveRecordSourceConfig (rung 2); objectName (rung 3) P#persistLayoutKey P#navigation; filter P#queryFilter P#reload (`$filter`); sort P#reload (convertSortToQueryParams to `$orderby`); gantt P#getGanttConfig (branch 1, validated against the spec's GanttConfigSchema) and objectui @b9814b334 packages/plugin-gantt/src/index.tsx#ObjectGanttRenderer (its registration's `gantt` object input); navigation P#navConfig P#navigation; label P#ganttView (resolveInlineI18nLabel, export file-name chain); skipWeekends, holidays P#workingCalendar; persistLayout, viewName P#persistLayoutKey; markers, criticalPath, showBaselines, readOnly, mobileReadOnly P#ganttView, readOnly also P#renderRecordOverlay; measured and not declared: title (absent from the P#ganttView export-name chain), row cap (P#reload spreads nonGridRowCeilingQuery, marked not authorable), search and searchableFields P#searchTerm P#reload (host-generated by objectui @b9814b334 packages/plugin-list/src/ListView.tsx#viewComponentSchema, its `case 'gantt'` arm); [102] object-gantt.navigation: objectui @89cad75d55 packages/plugin-gantt/src/ObjectGantt.tsx#navConfig (`schema.navigation ?? { mode: 'drawer' }`) and objectui @89cad75d55 packages/plugin-gantt/src/ObjectGantt.tsx#navigation (useNavigationOverlay); [103] object-tree flat config keys (OBJECT_TREE_FLAT_CONFIG_GUIDANCE: parentField, labelField, titleField, fields, defaultExpandedDepth): objectui @b9814b334 packages/plugin-tree/src/ObjectTree.tsx#getTreeConfig (reads the flat spellings ahead of the `tree` block; the `schema.titleField` rung's retirement is recorded in its docblock above `fieldKey`, objectui#8841), objectui @b9814b334 packages/plugin-list/src/ListView.tsx#viewComponentSchema (its `case 'tree'` arm emits parentField, `labelField: treeCfg.labelField || 'name'`, fields, defaultExpandedDepth and no titleField since objectui 3fd862510), objectui @b9814b334 packages/plugin-tree/src/index.tsx#treeInputs (`{ name: 'tree', type: 'object' }`, no flat input); [104] object-tree (ObjectTreePropsSchema, per key; P = objectui @b9814b334 packages/plugin-tree/src/ObjectTree.tsx, C = objectui @b9814b334 packages/core/src/utils/record-source.ts): data P#dataConfig (resolveRecordSourceConfig with the `view-data` arm) and C#resolveRecordSourceConfig (rung 1, authoredDataIsOnTheDeclaredArm); staticData C#resolveRecordSourceConfig (rung 2); objectName (rung 3) P#headerObjectName P#navigation P#renderRecordOverlay (each behind resolveRecordSourceObjectName) P#parentField (detectParentField); filter P#queryFilter (useResolvedFilter) P#fetchData (`$filter` on the object fetch and on the inline ValueDataSource query); tree P#getTreeConfig and objectui @b9814b334 packages/plugin-tree/src/index.tsx#treeInputs; navigation P#navigation (useNavigationOverlay); host-prop `data` (not the authored key) P#passed; measured and not declared: sort (no `$orderby` in P#fetchData), row cap (P#fetchData spreads nonGridRowCeilingQuery); [105] object-tree.objectName (optional because no ElementDataSourceGate wiring): objectui @b9814b334 packages/plugin-tree/src/index.tsx#ObjectTreeRenderer has 0 occurrences of `ElementDataSourceGate` (re-counted 2026-10-15), against controls objectui @b9814b334 packages/plugin-gantt/src/index.tsx#ObjectGanttRenderer, packages/plugin-grid/src/index.tsx, packages/plugin-calendar/src/index.tsx (3 each) and packages/plugin-map/src/index.tsx#ObjectMapRenderer (4); method: occurrences of the identifier in each `src/index.tsx`; [106] object-timeline (ObjectTimelinePropsSchema, per key; P = objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx, R = objectui @b9814b334 packages/plugin-timeline/src/renderer.tsx, I = objectui @b9814b334 packages/plugin-timeline/src/index.tsx): objectName P#ObjectTimeline (fetch gate) P#useSettledSchema P#fetchesForItself P#invalidationNonce P#fetchData P#handleRefresh P#effectiveItems P#navigation; timeline P#timelineConfig; filter P#queryFilter P#filterKey P#fetchData; sort P#sortKey P#fetchData (convertSortToQueryParams); limit P#fetchData (resolveRowLimit) P#DEFAULT_TIMELINE_LIMIT P#describeRefusedRowLimit; items P#hasInlineItems P#fetchesForItself P#effectiveItems P#hasAuthoredItems; data P#hasInlineData P#fetchesForItself P#rawData; descriptionField P#descField; mapping P#titleField P#startDateField P#descField P#variantField; variant P#hasAuthoredItems (the `timeline-unsupported-variant` refusal, objectui#6655) and I#OBJECT_TIMELINE_INPUTS; navigation P#navigation P#effectiveSchema; dateFormat, rowLabel, minDate, maxDate R#TimelineRenderer (rowLabel and minDate/maxDate in its gantt branch, R#findUnusableGanttDate) off P#effectiveSchema; measured and not declared: bind P#boundData (useDataScope), className P#effectiveSchema; [107] object-timeline.data (read off React props, not `schema`; the prop channel is SchemaRenderer's `properties.*` hoist, objectui @b9814b334 packages/react/src/SchemaRenderer.tsx#SchemaRenderer, with `object-timeline` absent from objectui @b9814b334 packages/core/src/utils/record-source.ts#RECORD_SOURCE_DATA_ARM_BY_TYPE): objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#hasInlineData (loading seed), objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#fetchesForItself (the query skip the fetch effect reads), objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#rawData (row source `(props as any).data || boundData || fetchedData`), objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#effectiveItems (the `timeline` field bindings a fetched row takes); [108] object-timeline.items: objectui @2e818d0b51ec packages/types/src/data-display.ts#TimelineFeedItem and objectui @2e818d0b51ec packages/types/src/data-display.ts#TimelineGanttItem (the declared authored entry, ruled on objectui#6356), handed to the rail verbatim at objectui @2e818d0b51ec packages/plugin-timeline/src/ObjectTimeline.tsx#effectiveItems (`if (schema.items) return schema.items`); [109] record:reference_rail, record:alert, record:quick_actions, record:history, record:line_items (rows): key sets measured from the renderers' read points; the per-key read points are recorded under each props schema below; [110] record:approval_decision (row, EMPTY key set): objectui @d03b022 packages/app-shell/src/views/approval-decision/ApprovalDecisionPanel.tsx#ApprovalDecisionRenderer (landed in objectui a368ccb, module-internal at d03b022; discards `schema`, draws from the record context); [111] record:attachments (row, EMPTY key set): objectui @47b1f0bb71 packages/app-shell/src/views/record-attachments-renderer.tsx#RecordAttachmentsRenderer (registered as `attachments` in the `record` namespace; discards `schema`); [112] cloud-connection:panel, marketplace:installed-list (rows, EMPTY key sets): objectui @b9814b334 packages/app-shell/src/console/cloud-connection/CloudConnectionPanel.tsx#CloudConnectionPanel and objectui @b9814b334 packages/app-shell/src/console/marketplace/InstalledListWidget.tsx#InstalledList (each registration is `() => `; re-read 2026-10-15, first measured sha-less at the then pin); [113] mcp:connect-agent (row, EMPTY key set): objectui @b9814b334 packages/app-shell/src/console/connect/ConnectAgentWidget.tsx#ConnectAgent (registration `() => `; re-read 2026-10-15, first measured sha-less at the then pin); [114] element:definition-list, element:repeater (rows: the three-part string-arm evidence): objectui @b9814b334 packages/components/src/renderers/basic/data-list.tsx#DefinitionListRenderer and objectui @b9814b334 packages/components/src/renderers/basic/data-list.tsx#RepeaterRenderer (both registered in the `element` namespace), objectui @b9814b334 packages/core/src/registry/public-blocks.ts#PUBLIC_BLOCKS (publication), objectui @b9814b334 packages/app-shell/src/views/metadata-admin/previews/block-types.ts#BLOCK_TYPE_META (palette), objectui @b9814b334 packages/app-shell/src/views/metadata-admin/previews/block-config.ts#BLOCK_CONFIG (each block's inspector); [115] action:button, action:group, action:menu, action:icon (rows): objectui @b9814b334 packages/core/src/registry/public-blocks.ts#PUBLIC_BLOCKS (the four `action:*` members), registered under objectui packages/components/src/renderers/action/ in the `action` namespace; [116] object-map, object-gantt, object-tree (row key sets; per-key read points under each props schema): objectui @b9814b334 packages/plugin-map/src/index.tsx#ObjectMapRenderer, objectui @b9814b334 packages/plugin-map/src/ObjectMap.tsx#ObjectMap, objectui @b9814b334 packages/plugin-gantt/src/index.tsx#ObjectGanttRenderer, objectui @b9814b334 packages/plugin-gantt/src/ObjectGantt.tsx#ObjectGantt, objectui @b9814b334 packages/plugin-tree/src/index.tsx#ObjectTreeRenderer, objectui @b9814b334 packages/plugin-tree/src/ObjectTree.tsx#ObjectTree; [117] object-timeline (row key set; per-key read points under ObjectTimelinePropsSchema): objectui @b9814b334 packages/plugin-timeline/src/index.tsx#ObjectTimelineRenderer (the `object-timeline` and `timeline` registrations), objectui @b9814b334 packages/plugin-timeline/src/ObjectTimeline.tsx#ObjectTimeline, objectui @b9814b334 packages/plugin-timeline/src/renderer.tsx#TimelineRenderer; [118] EXPRESSION_BINDABLE_TEXT_KEYS_BY_COMPONENT rows statistic, card, button (the top-level text keys each renderer reads back; R = objectui @82a9417 packages/components/src/renderers/, re-verified identical at objectui 6c68b13 on 2026-08-18): statistic `label`, `value`, `description` R data-display/statistic.tsx#StatisticRenderer; card `title`, `description` R layout/card.tsx#CardRenderer; button `label` R form/button.tsx#ButtonRenderer; the deliberate `text` omission, `schema.content || schema.value`, at its `text` registration in R basic/text.tsx; [119] PageComponent.dataSource, the PLANNED API binding (ElementApiDataSourceSchema; its record is this file's `_note`; R = objectui @7578323a544e packages/core/src/): `read.url`'s refusal of a `./` path, measured against the console's `apiBase` promotion of a root-relative `/api/…` path only, R actions/ActionRunner.ts#navigateTo; `read.method` GET alone because every read (find, findOne, aggregate) sends an explicit `method: 'GET'`, R adapters/ApiDataSource.ts#ApiDataSource; no renderer reads the binding yet, the hook admitting only a string `object`, R data-scope/element-data-source.ts#isElementDataSourceConfig; [120] PageComponent.visibleWhen (the component-level evaluator's roots): the ambient scope (`current_user`, `user`, `ctx.user`, `os.user`, `features`, nothing else) objectui @1fb1ced36243 packages/app-shell/src/providers/ExpressionProvider.tsx#buildExpressionScope; composed with `record` (only when the page has a row) and `page` by objectui @1fb1ced36243 packages/react/src/SchemaRenderer.tsx#configEvaluationScope; no `data` root (objectui#9308) in objectui @1fb1ced36243 packages/react/src/SchemaRenderer.tsx#evaluatedSchema; the files identical at objectui main f228d710; the `page:tabs` item-level evaluator is the `page:tabs items[].visibleWhen` entry;"
},
"assignedProfiles": {
"status": "dead",
diff --git a/packages/spec/src/ui/component.zod.ts b/packages/spec/src/ui/component.zod.ts
index 56949edc543..efc03822520 100644
--- a/packages/spec/src/ui/component.zod.ts
+++ b/packages/spec/src/ui/component.zod.ts
@@ -7225,8 +7225,8 @@ export const ObjectKanbanPropsSchema = lazySchema(() => strictObject({
/**
* [#20831] The list view's own `GroupingConfigSchema`, by reference — ⛔ not
* a copy of its shape. The board reads ONE position of it:
- * `effectiveSwimlaneField = swimlaneField || grouping.fields[0].field`
- * (`ObjectKanban.tsx`), and looks that raw name up on every card. Until
+ * `effectiveSwimlaneField = swimlaneField || grouping.fields[0].field`, and
+ * looks that raw name up on every card. Until
* #20831 it was `z.unknown()`, so a padded name (`' business_unit '`,
* refused on `list-view` since #17360) or a wrong-shaped value validated
* green here and collapsed every card into one lane with no error. Kept,
@@ -7242,169 +7242,21 @@ export const ObjectKanbanPropsSchema = lazySchema(() => strictObject({
* since retired that block (objectui#8257), so `object-kanban` offers no
* quick-add control and no block a document can name offers one either).
*
- * Measured at objectui `b9814b334` (re-read there 2026-10-14:
- * `plugin-kanban/src/index.tsx` changed only below the pass-through (+2/-2,
- * objectui#12030, objectui `c5406c201`: a comment re-cited to `18.0.0-next.0`
- * at `:551-552`), which did not move from `345-346`; `KanbanBoardCore.tsx`,
- * `ObjectKanban.tsx` and `KanbanImpl.tsx` are byte-identical across the hop
- * from `1fb1ced36` (`git diff --quiet`), so `:85`, `:688` and `:701` did not
- * move; `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd` 2 times
- * each against 11 for `onCardClick`, and objectui still registers no
- * `kanban-ui` block. At `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved;
- * `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd` 2 times each
- * against 11 for `onCardClick`, and objectui still registers no `kanban-ui`
- * block. At `0df67f237`, re-read there 2026-10-11:
- * `plugin-kanban/src/index.tsx` is byte-identical across the hop from
- * `20c6d351a` (`git diff --quiet`), so `345-346` did not move;
- * `KanbanBoardCore.tsx` (+9/-0), `ObjectKanban.tsx` (+21/-1) and
- * `KanbanImpl.tsx` (+30/-7) changed for objectui#12082 (objectui `5af42dbbd`:
- * a card is draggable only for a caller the affordance-to-grant map's
- * `kanbanCardMove` row allows), no hunk on a cited line, so `:78` MOVED to
- * `:85` and the gate `:671` / `:684` to `:688` / `:701`, every line
- * byte-identical; `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd`
- * 2 times each against 11 for `onCardClick`, and objectui still registers no
- * `kanban-ui` block. At `20c6d351a`, re-read there 2026-10-10:
- * `KanbanBoardCore.tsx`, `ObjectKanban.tsx` and `plugin-kanban/src/index.tsx`
- * are byte-identical across the hop from `47b1f0bb7` (`git diff --quiet`), so
- * `:78` and `345-346` did not move; `KanbanImpl.tsx` changed (+9/-6,
- * objectui#6349 batch 7, objectui `c0c0a0d56`: its rule type spelled
- * `KanbanConditionalFormattingRule` by that name, three comment lines added
- * above the props), so the gate MOVED `:668` / `:681` -> `:671` / `:684`,
- * both lines byte-identical; `ObjectKanban.tsx` still names `quickAdd` and
- * `onQuickAdd` 2 times each against 11 for `onCardClick`, and objectui still
- * registers no `kanban-ui` block. At `47b1f0bb7`, re-read there 2026-10-09:
- * `KanbanBoardCore.tsx`, `ObjectKanban.tsx`, `KanbanImpl.tsx` and
- * `plugin-kanban/src/index.tsx` are byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so `:78`, `:668`, `:681` and `345-346`
- * did not move; `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd` 2
- * times each against 11 for `onCardClick`, and objectui still registers no
- * `kanban-ui` block. At `f0268ad78`, re-read there 2026-10-09:
- * `KanbanBoardCore.tsx`, `ObjectKanban.tsx` and `KanbanImpl.tsx` are
- * byte-identical across the hop from `a58626c88` (`git diff --quiet`), so
- * `:78`, `:668` and `:681` did not move; `plugin-kanban/src/index.tsx` changed
- * only at `:552` and below (+3/-3: a comment re-cited to 17.7.0, and
- * objectui#6152 round 8's `filter` input description), so the pass-through did
- * not move from `345-346`; `ObjectKanban.tsx` still names `quickAdd` and
- * `onQuickAdd` 2 times each against 11 for `onCardClick`, and objectui still
- * registers no `kanban-ui` block. At `a58626c88`, re-read there 2026-10-06:
- * `KanbanBoardCore.tsx` and `plugin-kanban/src/index.tsx` are byte-identical
- * across the hop from `0abd4f9f8` (`git diff --quiet`), so `:345-346` did not
- * move; `ObjectKanban.tsx` (+65/-2) and `KanbanImpl.tsx` (+48/-1) changed for
- * objectui#11629 (each column header totals the view's `summarizeField`), and
- * the gate MOVED with its lines byte-identical, `624` -> `668` and `637` ->
- * `681`; `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd` 2 times
- * each against 11 for `onCardClick`, and objectui still registers no
- * `kanban-ui` block.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved, and
- * `ObjectKanban.tsx` still names `quickAdd` and `onQuickAdd` 2 times each
- * against 11 for `onCardClick`.
- * At `9dfaca654`; re-measured there 2026-10-05 —
- * `KanbanImpl.tsx` and `KanbanBoardCore.tsx` are byte-identical to
- * `2e818d0b5` (`git diff --quiet`), so `:624`, `:637` and `:78` did not
- * move; `ObjectKanban.tsx` changed above its spread (+35/-5, objectui#8347's
- * private `GateBoundKanbanSchema` read type and widened `schema` binding),
- * which MOVED `1639` -> `1669` byte-identical; `plugin-kanban/src/index.tsx`
- * changed only below the pass-through (+34/-3: one objectui#8347 docblock
- * line at `:368`, objectui#11605's `requiresObject` gate and non-required
- * `objectName` input), which did not move from `345-346`; and the counts
- * re-read the same, 2 / 2 / 11. At `2e818d0b5`, re-measured there
- * 2026-10-04 — every
- * objectui file this record cites is byte-identical across the hop from
- * `ab1879721` (`git diff --quiet`), so every anchor held unmoved. At
- * `ab1879721`, re-measured there 2026-10-03 —
- * `KanbanBoardCore.tsx` and `ObjectKanban.tsx` are byte-identical to
- * `89cad75d5`, so `:78` and `:1639` did not move and were re-read in place;
- * `KanbanImpl.tsx` changed only in two comments above the gate
- * (objectui#11522: card formatting is the spec `{ condition, style }` rule
- * alone, +8/-5), so both gate lines MOVED by 3 byte-identical, `621` ->
- * `624` and `634` -> `637`; `plugin-kanban/src/index.tsx` changed only at
- * `:532` and below (+3/-2, objectui#11438's 17.6.0 re-citation and
- * objectui#11522's `conditionalFormatting` input description), so the
- * pass-through did not move from `345-346` and was re-read in place. At
- * `89cad75d5` (2026-10-02) —
- * `KanbanImpl.tsx`, `KanbanBoardCore.tsx` and `ObjectKanban.tsx` are
- * byte-identical to `31971ff1e`, so `:621`, `:634`, `:78` and `:1639` did
- * not move and were re-read in place; `plugin-kanban/src/index.tsx` changed
- * (+7/-5, objectui#11293: the `navigation` input's description and the
- * comment above it now say a `page` click goes to the host's record
- * navigator), every hunk at `:626` or below, so the pass-through did not
- * move from `345-346` and was re-read in place, and the exported
- * `KanbanRenderer` still forwards both keys to `KanbanBoardCore`, which
- * `ObjectKanban` does not mount for them. At `31971ff1e` (2026-10-01)
- * `KanbanImpl.tsx` and `KanbanBoardCore.tsx` were byte-identical to
- * `e420df310`, so `:621`, `:634` and `:78` did not move and were re-read in
- * place; `ObjectKanban.tsx` changed only in the comment above its
- * `navigation` read (objectui#8652), above the spread, which MOVED `1641` ->
- * `1639` with its line byte-identical; and `plugin-kanban/src/index.tsx`
- * changed below the exported `KanbanRenderer` (objectui#8652's `navigation`
- * input), whose pass-through did not move from `345-346`. At `e420df310`
- * (2026-09-30) `KanbanImpl.tsx` was byte-identical to `db11afd49`, so `:621` and `:634` did
- * not move and were re-read in place. objectui's own half of this retirement
- * landed on this hop and changed the PATH, not the verdict: objectui#8285
- * stopped forwarding `quickAdd`, and objectui#11234 retired
+ * Measured on the renderer (read points recorded in `liveness/page.json`,
+ * row `regions`): the board once forwarded the key — its spread handed the
+ * authored bag to `KanbanRenderer`, which passes `quickAdd={schema.quickAdd}`
+ * and `onQuickAdd={schema.onQuickAdd}` — but the affordance is gated on BOTH,
+ * and `onQuickAdd` is a host-supplied FUNCTION that JSON cannot carry and no
+ * producer puts on an `object-kanban` node. objectui's own half of this
+ * retirement changed the PATH, not the verdict: objectui#8285 stopped
+ * forwarding `quickAdd`, and objectui#11234 retired
* `ObjectKanbanSchema.onQuickAdd` and has `ObjectKanban` render an internal
- * `KanbanBoardCore` that reads neither key off `schema`
- * (`KanbanBoardCore.tsx:78`). So the spread MOVED `1614` -> `1641` with its
- * line byte-identical but now feeds `KanbanBoardCore`, and the pass-through
- * below sits only in the exported `KanbanRenderer`, MOVED `357-358` ->
- * `345-346`, which `ObjectKanban` no longer mounts. At `db11afd49`
- * (2026-09-29) `KanbanImpl.tsx` and `plugin-kanban/src/index.tsx` are
- * byte-identical to
- * `dd3f7e1be` and `ObjectKanban.tsx` changed in one comment line (`:1367`), so
- * `:1614`, `:357-358`, `:621` and `:634` did not move and were re-read in
- * place. At `dd3f7e1be` (2026-09-28)
- * `KanbanImpl.tsx` changed only in three comment lines (+3/-3, objectui
- * `1dae95a41` re-spelling an issue citation as a commit), so `:621` and
- * `:634` did not move and were re-read in place; `ObjectKanban.tsx`
- * (+44/-8: objectui#10572's invalidation bus, objectui#10663,
- * objectui#10666's resolved filter, that comment sweep) and `index.tsx`
- * (+45/-46: the retired column-width hook and `ColumnWidthConfig`,
- * objectui#8522 / objectui#10582, the deleted `KanbanEnhanced`,
- * objectui#8932, that comment sweep) changed, and both of their anchors
- * MOVED with the cited text byte-identical: `1578` -> `1614`, `363` -> `357`. On the hop onto `f8a9d0fb0`,
- * `KanbanImpl.tsx` was byte-identical to `62597c588`, while
- * `ObjectKanban.tsx` (objectui#10068's `$orderby`) and `index.tsx`
- * (objectui#10069's lane matching, the `sort` mapping) changed, and both
- * anchors MOVED with the cited text byte-identical: `1563` -> `1578`,
- * `313` -> `363`. All
- * three files were byte-identical across the hop onto `62597c588`, and all
- * four anchors were re-READ at `87af769e9` 2026-09-20, where each MOVED with
- * its cited text byte-identical): through `db11afd49` the board
- * forwarded the key —
- * `ObjectKanban.tsx:1614` there spread the authored bag into `KanbanRenderer`,
- * which passes
- * `quickAdd={schema.quickAdd}` and `onQuickAdd={schema.onQuickAdd}`
- * (`plugin-kanban/src/index.tsx:357-358` there, `:345-346` at this pin) — but the affordance is gated on
- * BOTH (`KanbanImpl.tsx:688` and `:701`), and `onQuickAdd` is a
- * host-supplied FUNCTION that JSON cannot carry and no producer puts on an
- * `object-kanban` node. `ObjectKanban.tsx` names neither half of the pair
- * in code (0 occurrences each, against 11 for the sibling `onCardClick` in the same
- * file — re-counted at `db11afd49`, at `f8a9d0fb0` and at `62597c588`; at
- * `e420df310`, at `31971ff1e`, at `89cad75d5`, at `2e818d0b5` and again at this pin 2 each, all four inside the two
- * objectui#11234 comments that record the cut, and still 11 for
- * `onCardClick`; this record said 6, which the identical
- * file at `87af769e9` does not reproduce either, so the control was
- * miscounted rather than moved, and the verdict rests on the 0). So the gate was permanently false and authoring the key was a
- * parse-clean no-op — the accepted-and-dropped class.
+ * `KanbanBoardCore` that reads neither key off `schema`. `ObjectKanban` names
+ * neither half of the pair in code (2 occurrences each, both inside the two
+ * objectui#11234 comments that record the cut, against 11 for the sibling
+ * `onCardClick` in the same file — the method: occurrences in that one file).
+ * So the gate was permanently false and authoring the key was a parse-clean
+ * no-op — the accepted-and-dropped class.
*
* ⛔ Not a silent one, which is why the retirement is worth more than a
* tidy-up: objectui's registry↔spec ledger records the key verbatim as
@@ -7416,12 +7268,10 @@ export const ObjectKanbanPropsSchema = lazySchema(() => strictObject({
*
* The control is not withdrawn from objectui's React layer, but no metadata
* node reaches it. The ruling kept it on `kanban-ui`, the block a React host
- * renders directly and can hand the runtime function to. ⚠️ Re-read at
- * `e420df310`: objectui retired the schema-only `kanban-ui` registration
- * long before this pin (objectui#8257; 0 registrations at `dd3f7e1be`,
- * `db11afd49`, `e420df310`, `31971ff1e`, `89cad75d5` and this pin), and the pair now lives on the
- * exported `KanbanRenderer` React component a host mounts directly
- * (`plugin-kanban/src/index.tsx:345-346`), not on any block a document can
+ * renders directly and can hand the runtime function to. ⚠️ objectui has
+ * since retired the schema-only `kanban-ui` registration (objectui#8257; 0
+ * registrations), and the pair now lives on the exported `KanbanRenderer`
+ * React component a host mounts directly, not on any block a document can
* name. ⛔ So the tombstone below prescribes "delete the key" and names no
* block: this spec declares no `kanban-ui` component type, so a node an
* author wrote there would save clean (the type is an unregistered custom
@@ -7446,33 +7296,27 @@ export const ObjectKanbanPropsSchema = lazySchema(() => strictObject({
* stage it was `z.unknown()`, so `42`, a bare string or a rule with no
* `style` passed the component-props gate and the board painted nothing.
*
- * Read at the `.objectui-sha` pin `ab1879721595` (`KanbanBoardCore.tsx`,
- * `KanbanImpl.tsx`, `listConditional.ts` and `ObjectGrid.tsx` are
- * byte-identical at objectui `main` `2e818d0b51`, where the two
- * `@object-ui/types` files cited below changed only around `grouping`):
- * `KanbanBoardCore.tsx:114` hands
- * `schema.conditionalFormatting` to the board, whose `getCardStyles`
- * (`KanbanImpl.tsx:182`) evaluates it through the shared
- * `resolveConditionalFormatting` (`core/src/evaluator/listConditional.ts:532`)
- * — the evaluator the grid's rows use (`ObjectGrid.tsx:2970`), so one
+ * Read points recorded in `liveness/page.json`, row `regions`: the board
+ * core hands `schema.conditionalFormatting` to the board, whose
+ * `getCardStyles` evaluates it through the shared
+ * `resolveConditionalFormatting` — the evaluator the grid's rows use, so one
* declaration judges both doors. objectui's own authoring declaration is this
- * rule, by reference, since objectui#11522 (landed by objectui#11532,
- * `c73cdb5695`, an ancestor of the pin): `KanbanConditionalFormattingRuleSchema`
- * extends the list view's rule element (`types/src/zod/objectql.zod.ts:3074`)
- * and refuses the native `{ field, operator, value, … }` and top-level colour
- * keys by name, and its TS twin extends `SpecConditionalFormattingRule`
- * (`types/src/objectql.ts:5166`).
+ * rule, by reference, since objectui#11522 (landed by objectui#11532):
+ * `KanbanConditionalFormattingRuleSchema` extends the list view's rule
+ * element and refuses the native `{ field, operator, value, … }` and
+ * top-level colour keys by name, and its TS twin extends
+ * `SpecConditionalFormattingRule`.
*
* ⚠️ Two differences, neither a working rule. The shared evaluator still reads
* the native, `expression` and top-level colour arms for a rule a relay hands
- * the board in a stored dialect (`KanbanImpl.tsx:160-166`), as on the grid; no
- * authored `object-kanban` writer uses them (census below). And objectui's
- * `condition` takes a blank string, which the evaluator answers with its
- * no-match fallback (`listConditional.ts:252-260`, `fallback: false` at
- * `:546`); the list view's member refuses it, as it does on the grid.
+ * the board in a stored dialect, as on the grid; no authored `object-kanban`
+ * writer uses them (census below). And objectui's `condition` takes a blank
+ * string, which the evaluator answers with its no-match fallback
+ * (`fallback: false`); the list view's member refuses it, as it does on the
+ * grid.
*
* Census of authored `object-kanban` writers (objectstack `16d241a6af`,
- * objectui at the pin and at `main`, hotcrm `4054ec2680`, cloud
+ * objectui (recorded in the ledger row above), hotcrm `4054ec2680`, cloud
* `2205b53010`): every working writer is a `{ condition, style }` rule and
* parses here. The refused values are objectui's own refusal probes and one
* no-predicate fixture in this package (`{ field, value }` with no
@@ -7486,130 +7330,15 @@ export const ObjectKanbanPropsSchema = lazySchema(() => strictObject({
* maintainer ruling, verbatim `B`: declare `navigation` on the platform
* element schemas).
*
- * Measured at objectui `b9814b334` (re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * `useNavigationOverlay.ts` is byte-identical to `20c6d351a` (`git diff
- * --quiet`), and `ObjectKanban.tsx` changed above and between the anchors
- * here (+21/-1, objectui#12082, objectui `5af42dbbd`: the card move reads the
- * affordance-to-grant map) without touching one, so each MOVED with its cited
- * text byte-identical: the read `1368` -> `1370`, the hand-off `1376-1377` ->
- * `1378-1379`, the overlay render `1626` -> `1642` and its
- * `NavigationOverlay` `1642-1655` -> `1658-1671`, and the card click `1755`
- * -> `1775`. At `20c6d351a`, re-read there 2026-10-10:
- * every objectui file this record cites is byte-identical across the hop from
- * `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `a58626c88` (`git diff --quiet`), so every anchor held unmoved. At
- * `a58626c88`, re-read there 2026-10-06:
- * `useNavigationOverlay.ts` is byte-identical to `0abd4f9f8` (`git diff
- * --quiet`), and `ObjectKanban.tsx` changed above and between the anchors
- * here (+65/-2, objectui#11629: each column header totals the view's
- * `summarizeField`) without touching one, so each MOVED with its cited text
- * byte-identical: the read `1310` -> `1368`, the hand-off `1318-1319` ->
- * `1376-1377`, the overlay render `1568` -> `1626` and its
- * `NavigationOverlay` `1584-1597` -> `1642-1655`, and the card click `1693`
- * -> `1755`.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`; re-measured there 2026-10-05 — `useNavigationOverlay.ts` is
- * byte-identical to `2e818d0b5` (`git diff --quiet`), and `ObjectKanban.tsx`
- * changed above every anchor here (+35/-5, objectui#8347: a type import
- * edited in place, a private `GateBoundKanbanSchema` read type — still
- * `ObjectKanbanSchema`, with its declared `navigation`, plus the
- * gate-written `sort` — a re-worded docblock and a widened `schema`
- * binding), so each MOVED by 30 with its cited text byte-identical: the
- * read `1280` -> `1310`, the hand-off `1288-1289` -> `1318-1319`, the
- * overlay render `1538` -> `1568` and its `NavigationOverlay` `1554-1567`
- * -> `1584-1597`, and the card click `1663` -> `1693`. At `2e818d0b5`,
- * re-measured there 2026-10-04 — `ObjectKanban.tsx` and
- * `useNavigationOverlay.ts` are byte-identical to `ab1879721`
- * (`git diff --quiet`), so every anchor held unmoved. At `ab1879721`,
- * re-measured there 2026-10-03 — both are byte-identical to `89cad75d5`
- * (`git diff --quiet`), so every anchor held unmoved and was re-read in
- * place: the read `1280`, the hand-off `1288-1289`, the overlay render
- * `1538` and its `NavigationOverlay` `1554-1567`, and the card click
- * `1663`. At `89cad75d5` (2026-10-02) `ObjectKanban.tsx` was
- * byte-identical to `31971ff1e` (`git diff --quiet`), so every anchor held
- * unmoved and was re-read in place: the read `1280`, the hand-off
- * `1288-1289`, the overlay render `1538` and its `NavigationOverlay`
- * `1554-1567`, and the card click `1663`. What did change on this hop is
- * downstream of the read, not the read: objectui#11293 has the shared
- * `useNavigationOverlay` hand a `page` click with no `onNavigate` to the
- * record navigator the host publishes, so the `page` mode this key accepts
- * now opens the record page on a standalone board under such a host. At
- * `31971ff1e` (2026-10-01) `ObjectKanban.tsx` changed on
- * this hop in one place, the comment above the `navigation` read (+12/-14,
- * objectui#8652, the objectui half of the same ruling: the key is now
- * declared on `ObjectKanbanSchema`), so the read itself did not change and
- * every anchor MOVED up by 2 with its cited text byte-identical: the read
- * `1282` -> `1280`, the hand-off `1290-1291` -> `1288-1289`, the overlay
- * render `1540` -> `1538` and its `NavigationOverlay` `1556-1569` ->
- * `1554-1567`, and the card click `1665` -> `1663`. At `e420df310`
- * (2026-09-30) `ObjectKanban.tsx` changed on
- * this hop, +40/-13: objectui#9853's renamed fetch-batch default, and
- * objectui#11234's internal `KanbanBoardCore` with the comments that record
- * the Quick Add cut, all of it re-mapped through the diff. Every anchor MOVED
- * with its cited text byte-identical and none of the edits touches the
- * `navigation` read or where it lands: the read `1261` -> `1282`, the
- * hand-off `1269-1270` -> `1290-1291`, the overlay render `1519` -> `1540`
- * and its `NavigationOverlay` `1535-1548` -> `1556-1569` by 21, and the card
- * click `1638` -> `1665` by 27, the six extra lines being the
- * `KanbanBoardCore` comment above the board it now clicks through. At
- * `db11afd49` (2026-09-29) `ObjectKanban.tsx` changed in one
- * comment line only (`:1367`, a line-neutral comment re-spelling that no anchor
- * below cites), so every anchor below held unmoved and was re-read in place. At
- * `dd3f7e1be` (2026-09-28) `ObjectKanban.tsx` changed on
- * this hop, +44/-8 (objectui#10572's invalidation bus, objectui#10663,
- * objectui#10666's resolved filter, and objectui `1dae95a41`'s comment
- * sweep), every line it added or removed above these anchors — the one
- * comment it re-spelled below them, at `:1615`, is line-neutral — so each
- * MOVED by 36 with its cited text byte-identical and is cited below at its
- * new number. On the hop onto `f8a9d0fb0` the file changed +16/-1
- * (objectui#10068's `$orderby`), also all above them, and each MOVED by 15
- * with its text byte-identical; the file was byte-identical across the hop
- * onto `62597c588`. They were
- * re-READ at `87af769e9` 2026-09-22 — every anchor re-derived from that
- * tree rather than carried, none of them at its `53ded82bf` number and one
- * of them no longer spelled the way this record quoted it):
- * `ObjectKanban.tsx:1370`
+ * Read points recorded in `liveness/page.json`, row `regions`: the renderer
* reads `schema.navigation ?? { mode: 'drawer' }` and hands it to
- * `useNavigationOverlay` (`:1378-1379`), whose result drives the card click
- * (`:1775`) and the detail overlay (`:1642`, whose `NavigationOverlay` is
- * `:1658-1671`) — on a STANDALONE board, with no enclosing view to resolve
- * a mode from. ⚠️ The `(schema as any)` cast this record used to quote is
- * GONE at this pin: the read is spelled `schema.navigation`, and it now
- * compiles through a DECLARED `ObjectKanbanSchema.navigation` member
- * (objectui#8652, the mirror of this row), where through `e420df310` it
- * compiled through `BaseSchema`'s index signature, as the comment above it
- * then recorded (objectui#9726). The READ is unchanged — only its spelling is —
- * so nothing this record says about the key moves. Until this key the same
- * document ran correctly in the renderer and was refused BY NAME at the
- * authoring door, through the generic `unrecognized_keys` rule a typo gets.
+ * `useNavigationOverlay`, whose result drives the card click and the detail
+ * overlay (its `NavigationOverlay`) — on a STANDALONE board, with no
+ * enclosing view to resolve a mode from. The read compiles through a
+ * DECLARED `ObjectKanbanSchema.navigation` member (objectui#8652, the mirror
+ * of this row). Until this key the same document ran correctly in the
+ * renderer and was refused BY NAME at the authoring door, through the
+ * generic `unrecognized_keys` rule a typo gets.
*
* The value is {@link NavigationConfigSchema} BY REFERENCE — the one def
* `ListViewSchema.navigation` declares — because the ruling's point is that
@@ -7639,8 +7368,8 @@ export type ObjectKanbanPropsParsed = z.infer;
/**
* The flat per-field spellings `ObjectCalendar` keeps reading as a
- * backward-compat fallback (`getCalendarConfig`, ObjectCalendar.tsx:150-158)
- * and that `ObjectView`/`ListView` emit on their runtime handoff. Read, but
+ * backward-compat fallback (`getCalendarConfig`; read points recorded in
+ * `liveness/page.json`, row `regions`) and that `ObjectView`/`ListView` emit on their runtime handoff. Read, but
* NOT authorable — one composition key per concept (Prime Directive #12, the
* `body` → `children` precedent on {@link PageContainerProps}): the authored
* spelling is the `calendar` object.
@@ -7660,12 +7389,12 @@ const OBJECT_CALENDAR_FLAT_FIELD_GUIDANCE: readonly KeySetGuidance[] = [
];
/**
- * `object-calendar` (objectui `plugin-calendar/src/ObjectCalendar.tsx` +
- * registry shell in `plugin-calendar/src/index.tsx` @ `eb7f586b`). Read
- * points: `objectName` (throughout), `calendar` (:145 — the canonical config
- * object), `defaultView` (:188), `filter`/`sort` (fetch params), `data`/
- * `staticData` (external rows), and via the registry shell's declared host
- * hatches `locale` and `loading`.
+ * `object-calendar` (objectui's `plugin-calendar` renderer plus its registry
+ * shell; read points recorded in `liveness/page.json`, row `regions`). Read
+ * points: `objectName` (throughout), `calendar` (the canonical config object),
+ * `defaultView`, `filter`/`sort` (fetch params), `data`/`staticData` (external
+ * rows), and via the registry shell's declared host hatches `locale` and
+ * `loading`.
*/
export const ObjectCalendarPropsSchema = lazySchema(() => strictObject({
surface: 'this `object-calendar`',
@@ -7677,10 +7406,10 @@ export const ObjectCalendarPropsSchema = lazySchema(() => strictObject({
.describe('Object this calendar binds to. Optional because the component-level `dataSource` binding can supply the object instead'),
/**
* [#21464] The list view's own `calendar` member, by reference
- * (`CalendarConfigSchema`): `getCalendarConfig`
- * (`plugin-calendar/src/ObjectCalendar.tsx:294-297` at the pin
- * `89cad75d55`) returns this block as the config and reads exactly its five
- * bindings (`:857`, `:1056`, `:1141`), so a block without `startDateField`
+ * (`CalendarConfigSchema`): `getCalendarConfig` returns this block as the
+ * config and the renderer reads exactly its five bindings (read points
+ * recorded in `liveness/page.json`, row `regions`), so a block without
+ * `startDateField`
* placed no event, and a key outside the five — the retired `dateField` /
* `endField` aliases among them — was never read.
*/
@@ -7690,10 +7419,10 @@ export const ObjectCalendarPropsSchema = lazySchema(() => strictObject({
/**
* Base query filter — the `ViewFilterRule` ARRAY form, the one filter
* orthography every `filter` door in this map shares (#15449; the family
- * entry on `object-grid` carries the ruling). Measured at the objectui pin
- * `53ded82b` before the declaration moved: `ObjectCalendar.tsx` hands
- * `schema.filter` verbatim to `$filter` and the adapter lowers a rule array
- * exactly as it does for the kanban. The record form is refused at
+ * entry on `object-grid` carries the ruling). Measured before the
+ * declaration moved (read points recorded in `liveness/page.json`, row
+ * `regions`): the renderer handed `schema.filter` verbatim to `$filter` and
+ * the adapter lowers a rule array exactly as it does for the kanban. The record form is refused at
* `filter`; see migration
* `element-data-source-and-object-block-filter-rule-array`.
*/
@@ -7710,16 +7439,16 @@ export const ObjectCalendarPropsSchema = lazySchema(() => strictObject({
* decision batch #77, option B; the `object-grid` entry carries the verbatim
* text). One sort orthography, one shared `SortItemSchema`.
*
- * Measured at the objectui pin `53ded82b`: `ObjectCalendar.tsx:431` hands
- * `schema.sort` to the shared sink `convertSortToQueryParams`
- * (`core/src/utils/sort-query.ts`) as the fetch's `$orderby`. ⚠️ That sink
- * still honours the legacy string clause at this pin — `sort-query.ts:66-70`
- * — so, exactly as on `object-grid`, this declaration lands ahead of the
- * consumer-side retirement (objectui#8221's PR objectui#8758, merged 2026-09-09) and
- * refuses a spelling the pinned helper still lowers. The array arm is
+ * Measured on the renderer (read points recorded in `liveness/page.json`,
+ * row `regions`): it hands `schema.sort` to the shared sink
+ * `convertSortToQueryParams` as the fetch's `$orderby`. ⚠️ That sink still
+ * honoured the legacy string clause when this was measured — so, exactly as
+ * on `object-grid`, this declaration landed ahead of the consumer-side
+ * retirement (objectui#8221's PR objectui#8758, merged 2026-09-09) and
+ * refused a spelling the helper then still lowered. The array arm is
* unaffected: the sink folds `[{ field, order }]` into the field-direction
- * map either way. Unlike the grid, `plugin-calendar/src/index.tsx` declares
- * no `sort` input at all, so nothing on the registry side moves.
+ * map either way. Unlike the grid, the calendar's registry shell declares no
+ * `sort` input at all, so nothing on the registry side moves.
*/
sort: z.array(SortItemSchema).optional()
.describe('Row order for the fetched events — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`'),
@@ -7732,137 +7461,10 @@ export const ObjectCalendarPropsSchema = lazySchema(() => strictObject({
* maintainer ruling, verbatim `B`), the same carrier and the same def as
* `object-kanban`'s above.
*
- * Measured at objectui `b9814b334` (re-read there 2026-10-14:
- * `useNavigationOverlay.ts` is byte-identical to `1fb1ced36` (`git diff
- * --quiet`), and `ObjectCalendar.tsx` changed above and between the anchors
- * here (+179/-49: objectui#12291's quick-create hand-off and objectui#12030)
- * without touching one, so each MOVED with its cited text byte-identical: the
- * read `1055` -> `1172`, the hand-off `1057-1058` -> `1174-1175`, the overlay
- * render `1391` -> `1518` and its `NavigationOverlay` `1404-1417` ->
- * `1531-1544`, and the event click `1471` -> `1598`. At `1fb1ced36`, re-read
- * there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * `useNavigationOverlay.ts` is byte-identical to `20c6d351a` (`git diff
- * --quiet`), and `ObjectCalendar.tsx` changed above and between the anchors
- * here (+75/-19: objectui#12081 item 2's windowed fetch and objectui#12082's
- * write affordances) without touching one, so each MOVED with its cited text
- * byte-identical: the read `1018` -> `1055`, the hand-off `1020-1021` ->
- * `1057-1058`, the overlay render `1333` -> `1391` and its
- * `NavigationOverlay` `1346-1359` -> `1404-1417`, and the event click `1413`
- * -> `1471`. At `20c6d351a`, re-read there 2026-10-10:
- * every objectui file this record cites is byte-identical across the hop from
- * `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * `ObjectCalendar.tsx` changed across the hop from `a58626c88` in one comment
- * line only, line for line (`:1250`, objectui `c0862c1cc` re-citing the
- * installed spec as 17.7.0), and `useNavigationOverlay.ts` is byte-identical,
- * so every anchor held unmoved and was re-read in place: the read `1018`, the
- * hand-off `1020-1021`, the event click `1413`, the overlay render `1333` and
- * its `NavigationOverlay` `1346-1359`. At `a58626c88`, re-read there
- * 2026-10-06:
- * every objectui file this record cites is byte-identical across the hop from
- * `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`; re-measured there 2026-10-05 — `ObjectCalendar.tsx` changed
- * across the hop from `2e818d0b5` in one comment only, line for line
- * (`:97-98`, objectui#8347 putting `BaseSchema`'s index signature in the
- * past tense), and `useNavigationOverlay.ts` is byte-identical, so every
- * anchor held unmoved and was re-read in place: the read `1018`, the
- * hand-off `1020-1021`, the event click `1413`, the overlay render `1333`
- * and its `NavigationOverlay` `1346-1359`. At `2e818d0b5`, re-measured
- * there 2026-10-04 — `ObjectCalendar.tsx` and
- * `useNavigationOverlay.ts` are byte-identical to `ab1879721`
- * (`git diff --quiet`), so every anchor held unmoved. At `ab1879721`,
- * re-measured there 2026-10-03 — `ObjectCalendar.tsx` changed
- * across the hop from `89cad75d5` in one comment line only, line for line
- * (`:1250`, objectui#11438 re-citing the installed spec as 17.6.0), and
- * `useNavigationOverlay.ts` is byte-identical, so every anchor held unmoved
- * and was re-read in place: the read `1018`, the hand-off `1020-1021`, the
- * event click `1413`, the overlay render `1333` and its `NavigationOverlay`
- * `1346-1359`. At `89cad75d5` (2026-10-02) `ObjectCalendar.tsx` was
- * byte-identical to `31971ff1e` (`git diff --quiet`), so every anchor held
- * unmoved and was re-read in place: the read `1018`, the hand-off
- * `1020-1021`, the event click `1413`, the overlay render `1333` and its
- * `NavigationOverlay` `1346-1359`; objectui#11293's `page` hand-off to the
- * host's record navigator lands in the shared `useNavigationOverlay`, past
- * these anchors, exactly as on `object-kanban`. At `31971ff1e` (2026-10-01)
- * `ObjectCalendar.tsx` changed
- * across the hop from `e420df310` in one place (+11/-19, objectui#8652, the
- * objectui half of the same ruling): `navigation` is now DECLARED on
- * `ObjectCalendarSchema`, so the ledger comment `1008-1025` that recorded
- * the one cast objectui#8651 left standing is replaced by the declaration
- * note `1008-1017`, and the read `1026` -> `1018` CHANGED CONTENT, toward
- * this row: it is spelled `schema.navigation ?? { mode: 'drawer' }`, with no
- * cast. Every anchor after it MOVED up by 8 with its cited text
- * byte-identical — the hand-off `1028-1029` -> `1020-1021`, the event click
- * `1421` -> `1413`, the overlay render `1341` -> `1333`, its
- * `NavigationOverlay` `1354-1367` -> `1346-1359`. At `e420df310`
- * (2026-09-30) `ObjectCalendar.tsx` changed
- * across the hop from `db11afd49` in comments only (+6/-3, objectui#11073),
- * two of them inside the ledger comment, which now says `@objectstack/spec`
- * 17.5.0 ships the `navigation` declaration that card waited on and that
- * mirroring it is that card's next step, so the ledger grew `1008-1022` ->
- * `1008-1025` and every anchor after it MOVED by 3 with its cited text
- * byte-identical — the read `1023` -> `1026`, still spelled with the cast,
- * the hand-off `1025-1026` -> `1028-1029`, the event click `1418` -> `1421`,
- * the overlay render `1338` -> `1341`, its `NavigationOverlay` `1351-1364` ->
- * `1354-1367`. At `db11afd49` (2026-09-29) `ObjectCalendar.tsx` changed
- * again across the hop from `dd3f7e1be` (+18/-11: objectui#11005's DST
- * wall-clock moves in `toStoredDateValue` and the month-grid handlers, and
- * comment re-citations, two of them inside the ledger comment, which now says
- * the card waits on an objectstack commit where it said `pm:blocked`), so every
- * anchor was re-mapped through the diff and re-READ, and each MOVED with its
- * cited text byte-identical — the ledger `1005-1019` -> `1008-1022`, the read
- * `1020` -> `1023`, the hand-off `1022-1023` -> `1025-1026`, the event click
- * `1411` -> `1418`, the overlay render `1331` -> `1338`, its
- * `NavigationOverlay` `1344-1357` -> `1351-1364`. At `dd3f7e1be` (2026-09-28),
- * `ObjectCalendar.tsx` changed
- * across the hop from `f8a9d0fb0` (+128/-38: objectui#10572's invalidation
- * bus, objectui#10663, objectui#10666's resolved filter, objectui#10668's
- * display locale, objectui#10866's date-only days and the core row
- * ceiling), so every anchor was re-mapped through the diff and re-READ
- * rather than carried, and each MOVED with its cited text byte-identical —
- * the ledger `921-935` -> `1005-1019`, the read `936` -> `1020`, the
- * hand-off `938-939` -> `1022-1023`, the event click `1317` -> `1411`, the
- * overlay render `1237` -> `1331`, its `NavigationOverlay` `1250-1263` ->
- * `1344-1357`. At `f8a9d0fb0` the file was byte-identical to `62597c588`
- * (`git diff --quiet`), so every anchor held unmoved from the re-READ taken
- * at `62597c588` 2026-09-23. That file
- * changed across the hop from `87af769e9` (objectui `afb228418`, the calendar's
- * copy routed through the locale packs, +43/-17), so every anchor was
- * re-derived rather than carried: `:921-935`, `:936` and `:938-939` did not
- * move, and the three after the change MOVED with their cited text
- * byte-identical — the event click `1293` -> `1317`, the overlay render
- * `1218` -> `1237`, its `NavigationOverlay` `1228-1241` -> `1250-1263`. At
- * `87af769e9` (2026-09-22) none was at its `53ded82bf` number. Through
- * `e420df310` the cast was still spelled here, unlike its `object-kanban`
- * twin; at this pin it is gone on both): `ObjectCalendar.tsx:1172`
- * reads `schema.navigation ?? { mode: 'drawer' }`, `:1174-1175` hands
- * it to `useNavigationOverlay`, `:1598` fires it on an event click and
- * `:1518` renders the overlay (its `NavigationOverlay` is `:1531-1544`) —
- * standalone, with no enclosing view.
+ * Read points recorded in `liveness/page.json`, row `regions`: the renderer
+ * reads `schema.navigation ?? { mode: 'drawer' }`, hands it to
+ * `useNavigationOverlay`, fires it on an event click and renders the overlay
+ * (its `NavigationOverlay`) — standalone, with no enclosing view.
*/
navigation: NavigationConfigSchema.optional()
.describe("Event-click navigation config — the same block `ListViewSchema.navigation` declares ({ mode, size, openNewTab, preventNavigation }). The renderer's own default is `{ mode: 'drawer' }` when the key is absent; it is documented rather than declared, so a parsed calendar carries the key only when the author wrote it"),
@@ -7891,13 +7493,12 @@ export type ObjectCalendarPropsParsed = z.infer = new Map([
/**
* [#21464] An `object-form`'s `mobile` block — the five members the form reads
- * at the `.objectui-sha` pin `89cad75d55` (`plugin-form/src/ObjectForm.tsx:1857-1942`,
- * the flat arm only), and nothing else. No form view declares the block, so
- * the shape is the read's own, as objectui declares it (`ObjectFormSchema.mobile`):
+ * (the flat arm only; read points recorded in `liveness/page.json`, row
+ * `regions`), and nothing else. No form view declares the block, so the shape
+ * is the read's own, as objectui declares it (`ObjectFormSchema.mobile`):
*
- * - `stickyActions` pins the submit / cancel bar to the bottom of the viewport
- * (`:1935`, `:1941`);
+ * - `stickyActions` pins the submit / cancel bar to the bottom of the viewport;
* - `stepper` routes a flat form through the wizard: `true` always (a desktop
* viewport included), `'auto'` only on a phone-width viewport once the form
- * has `stepperMinFields` fields (`:1874-1884`, default 8);
- * `stepperFieldsPerStep` is the fields per step (`:1876`, default 1 — the
- * read clamps a smaller count to 1);
- * - `fullscreenLongText` offers the fullscreen editor on every long-text field
- * (`:1858-1869`).
+ * has `stepperMinFields` fields (default 8); `stepperFieldsPerStep` is the
+ * fields per step (default 1 — the read clamps a smaller count to 1);
+ * - `fullscreenLongText` offers the fullscreen editor on every long-text field.
*
- * The block's presence marks the wrapper (`data-mobile-form`, `:1942`), so an
+ * The block's presence marks the wrapper (`data-mobile-form`), so an
* empty `{}` is legal and changes nothing else. Module-private, as
* {@link ObjectKanbanLaneSchema} is.
*/
@@ -7980,17 +7578,15 @@ function formFieldNameRefusal(input: unknown): string | undefined {
/**
* [#21464] A form's top-level `fields` — `object-form`'s, and the
- * master-detail form's, which `MasterDetailForm.tsx:1693` hands to the parent
- * form verbatim — as the form reads it at the `.objectui-sha` pin
- * `ab1879721595` (unchanged at objectui `main` `94985a92ba`): the field NAMES
- * to draw, in order, which select from the object's fields and from
- * `customFields` (`plugin-form/src/ObjectForm.tsx:961-981`,
- * `flatFields.ts:68-79`). objectui declares the member `string[]`
- * (`ObjectFormSchema.fields`), and objectstack-ai/objectui#11550's ruling
- * retired the `{ name }` entry from every authoring face; the form still draws
- * a STORED `{ name }` entry by its name (`:972`, `flatFields.ts:72`) as
- * tolerance for metadata already written, and skips any other object entry with
- * a console warning (`:978`, `warnUnresolvedTopLevelField`). So this is a list
+ * master-detail form's, which the master-detail form hands to the parent form
+ * verbatim — as the form reads it (read points recorded in
+ * `liveness/page.json`, row `regions`): the field NAMES to draw, in order,
+ * which select from the object's fields and from `customFields`. objectui
+ * declares the member `string[]` (`ObjectFormSchema.fields`), and
+ * objectstack-ai/objectui#11550's ruling retired the `{ name }` entry from
+ * every authoring face; the form still draws a STORED `{ name }` entry by its
+ * name as tolerance for metadata already written, and skips any other object
+ * entry with a console warning (`warnUnresolvedTopLevelField`). So this is a list
* of strings, and each object entry is refused with what to write instead.
*/
const formFieldNameList = () => z.array(z.string({
@@ -8002,31 +7598,26 @@ const formFieldNameList = () => z.array(z.string({
// contracts the S-objectui-held stage held as forks, in the shapes the
// maintainer ruled on the decision card #21704 (record 5978663135): fork 2,
// letter B (a closed runtime form field) and fork 3, letter B (a page-block
-// section shape of its own). Read points are at the `.objectui-sha` pin
-// `2e818d0b51ec`; each cited reader file is byte-identical at objectui `main`
-// `b92329c894`.
+// section shape of its own). Read points are recorded in `liveness/page.json`,
+// row `regions`.
// ---------------------------------------------------------------------------
/**
* [#21768] The `grid` widget's eight field-level keys, as the runtime form
* field declares them — camelCase, each value type the widget's own
- * (`GridFieldMetadata`, `types/src/field-types.ts:1031-1088` at the
- * `.objectui-sha` pin `9dfaca654311`, which `FormField` carries by reference at
- * `types/src/form.ts:2079-2094`; objectui's zod mirror states the same types at
- * `types/src/zod/form.zod.ts:1102-1117`).
- *
- * The widget reads them off the field it is handed (`const cfg = field`,
- * `fields/src/widgets/GridField.tsx:669`): `allowAdd` / `allowDelete` (`:749-750`,
- * each `!== false` and off on a read-only or disabled grid), `minRows` /
- * `maxRows` (`:762-763`; Remove stops at `minRows`, `:882`, and Add, Duplicate
- * and the blank entry row stop at `maxRows`, `:808`, `:850`, `:892`, `:1077`),
- * `totalField` (`:771`, summed into the footer at `:919-923`), `sortField`
- * (`:778`, stamped on every row by `emit`, `:785-790`), `allowReorder` (`:783`)
- * and `addLabel` (`:1322`, `:1491`). That is the whole read set: a key no line
- * above reads is not declared.
- *
- * Their spelling is objectstack-ai/objectui#11610's (merge `2abec3a96c`, an
- * ancestor of the pin): until it, the widget read these keys in snake_case
+ * (`GridFieldMetadata`, which `FormField` carries by reference; objectui's zod
+ * mirror states the same types; read points recorded in `liveness/page.json`,
+ * row `regions`).
+ *
+ * The widget reads them off the field it is handed (`const cfg = field`):
+ * `allowAdd` / `allowDelete` (each `!== false` and off on a read-only or
+ * disabled grid), `minRows` / `maxRows` (Remove stops at `minRows`, and Add,
+ * Duplicate and the blank entry row stop at `maxRows`), `totalField` (summed
+ * into the footer), `sortField` (stamped on every row by `emit`),
+ * `allowReorder` and `addLabel`. That is the whole read set: a key the widget
+ * does not read is not declared.
+ *
+ * Their spelling is objectstack-ai/objectui#11610's: until it, the widget read these keys in snake_case
* only, and ruling B on #21704 fork 2 (record 5978663135) kept them out of this
* camelCase contract. {@link OBJECT_FORM_GRID_WIDGET_SNAKE_KEYS} keeps the
* snake_case spellings refused by name.
@@ -8035,9 +7626,8 @@ const formFieldNameList = () => z.array(z.string({
* `record:line_items` block and an `object-master-detail-form` detail entry the
* same spelling names the PARENT field the sum is saved to, and their
* `amountField` is the child column — which the line-items panel and the
- * master-detail form hand the grid AS its `totalField`
- * (`plugin-form/src/LineItemsPanel.tsx:710`, `MasterDetailForm.tsx:876`). The
- * grid writes no parent field. The describe says so, and
+ * master-detail form hand the grid AS its `totalField`. The grid writes no
+ * parent field. The describe says so, and
* `component-form-custom-fields-sections-typed.pin.test.ts` §5 pins the
* opposite meanings side by side.
*/
@@ -8067,15 +7657,13 @@ type ObjectFormRuntimeFieldGridKey = keyof ReturnType | undefined
const objectFormSection = () => (objectFormSectionOnce ??= buildObjectFormSection());
/**
- * `object-form` (objectui `plugin-form/src/ObjectForm.tsx` @ `eb7f586b`, plus
- * the sub-forms it forwards the whole bag into: `TabbedForm`, `WizardForm`,
+ * `object-form` (objectui's `ObjectForm` renderer, plus the sub-forms it
+ * forwards the whole bag into; read points recorded in `liveness/page.json`,
+ * row `regions`: `TabbedForm`, `WizardForm`,
* `SplitForm`, `DrawerForm`, `ModalForm` — the declared set is the UNION of
* their `schema.*` reads, which is how `description` earns its place: the
* top-level key is read by the drawer/modal presentations, not by the simple
@@ -8576,9 +8152,9 @@ const objectFormSection = () => (objectFormSectionOnce ??= buildObjectFormSectio
* react tier publishes those separately (`react-blocks.ts`).
*
* `layout` is the one enum that entered through two declarations and not a
- * read: at `eb7f586b` the registry `inputs` and the designer palette offered
- * `inline` and `grid`, but the renderer leg never agreed — `ObjectForm.tsx`
- * already folded both to `vertical`. Both are retired (ADR-0049 enforce-or-
+ * read: the registry `inputs` and the designer palette offered `inline` and
+ * `grid`, but the renderer leg never agreed — `ObjectForm` already folded both
+ * to `vertical`. Both are retired (ADR-0049 enforce-or-
* remove, #20221); the `OBJECT_FORM_LAYOUT_RETIRED` comment block above
* carries the measurement and the prescription each one gets.
*/
@@ -8603,9 +8179,9 @@ export const ObjectFormPropsSchema = lazySchema(() => strictObject({
* [#21464] Field names, typed in the S-objectui-held stage — see
* {@link formFieldNameList}. Held until then because the form drew a
* `{ name }` entry its own guide taught; objectstack-ai/objectui#11550 retired
- * that entry from the authoring faces, and the census at the `.objectui-sha`
- * pin `ab1879721595` found it written only by fixtures probing the stored
- * read and the refusal.
+ * that entry from the authoring faces, and a census of objectui (recorded in
+ * `liveness/page.json`, row `regions`) found it written only by fixtures
+ * probing the stored read and the refusal.
*/
fields: formFieldNameList().optional()
.describe('Field names to draw, in order — bare names selecting from the object\'s fields and from `customFields`. A `{ name }` or `{ field }` object entry is refused: a per-form label or required override goes on a `sections[].fields` entry'),
@@ -8614,13 +8190,13 @@ export const ObjectFormPropsSchema = lazySchema(() => strictObject({
* (fork 2, letter B): each member is the closed runtime form field
* {@link buildObjectFormRuntimeField} declares — the members the form draws,
* in camelCase, keyed by `name` — merged over the generated fields
- * (`plugin-form/src/customFieldsMerge.ts:78-108`). Until then it was
- * `z.unknown()`: objectui's own field is open (an index signature beside
- * forty-five members), and at the `.objectui-sha` pin `2e818d0b51ec` it spelled
- * eight of them, the `grid` widget's field-level keys, in snake_case.
- * [#21768] objectstack-ai/objectui#11610 camelCased those eight (the pin
- * `9dfaca654311` carries it), and the runtime field now declares them under
- * the camelCase names, the snake_case spellings refused by name.
+ * (`mergeCustomFields`; read points recorded in `liveness/page.json`, row
+ * `regions`). Until then it was `z.unknown()`: objectui's own field is open
+ * (an index signature beside forty-five members), and it once spelled eight
+ * of them, the `grid` widget's field-level keys, in snake_case. [#21768]
+ * objectstack-ai/objectui#11610 camelCased those eight, and the runtime field
+ * now declares them under the camelCase names, the snake_case spellings
+ * refused by name.
*/
customFields: z.array(objectFormRuntimeField()).optional()
.describe('Field definitions merged over the set generated from the object\'s metadata — each a closed inline field `{ name, label?, type?, required?, … }`: a member naming a field the object declares replaces that field\'s whole definition, any other is added after the generated fields. With no object behind the form, the members are its only fields'),
@@ -8649,8 +8225,8 @@ export const ObjectFormPropsSchema = lazySchema(() => strictObject({
/**
* [#21464] Typed to the read: the modal presentation is its only reader,
* and it tests `schema.contentLayout === 'tabbed' && groups.length > 1`
- * (`plugin-form/src/ModalForm.tsx:854` at the pin `89cad75d55`, declared
- * `'simple' | 'tabbed'` at `:151`); any other value stacks the sections, so
+ * (declared `'simple' | 'tabbed'` on its own schema; read points recorded in
+ * `liveness/page.json`, row `regions`); any other value stacks the sections, so
* a misspelled `'tabs'` used to draw the stacked layout with no report.
*/
contentLayout: z.enum(['simple', 'tabbed']).optional()
@@ -8668,10 +8244,10 @@ export const ObjectFormPropsSchema = lazySchema(() => strictObject({
* (`FormViewSchema.shape.submitBehavior`, the union discriminated on
* `kind`). Both form renderers switch on `kind` and read exactly that
* union's members — `url` and `delayMs` on `redirect`, `title` and `message`
- * on `thank-you` (`plugin-form/src/ObjectForm.tsx:1312-1370` and
- * `WizardForm.tsx:1005-1065` at the pin `89cad75d55`) — and judge a redirect
- * `url` at submit by parsing a form view through this same schema
- * (`submitRedirect.ts:202`), so one declaration judges the form view, this
+ * on `thank-you` — and judge a redirect `url` at submit by parsing a form
+ * view through this same schema (`resolveSubmitRedirect`; read points
+ * recorded in `liveness/page.json`, row `regions`), so one declaration judges
+ * the form view, this
* block and the renderer's own verdict. A `kind` outside the four fell
* through to the thank-you arm in silence.
*/
@@ -8680,13 +8256,12 @@ export const ObjectFormPropsSchema = lazySchema(() => strictObject({
successMessage: I18nLabelSchema.optional().describe('Toast message on successful submit'),
resetOnSuccess: z.boolean().optional().describe('Reset the form after a successful submit'),
/**
- * [#21464] Typed to the read: `resolveSuccessNavigate`
- * (`plugin-form/src/successBehavior.ts:118-131` at the pin `89cad75d55`,
- * called from `ObjectForm.tsx:1373` and `WizardForm.tsx:1071`) takes a
- * string template, replaces `{id}` / `{recordId}` with the saved record's
- * id (URL-escaped) and follows the result only when it is a relative
- * reference; a declared value it refuses is reported on the success toast
- * (`ObjectForm.tsx:1412-1429`). Any other value reached `template.replace`
+ * [#21464] Typed to the read: `resolveSuccessNavigate` (called from both
+ * form renderers' submit paths; read points recorded in
+ * `liveness/page.json`, row `regions`) takes a string template, replaces
+ * `{id}` / `{recordId}` with the saved record's id (URL-escaped) and follows
+ * the result only when it is a relative reference; a declared value it
+ * refuses is reported on the success toast. Any other value reached `template.replace`
* after the record had been written, and the submit then reported a failure.
* It is read only when `submitBehavior` is absent, and the renderer marks it
* deprecated in that key's favour.
@@ -8766,10 +8341,9 @@ const MASTER_DETAIL_DETAIL_HISTORY =
/**
* One `object-master-detail-form` detail collection (#20928) — STRICT, and
* exactly the eleven keys objectui's `MasterDetailForm` reads off an entry
- * (`packages/plugin-form/src/MasterDetailForm.tsx`, its
- * `MasterDetailDetailConfig` and every `d.` read in the file; read at the
- * `.objectui-sha` pin `31971ff1e28f`, re-read at `89cad75d5570` for #21589),
- * plus the `sortField` tombstone ({@link MASTER_DETAIL_DETAIL_SORT_FIELD_RETIRED}).
+ * (its `MasterDetailDetailConfig` and every `d.` read in the file; read
+ * points recorded in `liveness/page.json`, row `regions`), plus the
+ * `sortField` tombstone ({@link MASTER_DETAIL_DETAIL_SORT_FIELD_RETIRED}).
* A key nobody reads is not declared.
*
* `columns` IS {@link InlineGridColumnSchema}, the same object a relationship
@@ -8805,18 +8379,16 @@ const MASTER_DETAIL_DETAIL_HISTORY =
* the spec half of objectui#11070 round 9, the direction recorded on #21220's
* landing and mirrored on objectui#11396 ③).
*
- * An authored override the console no longer reads. At the `.objectui-sha` pin
- * `89cad75d5570`, `MasterDetailDetailConfig` has no `sortField` member
- * (`plugin-form/src/MasterDetailForm.tsx:83`): the field the line grid stamps
- * with each line's position is DERIVED from the child object (`deriveDetail`,
- * `deriveMasterDetail.ts:540`), carried on the resolved entry and handed to
- * the grid as `sort_field` (`:874`). The pin crossed that change without the
- * spec half, so an authored `sortField` published green, and a drag-reorder
- * stamped the derived field, or none. [#21768] At the pin `9dfaca654311` the
- * grid's own key is camelCase (objectstack-ai/objectui#11610), so the derived
- * field is handed over as `sortField` (`:877`, from `deriveDetail` at
- * `deriveMasterDetail.ts:475-498`); `MasterDetailDetailConfig` still has no
- * such member (`:83`), and the entry key stays a tombstone. The grid key is
+ * An authored override the console no longer reads (read points recorded in
+ * `liveness/page.json`, row `regions`). `MasterDetailDetailConfig` has no
+ * `sortField` member: the field the line grid stamps with each line's
+ * position is DERIVED from the child object (`deriveDetail`), carried on the
+ * resolved entry and handed to the grid. The console crossed that change
+ * without the spec half, so an authored `sortField` published green, and a
+ * drag-reorder stamped the derived field, or none. [#21768] The grid's own key
+ * is camelCase (objectstack-ai/objectui#11610), so the derived field is handed
+ * over as `sortField`; `MasterDetailDetailConfig` still has no such member, and
+ * the entry key stays a tombstone. The grid key is
* the one an inline `grid` form field declares
* ({@link objectFormRuntimeFieldGridMembers}), for the rows of its own value.
*
@@ -8824,7 +8396,7 @@ const MASTER_DETAIL_DETAIL_HISTORY =
* one of {@link INLINE_GRID_SORT_FIELD_LIST}, on an entry the renderer
* resolves. An entry that names `relationshipField` and at least one column
* and gives every column a `type` is kept exactly as authored: the renderer
- * loads no child schema for it, so it stamps no line position (`:977-979`).
+ * loads no child schema for it, so it stamps no line position.
*
* Stored and built pages that carry the key are stripped by the D2 conversion
* `object-master-detail-form-detail-sort-field-removed`, with a notice; its D3
@@ -8869,11 +8441,11 @@ function masterDetailDetailEntry() {
}
/**
- * `object-master-detail-form` (objectui `plugin-form/src/MasterDetailForm.tsx`
- * @ `eb7f586b`). Parent + child line items entered together (ADR-0001). The
- * child collections come from `details` — the FK and editable-grid columns
- * are auto-derived from the child object's metadata (`deriveMasterDetail.ts`),
- * so `details[].columns` is an override, not a requirement. Each entry is the
+ * `object-master-detail-form` (objectui's `MasterDetailForm`; read points
+ * recorded in `liveness/page.json`, row `regions`). Parent + child line items
+ * entered together (ADR-0001). The child collections come from `details` —
+ * the FK and editable-grid columns are auto-derived from the child object's
+ * metadata, so `details[].columns` is an override, not a requirement. Each entry is the
* strict {@link masterDetailDetailEntry} since #20928.
*
* `formType` speaks the MEASURED vocabulary — `simple` / `tabbed` — since
@@ -8907,8 +8479,8 @@ export const ObjectMasterDetailFormPropsSchema = lazySchema(() => strictObject({
}).optional().describe("Parent form presentation — the two variants the renderer honours for the parent half"),
/**
* [#21464] `sections` and `fields` are handed to the parent `object-form`
- * verbatim (`plugin-form/src/MasterDetailForm.tsx:1692-1693` at the
- * `.objectui-sha` pin `2e818d0b51ec`), so each is read exactly as that
+ * verbatim (read points recorded in `liveness/page.json`, row `regions`), so
+ * each is read exactly as that
* block's member is. `fields` takes the same field-name list
* ({@link formFieldNameList}); `sections` takes the same section shape — the
* one instance {@link buildObjectFormSection} builds (S-forms stage).
@@ -8942,10 +8514,10 @@ export type ObjectMasterDetailFormPropsParsed = z.infer `:220-221`,
- * `:1205` -> `:1251`); `index.tsx` and
- * `core/src/utils/record-source.ts` are byte-identical (`git diff --quiet`), so
- * their anchors held unmoved. At `a58626c88`, re-read there 2026-10-06:
- * every objectui file this record cites is byte-identical across the hop from
- * `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured there 2026-10-05: `ObjectMap.tsx`
- * and `core/src/utils/record-source.ts` are byte-identical across the hop from
- * `2e818d0b5` (`git diff --quiet`), and `index.tsx` changed there in one
- * docblock only, line for line (`:144-146`, objectui#8347 putting
- * `BaseSchema`'s index signature in the past tense), below every anchor this
- * record cites in it, so every anchor held unmoved. At `2e818d0b5`
- * (2026-10-04) `ObjectMap.tsx`,
- * `index.tsx` and `core/src/utils/record-source.ts` are byte-identical across
- * the hop from `ab1879721` (`git diff --quiet`), so every anchor held
- * unmoved. At `ab1879721` (2026-10-03) all three were byte-identical across
- * the hop from `89cad75d5` (`git diff --quiet`), so every anchor held unmoved
- * and was re-read in place. At `89cad75d5` (2026-10-02) all three
- * files changed across the hop from `31971ff1e`, so every anchor was
- * re-mapped through the diff and re-READ. `ObjectMap.tsx` (+11/-4) changed
- * in two places: objectui#11355 typed the flat-key read in
- * `warnOnShadowedFlatMapKeys` in place (line-neutral, above `:364`, which did
- * not move), and objectui#11168 slice 3 added a seven-line PRECEDENCE comment
- * above the `mapStyle` read and made the declared-block return path keep
- * `mapStyle` ahead of `map.style` (it used to hand `config.style` back
- * first), so every anchor from the `mapStyle` read on MOVED down 7 with its
- * cited text byte-identical — `:400` -> `:407`, `:405` -> `:412`, `:408` ->
- * `:415`, `:769` -> `:776`, `:795-798` -> `:802-805`, `:857` -> `:864`,
- * `:951`/`:952` -> `:958`/`:959`, `:1030`/`:1031` -> `:1037`/`:1038`,
- * `:1182`/`:1183` -> `:1189`/`:1190`, `:1198` -> `:1205` — and every one above
- * it did not move. `core/src/utils/record-source.ts` (+4/-5, objectui#10859
- * batch 8 retiring the bare `tree` arm) changed only below the three rungs,
- * which did not move. `index.tsx` (+19/-1, objectui#11168 slice 3) gained a
- * comment above the registration and `mapStyle`, `navigation` and
- * `enableClustering` inputs after `sort`, and rewrote the `map` input's
- * description from a three-field list into the whole block it reads, so the
- * `map` input MOVED `:101` -> `:116` and its `{ name: 'map', type: 'object' }`
- * head is unchanged. At `31971ff1e` (2026-10-01) `ObjectMap.tsx`
- * and `core/src/utils/record-source.ts` were byte-identical to `e420df310`, so
- * every anchor in them held unmoved and was re-read in place; `index.tsx`
- * changed (+7/-3, objectui#10859 batch 5: the comment above the registration
- * and the `objectName` input's description now count the node's
- * `dataSource` binding), the `map` input MOVING `:97` -> `:101`
- * byte-identical. At `e420df310` (2026-09-30) all three files
- * changed across the hop from `db11afd49`, so every anchor was re-mapped
- * through the diff and re-READ. `ObjectMap.tsx` (+16/-17, objectui#8348)
- * changed only in the record-source docblock above `getDataConfig`, one line
- * shorter, so every anchor from `:186` on MOVED up one line with its cited
- * text byte-identical and `:155-162` did not move; `index.tsx` (+10/-0,
- * objectui#8220) gained a comment above the registration and `filter` /
- * `sort` inputs after `map`, whose own input MOVED `:89` -> `:97`
- * byte-identical; `record-source.ts` (+38/-27,
- * objectui#8348 moving the tree tags to `view-data`) MOVED the three rungs
- * by 8, byte-identical. ⚠️ One CONTENT change, and it corrects this record:
- * the carrier paragraph `:173-181` is rewritten (`:174-180` now), and says
- * what objectui#9571 had already made true before `db11afd49` — the
- * `SchemaRenderer` spread that carried an authored `data` array to this
- * renderer as a React prop was stopped for object-arm blocks, so an authored
- * array no longer draws through `SchemaRenderer` at all; only a HOST's own
- * `data` prop does. The `data` entry below says so. At `db11afd49`
- * (2026-09-29) `ObjectMap.tsx`,
- * `index.tsx` and `core/src/utils/record-source.ts` were all byte-identical to
- * `dd3f7e1be`, so every anchor held unmoved and was re-checked in place.
- * At `dd3f7e1be` (2026-09-28) all three of
- * `ObjectMap.tsx` (+193/-72), `index.tsx` (+62/-10) and
- * `core/src/utils/record-source.ts` (+27/-20) changed across the hop from
- * `f8a9d0fb0`, so every anchor was re-mapped through the diff and re-READ.
- * Most MOVED with their cited text byte-identical — by 5 lines through
- * `:409` in `ObjectMap.tsx` and by 117 to 122 after it, by 7 in
- * `record-source.ts`, whose changes are docblocks and the retired bare `map`
- * arm. THREE changed CONTENT and say so where they are cited: the `filter`
- * handoff (objectui#10666), one `objectName` dependency key that left with
- * the metadata effect it belonged to (objectui#10664), and the second
- * registration's `map` input, which left with the bare `map` node type
- * (objectui#10393). At `f8a9d0fb0` all three files were byte-identical to
- * `62597c588` (`git diff --quiet`), so every anchor held unmoved from the
- * re-READ taken there 2026-09-23. `ObjectMap.tsx`
- * changed across the hop from `87af769e9` only in `warnOnTopLevelStyleUrl`'s
- * docblock and dev-warning text (objectui `2252653d0`, +27/-8, which names
- * the flat `mapStyle` spelling the flatten really carries), so no read point
- * changed and every anchor from `:289` on MOVED 16-19 lines with its cited
- * text byte-identical; those above it and `index.tsx` did not move. ⛔ No
- * anchor below is carried: each was re-mapped through the diff and re-read.
- * At `87af769e9` (2026-09-22) none was carried from `53ded82bf` either, and
- * one of them is a read that no longer exists rather than a number that
- * moved.)
- * Read points per key: `data` (`:220-221` — `getDataConfig` is now that one
+ * `object-map` (objectui's `plugin-map` renderer plus its registry shell; read
+ * points recorded in `liveness/page.json`, row `regions`).
+ * Read points per key: `data` (`getDataConfig` is one
* `resolveRecordSourceConfig(schema, 'view-data')` call, rung 1 of the ruled
- * record-source ladder, `core/src/utils/record-source.ts:307`. ⚠️ The
- * array-shorthand head this record used to cite beside it is GONE, deleted on
- * objectui#8348 — `:189-196` records the deletion and `:208-214` records the
- * carrier that used to survive it and no longer does: objectui#9571 stopped
- * `SchemaRenderer` spreading an authored `data` array onto object-arm blocks
- * as a React prop, so an authored array reaches this renderer neither through
- * the ladder nor through the props channel; only a host's own `data` prop
- * does. Until `db11afd49` this record said the props channel still carried
- * it, reading an objectui docblock that was itself stale),
- * `staticData` (rung 2,
- * `record-source.ts:311`), `objectName` (rung 3, `record-source.ts:318`; also
- * here at `:1228`, the `useNavigationOverlay` binding, and as a cache key at
- * `:274`, `:277`, `:352` and `:398`. ⚠️ The dependency-key read this record
- * cited at `:965` is GONE at this pin: objectui#10664 replaced the metadata
- * effect whose dependency list it was with `useSettledSchema` (`:840-843`),
- * keyed on the ladder's `recordSourceObjectName` (`:814`), so the object is
- * still read there, only no longer through that list),
- * `filter` (`:902`, read once through `useResolvedFilter`, which resolves its
- * context tokens — objectui#10666 — and holds the result, which `:996` and
- * `:1075` hand to `$filter` on the inline and the object fetch respectively;
- * at `f8a9d0fb0` both handed `schema.filter` verbatim),
- * `sort` (`:997` and `:1076`, through the shared `convertSortToQueryParams` sink
- * to `$orderby`), `map` (`:446` — `getMapConfig` branch 1, the author face and
- * the registration's declared `{ name: 'map', type: 'object' }` input,
- * `plugin-map/src/index.tsx:116`; the second copy this record cited at `:78`
- * belonged to the bare `map` registration, retired on objectui#10393, so
- * `object-map` is now the one registration declaring it), `mapStyle`
- * (`:441`, `schema.mapStyle || schema.map?.style`, read ahead of `map.style`
- * on every return path since objectui#11168 slice 3 — through `31971ff1e` the
- * declared-block path returned `config.style || style`, so a map writing
- * both drew `map.style`), `navigation` (`:1227`) and `enableClustering`
- * (`:1251`). Since objectui#11168 slice 3 the registration also declares
- * `mapStyle`, `navigation` and `enableClustering` inputs
- * (`plugin-map/src/index.tsx:121-123`).
+ * record-source ladder. ⚠️ The array-shorthand head that once stood beside it
+ * is GONE, deleted on objectui#8348, and the carrier that used to survive it no
+ * longer does: objectui#9571 stopped `SchemaRenderer` spreading an authored
+ * `data` array onto object-arm blocks as a React prop, so an authored array
+ * reaches this renderer neither through the ladder nor through the props
+ * channel; only a host's own `data` prop does), `staticData` (rung 2),
+ * `objectName` (rung 3; also the `useNavigationOverlay` binding, and a cache
+ * key in each of the renderer's dev warnings; the object-def load is
+ * `useSettledSchema`, keyed on the ladder's `recordSourceObjectName` —
+ * objectui#10664), `filter` (read once through `useResolvedFilter`, which
+ * resolves its context tokens — objectui#10666 — and holds the result, which
+ * the inline and the object fetch each hand to `$filter`), `sort` (through the
+ * shared `convertSortToQueryParams` sink to `$orderby`, on both fetches), `map`
+ * (`getMapConfig` branch 1, the author face and the registration's declared
+ * `{ name: 'map', type: 'object' }` input; the bare `map` registration that
+ * once declared it too is retired, objectui#10393, so `object-map` is the one
+ * registration declaring it), `mapStyle` (`schema.mapStyle ||
+ * schema.map?.style`, read ahead of `map.style` on every return path since
+ * objectui#11168 slice 3), `navigation` and `enableClustering`. Since
+ * objectui#11168 slice 3 the registration also declares `mapStyle`,
+ * `navigation` and `enableClustering` inputs.
*
* Measured and deliberately NOT declared:
*
* - the flat `map`-config spellings — the ObjectView/ListView flatten product,
* ruled an internal transport form (objectui#5018). They get
* {@link OBJECT_MAP_FLAT_CONFIG_GUIDANCE}'s wrong-layer prescription.
- * - `style`. `ObjectMap.tsx:349`, inside `warnOnTopLevelStyleUrl` (`:343`),
- * reads it only to say it is NOT consumed as a map style (objectui#5017):
- * it is `BaseSchema.style`, the node's inline CSS
- * record, and `COMPONENT_NODE_KEYS` above already sends it back to the node.
+ * - `style`. The renderer reads it only inside `warnOnTopLevelStyleUrl`, to
+ * say it is NOT consumed as a map style (objectui#5017): it is
+ * `BaseSchema.style`, the node's inline CSS record, and
+ * `COMPONENT_NODE_KEYS` above already sends it back to the node.
* - `clusterRadius`, `data` as an ARRAY, `onMarkerClick` / `onRowClick` /
* `onEdit` / `onDelete`, `className` and `dataSource` — React props of
* `ObjectMapProps`, host-injected, never authored metadata.
*
* VALUE posture for `map`: {@link ListMapConfigSchema}, this repo's own block —
* the later value ratchet the previous posture here deferred, taken now that the
- * one-key gap is closed. `:449` validates the authored block against objectui's
- * `ObjectMapConfigSchema` and this block declares the same eight keys, `style`
- * included; until that declaration landed the door had to stay `z.unknown()`,
- * because pointing it at a schema missing `style` would have refused a value
- * `getMapConfig` honours at `:441` (`schema.mapStyle || schema.map?.style`).
- * `mapStyle` above is unaffected: it stays the component-level spelling read
- * FIRST, and is not a member of the config block.
+ * one-key gap is closed. The renderer validates the authored block against
+ * objectui's `ObjectMapConfigSchema` and this block declares the same eight
+ * keys, `style` included; until that declaration landed the door had to stay
+ * `z.unknown()`, because pointing it at a schema missing `style` would have
+ * refused a value `getMapConfig` honours (`schema.mapStyle ||
+ * schema.map?.style`). `mapStyle` above is unaffected: it stays the
+ * component-level spelling read FIRST, and is not a member of the config block.
*/
export const ObjectMapPropsSchema = lazySchema(() => strictObject({
surface: 'this `object-map`',
@@ -9185,10 +8620,9 @@ export const ObjectMapPropsSchema = lazySchema(() => strictObject({
* The bare-array shorthand is NOT declared: `ViewData` is a discriminated
* union over OBJECT variants, so an array under `data` cannot be published,
* and `staticData` below is this block's declared door for inline rows — the
- * renderer's own comment says so. ⚠️ At `87af769e9` the renderer no longer
- * normalizes it either: the head this record used to cite at
- * `ObjectMap.tsx:169-172` was deleted on objectui#8348, and `:168-176` is
- * now the note that an authored array reaches the component on the React
+ * renderer's own comment says so. ⚠️ The renderer no longer normalizes it
+ * either: the array head was deleted on objectui#8348, and the renderer's
+ * own note records that an authored array reaches the component on the React
* props channel alone.
*/
data: ViewDataSchema.optional()
@@ -9198,92 +8632,14 @@ export const ObjectMapPropsSchema = lazySchema(() => strictObject({
/**
* Base query filter — the `ViewFilterRule` ARRAY form, the one filter
* orthography every `filter` door in this map shares (ui#6206-B reaching the
- * `object-*` family: #15449, decision batch #55, option A). Measured at objectui `b9814b334` (re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `20c6d351a` (`git diff --quiet`), so every anchor held unmoved. At
- * `20c6d351a`, re-read there 2026-10-10:
- * every objectui file this record cites is byte-identical across the hop from
- * `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * `ObjectMap.tsx` changed above all three anchors (+85/-4, objectui#11819,
- * objectui `fbaa79d19`: the WebGL2 probe and the list fallback), so each MOVED
- * down 38 with its text byte-identical, `:864` -> `:902`, `:958` -> `:996` and
- * `:1037` -> `:1075`; and `plugin-map/src/index.tsx` is byte-identical
- * (`git diff --quiet`), so the `filter` input held unmoved at `:119`. At
- * `a58626c88`, re-read there 2026-10-06:
- * every objectui file this record cites is byte-identical across the hop from
- * `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured
- * there 2026-10-05: `ObjectMap.tsx` is byte-identical to `2e818d0b5`
- * (`git diff --quiet`) and `plugin-map/src/index.tsx` changed there in one
- * docblock only, line for line, below its inputs (`:144-146`,
- * objectui#8347), so all three anchors and the `filter` input held
- * unmoved. At `2e818d0b5`, re-measured
- * there 2026-10-04: `ObjectMap.tsx` and `plugin-map/src/index.tsx` are
- * byte-identical to `ab1879721` (`git diff --quiet`), so all three anchors
- * and the `filter` input held unmoved. At `ab1879721`, re-READ there
- * 2026-10-03: `ObjectMap.tsx` and `plugin-map/src/index.tsx` are
- * byte-identical to `89cad75d5` (`git diff --quiet`), so all three anchors
- * and the `filter` input held unmoved and were re-read in place. At
- * `89cad75d5`, re-READ there 2026-10-02: `ObjectMap.tsx` changed above all three anchors
- * (objectui#11168 slice 3's seven-line `mapStyle` precedence comment;
- * objectui#11355's in-place typing of the flat-key read is line-neutral), so
- * each MOVED down 7 with its text byte-identical, `:857` -> `:864`, `:951`
- * -> `:958` and `:1030` -> `:1037`; and `plugin-map/src/index.tsx` gained a
- * comment above the registration (objectui#11168 slice 3), the `filter`
- * input MOVING `:104` -> `:119` byte-identical. At `31971ff1e`, re-READ there
- * 2026-10-01: `ObjectMap.tsx` was byte-identical to `e420df310`, so all three
- * anchors held unmoved, and `plugin-map/src/index.tsx` changed above its
- * inputs (objectui#10859 batch 5), the `filter` input MOVING `:100` ->
- * `:104` byte-identical. At `e420df310`, re-READ there
- * 2026-09-30: `ObjectMap.tsx` changed only in the record-source docblock
- * above both anchors, one line shorter (objectui#8348), so each MOVED up one
- * line with its text byte-identical, `:858` -> `:857`, `:952` -> `:951` and
- * `:1031` -> `:1030`; and objectui#8220 now publishes a `filter` input on the
- * `object-map` registration in this same rule-array form, `type: 'array'`
- * (`plugin-map/src/index.tsx:100`). At `db11afd49`, re-READ there
- * 2026-09-29: `ObjectMap.tsx` is byte-identical to `dd3f7e1be`, so both anchors
- * held unmoved; at `dd3f7e1be`, re-READ there
- * 2026-09-28 — `ObjectMap.tsx` changed on this hop, and so did the CONTENT
- * of both anchors: objectui#10666 put a resolution step in front of them, so
- * `schema.filter` is now read once, through `useResolvedFilter`, which
- * resolves its context tokens (`{current_user_id}`, the date macros) and
- * holds the result, and both fetches send that held value instead of
- * `schema.filter` verbatim. At `f8a9d0fb0`, byte-identical to `62597c588`
- * and re-READ there 2026-09-23, both anchors had MOVED 19 lines from
- * `:814` / `:895` with their text byte-identical, that hop changing only a
- * docblock and a dev warning above them): `ObjectMap.tsx:902` reads
- * `schema.filter`, and `:996` and `:1075` hand it, tokens resolved, to
- * `$filter` on the inline and the object fetch, where the adapter lowers a
- * rule array exactly as it does for the kanban and the calendar. The record
- * form is refused at `filter`.
+ * `object-*` family: #15449, decision batch #55, option A). Read points
+ * recorded in `liveness/page.json`, row `regions`: the renderer reads
+ * `schema.filter` once, through `useResolvedFilter`, which resolves its
+ * context tokens (`{current_user_id}`, the date macros — objectui#10666) and
+ * holds the result, and the inline and the object fetch each hand that held
+ * value to `$filter`, where the adapter lowers a rule array exactly as it
+ * does for the kanban and the calendar. The record form is refused at
+ * `filter`.
*/
filter: z.array(ViewFilterRuleSchema, {
error: ruleArrayFilterError({
@@ -9295,94 +8651,13 @@ export const ObjectMapPropsSchema = lazySchema(() => strictObject({
/**
* Marker order — the `SortItem` ARRAY form, the one sort orthography every
* DECLARED `sort` door on this platform carries (objectui#8221, decision batch
- * #77, option B). Measured at objectui `b9814b334` (re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `20c6d351a` (`git diff --quiet`), so every anchor held unmoved. At
- * `20c6d351a`, re-read there 2026-10-10:
- * every objectui file this record cites is byte-identical across the hop from
- * `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * `ObjectMap.tsx` changed above both anchors (+85/-4, objectui#11819, objectui
- * `fbaa79d19`: the WebGL2 probe and the list fallback), so both MOVED down 38
- * with their text byte-identical, `:959` -> `:997` and `:1038` -> `:1076`; and
- * `plugin-map/src/index.tsx` is byte-identical (`git diff --quiet`), so the
- * `sort` input held unmoved at `:120`. At `a58626c88`, re-read there
- * 2026-10-06:
- * every objectui file this record cites is byte-identical across the hop from
- * `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured there 2026-10-05 —
- * `ObjectMap.tsx` is byte-identical to `2e818d0b5` (`git diff --quiet`) and
- * `plugin-map/src/index.tsx` changed there in one docblock only, line for
- * line, below its inputs (`:144-146`, objectui#8347), so both anchors and
- * the `sort` input held unmoved. At `2e818d0b5`, re-measured there
- * 2026-10-04 —
- * `ObjectMap.tsx` and `plugin-map/src/index.tsx` are byte-identical to
- * `ab1879721` (`git diff --quiet`), so both anchors and the `sort` input
- * held unmoved. At `ab1879721`, re-READ there 2026-10-03 — `ObjectMap.tsx`
- * and `plugin-map/src/index.tsx` are byte-identical to `89cad75d5`
- * (`git diff --quiet`), so both anchors and the `sort` input held unmoved
- * and were re-read in place. At `89cad75d5`, re-READ there 2026-10-02 —
- * `ObjectMap.tsx` changed above both anchors (objectui#11168 slice 3's seven-line `mapStyle`
- * precedence comment; objectui#11355's in-place typing of the flat-key read
- * is line-neutral), so both MOVED down 7 with their text byte-identical,
- * `:952` -> `:959` and `:1031` -> `:1038`; and `plugin-map/src/index.tsx`
- * gained a comment above the registration and three inputs after `sort`
- * (objectui#11168 slice 3), the `sort` input MOVING `:105` -> `:120`
- * byte-identical. At `31971ff1e`, re-READ there 2026-10-01 — `ObjectMap.tsx`
- * was byte-identical to `e420df310`, so both anchors held unmoved, and
- * `plugin-map/src/index.tsx` changed above its inputs (objectui#10859 batch
- * 5), the `sort` input MOVING `:101` -> `:105` byte-identical. At
- * `e420df310`, re-READ there 2026-09-30 — `ObjectMap.tsx`
- * changed only in the record-source docblock above both anchors, one line
- * shorter (objectui#8348), so both MOVED up one line with their text
- * byte-identical, `:953` -> `:952` and `:1032` -> `:1031`; and
- * `plugin-map/src/index.tsx` CHANGED what this record says about it:
- * objectui#8220 declared a `sort` input on the `object-map` registration,
- * `type: 'array'` in this same `[{ field, order }]` form (`:101`). At
- * `db11afd49`, re-READ there 2026-09-29 — `ObjectMap.tsx`
- * and `plugin-map/src/index.tsx` are byte-identical to `dd3f7e1be`, so both
- * anchors held unmoved; at `dd3f7e1be`, 2026-09-28, `ObjectMap.tsx`
- * and `plugin-map/src/index.tsx` both changed on this hop; both anchors
- * MOVED with their text byte-identical, `:834` -> `:953` and `:915` ->
- * `:1032`, and the `object-map` registration, which gained `data` and
- * `staticData` inputs (objectui#10394) while its bare `map` twin was
- * retired (objectui#10393), still declares no `sort`. At `f8a9d0fb0` both files were byte-identical
- * to `62597c588`, re-READ there 2026-09-23 — both anchors had MOVED 19
- * lines from `:815` / `:896` with their text byte-identical):
- * `ObjectMap.tsx:997` and `:1076`
- * hand `schema.sort` to the shared `convertSortToQueryParams` sink as the
- * fetch's `$orderby` — the same sink `object-grid` and `object-calendar`
- * declare against, so the legacy string clause is refused here for the same
- * ruling. Through `db11afd49` `plugin-map/src/index.tsx` declared no `sort`
- * input at all; since objectui#8220 it declares one in this array form
- * (`:120`), so the registry and this door agree.
+ * #77, option B). Read points recorded in `liveness/page.json`, row
+ * `regions`: both fetches hand `schema.sort` to the shared
+ * `convertSortToQueryParams` sink as the fetch's `$orderby` — the same sink
+ * `object-grid` and `object-calendar` declare against, so the legacy string
+ * clause is refused here for the same ruling. Since objectui#8220 the
+ * registration declares a `sort` input in this array form, so the registry
+ * and this door agree.
*/
sort: z.array(SortItemSchema).optional()
.describe('Marker order for the fetched records — the SortItem array form `[{ field, order }, ...]`, the one sort orthography every declared `sort` door on this platform shares; lowered to the wire `$orderby`. The legacy string clause (`name desc`) is refused — see migration `object-block-sort-item-array`'),
@@ -9393,11 +8668,10 @@ export const ObjectMapPropsSchema = lazySchema(() => strictObject({
/**
* [#21464] The list view's own {@link NavigationConfigSchema}, by reference
* — the carrier `object-grid`, `object-kanban`, `object-calendar` and
- * `object-timeline` already take. `ObjectMap.tsx:1189` (at the pin
- * `89cad75d55`) hands `schema.navigation` to `useNavigationOverlay`, which
- * reads `navigation?.mode ?? 'page'`
- * (`react/src/hooks/useNavigationOverlay.ts:364`) and types its mode union
- * as that schema's.
+ * `object-timeline` already take. The renderer hands `schema.navigation` to
+ * `useNavigationOverlay`, which reads `navigation?.mode ?? 'page'` and types
+ * its mode union as that schema's (read points recorded in
+ * `liveness/page.json`, row `regions`).
* Until #21464 this member was `z.unknown()`, so `navigation: 42` and a bare
* mode string such as `'drawer'` passed every door and opened the record
* page, whatever they named.
@@ -9420,9 +8694,10 @@ export type ObjectMapProps = z.input;
export type ObjectMapPropsParsed = z.infer;
/**
- * The flat `GanttConfig` spellings `getGanttConfig`'s branch 2 reads
- * (`ObjectGantt.tsx:513-543`) and that `ObjectView` / `ListView` EMIT when they
- * flatten `options.gantt` — objectui's own `FLAT_GANTT_CONFIG_KEYS`. Read, but
+ * The flat `GanttConfig` spellings `getGanttConfig`'s branch 2 reads and that
+ * `ObjectView` / `ListView` EMIT when they flatten `options.gantt` — objectui's
+ * own `FLAT_GANTT_CONFIG_KEYS` (read points recorded in `liveness/page.json`,
+ * row `regions`). Read, but
* NOT authorable, for the reason the map's twin set above records: objectui#6469
* inherited the objectui#5018 ruling for this block, so the `gantt` block is the
* authoring shape, it is taken WHOLE when present, and every flat key beside it
@@ -9467,19 +8742,17 @@ const OBJECT_GANTT_FLAT_CONFIG_GUIDANCE: readonly KeySetGuidance[] = [
/**
* [#21464] One `object-gantt` reference line — the element of the block's
- * `markers`, as the chart reads it at the `.objectui-sha` pin `ab1879721595`
- * (unchanged at objectui `main` `94985a92ba`). `ObjectGantt.tsx:2505` hands
- * `schema.markers` to `GanttView` verbatim, which reads three members per
- * marker: `date` places the line (`GanttView.tsx:913-924` re-bases it for the
- * chart's time zone, `:2394-2413` maps it through the axis and DROPS a marker
- * whose date does not parse or falls outside the drawn range), `label` is the
- * text drawn against it, and `color` its CSS colour, the theme's primary colour
- * when absent (`:2407`, drawn at `:4083-4100` and in the SVG export at
- * `:3320-3332`). Nothing else is read off a marker.
+ * `markers`, as the chart reads it (read points recorded in
+ * `liveness/page.json`, row `regions`). The block hands `schema.markers` to
+ * `GanttView` verbatim, which reads three members per marker: `date` places
+ * the line (re-based for the chart's time zone, then mapped through the axis,
+ * which DROPS a marker whose date does not parse or falls outside the drawn
+ * range), `label` is the text drawn against it, and `color` its CSS colour, the
+ * theme's primary colour when absent (drawn on the chart and in the SVG
+ * export). Nothing else is read off a marker.
*
* The contract is objectui's own authoring declaration, taken as it stands:
- * `ObjectGanttSchema.markers` (`types/src/objectql.ts:3787-3794`) and its zod
- * mirror (`types/src/zod/objectql.zod.ts:2738-2746`) declare
+ * `ObjectGanttSchema.markers` and its zod mirror declare
* `{ date: string; label?: string; color?: string }`, `date` a STRING because
* authored metadata is JSON and a `Date` cannot survive it (the runtime
* `GanttMarker` this feeds also takes a `Date`, which only a code-composed
@@ -9513,221 +8786,38 @@ function objectGanttMarker() {
}
/**
- * `object-gantt` (objectui `plugin-gantt/src/ObjectGantt.tsx` plus the registry
- * shell `plugin-gantt/src/index.tsx`, read at objectui `b9814b334`, re-read there 2026-10-14:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `1fb1ced36` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ListView.tsx` changed (+23/-3: objectui#12292,
- * objectui#12030 and objectui#12270, none of it in a `case` arm), and its `case
- * 'gantt'` MOVED `3964` -> `3981`, byte-identical, and still writes the toolbar
- * Search term onto the node as `search` / `searchableFields`. At `1fb1ced36`,
- * re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `9646e2ed2` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ListView.tsx` changed (+34/-79, objectui#12217,
- * objectui `f5b66bf97`: two import lines changed in place and one added at the
- * top, a docblock added and `useListViewTranslation` exported near `:1040`, the
- * grid's inline empty state replaced from `:5677` down), and its `case 'gantt'`
- * MOVED `3959` -> `3964`, byte-identical, and still writes the toolbar Search
- * term onto the node as `search` / `searchableFields`. At `9646e2ed2`, re-read
- * there 2026-10-12:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `088e0f705` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ListView.tsx` changed (+9/-9, objectui#12189,
- * objectui `26b0bd2d1`: the FilterBuilder group type's rename, nine lines
- * replaced in place, the last at `:1558`), and its `case 'gantt'` held at
- * `3959` and still writes the toolbar Search term onto the node as `search` /
- * `searchableFields`. At `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * `record-source.ts`, `plugin-gantt/src/index.tsx` and `ListView.tsx` are
- * byte-identical across the hop from `0df67f237` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ObjectGantt.tsx` +27/-4 changed for
- * objectui#12082 (objectui `752504520`: the chart's in-chart writes read the
- * affordance-to-grant map) — two import lines above `getGanttConfig`, a
- * 21-line block of grant reads below the reload, and four handler props whose
- * handlers are now withheld without the grant — no hunk on a cited read, so
- * every anchor MOVED with its cited text byte-identical, by 2 above the block
- * (`:613-615` -> `:615-617`, `:725` -> `:727`, `:921` -> `:923`,
- * `:1066`/`:1067` -> `:1068`/`:1069`, `:888-891` -> `:890-893`,
- * `:1081-1086` -> `:1083-1088`, `:1075`/`:1077` -> `:1077`/`:1079`,
- * `:1679`/`:1680` -> `:1681`/`:1682`, `:1831`/`:1833` -> `:1833`/`:1835`,
- * `:1969` -> `:1971`, `:2036` -> `:2038`) and by 23 below it (`:2348` ->
- * `:2371`, `:2506`-`:2514` -> `:2529`-`:2537`, `:2549-2555` -> `:2572-2578`),
- * and each is cited below at this pin. At `0df67f237`, re-read there
- * 2026-10-11:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `20c6d351a` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ListView.tsx` changed (+229/-57), and its
- * `case 'gantt'` is byte-identical, moved `3804` -> `3959`, and still writes
- * the toolbar Search term onto the node as `search` / `searchableFields`. At
- * `20c6d351a`, re-read there 2026-10-10:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `47b1f0bb7` (`git diff --quiet`), so every
- * anchor in them held unmoved; `ListView.tsx` changed (+281/-235), and its
- * `case 'gantt'` still writes the toolbar Search term onto the node as `search`
- * / `searchableFields`. At `47b1f0bb7`, re-read there 2026-10-09:
- * `ObjectGantt.tsx`, `record-source.ts` and `plugin-gantt/src/index.tsx` are
- * byte-identical across the hop from `f0268ad78` (`git diff --quiet`), so every
- * anchor in them held unmoved. At `f0268ad78`, re-read there 2026-10-09:
- * `ObjectGantt.tsx` and `record-source.ts` are byte-identical across the hop from
- * `a58626c88` (`git diff --quiet`), so every anchor in them held unmoved;
- * `plugin-gantt/src/index.tsx` changed in one line only, the `markers` input's
- * description (`:190`, objectui `c0862c1cc`), below the `gantt` input, which did
- * not move from `:179`. At `a58626c88`, re-read there 2026-10-06:
- * every objectui file this record cites is byte-identical across the hop from
- * `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured there 2026-10-05:
- * `record-source.ts` is byte-identical to `2e818d0b5` (`git diff --quiet`), so
- * its anchors held unmoved; `plugin-gantt/src/index.tsx` changed there in one
- * docblock only, line for line, below the `gantt` input (`:215-217`,
- * objectui#8347), which did not move; and `ObjectGantt.tsx` +4/-3 grew one
- * line in the `ObjectGanttProps` docblock above `getGanttConfig`
- * (objectui#8347 putting the index-signature note in the past tense), so
- * every anchor in it MOVED by 1 (`:612-614` -> `:613-615`, `:724` -> `:725`,
- * `:920` -> `:921`, `:1065`/`:1066` -> `:1066`/`:1067`, `:1074`/`:1076` ->
- * `:1075`/`:1077`, `:887-890` -> `:888-891`, `:1080-1085` -> `:1081-1086`,
- * `:1678`/`:1679` -> `:1679`/`:1680`, `:1830`/`:1832` -> `:1831`/`:1833`,
- * `:1968` -> `:1969`, `:2035` -> `:2036`, `:2347` -> `:2348`, `:2505`-`:2513`
- * -> `:2506`-`:2514`, `:2548-2554` -> `:2549-2555`), each with its cited text
- * byte-identical; NONE changed content. At `2e818d0b5`, re-measured there
- * 2026-10-04:
- * `plugin-gantt/src/index.tsx`, `record-source.ts` and `ObjectGantt.tsx` are
- * byte-identical to `ab1879721` (`git diff --quiet`), so every anchor held
- * unmoved. At `ab1879721`, re-measured there 2026-10-03:
- * `plugin-gantt/src/index.tsx` and `record-source.ts` are byte-identical to
- * `89cad75d5` (`git diff --quiet`), so their anchors held unmoved; and
- * `ObjectGantt.tsx` +8/-0 gained one import line above `getGanttConfig` and,
- * in the tooltip's `percent` row, objectui#11475's `percentCellScale(def)`
- * argument with its comment (+7) — so every anchor through the tooltip MOVED
- * by 1 (`:611-613` -> `:612-614`, `:723` -> `:724`, `:919` -> `:920`,
- * `:1064`/`:1065` -> `:1065`/`:1066`, `:1073`/`:1075` -> `:1074`/`:1076`,
- * `:886-889` -> `:887-890`, `:1079-1084` -> `:1080-1085`) and every anchor
- * after it by 8 (`:1670`/`:1671` -> `:1678`/`:1679`, `:1822`/`:1824` ->
- * `:1830`/`:1832`, `:1960` -> `:1968`, `:2027` -> `:2035`, `:2339` ->
- * `:2347`, `:2497`-`:2505` -> `:2505`-`:2513`, `:2540-2546` -> `:2548-2554`),
- * each with its cited text byte-identical; NONE changed content. At
- * `89cad75d5` (2026-10-02) all three
- * files changed across the hop from `31971ff1e`, so every anchor was
- * re-mapped through the diff and re-READ; NONE changed content.
- * `ObjectGantt.tsx` +47/-10: one import added above `getGanttConfig` and one
- * removed above it (objectui#11254's `resolveFieldScale` /
- * `formatDisplayNumber`), objectui#11355 typing the flat-key read in
- * `warnOnShadowedFlatGanttKeys` (+1 net), and objectui#11254's field-width
- * reads in the tooltip's `number` and `percent` rows (+23 and +13) — so
- * `getGanttConfig` MOVED by 1 (`:610-612` -> `:611-613`), the record-source
- * ladder, the filter, the reload and its search pair by 1 (`:722` -> `:723`,
- * `:918` -> `:919`, `:1063`/`:1064` -> `:1064`/`:1065`, `:1072`/`:1074` ->
- * `:1073`/`:1075`, `:885-888` -> `:886-889`, `:1078-1083` -> `:1079-1084`),
- * and every anchor after the tooltip by 37 (`:1633`/`:1634` ->
- * `:1670`/`:1671`, `:1785`/`:1787` -> `:1822`/`:1824`, `:1923` -> `:1960`,
- * `:1990` -> `:2027`, `:2302` -> `:2339`, `:2460`-`:2468` -> `:2497`-`:2505`,
- * `:2503-2509` -> `:2540-2546`), each with its cited text byte-identical.
- * `record-source.ts` +4/-5 (objectui#10859 batch 8 retiring the bare `tree`
- * arm) changed only below the three rungs, which did not move.
- * `plugin-gantt/src/index.tsx` +45/-1 (objectui#11168 slice 4): a navigation
- * description constant and a comment above the registration, the `gantt`
- * input's description rewritten from a member list naming `percentageField`
- * (which nothing reads) into this row's own describe, and eleven inputs
- * after `sort` — `navigation`, `label`, `skipWeekends`, `holidays`,
- * `persistLayout`, `viewName`, `markers`, `criticalPath`, `showBaselines`,
- * `readOnly`, `mobileReadOnly` (`:184-194`), every one a key this row
- * declares — so the `gantt` input MOVED `:146` -> `:179` with its
- * `{ name: 'gantt', type: 'object' }` head unchanged. At `31971ff1e`
- * (2026-10-01) `ObjectGantt.tsx` and `record-source.ts` were byte-identical to
- * `e420df310`, so every anchor in them held unmoved and was re-read in place;
- * `plugin-gantt/src/index.tsx` changed (+3/-2, objectui#11117: the
- * `objectName` input's description and the comment above the registration
- * now count a `dataSource.object` binding), the `gantt` input MOVING `:145`
- * -> `:146` byte-identical. At `e420df310` (2026-09-30) all three
- * files changed across the hop from `db11afd49`, and every anchor was
- * re-mapped through the diff and re-READ; NONE changed content. `ObjectGantt.tsx`
- * +85/-26 (objectui#11141's inclusive date-only end, objectui#8348's
- * record-source ladder, objectui#11070's `reference` spelling), every anchor
- * MOVING with its cited text byte-identical — by 47 through `getGanttConfig`,
- * by 49 through the reload, by 51 through the layout key and by 59 after it;
- * `plugin-gantt/src/index.tsx` +10/-0 (objectui#8220: a comment and `filter` /
- * `sort` inputs, in the array forms this row declares), the `gantt` input
- * MOVING `:137` -> `:145`; `record-source.ts` +38/-27, the three rungs MOVING
- * by 8. At `db11afd49` (2026-09-29)
- * `plugin-gantt/src/index.tsx` and `record-source.ts` were byte-identical to
- * `dd3f7e1be`, and `ObjectGantt.tsx` changed (+14/-10: objectui#10866's
- * zoned-chart DST day read and write through `invertTo` / `invertFrom`, and
- * comment re-citations), the first insertion at `:391` and every later anchor
- * MOVED by 4 with its cited text byte-identical, none of the cited lines changing
- * content. At `dd3f7e1be` (2026-09-28) all three
- * files changed across the hop from `f8a9d0fb0` — `ObjectGantt.tsx` +285/-56
- * (in-place refresh on the invalidation bus, objectui#10035 / objectui#7237,
- * the core row ceiling, objectui#7508, objectui#10666's resolved filter,
- * objectui#10866's date-only days), `plugin-gantt/src/index.tsx` +19/-1
- * (`objectName` no longer a required input, objectui#7470) and
- * `record-source.ts` (docblocks and the retired bare `map` arm) — so every
- * anchor was re-mapped through the diff and re-READ. Two changed CONTENT and
- * say so where they are cited, the `filter` handoff and the row ceiling;
- * every other one MOVED (by 56 to 232 lines in `ObjectGantt.tsx`, `121` ->
- * `137` in `index.tsx`, by 7 in `record-source.ts`) with its cited text
- * byte-identical, and the retired `:1849` reading is a blank line at its new
- * `:2103` too. On the hop onto `f8a9d0fb0`, `plugin-gantt/src/index.tsx` and
- * `record-source.ts` were byte-identical to `62597c588` and `ObjectGantt.tsx`
- * changed (+29/-2, objectui#10250: the toolbar Search term, below) — those
- * above the insertion (`:501-503`, `:613`) did not move, and every later one
- * MOVED 21 or 29 lines with its cited text byte-identical (the retired `:1849`
- * reading was a blank line at `:1878`). All three files were
- * byte-identical across the hop onto `62597c588`. At `87af769e9`
- * (re-READ 2026-09-22) not one anchor below was carried from `53ded82bf`;
- * every number was re-derived from that tree, and the `label` one moved far
- * enough that the retired reading now lands in an unrelated callback.)
- * Read points per key: `data` (`resolveRecordSourceConfig` at
- * `:727` — rung 1, `core/src/utils/record-source.ts:307`), `staticData` (rung 2,
- * `record-source.ts:311`), `objectName` (rung 3; also `:1835` and `:2038` here),
- * `filter` (`:923`, read once through `useResolvedFilter`, which resolves its
- * context tokens — objectui#10666 — and `:1068` sends the held result to
- * `$filter`; at `f8a9d0fb0` it was sent verbatim), `sort` (`:1069`, through
- * `convertSortToQueryParams` to `$orderby`), `gantt` (`:615-617` —
- * `getGanttConfig` branch 1, the author face and the registration's declared
- * `{ name: 'gantt', type: 'object' }` input (`plugin-gantt/src/index.tsx:179`),
- * validated there against this
- * repo's own {@link GanttConfigSchema}), `navigation` (`:1971`), `label`
- * (`:2574`, resolved through `resolveInlineI18nLabel` for the export file
- * name — this record said `resolveI18nLabel`, which the line did not read at
- * `f8a9d0fb0` either —
- * ⚠️ the retired reading `:1849` was the comment ABOVE that chain and at this
- * pin `87af769e9` was a BLANK line (nothing cites `:1849` now), two above a dependency-delete callback's own comment,
- * so it is re-READ here, not re-pointed),
- * `skipWeekends` (`:1681`), `holidays` (`:1682`), `persistLayout` (`:1833`),
- * `viewName` (`:1835`), `markers` (`:2529`), `criticalPath` (`:2532`),
- * `showBaselines` (`:2535`), `readOnly` (`:2371` and `:2536`) and
- * `mobileReadOnly` (`:2537`).
+ * `object-gantt` (objectui's `plugin-gantt` renderer plus its registry shell;
+ * read points recorded in `liveness/page.json`, row `regions`).
+ * Read points per key: `data` (rung 1 of `resolveRecordSourceConfig`),
+ * `staticData` (rung 2), `objectName` (rung 3; also the layout-persistence key
+ * and the navigation binding), `filter` (read once through `useResolvedFilter`,
+ * which resolves its context tokens — objectui#10666 — and the reload sends the
+ * held result to `$filter`), `sort` (through `convertSortToQueryParams` to
+ * `$orderby`), `gantt` (`getGanttConfig` branch 1, the author face and the
+ * registration's declared `{ name: 'gantt', type: 'object' }` input, validated
+ * there against this repo's own {@link GanttConfigSchema}), `navigation`,
+ * `label` (resolved through `resolveInlineI18nLabel` for the export file name),
+ * `skipWeekends` and `holidays` (the working calendar), `persistLayout` and
+ * `viewName` (the layout-persistence key), `markers`, `criticalPath`,
+ * `showBaselines`, `readOnly` (the chart and the record overlay's lock) and
+ * `mobileReadOnly`.
*
* Measured and deliberately NOT declared: the flat `GanttConfig` spellings (the
* flatten product — {@link OBJECT_GANTT_FLAT_CONFIG_GUIDANCE}); `title`, which
* this renderer never reads (the export-name chain is `gantt.exportFileName` →
- * `label` → the OBJECT's label → `objectName`, `:2572-2578`); a row cap — the
- * reload's `$top` is the platform ceiling, spread in as core's
- * `nonGridRowCeilingQuery()` (`:1079`: one probe row past the ceiling, which
- * `applyNonGridRowCeiling` slices back off; at `f8a9d0fb0` a bare
- * `$top: NON_GRID_ROW_CEILING_TOP`, until objectui#7508 homed the ceiling in
- * core) and the renderer's own comment marks it "⛔ Not authorable" (`:1077`); and
- * the `onTaskClick` / `onRowClick` / `onBeforeTaskUpdate` callbacks, which are
- * host props. ⚠️ New at `f8a9d0fb0` and recorded, not ruled: objectui#10250
- * gave the renderer two more reads, `search` and `searchableFields`
- * (`:890-893`, sent as `$search` / `$searchFields` at `:1083-1088`), which
- * `ListView.tsx` writes onto the node it generates from its toolbar Search
- * box — a host-generated key pair in the same position as the flatten
- * product, and not declared here.
+ * `label` → the OBJECT's label → `objectName`); a row cap — the reload's `$top`
+ * is the platform ceiling, spread in as core's `nonGridRowCeilingQuery()` (one
+ * probe row past the ceiling, which `applyNonGridRowCeiling` slices back off),
+ * and the renderer's own comment marks it "⛔ Not authorable"; and the
+ * `onTaskClick` / `onRowClick` / `onBeforeTaskUpdate` callbacks, which are host
+ * props. ⚠️ Recorded, not ruled: objectui#10250 gave the renderer two more
+ * reads, `search` and `searchableFields` (sent as `$search` / `$searchFields`),
+ * which `ListView` writes onto the node it generates from its toolbar Search
+ * box (its `case 'gantt'` arm) — a host-generated key pair in the same position
+ * as the flatten product, and not declared here.
*
* VALUE posture: `gantt` is the one config block in this family whose value
- * contract is already the SPEC's — `ObjectGantt.tsx:617` validates it against
+ * contract is already the SPEC's — the renderer validates it against
* `GanttConfigSchema` imported from `@objectstack/spec/ui` — so the read point
* names the schema and this door takes it rather than `z.unknown()`. The
* scalars below are read as their coercions say: `!!schema.readOnly`,
@@ -9771,10 +8861,10 @@ export const ObjectGanttPropsSchema = lazySchema(() => strictObject({
/**
* [#21464] The list view's own {@link NavigationConfigSchema}, by reference
* — the carrier `object-grid`, `object-kanban`, `object-calendar` and
- * `object-timeline` already take. `ObjectGantt.tsx:1960` (at the pin
- * `89cad75d55`) reads `schema.navigation ?? { mode: 'drawer' }`, classifies
- * its `.mode` there, and hands it to `useNavigationOverlay` (`:2025-2026`),
- * which types its mode union as that schema's. Until #21464 this member was
+ * `object-timeline` already take. The renderer reads
+ * `schema.navigation ?? { mode: 'drawer' }`, classifies its `.mode` there,
+ * and hands it to `useNavigationOverlay`, which types its mode union as that
+ * schema's (read points recorded in `liveness/page.json`, row `regions`). Until #21464 this member was
* `z.unknown()`, so `navigation: 42` and a bare mode string such as
* `'drawer'` passed every door and opened the record page, whatever they
* named.
@@ -9816,165 +8906,26 @@ export type ObjectGanttPropsParsed = z.infer;
/**
* The flat `TreeConfig` spellings `getTreeConfig` reads ahead of the `tree`
- * block (`ObjectTree.tsx:289-302`) and that `ObjectView` / `ListView` EMIT when
- * they flatten `options.tree` (`ListView.tsx:4142-4166`, `case 'tree'`: the
- * product carries these keys, the EFFECTIVE `filter` objectui#10250 added, and
- * NO `tree` key). Both halves re-READ at objectui `b9814b334` (re-read there 2026-10-14:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `1fb1ced36` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * and `ListView.tsx` changed (+23/-3: objectui#12292, objectui#12030 and
- * objectui#12270, none of it in a `case` arm), so its `case 'tree'` arm MOVED
- * `4125-4149` -> `4142-4166`, byte-identical, with `labelField:
- * treeCfg.labelField || 'name'` at `:4162`, and the flat key set it emits did
- * not move. At `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `9646e2ed2` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * and `ListView.tsx` changed (+34/-79, objectui#12217, objectui `f5b66bf97`:
- * two import lines changed in place and one added at the top, a docblock added
- * and `useListViewTranslation` exported near `:1040`, the grid's inline empty
- * state replaced from `:5677` down), so its `case 'tree'` arm MOVED `4120-4144`
- * -> `4125-4149`, byte-identical, with `labelField: treeCfg.labelField ||
- * 'name'` at `:4145`, and the flat key set it emits did not move. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `088e0f705` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * and `ListView.tsx` changed (+9/-9, objectui#12189, objectui `26b0bd2d1`: the
- * FilterBuilder group type's rename, nine lines replaced in place, the last at
- * `:1558`), so its `case 'tree'` arm held at `4120-4144` with `labelField:
- * treeCfg.labelField || 'name'` at `:4140`, and the flat key set it emits did
- * not move. At `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `20c6d351a` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * `ListView.tsx` changed above and below its `case 'tree'` arm (+229/-57:
- * objectui#12081 item 2, objectui#12086 and objectui#12082), which MOVED
- * byte-identical `3965-3989` -> `4120-4144`, so the flat key set it emits did
- * not move: `parentField`, `labelField: treeCfg.labelField || 'name'`
- * (`:4140`), `fields` and `defaultExpandedDepth`, and NO `titleField`. This
- * re-read also corrects two anchors the hop below left: this paragraph's
- * opening still named the arm at `3913-3932`, its `47b1f0bb7` span, and the
- * hop below cites the `labelField` line as `:3986`, which at `20c6d351a` is
- * the `fields` line under it (`labelField` was `:3985` there, as the
- * `titleField` paragraph below says). At `20c6d351a`, re-read there
- * 2026-10-10:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `47b1f0bb7` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * `ListView.tsx` changed (+281/-235), its `case 'tree'` arm with it, which
- * MOVED `3913-3932` -> `3965-3989`: objectui#6152 round 14 (objectui
- * `3fd862510`) retired the arm's `treeCfg.titleField` label rung and its raw
- * `...treeCfg` spread, so the arm now emits `parentField`, `labelField:
- * treeCfg.labelField || 'name'` (`:3986`), `fields` and
- * `defaultExpandedDepth` by name and NO `titleField`. The read `:3927` that the
- * `titleField` paragraph below cites is therefore GONE at this pin, not moved;
- * that paragraph is left as written and reported to the pin bump's review,
- * because changing the key set it justifies is a schema change this re-read
- * does not make. At `47b1f0bb7`, re-read there 2026-10-09:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `f0268ad78` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * `ListView.tsx` changed above and below its `case 'tree'` arm (+85/-26:
- * objectui#11865 slice p, objectui `8f8f760fa`: the "Color by field" and
- * rows-per-page pickers drawn with the shared `Select`), which MOVED
- * byte-identical `3853-3872` -> `3913-3932`, `:3867` -> `:3927` with it, so the
- * flat key set each reads or emits did not move. At `f0268ad78`, re-read there
- * 2026-10-09:
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `a58626c88` (`git diff --quiet`), so `289-302` and `240-261` did not move;
- * `ListView.tsx` changed above and below its `case 'tree'` arm (+286/-46:
- * objectui#11984, objectui#6152 round 12, objectui#11860, objectui#11943,
- * objectui#11925, objectui#11816, objectui#11810 and objectui#11687), which
- * MOVED byte-identical `3770-3789` -> `3853-3872`, `:3784` -> `:3867` with it,
- * so the flat key set each reads or emits did not move. At `a58626c88`,
- * re-read there 2026-10-06:
- * `plugin-tree/src/index.tsx` and `ListView.tsx` are byte-identical to
- * `0abd4f9f8` (`git diff --quiet`), so `3770-3789` and `:3784` did not move;
- * `ObjectTree.tsx` changed (+81/-3, objectui#11686: five import lines at the
- * top, and the cell-format helpers further down), so `235-256` MOVED to
- * `240-261` and `284-297` to `289-302`, each byte-identical, and the flat key
- * set each reads or emits did not move.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved).
- * At `9dfaca654`, on 2026-10-05 —
- * `plugin-tree/src/index.tsx` and `ListView.tsx` are byte-identical to
- * `2e818d0b5` (`git diff --quiet`), so `3770-3789` and `:3784` did not move;
- * `ObjectTree.tsx` changed in two docblocks only (+8/-5, objectui#8347
- * putting `BaseSchema`'s index signature in the past tense), one above each
- * range, so `233-254` MOVED to `235-256` and `281-294` to `284-297`, each
- * byte-identical, and the flat key set each reads or emits did not move. At
- * `2e818d0b5`, on 2026-10-04 —
- * `ObjectTree.tsx`, `plugin-tree/src/index.tsx` and `ListView.tsx` are
- * byte-identical to `ab1879721` (`git diff --quiet`), so every anchor held
- * unmoved. At `ab1879721`, on 2026-10-03 —
- * `ObjectTree.tsx` and `plugin-tree/src/index.tsx` are byte-identical to
- * `89cad75d5`, so `281-294` and `233-254` did not move and were re-read in
- * place; `ListView.tsx` changed around its `case 'tree'` arm (+36/-18:
- * above it objectui#10813's `isempty` / `isnotempty` filter operators and
- * objectui#11445's record-count translation keys, below it objectui#11227's
- * resolved empty-state labels and objectui#11445's count line), so the arm
- * MOVED byte-identical `3756-3775` -> `3770-3789`, `:3770` -> `:3784` with
- * it, and the flat key set each reads or emits did not move. At
- * `89cad75d5`, 2026-10-02 —
- * `ListView.tsx` is byte-identical to `31971ff1e`, so `3756-3775` and `:3770`
- * did not move; `ObjectTree.tsx` changed (+8/-17, objectui#11168 slice 3
- * replacing the cast comment on its `navigation` read with a typed read),
- * every line of it at `:1044` or below, so `281-294` and `233-254` did not
- * move and were re-read in place; and `plugin-tree/src/index.tsx` changed
- * (+73/-8: objectui#11168 slice 3 published `data`, `staticData`, `filter`
- * and `navigation` inputs beside `objectName` and `tree`, and objectui#10859
- * batch 8 retired the bare `tree` / `view:tree` registration), and its one
- * remaining registration, `object-tree`, still declares `tree` as an object
- * input and no flat config key. At `31971ff1e`, 2026-10-01 —
- * `ObjectTree.tsx` was byte-identical to `e420df310`, so `281-294` and
- * `233-254` did not move; `ListView.tsx` changed above its `case 'tree'` arm
- * (+35/-1, objectui#10689's re-read on a harvested query input), which MOVED
- * byte-identical `3722-3741` -> `3756-3775`, so the flat key set each reads or
- * emits did not move. At `e420df310`, 2026-09-30 —
- * `ObjectTree.tsx` changed (+29/-26, objectui#8348's record-source arm and the
- * host-data read below it), none of it inside `281-294` or `233-254`, which did
- * not move; `ListView.tsx` changed above its `case 'tree'` arm (objectui#11021
- * among others), which MOVED byte-identical `3668-3687` -> `3722-3741`, so the
- * flat key set each reads or emits did not move. At `db11afd49`, 2026-09-29 —
- * `ObjectTree.tsx` changed in one comment line (`:1054`) and `ListView.tsx` in
- * comment citations and its region-aria read, none of it inside these ranges, so
- * `281-294` and `3668-3687` did not move; measured at `dd3f7e1be` on
- * 2026-09-28 — both files changed on this hop (`ObjectTree.tsx` +136/-30,
- * `ListView.tsx` +434/-85), neither inside these ranges: both MOVED with
- * their text byte-identical, `246-259` -> `281-294` and `3366-3385` ->
- * `3668-3687`, so the flat key set each reads or emits did not move. On the
- * hop onto `f8a9d0fb0` both files changed too (`getTreeConfig` lost its
- * `filter.tree` arm, objectui#9549; the flatten gained `filter`), and the
- * flat key set did not move then either. At `62597c588` both were
- * byte-identical to `87af769e9`, where both were re-READ 2026-09-22 (this record carried no pin
- * at all before that, so nothing re-checked it when the pin moved). Read, but NOT authorable —
- * one composition key per concept (Prime Directive #12), the ruling the map and
- * the gantt carry from objectui#5018 / #6469 and the channel `object-calendar`
- * uses above. The registration agrees: `plugin-tree/src/index.tsx` declares
+ * block and that `ObjectView` / `ListView` EMIT when they flatten
+ * `options.tree` (its `case 'tree'` arm: the product carries these keys, the
+ * EFFECTIVE `filter` objectui#10250 added, and NO `tree` key; both halves'
+ * read points recorded in `liveness/page.json`, row `regions`). The flatten
+ * emits `parentField`, `labelField: treeCfg.labelField || 'name'`, `fields` and
+ * `defaultExpandedDepth`, and NO `titleField`. Read, but NOT authorable — one
+ * composition key per concept (Prime Directive #12), the ruling the map and the
+ * gantt carry from objectui#5018 / #6469 and the channel `object-calendar`
+ * uses above. The registration agrees: it declares
* `{ name: 'tree', type: 'object' }` and no flat input.
*
* `titleField` is in the set although no `tree` block key is spelled that way,
- * and at `20c6d351a` NOTHING reads it: both halves that once did are DELETED
- * reads, not moved ones. The flatten half went on objectui#6152 round 14
- * (objectui `3fd862510`): at `47b1f0bb7` the `case 'tree'` arm resolved
- * `labelField: treeCfg.labelField || treeCfg.titleField || 'name'` (`:3927`);
- * at `20c6d351a` it reads `labelField: treeCfg.labelField || 'name'`
- * (`ListView.tsx:3985`) and emits no `titleField`. The renderer half went
- * earlier: `getTreeConfig`'s `?? schema.titleField` rung — the `:117` this
- * record used to cite — was removed on objectui#8841 because it read the
- * FLATTENED NODE and never the block, and the docblock at
- * `ObjectTree.tsx:240-261` records the three measurements that retired it.
- * This paragraph is the correction the 2026-10-10 re-read above reported;
- * ⛔ restore neither rung from this record's history.
+ * and NOTHING reads it: both halves that once did are DELETED reads, not moved
+ * ones. The flatten half went on objectui#6152 round 14 (objectui
+ * `3fd862510`), which retired the arm's `treeCfg.titleField` label rung, so the
+ * arm emits no `titleField`. The renderer half went earlier: `getTreeConfig`'s
+ * `?? schema.titleField` rung was removed on objectui#8841 because it read the
+ * FLATTENED NODE and never the block, and the renderer's own docblock records
+ * the three measurements that retired it. ⛔ Restore neither rung from this
+ * record's history.
*
* So `titleField` is in this set for its prescription, not for a read: an
* author who writes a flat `titleField` on an `object-tree` is naming the
@@ -9997,209 +8948,73 @@ const OBJECT_TREE_FLAT_CONFIG_GUIDANCE: readonly KeySetGuidance[] = [
];
/**
- * `object-tree` (objectui `plugin-tree/src/ObjectTree.tsx` plus the registry
- * shell `plugin-tree/src/index.tsx`, read at objectui `b9814b334`, re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `20c6d351a` (`git diff --quiet`), so every anchor held unmoved. At
- * `20c6d351a`, re-read there 2026-10-10:
- * every objectui file this record cites is byte-identical across the hop from
- * `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `a58626c88` (`git diff --quiet`), so every anchor held unmoved. At `a58626c88`,
- * re-read there 2026-10-06:
- * `plugin-tree/src/index.tsx` and `core/src/utils/record-source.ts` are
- * byte-identical to `0abd4f9f8` (`git diff --quiet`), so their anchors held
- * unmoved; `ObjectTree.tsx` changed (+81/-3, objectui#11686: a tree cell draws
- * the same field face a list cell does), none of it on a cited line, so every
- * anchor in it MOVED with its cited text byte-identical — by 5 above the cell
- * helpers (`:284-297` -> `:289-302`, `:285` -> `:290`), by 77 past them (`:637`
- * -> `:714`, `:742` -> `:819`, `:833-845` -> `:910-922`, `:842` / `:843` ->
- * `:919` / `:920`, `:868` -> `:945`, `:918-927` -> `:995-1004`, `:926` ->
- * `:1003`, `:961-962` -> `:1038-1039`, `:1029` -> `:1106`) and by 78 past one
- * more line (`:1049` -> `:1127`, `:1057` -> `:1135`, `:1071` -> `:1149`,
- * `:1143` -> `:1221`) — and each is cited below at this pin.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured there 2026-10-05:
- * `plugin-tree/src/index.tsx` and `core/src/utils/record-source.ts` are
- * byte-identical to `2e818d0b5` (`git diff --quiet`), so their anchors held
- * unmoved; `ObjectTree.tsx` changed in two docblocks only (+8/-5,
- * objectui#8347 putting `BaseSchema`'s index signature in the past tense:
- * +2 lines at `:135`, +1 at `:264`), so every anchor in it MOVED by 3 with
- * its cited text byte-identical (`:634` -> `:637`, `:739` -> `:742`,
- * `:281-294` -> `:284-297`, `:1054` -> `:1057` and the rest below). At
- * `2e818d0b5`, re-measured there 2026-10-04: every
- * objectui file this record cites is byte-identical to `ab1879721`
- * (`git diff --quiet`), so every anchor held unmoved. At `ab1879721`,
- * re-measured there 2026-10-03:
- * `plugin-tree/src/index.tsx`, `ObjectTree.tsx` and
- * `core/src/utils/record-source.ts` are byte-identical to `89cad75d5`
- * (`git diff --quiet`), so every anchor held unmoved and was re-read in
- * place. At `89cad75d5` (2026-10-02) all three
- * cited files changed on the hop off `31971ff1e`, so every anchor was
- * re-mapped through the diff and re-READ.
- * `core/src/utils/record-source.ts` changed (+4/-5, objectui#10859 batch 8:
- * the bare `tree` and `view:tree` rows left `RECORD_SOURCE_DATA_ARM_BY_TYPE`,
- * and the docblock above it says so) below both rungs, which did not move;
- * `ObjectTree.tsx` changed (+8/-17, objectui#11168 slice 3) in ONE place, the
- * navigation binding, and that anchor changed CONTENT, toward this row:
- * `:1063` -> `:1054` now reads `schema.navigation`, typed, where it read
- * `(schema as any).navigation`; the two anchors past it MOVED by 9 with their
- * text byte-identical (`:1077` -> `:1068`, `:1149` -> `:1140`) and every
- * anchor above it holds unmoved; `plugin-tree/src/index.tsx` changed
- * (+73/-8): objectui#11168 slice 3 rewrote `treeInputs` — `objectName` is no
- * longer `required`, `tree` carries a measured description, and `data`,
- * `staticData`, `filter` and `navigation` inputs are published beside them —
- * so the `tree` input MOVED `27-31` -> `47-52`, its `name` / `type` lines
- * byte-identical and its description rewritten; and objectui#10859 batch 8
- * retired the second `ComponentRegistry.register('tree', ...)` under the
- * `view` namespace, so `object-tree` is the one key this shell registers. At
- * `31971ff1e` (2026-10-01) `plugin-tree/src/index.tsx`, `ObjectTree.tsx` and
- * `core/src/utils/record-source.ts` were byte-identical to `e420df310`
- * (`git diff --quiet`), so every anchor held unmoved and was re-read in
- * place. At `e420df310` (2026-09-30)
- * `plugin-tree/src/index.tsx` was byte-identical to `db11afd49`;
- * `core/src/utils/record-source.ts` changed (+38/-27) and its three rungs MOVED
- * by 8 with their text byte-identical; `ObjectTree.tsx` changed (+29/-26,
- * objectui#8348), and TWO anchors changed CONTENT, both toward this row, and
- * say so where they are cited: the rung-1 call now passes `'view-data'`, and
- * the host-data read no longer reads the authored `schema.data`; every other
- * anchor MOVED by 2 or 3 with its cited text byte-identical. At `db11afd49`
- * (2026-09-29) `plugin-tree/src/index.tsx` and
- * `core/src/utils/record-source.ts` were byte-identical to `dd3f7e1be` and
- * `ObjectTree.tsx` changed in one comment line (`:1054`), so every anchor held
- * unmoved and was re-read in place. At
- * `dd3f7e1be` (2026-09-28):
- * `plugin-tree/src/index.tsx` is byte-identical to `f8a9d0fb0` (`git diff
- * --quiet`); `core/src/utils/record-source.ts` changed only in docblocks and
- * the retired bare `map` arm, so its three rungs MOVED by 7 with their text
- * byte-identical; `ObjectTree.tsx` changed (+136/-30: objectui#10666
- * resolves the filter's context tokens before either query sends it,
- * objectui#7508 homed the row ceiling in core, and the invalidation bus and
- * in-place re-read, objectui#10778 / objectui#10816), so every anchor in it
- * was re-READ: the two `$filter` sends and the two ceilings changed CONTENT
- * and say so where they are cited, and every other one MOVED with its cited
- * text byte-identical. On the hop onto `f8a9d0fb0`,
- * `plugin-tree/src/index.tsx` and `record-source.ts` were byte-identical to
- * `62597c588`, and `ObjectTree.tsx` changed (+69/-3: objectui#9549 deleted
- * `getTreeConfig`'s `filter.tree` arm, and objectui#9136 routed the inline
- * `value` provider through a `ValueDataSource` query that honours `filter`
- * and the row ceiling): two anchors changed CONTENT then, and every other one
- * MOVED with its cited text byte-identical.
- * All three files were byte-identical across the hop onto `62597c588`. At `87af769e9`
- * (re-READ 2026-09-22) no anchor below was carried from `53ded82bf`; every
- * one was re-derived from that tree, and the ladder call changed in CONTENT
- * as well as position.)
- * Read points per key: `data` (`resolveRecordSourceConfig` at
- * `:714` — rung 1, `core/src/utils/record-source.ts:307`, which returns the
- * authored value VERBATIM once it is on the arm; that ONE site is the whole
- * support for the arm this row declares. ⚠️ At this pin the ARM this renderer
- * passes is `'view-data'`, the one its siblings pass (objectui#8348), so a
- * bare array under `data` is not a record source there and the ladder falls
- * through to `staticData`, then `objectName`: renderer and row now draw the
- * same line. Through `db11afd49` it passed `'undeclared'`, which honoured any
- * truthy value — WIDER than this row, the harmless direction),
- * `staticData` (rung 2,
- * `record-source.ts:311`), `objectName` (rung 3; also `:1106`, `:1149` and
- * `:1221` here, each behind `resolveRecordSourceObjectName`, plus the
- * parent-field detection at `:1038-1039`),
- * `filter` (`:819`, read once through `useResolvedFilter`, which resolves its
- * context tokens — objectui#10666 — and holds the result: `:911` sends it to
- * `$filter` on the object fetch and `:996` on the inline `value` provider's
- * `ValueDataSource` query, objectui#9136's; at `f8a9d0fb0` both sent
- * `schema.filter` verbatim, at `:753` and `:837`), `tree` (`:290`, the
- * nested config block `getTreeConfig` (`:289-302`) reads, and the
- * registration's declared `{ name: 'tree', type: 'object' }` input
- * (`plugin-tree/src/index.tsx:47-52`)) and `navigation` (`:1135`, handed to
- * `useNavigationOverlay` at `:1127` — typed since objectui#11168 slice 3;
- * through `31971ff1e` it was `(schema as any).navigation`, at `:1063`).
+ * `object-tree` (objectui's `plugin-tree` renderer plus its registry shell;
+ * read points recorded in `liveness/page.json`, row `regions`).
+ * Read points per key: `data` (rung 1 of `resolveRecordSourceConfig`, which
+ * returns the authored value VERBATIM once it is on the arm; that ONE site is
+ * the whole support for the arm this row declares. ⚠️ The ARM this renderer
+ * passes is `'view-data'`, the one its siblings pass (objectui#8348), so a bare
+ * array under `data` is not a record source there and the ladder falls through
+ * to `staticData`, then `objectName`: renderer and row draw the same line),
+ * `staticData` (rung 2), `objectName` (rung 3; also the header, navigation and
+ * overlay object names, each behind `resolveRecordSourceObjectName`, plus the
+ * parent-field detection), `filter` (read once through `useResolvedFilter`,
+ * which resolves its context tokens — objectui#10666 — and holds the result:
+ * it is sent to `$filter` on the object fetch and on the inline `value`
+ * provider's `ValueDataSource` query, objectui#9136's), `tree` (the nested
+ * config block `getTreeConfig` reads, and the registration's declared
+ * `{ name: 'tree', type: 'object' }` input) and `navigation` (handed to
+ * `useNavigationOverlay`, typed since objectui#11168 slice 3).
*
* ⚠️ `data` IS declared here, and that is the measurement, not a family
* symmetry. objectui#9234 left this block's rung-1 read marked `undeclared`
* because neither published face carried the key: `ObjectTreeSchema` on
* `@object-ui/types` declared no `data`, no `staticData`, no `filter` and no
- * `navigation` at all, and required `objectName` (at `31971ff1e` it declared
- * `filter`, in the `QueryParams['$filter']` shape, objectui#9549, and the
- * other three were still absent). The renderer reads all four
+ * `navigation` at all, and required `objectName`. The renderer reads all four
* — so the protocol row follows the READ POINTS, which is what 「以协议为准」
* resolving for this block means, and the mirror is the face that has to
- * follow. ⚠️ At this pin it HAS followed: objectui#11168 slice 3 declares
- * `data` (`ViewData`), `staticData` and `navigation` (the spec's
- * `NavigationConfig`) beside `filter`, and makes `objectName` optional, on
- * `ObjectTreeSchema` and on the registration's inputs alike.
- *
- * ⛔ `:945` is NOT a second site for the object arm, and at this pin it is not
- * a read of the authored key at all: it is `(rest as any).data`, gated by
- * `Array.isArray(passed)` on the next line — the rows a HOST hands down as the
- * `data` React prop. objectui#8348 dropped the `?? schema.data` fallback that
- * line carried through `db11afd49` (`:862` there), the one reader that let an
- * authored bare array draw rows whatever the ladder said, and objectui#9571
- * had already stopped `SchemaRenderer` delivering the authored key as that
- * prop. One ladder site is sufficient, and `:714` is it.
+ * follow. ⚠️ It HAS followed: objectui#11168 slice 3 declares `data`
+ * (`ViewData`), `staticData` and `navigation` (the spec's `NavigationConfig`)
+ * beside `filter`, and makes `objectName` optional, on `ObjectTreeSchema` and
+ * on the registration's inputs alike.
+ *
+ * ⛔ The renderer's `(rest as any).data` read is NOT a second site for the
+ * object arm, and it is not a read of the authored key at all: gated by
+ * `Array.isArray(passed)`, it takes the rows a HOST hands down as the `data`
+ * React prop. objectui#8348 dropped the `?? schema.data` fallback that line
+ * once carried, the one reader that let an authored bare array draw rows
+ * whatever the ladder said, and objectui#9571 had already stopped
+ * `SchemaRenderer` delivering the authored key as that prop. One ladder site
+ * is sufficient, and rung 1 is it.
*
* Measured and deliberately NOT declared: the flat `TreeConfig` spellings
* ({@link OBJECT_TREE_FLAT_CONFIG_GUIDANCE}); the bare-array `data` shorthand,
* which `ViewData` cannot publish (a discriminated union over OBJECT variants),
* for which `staticData` is this block's declared door, and which the renderer
- * itself no longer accepts from an authored node at this pin (see `:945`
- * above; `:862-863` accepted it through `db11afd49`); `sort` — this renderer's fetch
- * (`:910-922`) carries `$filter`, `$top` and `$expand` and NO `$orderby`, the
- * inline query (`:995-1004`) carries `$filter` and `$top` only, and
- * nothing else reads an order, so declaring one would publish a key with no read
- * site; a row cap, for the same reason `object-gantt` declares none (the `$top`
- * is the platform ceiling, spread in as core's `nonGridRowCeilingQuery()` at
- * `:920` and again at `:1003` — a bare `$top: NON_GRID_ROW_CEILING_TOP` at
- * `f8a9d0fb0`, until objectui#7508 — marked "⛔ Not
- * authorable" at `:919`); and `filter.tree`, the legacy stash — ⚠️ no longer
- * read since `f8a9d0fb0`: objectui#9549 deleted that arm, so `getTreeConfig`
- * (`:290`) takes the block from `tree` alone — which was a shape to stop
- * writing and is not a key to declare.
+ * itself no longer accepts from an authored node (see the host-prop read
+ * above); `sort` — this renderer's fetch carries `$filter`, `$top` and
+ * `$expand` and NO `$orderby`, the inline query carries `$filter` and `$top`
+ * only, and nothing else reads an order, so declaring one would publish a key
+ * with no read site; a row cap, for the same reason `object-gantt` declares
+ * none (the `$top` is the platform ceiling, spread in as core's
+ * `nonGridRowCeilingQuery()` on both queries, marked "⛔ Not authorable"); and
+ * `filter.tree`, the legacy stash — ⚠️ no longer read: objectui#9549 deleted
+ * that arm, so `getTreeConfig` takes the block from `tree` alone — which was a
+ * shape to stop writing and is not a key to declare.
*
* This was also the one block of the three whose type was absent from the
* tracked `sdui.manifest.json`, so `check:react-declaration-parity` reported
- * it as missing from the registry rather than comparing it. ⚠️ Re-read at
- * `ab1879721`: the tracked manifest regenerated at this pin
- * (`scripts/sdui-manifest.record.json` names `ab1879721595`) carries an
- * `object-tree` entry, as the ones at `89cad75d5`, `31971ff1e`, `db11afd49`
- * and `e420df310` did, publishing the same `data`, `filter`, `navigation`,
- * `objectName`, `staticData` and `tree`; its source at this pin still
- * registers `object-tree`, and `core/src/registry/public-blocks.ts`,
- * byte-identical across the hop, still lists it — only the bare `tree` key,
- * never a public block, is gone. The derivation above is from
- * the renderer's sources at the pin either way, which is what #7751's method
- * asks for.
+ * it as missing from the registry rather than comparing it. The tracked
+ * manifest now carries an `object-tree` entry publishing `data`, `filter`,
+ * `navigation`, `objectName`, `staticData` and `tree`, and objectui's public
+ * block list still lists it — only the bare `tree` key, never a public block,
+ * is gone. The derivation above is from the renderer's sources either way,
+ * which is what #7751's method asks for.
*
* VALUE posture for `tree`: {@link TreeConfigSchema}, this repo's own block —
* #15469 closed it against unknown keys on exactly this measurement
* (`getTreeConfig` reads precisely those four keys from the block; the
- * undeclared read set was EMPTY), re-measured at `87af769e9`; unchanged since
- * `53ded82b`.
+ * undeclared read set was EMPTY).
*/
export const ObjectTreePropsSchema = lazySchema(() => strictObject({
surface: 'this `object-tree`',
@@ -10214,121 +9029,15 @@ export const ObjectTreePropsSchema = lazySchema(() => strictObject({
* component-level `dataSource` binding can supply the object instead"; that
* holds for them because each registers through `ElementDataSourceGate`,
* which lowers the spec binding onto `objectName` before the renderer sees
- * the node. `plugin-tree/src/index.tsx` does NOT: at objectui `b9814b334` (re-read there 2026-10-14:
- * re-COUNTED by the same method, 0 for the tree, 3 each for `plugin-gantt`,
- * `plugin-grid` and `plugin-calendar` and 4 for `plugin-map`; the tree, gantt
- * and map shells are byte-identical across the hop from `1fb1ced36` (`git
- * diff --quiet`), `plugin-grid`'s changed in input descriptions and one
- * comment only (+7/-4: objectui#12030 and objectui#12270) and
- * `plugin-calendar`'s in one docblock only (+13/-7, objectui#12291), their
- * wiring unchanged. At `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * re-COUNTED by the same method, 0 for the tree, 3 each for `plugin-gantt`,
- * `plugin-grid` and `plugin-calendar` and 4 for `plugin-map`, all five
- * shells byte-identical across the hop from `499799502` (`git diff
- * --quiet`). At `499799502`, re-read there 2026-10-11:
- * re-COUNTED by the same method, 0 for the tree, 3 each for `plugin-gantt`,
- * `plugin-grid` and `plugin-calendar` and 4 for `plugin-map`, all five
- * shells byte-identical across the hop from `0df67f237` (`git diff
- * --quiet`). At `0df67f237`, re-read there 2026-10-11:
- * re-COUNTED by the same method, 0 for the tree, 3 each for `plugin-gantt`
- * and `plugin-grid` and 4 for `plugin-map`, those four shells byte-identical
- * across the hop from `20c6d351a` (`git diff --quiet`), and 3 for
- * `plugin-calendar`, whose shell changed in its host-callback list only
- * (+3/-0, objectui#12081 item 2, objectui `16c8810ac`: `onVisibleRangeChange`
- * added to `HOST_CALLBACKS`), its wiring unchanged. At `20c6d351a`, re-read
- * there 2026-10-10:
- * re-COUNTED by the same method, 0 for the tree, 3 each for
- * `plugin-calendar` and `plugin-gantt` and 4 for `plugin-map`, those four
- * shells byte-identical across the hop from `47b1f0bb7` (`git diff --quiet`),
- * and 3 for `plugin-grid`, whose shell changed in one type re-export only
- * (+1/-1, objectui#6349 batch 7, objectui `c0c0a0d56`: `AggregationConfig`
- * re-exported as `GroupAggregationConfig`), its wiring unchanged. At
- * `47b1f0bb7`, re-read there 2026-10-09:
- * re-COUNTED by the same method, all five `src/index.tsx` shells are
- * byte-identical across the hop from `f0268ad78` (`git diff --quiet`) and
- * read 0 for the tree, 3 each for `plugin-calendar`, `plugin-gantt` and
- * `plugin-grid`, and 4 for `plugin-map`. At `f0268ad78`, re-read there
- * 2026-10-09:
- * re-COUNTED by the same method, 0 for the tree and `plugin-map`'s 4, both
- * shells byte-identical across the hop from `a58626c88` (`git diff --quiet`),
- * and 3 each for `plugin-calendar`, `plugin-gantt` and `plugin-grid`, whose
- * shells changed on the hop in input descriptions and one comment only
- * (objectui#6152 rounds 7 and 8, objectui `c0862c1cc`), their wiring unchanged.
- * At `a58626c88`, re-read there 2026-10-06:
- * re-COUNTED by the same method, all five `src/index.tsx` shells are
- * byte-identical across the hop from `0abd4f9f8` (`git diff --quiet`) and
- * read 0 for the tree, 3 each for `plugin-calendar`, `plugin-gantt` and
- * `plugin-grid`, and 4 for `plugin-map`.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * re-COUNTED by the same method, all five `src/index.tsx` shells are
- * byte-identical across the hop from `9dfaca654` (`git diff --quiet`) and
- * read 0 for the tree, 3 each for `plugin-calendar`, `plugin-gantt` and
- * `plugin-grid`, and 4 for `plugin-map`.
- * At `9dfaca654`, re-COUNTED there 2026-10-05 by
- * the same method — 0 for the tree, whose shell is byte-identical across the
- * hop from `2e818d0b5`, 3 each for `plugin-calendar` (byte-identical),
- * `plugin-gantt` (one docblock re-worded line for line, objectui#8347) and
- * `plugin-grid` (objectui#11605 made its `objectName` input non-required,
- * its wiring unchanged), and 4 for `plugin-map` (one docblock re-worded line
- * for line, objectui#8347); re-COUNTED at `2e818d0b5` 2026-10-04 by
- * the same method — 0 for the tree, 3 each for `plugin-gantt`,
- * `plugin-calendar` and `plugin-grid`, and 4 for `plugin-map`, all five
- * `src/index.tsx` shells byte-identical across the hop from `ab1879721`;
- * re-COUNTED at `ab1879721` 2026-10-03 by
- * the same method — 0 for the tree, whose shell is byte-identical across the
- * hop, 3 each for `plugin-gantt` and `plugin-calendar` (both byte-identical)
- * and `plugin-grid` (changed on the hop: objectui#11068's
- * `keyboardNavigation`, objectui#11533's rule dialect and objectui#11438's
- * 17.6.0 inputs, its wiring unchanged), and 4 for `plugin-map`
- * (byte-identical); re-COUNTED at `89cad75d5` 2026-10-02 by
- * the same method — 0 for the tree, whose shell changed on the hop
- * (objectui#11168 slice 3's published inputs, objectui#10859 batch 8's
- * retired bare `tree` registration) and still registers no gate, 3 each for
- * `plugin-grid` (byte-identical), `plugin-gantt` and `plugin-calendar` (both
- * changed on the hop), and 4 for `plugin-map` (changed on the hop, its
- * wiring and the comment naming the gate unchanged); re-COUNTED at
- * `31971ff1e` 2026-10-01 by
- * the same method — 0 for the tree, whose shell was byte-identical, and 3 each
- * for `plugin-grid` (byte-identical), `plugin-gantt` and `plugin-calendar`
- * (both changed on the hop: objectui#11117 in each, and objectui#8652's
- * `navigation` input in the calendar's), but 4 for `plugin-map`: objectui#10859 batch 5 added a
- * comment that names the gate, while its wiring is the same three lines;
- * re-COUNTED at `e420df310` 2026-09-30 by
- * the same method — 3 each again and 0 for the tree; `plugin-map` and
- * `plugin-gantt`'s `src/index.tsx` changed on the hop (objectui#8220's
- * `filter` / `sort` inputs) and still read 3, the tree's is byte-identical;
- * re-COUNTED at `db11afd49` 2026-09-29 by
- * the same method — 3 each again and 0 for the tree;
- * `plugin-grid/src/index.tsx` changed on the hop and still reads 3; re-COUNTED
- * at `dd3f7e1be`
- * 2026-09-28) its registry shell has ZERO hits for that wiring, against 3
- * each in `plugin-gantt`, `plugin-grid` and `plugin-calendar` and 4 in
- * `plugin-map` (three of them the wiring, one the comment above it) — four
- * controls, so the zero discriminates. ⚠️ Re-counted at every end
- * with ONE method (occurrences of that identifier in each `src/index.tsx`):
- * `f8a9d0fb0`, `62597c588`, `87af769e9` and `53ded82bf` all read 3 each and 0 for the tree as well —
- * `plugin-grid/src/index.tsx` changed on the hop onto `62597c588` and still reads 3, and
- * all four control shells changed across the hop from `f8a9d0fb0` (the
- * tree's is byte-identical) and still read 3 each — so
- * nothing about this reading moved. The `7 each` this record used to carry is
- * reproducible at neither pin by that method, nor by a whole-package count
- * (7 / 5 / 11 / 5, not 7 each). ⛔ A count is a reading only with its METHOD
- * written beside it — without one, re-stating the carried number is exactly
- * what survives a re-measure. Its shell pulls a `dataSource`
- * off the schema context and hands it down as the data ADAPTER; nothing on
- * that path writes an object name.
+ * the node. objectui's `plugin-tree` registry shell does NOT (read points:
+ * `liveness/page.json`, row `regions`): it has ZERO occurrences of that
+ * wiring, against 3 each in `plugin-gantt`, `plugin-grid` and
+ * `plugin-calendar` and 4 in `plugin-map` (three of them the wiring, one the
+ * comment above it) — four controls, so the zero discriminates. ⛔ A count is
+ * a reading only with its METHOD written beside it — here, occurrences of
+ * that identifier in each `src/index.tsx`. Its shell pulls a `dataSource` off
+ * the schema context and hands it down as the data ADAPTER; nothing on that
+ * path writes an object name.
*
* What really makes it optional is the record-source ladder's first two
* rungs (objectui#6939): `data` can name the object itself, and `staticData`
@@ -10338,8 +9047,8 @@ export const ObjectTreePropsSchema = lazySchema(() => strictObject({
.describe("Object this tree binds to — the THIRD record source `resolveRecordSourceConfig` resolves, after `data` and `staticData`. Optional because either of the first two rungs resolves the source without it: `data` can name the object itself (`{ provider: 'object', object }`) and `staticData` needs none. ⚠️ NOT supplied by the component-level `dataSource` binding the sibling blocks name — this renderer registers no such gate"),
/**
* Data source binding — `ViewDataSchema`, the object arm rung 1 returns
- * verbatim. Declared from the READ POINT (`:359`), not from objectui's
- * mirror, which carries no `data` on either face at this pin.
+ * verbatim. Declared from the READ POINT (rung 1), not from objectui's
+ * mirror, which carried no `data` on either face when this row was measured.
*/
data: ViewDataSchema.optional()
.describe("Data source binding (ViewDataSchema — discriminated on `provider`: object | value | schema), read FIRST by `resolveRecordSourceConfig`. Static inline rows live at `{ provider: 'value', items: [...] }` or at `staticData`; the bare-array shortcut is refused"),
@@ -10360,9 +9069,9 @@ export const ObjectTreePropsSchema = lazySchema(() => strictObject({
* — the carrier `object-grid`, `object-kanban`, `object-calendar` and
* `object-timeline` already take, and the type objectui's own
* `ObjectTreeSchema.navigation` mirrors (objectui#11168 slice 3).
- * `ObjectTree.tsx:1054` (at the pin `89cad75d55`) hands `schema.navigation`
- * to `useNavigationOverlay` (`:1046`), which reads `navigation?.mode ??
- * 'page'` and types its mode union as that schema's. Until #21464 this
+ * The renderer hands `schema.navigation` to `useNavigationOverlay`, which
+ * reads `navigation?.mode ?? 'page'` and types its mode union as that
+ * schema's (read points recorded in `liveness/page.json`, row `regions`). Until #21464 this
* member was `z.unknown()`, so `navigation: 42` and a bare mode string such
* as `'drawer'` passed every door and opened the record page, whatever they
* named.
@@ -10384,9 +9093,8 @@ export type ObjectTreePropsParsed = z.infer;
/**
* The flat `TimelineConfig` spellings `ObjectTimeline` keeps reading as a
- * backward-compat fallback (`ObjectTimeline.tsx:263-293`) and that `ListView`
- * EMITS on its runtime handoff (`plugin-list/src/ListView.tsx:2489-2525`,
- * `case 'timeline'`: the product carries `startDateField` / `titleField` /
+ * backward-compat fallback and that `ListView` EMITS on its runtime handoff
+ * (read points recorded in `liveness/page.json`, row `regions`; `case 'timeline'`: the product carries `startDateField` / `titleField` /
* `endDateField` / `groupByField` / `colorField` / `scale` beside the
* nested `timeline` block it writes in the same object). Read, but NOT
* authorable — one composition key per concept (Prime Directive #12), the same
@@ -10394,7 +9102,7 @@ export type ObjectTreePropsParsed = z.infer;
*
* `dateField` is in the set although {@link TimelineConfigSchema} declares no
* key of that name: it is the pre-#2231 alias of `startDateField`, read at the
- * flat rung (`:288`). So the prescription names the block key it RESOLVES TO
+ * flat rung. So the prescription names the block key it RESOLVES TO
* and never the alias — a prescription naming a key the target schema refuses
* is the #17054 trap this file has already paid for once
* (`calendar-config-allday-prescription-17054.test.ts`).
@@ -10416,18 +9124,16 @@ const OBJECT_TIMELINE_FLAT_CONFIG_GUIDANCE: readonly KeySetGuidance[] = [
/**
* [#21464] The `object-timeline` block's `mapping` — the record-to-entry
- * binding record, as the rail reads it at the `.objectui-sha` pin
- * `ab1879721595` (unchanged at objectui `main` `94985a92ba`), in
- * `ObjectTimeline.tsx`: `title` (`:551`) and `date` (`:576`) are each read
- * BETWEEN the `timeline` block's member and the flat fallback, `description`
- * (`:578`) ahead of the flat `descriptionField`, and `variant` (`:579`, default
- * `'variant'`) is the field whose value picks each entry's marker colour — the
+ * binding record, as the rail reads it (read points recorded in `liveness/page.json`, row `regions`):
+ * `title` and `date` are each read BETWEEN the `timeline` block's member and
+ * the flat fallback, `description` ahead of the flat `descriptionField`, and
+ * `variant` (default `'variant'`) is the field whose value picks each entry's marker colour — the
* one binding with no other spelling. Each is a FIELD NAME: the rail looks the
* record value up by it.
*
* The contract is objectui's own declaration, taken as it stands: the
- * component's `mapping` prop (`:254-259`) and the `TimelineMappingSchema` it
- * checks the node against (`:144-149`) both declare four optional strings. That
+ * component's `mapping` prop and the `TimelineMappingSchema` it checks the
+ * node against both declare four optional strings. That
* check only warns, and its object is not strict, so a misspelled member
* (`titleField` inside `mapping`, say) bound nothing and drew the default; it is
* closed here, as every element shape on this map is.
@@ -10461,15 +9167,14 @@ const ObjectTimelineMappingSchema = lazySchema(() => strictObject({
// 5979239990): both arms closed, as objectui#6356 ruled them
// (`TimelineFeedItem`, `TimelineGanttItem`); a feed entry's `content` an
// opaque member; a row refinement pairing each entry with the arm the row's
-// `variant` selects; a gantt bar's dates a string or a number. Read at the
-// `.objectui-sha` pin `2e818d0b51ec`; the arm declarations and every cited
-// reader are unchanged at objectui `main` `2abec3a96` (comments only).
+// `variant` selects; a gantt bar's dates a string or a number. Read points
+// are recorded in `liveness/page.json`, row `regions`.
// ---------------------------------------------------------------------------
/**
* The five colours an authored timeline element names — a feed entry's marker
- * or a gantt bar: objectui's `TimelineItemVariant`
- * (`types/src/data-display.ts`), the "Marker Variants" its timeline guide
+ * or a gantt bar: objectui's `TimelineItemVariant`, the "Marker Variants" its
+ * timeline guide
* documents. The marker primitive paints three more (`todo`, `in-progress`,
* `done`), reached only by the entries the object-bound rail composes from
* records — not an authoring vocabulary, and no gantt bar paints them.
@@ -10483,9 +9188,9 @@ const OBJECT_TIMELINE_ITEM_HISTORY =
/**
* [#21464] One bar of a gantt row — objectui's `TimelineGanttItemBar`, closed.
- * The gantt branch reads `startDate` / `endDate` (`renderer.tsx:1909`, the axis
- * reduce at `:651` and `:686-688`), `variant` (`:1916`, default `default`) and
- * `title` (`:1918`, `:1921`, inside the bar and in its tooltip). Every member
+ * The gantt branch (read points recorded in `liveness/page.json`, row `regions`) reads `startDate` /
+ * `endDate` (the bar and the axis reduce), `variant` (default `default`) and
+ * `title` (inside the bar and in its tooltip). Every member
* is optional, as objectui#6356 left them: a bar with no usable dates is not an
* authoring error but the renderer's `timeline.gantt.unusableRange` diagnostic.
* A date is a string or a FINITE number (epoch milliseconds — `z.number()`
@@ -10510,11 +9215,9 @@ function buildObjectTimelineGanttBar() {
/**
* The FEED arm's members (`variant` absent, `vertical` or `horizontal`) —
* objectui's `TimelineFeedItem`, the seven keys objectui#6356 declared, with
- * `title` the arm's required key. Both feed branches read them: `time`
- * (`renderer.tsx:1612-1614`, `:1703-1705`), `title` (`:1642`, `:1708`),
- * `description` (`:1650`, `:1709`), `variant` (`:1627`, `:1699`), `icon`
- * (`:1630`, `:1700`), `content` (`renderChildren`, `:1659`, `:1716`) and
- * `className` (`:1623`, `:1697`).
+ * `title` the arm's required key. Both feed branches read them (read points recorded in `liveness/page.json`, row `regions`):
+ * `time`, `title`, `description`, `variant`, `icon`, `content`
+ * (`renderChildren`) and `className`.
*
* `content` is held OPAQUE (`z.unknown()`), by the ruling: it is child schema
* nodes the entry draws below its description (`SchemaNode | SchemaNode[]`),
@@ -10535,9 +9238,9 @@ const objectTimelineFeedItemShape = () => ({
/**
* The GANTT arm's members (`variant: 'gantt'`) — objectui's
- * `TimelineGanttItem`: `label` (`renderer.tsx:1899-1900`, the row-label
+ * `TimelineGanttItem` (read points recorded in `liveness/page.json`, row `regions`): `label` (the row-label
* gutter), the arm's required key, and `items`, the row's bars
- * (`classifyGanttRows`, `:617-621`; drawn at `:1908`), optional because a row
+ * (`classifyGanttRows`), optional because a row
* with no bars yet is an ordinary empty state.
*/
const objectTimelineGanttRowShape = () => ({
@@ -10549,7 +9252,7 @@ const objectTimelineGanttRowShape = () => ({
/**
* [#21464] One authored `object-timeline` entry: every member of BOTH arms,
* each optional, closed against anything else — objectui's own element shape
- * (`types/src/zod/data-display.zod.ts`, `TimelineItemSchema`). Which arm an
+ * (`TimelineItemSchema`). Which arm an
* entry must be is decided by the ROW's `variant`, so it is judged where the
* row is visible: {@link objectTimelineItemsFitVariant}. Not a union of the two
* arms, for the reason objectui gives: when neither arm accepts an entry, a
@@ -10599,8 +9302,7 @@ const objectTimelineItem = () => (objectTimelineItemOnce ??= buildObjectTimeline
/**
* [#21464] The row refinement that pairs each `items` entry with the arm the
* row's `variant` selects (absent ⇒ `vertical`) — objectui's node-level
- * refinement (`timelineItemsFitVariant`, `types/src/zod/data-display.zod.ts`),
- * restated for this row: each branch of the renderer reads only its own arm's
+ * refinement (`timelineItemsFitVariant`), restated for this row: each branch of the renderer reads only its own arm's
* keys, so a gantt row on a feed timeline, or a feed entry on a gantt one, drew
* an empty, unlabelled entry.
*
@@ -10645,159 +9347,9 @@ function objectTimelineItemsFitVariant() {
}
/**
- * `object-timeline` (objectui `plugin-timeline/src/ObjectTimeline.tsx`, the
- * presentational `plugin-timeline/src/renderer.tsx` it composes into, and the
- * registry shell `plugin-timeline/src/index.tsx` — all read at objectui `b9814b334` (re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * `index.tsx` is byte-identical to `20c6d351a` (`git diff --quiet`), so its
- * anchors held unmoved; `ObjectTimeline.tsx` (+42/-20) and `renderer.tsx`
- * (+28/-8) changed for objectui#12104 (objectui `206505c34`: an explicit
- * `groupByField` groups by the field's display value, one group per key)
- * without touching a cited line, so every anchor in them held or MOVED with
- * its cited text byte-identical — in `ObjectTimeline.tsx` nothing above
- * `:730` moved and everything from `:832` on MOVED by 22 (`:832` -> `:854`
- * through `:1033-1034` -> `:1055-1056`), and the three in `renderer.tsx` MOVED
- * by 20 (`1569` -> `1589`, `1794-1809` -> `1814-1829`, `1869` -> `1889`) — and
- * each is cited below at this pin. The `schema.*` read set of all three is
- * unchanged. At `20c6d351a`, re-read there 2026-10-10:
- * `renderer.tsx` and `index.tsx` are byte-identical to `47b1f0bb7` (`git diff
- * --quiet`), so their anchors held unmoved; `ObjectTimeline.tsx` changed
- * (+15/-15, objectui#6152 round 14, objectui `3fd862510`: the nested
- * `timeline.dateField` alias rung retired from the start-date chain and from
- * the refusal's key list, with their comments) without touching a cited line,
- * so every anchor in it held or MOVED with its cited text byte-identical — by
- * 1 between the key list and the start-date chain (`:306` -> `:307` through
- * `:565` -> `:566`), `:30` and everything from `:591` on not moving — and each
- * is cited below at this pin. The `schema.*` read set of all three is
- * unchanged. At `47b1f0bb7`, re-read there 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * `renderer.tsx` is byte-identical to `a58626c88` (`git diff --quiet`), so its
- * three anchors held unmoved; `index.tsx` rewrote two description constants in
- * place, line for line (`:432` and `:438`, objectui `c0862c1cc`), so `:334` and
- * `:446` did not move; `ObjectTimeline.tsx` changed in three comments only
- * (+19/-8, objectui#6152 round 12, objectui `5d77c099b`: the nested block's type
- * is the spec slot by reference, its legacy `dateField` refused by name while the
- * read stays), so every anchor in it MOVED with its cited text byte-identical —
- * by 10 past the second comment (`:298` -> `:308` through `:555` -> `:565`) and
- * by 11 past the third (`:580` -> `:591` through `:1022-1023` -> `:1033-1034`),
- * `:30` not moving — and each is cited below at this pin. The `schema.*` read set
- * of all three is unchanged. At `a58626c88`, re-read there 2026-10-06:
- * `renderer.tsx` and `index.tsx` are byte-identical to `0abd4f9f8` (`git diff
- * --quiet`), so their anchors held unmoved; `ObjectTimeline.tsx` changed
- * (+39/-9: objectui#11675 starts the date buckets' week on the display locale's
- * first day, and objectui#11676 heads a past date "Earlier" and retires the
- * `timeline.bucket.overdue` read) without touching a cited line, so every
- * anchor in it MOVED with its cited text byte-identical — by 1 below the import
- * it gained (`:29` -> `:30` through `:544` -> `:545`), by 4 past the
- * display-locale read (`:551` -> `:555` through `:602` -> `:606`) and by 30
- * past the bucket rewrite (`:791` -> `:821` through `:992-993` -> `:1022-1023`)
- * — and each is cited below at this pin. The `schema.*` read set of all three
- * is unchanged.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved).
- * At `9dfaca654`, re-measured there
- * 2026-10-05: `ObjectTimeline.tsx`, `renderer.tsx` and `index.tsx` are
- * byte-identical to `2e818d0b5` (`git diff --quiet`), so every anchor held
- * unmoved. At `2e818d0b5`, re-measured there
- * 2026-10-04: `ObjectTimeline.tsx`, `renderer.tsx` and `index.tsx` are
- * byte-identical to `ab1879721` (`git diff --quiet`), so every anchor held
- * unmoved. At `ab1879721`, re-measured there
- * 2026-10-03: `ObjectTimeline.tsx`, `renderer.tsx` and `index.tsx` are
- * byte-identical to `89cad75d5` (`git diff --quiet`), so every anchor held
- * unmoved and was re-read in place, and the `schema.*` read set of all three
- * is unchanged. At `89cad75d5` (2026-10-02) `renderer.tsx` was
- * byte-identical to `31971ff1e`, so its three
- * anchors hold unmoved; `ObjectTimeline.tsx` changed (+16/-7, objectui#11168
- * slice 5) in two COMMENTS only — the `navigation` member's docblock on the
- * component's props and the comment above the navigation read — every anchor
- * between them MOVING by 6 (`:291` -> `:297`, `:538` -> `:544`) and every one
- * past the second by 9 (`:793-796` -> `:802-805`, `:849` -> `:858`), each with
- * its cited text byte-identical, and `:29` not moving; the `filter` read and
- * its fetch key this record cited as `:396` / `:397` began one line early, on
- * `useFilterScope`, at `31971ff1e` too, where they are `:397` / `:398`; they
- * are `:403` / `:404` here. `index.tsx` changed (+80/-18, objectui#11168
- * slice 5: both registrations now spread one shared `OBJECT_TIMELINE_INPUTS`
- * list that publishes the ten further keys this row declares, `objectName`
- * is no longer `required`, and the `sort` / `navigation` descriptions were
- * rewritten), so the `variant` input this record cited as `393-394` — a range
- * that began on the `objectName` input — is re-pointed to `:446`, its own
- * line, and `:333` MOVED to `:334` byte-identical. The `schema.*` read set of
- * all three is unchanged. At `31971ff1e` (2026-10-01) `renderer.tsx` was
- * byte-identical to `e420df310`, so its three
- * anchors held unmoved; `ObjectTimeline.tsx` changed (+42/-2, objectui#8654:
- * a typed `navigation` member on the component's props, and the navigation
- * read without its cast), every anchor below line 173 MOVING by 35 (by 40
- * past the navigation read) with its cited text byte-identical, and ONE
- * changing CONTENT, toward this row: the navigation binding `:753-756` ->
- * `:793-796` now reads `schema.navigation` where it read
- * `(schema as any).navigation`; `index.tsx` changed (+21/-0, objectui#8654: a
- * `navigation` input on both registrations, with its shared description), the
- * `variant` input MOVING `374-375` -> `393-394` byte-identical and `:333` not
- * moving. The `schema.*` read set of all three is unchanged — `navigation`
- * was read before, through the cast. At `e420df310` (2026-09-30)
- * `ObjectTimeline.tsx` was byte-identical to `db11afd49`, so every
- * anchor in it held unmoved and was re-read in place; `index.tsx` changed
- * (+17/-0, objectui#8220: `filter` / `sort` inputs on both registrations, in
- * the array forms this row declares, and their shared descriptions above the
- * first), the `variant` input MOVING `361-362` -> `374-375` byte-identical and
- * `:333` not moving; and `renderer.tsx` changed (+83/-8, objectui#11141's
- * inclusive date-only end), its three anchors MOVING with their cited text
- * byte-identical, `1497` -> `1569`, `1794` -> `1869`, `1722-1737` ->
- * `1794-1809`; its schema-key read set (`schema.*`) is unchanged. At
- * `db11afd49` (2026-09-29) `ObjectTimeline.tsx` and `index.tsx` were
- * byte-identical to
- * `dd3f7e1be`, and `renderer.tsx` changed hard (+387/-177: objectui#11079's
- * continuous gantt axis and objectui `9e6619ffa`'s date-only day in every zone),
- * its three anchors MOVING with their cited text byte-identical, `1295` ->
- * `1497`, `1586` -> `1794`, `1523-1538` -> `1722-1737`; its schema-key read set
- * (`schema.*`) is unchanged. Re-measured at `dd3f7e1be`
- * 2026-09-28: `index.tsx` is byte-identical to `f8a9d0fb0` (`git diff
- * --quiet`); `ObjectTimeline.tsx` changed (+129/-26 across nine commits:
- * objectui#10666 resolves the filter's context tokens before `$filter`,
- * objectui#10623's invalidation bus hoisted the fetch gate out of the
- * effect, objectui#10530 derives the entry title and description as display
- * strings, objectui#6356 typed the renderer handoff, objectui#10866 reads a
- * date-only start as that day in the bucket and the sort, among others) and
- * `renderer.tsx` changed (+86/-31: objectui#6356, objectui#10841, and
- * objectui#10866 in `formatDate`), so every anchor in both was re-mapped
- * through the diff and re-READ. The `filter` reads and the fetch gate
- * changed CONTENT and say so where they are cited; every other anchor MOVED
- * (or held) with its cited text byte-identical — the three in `renderer.tsx`
- * by 55, `1240` -> `1295`, `1531` -> `1586`, `1468-1483` -> `1523-1538`. At `f8a9d0fb0`, `ObjectTimeline.tsx` and
- * `index.tsx` were byte-identical to `62597c588`, and `renderer.tsx` had
- * changed (+46/-20, objectui `0b6b295a1`: a gantt row that is not an object
- * is refused), its three anchors MOVING with their cited text byte-identical,
- * `1215` -> `1240`, `1505` -> `1531`, `1442-1457` ->
- * `1468-1483`. All three files were byte-identical to `87af769e9` at
- * `62597c588`, and were re-READ there 2026-09-22.
- *
- * ⛔ This record used to be MIXED, and the historical spelling is what let it
- * be: its `limit` clause was re-read at this pin on 2026-09-21 while every
- * other anchor beside it was still a `53ded82bf` reading, in the same file,
- * with nothing to tell the two apart. Every anchor below is now at this pin.)
+ * `object-timeline` (objectui's `plugin-timeline` renderer, the presentational
+ * rail it composes into, and its registry shell; read points recorded in
+ * `liveness/page.json`, row `regions`).
*
* Commit e233db9db executes the objectui#8652 maintainer ruling (verbatim `B`). The
* ruling's carrier is `navigation`, declared below beside its `object-kanban`
@@ -10808,50 +9360,35 @@ function objectTimelineItemsFitVariant() {
* #11575 mechanism, one instance further on. It was unjudged in BOTH
* directions: nothing accepted a real key and nothing refused a typo.
*
- * Read points per key, in `ObjectTimeline.tsx` unless named otherwise:
- * `objectName` (`:309` the fetch gate, `:389-392` the object-def load through
- * `useSettledSchema`, `:427` the `fetchesForItself` gate — the check that
- * sat inside the fetch effect at `:420` is hoisted to render scope at this
- * pin, where `:428` also subscribes the invalidation bus on it
- * (objectui#10623) and the effect reads it at `:532` — `:434` / `:492`
- * inside the fetch effect,
- * `:854` the pull-to-refresh gate, `:617` the entry composition and `:867`
- * the navigation binding), `timeline` (`:326`,
- * the canonical nested config every field resolution prefers), `filter`
- * (`:415`, read once through `useResolvedFilter`, which resolves its context
- * tokens — objectui#10666 — and holds the result; `:416` keys the fetch on
- * it and `:493` sends it to `$filter`, where `f8a9d0fb0` sent `schema.filter`
- * verbatim at `:341` / `:405`), `sort` (`:417`, `:494` — through
- * the shared `convertSortToQueryParams` sink, as `object-calendar`'s does),
- * `limit` (`:495`, the fetch's one top-level `$top`, through
- * `resolveRowLimit(schema.limit, DEFAULT_TIMELINE_LIMIT)` with the default
- * `100` at `:30` and the refused-cap diagnostic at `:343`), `items` (`:307`, `:427`, `:602`,
- * `:883` — the authored pass-through that short-circuits the object query),
- * `data` (`:308`, `:427`, `:554`, `:556` — the pre-fetched record source,
- * read off REACT PROPS rather than `schema`; the door's own docblock carries
- * how an authored key reaches that channel and why a `schema.*` sweep alone
- * publishes a false refusal),
- * `descriptionField` (`:593`), `mapping` (`:566`, `:591`, `:593`, `:594`),
- * `variant` (`:921`) and `navigation` (`:865-868` → `:1000` → `:1055-1056`).
- * Four more are read by the presentational renderer off the schema this
- * component spreads into it (`effectiveSchema`, `:984-1003`): `dateFormat`
- * (`plugin-timeline/src/renderer.tsx:1589`, every variant — its number was the
- * same at `53ded82bf` and `87af769e9`, as `plugin-timeline/src/index.tsx:333`'s
- * also was (`:334` since the hop off `31971ff1e`), which is why the number alone is never the reading) and the gantt
- * trio `rowLabel` (`plugin-timeline/src/renderer.tsx:1889`), `minDate` /
- * `maxDate` (`plugin-timeline/src/renderer.tsx:1814-1829`). ⚠️ All three name their
- * package because objectui has a second `renderer.tsx` (in `plugin-chatbot`):
- * a suffix that matches two files names neither, and the gate drops it from
- * the population rather than guessing.
+ * Read points per key (recorded in `liveness/page.json`, row `regions`):
+ * `objectName` (the fetch gate, the object-def load through
+ * `useSettledSchema`, the `fetchesForItself` gate — hoisted to render scope,
+ * where it also subscribes the invalidation bus (objectui#10623) — the fetch
+ * effect, the pull-to-refresh gate, the entry composition and the navigation
+ * binding), `timeline` (the canonical nested config every field resolution
+ * prefers), `filter` (read once through `useResolvedFilter`, which resolves its
+ * context tokens — objectui#10666 — and holds the result; it keys the fetch and
+ * is sent to `$filter`), `sort` (keyed, and sent through the shared
+ * `convertSortToQueryParams` sink, as `object-calendar`'s does), `limit` (the
+ * fetch's one top-level `$top`, through `resolveRowLimit(schema.limit,
+ * DEFAULT_TIMELINE_LIMIT)` with the default `100` and a refused-cap
+ * diagnostic), `items` (the authored pass-through that short-circuits the
+ * object query), `data` (the pre-fetched record source, read off REACT PROPS
+ * rather than `schema`; the door's own docblock carries how an authored key
+ * reaches that channel and why a `schema.*` sweep alone publishes a false
+ * refusal), `descriptionField`, `mapping`, `variant` and `navigation`. Four
+ * more are read by the presentational renderer off the schema this component
+ * spreads into it (`effectiveSchema`): `dateFormat` (every variant) and the
+ * gantt trio `rowLabel`, `minDate` / `maxDate`.
*
* Measured and deliberately NOT declared, each with its reason:
* - the flat field spellings and `scale`
* ({@link OBJECT_TIMELINE_FLAT_CONFIG_GUIDANCE}) — the runtime handoff
* `ListView` emits, not a second authoring spelling;
* - `bind` — the objectui data-scope key the section header above rules out
- * for every block in this family (`:347` here);
- * - `className` (`:987`) — a node-level key on `PageComponentSchema`, not a
- * per-block prop;
+ * for every block in this family;
+ * - `className` — a node-level key on `PageComponentSchema`, not a per-block
+ * prop;
* - `onItemClick` / `onRowClick` — host callbacks JSON cannot carry.
*
* VALUE posture: `timeline` takes {@link TimelineConfigSchema}, the block
@@ -10868,18 +9405,11 @@ function objectTimelineItemsFitVariant() {
* pairing each entry with the arm `variant` selects. `navigation` takes
* {@link NavigationConfigSchema}, by reference, for the reason the ruling gives.
*
- * ⚠️ `variant: 'gantt'` is declared because the registration declares it
- * (`plugin-timeline/src/index.tsx:446`, in the one `OBJECT_TIMELINE_INPUTS`
- * list both registrations spread) and the renderer reads it — but the
- * OBJECT-BOUND composed path REFUSES it loudly (objectui#6655,
- * `ObjectTimeline.tsx:921-923`:
- * `:921` gates on `!hasAuthoredItems && schema.variant === 'gantt'` and `:923`
- * renders `timeline-unsupported-variant`. ⚠️ The `:518` this clause carried is
- * that gate at the RETIRED `53ded82bf` and was a comment line at `31971ff1e`. It sat on
- * a line the 2026-09-22 conversion never touched — and so did eight other
- * anchors of this record, so the untouched line is not what singles it out.
- * RE-READING all nine at this pin does: the other eight say here what this
- * record claims they say, and this one alone did not), so on this block it is
+ * ⚠️ `variant: 'gantt'` is declared because the registration declares it (in
+ * the one `OBJECT_TIMELINE_INPUTS` list both registrations spread) and the
+ * renderer reads it — but the OBJECT-BOUND composed path REFUSES it loudly
+ * (objectui#6655: it gates on `!hasAuthoredItems && schema.variant ===
+ * 'gantt'` and renders `timeline-unsupported-variant`), so on this block it is
* usable only together with authored `items`.
* Declared-and-refused-with-a-diagnostic is not the accepted-and-dropped class
* this section exists to close: the author is told, in the renderer, by name.
@@ -10924,134 +9454,13 @@ export const ObjectTimelinePropsSchema = lazySchema(() => strictObject({
* `schema.` OR `props.`, and a measurement that greps only the
* first publishes a refusal for a key the renderer honours.
*
- * Read points at objectui `b9814b334` (re-read there 2026-10-14:
- * every objectui file this record cites is byte-identical across the hop from
- * `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- * `1fb1ced36`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- * `7578323a5`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- * `9646e2ed2`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- * `088e0f705`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- * `e5311165a`, re-read there 2026-10-12:
- * every objectui file this record cites is byte-identical across the hop from
- * `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- * `499799502`, re-read there 2026-10-11:
- * every objectui file this record cites is byte-identical across the hop from
- * `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- * `0df67f237`, re-read there 2026-10-11:
- * `record-source.ts` and `SchemaRenderer.tsx` are byte-identical across the hop
- * from `20c6d351a` (`git diff --quiet`), so the prop channel above still
- * carries the key; the file changed (+42/-20, objectui#12104, objectui
- * `206505c34`: an explicit `groupByField` groups by its display value), every
- * hunk at `:730` or below, so every anchor here held unmoved — `:308`,
- * `:427`, `:532`, `:554`, `:556`, `:678-679` and `:709`. At `20c6d351a`,
- * re-read there 2026-10-10:
- * `record-source.ts` and `SchemaRenderer.tsx` are byte-identical across the hop
- * from `47b1f0bb7` (`git diff --quiet`), so the prop channel above still
- * carries the key; the file changed (+15/-15, objectui#6152 round 14, objectui
- * `3fd862510`: the nested `timeline.dateField` alias rung and its entry in
- * the refusal's key list retired, with their comments), away from these
- * reads, so every anchor held or MOVED with its cited read byte-identical, by
- * 1 between the key list and the start-date chain and by 0 below it: `:307`
- * -> `:308`, `:426` -> `:427`, `:531` -> `:532`, `:553` -> `:554`, `:555` ->
- * `:556`, while `:678-679` and `:709` held. At `47b1f0bb7`, re-read there
- * 2026-10-09:
- * every objectui file this record cites is byte-identical across the hop from
- * `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- * `f0268ad78`, re-read there 2026-10-09:
- * `record-source.ts` and `SchemaRenderer.tsx` are byte-identical across the hop
- * from `a58626c88` (`git diff --quiet`), so the prop channel above still
- * carries the key; the file changed in three comments only (+19/-8,
- * objectui#6152 round 12, objectui `5d77c099b`), away from these reads, so
- * every anchor MOVED with its cited read byte-identical, by 10 above the third
- * comment and by 11 below it: `:297` -> `:307`, `:416` -> `:426`, `:521` ->
- * `:531`, `:543` -> `:553`, `:545` -> `:555`, `:667-668` -> `:678-679`, `:698`
- * -> `:709`. At `a58626c88`, re-read there 2026-10-06:
- * `record-source.ts` and `SchemaRenderer.tsx` are byte-identical across the
- * hop from `0abd4f9f8` (`git diff --quiet`), so the prop channel above still
- * carries the key; the file changed (+39/-9: objectui#11675's locale week
- * start and objectui#11676's "Earlier" bucket) away from these reads, so
- * every anchor MOVED with its cited read byte-identical, by 1 above the
- * display-locale read and by 4 below it: `:296` -> `:297`, `:415` -> `:416`,
- * `:520` -> `:521`, `:542` -> `:543`, `:544` -> `:545`, `:663-664` ->
- * `:667-668`, `:694` -> `:698`.
- * At `0abd4f9f8`, re-read there 2026-10-05:
- * every objectui file this record cites is byte-identical across the hop from
- * `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- * At `9dfaca654`, re-measured there 2026-10-05 — the file and
- * `record-source.ts` are byte-identical across the hop from `2e818d0b5`
- * (`git diff --quiet`), so every anchor held unmoved; `SchemaRenderer.tsx`
- * changed (+3/-4, objectui#8347) in two docblocks only, putting the
- * `BaseSchema` index signature's removal in the past tense, not in the
- * `properties.*` hoist, its strip list or the `createElement` spread, so
- * the prop channel above still carries the key. At `2e818d0b5`,
- * re-measured there 2026-10-04 — the file and
- * `record-source.ts` are byte-identical across the hop from `ab1879721`
- * (`git diff --quiet`), so every anchor held unmoved; `SchemaRenderer.tsx`
- * changed (+21/-20, objectui#11466) in its type import and in the
- * `SchemaRendererProps` docblock and `schema` type only (`DeclaredNode` in
- * place of `BaseSchema | AuthoringNode`), not in the `properties.*` hoist,
- * its strip list or the `createElement` spread, so the prop channel above
- * still carries the key. At `ab1879721`, re-READ there 2026-10-03 — the
- * file, `SchemaRenderer.tsx`
- * and `record-source.ts` are byte-identical across the hop from
- * `89cad75d5` (`git diff --quiet`), so every anchor held unmoved and was
- * re-read in place, and the prop channel above still carries the key. At
- * `89cad75d5`, re-READ there 2026-10-02 — the file changed across the hop
- * from `31971ff1e` (+16/-7, objectui#11168 slice 5) in two comments only,
- * both above or away from these reads, so every anchor MOVED by 6 with its
- * cited read byte-identical: `:290` -> `:296`, `:409` -> `:415`, `:514` ->
- * `:520`, `:536` -> `:542`, `:538` -> `:544`, `:657-658` -> `:663-664`,
- * `:688` -> `:694`. `SchemaRenderer.tsx` changed (+144/-10, objectui#11349:
- * the evaluation memo's working copy is typed as renderer state, and the
- * aria and text-key reads narrow through it) without touching the
- * `properties.*` hoist, its strip list or the `createElement` spread, and
- * `record-source.ts` changed (+4/-5) only by retiring the bare `tree` and
- * `view:tree` rows, objectui#10859 batch 8 — `object-timeline` is still not
- * listed — so the prop channel above still carries the key. At `31971ff1e`,
- * 2026-10-01, the file changed across the hop
- * from `e420df310` (+42/-2, objectui#8654's typed `navigation` member and
- * cast-free navigation read), all of it above or away from these reads, so
- * every anchor MOVED by 35 with its cited read byte-identical: `:255` ->
- * `:290`, `:374` -> `:409`, `:479` -> `:514`, `:501` -> `:536`, `:503` ->
- * `:538`, `:653` -> `:688`. One was re-pointed rather than moved: the
- * start/end bindings this record carried as `621-622` began one line early,
- * on the `rawData.map` head, at `e420df310` too, where the two bindings are
- * `622-623`; they were `657-658` there. `SchemaRenderer.tsx` and
- * `record-source.ts` were byte-identical, so the prop channel above still
- * carried the key. At `e420df310`, 2026-09-30, the file was byte-identical to
- * `db11afd49`, so every anchor held unmoved; and the prop channel above
- * still carries the key here: `SchemaRenderer` strips an authored `data`
- * prop only on the types `core`'s `RECORD_SOURCE_DATA_ARM_BY_TYPE` puts on
- * the `view-data` arm (objectui#9571), and `object-timeline` is not listed,
- * so it stays `undeclared` and keeps the seat. At `db11afd49`, 2026-09-29,
- * the file was byte-identical to
- * `dd3f7e1be`, so every anchor held unmoved; at `dd3f7e1be`, 2026-09-28, the
- * file changed across the hop
- * from `f8a9d0fb0` (+129/-26), so every anchor was re-mapped through the
- * diff: `:255` did not move, and the dependency list `442` -> `501` (it
- * gained the invalidation nonce), the row source `444` -> `503` and the
- * start/end bindings `555-556` -> `621-622` MOVED with the cited reads
- * byte-identical. Two changed CONTENT: the skip is no longer spelled
- * inside the fetch effect but hoisted to `fetchesForItself` at `:374`
- * (objectui#10623), and the title binding now reads through
- * `recordDisplayValueAt` (`:653`, objectui#10530), not `item[titleField]`.
- * At `f8a9d0fb0` the file was byte-identical to `62597c588` and
- * `87af769e9`, where they were re-READ 2026-09-22), all in
- * `ObjectTimeline.tsx`: `:308` seeds the loading state off it, `:427`
- * SKIPS the object query when it is present (the gate the effect reads at
- * `:532`), `:554` tracks it, and `:556`
- * is the row source itself — `(props as any).data || boundData ||
- * fetchedData`, so it wins over both the data-scope binding and the fetch.
- * Unlike `items` one line down, these rows are RECORDS: they go through the
- * same `timeline` field bindings a fetched row takes (`:678-679`, `:709`).
+ * Read points (recorded in `liveness/page.json`, row `regions`): the
+ * renderer seeds its loading state off the key, SKIPS the object query when
+ * it is present, tracks it, and takes it as the row source itself —
+ * `(props as any).data || boundData || fetchedData`, so it wins over both
+ * the data-scope binding and the fetch. Unlike `items` one line down, these
+ * rows are RECORDS: they go through the same `timeline` field bindings a
+ * fetched row takes.
*/
data: z.array(z.unknown()).optional()
.describe("Pre-fetched records — read FIRST as the rail's row source, ahead of the data-scope binding and the fetch, and composed into entries through the same `timeline` field bindings a fetched row takes; authoring it suppresses the object query entirely. Distinct from `items`, which is the already-composed entry shape and wins over this key when both are written"),
@@ -11059,9 +9468,9 @@ export const ObjectTimelinePropsSchema = lazySchema(() => strictObject({
* [#21464] The authored entries — typed in the S-final stage, per the
* maintainer's ruling on the decision card #21704, fork 4, letter B (record
* 5979239990). Each element is objectui's declared authored timeline entry
- * (`types/src/data-display.ts` at the `.objectui-sha` pin `2e818d0b51ec`:
- * `TimelineFeedItem` or `TimelineGanttItem`, ruled on objectui#6356), handed
- * to the rail verbatim (`ObjectTimeline.tsx:587`) — see
+ * (`TimelineFeedItem` or `TimelineGanttItem`, ruled on objectui#6356), handed
+ * to the rail verbatim (read points: `liveness/page.json`, row `regions`) —
+ * see
* {@link buildObjectTimelineItem}. The arm an entry must be is the one this
* row's `variant` selects, judged by the row's refinement
* ({@link objectTimelineItemsFitVariant}). A feed entry's `content` is held
@@ -11086,10 +9495,10 @@ export const ObjectTimelinePropsSchema = lazySchema(() => strictObject({
/**
* Entry-click navigation (commit e233db9db — the spec half of the objectui#8652
* maintainer ruling, verbatim `B`), the same carrier and the same def as
- * `object-kanban`'s and `object-calendar`'s above. Measured at the pin:
- * `ObjectTimeline.tsx:462-466` hands `(schema as any).navigation` to
- * `useNavigationOverlay`, `:597` fires it on an entry click and `:652`
- * renders the overlay — standalone, with no enclosing view.
+ * `object-kanban`'s and `object-calendar`'s above (read points recorded in `liveness/page.json`, row `regions`):
+ * the renderer hands `schema.navigation` to `useNavigationOverlay`, fires it
+ * on an entry click and renders the overlay — standalone, with no enclosing
+ * view.
*/
navigation: NavigationConfigSchema.optional()
.describe("Entry-click navigation config — the same block `ListViewSchema.navigation` declares ({ mode, size, openNewTab, preventNavigation })"),
@@ -11149,18 +9558,18 @@ export const ComponentPropsMap = {
// #8691 — the rail had a renderer, a `PageComponentType` entry and a palette
// slot, but no row here, so an entry `filter` shipped as a silent no-op while
// sibling components in the same file got loud diagnostics. Key set measured
- // from the renderer's read points at the `.objectui-sha` pin — see the
- // schema's own header for the two places that measurement diverges from the
- // renderer's TS interface (`icon`, `title`).
+ // from the renderer's read points (read points: `liveness/page.json`, row
+ // `regions`) — see the schema's own header for the two places that
+ // measurement diverges from the renderer's TS interface (`icon`, `title`).
'record:reference_rail': RecordReferenceRailProps,
// #8744 — the same mechanism as #8691 one row up, for the three types that
// fix left behind: registered renderers, `PageComponentType` entries,
// palette slots, no rows — so the #5068 gate's dispatch skipped all three
// and every authored key rode through in silence. Key sets measured from
- // the renderers' read points at the `.objectui-sha` pin; see the schemas'
- // own headers for where the measurement diverges from the registrations'
- // declared-input claims (`aria` and the empty-bar fallback on
- // quick_actions; the host-channel `entries`/`loading` on history; the
+ // the renderers' read points (read points: `liveness/page.json`, row
+ // `regions`); see the schemas' own headers for where the measurement
+ // diverges from the registrations' declared-input claims (`aria` and the
+ // empty-bar fallback on quick_actions; the host-channel `entries`/`loading` on history; the
// read-and-declared `icon` on alert, the rail's opposite).
'record:alert': RecordAlertProps,
'record:quick_actions': RecordQuickActionsProps,
@@ -11172,19 +9581,18 @@ export const ComponentPropsMap = {
// props and a column keyed `field` published green.
// Not a `PageComponentType` member: it reaches the type union through the
// open string arm, as `element:metadata_viewer` does, and the row is what
- // makes it known. Key set measured at the `.objectui-sha` pin; see the
- // schema's own header.
+ // makes it known. Key set measured from the renderer's read points (read
+ // points: `liveness/page.json`, row `regions`); see the schema's own header.
'record:line_items': RecordLineItemsProps,
// #22472 — the approval decision panel (objectui#12045, ruling 6079807016,
// letter 乙: the props of the request page's decision node are checked by
// `os validate`). A `PageComponentType` member, declared spec first; see the
// enum's own note for why it is not a row-only string-arm type. The accepted
- // key set is EMPTY, measured from the renderer's read points on objectui
- // `main` at `d03b022` (`app-shell/src/views/approval-decision/
- // ApprovalDecisionPanel.tsx`, landed in objectui `a368ccb`, still
- // module-internal there): `ApprovalDecisionRenderer` discards the schema node
- // (`schema: _schema`) and draws from the record context alone (the request
- // row the page binds, with its `viewer` and `decision_progress`) and from
+ // key set is EMPTY, measured from the renderer's read points (read points:
+ // `liveness/page.json`, row `regions`): `ApprovalDecisionRenderer` discards
+ // the schema node (`schema: _schema`) and draws from the record context
+ // alone (the request row the page binds, with its `viewer` and
+ // `decision_progress`) and from
// `sys_approval_request`'s own declared actions. `className` and the designer
// attributes it reads are node-level, never `properties`. So the row is
// strict and refuses every key: a misspelled prop is a
@@ -11196,16 +9604,14 @@ export const ComponentPropsMap = {
// row, so `component-type-unknown` refused a node its own default-page
// synthesizer emits, and Studio's page create seeds the Attachments tab onto
// every record page of an `enable.files` object. Both are `PageComponentType`
- // members now. Each key set is measured from the renderer's read points at
- // the `.objectui-sha` pin `47b1f0bb71`, and both are EMPTY:
+ // members now. Each key set is measured from the renderer's read points
+ // (read points: `liveness/page.json`, row `regions`), and both are EMPTY:
// - `record:approvals` reads `approvals` and `currentUserId`, and both are
// the host's runtime channel, refused with a prescription (see the
// schema's own header);
- // - `record:attachments` (`app-shell/src/views/
- // record-attachments-renderer.tsx`, registered at `:69`) discards the
- // schema node (`schema: _schema`) and draws the record context's
- // attachments; `className` and the designer attributes it reads are
- // node-level, never `properties`.
+ // - `record:attachments` discards the schema node (`schema: _schema`) and
+ // draws the record context's attachments; `className` and the designer
+ // attributes it reads are node-level, never `properties`.
'record:approvals': RecordApprovalsProps,
'record:attachments': emptyProps('record:attachments'),
@@ -11236,10 +9642,8 @@ export const ComponentPropsMap = {
// union's open string arm, and with no row here the #5068 gate's dispatch
// skipped them as unregistered — any authored key would have ridden through
// in silence (nothing authors one today: both shipped pages carry `{}`).
- // Key sets measured from the renderers' ACTUAL read points at the
- // `.objectui-sha` pin (app-shell `console/cloud-connection/
- // CloudConnectionPanel.tsx`, `console/marketplace/InstalledListWidget.tsx`):
- // both registrations discard the schema node entirely (`() => `)
+ // Key sets measured from the renderers' ACTUAL read points (read points:
+ // `liveness/page.json`, row `regions`): both registrations discard the schema node entirely (`() => `)
// and neither component function takes a prop, so the accepted key set is
// EMPTY — strict, refuses every key. The registrations' declared
// `inputs: []` happen to agree here, but the row is the measurement, not
@@ -11252,9 +9656,8 @@ export const ComponentPropsMap = {
// string arm, no row here, so the #5068 gate's dispatch skipped it and door 3
// of the mcp canonical-envelope gate (#12269) had to carry a standing
// exemption for it. Key set measured from the renderer's ACTUAL read points
- // at the `.objectui-sha` pin (app-shell `console/connect/
- // ConnectAgentWidget.tsx`): the registration discards the schema node
- // entirely (`() => `) and the component function takes no
+ // (read points: `liveness/page.json`, row `regions`): the registration
+ // discards the schema node entirely (`() => `) and the component function takes no
// parameters — every value it renders comes from `/discovery`, i18n and its
// own state, never from the authored bag — so the accepted key set is EMPTY:
// strict, refuses every key. The registration's declared `inputs: []`
@@ -11306,113 +9709,21 @@ export const ComponentPropsMap = {
// refused both nodes outright. The rows are what admit them to the
// `element:` vocabulary (`component-type-vocabulary.ts` derives the known
// set from this map's keys), on the three-part evidence that vocabulary's
- // string-arm ledger asks of a type admitted without an enum member — all
- // measured at objectui `b9814b334` (re-read there 2026-10-14:
- // `public-blocks.ts`, `data-list.tsx` and `block-config.ts` are
- // byte-identical across the hop from `1fb1ced36` (`git diff --quiet`), so
- // `:117-118`, `:85`, `317` and `311-351` did not move; `block-types.ts`
- // changed (+9/-0, objectui#12030, objectui `c5406c201`: three
- // `PALETTE_EXCLUSIONS` rows for the record blocks spec 18 added) below
- // `137-138`, which did not move. At `1fb1ced36`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- // `7578323a5`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- // `9646e2ed2`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- // `088e0f705`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- // `e5311165a`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- // `499799502`, re-read there 2026-10-11:
- // every objectui file this record cites is byte-identical across the hop from
- // `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- // `0df67f237`, re-read there 2026-10-11:
- // `public-blocks.ts`, `block-types.ts` and `block-config.ts` are
- // byte-identical across the hop from `20c6d351a` (`git diff --quiet`), so
- // `:117-118`, `137-138` and `311-351` did not move; `data-list.tsx` changed
- // (+17/-26, objectui#12085, objectui `ce991bd70`: the repeater publishes the
- // node-level binding as its one query input), the `definition-list`
- // registration not moving and the `repeater` one MOVING `311` -> `317`, its
- // line byte-identical and still in the `element` namespace. At `20c6d351a`,
- // re-read there 2026-10-10:
- // `public-blocks.ts`, `data-list.tsx` and `block-types.ts` are byte-identical
- // across the hop from `47b1f0bb7` (`git diff --quiet`), so `:117-118`,
- // `:85`, `:311` and `137-138` did not move; `block-config.ts` changed (+10/-4,
- // objectui#12056, objectui `2a48bd408`) between and inside the two
- // inspectors: a six-line comment above the repeater's, and its object,
- // title-field, fields and limit rows now writing and reading the node-level
- // `dataSource` binding, so the two inspectors were re-READ and span
- // `311-345` -> `311-351`, each still the block's own inspector. At
- // `47b1f0bb7`, re-read there 2026-10-09:
- // every objectui file this record cites is byte-identical across the hop from
- // `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- // `f0268ad78`, re-read there 2026-10-09:
- // `public-blocks.ts` is byte-identical across the hop from `a58626c88`
- // (`git diff --quiet`), so `:117-118` did not move; `data-list.tsx` changed
- // (+99/-16, objectui#11880's repeater half, objectui `aaba8655a`), the
- // `definition-list` registration MOVING `75` -> `85` byte-identical and the
- // `repeater` one MOVING `233` -> `311`, its first line now registering the
- // renderer through `elementDataSourceBlock` (it reads the node-level
- // `dataSource` binding at this pin), both still in the `element` namespace;
- // `block-types.ts` changed (+14/-7, objectui `c0862c1cc`) above the palette
- // entries, which MOVED `136-137` -> `137-138` byte-identical; and
- // `block-config.ts` changed (+33/-13: objectui#11880's binding-homed rows for
- // `element:record_picker` and `element:number`, and objectui `c0862c1cc`)
- // around the two inspectors, which MOVED `296-330` -> `311-345`
- // byte-identical. At
- // `a58626c88`, re-read there 2026-10-06:
- // every objectui file this record cites is byte-identical across the hop from
- // `0abd4f9f8` (`git diff --quiet`), so every anchor held unmoved.
- // At `0abd4f9f8`, re-read there 2026-10-05:
- // every objectui file this record cites is byte-identical across the hop from
- // `9dfaca654` (`git diff --quiet`), so every anchor held unmoved.
- // At `9dfaca654`; re-measured there 2026-10-05: all four files below are
- // byte-identical to `2e818d0b5` (`git diff --quiet`), so every anchor held
- // unmoved; at `2e818d0b5`, re-measured 2026-10-04: all four were
- // byte-identical to `ab1879721` (`git diff --quiet`), so every anchor held
- // unmoved; at `ab1879721`, re-measured 2026-10-03: `data-list.tsx`,
- // `public-blocks.ts`, `block-types.ts` and `block-config.ts` all
- // byte-identical to `89cad75d5` (`git diff --quiet`), so every anchor below
- // holds unmoved and was re-read in place, both registrations still in the
- // `element` namespace. At `89cad75d5`, 2026-10-02: `data-list.tsx`,
- // `public-blocks.ts`, `block-types.ts` and `block-config.ts` all
- // byte-identical to `31971ff1e` (`git diff --quiet`), so every anchor below
- // holds unmoved and was re-read in place, both registrations still in the
- // `element` namespace. At `31971ff1e`, 2026-10-01: `public-blocks.ts` and
- // `block-types.ts` byte-identical to `e420df310`; `data-list.tsx` changed
- // (+48/-6, objectui#11168 slice 2: both registrations publish their
- // spec-declared inputs), the `definition-list` registration not moving and
- // the `repeater` one MOVING `205` -> `233`, each still in the `element`
- // namespace; `block-config.ts` changed (+17/-4) above the two inspectors,
- // which MOVED `283-317` -> `296-330` byte-identical. At `e420df310`,
- // 2026-09-30: `data-list.tsx`,
- // `public-blocks.ts` and `block-types.ts` byte-identical to `db11afd49`, and
- // `block-config.ts` changed (+12/-3) outside the two inspectors — two
- // line-neutral one-line edits above them and an insertion below — so every
- // anchor below held unmoved; at `db11afd49`, 2026-09-29, all four files were
- // byte-identical to `dd3f7e1be`):
+ // string-arm ledger asks of a type admitted without an enum member (read
+ // points: `liveness/page.json`, row `regions`):
// - registration: `@object-ui/components` registers both in the `element`
- // namespace (`components/src/renderers/basic/data-list.tsx:85`, `:317`);
- // - publication: both are `PUBLIC_BLOCKS` members
- // (`core/src/registry/public-blocks.ts:117-118`), which is how the
+ // namespace;
+ // - publication: both are `PUBLIC_BLOCKS` members, which is how the
// tracked `sdui.manifest.json` carries both;
- // - authorship: the Studio page designer's palette offers both
- // (`app-shell/src/views/metadata-admin/previews/block-types.ts:137-138`),
- // each with its own inspector (`previews/block-config.ts:311-351`), so
- // stored pages hold them.
+ // - authorship: the Studio page designer's palette offers both, each with
+ // its own inspector, so stored pages hold them.
'element:definition-list': ElementDefinitionListPropsSchema,
'element:repeater': ElementRepeaterPropsSchema,
// Actions — #20371. The same curated vocabulary's four `action:*` blocks
- // (`core/src/registry/public-blocks.ts:119-122` at the pin), registered by
- // `@object-ui/components` in the `action` namespace
- // (`components/src/renderers/action/`) and taught by objectui's own
- // AGENTS.md as the node that runs an action. `action:` is not a namespace
+ // (read points: `liveness/page.json`, row `regions`), registered by
+ // `@object-ui/components` in the `action` namespace and taught by objectui's
+ // own AGENTS.md as the node that runs an action. `action:` is not a namespace
// the enum populates, so these rows add no vocabulary claim; what they add
// is the props gate's dispatch, which skipped all four until now. Key sets
// measured from the renderers' read points — see section 4b above.
@@ -11436,104 +9747,8 @@ export const ComponentPropsMap = {
// #5068 gate skipped them and objectui's OWN mirror stood in as the
// authority for map and gantt while tree's rung-1 `data` read stayed
// undeclared on every face. Key sets measured from the renderers' read
- // points at objectui `b9814b334` (re-read there 2026-10-14:
- // every objectui file this record cites is byte-identical across the hop from
- // `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- // `1fb1ced36`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- // `7578323a5`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- // `9646e2ed2`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- // `088e0f705`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- // `e5311165a`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- // `499799502`, re-read there 2026-10-11:
- // `ObjectTree.tsx` and `ObjectMap.tsx` are byte-identical to `0df67f237`
- // (`git diff --quiet`); `ObjectGantt.tsx` (+27/-4) changed for objectui#12082
- // (objectui `752504520`: the chart's in-chart writes read the
- // affordance-to-grant map) and was re-READ: its anchors MOVED byte-identical
- // and its `schema.*` read set is unchanged (the same 49 names at both pins),
- // so no declared key set moved and no read point died. At `0df67f237`,
- // re-read there 2026-10-11:
- // every objectui file this record cites is byte-identical across the hop from
- // `20c6d351a` (`git diff --quiet`), so every anchor held unmoved. At
- // `20c6d351a`, re-read there 2026-10-10:
- // every objectui file this record cites is byte-identical across the hop from
- // `47b1f0bb7` (`git diff --quiet`), so every anchor held unmoved. At
- // `47b1f0bb7`, re-read there 2026-10-09:
- // every objectui file this record cites is byte-identical across the hop from
- // `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- // `f0268ad78`, re-read there 2026-10-09:
- // `ObjectGantt.tsx` and `ObjectTree.tsx` are byte-identical to `a58626c88`
- // (`git diff --quiet`); `ObjectMap.tsx` (+85/-4) changed for objectui#11819
- // (without WebGL2 the map lists its records instead of crashing) and was
- // re-READ: its anchors MOVED byte-identical and its `schema.*` read set is
- // unchanged (the same 17 names at both pins), so no declared key set moved and
- // no read point died. At `a58626c88`, re-read there 2026-10-06:
- // `ObjectMap.tsx` and `ObjectGantt.tsx` are byte-identical to `0abd4f9f8`
- // (`git diff --quiet`); `ObjectTree.tsx` (+81/-3) changed for objectui#11686
- // (a tree cell draws the same field face a list cell does) and was re-READ:
- // its anchors MOVED byte-identical and its `schema.*` read set is unchanged,
- // so no declared key set moved and no read point died.
- // At `0abd4f9f8`, re-read there 2026-10-05:
- // every objectui file this record cites is byte-identical across the hop from
- // `9dfaca654` (`git diff --quiet`), so every anchor held unmoved).
- // At `9dfaca654`, all three re-measured there 2026-10-05 (`ObjectMap.tsx` is
- // byte-identical to `2e818d0b5`; `ObjectTree.tsx` (+8/-5) and
- // `ObjectGantt.tsx` (+4/-3) changed in docblocks only, objectui#8347 putting
- // `BaseSchema`'s index signature in the past tense, so their anchors MOVED
- // byte-identical and the `schema.*` read set of each is unchanged; at
- // `2e818d0b5`, 2026-10-04, `ObjectMap.tsx`,
- // `ObjectTree.tsx` and `ObjectGantt.tsx` are byte-identical to `ab1879721`,
- // so every anchor held unmoved; at `ab1879721`, 2026-10-03, `ObjectMap.tsx` and
- // `ObjectTree.tsx` are byte-identical to `89cad75d5`; `ObjectGantt.tsx`
- // (+8/-0) gained one import line and, in its tooltip's `percent` row,
- // objectui#11475's scaling at the field definition's declared storage — a
- // field-definition read, not a node key — and was re-READ. The `schema.*`
- // read set of each is unchanged, so no declared key set moved and no read
- // point died. At `89cad75d5`, 2026-10-02, all three renderers
- // changed on the hop off `31971ff1e` and were re-READ: `ObjectMap.tsx`
- // (+11/-4) types its shadowed-flat-key read, objectui#11355, and now reads
- // `mapStyle` ahead of `map.style` on the declared block's path too,
- // objectui#11168 slice 3; `ObjectGantt.tsx` (+47/-10) types the same read
- // and formats its decimal and percent tooltip rows at the field's scale,
- // objectui#11254; `ObjectTree.tsx` (+8/-17) reads `navigation` typed,
- // without its cast, objectui#11168 slice 3. The `schema.*` read set of each
- // is unchanged, so no declared key set moved and no read point died. At
- // `31971ff1e`, 2026-10-01, `ObjectMap.tsx`, `ObjectGantt.tsx` and
- // `ObjectTree.tsx` were byte-identical to `e420df310`, so no declared key set
- // moved and no read point died. At `e420df310`,
- // 2026-09-30, all three renderers
- // changed and were re-READ: `ObjectMap.tsx` in one docblock, `ObjectGantt.tsx`
- // in objectui#11141's inclusive date-only end, and `ObjectTree.tsx`, whose
- // rung-1 call now passes the `view-data` arm this row declares and whose
- // host-data read stopped reading the authored `schema.data`, objectui#8348;
- // the `schema.*` read set of each is unchanged, so no declared key set moved
- // and no read point died. At `db11afd49`, 2026-09-29: `ObjectMap.tsx`
- // byte-identical to `dd3f7e1be`, `ObjectTree.tsx` changed in one comment line,
- // `ObjectGantt.tsx` in its date-only DST handling and citations; the `schema.*`
- // read set of each is unchanged, so no declared key set moved and no read point
- // died. At `dd3f7e1be`, 2026-09-28, all three renderers
- // changed and were re-READ — no declared key set moved and no read point
- // died; each block's `filter` is now resolved for context tokens before it
- // reaches `$filter`, objectui#10666, and the bare `map` registration is
- // retired, objectui#10393. At `f8a9d0fb0` the map was byte-identical to
- // `62597c588`; the gantt and tree renderers changed and were re-READ — no
- // declared key set moved, the gantt's new `search` / `searchableFields`
- // reads are recorded in its header as host-generated and undeclared, and
- // the tree lost its `filter.tree` stash read; at `62597c588` gantt and
- // tree were byte-identical to `87af769e9`, where all three were
- // re-READ 2026-09-22) — per-block citations in
- // each schema's header, including what each block reads and deliberately
- // does NOT declare, and what the hop from `53ded82bf` deleted rather than
- // moved.
+ // points (read points: `liveness/page.json`, row `regions`); what each
+ // block reads and deliberately does NOT declare is in each schema's header.
'object-map': ObjectMapPropsSchema,
'object-gantt': ObjectGanttPropsSchema,
'object-tree': ObjectTreePropsSchema,
@@ -11543,100 +9758,9 @@ export const ComponentPropsMap = {
// type union's open string arm, and with no row here the #5068 gate skipped
// it — so `object-timeline` was unjudged in both directions, a real key and
// a typo riding through alike. Key set measured from the renderer's read
- // points at objectui `b9814b334` (re-read there 2026-10-14:
- // every objectui file this record cites is byte-identical across the hop from
- // `1fb1ced36` (`git diff --quiet`), so every anchor held unmoved. At
- // `1fb1ced36`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `7578323a5` (`git diff --quiet`), so every anchor held unmoved. At
- // `7578323a5`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `9646e2ed2` (`git diff --quiet`), so every anchor held unmoved. At
- // `9646e2ed2`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `088e0f705` (`git diff --quiet`), so every anchor held unmoved. At
- // `088e0f705`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `e5311165a` (`git diff --quiet`), so every anchor held unmoved. At
- // `e5311165a`, re-read there 2026-10-12:
- // every objectui file this record cites is byte-identical across the hop from
- // `499799502` (`git diff --quiet`), so every anchor held unmoved. At
- // `499799502`, re-read there 2026-10-11:
- // every objectui file this record cites is byte-identical across the hop from
- // `0df67f237` (`git diff --quiet`), so every anchor held unmoved. At
- // `0df67f237`, re-read there 2026-10-11:
- // `index.tsx` is byte-identical to `20c6d351a` (`git diff --quiet`);
- // `ObjectTimeline.tsx` (+42/-20) and `renderer.tsx` (+28/-8) changed for
- // objectui#12104 (objectui `206505c34`: an explicit `groupByField` groups by
- // its display value) and were re-READ: every anchor held or moved with its
- // text byte-identical, the `schema.*` read set is unchanged (the same 19
- // names at both pins in `ObjectTimeline.tsx`, 5 in `renderer.tsx`), and no
- // declared key set moved. At `20c6d351a`, re-read there 2026-10-10:
- // `renderer.tsx` and `index.tsx` are byte-identical to `47b1f0bb7` (`git diff
- // --quiet`); `ObjectTimeline.tsx` changed (+15/-15, objectui#6152 round 14,
- // objectui `3fd862510`: the nested `timeline.dateField` alias rung retired,
- // with its entry in the refusal's key list and their comments) and was
- // re-READ: every anchor held or moved with its text byte-identical, the
- // `schema.*` read set is unchanged (the same 19 names at both pins), and no
- // declared key set moved. At `47b1f0bb7`, re-read there 2026-10-09:
- // every objectui file this record cites is byte-identical across the hop from
- // `f0268ad78` (`git diff --quiet`), so every anchor held unmoved. At
- // `f0268ad78`, re-read there 2026-10-09:
- // `renderer.tsx` is byte-identical to `a58626c88` (`git diff --quiet`);
- // `index.tsx` rewrote two input descriptions in place and `ObjectTimeline.tsx`
- // changed in three comments only (objectui#6152 round 12, the nested block's
- // type by reference to the spec slot), both re-READ: every anchor moved or held
- // with its text byte-identical, the `schema.*` read set is unchanged, and no
- // declared key set moved. At `a58626c88`, re-read there 2026-10-06:
- // `renderer.tsx` and `index.tsx` are byte-identical to `0abd4f9f8` (`git diff
- // --quiet`); `ObjectTimeline.tsx` changed for objectui#11675 and
- // objectui#11676 (the date buckets' locale week start and the "Earlier"
- // bucket) and was re-READ: every anchor moved with its text byte-identical,
- // the `schema.*` read set is unchanged, and no declared key set moved.
- // At `0abd4f9f8`, re-read there 2026-10-05:
- // every objectui file this record cites is byte-identical across the hop from
- // `9dfaca654` (`git diff --quiet`), so every anchor held unmoved).
- // At `9dfaca654`, re-measured there 2026-10-05 (`renderer.tsx`,
- // `ObjectTimeline.tsx` and `index.tsx` byte-identical to `2e818d0b5`, so
- // every anchor held unmoved and no declared key set moved; at `2e818d0b5`,
- // 2026-10-04, `renderer.tsx`,
- // `ObjectTimeline.tsx` and `index.tsx` byte-identical to `ab1879721`, so
- // every anchor held unmoved and no declared key set moved; at `ab1879721`,
- // 2026-10-03, `renderer.tsx`,
- // `ObjectTimeline.tsx` and `index.tsx` byte-identical to `89cad75d5`, so
- // every anchor held unmoved, the `schema.*` read set unchanged and no
- // declared key set moved. At `89cad75d5`, 2026-10-02: `renderer.tsx`
- // byte-identical to `31971ff1e`; `ObjectTimeline.tsx` changed in two comments only and
- // `index.tsx` for objectui#11168 slice 5 — one shared input list on both
- // registrations, publishing the ten further keys this row declares, with
- // `objectName` no longer required — both re-READ, the `schema.*` read set
- // unchanged, so no declared key set moved and no read point died; every
- // anchor moved or held with its text byte-identical, and two that had begun
- // a line early were re-pointed, as the schema's header records. At
- // `31971ff1e`, 2026-10-01:
- // `renderer.tsx` byte-identical
- // to `e420df310`; `ObjectTimeline.tsx` and `index.tsx` changed for
- // objectui#8654 — a typed `navigation` member read without its cast, and a
- // `navigation` input on both registrations — both re-READ, the `schema.*`
- // read set unchanged, since `navigation` was already read and is declared
- // on this row, and every anchor moved with its text byte-identical but the
- // one navigation read. At `e420df310`, 2026-09-30: `ObjectTimeline.tsx`
- // byte-identical to `db11afd49`; `index.tsx` gained `filter` / `sort` inputs,
- // objectui#8220, and `renderer.tsx` changed, objectui#11141, both re-READ,
- // the `schema.*` read set unchanged and every anchor moved with its text
- // byte-identical. At `db11afd49`, 2026-09-29: `ObjectTimeline.tsx` and
- // `index.tsx` byte-identical to `dd3f7e1be`; `renderer.tsx` changed and was
- // re-READ, its `schema.*` read set unchanged and its three anchors moved with
- // their text byte-identical. At `dd3f7e1be`, 2026-09-28, `index.tsx`
- // byte-identical to
- // `f8a9d0fb0`; `ObjectTimeline.tsx` and `renderer.tsx` changed and were
- // re-READ — no declared key set moved and no read point died, the `filter`
- // now resolved for context tokens before `$filter`, objectui#10666. At
- // `f8a9d0fb0`, `ObjectTimeline.tsx` and `index.tsx` were byte-identical to
- // `62597c588` and `87af769e9`, where it was re-READ 2026-09-22, and
- // `renderer.tsx`'s three anchors moved with their text
- // byte-identical); the schema's own header
- // carries the per-key citations and what it deliberately does NOT declare.
+ // points (read points: `liveness/page.json`, row `regions`); the schema's
+ // own header carries the per-key reading and what it deliberately does NOT
+ // declare.
'object-timeline': ObjectTimelinePropsSchema,
} as const;