ADR-0088: metadata-kind admission test — retire trigger/router/function/service#2628
Merged
Merged
Conversation
…uter/function/service States the three-part admission test a kind must pass (independent lifecycle, declarative governability, real consumer — the kind-level analogue of ADR-0085 §2), retires the four placeholder kinds whose every governance flag was already 'no', and documents external_catalog as runtime-created by design. Closes the decision recorded in #2613. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6pPpRszk9cD3SxcKNFMWs
… per ADR-0088
- spec kernel: MetadataTypeSchema + DEFAULT_METADATA_TYPE_REGISTRY drop
trigger/router/function/service (30 → 26 kinds) with tombstone comments
pointing at the delivered forms (hook / record_change flows;
contributes.routes + apis:; defineStack({functions}); the plugin
registry). external_catalog annotated RUNTIME-CREATED (ADR-0062/0088).
- plugin-structure: OPS_FILE_SUFFIX_REGEX drops the four suffixes.
- objectql: remove the dormant 'function'-kind load path (nothing ever
produced such items; defineStack({functions}) is the one way in) and
drop 'function' from the metadata-service sync list.
- metadata-core: lockstep enum follows.
- Tests that leaned on the retired kinds as deny-gate fixtures now use
the remaining allowRuntimeCreate:false kind (agent, ADR-0063) and
allowOrgOverride:false kinds (hook/validation/external_catalog); the
registry-invariant asserts keep the retired names as reintroduction
guards.
- Reference docs regenerated (gen:docs); ADR-0005/0010 prose updated.
- showcase KIND_COVERAGE shrinks in lockstep; external_catalog waiver is
now a permanent, documented exclusion.
- changeset: minor for spec/objectql/metadata-core.
Verified: spec 6690 tests, objectql 773, metadata-core 80,
metadata 260, metadata-protocol 11, full turbo build (70 tasks),
showcase verify, crm 19 — all green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G6pPpRszk9cD3SxcKNFMWs
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
📓 Docs Drift CheckThis PR changes 3 package(s): 99 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…etired kinds The Studio sidebar-group example listed metadata kinds retired by ADR-0020 (workflow) and ADR-0088 (trigger); use flow + job instead. Found via the docs-drift check on #2628. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G6pPpRszk9cD3SxcKNFMWs
os-zhuang
marked this pull request as ready for review
July 5, 2026 07:50
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
Closes #2613.
Two commits:
docs(adr)— ADR-0088. States the three-part admission test a metadata kind must pass (independent lifecycle · declarative governability · a real consumer — the kind-level analogue of ADR-0085 §2), retires the four placeholder kinds, and documentsexternal_catalogas runtime-created by design.feat(spec,objectql,metadata-core)!— the retirement.MetadataTypeSchema+DEFAULT_METADATA_TYPE_REGISTRYshrink 30 → 26, with tombstone comments pointing at the delivered forms:hook/record_changeflows (trigger), plugincontributes.routes+ declarativeapis:(router),defineStack({ functions })+contributes.functions(function), the plugin/service registry (service).OPS_FILE_SUFFIX_REGEXdrops*.trigger.ts/*.router.ts/*.function.ts/*.service.ts.type: 'function'metadata items is removed (nothing ever produced such items);functionleaves the metadata-service sync list.allowRuntimeCreate: falsekind (agent, ADR-0063) andallowOrgOverride: falsekinds (hook/validation/external_catalog); the registry-invariant test keeps asserts on the retired names as reintroduction guards.gen:docs; ADR-0005/0010 whitelist prose updated; changeset added (minor: spec/objectql/metadata-core).KIND_COVERAGEshrinks in lockstep (its registry-driven test enforces exact membership);external_catalog's waiver becomes a permanent, documented exclusion.Why
The registry is the contract authors — human and AI — read to learn what can be authored. Four kinds had no authoring surface, no loader, no schema, and no (or a dead) consumer; every governance flag on their entries was already "no". Keeping them is the kind-level version of advertising undelivered capability (Prime Directive #10), and it actively misleads AI authors that enumerate the registry. Pre-launch is the cheapest moment to remove them (same posture as the earlier
workflow/approvalretirements, ADR-0019/0020).Risk notes
sys_metadatarows are unaffected: audited — no production read path re-parses storedtypevalues through the enum (the only enum parsers live in tests)./api/v1/meta/types*is fully dynamic over the registry, so the API surface shrinks automatically; clients hardcoding the four retired kinds (none known in-repo) would observe the change.triggerscapability token inrequires:(FlowTrigger plugins) is a different namespace and is untouched.Verification
All green locally: spec 6690 tests · objectql 773 · metadata-core 80 · metadata 260 · metadata-protocol 11 · full turbo build (70 tasks) · showcase
verify(registry-driven coverage now expects exactly 26 kinds) · crm 19.🤖 Generated with Claude Code
https://claude.ai/code/session_01G6pPpRszk9cD3SxcKNFMWs
Generated by Claude Code