Skip to content

chore(spec): govern ai (Agent/Tool/Skill) + allowlist mode in the liveness gate - #1932

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

os-zhuang merged 1 commit into
mainfrom
chore/spec-liveness-ai

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Third category for the spec-liveness gate, plus the refactor needed to make noisy categories tractable.

Stacked on #1924 (identity). Diff includes that commit until it merges; review after #1924.

Why the refactor

The json-schema categories don't map to "authorable metadata types"ai is mostly embedder/knowledge/model/runtime DTOs, with only Agent/Tool/Skill author-written. Blanket "classify every object schema" doesn't scale. Two additions:

  • allowlist mode"mode":"allowlist" + "governed":["Agent","Tool","Skill"]; only those are checked, the rest of the category is out of scope. A governed name that no longer resolves is reported (catches renames silently dropping coverage).
  • framework-field auto-classification — the ADR-0010 provenance/lock overlay fields (_lock*, _provenance, _packageId/Version, protection) appear on every type and are system-stamped; the gate auto-classifies them live so ledgers don't repeat them.

ai findings (seeded from the agent/tool/skill audits)

63 props: 46 live / 5 experimental / 12 dead, 0 unclassified.

  • Agent — core (name/role/instructions/model/skills/tools/active/planning) live; access/permissions/visibility/tenantId DEAD — "who can chat with this agent" is a no-op (the chat route hardcodes ['ai:chat','ai:agents'], agent-routes.ts:109; ADR-0049 [P0][security] Agent access control is a no-op (permissions/visibility/access) #1884). knowledge dead (shape drift). lifecycle/memory/guardrails/structuredOutput experimental (aspirational autonomy). model.provider/topP dead within a live model.
  • Toolwrite-only metadata (projected one-way for Studio; runtime uses a parallel AIToolDefinition). name/description/parameters/objectName live; category/requiresConfirmation/active/builtIn/permissions dead; outputSchema experimental.
  • Skill — name/label/description/instructions/tools/triggerConditions/active live; triggerPhrases dead (no intent matcher exists); permissions dead (+ requiredPermissions naming drift).

Gate result

security: 93 (26 live / 1 exp / 66 dead)
identity:  4 (3 live / 1 dead)
ai:       63 (46 live / 5 exp / 12 dead)
all 0 unclassified

🤖 Generated with Claude Code

@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 Ready Ready Preview, Comment Jun 16, 2026 2:42am

Request Review

…iveness gate

Third category for the spec-liveness gate. Two gate capabilities make noisy
categories tractable:

- allowlist mode (`"mode":"allowlist"` + `"governed":[...]`) — only the named
  authorable schemas are checked; the rest of the category is out of scope. The
  json-schema categories don't map to authorable types (ai is mostly embedder/
  knowledge/model DTOs), so blanket per-category classification doesn't scale. A
  governed name that no longer resolves is reported (catches renames).
- auto-classify ADR-0010 framework provenance/lock fields (_lock*, _provenance,
  _packageId/Version, _lockDocsUrl, protection) as `live`, so every type's ledger
  doesn't repeat them.

ai ledger seeded from docs/audits/2026-06-{agent,tool,skill}schema-*.md:
- 63 props: 46 live / 5 experimental / 12 dead, 0 unclassified.
- Agent: core + model/skills/tools/active/planning live; access/permissions/
  visibility/tenantId/knowledge DEAD (access-control is a no-op — chat route
  hardcodes ['ai:chat','ai:agents'], ADR-0049 #1884); lifecycle/memory/guardrails/
  structuredOutput experimental (aspirational autonomy).
- Tool: write-only metadata — name/description/parameters/objectName live (via the
  parallel AIToolDefinition); category/requiresConfirmation/active/builtIn/
  permissions dead; outputSchema experimental.
- Skill: name/label/description/instructions/tools/triggerConditions/active live;
  triggerPhrases dead (no matcher), permissions dead (+ requiredPermissions drift).

Stacked on #1924 (identity). GOVERNED = security, identity, ai.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@os-zhuang
os-zhuang force-pushed the chore/spec-liveness-ai branch from 37c1d01 to e40e7b6 Compare June 16, 2026 02:35
@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling size/m 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 61f730e into main Jun 16, 2026
13 of 14 checks passed
@os-zhuang
os-zhuang deleted the chore/spec-liveness-ai branch June 16, 2026 02:36
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 17, 2026
…ntity (objectstack-ai#8968)

The publish smoke went straight from install to `objectstack dev`, so it never
ran `npm run build` in either mode. That is where every "published scaffold is
broken" incident so far actually surfaced (objectstack-ai#4902, objectstack-ai#7644, objectstack-ai#8677): in all of them
scaffold and install exited 0 and only the build exited 2, so the gate was
structurally unable to see them. Scheduled registry-canary run objectstack-ai#1932 concluded
success on 2026-08-10 against a create-objectstack whose scaffold failed first
build on four templates.

Both modes now run the project's own build script and assert exit 0, plus a
non-empty dist/objectstack.json so a build that emits nothing cannot read as a
pass. Scope is the bundled `blank` template — the scaffolder's whole catalog
since the five remote templates were delisted.

Also assert the scaffolded namespace differs from the template's own. The
identity rewrite only does anything when the two differ, and objectstack-ai#7644 was a
rewrite that silently did nothing: measured against create-objectstack@16.1.0,
the build reports 4 namespace-prefix errors when they differ and 0 when the
project is named after the template. `smoke-app` differing from `blank` was
accidental; it is asserted now.

Measured cost on GA 17.0.0: build 3s on top of an install already being paid.

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant