Skip to content

[P2] Enroll dashboard / webhook / report in the spec liveness GOVERNED set #3462

Description

@os-zhuang

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):

  • Author packages/spec/liveness/<type>.json classifying every top-level prop live / experimental / dead with file:line evidence (drill one level via children where sub-props diverge).
  • Add the type to GOVERNED in check-liveness.mts (requires it to resolve through the metadata-type registry — report/dashboard are registered; webhook is not yet, so it may need registration first, or a small gate accommodation).
  • Confirm pnpm --filter @objectstack/spec check:liveness is green.
  • authorWarn the 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.

Activity

  1. os-zhuang commented on Jul 25, 2026

    @os-zhuang
    ContributorAuthor

    report + dashboard enrolled — merged in #3474 (squash a41ba5c).

    webhook — still deferred. It isn't a registered metadata type, so it can't enter GOVERNED without registration first, and its schema is disconnected from the runtime sys_webhook dispatcher (spec object/isActive vs runtime object_name/active). Its enrollment is coupled to the disconnect decision in #3461; this issue stays open to track that last third.


    Generated by Claude Code

  2. self-assigned this
    on Jul 25, 2026
  3. os-zhuang commented on Jul 25, 2026

    @os-zhuang
    ContributorAuthor

    webhook enrolled — all three types now governed. Merged in #3485 (squash `189854c`).

    • `packages/spec/liveness/webhook.json` authored: 16 dead + 1 experimental (authentication), every prop cited. Gate green: webhook 17 classified (dead 16, experimental 1), ✓ all governed-type properties are classified.
    • Both deferral blockers handled:
      • Not a registered metadata type → the gate walks it via a SPEC_ONLY_SCHEMAS override in check-liveness.mts (consulted before getMetadataTypeSchema), rather than registering it. Registering would have switched on Studio webhook CRUD + saveMetaItem overlay acceptance + diagnostics sweeping — the wrong move while the surface is still disconnected. Zero runtime blast radius.
      • Disconnect ([P2] Webhook: the spec WebhookSchema authoring surface is disconnected from the sys_webhook dispatcher #3461) → classified honestly from the author's vantage point: the whole authoring surface is a silent no-op, so all 16 props are dead. Per-prop notes double as the future materializer's mapping table (object→object_name, isActive→active, definition_json-only vs no-sink-anywhere).
    • authorWarn wired (@objectstack/cli): os compile now warns that webhooks: is a no-op, once per webhook via the required url carrier. Contract test red→green.

    This was the last third of the three types (report + dashboard landed in #3474). Closing — the enrollment ratchet now covers dashboard / webhook / report.

    Note the enrollment is neutral on #3461's enforce-or-remove decision (build the ingestion bridge vs retire stack.webhooks); that issue stays open to track it. When it resolves, the mapped props flip to live or the ledger is removed with the schema.

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions