You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(spec,cli): enroll view in the liveness ledger (#2998 Track B) (#3046)
Adds 'view' to the GOVERNED set of the spec property-liveness gate and
authors packages/spec/liveness/view.json — closing the rollout gap that
let the objectui#1763/#2545 renderer/spec key-drift class survive
undetected (the systemic cause named in #2998).
- view.json classifies all 83 walkable properties: `list`/`form` drilled
one level via children; `listViews`/`formViews` covered at top level
(same inner shapes as list/form). Tally: 76 live, 2 experimental
(form.buttons/form.defaults — #2998 Track A awaiting objectui#2545),
5 dead (list.responsive, list.performance, form.data, form.defaultSort,
form.aria), misleading dead props authorWarn'd with corrective hints.
- Seeded from docs/audits/2026-06-viewschema-property-liveness.md and
re-verified against objectui HEAD (fb35e48): four audit-era DEAD
findings had since gone live and are classified from current reads —
form.submitBehavior, list.sharing.lockedBy, list-path ViewData
providers, and the post-ADR-0021 list.chart dataset shape (the audit's
"chart renderers never migrated" headline is resolved; the legacy-key
reads are only the back-compat fallback).
- CLI compile-time liveness lint gains view coverage: TYPE_COLLECTIONS
maps the stack `views` collection, containers labelled by `object`
(views have no `name`). +3 tests (17/17 green).
- liveness/README.md: 13 governed types, view row, form-surface proof
class note updated; minor changeset for @objectstack/spec + cli.
Verification: check:liveness green (0 UNCLASSIFIED, no new stale-evidence
warnings); lint-liveness-properties tests 17/17.
Claude-Session: https://claude.ai/code/session_013Ue47V8zZ5QhcYMPiRQDA7
Co-authored-by: Claude <noreply@anthropic.com>
| Form layout/section/widget | ⛔ pending | — | none yet (form surface not yet governed) |
83
+
| Form layout/section/widget | ⛔ pending | — | none yet (`view` is governed as of #2998 Track B, so `view.form.*` can carry the binding — the dogfood proof is the missing half) |
84
84
85
85
To bind a pending class: add its dogfood proof + `@proof:` tag, set `bound: true` and
86
86
its `ledgerBindings` in `proof-registry.mts`, add the `proof` to the ledger entry, and
@@ -166,7 +166,7 @@ The governed set is `GOVERNED` at the top of `check-liveness.mts`. To add a type
166
166
RecordDetailView had been gating the History tab on it the whole time (#2707).
167
167
4. Add the type to `GOVERNED`; confirm the gate is green.
168
168
169
-
## Current state — 12 governed types
169
+
## Current state — 13 governed types
170
170
171
171
Counts include drilled `children` entries; regenerate with the snippet below rather
172
172
than hand-editing (this table drifted badly once — field was listed 34/39 while the
| page | 16 | – | – | 1 | fully live + one planned |
204
+
| view | 68 | 2 | 5 | – | list/form drilled via `children` (#2998 Track B); dead = list.{responsive,performance} + form.{data,defaultSort,aria}, all but aria authorWarn'd; exp = form.{buttons,defaults} awaiting objectui#2545; audit-era DEAD lines superseded by re-verification (submitBehavior, sharing.lockedBy, list ViewData providers, and the ADR-0021 chart shape — all live now); level-2 dead residue (userActions.buttons, addRecord.mode/formView, tabs[].order) noted on parents — one drill level only |
204
205
205
206
The `dead` set across types is the enforce-or-remove worklist (ADR-0049); every
206
207
misleading entry carries `authorWarn` so authors hear about it at compile time.
207
-
Not yet governed (rollout): view, dashboard, app, report, job, datasource,
208
+
Not yet governed (rollout): dashboard, app, report, job, datasource,
0 commit comments