Skip to content

chore(spec): re-root liveness gate on the metadata-type registry + onboard 10 core types#1936

Merged
os-zhuang merged 1 commit into
mainfrom
chore/liveness-gate-reroot
Jun 16, 2026
Merged

chore(spec): re-root liveness gate on the metadata-type registry + onboard 10 core types#1936
os-zhuang merged 1 commit into
mainfrom
chore/liveness-gate-reroot

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes a structural blind spot and expands the spec-liveness gate to the core authorable surface.

The blind spot

The previous gate read the generated json-schema/ directory. But z.toJSONSchema() throws on object and action, and most top-level authorable types (object/field/flow/action/view/page/hook) aren't emitted there at all — so the gate was structurally blind to the highest-frequency surface. The 3 categories that worked (security/identity/ai) did so only because their schemas happened to emit.

The fix — root on the registry

Read BUILTIN_METADATA_TYPE_SCHEMAS (metadata-type-schemas.ts) — the same registry the runtime /api/v1/meta/types/:type endpoint and Studio metadata-admin forms use, i.e. exactly the authorable types. The gate walks each Zod schema directly (version-tolerant unwrap of lazy/optional/default/pipe), so it never depends on the JSON-schema converter.

  • Drill-down one level: container props (object/record/array) expand via a ledger children block, so permission.objects.allowCreate (live) stays distinct from allowTransfer (experimental), flow.errorHandling.fallbackNodeId (dead) from the rest, etc.
  • Framework provenance/lock fields (ADR-0010) auto-classified live.
  • New gate is tsx (imports the registry); CI no longer needs gen:schema.

Onboards 10 types (~295 properties, all classified)

Ledgers re-keyed category → type, seeded from each type's liveness audit:

Type live exp dead headline
object 31 17 enable/capabilities + versioning/cdc tier dead; apiEnabled unenforced
field 34 39 ~half dead; aspirational enhanced-type/governance config; naming drift
flow 29 1 7 runAs unenforced; status/active gate nothing
action 26 5 disabled CEL ignored (renderers read non-spec enabled)
hook 11 2 model-healthy — near-total liveness
permission 23 3 2 CRUD/FLS/RLS live; destructive ops experimental
role 3 1 parent dead
agent 18 4 5 access-control dead; autonomy experimental
tool 13 1 5 write-only metadata
skill 15 2 triggerPhrases dead

Supersedes the category-keyed security/identity/ai ledgers (#1919/#1924/#1932). Not yet governed (rollout): view/page/dashboard/app/report/dataset/job/datasource/translation/email_template/doc/book/validation/seed.

Gate green: all 10 types, 0 unclassified, no stale evidence.

🤖 Generated with Claude Code

…ll-down)

The json-schema/-based gate was structurally blind to the core authorable types:
z.toJSONSchema does not emit object/field/flow/action/view/page/hook, so those —
the highest-frequency surface — could never be governed. The 3 categories that
worked (security/identity/ai) did so by luck.

Re-root on BUILTIN_METADATA_TYPE_SCHEMAS (packages/spec/src/kernel/
metadata-type-schemas.ts) — the same registry the runtime /api/v1/meta/types/:type
endpoint and Studio metadata-admin forms use, i.e. exactly the authorable types.
The gate walks each Zod schema directly (version-tolerant unwrap of
lazy/optional/default/pipe), classifies top-level props, and drills one level into
container props (object/record/array) via a ledger `children` block so
permission.objects.allowCreate stays distinguishable from a blanket objects.

- New gate: packages/spec/scripts/liveness/check-liveness.mts (tsx; imports the
  registry — no gen:schema needed). Framework provenance/lock fields auto-live.
- Ledgers re-keyed category → type. Onboards 10 types, ~295 props, all classified:
  object (31 live/17 dead), field (34/39), flow (29/7/1exp), action (26/5),
  hook (11/2), permission (23/2/3exp), role (3/1), agent (18/5/4exp),
  tool (13/5/1exp), skill (15/2). Seeded from the per-type liveness audits.
- Supersedes the category-keyed security/identity/ai ledgers; check:liveness now
  runs tsx; CI no longer runs gen:schema.

Not yet governed (rollout): view/page/dashboard/app/report/dataset/job/datasource/
translation/email_template/doc/book/validation/seed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Building Building Preview, Comment Jun 16, 2026 3:21am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation ci/cd dependencies Pull requests that update a dependency file tooling size/xl labels Jun 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

89 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/cloud-artifact-api.mdx (via packages/spec)
  • content/docs/concepts/cluster-semantics.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/implementation-status.mdx (via @objectstack/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/concepts/packages.mdx (via @objectstack/spec)
  • content/docs/concepts/setup-app.mdx (via @objectstack/spec)
  • content/docs/concepts/skills.mdx (via @objectstack/spec)
  • content/docs/concepts/webhook-delivery.mdx (via @objectstack/spec)
  • content/docs/getting-started/architecture.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/spec)
  • content/docs/getting-started/core-concepts.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/guides/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/guides/ai-capabilities.mdx (via @objectstack/spec)
  • content/docs/guides/airtable-dashboard-analysis.mdx (via @objectstack/spec)
  • content/docs/guides/analytics-datasets.mdx (via @objectstack/spec)
  • content/docs/guides/api-reference.mdx (via @objectstack/spec)
  • content/docs/guides/business-logic.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/error-catalog.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-type-gallery.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/field-validation-rules.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/protocol-diagram.mdx (via packages/spec)
  • content/docs/guides/cheatsheets/query-cheat-sheet.mdx (via @objectstack/spec)
  • content/docs/guides/cheatsheets/quick-reference.mdx (via @objectstack/spec)
  • content/docs/guides/client-sdk.mdx (via @objectstack/spec)
  • content/docs/guides/common-patterns.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/auth-service.mdx (via packages/spec)
  • content/docs/guides/contracts/cache-service.mdx (via packages/spec)
  • content/docs/guides/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/index.mdx (via @objectstack/spec)
  • content/docs/guides/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/guides/contracts/storage-service.mdx (via packages/spec)
  • content/docs/guides/data-modeling.mdx (via @objectstack/spec)
  • content/docs/guides/deployment-vercel.mdx (via @objectstack/spec)
  • content/docs/guides/driver-configuration.mdx (via @objectstack/spec)
  • content/docs/guides/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/guides/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/guides/formula.mdx (via @objectstack/spec)
  • content/docs/guides/hook-bodies.mdx (via packages/spec)
  • content/docs/guides/kernel-services.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/dashboard.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/field.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/flow.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/index.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/object.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/validation.mdx (via @objectstack/spec)
  • content/docs/guides/metadata/workflow.mdx (via @objectstack/spec)
  • content/docs/guides/packages.mdx (via @objectstack/spec)
  • content/docs/guides/plugin-development.mdx (via @objectstack/spec)
  • content/docs/guides/plugins.mdx (via @objectstack/spec)
  • content/docs/guides/project-scoping.mdx (via @objectstack/spec)
  • content/docs/guides/public-forms.mdx (via @objectstack/spec)
  • content/docs/guides/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/index.mdx (via packages/spec)
  • content/docs/guides/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/guides/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/guides/security.mdx (via @objectstack/spec)
  • content/docs/guides/seed-data.mdx (via @objectstack/spec)
  • content/docs/guides/skills.mdx (via @objectstack/spec)
  • content/docs/guides/standards.mdx (via @objectstack/spec)
  • content/docs/guides/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit 6149749 into main Jun 16, 2026
13 of 15 checks passed
@os-zhuang
os-zhuang deleted the chore/liveness-gate-reroot branch June 16, 2026 03:23
import { readFileSync, existsSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname, join, resolve } from 'node:path';
import { getMetadataTypeSchema, listMetadataTypeSchemaTypes } from '../../src/kernel/metadata-type-schemas';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/xl tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants