@getbourdon/conformance 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/index.cjs.map +1 -1
  2. package/dist/index.js +1 -0
  3. package/dist/index.js.map +1 -1
  4. package/fixtures/leak_cases.json +2 -0
  5. package/fixtures/manifest.json +91 -11
  6. package/fixtures/mcp_snapshots/_normalizer.json +2 -0
  7. package/fixtures/mcp_snapshots/capture_clip.req.json +7 -0
  8. package/fixtures/mcp_snapshots/capture_clip.res.json +7 -0
  9. package/fixtures/mcp_snapshots/compile_turn.req.json +7 -0
  10. package/fixtures/mcp_snapshots/compile_turn.res.json +5 -0
  11. package/fixtures/mcp_snapshots/describe_caller.req.json +4 -0
  12. package/fixtures/mcp_snapshots/describe_caller.res.json +4 -0
  13. package/fixtures/mcp_snapshots/ingest_meeting.req.json +7 -0
  14. package/fixtures/mcp_snapshots/ingest_meeting.res.json +33 -0
  15. package/fixtures/mcp_snapshots/prepare_recognition_context.res.json +5 -4
  16. package/fixtures/mcp_snapshots/prepare_recognition_context_drifting.res.json +5 -4
  17. package/fixtures/mcp_snapshots/propose_consensus.req.json +11 -0
  18. package/fixtures/mcp_snapshots/propose_consensus.res.json +17 -0
  19. package/fixtures/mcp_snapshots/search_federation.req.json +7 -0
  20. package/fixtures/mcp_snapshots/search_federation.res.json +4 -0
  21. package/fixtures/mcp_snapshots/seed_library.json +11 -2
  22. package/fixtures/mcp_snapshots/trace_entity.req.json +7 -0
  23. package/fixtures/mcp_snapshots/trace_entity.res.json +133 -0
  24. package/fixtures/mcp_snapshots/vote_consensus.req.json +7 -0
  25. package/fixtures/mcp_snapshots/vote_consensus.res.json +56 -0
  26. package/fixtures/recognition_golden_v1.yaml +30 -0
  27. package/fixtures/recognition_vectors.json +117 -10
  28. package/fixtures/tier_matrix.json +84 -0
  29. package/fixtures/turn_compiler_vectors.json +180 -2
  30. package/fixtures.pin.json +2 -2
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Typed loaders for the language-neutral parity fixtures produced by the Python\n * oracle (`~/repos/bourdon/tools/gen_conformance.py`). Python is the source of\n * truth; the @getbourdon/* TypeScript mirror asserts against these exact bytes.\n *\n * Resolution order:\n * 1. `BOURDON_CONFORMANCE_DIR` env var — the oracle checkout (parity tests +\n * oracle dev use this; highest priority so a build always asserts against\n * the live oracle).\n * 2. the fixtures BUNDLED in this package (`<pkg>/fixtures`, shipped in the\n * tarball) — what an installed `@getbourdon/conformance` consumer gets.\n * 3. the sibling Python checkout `../../bourdon/conformance` — dev fallback.\n *\n * The bundled copy is a vendored snapshot refreshed from the oracle by\n * `pnpm --filter @getbourdon/conformance sync-fixtures` (and in the release\n * workflow before publish), so the published package is self-contained.\n */\n\n// `import.meta.url` in ESM; esbuild empties it in the CJS bundle, where the\n// native `__dirname` global is the real directory — fall back to it.\ndeclare const __dirname: string | undefined;\nfunction moduleDir(): string {\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return dirname(fileURLToPath(import.meta.url));\n }\n return typeof __dirname !== \"undefined\" ? __dirname : process.cwd();\n}\n\nexport interface RedactionSecretCase {\n /** Joined at load (`assembleSecret`) so no contiguous secret literal lands in git. */\n fragments: string[];\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBenignCase {\n text: string;\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBattery {\n redacted_sentinel: string;\n benign_limit: number;\n secrets: RedactionSecretCase[];\n benign: RedactionBenignCase[];\n}\n\nexport interface ConformanceFixtureMeta {\n path: string;\n sha256: string;\n producer: string;\n}\n\nexport interface ConformanceManifest {\n conformance_version: string;\n produced_against: { bourdon_version: string };\n fixtures: ConformanceFixtureMeta[];\n}\n\nexport function conformanceDir(): string {\n const override = process.env.BOURDON_CONFORMANCE_DIR;\n if (override) return override;\n // Bundled snapshot: <pkg>/fixtures, one level up from src/ or dist/.\n const bundled = resolve(moduleDir(), \"..\", \"fixtures\");\n if (existsSync(resolve(bundled, \"manifest.json\"))) return bundled;\n // Dev fallback: the sibling Python oracle checkout.\n return resolve(process.cwd(), \"..\", \"..\", \"bourdon\", \"conformance\");\n}\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(resolve(conformanceDir(), name), \"utf8\")) as T;\n}\n\nexport function loadManifest(): ConformanceManifest {\n return loadJson<ConformanceManifest>(\"manifest.json\");\n}\n\nexport interface FixturePin {\n conformance_version: string;\n manifest_sha256: string;\n}\n\n/** The recorded fixture pin committed beside this package: which contract\n * version the vendored snapshot is, and the sha256 the manifest must hash to. */\nexport function loadPin(): FixturePin {\n return JSON.parse(\n readFileSync(resolve(moduleDir(), \"..\", \"fixtures.pin.json\"), \"utf8\"),\n ) as FixturePin;\n}\n\n/** sha256 hex of one file's raw bytes. */\nexport function sha256File(path: string): string {\n return createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\");\n}\n\nexport interface FixtureMismatch {\n path: string;\n expected: string;\n actual: string;\n}\n\n/** Verify every fixture in `dir` against the sha256 its manifest stamps.\n * Returns the mismatches — an empty array is the only passing result. The\n * same routine backs the parity gate AND its mutation test, so the check\n * that guards releases is itself provably able to fail. */\nexport function verifyFixtureHashes(dir: string = conformanceDir()): FixtureMismatch[] {\n const manifest = JSON.parse(\n readFileSync(resolve(dir, \"manifest.json\"), \"utf8\"),\n ) as ConformanceManifest;\n const mismatches: FixtureMismatch[] = [];\n for (const fixture of manifest.fixtures) {\n const actual = sha256File(resolve(dir, fixture.path));\n if (actual !== fixture.sha256) {\n mismatches.push({ path: fixture.path, expected: fixture.sha256, actual });\n }\n }\n return mismatches;\n}\n\nexport function loadRedactionBattery(): RedactionBattery {\n return loadJson<RedactionBattery>(\"redaction_battery.json\");\n}\n\n/** Reconstruct a secret case's runtime string from its fragments. */\nexport function assembleSecret(secret: RedactionSecretCase): string {\n return secret.fragments.join(\"\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAC3B,qBAAyC;AACzC,uBAAiC;AACjC,sBAA8B;AAH9B;AA0BA,SAAS,YAAoB;AAC3B,MAAI,OAAO,gBAAgB,eAAe,YAAY,KAAK;AACzD,eAAO,8BAAQ,+BAAc,YAAY,GAAG,CAAC;AAAA,EAC/C;AACA,SAAO,OAAO,cAAc,cAAc,YAAY,QAAQ,IAAI;AACpE;AAkCO,SAAS,iBAAyB;AACvC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AAErB,QAAM,cAAU,0BAAQ,UAAU,GAAG,MAAM,UAAU;AACrD,UAAI,+BAAW,0BAAQ,SAAS,eAAe,CAAC,EAAG,QAAO;AAE1D,aAAO,0BAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM,WAAW,aAAa;AACpE;AAEA,SAAS,SAAY,MAAiB;AACpC,SAAO,KAAK,UAAM,iCAAa,0BAAQ,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE;AAEO,SAAS,eAAoC;AAClD,SAAO,SAA8B,eAAe;AACtD;AASO,SAAS,UAAsB;AACpC,SAAO,KAAK;AAAA,QACV,iCAAa,0BAAQ,UAAU,GAAG,MAAM,mBAAmB,GAAG,MAAM;AAAA,EACtE;AACF;AAGO,SAAS,WAAW,MAAsB;AAC/C,aAAO,+BAAW,QAAQ,EAAE,WAAO,6BAAa,IAAI,CAAC,EAAE,OAAO,KAAK;AACrE;AAYO,SAAS,oBAAoB,MAAc,eAAe,GAAsB;AACrF,QAAM,WAAW,KAAK;AAAA,QACpB,iCAAa,0BAAQ,KAAK,eAAe,GAAG,MAAM;AAAA,EACpD;AACA,QAAM,aAAgC,CAAC;AACvC,aAAW,WAAW,SAAS,UAAU;AACvC,UAAM,SAAS,eAAW,0BAAQ,KAAK,QAAQ,IAAI,CAAC;AACpD,QAAI,WAAW,QAAQ,QAAQ;AAC7B,iBAAW,KAAK,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,uBAAyC;AACvD,SAAO,SAA2B,wBAAwB;AAC5D;AAGO,SAAS,eAAe,QAAqC;AAClE,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Typed loaders for the language-neutral parity fixtures produced by the Python\n * oracle (`~/repos/bourdon/tools/gen_conformance.py`). Python is the source of\n * truth; the @getbourdon/* TypeScript mirror asserts against these exact bytes.\n *\n * Resolution order:\n * 1. `BOURDON_CONFORMANCE_DIR` env var — the oracle checkout (parity tests +\n * oracle dev use this; highest priority so a build always asserts against\n * the live oracle).\n * 2. the fixtures BUNDLED in this package (`<pkg>/fixtures`, shipped in the\n * tarball) — what an installed `@getbourdon/conformance` consumer gets.\n * 3. the sibling Python checkout `../../bourdon/conformance` — dev fallback.\n *\n * The bundled copy is a vendored snapshot refreshed from the oracle by\n * `pnpm --filter @getbourdon/conformance sync-fixtures` (and in the release\n * workflow before publish), so the published package is self-contained.\n */\n\n// `import.meta.url` in ESM; esbuild empties it in the CJS bundle, where the\n// native `__dirname` global is the real directory — fall back to it.\ndeclare const __dirname: string | undefined;\nfunction moduleDir(): string {\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return dirname(fileURLToPath(import.meta.url));\n }\n return typeof __dirname !== \"undefined\" ? __dirname : process.cwd();\n}\n\nexport interface RedactionSecretCase {\n /** Joined at load (`assembleSecret`) so no contiguous secret literal lands in git. */\n fragments: string[];\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBenignCase {\n text: string;\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBattery {\n redacted_sentinel: string;\n benign_limit: number;\n secrets: RedactionSecretCase[];\n benign: RedactionBenignCase[];\n}\n\nexport interface ConformanceFixtureMeta {\n path: string;\n sha256: string;\n producer: string;\n}\n\nexport interface ConformanceManifest {\n conformance_version: string;\n produced_against: { bourdon_version: string };\n fixtures: ConformanceFixtureMeta[];\n}\n\nexport function conformanceDir(): string {\n const override = process.env.BOURDON_CONFORMANCE_DIR;\n if (override) return override;\n // Bundled snapshot: <pkg>/fixtures, one level up from src/ or dist/.\n const bundled = resolve(moduleDir(), \"..\", \"fixtures\");\n if (existsSync(resolve(bundled, \"manifest.json\"))) return bundled;\n // Dev fallback: the sibling Python oracle checkout.\n return resolve(process.cwd(), \"..\", \"..\", \"bourdon\", \"conformance\");\n}\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(resolve(conformanceDir(), name), \"utf8\")) as T;\n}\n\nexport function loadManifest(): ConformanceManifest {\n return loadJson<ConformanceManifest>(\"manifest.json\");\n}\n\nexport interface FixturePin {\n conformance_version: string;\n manifest_sha256: string;\n}\n\n/** The recorded fixture pin committed beside this package: which contract\n * version the vendored snapshot is, and the sha256 the manifest must hash to. */\nexport function loadPin(): FixturePin {\n return JSON.parse(\n readFileSync(resolve(moduleDir(), \"..\", \"fixtures.pin.json\"), \"utf8\"),\n ) as FixturePin;\n}\n\n/** sha256 hex of one file's raw bytes. */\nexport function sha256File(path: string): string {\n return createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\");\n}\n\nexport interface FixtureMismatch {\n path: string;\n expected: string;\n actual: string;\n}\n\n/** Verify every fixture in `dir` against the sha256 its manifest stamps.\n * Returns the mismatches — an empty array is the only passing result. The\n * same routine backs the parity gate AND its mutation test, so the check\n * that guards releases is itself provably able to fail. */\nexport function verifyFixtureHashes(dir: string = conformanceDir()): FixtureMismatch[] {\n const manifest = JSON.parse(\n readFileSync(resolve(dir, \"manifest.json\"), \"utf8\"),\n ) as ConformanceManifest;\n const mismatches: FixtureMismatch[] = [];\n for (const fixture of manifest.fixtures) {\n const actual = sha256File(resolve(dir, fixture.path));\n if (actual !== fixture.sha256) {\n mismatches.push({ path: fixture.path, expected: fixture.sha256, actual });\n }\n }\n return mismatches;\n}\n\nexport function loadRedactionBattery(): RedactionBattery {\n return loadJson<RedactionBattery>(\"redaction_battery.json\");\n}\n\n/** Reconstruct a secret case's runtime string from its fragments. */\nexport function assembleSecret(secret: RedactionSecretCase): string {\n return secret.fragments.join(\"\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAA2B;AAC3B,qBAAyC;AACzC,uBAAiC;AACjC,sBAA8B;AAJ9B;AA2BA,SAAS,YAAoB;AAC3B,MAAI,OAAO,gBAAgB,eAAe,YAAY,KAAK;AACzD,eAAO,8BAAQ,+BAAc,YAAY,GAAG,CAAC;AAAA,EAC/C;AACA,SAAO,OAAO,cAAc,cAAc,YAAY,QAAQ,IAAI;AACpE;AAkCO,SAAS,iBAAyB;AACvC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AAErB,QAAM,cAAU,0BAAQ,UAAU,GAAG,MAAM,UAAU;AACrD,UAAI,+BAAW,0BAAQ,SAAS,eAAe,CAAC,EAAG,QAAO;AAE1D,aAAO,0BAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM,WAAW,aAAa;AACpE;AAEA,SAAS,SAAY,MAAiB;AACpC,SAAO,KAAK,UAAM,iCAAa,0BAAQ,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE;AAEO,SAAS,eAAoC;AAClD,SAAO,SAA8B,eAAe;AACtD;AASO,SAAS,UAAsB;AACpC,SAAO,KAAK;AAAA,QACV,iCAAa,0BAAQ,UAAU,GAAG,MAAM,mBAAmB,GAAG,MAAM;AAAA,EACtE;AACF;AAGO,SAAS,WAAW,MAAsB;AAC/C,aAAO,+BAAW,QAAQ,EAAE,WAAO,6BAAa,IAAI,CAAC,EAAE,OAAO,KAAK;AACrE;AAYO,SAAS,oBAAoB,MAAc,eAAe,GAAsB;AACrF,QAAM,WAAW,KAAK;AAAA,QACpB,iCAAa,0BAAQ,KAAK,eAAe,GAAG,MAAM;AAAA,EACpD;AACA,QAAM,aAAgC,CAAC;AACvC,aAAW,WAAW,SAAS,UAAU;AACvC,UAAM,SAAS,eAAW,0BAAQ,KAAK,QAAQ,IAAI,CAAC;AACpD,QAAI,WAAW,QAAQ,QAAQ;AAC7B,iBAAW,KAAK,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,uBAAyC;AACvD,SAAO,SAA2B,wBAAwB;AAC5D;AAGO,SAAS,eAAe,QAAqC;AAClE,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;","names":[]}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: Apache-2.0
1
2
  import { createHash } from "node:crypto";
2
3
  import { existsSync, readFileSync } from "node:fs";
3
4
  import { dirname, resolve } from "node:path";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Typed loaders for the language-neutral parity fixtures produced by the Python\n * oracle (`~/repos/bourdon/tools/gen_conformance.py`). Python is the source of\n * truth; the @getbourdon/* TypeScript mirror asserts against these exact bytes.\n *\n * Resolution order:\n * 1. `BOURDON_CONFORMANCE_DIR` env var — the oracle checkout (parity tests +\n * oracle dev use this; highest priority so a build always asserts against\n * the live oracle).\n * 2. the fixtures BUNDLED in this package (`<pkg>/fixtures`, shipped in the\n * tarball) — what an installed `@getbourdon/conformance` consumer gets.\n * 3. the sibling Python checkout `../../bourdon/conformance` — dev fallback.\n *\n * The bundled copy is a vendored snapshot refreshed from the oracle by\n * `pnpm --filter @getbourdon/conformance sync-fixtures` (and in the release\n * workflow before publish), so the published package is self-contained.\n */\n\n// `import.meta.url` in ESM; esbuild empties it in the CJS bundle, where the\n// native `__dirname` global is the real directory — fall back to it.\ndeclare const __dirname: string | undefined;\nfunction moduleDir(): string {\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return dirname(fileURLToPath(import.meta.url));\n }\n return typeof __dirname !== \"undefined\" ? __dirname : process.cwd();\n}\n\nexport interface RedactionSecretCase {\n /** Joined at load (`assembleSecret`) so no contiguous secret literal lands in git. */\n fragments: string[];\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBenignCase {\n text: string;\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBattery {\n redacted_sentinel: string;\n benign_limit: number;\n secrets: RedactionSecretCase[];\n benign: RedactionBenignCase[];\n}\n\nexport interface ConformanceFixtureMeta {\n path: string;\n sha256: string;\n producer: string;\n}\n\nexport interface ConformanceManifest {\n conformance_version: string;\n produced_against: { bourdon_version: string };\n fixtures: ConformanceFixtureMeta[];\n}\n\nexport function conformanceDir(): string {\n const override = process.env.BOURDON_CONFORMANCE_DIR;\n if (override) return override;\n // Bundled snapshot: <pkg>/fixtures, one level up from src/ or dist/.\n const bundled = resolve(moduleDir(), \"..\", \"fixtures\");\n if (existsSync(resolve(bundled, \"manifest.json\"))) return bundled;\n // Dev fallback: the sibling Python oracle checkout.\n return resolve(process.cwd(), \"..\", \"..\", \"bourdon\", \"conformance\");\n}\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(resolve(conformanceDir(), name), \"utf8\")) as T;\n}\n\nexport function loadManifest(): ConformanceManifest {\n return loadJson<ConformanceManifest>(\"manifest.json\");\n}\n\nexport interface FixturePin {\n conformance_version: string;\n manifest_sha256: string;\n}\n\n/** The recorded fixture pin committed beside this package: which contract\n * version the vendored snapshot is, and the sha256 the manifest must hash to. */\nexport function loadPin(): FixturePin {\n return JSON.parse(\n readFileSync(resolve(moduleDir(), \"..\", \"fixtures.pin.json\"), \"utf8\"),\n ) as FixturePin;\n}\n\n/** sha256 hex of one file's raw bytes. */\nexport function sha256File(path: string): string {\n return createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\");\n}\n\nexport interface FixtureMismatch {\n path: string;\n expected: string;\n actual: string;\n}\n\n/** Verify every fixture in `dir` against the sha256 its manifest stamps.\n * Returns the mismatches — an empty array is the only passing result. The\n * same routine backs the parity gate AND its mutation test, so the check\n * that guards releases is itself provably able to fail. */\nexport function verifyFixtureHashes(dir: string = conformanceDir()): FixtureMismatch[] {\n const manifest = JSON.parse(\n readFileSync(resolve(dir, \"manifest.json\"), \"utf8\"),\n ) as ConformanceManifest;\n const mismatches: FixtureMismatch[] = [];\n for (const fixture of manifest.fixtures) {\n const actual = sha256File(resolve(dir, fixture.path));\n if (actual !== fixture.sha256) {\n mismatches.push({ path: fixture.path, expected: fixture.sha256, actual });\n }\n }\n return mismatches;\n}\n\nexport function loadRedactionBattery(): RedactionBattery {\n return loadJson<RedactionBattery>(\"redaction_battery.json\");\n}\n\n/** Reconstruct a secret case's runtime string from its fragments. */\nexport function assembleSecret(secret: RedactionSecretCase): string {\n return secret.fragments.join(\"\");\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAC3B,SAAS,YAAY,oBAAoB;AACzC,SAAS,SAAS,eAAe;AACjC,SAAS,qBAAqB;AAuB9B,SAAS,YAAoB;AAC3B,MAAI,OAAO,gBAAgB,eAAe,YAAY,KAAK;AACzD,WAAO,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,EAC/C;AACA,SAAO,OAAO,cAAc,cAAc,YAAY,QAAQ,IAAI;AACpE;AAkCO,SAAS,iBAAyB;AACvC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AAErB,QAAM,UAAU,QAAQ,UAAU,GAAG,MAAM,UAAU;AACrD,MAAI,WAAW,QAAQ,SAAS,eAAe,CAAC,EAAG,QAAO;AAE1D,SAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM,WAAW,aAAa;AACpE;AAEA,SAAS,SAAY,MAAiB;AACpC,SAAO,KAAK,MAAM,aAAa,QAAQ,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE;AAEO,SAAS,eAAoC;AAClD,SAAO,SAA8B,eAAe;AACtD;AASO,SAAS,UAAsB;AACpC,SAAO,KAAK;AAAA,IACV,aAAa,QAAQ,UAAU,GAAG,MAAM,mBAAmB,GAAG,MAAM;AAAA,EACtE;AACF;AAGO,SAAS,WAAW,MAAsB;AAC/C,SAAO,WAAW,QAAQ,EAAE,OAAO,aAAa,IAAI,CAAC,EAAE,OAAO,KAAK;AACrE;AAYO,SAAS,oBAAoB,MAAc,eAAe,GAAsB;AACrF,QAAM,WAAW,KAAK;AAAA,IACpB,aAAa,QAAQ,KAAK,eAAe,GAAG,MAAM;AAAA,EACpD;AACA,QAAM,aAAgC,CAAC;AACvC,aAAW,WAAW,SAAS,UAAU;AACvC,UAAM,SAAS,WAAW,QAAQ,KAAK,QAAQ,IAAI,CAAC;AACpD,QAAI,WAAW,QAAQ,QAAQ;AAC7B,iBAAW,KAAK,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,uBAAyC;AACvD,SAAO,SAA2B,wBAAwB;AAC5D;AAGO,SAAS,eAAe,QAAqC;AAClE,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Typed loaders for the language-neutral parity fixtures produced by the Python\n * oracle (`~/repos/bourdon/tools/gen_conformance.py`). Python is the source of\n * truth; the @getbourdon/* TypeScript mirror asserts against these exact bytes.\n *\n * Resolution order:\n * 1. `BOURDON_CONFORMANCE_DIR` env var — the oracle checkout (parity tests +\n * oracle dev use this; highest priority so a build always asserts against\n * the live oracle).\n * 2. the fixtures BUNDLED in this package (`<pkg>/fixtures`, shipped in the\n * tarball) — what an installed `@getbourdon/conformance` consumer gets.\n * 3. the sibling Python checkout `../../bourdon/conformance` — dev fallback.\n *\n * The bundled copy is a vendored snapshot refreshed from the oracle by\n * `pnpm --filter @getbourdon/conformance sync-fixtures` (and in the release\n * workflow before publish), so the published package is self-contained.\n */\n\n// `import.meta.url` in ESM; esbuild empties it in the CJS bundle, where the\n// native `__dirname` global is the real directory — fall back to it.\ndeclare const __dirname: string | undefined;\nfunction moduleDir(): string {\n if (typeof import.meta !== \"undefined\" && import.meta.url) {\n return dirname(fileURLToPath(import.meta.url));\n }\n return typeof __dirname !== \"undefined\" ? __dirname : process.cwd();\n}\n\nexport interface RedactionSecretCase {\n /** Joined at load (`assembleSecret`) so no contiguous secret literal lands in git. */\n fragments: string[];\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBenignCase {\n text: string;\n expect_redacted: string;\n expect_contains_secret: boolean;\n}\n\nexport interface RedactionBattery {\n redacted_sentinel: string;\n benign_limit: number;\n secrets: RedactionSecretCase[];\n benign: RedactionBenignCase[];\n}\n\nexport interface ConformanceFixtureMeta {\n path: string;\n sha256: string;\n producer: string;\n}\n\nexport interface ConformanceManifest {\n conformance_version: string;\n produced_against: { bourdon_version: string };\n fixtures: ConformanceFixtureMeta[];\n}\n\nexport function conformanceDir(): string {\n const override = process.env.BOURDON_CONFORMANCE_DIR;\n if (override) return override;\n // Bundled snapshot: <pkg>/fixtures, one level up from src/ or dist/.\n const bundled = resolve(moduleDir(), \"..\", \"fixtures\");\n if (existsSync(resolve(bundled, \"manifest.json\"))) return bundled;\n // Dev fallback: the sibling Python oracle checkout.\n return resolve(process.cwd(), \"..\", \"..\", \"bourdon\", \"conformance\");\n}\n\nfunction loadJson<T>(name: string): T {\n return JSON.parse(readFileSync(resolve(conformanceDir(), name), \"utf8\")) as T;\n}\n\nexport function loadManifest(): ConformanceManifest {\n return loadJson<ConformanceManifest>(\"manifest.json\");\n}\n\nexport interface FixturePin {\n conformance_version: string;\n manifest_sha256: string;\n}\n\n/** The recorded fixture pin committed beside this package: which contract\n * version the vendored snapshot is, and the sha256 the manifest must hash to. */\nexport function loadPin(): FixturePin {\n return JSON.parse(\n readFileSync(resolve(moduleDir(), \"..\", \"fixtures.pin.json\"), \"utf8\"),\n ) as FixturePin;\n}\n\n/** sha256 hex of one file's raw bytes. */\nexport function sha256File(path: string): string {\n return createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\");\n}\n\nexport interface FixtureMismatch {\n path: string;\n expected: string;\n actual: string;\n}\n\n/** Verify every fixture in `dir` against the sha256 its manifest stamps.\n * Returns the mismatches — an empty array is the only passing result. The\n * same routine backs the parity gate AND its mutation test, so the check\n * that guards releases is itself provably able to fail. */\nexport function verifyFixtureHashes(dir: string = conformanceDir()): FixtureMismatch[] {\n const manifest = JSON.parse(\n readFileSync(resolve(dir, \"manifest.json\"), \"utf8\"),\n ) as ConformanceManifest;\n const mismatches: FixtureMismatch[] = [];\n for (const fixture of manifest.fixtures) {\n const actual = sha256File(resolve(dir, fixture.path));\n if (actual !== fixture.sha256) {\n mismatches.push({ path: fixture.path, expected: fixture.sha256, actual });\n }\n }\n return mismatches;\n}\n\nexport function loadRedactionBattery(): RedactionBattery {\n return loadJson<RedactionBattery>(\"redaction_battery.json\");\n}\n\n/** Reconstruct a secret case's runtime string from its fragments. */\nexport function assembleSecret(secret: RedactionSecretCase): string {\n return secret.fragments.join(\"\");\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B,SAAS,YAAY,oBAAoB;AACzC,SAAS,SAAS,eAAe;AACjC,SAAS,qBAAqB;AAuB9B,SAAS,YAAoB;AAC3B,MAAI,OAAO,gBAAgB,eAAe,YAAY,KAAK;AACzD,WAAO,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,EAC/C;AACA,SAAO,OAAO,cAAc,cAAc,YAAY,QAAQ,IAAI;AACpE;AAkCO,SAAS,iBAAyB;AACvC,QAAM,WAAW,QAAQ,IAAI;AAC7B,MAAI,SAAU,QAAO;AAErB,QAAM,UAAU,QAAQ,UAAU,GAAG,MAAM,UAAU;AACrD,MAAI,WAAW,QAAQ,SAAS,eAAe,CAAC,EAAG,QAAO;AAE1D,SAAO,QAAQ,QAAQ,IAAI,GAAG,MAAM,MAAM,WAAW,aAAa;AACpE;AAEA,SAAS,SAAY,MAAiB;AACpC,SAAO,KAAK,MAAM,aAAa,QAAQ,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE;AAEO,SAAS,eAAoC;AAClD,SAAO,SAA8B,eAAe;AACtD;AASO,SAAS,UAAsB;AACpC,SAAO,KAAK;AAAA,IACV,aAAa,QAAQ,UAAU,GAAG,MAAM,mBAAmB,GAAG,MAAM;AAAA,EACtE;AACF;AAGO,SAAS,WAAW,MAAsB;AAC/C,SAAO,WAAW,QAAQ,EAAE,OAAO,aAAa,IAAI,CAAC,EAAE,OAAO,KAAK;AACrE;AAYO,SAAS,oBAAoB,MAAc,eAAe,GAAsB;AACrF,QAAM,WAAW,KAAK;AAAA,IACpB,aAAa,QAAQ,KAAK,eAAe,GAAG,MAAM;AAAA,EACpD;AACA,QAAM,aAAgC,CAAC;AACvC,aAAW,WAAW,SAAS,UAAU;AACvC,UAAM,SAAS,WAAW,QAAQ,KAAK,QAAQ,IAAI,CAAC;AACpD,QAAI,WAAW,QAAQ,QAAQ;AAC7B,iBAAW,KAAK,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,uBAAyC;AACvD,SAAO,SAA2B,wBAAwB;AAC5D;AAGO,SAAS,eAAe,QAAqC;AAClE,SAAO,OAAO,UAAU,KAAK,EAAE;AACjC;","names":[]}
@@ -2,6 +2,8 @@
2
2
  "_doc": "Cross-impl federation leak-audit parity. Oracle = bourdon.core.leak_audit.audit_manifest. Each case feeds `manifest` through the auditor; `expected_findings` pins [{kind, location}] in the oracle's emission order (visibility entities, visibility sessions, then the total credential walk). kind in {'credential','visibility'}; location is a json-path like 'known_entities[0].summary'. audit_manifest NEVER raises -- garbage manifests yield []. Credential cases use keyword-shaped triggers only; no token literal is committed.",
3
3
  "audit_schema_version": "federation-leak-audit/v1",
4
4
  "private_tag_families": [
5
+ "client-confidential",
6
+ "confidential",
5
7
  "credential",
6
8
  "family",
7
9
  "financial",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_doc": "Index of cross-impl parity fixtures. conformance_version bumps on any fixture change (patch=added cases, minor=new family, major=changed expected-output = a reviewed behavior change). Python is the oracle; this file is generated by tools/gen_conformance.py.",
3
- "conformance_version": "2.5.0",
3
+ "conformance_version": "5.1.0",
4
4
  "produced_against": {
5
- "bourdon_version": "0.17.0"
5
+ "bourdon_version": "0.24.0"
6
6
  },
7
7
  "fixtures": [
8
8
  {
@@ -12,17 +12,17 @@
12
12
  },
13
13
  {
14
14
  "path": "leak_cases.json",
15
- "sha256": "4142107183dd967d00fc6f4b3678a84270480fb146a6e1c51dead7fa625ae685",
15
+ "sha256": "c1a221aa35b2d6a82845ce76fa3885f0187b24a67c37711d9f6f4f6c8cfedc03",
16
16
  "producer": "tools/gen_conformance.py::leak_cases"
17
17
  },
18
18
  {
19
19
  "path": "recognition_vectors.json",
20
- "sha256": "248b2af23e35f6e1e86a918896ba4243e7edc54aa30daabc0f4b32e260c47bc1",
20
+ "sha256": "5f19085be347d089774a79c12aa16ec41885f6d9f5e2bd83799d92a607314251",
21
21
  "producer": "tools/gen_conformance.py::recognition_vectors"
22
22
  },
23
23
  {
24
24
  "path": "recognition_golden_v1.yaml",
25
- "sha256": "9059e2615118a934b2ec3523c06238345de4aac5138d99611418cc70eeb53956",
25
+ "sha256": "644cab8367f7915fbe2b7ab184573b9f24cf66c8bf6d44d411775920a0c0fd9b",
26
26
  "producer": "tools/gen_conformance.py::recognition_vectors"
27
27
  },
28
28
  {
@@ -137,7 +137,7 @@
137
137
  },
138
138
  {
139
139
  "path": "tier_matrix.json",
140
- "sha256": "9753ad1fd4a092bdf4110b3b24576f2bfe7001d6d6758ef55047ee5da851e25c",
140
+ "sha256": "92954294831c3c5b318b73ae7deae8e338fb2f8d3c4ddfac3b1dd09b9b6b7c0a",
141
141
  "producer": "tools/gen_conformance.py::tier_matrix"
142
142
  },
143
143
  {
@@ -197,7 +197,7 @@
197
197
  },
198
198
  {
199
199
  "path": "mcp_snapshots/prepare_recognition_context_drifting.res.json",
200
- "sha256": "2d217ba56593bf6593216546c223adf0b972470632adb326bb82eb5d5996acc8",
200
+ "sha256": "0c55d6d1b55f6dc8d4bf417473b31091eb12d9f8f6ef53396d150bc6e05dd649",
201
201
  "producer": "tools/gen_conformance.py::mcp_snapshots"
202
202
  },
203
203
  {
@@ -270,6 +270,16 @@
270
270
  "sha256": "d8bf31fa8a2e23b126139e209eda1c6d3167070717122fdd53b46168cdc28853",
271
271
  "producer": "tools/gen_conformance.py::mcp_snapshots"
272
272
  },
273
+ {
274
+ "path": "mcp_snapshots/describe_caller.req.json",
275
+ "sha256": "dc8391d7a81a214547d7ceefaf9461450a809fdaa001f5668ad37309a35caae6",
276
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
277
+ },
278
+ {
279
+ "path": "mcp_snapshots/describe_caller.res.json",
280
+ "sha256": "a86d352f38c7ec13bcf83ef22f692e7c80bf1e9254105355ecb0d27b0139752a",
281
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
282
+ },
273
283
  {
274
284
  "path": "mcp_snapshots/commit_to_federation.req.json",
275
285
  "sha256": "07c43423cb303a567214217063c7c0b0d7629e1ec91c6f79c5b56858315ae2d8",
@@ -297,7 +307,7 @@
297
307
  },
298
308
  {
299
309
  "path": "mcp_snapshots/prepare_recognition_context.res.json",
300
- "sha256": "dfb2d73ddb812d41dfe8e0b17dddeb1399373904972c09cf80e0bf9daa65941f",
310
+ "sha256": "11c90ab8cb537a46e625f5fda2bcf203b0ebbc9b4337040ce79d7b1e61551561",
301
311
  "producer": "tools/gen_conformance.py::mcp_snapshots"
302
312
  },
303
313
  {
@@ -310,6 +320,36 @@
310
320
  "sha256": "d662fd546ee6ba3315a751d68d2d096b5d21d338cf3c65970f09431f666f5e6b",
311
321
  "producer": "tools/gen_conformance.py::mcp_snapshots"
312
322
  },
323
+ {
324
+ "path": "mcp_snapshots/trace_entity.req.json",
325
+ "sha256": "543ae888dedad51fdf2872dc32a130a348deec7bfd19571a5e0ea2235cdf014e",
326
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
327
+ },
328
+ {
329
+ "path": "mcp_snapshots/trace_entity.res.json",
330
+ "sha256": "980c6b6fec01a06453ebc80204da03a553bdfbe3d069ae5ce6c8fa511f1c99cf",
331
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
332
+ },
333
+ {
334
+ "path": "mcp_snapshots/ingest_meeting.req.json",
335
+ "sha256": "7bdac92f1f2374639e1088c7f048e5c5a732c53d32a21766af3555102d420b63",
336
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
337
+ },
338
+ {
339
+ "path": "mcp_snapshots/ingest_meeting.res.json",
340
+ "sha256": "434ccc3f41e274ade88da857eddda5ab550e1fd8ec23328d929cc768c881b6aa",
341
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
342
+ },
343
+ {
344
+ "path": "mcp_snapshots/compile_turn.req.json",
345
+ "sha256": "64e17a2db8d624a4f26a8a0601f3967d1ec96d149b555bf52251d7b6200aea69",
346
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
347
+ },
348
+ {
349
+ "path": "mcp_snapshots/compile_turn.res.json",
350
+ "sha256": "5c35e344307a200e71ad83fef9ff6e7eaed79c1f77cb897f32b59ffa9f5ef282",
351
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
352
+ },
313
353
  {
314
354
  "path": "mcp_snapshots/get_deeper_context.req.json",
315
355
  "sha256": "ca5d6f3472a3a74b1710e8ee093e5648b737bf6635656a21306ef73656fd533f",
@@ -320,6 +360,46 @@
320
360
  "sha256": "c92ec338c23f2cdc3f1215751812c7f5c2c08aa86fb3ff097288e4c831313053",
321
361
  "producer": "tools/gen_conformance.py::mcp_snapshots"
322
362
  },
363
+ {
364
+ "path": "mcp_snapshots/search_federation.req.json",
365
+ "sha256": "ec8da2fb5d95ac050afe2cd3ff3335f10b003338a5f7c832cbb78abc3e77df79",
366
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
367
+ },
368
+ {
369
+ "path": "mcp_snapshots/search_federation.res.json",
370
+ "sha256": "1db5bfed711a2ccba3478a26e4e189d8124edbd83921c1ecf1f87590fac60463",
371
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
372
+ },
373
+ {
374
+ "path": "mcp_snapshots/capture_clip.req.json",
375
+ "sha256": "e640f67b05c7465bc4dc05f3e3e884f12b41861e0cc155bd9e061e75eb100e61",
376
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
377
+ },
378
+ {
379
+ "path": "mcp_snapshots/capture_clip.res.json",
380
+ "sha256": "e6f2f77a7593c8de234d3f1baf50424f267634d0f45ca60b05ac833f2f28acdf",
381
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
382
+ },
383
+ {
384
+ "path": "mcp_snapshots/propose_consensus.req.json",
385
+ "sha256": "e63fb8dfae9b4ba6db1893cd79e0331c82dc32c0e1a57d79859f856282ad9efe",
386
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
387
+ },
388
+ {
389
+ "path": "mcp_snapshots/propose_consensus.res.json",
390
+ "sha256": "357ce9ab7d9ceef757900996050b7758793e6a75880c2f580e42b7a767dd4522",
391
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
392
+ },
393
+ {
394
+ "path": "mcp_snapshots/vote_consensus.req.json",
395
+ "sha256": "c4dcfa2af2c95cff0f97d2e49b3fe197444ede4302e63f1ef55898f3519e0ced",
396
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
397
+ },
398
+ {
399
+ "path": "mcp_snapshots/vote_consensus.res.json",
400
+ "sha256": "b244f65eeed1edfb9468acbbd6d6449a660388bae59bde0b6d4cb9c5d89f06b0",
401
+ "producer": "tools/gen_conformance.py::mcp_snapshots"
402
+ },
323
403
  {
324
404
  "path": "mcp_snapshots/list_memory_versions.req.json",
325
405
  "sha256": "d74a7d4ca7aaef454887f3a84e7db9d01a9141899a2d3a2e4dd43863a09c67df",
@@ -352,12 +432,12 @@
352
432
  },
353
433
  {
354
434
  "path": "mcp_snapshots/seed_library.json",
355
- "sha256": "f0210a4b63af53728f3d7a1f56baede0bc110ad902a36530b2b35312c71e69ff",
435
+ "sha256": "4315d9be6b52c899d7d3f0449e243fc0a8baa31f53eec141314cd526c9d29095",
356
436
  "producer": "tools/gen_conformance.py::mcp_snapshots"
357
437
  },
358
438
  {
359
439
  "path": "mcp_snapshots/_normalizer.json",
360
- "sha256": "438071a3b1de83fb23083fd9ad2d4a734a27032d84faabf9d5772f14779a1721",
440
+ "sha256": "43db802a917f5ed286384ba175d3ec336a4a72fb48a99257ad9865b826f4c6ea",
361
441
  "producer": "tools/gen_conformance.py::mcp_snapshots"
362
442
  },
363
443
  {
@@ -437,7 +517,7 @@
437
517
  },
438
518
  {
439
519
  "path": "turn_compiler_vectors.json",
440
- "sha256": "add466b02d93cd706c92cdd1f0a2c43b9d633efe19d7ae0319eaa2ade7530f38",
520
+ "sha256": "d8649a227bc4ae0d3760f76dc424a67a4402446742e5d27aa6b31113ce9d7e71",
441
521
  "producer": "tools/gen_conformance.py::turn_compiler_vectors"
442
522
  }
443
523
  ]
@@ -154,6 +154,8 @@
154
154
  "float_precision": 4,
155
155
  "freeze_fields": [
156
156
  "age_s",
157
+ "clip_id",
158
+ "created_at",
157
159
  "digest",
158
160
  "generated_at",
159
161
  "generated_from",
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "content": "Bourdon research note",
4
+ "title": "Bourdon Note"
5
+ },
6
+ "tool": "capture_clip"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "access_level": "team",
3
+ "agent_id": "operator",
4
+ "clip_id": "<frozen>",
5
+ "ok": true,
6
+ "title": "Bourdon Note"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "access_level": "team",
4
+ "prompt": "Bourdon recognition"
5
+ },
6
+ "tool": "compile_turn"
7
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "_status": "deferred",
3
+ "reason": "compile_turn output is environment-bound (resolves the live cwd, git repo name + remote, and repo-identity scoring) and is not a portable cross-impl parity fixture until a TS universal turn compiler lands. The req pins the tool surface + arg defaults; the res is this deferred stub.",
4
+ "schema_version": "bourdon.turn-brief/v1"
5
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "args": {},
3
+ "tool": "describe_caller"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "error": "not_configured",
3
+ "version": 1
4
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "access_level": "team",
4
+ "content": "# Weekly Sync\nDate: 2026-06-09\nAttendees: ada, grace\n\n## Decisions\n- Adopt the meetings participant\n"
5
+ },
6
+ "tool": "ingest_meeting"
7
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "actions_count": 0,
3
+ "attendees": [
4
+ "ada",
5
+ "grace"
6
+ ],
7
+ "commit": {
8
+ "agent_id": "meetings",
9
+ "digest": "<frozen>",
10
+ "entities_added": 0,
11
+ "entities_updated": 0,
12
+ "last_updated": "<frozen>",
13
+ "mode": "merge",
14
+ "notes_added": 0,
15
+ "notes_updated": 0,
16
+ "path": "<frozen>",
17
+ "sessions_added": 1,
18
+ "sessions_updated": 0,
19
+ "total_entities": 0,
20
+ "total_notes": 0,
21
+ "total_sessions": 1,
22
+ "total_workstreams": 0,
23
+ "workstreams_added": 0,
24
+ "workstreams_updated": 0
25
+ },
26
+ "date": "2026-06-09",
27
+ "decisions_count": 1,
28
+ "entities_count": 0,
29
+ "notes_count": 0,
30
+ "status": "ingested",
31
+ "title": "Weekly Sync",
32
+ "workstreams_count": 0
33
+ }
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "access_level": "team",
3
3
  "confidence": "medium",
4
- "hydration": "# Bourdon\n\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
5
- "hydration_chars": 310,
4
+ "hydration": "## Bourdon (project)\nknown by: claude-code, codex\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
5
+ "hydration_chars": 349,
6
6
  "hydration_scheduled": true,
7
7
  "include_private": false,
8
8
  "matched_entities": [
9
9
  {
10
+ "confidence": "medium",
10
11
  "name": "Bourdon",
11
12
  "source_agents": [
12
13
  "claude-code",
@@ -16,6 +17,6 @@
16
17
  }
17
18
  ],
18
19
  "prompt": "what about Bourdon",
19
- "prompt_context": "Bourdon recognition context\nImmediate recognition: Oh -- Bourdon, the project.\nMatched entities:\n- Bourdon (project) via claude-code, codex: Cross-agent memory federation (granted side).\nUse this as timing-layer context, not as a final answer.",
20
- "recognition": "Oh -- Bourdon, the project."
20
+ "prompt_context": "Bourdon recognition context\nBourdon (project; known by 2 agents): Federation, codex view.\nKnown by: Bourdon via claude-code, codex.\nUse this as timing-layer context, not as a final answer.",
21
+ "recognition": "Bourdon (project; known by 2 agents): Federation, codex view."
21
22
  }
@@ -8,12 +8,13 @@
8
8
  "reason": "yielded nothing this run - last yielded 400 record(s) at 2026-06-29T09:00:00Z"
9
9
  }
10
10
  ],
11
- "hydration": "# Bourdon\n\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
12
- "hydration_chars": 310,
11
+ "hydration": "## Bourdon (project)\nknown by: claude-code, codex\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
12
+ "hydration_chars": 349,
13
13
  "hydration_scheduled": true,
14
14
  "include_private": false,
15
15
  "matched_entities": [
16
16
  {
17
+ "confidence": "medium",
17
18
  "name": "Bourdon",
18
19
  "source_agents": [
19
20
  "claude-code",
@@ -23,6 +24,6 @@
23
24
  }
24
25
  ],
25
26
  "prompt": "what about Bourdon",
26
- "prompt_context": "Bourdon recognition context\nImmediate recognition: Oh -- Bourdon, the project.\nMatched entities:\n- Bourdon (project) via claude-code, codex: Cross-agent memory federation (granted side).\nUse this as timing-layer context, not as a final answer.",
27
- "recognition": "Oh -- Bourdon, the project."
27
+ "prompt_context": "Bourdon recognition context\nBourdon (project; known by 2 agents): Federation, codex view.\nKnown by: Bourdon via claude-code, codex.\nUse this as timing-layer context, not as a final answer.",
28
+ "recognition": "Bourdon (project; known by 2 agents): Federation, codex view."
28
29
  }
@@ -0,0 +1,11 @@
1
+ {
2
+ "args": {
3
+ "options": [
4
+ "Option A",
5
+ "Option B"
6
+ ],
7
+ "proposal_id": "prop_snapshot",
8
+ "topic": "Federation Protocol"
9
+ },
10
+ "tool": "propose_consensus"
11
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "created_at": "<frozen>",
3
+ "metadata": {
4
+ "description": "",
5
+ "strategy": "majority"
6
+ },
7
+ "options": [
8
+ "Option A",
9
+ "Option B"
10
+ ],
11
+ "proposal_id": "prop_snapshot",
12
+ "proposed_by": "operator",
13
+ "quorum": 2,
14
+ "status": "active",
15
+ "topic": "Federation Protocol",
16
+ "votes": {}
17
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "query": "Bourdon",
4
+ "top_k": 5
5
+ },
6
+ "tool": "search_federation"
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "query": "Bourdon",
3
+ "total_matches": 0
4
+ }
@@ -1,11 +1,12 @@
1
1
  {
2
- "_doc": "The mcp_snapshots/*.res.json were produced by driving the live create_l6_server tool + resource closures (OPERATOR / trusted, = stdio) over a TEMP copy of this seed library, then normalizing each response. Every tool and resource the server registers is covered (the generator refuses to emit otherwise). The TS mirror loads the SAME seed and must reproduce every normalized res. Each payload travels the wire as a single TextContent whose .text = json.dumps(payload); the snapshot is the json.loads of that text. resource_* snapshots are taken FIRST (pure seed view); rollback_agent_memory runs LAST (it restores the seeded prior version of claude-code).",
2
+ "_doc": "The mcp_snapshots/*.res.json were produced by driving the live create_l6_server tool + resource closures (OPERATOR / trusted, = stdio) over a TEMP copy of this seed library, then normalizing each response. Every tool and resource the server registers is covered (the generator refuses to emit otherwise). The TS mirror loads the SAME seed and must reproduce every normalized res. Each payload travels the wire as a single TextContent whose .text = json.dumps(payload); the snapshot is the json.loads of that text. resource_* snapshots are taken FIRST (pure seed view); rollback_agent_memory runs LAST (it restores the seeded prior version of claude-code). describe_caller pins only the not_configured response because caller_audience is unset; authenticated caller behavior is not covered by this seed.",
3
3
  "caller": {
4
4
  "agent_id": "operator",
5
5
  "tier": "trusted"
6
6
  },
7
7
  "deferred": [
8
- "compile_codex_turn"
8
+ "compile_codex_turn",
9
+ "compile_turn"
9
10
  ],
10
11
  "drift_seed": {
11
12
  "_doc": "prepare_recognition_context_drifting.{req,res}.json were driven under this SEEDED participant drift watermark (written through the real participant_watermark.record writer, stamps then pinned), taken BEFORE the main tool loop and removed afterwards -- the plain prepare_recognition_context.res.json is therefore the healthy half of the pair, with drifting_surfaces ABSENT. The TS mirror must seed the SAME record to reproduce the drifting res.",
@@ -73,11 +74,19 @@
73
74
  "list_notes",
74
75
  "list_agents",
75
76
  "export_agents",
77
+ "describe_caller",
76
78
  "commit_to_federation",
77
79
  "get_cross_agent_summary",
78
80
  "prepare_recognition_context",
79
81
  "compile_codex_turn",
82
+ "trace_entity",
83
+ "ingest_meeting",
84
+ "compile_turn",
80
85
  "get_deeper_context",
86
+ "search_federation",
87
+ "capture_clip",
88
+ "propose_consensus",
89
+ "vote_consensus",
81
90
  "list_memory_versions",
82
91
  "explain_memory_change",
83
92
  "rollback_agent_memory"
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "access_level": "team",
4
+ "entity": "Bourdon"
5
+ },
6
+ "tool": "trace_entity"
7
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "aliases": [
3
+ "Continuo",
4
+ "NeuroLayer"
5
+ ],
6
+ "attributions": [
7
+ {
8
+ "agent_id": "claude-code",
9
+ "aliases": [
10
+ "Continuo",
11
+ "NeuroLayer"
12
+ ],
13
+ "first_seen": "2026-06-28T12:00:00Z",
14
+ "first_version_id": "20260628T120000000000Z-7ec802e0",
15
+ "matching_notes": [
16
+ {
17
+ "date": "2026-06-09",
18
+ "related_entities": [
19
+ "Bourdon"
20
+ ],
21
+ "text": "Public release note.",
22
+ "visibility": "public"
23
+ }
24
+ ],
25
+ "matching_sessions": [
26
+ {
27
+ "cwd": "bourdon",
28
+ "date": "2026-06-08",
29
+ "files_touched": [
30
+ "tools/gen_conformance.py"
31
+ ],
32
+ "key_actions": [
33
+ "wired tier matrix fixtures"
34
+ ],
35
+ "project_focus": [
36
+ "Bourdon"
37
+ ],
38
+ "visibility": "public"
39
+ }
40
+ ],
41
+ "matching_workstreams": [
42
+ {
43
+ "last_touched": "2026-06-10",
44
+ "name": "Release",
45
+ "related_entities": [
46
+ "Bourdon"
47
+ ],
48
+ "status": "active",
49
+ "summary": "Prepare the public Bourdon release.",
50
+ "tags": [
51
+ "launch"
52
+ ],
53
+ "visibility": "public"
54
+ }
55
+ ],
56
+ "provenance_count": 1,
57
+ "summary": "Cross-agent memory federation (granted side).",
58
+ "tags": [
59
+ "infra"
60
+ ],
61
+ "types": [
62
+ "project"
63
+ ],
64
+ "version_count": 1,
65
+ "visibility": "public"
66
+ },
67
+ {
68
+ "agent_id": "codex",
69
+ "matching_notes": [
70
+ {
71
+ "date": "2026-06-10",
72
+ "related_entities": [
73
+ "Bourdon"
74
+ ],
75
+ "text": "Codex public release note.",
76
+ "visibility": "public"
77
+ }
78
+ ],
79
+ "matching_workstreams": [
80
+ {
81
+ "last_touched": "2026-06-11",
82
+ "name": "release",
83
+ "related_entities": [
84
+ "Bourdon"
85
+ ],
86
+ "status": "paused",
87
+ "tags": [
88
+ "coordination"
89
+ ],
90
+ "visibility": "public"
91
+ }
92
+ ],
93
+ "provenance_count": 0,
94
+ "summary": "Federation, codex view.",
95
+ "types": [
96
+ "project"
97
+ ],
98
+ "version_count": 0,
99
+ "visibility": "public"
100
+ }
101
+ ],
102
+ "first_seen": "2026-06-28T12:00:00Z",
103
+ "known_by": [
104
+ "claude-code",
105
+ "codex"
106
+ ],
107
+ "matched": true,
108
+ "name": "Bourdon",
109
+ "schema_version": "bourdon.entity-trace/v1",
110
+ "tags": [
111
+ "infra"
112
+ ],
113
+ "timeline": [
114
+ {
115
+ "agent_id": "claude-code",
116
+ "description": "Bourdon",
117
+ "kind": "session",
118
+ "ref": "bourdon",
119
+ "timestamp": "2026-06-08"
120
+ },
121
+ {
122
+ "agent_id": "claude-code",
123
+ "description": "Entity observed in claude-code memory",
124
+ "kind": "entity_origin",
125
+ "ref": "20260628T120000000000Z-7ec802e0",
126
+ "timestamp": "2026-06-28T12:00:00Z"
127
+ }
128
+ ],
129
+ "types": [
130
+ "project"
131
+ ],
132
+ "visibility": "team"
133
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "args": {
3
+ "choice": "Option A",
4
+ "proposal_id": "prop_snapshot"
5
+ },
6
+ "tool": "vote_consensus"
7
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "ok": true,
3
+ "proposal": {
4
+ "created_at": "<frozen>",
5
+ "metadata": {
6
+ "description": "",
7
+ "strategy": "majority"
8
+ },
9
+ "options": [
10
+ "Option A",
11
+ "Option B"
12
+ ],
13
+ "proposal_id": "prop_snapshot",
14
+ "proposed_by": "operator",
15
+ "quorum": 2,
16
+ "status": "active",
17
+ "topic": "Federation Protocol",
18
+ "votes": {
19
+ "operator": {
20
+ "agent_id": "operator",
21
+ "confidence": 1.0,
22
+ "created_at": "<frozen>",
23
+ "option": "Option A",
24
+ "rationale": ""
25
+ }
26
+ }
27
+ },
28
+ "tally": {
29
+ "is_tie": false,
30
+ "leader": "Option A",
31
+ "margin_weighted": 1.0,
32
+ "options_summary": {
33
+ "Option A": {
34
+ "voters": [
35
+ {
36
+ "agent_id": "operator",
37
+ "confidence": 1.0,
38
+ "rationale": ""
39
+ }
40
+ ],
41
+ "votes": 1,
42
+ "weighted_score": 1.0
43
+ },
44
+ "Option B": {
45
+ "votes": 0,
46
+ "weighted_score": 0.0
47
+ }
48
+ },
49
+ "proposal_id": "prop_snapshot",
50
+ "quorum": 2,
51
+ "quorum_reached": false,
52
+ "status": "active",
53
+ "topic": "Federation Protocol",
54
+ "total_votes": 1
55
+ }
56
+ }
@@ -104,3 +104,33 @@ cases:
104
104
  - {name: Gamma}
105
105
  - {name: Delta}
106
106
  expected_entities: [Alpha, Beta, Gamma]
107
+
108
+ # Fuzzy tier (0.21.0): a long name (>= 3 meaningful terms) matches when at
109
+ # least 60% of its terms (never fewer than two) appear anywhere in the prompt.
110
+ # Here the name has five meaningful terms, so three must overlap.
111
+ - id: fuzzy-long-name-paraphrase
112
+ prompt: "how do we improve the recognition first runtime protocol"
113
+ manifest:
114
+ known_entities:
115
+ - {name: Bourdon recognition first runtime layer, type: topic}
116
+ expected_entities: [Bourdon recognition first runtime layer]
117
+ expected_confidence: medium
118
+
119
+ # Two of five terms is not enough: the fuzzy tier must not turn every
120
+ # mention of "runtime" into a recognition.
121
+ - id: fuzzy-long-name-too-little-overlap
122
+ prompt: "the runtime layer is slow today"
123
+ manifest:
124
+ known_entities:
125
+ - {name: Bourdon recognition first runtime layer, type: topic}
126
+ expected_entities: []
127
+
128
+ # Short names never take the fuzzy path: the contiguous rule (and with it the
129
+ # short-name guard) still governs them.
130
+ - id: fuzzy-never-applies-to-short-names
131
+ prompt: "the memory federation is the product"
132
+ manifest:
133
+ known_entities:
134
+ - {name: Bourdon memory federation, type: topic}
135
+ - {name: Bourdon federation, type: topic}
136
+ expected_entities: [Bourdon memory federation]
@@ -165,6 +165,113 @@
165
165
  }
166
166
  ],
167
167
  "recognition_strings": [
168
+ {
169
+ "name": "fuzzy_long_name_paraphrase",
170
+ "prompt": "how do we improve the recognition first runtime protocol",
171
+ "manifest": {
172
+ "known_entities": [
173
+ {
174
+ "name": "Bourdon recognition first runtime layer",
175
+ "type": "topic"
176
+ }
177
+ ]
178
+ },
179
+ "access_level": "team",
180
+ "matched_names": [
181
+ "Bourdon recognition first runtime layer"
182
+ ],
183
+ "recognition": "Bourdon recognition first runtime layer (topic).",
184
+ "confidence": "medium",
185
+ "entity_confidences": {
186
+ "Bourdon recognition first runtime layer": "medium"
187
+ }
188
+ },
189
+ {
190
+ "name": "fuzzy_too_little_overlap",
191
+ "prompt": "the runtime layer is slow today",
192
+ "manifest": {
193
+ "known_entities": [
194
+ {
195
+ "name": "Bourdon recognition first runtime layer",
196
+ "type": "topic"
197
+ }
198
+ ]
199
+ },
200
+ "access_level": "team",
201
+ "matched_names": [],
202
+ "recognition": "",
203
+ "confidence": "none",
204
+ "entity_confidences": {}
205
+ },
206
+ {
207
+ "name": "cluster_by_alias",
208
+ "prompt": "compare Bourdon and Continuo",
209
+ "manifest": {
210
+ "known_entities": [
211
+ {
212
+ "name": "Bourdon",
213
+ "type": "project",
214
+ "aliases": [
215
+ "Continuo"
216
+ ],
217
+ "source_agents": [
218
+ "claude-code",
219
+ "codex"
220
+ ]
221
+ },
222
+ {
223
+ "name": "Continuo",
224
+ "type": "oss-product",
225
+ "source_agents": [
226
+ "codex"
227
+ ]
228
+ }
229
+ ]
230
+ },
231
+ "access_level": "team",
232
+ "matched_names": [
233
+ "Bourdon"
234
+ ],
235
+ "recognition": "Bourdon (project; known by 2 agents; also known as Continuo).",
236
+ "confidence": "medium",
237
+ "entity_confidences": {
238
+ "Bourdon": "medium"
239
+ }
240
+ },
241
+ {
242
+ "name": "gloss_freshest_summary_stale",
243
+ "prompt": "what is Nimbletron",
244
+ "manifest": {
245
+ "known_entities": [
246
+ {
247
+ "name": "Nimbletron",
248
+ "type": "project",
249
+ "source_agents": [
250
+ "alpha",
251
+ "beta"
252
+ ],
253
+ "summaries": {
254
+ "alpha": "Nimbletron is the batch renderer for the print pipeline, owned by the platform team.",
255
+ "beta": "renderer"
256
+ },
257
+ "touched": {
258
+ "alpha": "2019-06-01",
259
+ "beta": "2020-01-01"
260
+ },
261
+ "last_touched": "2020-01-01"
262
+ }
263
+ ]
264
+ },
265
+ "access_level": "team",
266
+ "matched_names": [
267
+ "Nimbletron"
268
+ ],
269
+ "recognition": "Nimbletron (project; known by 2 agents): Nimbletron is the batch renderer for the print pipeline, owned by the platform team. Last touched 2020-01-01, may be stale.",
270
+ "confidence": "medium",
271
+ "entity_confidences": {
272
+ "Nimbletron": "medium"
273
+ }
274
+ },
168
275
  {
169
276
  "name": "single_with_type",
170
277
  "prompt": "tell me about Bourdon",
@@ -180,7 +287,7 @@
180
287
  "matched_names": [
181
288
  "Bourdon"
182
289
  ],
183
- "recognition": "Oh -- Bourdon, the project.",
290
+ "recognition": "Bourdon (project).",
184
291
  "confidence": "medium",
185
292
  "entity_confidences": {
186
293
  "Bourdon": "medium"
@@ -200,7 +307,7 @@
200
307
  "matched_names": [
201
308
  "Alpha"
202
309
  ],
203
- "recognition": "Oh -- Alpha.",
310
+ "recognition": "Alpha.",
204
311
  "confidence": "medium",
205
312
  "entity_confidences": {
206
313
  "Alpha": "medium"
@@ -230,7 +337,7 @@
230
337
  "Bourdon",
231
338
  "Zephyr"
232
339
  ],
233
- "recognition": "You're asking about Bourdon and Zephyr -- I have both.",
340
+ "recognition": "You're asking about Bourdon and Zephyr.\n- Bourdon (project).\n- Zephyr (project).",
234
341
  "confidence": "medium",
235
342
  "entity_confidences": {
236
343
  "Bourdon": "medium",
@@ -262,7 +369,7 @@
262
369
  "Beta",
263
370
  "Gamma"
264
371
  ],
265
- "recognition": "You're asking about Alpha, Beta, and Gamma -- I have all of those.",
372
+ "recognition": "You're asking about Alpha, Beta, and Gamma.\n- Alpha.\n- Beta.\n- Gamma.",
266
373
  "confidence": "medium",
267
374
  "entity_confidences": {
268
375
  "Alpha": "medium",
@@ -302,7 +409,7 @@
302
409
  "matched_names": [
303
410
  "NAS"
304
411
  ],
305
- "recognition": "Oh -- NAS, the hardware.",
412
+ "recognition": "NAS (hardware).",
306
413
  "confidence": "medium",
307
414
  "entity_confidences": {
308
415
  "NAS": "medium"
@@ -328,7 +435,7 @@
328
435
  "matched_names": [
329
436
  "PublicProj"
330
437
  ],
331
- "recognition": "Oh -- PublicProj, the project.",
438
+ "recognition": "PublicProj (project).",
332
439
  "confidence": "medium",
333
440
  "entity_confidences": {
334
441
  "PublicProj": "medium"
@@ -350,7 +457,7 @@
350
457
  "matched_names": [
351
458
  "Nimbletron"
352
459
  ],
353
- "recognition": "Oh -- Nimbletron, the project (archived 2026-01-01).",
460
+ "recognition": "Nimbletron (project; archived 2026-01-01).",
354
461
  "confidence": "medium",
355
462
  "entity_confidences": {
356
463
  "Nimbletron": "medium"
@@ -374,7 +481,7 @@
374
481
  "matched_names": [
375
482
  "LegacyThing"
376
483
  ],
377
- "recognition": "Oh -- LegacyThing, the tool (archived).",
484
+ "recognition": "LegacyThing (tool; archived).",
378
485
  "confidence": "medium",
379
486
  "entity_confidences": {
380
487
  "LegacyThing": "medium"
@@ -398,7 +505,7 @@
398
505
  "matched_names": [
399
506
  "QUIP"
400
507
  ],
401
- "recognition": "Oh -- QUIP, the product.",
508
+ "recognition": "QUIP (product).",
402
509
  "confidence": "medium",
403
510
  "entity_confidences": {
404
511
  "QUIP": "medium"
@@ -438,7 +545,7 @@
438
545
  "matched_names": [
439
546
  "Multi Word Project"
440
547
  ],
441
- "recognition": "Oh -- Multi Word Project, the project.",
548
+ "recognition": "Multi Word Project (project).",
442
549
  "confidence": "medium",
443
550
  "entity_confidences": {
444
551
  "Multi Word Project": "medium"
@@ -164,6 +164,39 @@
164
164
  "decision": "allow",
165
165
  "denial": null
166
166
  },
167
+ {
168
+ "tool": "trace_entity",
169
+ "tier": "trusted",
170
+ "namespace": null,
171
+ "granted": null,
172
+ "args": {
173
+ "entity": "Bourdon"
174
+ },
175
+ "decision": "allow",
176
+ "denial": null
177
+ },
178
+ {
179
+ "tool": "compile_turn",
180
+ "tier": "trusted",
181
+ "namespace": null,
182
+ "granted": null,
183
+ "args": {
184
+ "prompt": "what about Bourdon"
185
+ },
186
+ "decision": "allow",
187
+ "denial": null
188
+ },
189
+ {
190
+ "tool": "ingest_meeting",
191
+ "tier": "trusted",
192
+ "namespace": null,
193
+ "granted": null,
194
+ "args": {
195
+ "content": "# Weekly Sync\nDate: 2026-06-09\nAttendees: ada, grace\n\n## Decisions\n- Adopt the meetings participant\n"
196
+ },
197
+ "decision": "allow",
198
+ "denial": null
199
+ },
167
200
  {
168
201
  "tool": "query_agent_memory",
169
202
  "tier": "quarantined",
@@ -393,6 +426,57 @@
393
426
  "tier": "quarantined",
394
427
  "detail": "tier 'quarantined' may not call this tool"
395
428
  }
429
+ },
430
+ {
431
+ "tool": "trace_entity",
432
+ "tier": "quarantined",
433
+ "namespace": null,
434
+ "granted": null,
435
+ "args": {
436
+ "entity": "Bourdon"
437
+ },
438
+ "decision": "deny",
439
+ "denial": {
440
+ "error": "access denied",
441
+ "op": "trace_entity",
442
+ "agent": "openclaw",
443
+ "tier": "quarantined",
444
+ "detail": "tier 'quarantined' may not call this tool"
445
+ }
446
+ },
447
+ {
448
+ "tool": "compile_turn",
449
+ "tier": "quarantined",
450
+ "namespace": null,
451
+ "granted": null,
452
+ "args": {
453
+ "prompt": "what about Bourdon"
454
+ },
455
+ "decision": "deny",
456
+ "denial": {
457
+ "error": "access denied",
458
+ "op": "compile_turn",
459
+ "agent": "openclaw",
460
+ "tier": "quarantined",
461
+ "detail": "tier 'quarantined' may not call this tool"
462
+ }
463
+ },
464
+ {
465
+ "tool": "ingest_meeting",
466
+ "tier": "quarantined",
467
+ "namespace": null,
468
+ "granted": null,
469
+ "args": {
470
+ "content": "# Weekly Sync\nDate: 2026-06-09\nAttendees: ada, grace\n\n## Decisions\n- Adopt the meetings participant\n"
471
+ },
472
+ "decision": "deny",
473
+ "denial": {
474
+ "error": "access denied",
475
+ "op": "ingest_meeting",
476
+ "agent": "openclaw",
477
+ "tier": "quarantined",
478
+ "detail": "tier 'quarantined' may not call this tool"
479
+ }
396
480
  }
397
481
  ]
398
482
  }
@@ -67,6 +67,24 @@
67
67
  "visibility": "public"
68
68
  }
69
69
  ]
70
+ },
71
+ "fable.l5.yaml": {
72
+ "spec_version": "0.1",
73
+ "agent": {
74
+ "id": "fable",
75
+ "type": "code-assistant"
76
+ },
77
+ "last_updated": "2026-06-29T12:00:00+00:00",
78
+ "recent_sessions": [
79
+ {
80
+ "date": "2026-06-27",
81
+ "cwd": "/projects/atlas",
82
+ "key_actions": [
83
+ "- **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session"
84
+ ],
85
+ "visibility": "public"
86
+ }
87
+ ]
70
88
  }
71
89
  },
72
90
  "codex_cases": [
@@ -132,7 +150,7 @@
132
150
  ],
133
151
  "evidence": [
134
152
  "session date 2026-06-28",
135
- "cwd /projects/bourdon",
153
+ "cwd bourdon",
136
154
  "files touched: core/codex_turn_compiler.py"
137
155
  ]
138
156
  },
@@ -179,7 +197,7 @@
179
197
  ],
180
198
  "evidence": [
181
199
  "session date 2026-06-28",
182
- "cwd /projects/bourdon",
200
+ "cwd bourdon",
183
201
  "files touched: core/codex_turn_compiler.py"
184
202
  ]
185
203
  },
@@ -281,6 +299,166 @@
281
299
  }
282
300
  }
283
301
  },
302
+ {
303
+ "name": "codex_long_action_title",
304
+ "prompt": "what happened with Atlas ingest",
305
+ "cwd": "/projects/atlas",
306
+ "access_level": "team",
307
+ "recognition_confidence": "low",
308
+ "item_scores": [
309
+ {
310
+ "rank": 1,
311
+ "name": "Atlas ingest review: walked the phase 1.7 ingest plan end to end…",
312
+ "kind": "session",
313
+ "source": "l6_federation",
314
+ "score": 67.0
315
+ }
316
+ ],
317
+ "brief": {
318
+ "schema_version": "codex-turn-brief/v1",
319
+ "prompt": "what happened with Atlas ingest",
320
+ "cwd": "/projects/atlas",
321
+ "repo": {
322
+ "name": "atlas",
323
+ "root": null,
324
+ "remote": null
325
+ },
326
+ "health": {
327
+ "native_stage1": "unknown",
328
+ "strategy": "turn_compiled"
329
+ },
330
+ "routing": {
331
+ "mode": "inject",
332
+ "primary_surface": "explicit_pre_turn",
333
+ "surfaces": [
334
+ "explicit_pre_turn",
335
+ "mcp",
336
+ "repo_overlay_candidate"
337
+ ],
338
+ "confidence": "low",
339
+ "reason": "top anchor scored 67.0; source mix spans 1 surface(s); repo identity available as atlas",
340
+ "suppressed_surfaces": [
341
+ "memory_md",
342
+ "fallback_file"
343
+ ],
344
+ "next_action": "prepend delivery.explicit_text before the Codex turn"
345
+ },
346
+ "items": [
347
+ {
348
+ "rank": 1,
349
+ "score": 67.0,
350
+ "kind": "session",
351
+ "name": "Atlas ingest review: walked the phase 1.7 ingest plan end to end…",
352
+ "summary": "- **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session",
353
+ "reason": "prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence",
354
+ "source": "l6_federation",
355
+ "source_agents": [
356
+ "fable"
357
+ ],
358
+ "evidence": [
359
+ "session date 2026-06-27",
360
+ "cwd atlas"
361
+ ]
362
+ }
363
+ ],
364
+ "delivery": {
365
+ "explicit_text": "Bourdon turn recognition brief\nStrategy: turn-scoped compiler; native Stage 1 is unknown.\nRepo: atlas\nUse these as recognition anchors, not as a final answer:\n1. Atlas ingest review: walked the phase 1.7 ingest plan end to end… [session, l6_federation, score 67.0] via fable\n - **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session\n Why: prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence",
366
+ "mcp_payload": {
367
+ "schema_version": "codex-turn-brief/v1",
368
+ "strategy": "turn_compiled",
369
+ "native_stage1": "unknown",
370
+ "repo": {
371
+ "name": "atlas",
372
+ "root": null,
373
+ "remote": null
374
+ },
375
+ "items": [
376
+ {
377
+ "rank": 1,
378
+ "score": 67.0,
379
+ "kind": "session",
380
+ "name": "Atlas ingest review: walked the phase 1.7 ingest plan end to end…",
381
+ "summary": "- **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session",
382
+ "reason": "prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence",
383
+ "source": "l6_federation",
384
+ "source_agents": [
385
+ "fable"
386
+ ],
387
+ "evidence": [
388
+ "session date 2026-06-27",
389
+ "cwd atlas"
390
+ ]
391
+ }
392
+ ],
393
+ "prompt_context": "Bourdon turn recognition brief\nStrategy: turn-scoped compiler; native Stage 1 is unknown.\nRepo: atlas\nUse these as recognition anchors, not as a final answer:\n1. Atlas ingest review: walked the phase 1.7 ingest plan end to end… [session, l6_federation, score 67.0] via fable\n - **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session\n Why: prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence"
394
+ },
395
+ "memory_md_block": "<!-- BEGIN BOURDON TURN BRIEF -->\nBourdon turn recognition brief\nStrategy: turn-scoped compiler; native Stage 1 is unknown.\nRepo: atlas\nUse these as recognition anchors, not as a final answer:\n1. Atlas ingest review: walked the phase 1.7 ingest plan end to end… [session, l6_federation, score 67.0] via fable\n - **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session\n Why: prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence\n<!-- END BOURDON TURN BRIEF -->",
396
+ "fallback_block": "<!-- BEGIN Bourdon Turn Brief -->\nBourdon turn recognition brief\nStrategy: turn-scoped compiler; native Stage 1 is unknown.\nRepo: atlas\nUse these as recognition anchors, not as a final answer:\n1. Atlas ingest review: walked the phase 1.7 ingest plan end to end… [session, l6_federation, score 67.0] via fable\n - **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session\n Why: prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence\n<!-- END Bourdon Turn Brief -->",
397
+ "repo_overlay_block": "<!-- BEGIN BOURDON REPO OVERLAY CANDIDATE -->\nRepo overlay candidate for atlas\nUse only as an explicit, human-reviewed overlay candidate.\n\nBourdon turn recognition brief\nStrategy: turn-scoped compiler; native Stage 1 is unknown.\nRepo: atlas\nUse these as recognition anchors, not as a final answer:\n1. Atlas ingest review: walked the phase 1.7 ingest plan end to end… [session, l6_federation, score 67.0] via fable\n - **Atlas ingest** review: walked the phase 1.7 ingest plan end to end, argued the batching semantics, and left the backpressure question open for the next session\n Why: prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence\n<!-- END BOURDON REPO OVERLAY CANDIDATE -->"
398
+ },
399
+ "trace": {
400
+ "routing_decision": {
401
+ "primary_surface": "explicit_pre_turn",
402
+ "confidence": "low",
403
+ "reason": "top anchor scored 67.0; source mix spans 1 surface(s); repo identity available as atlas"
404
+ },
405
+ "surface_health": {
406
+ "native_stage1": "unknown",
407
+ "repo_identity": "available",
408
+ "candidate_count": 1
409
+ },
410
+ "source_mix": {
411
+ "candidates": {
412
+ "l6_federation": 1
413
+ },
414
+ "selected": {
415
+ "l6_federation": 1
416
+ },
417
+ "ignored": {}
418
+ },
419
+ "selected_items": [
420
+ {
421
+ "name": "Atlas ingest review: walked the phase 1.7 ingest plan end to end…",
422
+ "kind": "session",
423
+ "score": 67.0,
424
+ "dominant_components": [
425
+ "cwd_repo",
426
+ "prompt",
427
+ "recency"
428
+ ],
429
+ "reason": "prompt matched Atlas ingest review: walked the phase 1.7 ingest plan end to end…; cwd matched prior Codex thread; repo name matched candidate; cwd basename matched candidate; recent work; continuity evidence"
430
+ }
431
+ ]
432
+ },
433
+ "diagnostics": {
434
+ "scoring_components": {
435
+ "Atlas ingest review: walked the phase 1.7 ingest plan end to end…": {
436
+ "prompt": 24.0,
437
+ "cwd_repo": 25.0,
438
+ "recency": 12.0,
439
+ "cross_agent": 0.0,
440
+ "continuity": 6.0,
441
+ "penalty": 0.0
442
+ }
443
+ },
444
+ "candidate_count": 1,
445
+ "delivery": "all",
446
+ "max_items": 6,
447
+ "max_chars": 1800,
448
+ "stage1_jobs": {
449
+ "total": 0,
450
+ "by_status": {},
451
+ "error_classes": {}
452
+ },
453
+ "exhausted_paths": [
454
+ "native_stage1_primary",
455
+ "static_fallback_primary",
456
+ "l5_export_only",
457
+ "sync_native_only"
458
+ ]
459
+ }
460
+ }
461
+ },
284
462
  {
285
463
  "name": "codex_prompt_only",
286
464
  "prompt": "tell me about the Roadmap",
package/fixtures.pin.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "_doc": "The recorded fixture pin. CI and the package tests assert the vendored fixtures/manifest.json hashes to exactly this value, so the fixture set in any build is provably the reviewed one. Refresh via the re-pin ritual in README.md.",
3
- "conformance_version": "2.5.0",
4
- "manifest_sha256": "3e592307ebb44d694ed726d6fd3b78e8f5ebab0bc346166fa04b0d4ae07bbef2"
3
+ "conformance_version": "5.1.0",
4
+ "manifest_sha256": "cae79332b62523f48d9f306ddb74a9271ffceccda13f43ed3eeafc713c2b81bd"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getbourdon/conformance",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Language-neutral cross-implementation parity fixtures for Bourdon. Python (pip install bourdon) is the oracle; the @getbourdon/* TypeScript mirror asserts against these exact bytes.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",