Skip to content

fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133) - #7179

Merged
os-help merged 1 commit into
mainfrom
claude/issue-7142-liveness-citation-repair
Aug 10, 2026
Merged

fix(spec): re-cite measured readers for 11 stale liveness-ledger rows (#7132) (#7133)#7179
os-help merged 1 commit into
mainfrom
claude/issue-7142-liveness-citation-repair

Conversation

@os-help

@os-help os-help commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Fixes #7133
Part of #7132

Sweep card: #7142. Direction-A citation repair only — every verdict stays live, no schema, runtime or acceptance surface changes, and git diff --stat is exactly the three ledger files in the checklist below.

Why Part of #7132 and not Fixes: 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 to Fixes if 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

objectui was read read-only at its origin/main after an explicit fetch, via git -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.jsonprops.list.children.* (#7132)

  • hiddenFields — before: objectui: ObjectGrid.tsx (audit L15). (0 hits) → after: plugin-list/src/ListView.tsx:763 seeds, :1491-1494 applies.
    if (hiddenFields.size > 0) { ... return fieldName != null && !hiddenFields.has(fieldName); } — the grid receives an already-filtered columns array 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:791 then :1559, applied at plugin-grid/src/ObjectGrid.tsx:2197,2204.
    editable: inlineEdit, at :1559, and renderCellEditor: schema.editable at :2204. A one-hop rename — ObjectGrid never spells inlineEdit, which is exactly why the old citation read as dead.

packages/spec/liveness/view.jsonprops.form.children.* and props.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 at plugin-form/src/MasterDetailForm.tsx:315,240.
    details: (schema as any).subforms, at ObjectForm.tsx:197, then const rawDetails = schema.details || []; at MasterDetailForm.tsx:315 and details.map((d, i) => at :240. ModalForm :736 and DrawerForm :558 take the same key through their own envelopes.
  • list.sharing — before: ListView.test.tsx:2276 → after: production reader plugin-list/src/ListView.tsx:2544,2549, test re-pinned at plugin-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 reads numberField?.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 at CurrencyField.tsx:45,51.
    field?.currencyConfig?.defaultCurrency || inside resolveFieldCurrency. Line 469 is now formatRelativeDays, a date-phrase helper — the resolver moved to @object-ui/i18n and fields/src/currency.ts:14 only 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 } — every relatedList* occurrence in RecordDetailView is now a comment (:1013, :1847, :1857, :1864).

packages/spec/liveness/page.json (#7133)

  • template — before: page.tsx + containers.tsx → after: the containers.tsx half pruned, components/src/renderers/layout/page.tsx:397-398 kept.
    if (!schema.template) return null; return TEMPLATE_REGISTRY[schema.template] || null;. The containers.tsx half is a different sense of the word:240-248 is 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 names regions only 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. striped and bordered were the known instances; virtualScroll is 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 ...schema spread, 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/spec has no workspace dependencies, so the build closure is empty (--filter '@objectstack/spec^...' build matched 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, verifiedAt 279 to 290 and cross-repo scope 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 test359 files, 9381 tests passed, including verification.test.ts ("every verifiedAt in 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 new hiddenFields evidence and predicted the local bucket would gain an unresolvable path:

evidence paths: 346 repo-local path(s) declared, 345 resolved, 1 MISSING; 129 attributed to another repo
✗ 1 'live' entr(ies) cite a file that is missing from THIS repo:
    view/list.hiddenFields → packages/plugin-list/src/ListView.tsx

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 with git checkout HEAD -- ... (never git stash) and re-confirmed green.

Notes on convention

  • view.json and field.json use the fix(spec): fold FormViewSchema.groups into sections at the producer (#6926) #7128 house style: verifiedAt + evidenceScope: "cross-repo" + a structured evidence string + a narrative note. field.json already cited these rows through evidence with an objectui: prefix, so this matches both.
  • page.json keeps its citation in note and gains only verifiedAt + evidenceScope, because that file's own _note declares the prose-in-note convention for objectui readers. Adding evidence there 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.
  • No changeset: this is ledger prose with no user-visible surface. Whether Build Docs runs on this PR is the free proxy for whether the text reaches content/docs/references/**; the label call is the PM's per the claim comment.

Generated by Claude Code

…#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
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 1:56am

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/system-context.mdx (via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-help os-help added skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/s labels Aug 10, 2026 — with Claude
@os-help
os-help marked this pull request as ready for review August 10, 2026 02:12
@os-help
os-help added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit ba6370c Aug 10, 2026
33 checks passed
@os-help
os-help deleted the claude/issue-7142-liveness-citation-repair branch August 10, 2026 02:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants