fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) - #7179
Conversation
…#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
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 1 package(s): 106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 7 release-owned page(s) also reference the affected code. These are read-only:
|
Fixes #7133
Part of #7132
Sweep card: #7142. Direction-A citation repair only — every verdict stays
live, no schema, runtime or acceptance surface changes, andgit diff --statis exactly the three ledger files in the checklist below.Why
Part of #7132and notFixes: three of that member's six rows escalated under the card's own rule 5 and are now #7176. They are left byte-identical here, so merging this does not close #7132's work list. Flip the line toFixesif you would rather close the member and let #7176 carry the remainder — that is a one-line body edit and I did not want to make the call unilaterally.Measurement provenance
origin/main@3e8e669c0(the card audited at4ac12ef4, 12 commits behind;1dd780ffix(spec): fold FormViewSchema.groups into sections at the producer (#6926) #7128 had already editedview.jsonunder it)origin/main@11c1e71e866acb032688fc61fe711c7a5deda582(the card's5bfaabdeand fix(spec): fold FormViewSchema.groups into sections at the producer (#6926) #7128's7b3e048are both stale)objectui was read read-only at its
origin/mainafter an explicit fetch, viagit -C+git show origin/main:PATH/git grep origin/main— never a working tree, no branch, no objectui PR.Per-row checklist — 11 rows repaired
Each row: the citation that greps to zero, the measured replacement, and the line that does the reading.
packages/spec/liveness/view.json—props.list.children.*(#7132)hiddenFields— before:objectui: ObjectGrid.tsx (audit L15).(0 hits) → after:plugin-list/src/ListView.tsx:763seeds,:1491-1494applies.if (hiddenFields.size > 0) { ... return fieldName != null && !hiddenFields.has(fieldName); }— the grid receives an already-filteredcolumnsarray and never sees the key.fieldOrder— before: same dead citation (0 hits) → after:plugin-list/src/ListView.tsx:1499-1500.if (schema.fieldOrder && schema.fieldOrder.length > 0) { const orderMap = new Map(schema.fieldOrder.map((f, i) => [f, i]));— ordering happens in the same effective-fields memo.inlineEdit— before: same dead citation (0 hits) → after:plugin-list/src/ListView.tsx:791then:1559, applied atplugin-grid/src/ObjectGrid.tsx:2197,2204.editable: inlineEdit,at:1559, andrenderCellEditor: schema.editableat:2204. A one-hop rename — ObjectGrid never spellsinlineEdit, which is exactly why the old citation read as dead.packages/spec/liveness/view.json—props.form.children.*andprops.list.children.*(#7133)form.subforms— before:deriveMasterDetail.ts:338, LineItemsPanel.tsx:45(neither file mentions the key) → after:plugin-form/src/ObjectForm.tsx:175,197, applied atplugin-form/src/MasterDetailForm.tsx:315,240.details: (schema as any).subforms,atObjectForm.tsx:197, thenconst rawDetails = schema.details || [];atMasterDetailForm.tsx:315anddetails.map((d, i) =>at:240. ModalForm:736and DrawerForm:558take the same key through their own envelopes.list.sharing— before:ListView.test.tsx:2276→ after: production readerplugin-list/src/ListView.tsx:2544,2549, test re-pinned atplugin-list/src/__tests__/ListView.test.tsx:2428.{schema.sharing?.type && (at:2544. Line drift only, as the card predicted; the test survives with content intact, but it was the whole evidence before and is now the weaker half.packages/spec/liveness/field.json(#7133)precision— before:NumberField.tsx:16→ after:fields/src/widgets/CurrencyField.tsx:45,PercentField.tsx:13,fields/src/index.tsx:662,plugin-grid/src/useColumnSummary.ts:261.The cited file now says the opposite at
:17:// Step follows scale (decimal places), not precision (total digit count):and readsnumberField?.scale. The citation died to a deliberate fix, not a move.currencyConfig— before:packages/fields/src/index.tsx:469→ after:packages/i18n/src/currency.ts:32, applied atCurrencyField.tsx:45,51.field?.currencyConfig?.defaultCurrency ||insideresolveFieldCurrency. Line 469 is nowformatRelativeDays, a date-phrase helper — the resolver moved to@object-ui/i18nandfields/src/currency.ts:14only re-exports it, which is why the old line drifted onto unrelated code instead of vanishing.relatedList— before:RecordDetailView.tsx + utils/deriveRelatedLists.ts→ after:app-shell/src/utils/deriveRelatedLists.ts:131,138; RecordDetailView kept, relabelled as consumer of the derived list.if (fieldDef.relatedList === false) continue;at:131.relatedListTitle— before: same split citation → after:deriveRelatedLists.ts:140-141....(typeof fieldDef.relatedListTitle === 'string' && fieldDef.relatedListTitle ? { title: fieldDef.relatedListTitle }— everyrelatedList*occurrence in RecordDetailView is now a comment (:1013, :1847, :1857, :1864).packages/spec/liveness/page.json(#7133)template— before:page.tsx + containers.tsx→ after: thecontainers.tsxhalf pruned,components/src/renderers/layout/page.tsx:397-398kept.if (!schema.template) return null; return TEMPLATE_REGISTRY[schema.template] || null;. The containers.tsx half is a different sense of the word —:240-248is a{field.path}string-interpolation helper.regions— before: same split citation → after:page.tsx:290,197-204,211,157.if (schema.regions && schema.regions.length > 0) {at:290. containers.tsx namesregionsonly in a comment (:798).Escalated, NOT re-cited — 3 rows → #7176
Card rule 5: a "real reader" that is pass-through-only escalates to a verdict question and is split out rather than silently re-cited.
stripedandborderedwere the known instances;virtualScrollis a third, which #7132's table had listed as repairable.For all three the chain is bridge copy → ListView copy → ObjectView copy →
ObjectGrid.tsx, which has 0 occurrences. ObjectGrid builds an explicit prop object for DataTable (:2180-2270) with no...schemaspread, and DataTable reads neither key. Full traces, near-misses and the three dispositions are in #7176. These three rows are byte-identical in this PR.Verification
packages/spechas no workspace dependencies, so the build closure is empty (--filter '@objectstack/spec^...' buildmatched no projects). All runs serialized under the shared verification lock.check:liveness— green. The arithmetic is the real check: repo-local declared paths stayed at 345/345 resolved (no objectui path leaked into the local bucket), foreign went 111 to 130,verifiedAt279 to 290 andcross-reposcope 6 to 17 — both deltas exactly +11, matching the 11 repaired rows.check:empty-state,check:variant-docs,check:strictness-ledger— green (same workflow).pnpm --filter @objectstack/spec test— 359 files, 9381 tests passed, includingverification.test.ts("everyverifiedAtin packages/spec/liveness/*.json parses").pnpm --filter @objectstack/spec typecheck— green.node scripts/check-nul-bytes.mjs— OK, 6592 files; plus a direct control-byte self-scan of the three edited files, clean.Reverse verification — predicted red, went red
The gate cannot falsify a foreign citation's content, so the meaningful reverse test is whether it reads these strings at all. I dropped one
objectui:realm marker from the newhiddenFieldsevidence and predicted the local bucket would gain an unresolvable path:Exactly one cause, naming the row I touched. That proves the new evidence strings are machine-read rather than inert prose, and that the
objectui:marker is what keeps the 19 new foreign paths green. Restored withgit checkout HEAD -- ...(nevergit stash) and re-confirmed green.Notes on convention
view.jsonandfield.jsonuse the fix(spec): fold FormViewSchema.groups into sections at the producer (#6926) #7128 house style:verifiedAt+evidenceScope: "cross-repo"+ a structuredevidencestring + a narrativenote.field.jsonalready cited these rows throughevidencewith anobjectui:prefix, so this matches both.page.jsonkeeps its citation innoteand gains onlyverifiedAt+evidenceScope, because that file's own_notedeclares the prose-in-note convention for objectui readers. Addingevidencethere would have contradicted a sentence in the same file — new prose rot of exactly the class this sweep repairs — and the gate treats foreign paths identically either way. Flagged rather than acted on; happy to switch if you would rather the three files be uniform.Build Docsruns on this PR is the free proxy for whether the text reachescontent/docs/references/**; the label call is the PM's per the claim comment.Generated by Claude Code