Tom Boucher
|
d2518e142d
|
feat(#1681): ADR-1239 Phase C-2 — wire trust gate into loadRegistry (configHome confinement) [slice 2] (#1808)
* feat(#1681): ADR-1239 Phase C-2 — wire trust gate into loadRegistry (configHome confinement) [slice 2]
Phase 4 slice 2. loadRegistry({includeInstalled:true, configHome}) now rejects
(skip + warn, fail-closed) any installed third-party descriptor whose declared
destSubpath resolves outside the supplied configHome, BEFORE it is composed.
- src/capability-loader.cts: LoadRegistryOptions.configHome?:string (optional,
backward-compatible). Require external-descriptor-trust.cjs (typed). Before
overlayCaps.push(cap), if configHome set, assertDescriptorConfined(cap,
configHome) — on throw, skip('configHome confinement rejected: ...') +
continue. Fail-closed via the loader's existing per-candidate skip semantics.
- tests/external-descriptor-loader-wiring.test.cjs: integration test — escaping
overlay skipped with confinement reason when configHome set; confined overlay
composes; omitted configHome = no load-time check (backward-compatible).
Defense-in-depth with Phase 2: load-time rejects malformed descriptors early
(this slice); install-time assertDestWithinConfigHome bounds actual writes
(#1679 AC3). Existing capability-loader.test.cjs 54/54 (no regression —
additive optional option). Companion MCP server -> slice 3.
* chore(changeset): add Changed fragment for loadRegistry configHome confinement wiring (#1681)
|
2026-06-28 12:25:02 -04:00 |
|