Skip to content

Commit 0f1e68c

Browse files
committed
fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133)
Direction-A citation repair only: every verdict stays `live` and no schema, runtime or acceptance surface changes. Each re-citation was measured at objectui origin/main @11c1e71e at implementation time, with the reading line quoted in the row's note. Three #7132 rows (striped / bordered / virtualScroll) are deliberately NOT re-cited: every measured read of them is a pass-through copy and no renderer applies them, which is the sweep card's escalation shape — they move to a verdict-question card rather than being silently re-cited. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016R9de1FqP7NvwKvqXi92Gh
1 parent 3e8e669 commit 0f1e68c

3 files changed

Lines changed: 42 additions & 14 deletions

File tree

packages/spec/liveness/field.json

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,10 @@
157157
},
158158
"precision": {
159159
"status": "live",
160-
"note": "CAVEAT — UI display formatting only; DDL never sizes (maps to float). (NumberField.tsx:16)."
160+
"verifiedAt": "2026-08-10",
161+
"evidenceScope": "cross-repo",
162+
"evidence": "objectui: packages/fields/src/widgets/CurrencyField.tsx:45 reads field.precision and applies it at :51 as the Intl min/max fraction digits, at :60 to round on blur and at :90 as the input step; objectui: packages/fields/src/widgets/PercentField.tsx:13 applies it at :31 and derives the slider step from it at :62 and :75; objectui: packages/fields/src/index.tsx:662 applies it at :673 when formatting a percent cell; objectui: packages/plugin-grid/src/useColumnSummary.ts:261 uses it as the decimal count for a column summary — measured objectui @11c1e71e",
163+
"note": "RE-CITED 2026-08-10 (#7133/#7142): the old pointer was 'NumberField.tsx:16', and that file now states the OPPOSITE in its own comment at :17 — 'Step follows `scale` (decimal places), not `precision` (total digit count)' — reading `numberField?.scale` and never `precision`. The decimal cell formatter made the same correction (packages/fields/src/index.tsx:611-616: reading `precision` there had padded a decimal(10,0) value out to '1.0000000000'). So the citation died to a deliberate fix, not to a move, and the verdict still holds elsewhere: currency and percent are where `precision` is applied. CAVEAT retained — UI display formatting only; DDL never sizes (maps to float)."
161164
},
162165
"scale": {
163166
"status": "live",
@@ -223,8 +226,10 @@
223226
},
224227
"currencyConfig": {
225228
"status": "live",
226-
"evidence": "objectui: packages/fields/src/index.tsx:469 reads currencyConfig.defaultCurrency",
227-
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
229+
"verifiedAt": "2026-08-10",
230+
"evidenceScope": "cross-repo",
231+
"evidence": "objectui: packages/i18n/src/currency.ts:32 reads field.currencyConfig.defaultCurrency as the second step of resolveFieldCurrency's ADR-0053 precedence chain; objectui: packages/fields/src/widgets/CurrencyField.tsx:45 calls resolveFieldCurrency and applies the resolved code at :51 through formatAmount, which passes it to Intl.NumberFormat — measured objectui @11c1e71e",
232+
"note": "RE-CITED 2026-08-10 (#7133/#7142): the old pointer 'packages/fields/src/index.tsx:469' now lands in formatRelativeDays, a date-phrase helper with no currency involvement — the resolver moved to @object-ui/i18n and packages/fields/src/currency.ts:14 only re-exports it, which is why the old line drifted onto unrelated code rather than disappearing. Verdict unchanged: LIVE, and now cited at both the reader that consumes the key and the widget that applies the resolved currency."
228233
},
229234
"dimensions": {
230235
"status": "live",
@@ -247,13 +252,17 @@
247252
},
248253
"relatedList": {
249254
"status": "live",
250-
"evidence": "objectui: packages/app-shell/src/views/RecordDetailView.tsx + utils/deriveRelatedLists.ts",
251-
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
255+
"verifiedAt": "2026-08-10",
256+
"evidenceScope": "cross-repo",
257+
"evidence": "objectui: packages/app-shell/src/utils/deriveRelatedLists.ts:131 skips the FK entirely when relatedList is false and :138 marks the derived list isPrimary when it is 'primary'; objectui: packages/app-shell/src/views/RecordDetailView.tsx:1037 calls deriveRelatedLists and renders what it returns, consuming the derived structure rather than the key — measured objectui @11c1e71e",
258+
"note": "RE-CITED 2026-08-10 (#7133/#7142): the old split citation's RecordDetailView half went to prose — every `relatedList` occurrence in that file is now a comment (:1013, :1847, :1857, :1864). The working half is deriveRelatedLists, which is what branches on the value. RecordDetailView is kept, explicitly labelled as the consumer of the DERIVED list, so the next re-audit does not read its zero key-hits as rot a second time. Verdict unchanged: LIVE."
252259
},
253260
"relatedListTitle": {
254261
"status": "live",
255-
"evidence": "objectui: packages/app-shell/src/views/RecordDetailView.tsx + utils/deriveRelatedLists.ts",
256-
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
262+
"verifiedAt": "2026-08-10",
263+
"evidenceScope": "cross-repo",
264+
"evidence": "objectui: packages/app-shell/src/utils/deriveRelatedLists.ts:140-141 uses relatedListTitle as the related-list title when it is a non-empty string, falling back to a label derived from the child object; objectui: packages/app-shell/src/views/RecordDetailView.tsx:1037 renders the derived list — measured objectui @11c1e71e",
265+
"note": "RE-CITED 2026-08-10 (#7133/#7142): same repair as `relatedList` — the RecordDetailView half of the old split citation is comments only (:1847 describes the rule it no longer implements), while deriveRelatedLists is the reader that applies the value. Verdict unchanged: LIVE."
257266
},
258267
"relatedListColumns": {
259268
"status": "live",

packages/spec/liveness/page.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@
4040
},
4141
"template": {
4242
"status": "live",
43-
"note": "layout template (e.g. header-sidebar-main) selects the region arrangement — objectui components/renderers/layout/page.tsx + containers.tsx."
43+
"verifiedAt": "2026-08-10",
44+
"evidenceScope": "cross-repo",
45+
"note": "layout template (e.g. header-sidebar-main) selects the region arrangement — objectui components/src/renderers/layout/page.tsx:397-398 resolves schema.template through TEMPLATE_REGISTRY (header-sidebar-main / three-column / dashboard, defined at :285-386) and :531 selects that layout variant for the render. RE-CITED 2026-08-10 (#7133/#7142): the old citation was split across 'page.tsx + containers.tsx' and the containers.tsx half is dead for this key — its only `template` occurrences (:240-248) are a `{field.path}` string-interpolation helper, an unrelated sense of the word. Verdict unchanged: LIVE."
4446
},
4547
"regions": {
4648
"status": "live",
47-
"note": "region → component tree rendering (header/main/sidebar/footer) — objectui components/renderers/layout/page.tsx + containers.tsx."
49+
"verifiedAt": "2026-08-10",
50+
"evidenceScope": "cross-repo",
51+
"note": "region → component tree rendering (header/main/sidebar/footer) — objectui 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. 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."
4852
},
4953
"isDefault": {
5054
"status": "live",

packages/spec/liveness/view.json

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,10 @@
119119
},
120120
"sharing": {
121121
"status": "live",
122-
"note": "objectui: ListView sharing tooltip incl. lockedBy (ListView.test.tsx:2276 'should display lockedBy in sharing tooltip when set'). Supersedes the audit's 'sharing.lockedBy dead' line."
122+
"verifiedAt": "2026-08-10",
123+
"evidenceScope": "cross-repo",
124+
"evidence": "objectui: packages/plugin-list/src/ListView.tsx:2544 gates the toolbar sharing badge on schema.sharing.type, :2549 renders its tooltip from the same value and :2573 counts it when laying out the toolbar's left side; objectui: packages/plugin-list/src/__tests__/ListView.test.tsx:2428 pins the lockedBy tooltip — measured objectui @11c1e71e",
125+
"note": "RE-CITED 2026-08-10 (#7133/#7142): the old citation was the TEST ALONE, at ListView.test.tsx:2276. The test survives with its content intact — it is now packages/plugin-list/src/__tests__/ListView.test.tsx:2428, 'should display lockedBy in sharing tooltip when set' — so this was line drift, not deletion. A test is the weaker half of a liveness claim, so the production reader is cited first and the test kept as the pin. Verdict unchanged: LIVE. Supersedes the 2026-06 audit's 'sharing.lockedBy dead' line."
123126
},
124127
"rowHeight": {
125128
"status": "live",
@@ -135,11 +138,17 @@
135138
},
136139
"hiddenFields": {
137140
"status": "live",
138-
"note": "objectui: ObjectGrid.tsx (audit L15)."
141+
"verifiedAt": "2026-08-10",
142+
"evidenceScope": "cross-repo",
143+
"evidence": "objectui: packages/react/src/spec-bridge/bridges/list-view.ts:123 copies the authored key onto the list node; objectui: packages/plugin-list/src/ListView.tsx:763 seeds the hidden-field set from schema.hiddenFields and :1491-1494 filters those names out of the effective column set, with :1509 listing it as a memo dependency — measured objectui @11c1e71e",
144+
"note": "RE-CITED 2026-08-10 (#7132/#7142): the previous citation was 'ObjectGrid.tsx (audit L15)', which has ZERO occurrences of hiddenFields at objectui @11c1e71e. The zero belongs to the key, not the scanner — the same substring instrument returns 2-31 hits for the nine sibling keys still cited to that file. The applying reader is ListView's effective-fields memo: the grid is handed an already-filtered `columns` array and never sees the key."
139145
},
140146
"fieldOrder": {
141147
"status": "live",
142-
"note": "objectui: ObjectGrid.tsx (audit L15)."
148+
"verifiedAt": "2026-08-10",
149+
"evidenceScope": "cross-repo",
150+
"evidence": "objectui: packages/react/src/spec-bridge/bridges/list-view.ts:124 copies the authored key onto the list node; objectui: packages/plugin-list/src/ListView.tsx:1499-1500 builds an order map from schema.fieldOrder and reorders the effective column set by it, with :1509 listing it as a memo dependency — measured objectui @11c1e71e",
151+
"note": "RE-CITED 2026-08-10 (#7132/#7142): the previous 'ObjectGrid.tsx (audit L15)' citation greps to zero at objectui @11c1e71e. Column ordering is applied in the same ListView effective-fields memo as hiddenFields, before the grid is handed its `columns` array."
143152
},
144153
"rowActions": {
145154
"status": "live",
@@ -164,7 +173,10 @@
164173
},
165174
"inlineEdit": {
166175
"status": "live",
167-
"note": "objectui: ObjectGrid.tsx (audit L15)."
176+
"verifiedAt": "2026-08-10",
177+
"evidenceScope": "cross-repo",
178+
"evidence": "objectui: packages/plugin-list/src/ListView.tsx:791-794 seeds inline-edit state from schema.inlineEdit and :1559 forwards it to the grid node under the renamed key `editable`; objectui: packages/plugin-grid/src/ObjectGrid.tsx:2197 passes editable down to the data-table and :2204 mounts renderCellEditor only when it is set, with :2194 gating the save/cancel action column — measured objectui @11c1e71e",
179+
"note": "RE-CITED 2026-08-10 (#7132/#7142): the previous 'ObjectGrid.tsx (audit L15)' citation greps to zero because of a ONE-HOP RENAME, not because the key is inert — ObjectGrid never spells `inlineEdit`, it reads `editable`, which is what ListView renames the key to at :1559. The value is applied (no cell editor is mounted without it); only the spelling changes at the boundary. That rename is exactly the instrument blindness that made the old citation read as dead."
168180
},
169181
"exportOptions": {
170182
"status": "live",
@@ -300,7 +312,10 @@
300312
},
301313
"subforms": {
302314
"status": "live",
303-
"note": "objectui: deriveMasterDetail.ts:338, LineItemsPanel.tsx:45 — master-detail fully wired (audit L17)."
315+
"verifiedAt": "2026-08-10",
316+
"evidenceScope": "cross-repo",
317+
"evidence": "objectui: packages/plugin-form/src/ObjectForm.tsx:175 branches on schema.subforms and :197 hands it to MasterDetailForm as `details`; objectui: packages/plugin-form/src/MasterDetailForm.tsx:315 reads schema.details and :240 renders one panel per entry, with :227 summing their amount fields; objectui: packages/plugin-form/src/ModalForm.tsx:736 and packages/plugin-form/src/DrawerForm.tsx:558 take the same key through their own envelopes (ModalForm applies at :756/:786, DrawerForm at :570) — measured objectui @11c1e71e",
318+
"note": "RE-CITED 2026-08-10 (#7133/#7142): the old citation named deriveMasterDetail.ts:338 and LineItemsPanel.tsx:45, and neither file mentions `subforms` at objectui @11c1e71e. deriveMasterDetail DERIVES master-detail panels from relationship metadata — its output is merged with the authored key one level up, in app-shell MetadataProvider.tsx:304-307 — and LineItemsPanel.tsx:41-55 is the per-panel schema, one hop past the rename to `details`. The form renderers are the readers that branch on the authored key. Verdict unchanged: LIVE, master-detail fully wired (audit L17)."
304319
},
305320
"sharing": {
306321
"status": "live",

0 commit comments

Comments
 (0)