@getbourdon/conformance 0.7.0 → 0.9.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.
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/fixtures/leak_cases.json +5 -4
- package/fixtures/manifest.json +82 -12
- package/fixtures/mcp_snapshots/_normalizer.json +2 -0
- package/fixtures/mcp_snapshots/capture_clip.req.json +7 -0
- package/fixtures/mcp_snapshots/capture_clip.res.json +7 -0
- package/fixtures/mcp_snapshots/compile_turn.req.json +7 -0
- package/fixtures/mcp_snapshots/compile_turn.res.json +5 -0
- package/fixtures/mcp_snapshots/ingest_meeting.req.json +7 -0
- package/fixtures/mcp_snapshots/ingest_meeting.res.json +33 -0
- package/fixtures/mcp_snapshots/propose_consensus.req.json +11 -0
- package/fixtures/mcp_snapshots/propose_consensus.res.json +17 -0
- package/fixtures/mcp_snapshots/search_federation.req.json +7 -0
- package/fixtures/mcp_snapshots/search_federation.res.json +4 -0
- package/fixtures/mcp_snapshots/seed_library.json +9 -1
- package/fixtures/mcp_snapshots/trace_entity.req.json +7 -0
- package/fixtures/mcp_snapshots/trace_entity.res.json +133 -0
- package/fixtures/mcp_snapshots/vote_consensus.req.json +7 -0
- package/fixtures/mcp_snapshots/vote_consensus.res.json +56 -0
- package/fixtures/merge_vectors.json +2 -2
- package/fixtures/native_stores/claude_code/store/knowledge_graph/memory.jsonl +1 -1
- package/fixtures/native_stores/github_copilot/cache/github-copilot/payload.json +1 -1
- package/fixtures/native_stores/hermes/store/.hermes/memories/memory.md +1 -1
- package/fixtures/redaction_battery.json +73 -4
- package/fixtures/tier_matrix.json +84 -0
- package/fixtures/turn_compiler_vectors.json +180 -2
- package/fixtures.pin.json +2 -2
- package/package.json +1 -1
- package/fixtures/fed_seed_library/agents/lovable.l5.yaml +0 -65
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["
|
|
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
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["
|
|
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":[]}
|
package/fixtures/leak_cases.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"audit_schema_version": "federation-leak-audit/v1",
|
|
4
4
|
"private_tag_families": [
|
|
5
5
|
"client-confidential",
|
|
6
|
+
"confidential",
|
|
6
7
|
"credential",
|
|
7
8
|
"family",
|
|
8
9
|
"financial",
|
|
@@ -19,7 +20,7 @@
|
|
|
19
20
|
"known_entities": [
|
|
20
21
|
{
|
|
21
22
|
"name": "API",
|
|
22
|
-
"summary": "
|
|
23
|
+
"summary": "service_role = hunter2hunter2 for supabase",
|
|
23
24
|
"visibility": "team"
|
|
24
25
|
}
|
|
25
26
|
]
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
"date": "2026-06-20",
|
|
40
41
|
"files_touched": [
|
|
41
42
|
"src/app.ts",
|
|
42
|
-
"config/.env"
|
|
43
|
+
"config/.env:PASSWORD=supersecretvalue"
|
|
43
44
|
]
|
|
44
45
|
}
|
|
45
46
|
]
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
"agent": {
|
|
58
59
|
"id": "x",
|
|
59
60
|
"type": "code-assistant",
|
|
60
|
-
"role_narrative": "rotate the api_key before every deploy"
|
|
61
|
+
"role_narrative": "rotate the api_key=hunter2hunter2 before every deploy"
|
|
61
62
|
}
|
|
62
63
|
},
|
|
63
64
|
"expected_findings": [
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"manifest": {
|
|
73
74
|
"capabilities": [
|
|
74
75
|
"state_db",
|
|
75
|
-
"the bearer token is
|
|
76
|
+
"the bearer token is QXp9-not-a-real-key"
|
|
76
77
|
]
|
|
77
78
|
},
|
|
78
79
|
"expected_findings": [
|
package/fixtures/manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
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": "
|
|
3
|
+
"conformance_version": "6.0.0",
|
|
4
4
|
"produced_against": {
|
|
5
|
-
"bourdon_version": "0.
|
|
5
|
+
"bourdon_version": "0.25.0"
|
|
6
6
|
},
|
|
7
7
|
"fixtures": [
|
|
8
8
|
{
|
|
9
9
|
"path": "redaction_battery.json",
|
|
10
|
-
"sha256": "
|
|
10
|
+
"sha256": "31f7a1903ec70659f23b3062040776adad54dadaee763c296018100cd439178e",
|
|
11
11
|
"producer": "tools/gen_conformance.py::redaction_battery"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"path": "leak_cases.json",
|
|
15
|
-
"sha256": "
|
|
15
|
+
"sha256": "78580fd6e81243538af0e202ac2b84b7b4421353836119a1b8f6f516a90d134c",
|
|
16
16
|
"producer": "tools/gen_conformance.py::leak_cases"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
"path": "merge_vectors.json",
|
|
105
|
-
"sha256": "
|
|
105
|
+
"sha256": "74322ae0460fb38331ee47e252d10f64e7c2c31254ae814381b852ab2510b110",
|
|
106
106
|
"producer": "tools/gen_conformance.py::merge_vectors"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"path": "tier_matrix.json",
|
|
140
|
-
"sha256": "
|
|
140
|
+
"sha256": "92954294831c3c5b318b73ae7deae8e338fb2f8d3c4ddfac3b1dd09b9b6b7c0a",
|
|
141
141
|
"producer": "tools/gen_conformance.py::tier_matrix"
|
|
142
142
|
},
|
|
143
143
|
{
|
|
@@ -320,6 +320,36 @@
|
|
|
320
320
|
"sha256": "d662fd546ee6ba3315a751d68d2d096b5d21d338cf3c65970f09431f666f5e6b",
|
|
321
321
|
"producer": "tools/gen_conformance.py::mcp_snapshots"
|
|
322
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
|
+
},
|
|
323
353
|
{
|
|
324
354
|
"path": "mcp_snapshots/get_deeper_context.req.json",
|
|
325
355
|
"sha256": "ca5d6f3472a3a74b1710e8ee093e5648b737bf6635656a21306ef73656fd533f",
|
|
@@ -330,6 +360,46 @@
|
|
|
330
360
|
"sha256": "c92ec338c23f2cdc3f1215751812c7f5c2c08aa86fb3ff097288e4c831313053",
|
|
331
361
|
"producer": "tools/gen_conformance.py::mcp_snapshots"
|
|
332
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
|
+
},
|
|
333
403
|
{
|
|
334
404
|
"path": "mcp_snapshots/list_memory_versions.req.json",
|
|
335
405
|
"sha256": "d74a7d4ca7aaef454887f3a84e7db9d01a9141899a2d3a2e4dd43863a09c67df",
|
|
@@ -362,12 +432,12 @@
|
|
|
362
432
|
},
|
|
363
433
|
{
|
|
364
434
|
"path": "mcp_snapshots/seed_library.json",
|
|
365
|
-
"sha256": "
|
|
435
|
+
"sha256": "4315d9be6b52c899d7d3f0449e243fc0a8baa31f53eec141314cd526c9d29095",
|
|
366
436
|
"producer": "tools/gen_conformance.py::mcp_snapshots"
|
|
367
437
|
},
|
|
368
438
|
{
|
|
369
439
|
"path": "mcp_snapshots/_normalizer.json",
|
|
370
|
-
"sha256": "
|
|
440
|
+
"sha256": "43db802a917f5ed286384ba175d3ec336a4a72fb48a99257ad9865b826f4c6ea",
|
|
371
441
|
"producer": "tools/gen_conformance.py::mcp_snapshots"
|
|
372
442
|
},
|
|
373
443
|
{
|
|
@@ -377,7 +447,7 @@
|
|
|
377
447
|
},
|
|
378
448
|
{
|
|
379
449
|
"path": "native_stores/hermes/store/.hermes/memories/memory.md",
|
|
380
|
-
"sha256": "
|
|
450
|
+
"sha256": "6a0726d27419af63b5713a3314dbaab64ef2fa5b9d310d2e2d3332f07516833c",
|
|
381
451
|
"producer": "tools/gen_conformance.py::native_stores"
|
|
382
452
|
},
|
|
383
453
|
{
|
|
@@ -422,7 +492,7 @@
|
|
|
422
492
|
},
|
|
423
493
|
{
|
|
424
494
|
"path": "native_stores/claude_code/store/knowledge_graph/memory.jsonl",
|
|
425
|
-
"sha256": "
|
|
495
|
+
"sha256": "624f5d9ccd73456695fc7a91a5811c358b292f52cc1ea2e3ceff7674c338e3e3",
|
|
426
496
|
"producer": "tools/gen_conformance.py::native_stores"
|
|
427
497
|
},
|
|
428
498
|
{
|
|
@@ -432,7 +502,7 @@
|
|
|
432
502
|
},
|
|
433
503
|
{
|
|
434
504
|
"path": "native_stores/github_copilot/cache/github-copilot/payload.json",
|
|
435
|
-
"sha256": "
|
|
505
|
+
"sha256": "5b922bb2d150ee05c92d92c867274e2a8569d5f2810e5c806cffb4cd0765e7f7",
|
|
436
506
|
"producer": "tools/gen_conformance.py::native_stores"
|
|
437
507
|
},
|
|
438
508
|
{
|
|
@@ -447,7 +517,7 @@
|
|
|
447
517
|
},
|
|
448
518
|
{
|
|
449
519
|
"path": "turn_compiler_vectors.json",
|
|
450
|
-
"sha256": "
|
|
520
|
+
"sha256": "d8649a227bc4ae0d3760f76dc424a67a4402446742e5d27aa6b31113ce9d7e71",
|
|
451
521
|
"producer": "tools/gen_conformance.py::turn_compiler_vectors"
|
|
452
522
|
}
|
|
453
523
|
]
|
|
@@ -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,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
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -5,7 +5,8 @@
|
|
|
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.",
|
|
@@ -78,7 +79,14 @@
|
|
|
78
79
|
"get_cross_agent_summary",
|
|
79
80
|
"prepare_recognition_context",
|
|
80
81
|
"compile_codex_turn",
|
|
82
|
+
"trace_entity",
|
|
83
|
+
"ingest_meeting",
|
|
84
|
+
"compile_turn",
|
|
81
85
|
"get_deeper_context",
|
|
86
|
+
"search_federation",
|
|
87
|
+
"capture_clip",
|
|
88
|
+
"propose_consensus",
|
|
89
|
+
"vote_consensus",
|
|
82
90
|
"list_memory_versions",
|
|
83
91
|
"explain_memory_change",
|
|
84
92
|
"rollback_agent_memory"
|
|
@@ -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,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
|
+
}
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
{
|
|
166
166
|
"date": "2026-08-01",
|
|
167
167
|
"cwd": "/w",
|
|
168
|
-
"project_focus": "
|
|
168
|
+
"project_focus": "Pennant"
|
|
169
169
|
}
|
|
170
170
|
],
|
|
171
171
|
"expected": {
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"cwd": "/w",
|
|
176
176
|
"project_focus": [
|
|
177
177
|
"Bourdon",
|
|
178
|
-
"
|
|
178
|
+
"Pennant"
|
|
179
179
|
]
|
|
180
180
|
}
|
|
181
181
|
],
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
{"type":"entity","name":"Zephyr","entityType":"project","observations":["File conversion app."]}
|
|
2
|
-
{"type":"entity","name":"SecretCreds","entityType":"concept","observations":["
|
|
2
|
+
{"type":"entity","name":"SecretCreds","entityType":"concept","observations":["service_role=hunter2hunter2 for supabase"]}
|
|
3
3
|
{"type":"relation","from":"Zephyr","to":"Bourdon","relationType":"uses"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"repository_url": "https://api.github.com/repos/ryan/bourdon"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"title": "Rotate
|
|
14
|
+
"title": "Rotate service_role=hunter2hunter2 in CI",
|
|
15
15
|
"number": 9,
|
|
16
16
|
"updated_at": "2026-06-18T10:00:00Z",
|
|
17
17
|
"repository_url": "https://api.github.com/repos/ryan/bourdon"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
- Project uses pytest with xdist
|
|
2
|
-
- The bearer token is
|
|
2
|
+
- The bearer token is hunter2.hunter2
|
|
@@ -19,28 +19,42 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"fragments": [
|
|
22
|
-
"
|
|
22
|
+
"password: correcthorsebatterystaple"
|
|
23
23
|
],
|
|
24
24
|
"expect_redacted": "[redacted credential-like text]",
|
|
25
25
|
"expect_contains_secret": true
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"fragments": [
|
|
29
|
-
"
|
|
29
|
+
"client_secret=hunter2hunter2"
|
|
30
30
|
],
|
|
31
31
|
"expect_redacted": "[redacted credential-like text]",
|
|
32
32
|
"expect_contains_secret": true
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"fragments": [
|
|
36
|
-
"
|
|
36
|
+
"\"password\": \"hunter2hunter2\""
|
|
37
37
|
],
|
|
38
38
|
"expect_redacted": "[redacted credential-like text]",
|
|
39
39
|
"expect_contains_secret": true
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"fragments": [
|
|
43
|
-
"
|
|
43
|
+
"--password=hunter2hunter2"
|
|
44
|
+
],
|
|
45
|
+
"expect_redacted": "[redacted credential-like text]",
|
|
46
|
+
"expect_contains_secret": true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"fragments": [
|
|
50
|
+
"PASSWORD=supersecretvalue"
|
|
51
|
+
],
|
|
52
|
+
"expect_redacted": "[redacted credential-like text]",
|
|
53
|
+
"expect_contains_secret": true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"fragments": [
|
|
57
|
+
"SUPABASE_SERVICE_KEY=hunter2hunter2"
|
|
44
58
|
],
|
|
45
59
|
"expect_redacted": "[redacted credential-like text]",
|
|
46
60
|
"expect_contains_secret": true
|
|
@@ -195,6 +209,61 @@
|
|
|
195
209
|
"text": "Bourdon recognition-first runtime layer is the core promise",
|
|
196
210
|
"expect_redacted": "Bourdon recognition-first runtime layer is the core promise",
|
|
197
211
|
"expect_contains_secret": false
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"text": "uses a bearer token to authenticate",
|
|
215
|
+
"expect_redacted": "uses a bearer token to authenticate",
|
|
216
|
+
"expect_contains_secret": false
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"text": "the service_role key for supabase",
|
|
220
|
+
"expect_redacted": "the service_role key for supabase",
|
|
221
|
+
"expect_contains_secret": false
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"text": "stripe secret rotated today",
|
|
225
|
+
"expect_redacted": "stripe secret rotated today",
|
|
226
|
+
"expect_contains_secret": false
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"text": "the keystore password lives in .env",
|
|
230
|
+
"expect_redacted": "the keystore password lives in .env",
|
|
231
|
+
"expect_contains_secret": false
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"text": "Add password reset to the console",
|
|
235
|
+
"expect_redacted": "Add password reset to the console",
|
|
236
|
+
"expect_contains_secret": false
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"text": "Fixed the password reset email template",
|
|
240
|
+
"expect_redacted": "Fixed the password reset email template",
|
|
241
|
+
"expect_contains_secret": false
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"text": "Updated .env with the new port",
|
|
245
|
+
"expect_redacted": "Updated .env with the new port",
|
|
246
|
+
"expect_contains_secret": false
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"text": "Rotated the keystore for the Android release",
|
|
250
|
+
"expect_redacted": "Rotated the keystore for the Android release",
|
|
251
|
+
"expect_contains_secret": false
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"text": "Reviewed the service_role RLS policy",
|
|
255
|
+
"expect_redacted": "Reviewed the service_role RLS policy",
|
|
256
|
+
"expect_contains_secret": false
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"text": "Shipped api_key rotation tooling",
|
|
260
|
+
"expect_redacted": "Shipped api_key rotation tooling",
|
|
261
|
+
"expect_contains_secret": false
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"text": "the password is rotated monthly",
|
|
265
|
+
"expect_redacted": "the password is rotated monthly",
|
|
266
|
+
"expect_contains_secret": false
|
|
198
267
|
}
|
|
199
268
|
],
|
|
200
269
|
"case_variants": [
|
|
@@ -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
|
|
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
|
|
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": "
|
|
4
|
-
"manifest_sha256": "
|
|
3
|
+
"conformance_version": "6.0.0",
|
|
4
|
+
"manifest_sha256": "73bd51d8a6d2a82b32b0b249a6e6c16c6491f9dc0148d020e9e020efb1eb49eb"
|
|
5
5
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getbourdon/conformance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.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",
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
spec_version: '0.1'
|
|
2
|
-
agent:
|
|
3
|
-
id: lovable
|
|
4
|
-
type: code-assistant
|
|
5
|
-
instance: cloud
|
|
6
|
-
role_narrative: Cloud app-building agent. Ships full-stack web apps from chat.
|
|
7
|
-
last_updated: '2026-08-26T12:00:00+00:00'
|
|
8
|
-
capabilities:
|
|
9
|
-
- app-building
|
|
10
|
-
- full-stack-generation
|
|
11
|
-
- deploy-preview
|
|
12
|
-
known_entities:
|
|
13
|
-
- name: Acme Site
|
|
14
|
-
type: project
|
|
15
|
-
aliases:
|
|
16
|
-
- acme.example
|
|
17
|
-
summary: Marketing site for Acme, an automation and AI systems studio.
|
|
18
|
-
tags:
|
|
19
|
-
- lovable
|
|
20
|
-
- client
|
|
21
|
-
visibility: team
|
|
22
|
-
- name: Bourdon
|
|
23
|
-
type: project
|
|
24
|
-
summary: Recognition-first memory federation (granted side, Lovable view).
|
|
25
|
-
tags:
|
|
26
|
-
- infra
|
|
27
|
-
visibility: public
|
|
28
|
-
- name: Client Billing Export
|
|
29
|
-
type: concept
|
|
30
|
-
summary: Unpublished billing integration details.
|
|
31
|
-
tags:
|
|
32
|
-
- client-confidential
|
|
33
|
-
visibility: private
|
|
34
|
-
recent_sessions:
|
|
35
|
-
- date: '2026-08-25'
|
|
36
|
-
project_focus:
|
|
37
|
-
- Acme Site
|
|
38
|
-
key_actions:
|
|
39
|
-
- rebuilt hero section
|
|
40
|
-
files_touched:
|
|
41
|
-
- src/routes/index.tsx
|
|
42
|
-
visibility: team
|
|
43
|
-
- date: '2026-08-24'
|
|
44
|
-
project_focus:
|
|
45
|
-
- Bourdon
|
|
46
|
-
key_actions:
|
|
47
|
-
- drafted participant adapter
|
|
48
|
-
visibility: public
|
|
49
|
-
- date: '2026-08-23'
|
|
50
|
-
project_focus:
|
|
51
|
-
- Client Billing Export
|
|
52
|
-
key_actions:
|
|
53
|
-
- private review
|
|
54
|
-
visibility: private
|
|
55
|
-
visibility_policy:
|
|
56
|
-
default: team
|
|
57
|
-
private_tags:
|
|
58
|
-
- personal
|
|
59
|
-
- credential
|
|
60
|
-
- secret
|
|
61
|
-
- client-confidential
|
|
62
|
-
team_tags:
|
|
63
|
-
- lovable
|
|
64
|
-
- project
|
|
65
|
-
- client
|