fix(#4132): verify durable runtime surface sources (#4182)

* fix(#4132): verify durable runtime surface sources

* chore(#4132): record PR number in changeset

* test(#4132): cover rejected commands source alias

* fix(#4132): reject aliased package fallback

* test(#4132): cover rejected agents source alias

* test(#4132): cover partially aliased marker provider

* fix(#4132): reject partially aliased source providers

* test(#4132): cover routed source identity probes

* fix(#4132): route installed source identity probes

* refactor(#4132): tighten installer source metadata

* test(#4132): cover corpus trust boundary attacks

* fix(#4132): close installed corpus trust gaps

* refactor(#4132): keep installer authority private

* fix(#4132): preserve private installer fallback

* test(#4132): preserve fixture source authority

* fix(#4132): reject overlapping source fallback

* fix(#4132): avoid redundant installed corpus reads

* refactor(#4132): simplify provider resolution

* test(#4132): sync install tree fixtures after rebase

---------

Co-authored-by: Tom Boucher <trekkie@nomorestars.com>
This commit is contained in:
Zy Deng
2026-09-05 21:32:52 +02:00
committed by GitHub
parent 1017898cb9
commit 4c60879b5d
49 changed files with 3956 additions and 307 deletions

View File

@@ -738,6 +738,13 @@ describe('#3544: spawned installer — gsd-core/ spec tree @-refs resolve on til
const walk = (dir) => {
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const full = path.join(dir, entry.name);
const rel = path.relative(rootDir, full);
const topLevel = rel.split(path.sep)[0];
// The durable Runtime Surface corpus is intentionally raw canonical
// input, not an emitted/runtime-rewritten spec tree. Its paths are
// validated when staged, so exclude only these two known corpus roots
// from this legacy emitted-content oracle.
if (topLevel === 'commands' || topLevel === 'agents') continue;
if (entry.isDirectory()) walk(full);
else if (entry.name.endsWith('.md')) {
const content = fs.readFileSync(full, 'utf8');