docs(spec): liveness-ledger follow-through — colorVariant flips live, Field.widget note corrected (#7069) - #7080
Conversation
… 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
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 2 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:
|
…ger-followthrough-sweep
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[].colorVariantflipslive, PR #5255's pinned advisory contrast released ✅packages/spec/liveness/dashboard.json→widgets.colorVariantstatus: "dead",authorWarn: true,authorHinttelling authors to move the key underoptions,verifiedAt: 2026-08-03status: "live", noauthorWarn/authorHint,verifiedAt: 2026-08-09,evidenceScope: "cross-repo",evidencepinned atobjectui @09987b68, note recording the correction and keeping the 2026-08-03 measurement as historypackages/lint/src/lint-liveness-properties.test.ts→it('warns on \colorVariant`…')`optionswidgets.colorVariantno longer warns, with the objectui#3799 lineage — the #4651 area-gate dispositionit('fans out over EVERY widget…')colorVariantonwidgets[1]it('the retirement silenced only those four — \colorVariant` still warns beside them')`it('the dashboard silence is a real verdict, not a lint that stopped loading ledgers')— authors all five once-warned widget keys andobject.externalSharingModelin one call, asserting one warning and not sixpackages/lint/src/lint-liveness-properties.ts→TYPE_COLLECTIONSdocblockwebhook/email_templatealready sit inpackages/spec/src/conversions/registry.ts→dashboardWidgetActionAriaRemoveddocblockcolorVariant… its disposition is unresolved … Retiring it later is a new entry"packages/spec/liveness/README.md→ dashboard count row33 / 0 / 834 / 0 / 7, regenerated with the README's own snippet, + a Notes sentencePremise re-verified on this branch's base, not inherited.
.objectui-shaon2c7e62dreads09987b680d53801c79f67d969b14e9bb732b8a22; against a read-only objectui checkout at that exact SHA,git merge-base --is-ancestor c4c0ac897 09987b68→ true (c4c0ac897= PR objectui#3799's merge, 2026-08-08T16:37Z). The reader itself ispackages/plugin-dashboard/src/DatasetWidget.tsx:641—metricAccentTextClass(widget?.colorVariant)— resolving through the eight-tokenVARIANT_TEXT_CLASSEStable atcolorVariants.ts:44-53, the same tableMetricWidgetuses. 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.widgetnote names the widget that is actually stamped ✅packages/spec/liveness/field.json→widgetnotesys_permission_set (capability-multiselect). Degrades to thetyperenderer …"sys_permission_set (permission-facet-link)…", + aCORRECTED 2026-08-09paragraph,verifiedAt,evidenceScope: "cross-repo", andevidencepinned atobjectui @09987b68Verified read-only against objectui at pin
09987b68:permission-facet-linkis registered on the live pathpackages/plugin-detail/src/index.tsx:563—ComponentRegistry.register('permission-facet-link', withFieldCarrier(PermissionFacetLink), { namespace: 'field' })— exactly the anchor the card's 2026-08-09 comment measuredpackages/data-objectstack/src/index.ts:2492-2501— all sixsys_permission_setfacetsObjectFormthreads itpackages/plugin-form/src/ObjectForm.tsx:585-590, whose own comment namespermission-facet-linkcapability-multiselectis gonepackages/*/srcapart from tombstone comments and thecapability-multiselect-retiredpin test (objectui#3308 / PR objectui#3793)packages/fields/src/index.tsx:2203-2205—object-ref,filter-condition,recipient-pickerall still infieldWidgetMapThe
liveverdict is unchanged and was never at risk —widgetis live on thesys_sharing_ruletrio 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 --statmaps 1:1 onto the checklistChangeset:
@objectstack/specpatch +@objectstack/lintpatch, matching the merged analogaction-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/mainconfirms.Gates run locally (all green)
check:livenesscheck:empty-state·check:variant-docs·check:strictness-ledgerspec-liveness-check.yml)check:generatedcheck:spec-changes,check:upgrade-guide,check:authorable-surface,check:docs,check:api-surface)check:adr-0087-registration --base origin/mainpnpm lint(ESLint)check:nul-bytes·check:role-word·check:adr-anchors·check:doc-authoring·check:docs-audit-scope·check:changeset-gate-self-tests@objectstack/spectsc --noEmit·@objectstack/lint typecheck@objectstack/spectests@objectstack/linttestsFindings filed
getNested) has no warned subject left, so it is now untested #7079 (unassigned,finding) —widgets.colorVariantwas the only warned ledger entry under an array container, so it was the only subjectgetNested's array fan-out ever had. Flipping it live leaves that behaviour untested. The assertion is removed rather than rewritten into a silence check that would pass on a lint which never walks pastwidgets[0], and the test file's comment points at the issue.Fixes #6774
Fixes #6773
Generated by Claude Code