Skip to content

chore(spec): govern identity in the spec-liveness gate#1924

Merged
os-zhuang merged 1 commit into
mainfrom
chore/identity-liveness
Jun 15, 2026
Merged

chore(spec): govern identity in the spec-liveness gate#1924
os-zhuang merged 1 commit into
mainfrom
chore/identity-liveness

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Second category for the spec-liveness gate (#1919), completing the security/identity audit cluster.

What it governs

  • Role — the one author-written RBAC metadata type:
    • namelive (sys_role.name is reused as a permission-set name; permission-evaluator.ts:113)
    • label / descriptionlive (display metadata)
    • parentdead — the "Reports To" rollup is unimplemented; the org hierarchy walks sys_department.parent_department_id via department-graph.ts, nothing reads sys_role.parent. Removal candidate (ADR-0049).
  • Everything else in identity is not authorable metadatainternal: SCIM 2.0 provisioning DTOs (16), better-auth runtime tables (User/Session/Account/VerificationToken/ApiKey), and org primitives (Member/Organization/Invitation).

Gate result

security: 93 classified, 0 unclassified
identity:  4 classified (live 3, dead 1), 0 unclassified

Note on rollout (for reviewers)

The json-schema categories don't map cleanly to "authorable metadata types" — most categories (data, automation, ui, kernel, …) are dominated by ObjectQL/engine/protocol DTOs, not author-written metadata. security/identity were the clean, fully-authorable cluster. Future categories will need either an explicit per-category authorable allowlist or per-type seeding from each type's liveness audit, rather than blanket per-category classification. Flagged so the next rollout step is scoped deliberately.

Independent of #1923 (depends only on the merged #1919).

🤖 Generated with Claude Code

Second category for the liveness gate (after security), completing the
security/identity audit cluster. Adds `identity` to GOVERNED and seeds
packages/spec/liveness/identity.json:

- Role (the one author-written RBAC type): name live (sys_role.name reused as a
  permission-set name, permission-evaluator.ts:113), label/description live as
  display metadata, parent DEAD — the org hierarchy walks
  sys_department.parent_department_id via department-graph.ts, nothing reads
  sys_role.parent (removal candidate, ADR-0049).
- Everything else in identity is NOT authorable metadata: SCIM 2.0 provisioning
  DTOs, better-auth runtime tables (User/Session/Account/VerificationToken/
  ApiKey), and org primitives (Member/Organization/Invitation) → `internal`.

Gate: identity 4 props (3 live, 1 dead), 0 unclassified.

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

vercel Bot commented Jun 15, 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 15, 2026 4:06pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Jun 15, 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 1366af1 into main Jun 15, 2026
15 checks passed
@os-zhuang
os-zhuang deleted the chore/identity-liveness branch June 15, 2026 16:42
os-zhuang added a commit that referenced this pull request Jun 16, 2026
…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 added a commit that referenced this pull request Jun 16, 2026
…iveness gate (#1932)

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>
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/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant