You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 32448d4
Browse filesBrowse the repository at this point in the historyBrowse files
feat(metadata): the artifact door registers stack-declared capabilities (#12892 step 1) (#13125)
* feat(metadata): the artifact door registers stack-declared capabilities
Step 1 of the maintainer's 2026-08-29 ruling on the route-ownership question
for the five artifact security collections (option 1 — the door owns the
registration route): add `capabilities: 'capability'` to
`ARTIFACT_FIELD_TO_TYPE` and retire the `check:stack-collection-maps` waiver
that recorded its absence as drift.
`capabilities` is an authorable top-level stack collection (ADR-0066 D1) that
`AppPlugin`'s ADR-0057 `SECURITY_FIELDS` block registered and the door did not,
making that block the collection's sole registrar on an artifact boot — and it
registers the raw bundle bytes: no strict parse, no schema default, no ADR-0010
provenance. On a `bootstrap: 'artifact-only'` runtime where `AppPlugin` never
runs, the declaration reached no registry at all.
Step 2 (that block stops registering the five on the artifact path, after a
census of the non-artifact boots) is deliberately NOT in this change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UjujZN219uFzBhSYfMykCd
* test(runtime): rewrite the door-coverage pins to the measured interim divergence
Option B on the maintainer/PM ruling for #12892 step 1, authorized 2026-08-29.
The two pins that went red were NOT the key-by-key divergence pins the ruling
anticipated (those stay green: a capability's two copies differ only outside
CONVERSION_GOVERNED_PATHS). They were door-COVERAGE statements — a vacuity
guard listing which keys have two readers, and a case asserting the very
absence step 1 removes.
An assertion of an absence stops being a guard the moment the absence is
deliberately removed, so it is rewritten UPWARD, never relaxed:
- the vacuity guard's `shared` list gains `capability:crm.export`, and only
that;
- the `capabilities` case now pins that BOTH readers register the collection
and that the two copies diverge on exactly `[_packageId, _packageVersion,
_provenance, scope]` at this seam, with `scope` and `_packageVersion` — the
two that survive every seam — pinned by name with the value each side
carries.
Its docblock states the acceptance criterion in place: this case exists to go
RED when step 2 lands and AppPlugin stops registering capabilities on the
artifact path. No assertion is skipped, weakened, `it.fails`ed or deleted.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UjujZN219uFzBhSYfMykCd
---------
Co-authored-by: Claude <noreply@anthropic.com>
0 commit comments