chore(spec): enroll report and dashboard in the liveness GOVERNED set (#3462)#3474
Merged
Conversation
…#3462) Closes the systemic anti-drift gap for two authorable UI types (umbrella #1878). Both were registered but ungoverned, so their property liveness wasn't CI-checked. - Add liveness/report.json (20 live / 2 dead) and dashboard.json (18 live / 2 dead), each property classified with an objectui consumer. - Re-verification corrected stale 2026-06 audit findings: report `chart` is live (DatasetReportChart via useDatasetRows, #1890/#3441); dashboard globalFilters/dateRange live (#2501); title↔label fixed (objectui#2806); ADR-0021 widget migration shipped (#3251). Only aria/performance dead. - Add both to GOVERNED in check-liveness.mts; gate green; README table + rollout list updated. webhook (third type in #3462) deferred — not a registered metadata type; rides with the disconnect decision in #3461. No spec shape/behavior change (ledger + gate config only). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CMaDBhnZEUu1fcw8Rvo6Yq
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 104 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
os-zhuang
marked this pull request as ready for review
July 25, 2026 01:00
This was referenced Jul 25, 2026
os-zhuang
added a commit
that referenced
this pull request
Jul 25, 2026
…3485) Closes the final third of #3462 (umbrella #1878). report/dashboard landed in #3474; webhook was deferred for two reasons, both handled here. - Not a registered metadata type: webhook is absent from the metadata-type registry, so the gate can't resolve it via getMetadataTypeSchema. Registering it would switch on Studio webhook CRUD + saveMetaItem overlay acceptance + diagnostics sweeping — wrong while the authoring surface is still disconnected. Instead the gate walks it via a small SPEC_ONLY_SCHEMAS override in check-liveness.mts (consulted before the registry). Zero runtime blast radius. - The whole authoring surface is dead (#3461, confirmed at HEAD): nothing materializes an authored webhooks: entry (stack/connector) into a sys_webhook dispatcher row; the runtime reads only admin-authored sys_webhook rows. So liveness/webhook.json classifies all 16 authorable props dead + authentication experimental (HMAC-secret-only, its existing marker). Per-prop notes record the sys_webhook column map as the future materializer's mapping table (#3461 A) and flag the object->object_name / isActive->active mismatches. Also documents the objectql engine.ts:1183/1343 dead-end that registers webhooks: as inert metadata items nothing reads back — the trap that makes this look connected. - Author-warning wired (@objectstack/cli): added { type: 'webhook', key: 'webhooks' } to TYPE_COLLECTIONS so os compile now advises that webhooks: is a silent no-op. The required url prop carries the single warning per webhook (one heads-up per artifact, not one per dead prop); isActive left unmarked (default(true) boolean). The showcase's TaskChangedWebhook is the live example. Enrollment only — does not decide #3461's build-the-bridge vs retire-the-surface question. Gate green (webhook 17 classified: dead 16, experimental 1); lint contract test red->green; spec 6857 + cli 640 tests pass. No spec shape/behavior change (ledger + gate/lint config only). Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Enrolls two more authorable UI metadata types —
reportanddashboard— inthe spec liveness GOVERNED set, closing another slice of the umbrella
metadata-liveness audit (#1878, follow-up #3462).
Both types were already registered and round-trippable but ungoverned, so
their property liveness was never CI-checked. That's exactly how drifts like
dashboard
title↔labeland stale reportchartconfig survived until amanual audit caught them. After this change, future drift on these types is a
CI failure, not an audit finding.
Changes
packages/spec/liveness/report.json— new ledger, 20 live / 2 dead. Eachproperty classified with an objectui consumer reference.
packages/spec/liveness/dashboard.json— new ledger, 18 live / 2 dead.packages/spec/scripts/liveness/check-liveness.mts— addedreportanddashboardtoGOVERNED.packages/spec/liveness/README.md— added both to the governed table;removed them from the "not yet governed" rollout list.
.changeset/govern-report-dashboard-liveness.md—@objectstack/specpatch.Re-verification corrected several stale 2026-06 audit findings
Rather than transcribe the audit docs verbatim, each property was re-checked
against objectui HEAD. Corrections baked into the ledgers:
chartis live —DatasetReportChartplotschart.xAxis/chart.yAxis(dataset dimension × measure) via
useDatasetRows(DatasetReportRenderer.tsx:776,[P1] Finish ADR-0021 analytics migration (chart view / dashboard+Studio / report) #1890/docs(spec): correct ReportChart xAxis/yAxis semantics; mark dead report surface (#1890) #3441). The audit's DEAD finding is superseded; only its
groupBysub-keystays experimental (own describe marker).
globalFilters/dateRangeare live — dashboard-level filtersmerged into every widget query (
DashboardRenderer.tsx:279,988, framework#2501).title↔labeldrift is fixed (renderer falls back tolabel,objectui#2806); the ADR-0021 widget migration shipped ([P2] Finish the dashboard analytics migration: Studio → dataset shape, then enable DashboardWidgetSchema strict validation #3251).
Only
ariaandperformanceremain dead on each type (performancecarries anauthorWarnso authoring it surfaces a hint).Scope / non-goals
webhook(the third type named in [P2] Enrolldashboard/webhook/reportin the spec liveness GOVERNED set #3462) is deferred: it isn't aregistered metadata type, and its enrollment is coupled to the
spec↔
sys_webhookdisconnect decision tracked in [P2] Webhook: the specWebhookSchemaauthoring surface is disconnected from thesys_webhookdispatcher #3461.Verification
pnpm --filter @objectstack/spec check:liveness→ green:report 22 classified (live 20, dead 2); dashboard 20 classified (live 18, dead 2); ✓ all governed-type properties are classifiedRefs #1878. Closes the report/dashboard portion of #3462.
Generated by Claude Code