Systemic follow-up from the metadata-liveness audit (umbrella #1878).
Why
The spec liveness gate governs only the types in GOVERNED (packages/spec/scripts/liveness/check-liveness.mts:56):
object, field, flow, action, hook, permission, position, agent, tool, skill, dataset, page, view
dashboard, webhook, and report are authorable/round-trippable but NOT in this set, so they have no liveness/<type>.json ledger and CI never checks them. That gap is the systemic reason several drifts survived undetected until the 2026-06 audit — e.g.:
Enrolling these three closes the ratchet so the next such drift is a CI failure, not an audit finding years later.
Scope
For each type, following the view precedent (#2998 Track B):
Suggested order: report first (its chart/column/grouping split is already characterized in #3441), then webhook (do it with the #3461 decision), then dashboard.
Refs #1878, #1891, #3441, #3461, #2998.
Systemic follow-up from the metadata-liveness audit (umbrella #1878).
Why
The spec liveness gate governs only the types in
GOVERNED(packages/spec/scripts/liveness/check-liveness.mts:56):dashboard,webhook, andreportare authorable/round-trippable but NOT in this set, so they have noliveness/<type>.jsonledger and CI never checks them. That gap is the systemic reason several drifts survived undetected until the 2026-06 audit — e.g.:titlevslabel(fixed reactively in fix: read spec-canonical keys for dashboard header title and field length rules objectui#2806);object/isActivevs runtimeobject_name/active([P2] Webhook: the specWebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461);chart/ReportColumn/ReportGroupingstaleness (fixed reactively in docs(spec): correct ReportChart xAxis/yAxis semantics; mark dead report surface (#1890) #3441).Enrolling these three closes the ratchet so the next such drift is a CI failure, not an audit finding years later.
Scope
For each type, following the
viewprecedent (#2998 Track B):packages/spec/liveness/<type>.jsonclassifying every top-level proplive/experimental/deadwithfile:lineevidence (drill one level viachildrenwhere sub-props diverge).GOVERNEDincheck-liveness.mts(requires it to resolve through the metadata-type registry —report/dashboardare registered;webhookis not yet, so it may need registration first, or a small gate accommodation).pnpm --filter @objectstack/spec check:livenessis green.authorWarnthe genuinely-misleading dead props (per the ledger README rules).Suggested order: report first (its chart/column/grouping split is already characterized in #3441), then webhook (do it with the #3461 decision), then dashboard.
Refs #1878, #1891, #3441, #3461, #2998.