Skip to content

docs(spec): liveness-ledger follow-through — colorVariant flips live, Field.widget note corrected (#7069) - #7080

Merged
os-zhuang merged 2 commits into
mainfrom
claude/issue-7069-ledger-followthrough-sweep
Aug 9, 2026
Merged

docs(spec): liveness-ledger follow-through — colorVariant flips live, Field.widget note corrected (#7069)#7080
os-zhuang merged 2 commits into
mainfrom
claude/issue-7069-ledger-followthrough-sweep

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Sweep card #7069 — 2-item liveness-ledger follow-through sweep III. Both members completed; nothing dropped.

Both are liveness-ledger records that stopped being answerable to reality after objectui implementations landed — corrections to the evidence base, not new judgments. Zero schema acceptance changes: the legal-metadata set is byte-identical before and after, and every existing schema test passes unchanged. The one test-expectation change is member 1's released advisory contrast, called out in its row.

Per-item checklist

1 — #6774 · dashboard.widgets[].colorVariant flips live, PR #5255's pinned advisory contrast released ✅

落点 before after
packages/spec/liveness/dashboard.jsonwidgets.colorVariant status: "dead", authorWarn: true, authorHint telling authors to move the key under options, verifiedAt: 2026-08-03 status: "live", no authorWarn/authorHint, verifiedAt: 2026-08-09, evidenceScope: "cross-repo", evidence pinned at objectui @09987b68, note recording the correction and keeping the 2026-08-03 measurement as history
packages/lint/src/lint-liveness-properties.test.tsit('warns on \colorVariant`…')` asserts the advisory fires and its hint names options silence pin: asserts widgets.colorVariant no longer warns, with the objectui#3799 lineage — the #4651 area-gate disposition
same file → it('fans out over EVERY widget…') fan-out proven via colorVariant on widgets[1] removed; its only possible subject is gone (see Findings filed)
same file → it('the retirement silenced only those four — \colorVariant` still warns beside them')` the #5255 positive contrast — exactly one warning survives the #5010 retirement replaced by it('the dashboard silence is a real verdict, not a lint that stopped loading ledgers') — authors all five once-warned widget keys and object.externalSharingModel in one call, asserting one warning and not six
packages/lint/src/lint-liveness-properties.tsTYPE_COLLECTIONS docblock "dashboard joins the list the moment its ledger first warns on anything" + the dashboard warn set is now empty and the type stays listed — the resolved state webhook/email_template already sit in
packages/spec/src/conversions/registry.tsdashboardWidgetActionAriaRemoved docblock "colorVariant … its disposition is unresolved … Retiring it later is a new entry" disposition settled the other way: #5010 ruling B answered enforce, objectui#3799 implemented, nothing owed — "not being removed", not "not removed yet"
packages/spec/liveness/README.md → dashboard count row 33 / 0 / 8 34 / 0 / 7, regenerated with the README's own snippet, + a Notes sentence

Premise re-verified on this branch's base, not inherited. .objectui-sha on 2c7e62d reads 09987b680d53801c79f67d969b14e9bb732b8a22; against a read-only objectui checkout at that exact SHA, git merge-base --is-ancestor c4c0ac897 09987b68true (c4c0ac897 = PR objectui#3799's merge, 2026-08-08T16:37Z). The reader itself is packages/plugin-dashboard/src/DatasetWidget.tsx:641metricAccentTextClass(widget?.colorVariant) — resolving through the eight-token VARIANT_TEXT_CLASSES table at colorVariants.ts:44-53, the same table MetricWidget uses. So the advisory's premise (no renderer reads the key) no longer holds, and the pinned contrast asserting exactly-one-surviving-warning is released with it.

2 — #6773 · Field.widget note names the widget that is actually stamped ✅

落点 before after
packages/spec/liveness/field.jsonwidget note "… and sys_permission_set (capability-multiselect). Degrades to the type renderer …" "… and sys_permission_set (permission-facet-link) …", + a CORRECTED 2026-08-09 paragraph, verifiedAt, evidenceScope: "cross-repo", and evidence pinned at objectui @09987b68

Verified read-only against objectui at pin 09987b68:

Claim Reading
permission-facet-link is registered on the live path packages/plugin-detail/src/index.tsx:563ComponentRegistry.register('permission-facet-link', withFieldCarrier(PermissionFacetLink), { namespace: 'field' }) — exactly the anchor the card's 2026-08-09 comment measured
it is what ADR-0056 P1 stamps packages/data-objectstack/src/index.ts:2492-2501 — all six sys_permission_set facets
ObjectForm threads it packages/plugin-form/src/ObjectForm.tsx:585-590, whose own comment names permission-facet-link
capability-multiselect is gone absent from packages/*/src apart from tombstone comments and the capability-multiselect-retired pin test (objectui#3308 / PR objectui#3793)
the other three names still resolve packages/fields/src/index.tsx:2203-2205object-ref, filter-condition, recipient-picker all still in fieldWidgetMap

The live verdict is unchanged and was never at risk — widget is live on the sys_sharing_rule trio alone. What was wrong was one worked example: false evidence in the base the next enforce-or-remove audit reads (the #5175 lesson).

Diff — git diff --stat maps 1:1 onto the checklist

 .changeset/liveness-ledger-followthrough-colorvariant-field-widget.md | 78 ++++++
 packages/lint/src/lint-liveness-properties.test.ts                    | 85 ++++----
 packages/lint/src/lint-liveness-properties.ts                         |  7 +
 packages/spec/liveness/README.md                                      |  2 +-
 packages/spec/liveness/dashboard.json                                 | 10 +--
 packages/spec/liveness/field.json                                     |  5 +-
 packages/spec/src/conversions/registry.ts                             | 14 +-

Changeset: @objectstack/spec patch + @objectstack/lint patch, matching the merged analog action-undoable-liveness-corrected.md (a ledger reclassification that likewise silences the author-side advisory). Not declared-breaking, so no ADR-0087 disposition marker is owed — check:adr-0087-registration --base origin/main confirms.

Gates run locally (all green)

Gate Result
check:liveness ✓ every governed property classified; 344/344 local evidence paths resolve
check:empty-state · check:variant-docs · check:strictness-ledger ✓ (the rest of spec-liveness-check.yml)
check:generated ✓ all 10 artifacts up to date (incl. check:spec-changes, check:upgrade-guide, check:authorable-surface, check:docs, check:api-surface)
check:adr-0087-registration --base origin/main ✓ nothing owed
pnpm lint (ESLint)
check:nul-bytes · check:role-word · check:adr-anchors · check:doc-authoring · check:docs-audit-scope · check:changeset-gate-self-tests
@objectstack/spec tsc --noEmit · @objectstack/lint typecheck
@objectstack/spec tests ✓ 9235 / 354 files
@objectstack/lint tests ✓ 1770 / 68 files

Findings filed

Fixes #6774
Fixes #6773


Generated by Claude Code

… Field.widget note corrected (#7069)

Two ledger records that stopped being answerable to reality after objectui
implementations landed. Corrections to the evidence base, not new judgments:
the legal-metadata set is byte-identical before and after, and no schema
acceptance test changed.

#6774 — dashboard.widgets[].colorVariant: dead -> live. #5010 ruling B chose
enforce over remove, and objectui#3359 / PR objectui#3799 (merge c4c0ac897)
landed the reader; the .objectui-sha pin 09987b68 contains that merge
(re-verified with `git merge-base --is-ancestor` on this branch's base).
Dropping authorWarn/authorHint releases PR #5255's pinned
"exactly-one-warning colorVariant" contrast on the CLI advisory, whose premise
was that no renderer reads the key. The dashboard warn set is now empty, so the
silence pins gained the anti-vacuity guard #4651's area gates use, and the
conversions-registry docblock that recorded the key's disposition as unresolved
is corrected to settled.

#6773 — field.widget's note offered `sys_permission_set
(capability-multiselect)` as a worked example. That half was never true: ADR-0056
P1 stamps `permission-facet-link` on all six facets, `field:capability-multiselect`
was registered only by the docs-site-only registerFields(), and objectui#3308 /
PR objectui#3793 retired the name. Corrected, with the other three widget names
re-checked in fieldWidgetMap at the same pin. The `live` verdict is unchanged.

Fixes #6774
Fixes #6773

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXp63tpgDy1RUmMYoxkRYK
@vercel

vercel Bot commented Aug 9, 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 9, 2026 3:04pm

Request Review

@github-actions github-actions Bot added the size/m label Aug 9, 2026
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/lint, @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 @objectstack/lint, 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/lint, @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/lint, @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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

2 participants