@getbourdon/conformance 0.2.0 → 0.2.2
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.d.ts +11 -9
- package/dist/index.js +28 -25
- package/fixtures/README.md +3 -3
- package/fixtures/fed_seed_library/agents/claude-code.l5.yaml +31 -4
- package/fixtures/fed_seed_library/agents/codex.l5.yaml +15 -0
- package/fixtures/l5_manifests/invalid/bad-agent-type-enum.json +1 -1
- package/fixtures/l5_manifests/invalid/bad-spec-version-pattern.json +1 -1
- package/fixtures/l5_manifests/invalid/entity-bad-visibility-enum.json +1 -1
- package/fixtures/l5_manifests/invalid/entity-missing-name.json +1 -1
- package/fixtures/l5_manifests/invalid/missing-required-last_updated.json +1 -1
- package/fixtures/l5_manifests/valid/full.json +2 -2
- package/fixtures/l5_manifests/valid/minimal.json +1 -1
- package/fixtures/l5_manifests/valid/team-and-private.json +1 -1
- package/fixtures/l5_schema.json +93 -3
- package/fixtures/l5_todict.json +10 -10
- package/fixtures/leak_cases.json +1 -1
- package/fixtures/manifest.json +51 -31
- package/fixtures/mcp_snapshots/_normalizer.json +31 -2
- package/fixtures/mcp_snapshots/commit_to_federation.req.json +13 -1
- package/fixtures/mcp_snapshots/commit_to_federation.res.json +8 -2
- package/fixtures/mcp_snapshots/export_agents.res.json +47 -1
- package/fixtures/mcp_snapshots/get_cross_agent_summary.res.json +1 -1
- package/fixtures/mcp_snapshots/list_notes.req.json +8 -0
- package/fixtures/mcp_snapshots/list_notes.res.json +28 -0
- package/fixtures/mcp_snapshots/list_recent_work.res.json +1 -1
- package/fixtures/mcp_snapshots/list_workstreams.req.json +6 -0
- package/fixtures/mcp_snapshots/list_workstreams.res.json +23 -0
- package/fixtures/mcp_snapshots/seed_library.json +45 -1
- package/fixtures/native_stores/claude_code/expected_l5.json +8 -8
- package/fixtures/native_stores/claude_code/store/auto_memory/{clyde.md → alpha-agent.md} +2 -2
- package/fixtures/native_stores/claude_code/store/auto_memory/{ry-guy.md → example-user.md} +2 -2
- package/fixtures/native_stores/claude_code/store/knowledge_graph/memory.jsonl +2 -2
- package/fixtures/recognition_golden_v1.yaml +17 -17
- package/fixtures/recognition_vectors.json +23 -23
- package/fixtures/tier_matrix.json +2 -2
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
interface RedactionSecretCase {
|
|
2
2
|
/** Joined at load (`assembleSecret`) so no contiguous secret literal lands in git. */
|
|
3
3
|
fragments: string[];
|
|
4
4
|
expect_redacted: string;
|
|
5
5
|
expect_contains_secret: boolean;
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
interface RedactionBenignCase {
|
|
8
8
|
text: string;
|
|
9
9
|
expect_redacted: string;
|
|
10
10
|
expect_contains_secret: boolean;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
interface RedactionBattery {
|
|
13
13
|
redacted_sentinel: string;
|
|
14
14
|
benign_limit: number;
|
|
15
15
|
secrets: RedactionSecretCase[];
|
|
16
16
|
benign: RedactionBenignCase[];
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
interface ConformanceFixtureMeta {
|
|
19
19
|
path: string;
|
|
20
20
|
sha256: string;
|
|
21
21
|
producer: string;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
interface ConformanceManifest {
|
|
24
24
|
conformance_version: string;
|
|
25
25
|
produced_against: {
|
|
26
26
|
bourdon_version: string;
|
|
27
27
|
};
|
|
28
28
|
fixtures: ConformanceFixtureMeta[];
|
|
29
29
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
declare function conformanceDir(): string;
|
|
31
|
+
declare function loadManifest(): ConformanceManifest;
|
|
32
|
+
declare function loadRedactionBattery(): RedactionBattery;
|
|
33
33
|
/** Reconstruct a secret case's runtime string from its fragments. */
|
|
34
|
-
|
|
34
|
+
declare function assembleSecret(secret: RedactionSecretCase): string;
|
|
35
|
+
|
|
36
|
+
export { type ConformanceFixtureMeta, type ConformanceManifest, type RedactionBattery, type RedactionBenignCase, type RedactionSecretCase, assembleSecret, conformanceDir, loadManifest, loadRedactionBattery };
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { existsSync, readFileSync } from "fs";
|
|
3
|
+
import { dirname, resolve } from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
4
5
|
function moduleDir() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
if (typeof import.meta !== "undefined" && import.meta.url) {
|
|
7
|
+
return dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
}
|
|
9
|
+
return typeof __dirname !== "undefined" ? __dirname : process.cwd();
|
|
9
10
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (existsSync(resolve(bundled, "manifest.json")))
|
|
17
|
-
return bundled;
|
|
18
|
-
// Dev fallback: the sibling Python oracle checkout.
|
|
19
|
-
return resolve(process.cwd(), "..", "..", "bourdon", "conformance");
|
|
11
|
+
function conformanceDir() {
|
|
12
|
+
const override = process.env.BOURDON_CONFORMANCE_DIR;
|
|
13
|
+
if (override) return override;
|
|
14
|
+
const bundled = resolve(moduleDir(), "..", "fixtures");
|
|
15
|
+
if (existsSync(resolve(bundled, "manifest.json"))) return bundled;
|
|
16
|
+
return resolve(process.cwd(), "..", "..", "bourdon", "conformance");
|
|
20
17
|
}
|
|
21
18
|
function loadJson(name) {
|
|
22
|
-
|
|
19
|
+
return JSON.parse(readFileSync(resolve(conformanceDir(), name), "utf8"));
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
function loadManifest() {
|
|
22
|
+
return loadJson("manifest.json");
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
function loadRedactionBattery() {
|
|
25
|
+
return loadJson("redaction_battery.json");
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return secret.fragments.join("");
|
|
27
|
+
function assembleSecret(secret) {
|
|
28
|
+
return secret.fragments.join("");
|
|
33
29
|
}
|
|
30
|
+
export {
|
|
31
|
+
assembleSecret,
|
|
32
|
+
conformanceDir,
|
|
33
|
+
loadManifest,
|
|
34
|
+
loadRedactionBattery
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
package/fixtures/README.md
CHANGED
|
@@ -19,7 +19,7 @@ uncommitted diff (`git diff --exit-code -- conformance/`).
|
|
|
19
19
|
python tools/gen_conformance.py # rewrites conformance/ + manifest.json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
After changing a pattern in `core.redaction` (or any oracle), regenerate, review the
|
|
22
|
+
After changing a pattern in `bourdon.core.redaction` (or any oracle), regenerate, review the
|
|
23
23
|
diff, and bump `conformance_version` in `tools/gen_conformance.py` (patch = added cases,
|
|
24
24
|
minor = new family, major = a changed expected-output = a reviewed behavior change).
|
|
25
25
|
|
|
@@ -44,7 +44,7 @@ dict. `on_disk/` holds Python-written artifacts the TS side must parse identical
|
|
|
44
44
|
never a contiguous literal), and an append-only audit log produced by the real `record()` with frozen
|
|
45
45
|
timestamps. Both pytest (`tests/test_federation_conformance.py`) and the TS vitest suite assert these.
|
|
46
46
|
|
|
47
|
-
The `mcp_snapshots/` family pins the **JSON-in-TextContent wire contract** for all
|
|
47
|
+
The `mcp_snapshots/` family pins the **JSON-in-TextContent wire contract** for all 12 L6
|
|
48
48
|
MCP tools. Each `*.res.json` is the live tool's payload (as `RemoteL6Client` recovers it:
|
|
49
49
|
`json.loads` of the single `TextContent.text` = `json.dumps(payload)`) run through one codified
|
|
50
50
|
NORMALIZER — sort object keys, round floats to 4dp, drop null/empty-list fields (to_dict
|
|
@@ -57,5 +57,5 @@ Token-shaped secrets are stored as **fragment arrays** joined at load time, so n
|
|
|
57
57
|
contiguous secret literal ever lands in git (GitHub push-protection scans literals).
|
|
58
58
|
Both loaders `"".join(fragments)`.
|
|
59
59
|
|
|
60
|
-
See the master plan: `
|
|
60
|
+
See the master plan: `agent-brain/PROJECTS/NEUROLAYER/PLAN_TS_MIRROR_2026-06-29.md` and
|
|
61
61
|
the `bourdon-parity-fixture-harness` / `bourdon-py-to-ts-port` skills.
|
|
@@ -2,7 +2,7 @@ spec_version: '0.1'
|
|
|
2
2
|
agent:
|
|
3
3
|
id: claude-code
|
|
4
4
|
type: code-assistant
|
|
5
|
-
instance:
|
|
5
|
+
instance: workstation-01
|
|
6
6
|
role_narrative: Lead code-assistant on the federation substrate.
|
|
7
7
|
last_updated: '2026-06-29T12:00:00+00:00'
|
|
8
8
|
capabilities:
|
|
@@ -32,7 +32,7 @@ known_entities:
|
|
|
32
32
|
visibility: private
|
|
33
33
|
recent_sessions:
|
|
34
34
|
- date: '2026-06-08'
|
|
35
|
-
cwd: /
|
|
35
|
+
cwd: /home/example/repos/bourdon
|
|
36
36
|
project_focus:
|
|
37
37
|
- Bourdon
|
|
38
38
|
key_actions:
|
|
@@ -41,19 +41,46 @@ recent_sessions:
|
|
|
41
41
|
- tools/gen_conformance.py
|
|
42
42
|
visibility: public
|
|
43
43
|
- date: '2026-06-07'
|
|
44
|
-
cwd: /
|
|
44
|
+
cwd: /home/example/repos/bourdon
|
|
45
45
|
project_focus:
|
|
46
46
|
- Roadmap
|
|
47
47
|
key_actions:
|
|
48
48
|
- team planning
|
|
49
49
|
visibility: team
|
|
50
50
|
- date: '2026-06-06'
|
|
51
|
-
cwd: /
|
|
51
|
+
cwd: /home/example/repos/bourdon
|
|
52
52
|
project_focus:
|
|
53
53
|
- Quarterly Revenue
|
|
54
54
|
key_actions:
|
|
55
55
|
- private review
|
|
56
56
|
visibility: private
|
|
57
|
+
known_workstreams:
|
|
58
|
+
- name: Release
|
|
59
|
+
summary: Prepare the public Bourdon release.
|
|
60
|
+
status: active
|
|
61
|
+
last_touched: '2026-06-10'
|
|
62
|
+
related_entities:
|
|
63
|
+
- Bourdon
|
|
64
|
+
tags:
|
|
65
|
+
- launch
|
|
66
|
+
visibility: public
|
|
67
|
+
- name: Private Planning
|
|
68
|
+
status: paused
|
|
69
|
+
last_touched: '2026-06-09'
|
|
70
|
+
tags:
|
|
71
|
+
- financial
|
|
72
|
+
visibility: private
|
|
73
|
+
notes:
|
|
74
|
+
- date: '2026-06-09'
|
|
75
|
+
text: Public release note.
|
|
76
|
+
related_entities:
|
|
77
|
+
- Bourdon
|
|
78
|
+
visibility: public
|
|
79
|
+
- date: '2026-06-08'
|
|
80
|
+
text: Team release note.
|
|
81
|
+
tags:
|
|
82
|
+
- team
|
|
83
|
+
visibility: team
|
|
57
84
|
visibility_policy:
|
|
58
85
|
default: public
|
|
59
86
|
private_tags:
|
|
@@ -33,3 +33,18 @@ recent_sessions:
|
|
|
33
33
|
key_actions:
|
|
34
34
|
- codex private
|
|
35
35
|
visibility: team
|
|
36
|
+
known_workstreams:
|
|
37
|
+
- name: release
|
|
38
|
+
status: paused
|
|
39
|
+
last_touched: '2026-06-11'
|
|
40
|
+
related_entities:
|
|
41
|
+
- Bourdon
|
|
42
|
+
tags:
|
|
43
|
+
- coordination
|
|
44
|
+
visibility: public
|
|
45
|
+
notes:
|
|
46
|
+
- date: '2026-06-10'
|
|
47
|
+
text: Codex public release note.
|
|
48
|
+
related_entities:
|
|
49
|
+
- Bourdon
|
|
50
|
+
visibility: public
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"agent": {
|
|
4
4
|
"id": "claude-code",
|
|
5
5
|
"type": "code-assistant",
|
|
6
|
-
"instance": "
|
|
6
|
+
"instance": "workstation-01",
|
|
7
7
|
"spec_version_compat": ">=0.1",
|
|
8
8
|
"role_narrative": "Lead code-assistant. Organizes project code."
|
|
9
9
|
},
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"recent_sessions": [
|
|
17
17
|
{
|
|
18
18
|
"date": "2026-06-28",
|
|
19
|
-
"cwd": "/
|
|
19
|
+
"cwd": "/home/example/repos/bourdon",
|
|
20
20
|
"project_focus": [
|
|
21
21
|
"bourdon"
|
|
22
22
|
],
|
package/fixtures/l5_schema.json
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"pattern": "^[a-z0-9][a-z0-9_-]*$",
|
|
23
23
|
"minLength": 1,
|
|
24
24
|
"maxLength": 64,
|
|
25
|
-
"examples": ["
|
|
25
|
+
"examples": ["alpha-agent", "claude-code", "codex", "beta-agent"]
|
|
26
26
|
},
|
|
27
27
|
"type": {
|
|
28
28
|
"description": "Agent category. Informs L6 query routing and UI grouping.",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"description": "Optional machine/deployment identifier. Helps federate memory across multiple instances of the same agent on different machines.",
|
|
44
44
|
"type": "string",
|
|
45
45
|
"maxLength": 128,
|
|
46
|
-
"examples": ["
|
|
46
|
+
"examples": ["workstation-01", "laptop-01"]
|
|
47
47
|
},
|
|
48
48
|
"spec_version_compat": {
|
|
49
49
|
"description": "Version range of Bourdon specs this manifest is compatible with. Uses npm-style semver ranges. If omitted, assumed equal to spec_version.",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"Agentic manager and code-assistant. Coordinates the agent fleet, reviews PRs, and consults on solutions.",
|
|
59
59
|
"Lead code-assistant. Organizes project code and executes prime code. Consults with Claude on solutions, problems, and issues via PR or Slack #agents channel.",
|
|
60
60
|
"Code-assistant invoked for debugging, issues, quick fixes, and short-task throwaway sessions.",
|
|
61
|
-
"General-purpose
|
|
61
|
+
"General-purpose personal assistant with deep project memory."
|
|
62
62
|
]
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -93,6 +93,18 @@
|
|
|
93
93
|
"items": { "$ref": "#/$defs/Entity" },
|
|
94
94
|
"maxItems": 1000
|
|
95
95
|
},
|
|
96
|
+
"known_workstreams": {
|
|
97
|
+
"description": "Ongoing multi-session initiatives, distinct from a single dated Session and from a named glossary Entity. A workstream has a status and accrues sessions/entities over time. L6 uses this to answer 'what's currently in flight?' style queries.",
|
|
98
|
+
"type": "array",
|
|
99
|
+
"items": { "$ref": "#/$defs/Workstream" },
|
|
100
|
+
"maxItems": 200
|
|
101
|
+
},
|
|
102
|
+
"notes": {
|
|
103
|
+
"description": "Freestanding unstructured notes not tied to a specific named entity or a single session's action log. Closer to a journal entry than a glossary term.",
|
|
104
|
+
"type": "array",
|
|
105
|
+
"items": { "$ref": "#/$defs/Note" },
|
|
106
|
+
"maxItems": 1000
|
|
107
|
+
},
|
|
96
108
|
"visibility_policy": {
|
|
97
109
|
"description": "Default visibility rules applied when an entity does not declare its own visibility.",
|
|
98
110
|
"type": "object",
|
|
@@ -204,6 +216,84 @@
|
|
|
204
216
|
"description": "Overrides visibility_policy.default for this entity. Private entities MUST be omitted from federated L6 stores."
|
|
205
217
|
}
|
|
206
218
|
}
|
|
219
|
+
},
|
|
220
|
+
"Workstream": {
|
|
221
|
+
"type": "object",
|
|
222
|
+
"required": ["name", "status"],
|
|
223
|
+
"properties": {
|
|
224
|
+
"name": {
|
|
225
|
+
"description": "Human-readable workstream name.",
|
|
226
|
+
"type": "string",
|
|
227
|
+
"minLength": 1,
|
|
228
|
+
"maxLength": 128
|
|
229
|
+
},
|
|
230
|
+
"summary": {
|
|
231
|
+
"description": "Short description of what this workstream is (~1-3 sentences, <500 chars).",
|
|
232
|
+
"type": "string",
|
|
233
|
+
"maxLength": 2000
|
|
234
|
+
},
|
|
235
|
+
"status": {
|
|
236
|
+
"description": "Current lifecycle state.",
|
|
237
|
+
"type": "string",
|
|
238
|
+
"enum": ["active", "paused", "done", "archived"]
|
|
239
|
+
},
|
|
240
|
+
"started": {
|
|
241
|
+
"description": "ISO 8601 date this workstream began.",
|
|
242
|
+
"type": "string",
|
|
243
|
+
"format": "date"
|
|
244
|
+
},
|
|
245
|
+
"last_touched": {
|
|
246
|
+
"description": "ISO 8601 date of the most recent activity on this workstream.",
|
|
247
|
+
"type": "string",
|
|
248
|
+
"format": "date"
|
|
249
|
+
},
|
|
250
|
+
"related_entities": {
|
|
251
|
+
"description": "Entity names this workstream references. Cross-references known_entities.",
|
|
252
|
+
"type": "array",
|
|
253
|
+
"items": { "type": "string" },
|
|
254
|
+
"maxItems": 32
|
|
255
|
+
},
|
|
256
|
+
"tags": {
|
|
257
|
+
"description": "Free-text tags. Used for visibility_policy matching and L6 query filtering.",
|
|
258
|
+
"type": "array",
|
|
259
|
+
"items": { "type": "string" }
|
|
260
|
+
},
|
|
261
|
+
"visibility": {
|
|
262
|
+
"$ref": "#/$defs/Visibility",
|
|
263
|
+
"description": "Overrides visibility_policy.default for this workstream. Private workstreams MUST be omitted from federated L6 stores."
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
"Note": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"required": ["date", "text"],
|
|
270
|
+
"properties": {
|
|
271
|
+
"date": {
|
|
272
|
+
"description": "ISO 8601 date the note was written.",
|
|
273
|
+
"type": "string",
|
|
274
|
+
"format": "date"
|
|
275
|
+
},
|
|
276
|
+
"text": {
|
|
277
|
+
"description": "Freeform note content. Larger than a Session.key_actions line -- this is a journal entry, not an action log.",
|
|
278
|
+
"type": "string",
|
|
279
|
+
"maxLength": 4000
|
|
280
|
+
},
|
|
281
|
+
"related_entities": {
|
|
282
|
+
"description": "Entity names this note references. Cross-references known_entities. Optional.",
|
|
283
|
+
"type": "array",
|
|
284
|
+
"items": { "type": "string" },
|
|
285
|
+
"maxItems": 16
|
|
286
|
+
},
|
|
287
|
+
"tags": {
|
|
288
|
+
"description": "Free-text tags. Used for visibility_policy matching and L6 query filtering.",
|
|
289
|
+
"type": "array",
|
|
290
|
+
"items": { "type": "string" }
|
|
291
|
+
},
|
|
292
|
+
"visibility": {
|
|
293
|
+
"$ref": "#/$defs/Visibility",
|
|
294
|
+
"description": "Overrides visibility_policy.default for this note. Private notes MUST be omitted from federated L6 stores."
|
|
295
|
+
}
|
|
296
|
+
}
|
|
207
297
|
}
|
|
208
298
|
}
|
|
209
299
|
}
|
package/fixtures/l5_todict.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"input": {
|
|
7
7
|
"spec_version": "0.1",
|
|
8
8
|
"agent": {
|
|
9
|
-
"id": "
|
|
9
|
+
"id": "alpha-agent",
|
|
10
10
|
"type": "note-capture",
|
|
11
11
|
"instance": null
|
|
12
12
|
},
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"expected": {
|
|
20
20
|
"spec_version": "0.1",
|
|
21
21
|
"agent": {
|
|
22
|
-
"id": "
|
|
22
|
+
"id": "alpha-agent",
|
|
23
23
|
"type": "note-capture"
|
|
24
24
|
},
|
|
25
25
|
"last_updated": "2026-06-29T12:00:00+00:00"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"input": {
|
|
31
31
|
"spec_version": "0.1",
|
|
32
32
|
"agent": {
|
|
33
|
-
"id": "
|
|
33
|
+
"id": "beta-agent",
|
|
34
34
|
"type": "note-capture"
|
|
35
35
|
},
|
|
36
36
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"expected": {
|
|
54
54
|
"spec_version": "0.1",
|
|
55
55
|
"agent": {
|
|
56
|
-
"id": "
|
|
56
|
+
"id": "beta-agent",
|
|
57
57
|
"type": "note-capture"
|
|
58
58
|
},
|
|
59
59
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"input": {
|
|
80
80
|
"spec_version": "0.1",
|
|
81
81
|
"agent": {
|
|
82
|
-
"id": "
|
|
82
|
+
"id": "alpha-agent",
|
|
83
83
|
"type": "note-capture"
|
|
84
84
|
},
|
|
85
85
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"expected": {
|
|
97
97
|
"spec_version": "0.1",
|
|
98
98
|
"agent": {
|
|
99
|
-
"id": "
|
|
99
|
+
"id": "alpha-agent",
|
|
100
100
|
"type": "note-capture"
|
|
101
101
|
},
|
|
102
102
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"input": {
|
|
115
115
|
"spec_version": "0.1",
|
|
116
116
|
"agent": {
|
|
117
|
-
"id": "
|
|
117
|
+
"id": "alpha-agent",
|
|
118
118
|
"type": "note-capture"
|
|
119
119
|
},
|
|
120
120
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"expected": {
|
|
124
124
|
"spec_version": "0.1",
|
|
125
125
|
"agent": {
|
|
126
|
-
"id": "
|
|
126
|
+
"id": "alpha-agent",
|
|
127
127
|
"type": "note-capture"
|
|
128
128
|
},
|
|
129
129
|
"last_updated": "2026-06-29T12:00:00+00:00",
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
"agent": {
|
|
140
140
|
"id": "claude-code",
|
|
141
141
|
"type": "code-assistant",
|
|
142
|
-
"instance": "
|
|
142
|
+
"instance": "workstation-01",
|
|
143
143
|
"spec_version_compat": ">=0.1",
|
|
144
144
|
"role_narrative": "Lead code-assistant."
|
|
145
145
|
},
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
"agent": {
|
|
197
197
|
"id": "claude-code",
|
|
198
198
|
"type": "code-assistant",
|
|
199
|
-
"instance": "
|
|
199
|
+
"instance": "workstation-01",
|
|
200
200
|
"spec_version_compat": ">=0.1",
|
|
201
201
|
"role_narrative": "Lead code-assistant."
|
|
202
202
|
},
|
package/fixtures/leak_cases.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_doc": "Cross-impl federation leak-audit parity. Oracle = 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.",
|
|
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
5
|
"credential",
|