@getbourdon/conformance 0.1.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 (70) hide show
  1. package/LICENSE +157 -0
  2. package/README.md +26 -0
  3. package/dist/index.cjs +65 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +36 -0
  6. package/dist/index.d.ts +36 -0
  7. package/dist/index.js +36 -0
  8. package/dist/index.js.map +1 -0
  9. package/fixtures/README.md +61 -0
  10. package/fixtures/fed_seed_library/agents/claude-code.l5.yaml +63 -0
  11. package/fixtures/fed_seed_library/agents/codex.l5.yaml +35 -0
  12. package/fixtures/l5_manifests/invalid/bad-agent-type-enum.json +8 -0
  13. package/fixtures/l5_manifests/invalid/bad-spec-version-pattern.json +8 -0
  14. package/fixtures/l5_manifests/invalid/entity-bad-visibility-enum.json +14 -0
  15. package/fixtures/l5_manifests/invalid/entity-missing-name.json +13 -0
  16. package/fixtures/l5_manifests/invalid/missing-required-last_updated.json +7 -0
  17. package/fixtures/l5_manifests/invalid/reasons.json +75 -0
  18. package/fixtures/l5_manifests/valid/full.json +60 -0
  19. package/fixtures/l5_manifests/valid/minimal.json +8 -0
  20. package/fixtures/l5_manifests/valid/team-and-private.json +51 -0
  21. package/fixtures/l5_schema.json +209 -0
  22. package/fixtures/l5_todict.json +253 -0
  23. package/fixtures/leak_cases.json +229 -0
  24. package/fixtures/manifest.json +304 -0
  25. package/fixtures/mcp_snapshots/_normalizer.json +134 -0
  26. package/fixtures/mcp_snapshots/commit_to_federation.req.json +19 -0
  27. package/fixtures/mcp_snapshots/commit_to_federation.res.json +12 -0
  28. package/fixtures/mcp_snapshots/compile_codex_turn.req.json +7 -0
  29. package/fixtures/mcp_snapshots/compile_codex_turn.res.json +5 -0
  30. package/fixtures/mcp_snapshots/export_agents.req.json +4 -0
  31. package/fixtures/mcp_snapshots/export_agents.res.json +73 -0
  32. package/fixtures/mcp_snapshots/find_entity.req.json +7 -0
  33. package/fixtures/mcp_snapshots/find_entity.res.json +24 -0
  34. package/fixtures/mcp_snapshots/get_cross_agent_summary.req.json +7 -0
  35. package/fixtures/mcp_snapshots/get_cross_agent_summary.res.json +42 -0
  36. package/fixtures/mcp_snapshots/get_deeper_context.req.json +7 -0
  37. package/fixtures/mcp_snapshots/get_deeper_context.res.json +7 -0
  38. package/fixtures/mcp_snapshots/list_agents.req.json +4 -0
  39. package/fixtures/mcp_snapshots/list_agents.res.json +6 -0
  40. package/fixtures/mcp_snapshots/list_recent_work.req.json +8 -0
  41. package/fixtures/mcp_snapshots/list_recent_work.res.json +38 -0
  42. package/fixtures/mcp_snapshots/prepare_recognition_context.req.json +7 -0
  43. package/fixtures/mcp_snapshots/prepare_recognition_context.res.json +19 -0
  44. package/fixtures/mcp_snapshots/query_agent_memory.req.json +8 -0
  45. package/fixtures/mcp_snapshots/query_agent_memory.res.json +25 -0
  46. package/fixtures/mcp_snapshots/seed_library.json +24 -0
  47. package/fixtures/native_stores/README.json +24 -0
  48. package/fixtures/native_stores/claude_code/expected_l5.json +72 -0
  49. package/fixtures/native_stores/claude_code/store/auto_memory/MEMORY.md +3 -0
  50. package/fixtures/native_stores/claude_code/store/auto_memory/clyde.md +7 -0
  51. package/fixtures/native_stores/claude_code/store/auto_memory/ry-guy.md +6 -0
  52. package/fixtures/native_stores/claude_code/store/brain/LOG/2026-06-28-pc.md +3 -0
  53. package/fixtures/native_stores/claude_code/store/brain/PROJECTS/Bourdon/OVERVIEW.md +3 -0
  54. package/fixtures/native_stores/claude_code/store/brain/PROJECTS/OldThing/OVERVIEW.md +5 -0
  55. package/fixtures/native_stores/claude_code/store/knowledge_graph/memory.jsonl +3 -0
  56. package/fixtures/native_stores/github_copilot/cache/github-copilot/payload.json +21 -0
  57. package/fixtures/native_stores/github_copilot/expected_l5.json +67 -0
  58. package/fixtures/native_stores/hermes/expected_l5.json +108 -0
  59. package/fixtures/native_stores/hermes/store/.hermes/memories/memory.md +2 -0
  60. package/fixtures/native_stores/hermes/store/.hermes/memories/user.md +2 -0
  61. package/fixtures/native_stores/hermes/store/.hermes/state.db +0 -0
  62. package/fixtures/on_disk/audit.jsonl +5 -0
  63. package/fixtures/on_disk/auth_vectors.json +55 -0
  64. package/fixtures/on_disk/federation.yaml +22 -0
  65. package/fixtures/recognition_golden_v1.yaml +106 -0
  66. package/fixtures/recognition_vectors.json +448 -0
  67. package/fixtures/redaction_battery.json +473 -0
  68. package/fixtures/tier_matrix.json +398 -0
  69. package/fixtures/turn_compiler_vectors.json +645 -0
  70. package/package.json +39 -0
@@ -0,0 +1,75 @@
1
+ {
2
+ "_doc": "Each invalid manifest's expected primary failure. `expected` (keyword + ajv-style instancePath) is the cross-impl assertion; `errors` lists every violation for debugging. Oracle: jsonschema Draft202012Validator over spec/L5_schema.json.",
3
+ "reasons": {
4
+ "missing-required-last_updated.json": {
5
+ "valid": false,
6
+ "expected": {
7
+ "keyword": "required",
8
+ "instancePath": ""
9
+ },
10
+ "errors": [
11
+ {
12
+ "keyword": "required",
13
+ "instancePath": "",
14
+ "message": "'last_updated' is a required property"
15
+ }
16
+ ]
17
+ },
18
+ "bad-spec-version-pattern.json": {
19
+ "valid": false,
20
+ "expected": {
21
+ "keyword": "pattern",
22
+ "instancePath": "/spec_version"
23
+ },
24
+ "errors": [
25
+ {
26
+ "keyword": "pattern",
27
+ "instancePath": "/spec_version",
28
+ "message": "'0.1.0' does not match '^\\\\d+\\\\.\\\\d+$'"
29
+ }
30
+ ]
31
+ },
32
+ "bad-agent-type-enum.json": {
33
+ "valid": false,
34
+ "expected": {
35
+ "keyword": "enum",
36
+ "instancePath": "/agent/type"
37
+ },
38
+ "errors": [
39
+ {
40
+ "keyword": "enum",
41
+ "instancePath": "/agent/type",
42
+ "message": "'wizard' is not one of ['code-assistant', 'note-capture', 'local-swarm', 'customer-support', 'research-assistant', 'creative-collaborator', 'project-manager', 'tutor', 'other']"
43
+ }
44
+ ]
45
+ },
46
+ "entity-bad-visibility-enum.json": {
47
+ "valid": false,
48
+ "expected": {
49
+ "keyword": "enum",
50
+ "instancePath": "/known_entities/0/visibility"
51
+ },
52
+ "errors": [
53
+ {
54
+ "keyword": "enum",
55
+ "instancePath": "/known_entities/0/visibility",
56
+ "message": "'secret' is not one of ['public', 'team', 'private']"
57
+ }
58
+ ]
59
+ },
60
+ "entity-missing-name.json": {
61
+ "valid": false,
62
+ "expected": {
63
+ "keyword": "required",
64
+ "instancePath": "/known_entities/0"
65
+ },
66
+ "errors": [
67
+ {
68
+ "keyword": "required",
69
+ "instancePath": "/known_entities/0",
70
+ "message": "'name' is a required property"
71
+ }
72
+ ]
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "spec_version": "0.1",
3
+ "agent": {
4
+ "id": "claude-code",
5
+ "type": "code-assistant",
6
+ "instance": "pc-threadripper",
7
+ "spec_version_compat": ">=0.1",
8
+ "role_narrative": "Lead code-assistant. Organizes project code."
9
+ },
10
+ "last_updated": "2026-06-29T12:00:00+00:00",
11
+ "capabilities": [
12
+ "code-read",
13
+ "code-write",
14
+ "web-search"
15
+ ],
16
+ "recent_sessions": [
17
+ {
18
+ "date": "2026-06-28",
19
+ "cwd": "/c/Users/cumul/repos/bourdon",
20
+ "project_focus": [
21
+ "bourdon"
22
+ ],
23
+ "key_actions": [
24
+ "wired l5 conformance fixtures"
25
+ ],
26
+ "files_touched": [
27
+ "tools/gen_conformance.py"
28
+ ],
29
+ "visibility": "public"
30
+ }
31
+ ],
32
+ "known_entities": [
33
+ {
34
+ "name": "Bourdon",
35
+ "type": "project",
36
+ "aliases": [
37
+ "NeuroLayer",
38
+ "Continuo"
39
+ ],
40
+ "summary": "Cross-agent memory federation.",
41
+ "last_touched": "2026-06-29",
42
+ "valid_from": "2026-01-01",
43
+ "tags": [
44
+ "infra"
45
+ ],
46
+ "visibility": "public"
47
+ }
48
+ ],
49
+ "visibility_policy": {
50
+ "default": "public",
51
+ "private_tags": [
52
+ "personal",
53
+ "financial",
54
+ "credential"
55
+ ],
56
+ "team_tags": [
57
+ "team"
58
+ ]
59
+ }
60
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "spec_version": "0.1",
3
+ "agent": {
4
+ "id": "clyde",
5
+ "type": "note-capture"
6
+ },
7
+ "last_updated": "2026-06-29T12:00:00+00:00"
8
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "spec_version": "0.1",
3
+ "agent": {
4
+ "id": "clair",
5
+ "type": "note-capture"
6
+ },
7
+ "last_updated": "2026-06-29T12:00:00+00:00",
8
+ "known_entities": [
9
+ {
10
+ "name": "Quarterly Revenue",
11
+ "type": "concept",
12
+ "tags": [
13
+ "financial"
14
+ ],
15
+ "summary": "Q2 numbers.",
16
+ "visibility": "private"
17
+ },
18
+ {
19
+ "name": "Roadmap",
20
+ "type": "concept",
21
+ "tags": [
22
+ "team"
23
+ ],
24
+ "visibility": "team"
25
+ },
26
+ {
27
+ "name": "Public Blog",
28
+ "type": "site",
29
+ "visibility": "public"
30
+ }
31
+ ],
32
+ "recent_sessions": [
33
+ {
34
+ "date": "2026-06-27",
35
+ "visibility": "private"
36
+ },
37
+ {
38
+ "date": "2026-06-28",
39
+ "visibility": "team"
40
+ }
41
+ ],
42
+ "visibility_policy": {
43
+ "default": "team",
44
+ "private_tags": [
45
+ "financial"
46
+ ],
47
+ "team_tags": [
48
+ "team"
49
+ ]
50
+ }
51
+ }
@@ -0,0 +1,209 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://bourdon.ai/schema/L5_manifest_v0.1.json",
4
+ "title": "Bourdon L5 Agent Memory Manifest",
5
+ "description": "A per-agent public memory glossary. L5 is a projection of L0-L4 personal memory into a standardized, agent-readable form with visibility filtering applied. L6 (the federation library) aggregates L5 manifests across agents.",
6
+ "type": "object",
7
+ "required": ["spec_version", "agent", "last_updated"],
8
+ "properties": {
9
+ "spec_version": {
10
+ "description": "Bourdon spec version this manifest conforms to (semver). L6 warns when reading a manifest with an incompatible version.",
11
+ "type": "string",
12
+ "pattern": "^\\d+\\.\\d+$",
13
+ "examples": ["0.1"]
14
+ },
15
+ "agent": {
16
+ "type": "object",
17
+ "required": ["id", "type"],
18
+ "properties": {
19
+ "id": {
20
+ "description": "Unique slug for this agent. Used as the L6 filename and cross-agent reference key.",
21
+ "type": "string",
22
+ "pattern": "^[a-z0-9][a-z0-9_-]*$",
23
+ "minLength": 1,
24
+ "maxLength": 64,
25
+ "examples": ["clyde", "claude-code", "codex", "clair"]
26
+ },
27
+ "type": {
28
+ "description": "Agent category. Informs L6 query routing and UI grouping.",
29
+ "type": "string",
30
+ "enum": [
31
+ "code-assistant",
32
+ "note-capture",
33
+ "local-swarm",
34
+ "customer-support",
35
+ "research-assistant",
36
+ "creative-collaborator",
37
+ "project-manager",
38
+ "tutor",
39
+ "other"
40
+ ]
41
+ },
42
+ "instance": {
43
+ "description": "Optional machine/deployment identifier. Helps federate memory across multiple instances of the same agent on different machines.",
44
+ "type": "string",
45
+ "maxLength": 128,
46
+ "examples": ["pc-threadripper", "mac-m1max"]
47
+ },
48
+ "spec_version_compat": {
49
+ "description": "Version range of Bourdon specs this manifest is compatible with. Uses npm-style semver ranges. If omitted, assumed equal to spec_version.",
50
+ "type": "string",
51
+ "examples": [">=0.1", "^0.1.0"]
52
+ },
53
+ "role_narrative": {
54
+ "description": "Free-text description of the agent's role within a fleet. Differentiates agents that share the same `type` slug (e.g. multiple code-assistants playing different roles like manager, lead author, debugger, throwaway). Used by L6 to answer 'who should I ask about X?' style queries.",
55
+ "type": "string",
56
+ "maxLength": 500,
57
+ "examples": [
58
+ "Agentic manager and code-assistant. Coordinates the agent fleet, reviews PRs, and consults on solutions.",
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
+ "Code-assistant invoked for debugging, issues, quick fixes, and short-task throwaway sessions.",
61
+ "General-purpose RADLAB assistant with deep project memory."
62
+ ]
63
+ }
64
+ }
65
+ },
66
+ "last_updated": {
67
+ "description": "ISO 8601 UTC timestamp of when this manifest was last regenerated.",
68
+ "type": "string",
69
+ "format": "date-time"
70
+ },
71
+ "capabilities": {
72
+ "description": "Optional list of capabilities this agent offers. Enables L6 queries like 'which agent can analyze images?' Free-text slugs; no central registry (yet).",
73
+ "type": "array",
74
+ "items": {
75
+ "type": "string",
76
+ "maxLength": 64
77
+ },
78
+ "uniqueItems": true,
79
+ "maxItems": 64,
80
+ "examples": [
81
+ ["code-read", "code-write", "web-search", "image-analysis"]
82
+ ]
83
+ },
84
+ "recent_sessions": {
85
+ "description": "Rolling window of recent sessions. Typical retention: 30 days or 100 sessions, whichever is greater. Older sessions should be rolled up into L3/L4 personal memory and omitted from L5.",
86
+ "type": "array",
87
+ "items": { "$ref": "#/$defs/Session" },
88
+ "maxItems": 500
89
+ },
90
+ "known_entities": {
91
+ "description": "The glossary surface. Each entity is something this agent knows about and can provide context on. L6 uses this for cross-agent entity lookup. Respect visibility_policy when emitting.",
92
+ "type": "array",
93
+ "items": { "$ref": "#/$defs/Entity" },
94
+ "maxItems": 1000
95
+ },
96
+ "visibility_policy": {
97
+ "description": "Default visibility rules applied when an entity does not declare its own visibility.",
98
+ "type": "object",
99
+ "properties": {
100
+ "default": {
101
+ "$ref": "#/$defs/Visibility"
102
+ },
103
+ "private_tags": {
104
+ "description": "Entity tags that auto-mark the entity as private (overriding any explicit visibility setting).",
105
+ "type": "array",
106
+ "items": { "type": "string" },
107
+ "examples": [["personal", "financial", "credential", "health", "family"]]
108
+ },
109
+ "team_tags": {
110
+ "description": "Entity tags that mark entities as team-visibility (shared with team L6 but not public).",
111
+ "type": "array",
112
+ "items": { "type": "string" }
113
+ }
114
+ }
115
+ }
116
+ },
117
+ "$defs": {
118
+ "Visibility": {
119
+ "type": "string",
120
+ "enum": ["public", "team", "private"],
121
+ "description": "public = published to all L6 stores | team = team L6 only | private = local L6 only, never federated outward"
122
+ },
123
+ "Session": {
124
+ "type": "object",
125
+ "required": ["date"],
126
+ "properties": {
127
+ "date": {
128
+ "description": "ISO 8601 date the session occurred (date-only, no time).",
129
+ "type": "string",
130
+ "format": "date"
131
+ },
132
+ "cwd": {
133
+ "description": "Working directory of the session. Optional but highly useful for developer-tool participants.",
134
+ "type": "string",
135
+ "maxLength": 512
136
+ },
137
+ "project_focus": {
138
+ "description": "Entity IDs the session focused on. Cross-references known_entities.",
139
+ "type": "array",
140
+ "items": { "type": "string" }
141
+ },
142
+ "key_actions": {
143
+ "description": "Brief list of what happened. 1-5 short strings.",
144
+ "type": "array",
145
+ "items": { "type": "string", "maxLength": 256 },
146
+ "maxItems": 10
147
+ },
148
+ "files_touched": {
149
+ "description": "Paths or patterns modified during the session. Optional.",
150
+ "type": "array",
151
+ "items": { "type": "string" },
152
+ "maxItems": 50
153
+ },
154
+ "visibility": { "$ref": "#/$defs/Visibility" }
155
+ }
156
+ },
157
+ "Entity": {
158
+ "type": "object",
159
+ "required": ["name"],
160
+ "properties": {
161
+ "name": {
162
+ "description": "Human-readable entity name. Used for L0 keyword matching.",
163
+ "type": "string",
164
+ "minLength": 1,
165
+ "maxLength": 128
166
+ },
167
+ "type": {
168
+ "description": "Semantic category. Extensible free-text; common values: project, product, person, customer, ticket, concept, compound, draft, site, client, decision.",
169
+ "type": "string",
170
+ "maxLength": 64
171
+ },
172
+ "aliases": {
173
+ "description": "Alternative names or abbreviations that should also match for L0 detection.",
174
+ "type": "array",
175
+ "items": { "type": "string" },
176
+ "maxItems": 16
177
+ },
178
+ "summary": {
179
+ "description": "Short description (~1-3 sentences, <500 chars). L6 consumers see this as the entity's 'glossary entry.'",
180
+ "type": "string",
181
+ "maxLength": 2000
182
+ },
183
+ "last_touched": {
184
+ "type": "string",
185
+ "format": "date"
186
+ },
187
+ "valid_from": {
188
+ "description": "ISO 8601 date this entity became active in the agent's worldview. When omitted, the entity has either always been valid or its start date is unknown. L6 queries can filter on this to answer 'what was active in Q1 2026?' style questions. Inspired by Zep's Graphiti temporal validity model.",
189
+ "type": "string",
190
+ "format": "date"
191
+ },
192
+ "valid_to": {
193
+ "description": "ISO 8601 date this entity stopped being active. Participants typically populate this when an entity is tagged 'archived' or 'canceled'. Absent (or null) means the entity is still active as of last_updated. Federation queries that filter by current time treat missing valid_to as 'still valid'.",
194
+ "type": "string",
195
+ "format": "date"
196
+ },
197
+ "tags": {
198
+ "description": "Free-text tags. Used for visibility_policy.private_tags/team_tags matching and for filtering in L6 queries.",
199
+ "type": "array",
200
+ "items": { "type": "string" }
201
+ },
202
+ "visibility": {
203
+ "$ref": "#/$defs/Visibility",
204
+ "description": "Overrides visibility_policy.default for this entity. Private entities MUST be omitted from federated L6 stores."
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
@@ -0,0 +1,253 @@
1
+ {
2
+ "_doc": "L5Manifest.to_dict() parity. The TS port rebuilds objects from `input` (declarative dataclass-spec: visibility as a lowercase string, null=None, []=empty list) and asserts toDict()==`expected`. Rules pinned: drop None fields, drop empty-list fields, Visibility enum -> lowercase value, key order = dataclass field order, and VisibilityPolicy.default always emitted (defaults to 'public').",
3
+ "cases": [
4
+ {
5
+ "name": "drops_empty_lists_and_none",
6
+ "input": {
7
+ "spec_version": "0.1",
8
+ "agent": {
9
+ "id": "clyde",
10
+ "type": "note-capture",
11
+ "instance": null
12
+ },
13
+ "last_updated": "2026-06-29T12:00:00+00:00",
14
+ "capabilities": [],
15
+ "recent_sessions": [],
16
+ "known_entities": [],
17
+ "visibility_policy": null
18
+ },
19
+ "expected": {
20
+ "spec_version": "0.1",
21
+ "agent": {
22
+ "id": "clyde",
23
+ "type": "note-capture"
24
+ },
25
+ "last_updated": "2026-06-29T12:00:00+00:00"
26
+ }
27
+ },
28
+ {
29
+ "name": "visibility_lowercased",
30
+ "input": {
31
+ "spec_version": "0.1",
32
+ "agent": {
33
+ "id": "clair",
34
+ "type": "note-capture"
35
+ },
36
+ "last_updated": "2026-06-29T12:00:00+00:00",
37
+ "recent_sessions": [
38
+ {
39
+ "date": "2026-06-28",
40
+ "visibility": "team"
41
+ }
42
+ ],
43
+ "known_entities": [
44
+ {
45
+ "name": "Secret",
46
+ "visibility": "private"
47
+ }
48
+ ],
49
+ "visibility_policy": {
50
+ "default": "public"
51
+ }
52
+ },
53
+ "expected": {
54
+ "spec_version": "0.1",
55
+ "agent": {
56
+ "id": "clair",
57
+ "type": "note-capture"
58
+ },
59
+ "last_updated": "2026-06-29T12:00:00+00:00",
60
+ "recent_sessions": [
61
+ {
62
+ "date": "2026-06-28",
63
+ "visibility": "team"
64
+ }
65
+ ],
66
+ "known_entities": [
67
+ {
68
+ "name": "Secret",
69
+ "visibility": "private"
70
+ }
71
+ ],
72
+ "visibility_policy": {
73
+ "default": "public"
74
+ }
75
+ }
76
+ },
77
+ {
78
+ "name": "entity_empty_inner_lists_dropped",
79
+ "input": {
80
+ "spec_version": "0.1",
81
+ "agent": {
82
+ "id": "clyde",
83
+ "type": "note-capture"
84
+ },
85
+ "last_updated": "2026-06-29T12:00:00+00:00",
86
+ "known_entities": [
87
+ {
88
+ "name": "Bourdon",
89
+ "type": "project",
90
+ "summary": "Federation layer.",
91
+ "aliases": [],
92
+ "tags": []
93
+ }
94
+ ]
95
+ },
96
+ "expected": {
97
+ "spec_version": "0.1",
98
+ "agent": {
99
+ "id": "clyde",
100
+ "type": "note-capture"
101
+ },
102
+ "last_updated": "2026-06-29T12:00:00+00:00",
103
+ "known_entities": [
104
+ {
105
+ "name": "Bourdon",
106
+ "type": "project",
107
+ "summary": "Federation layer."
108
+ }
109
+ ]
110
+ }
111
+ },
112
+ {
113
+ "name": "policy_default_injected",
114
+ "input": {
115
+ "spec_version": "0.1",
116
+ "agent": {
117
+ "id": "clyde",
118
+ "type": "note-capture"
119
+ },
120
+ "last_updated": "2026-06-29T12:00:00+00:00",
121
+ "visibility_policy": {}
122
+ },
123
+ "expected": {
124
+ "spec_version": "0.1",
125
+ "agent": {
126
+ "id": "clyde",
127
+ "type": "note-capture"
128
+ },
129
+ "last_updated": "2026-06-29T12:00:00+00:00",
130
+ "visibility_policy": {
131
+ "default": "public"
132
+ }
133
+ }
134
+ },
135
+ {
136
+ "name": "full_key_order",
137
+ "input": {
138
+ "spec_version": "0.1",
139
+ "agent": {
140
+ "id": "claude-code",
141
+ "type": "code-assistant",
142
+ "instance": "pc-threadripper",
143
+ "spec_version_compat": ">=0.1",
144
+ "role_narrative": "Lead code-assistant."
145
+ },
146
+ "last_updated": "2026-06-29T12:00:00+00:00",
147
+ "capabilities": [
148
+ "code-read",
149
+ "code-write"
150
+ ],
151
+ "recent_sessions": [
152
+ {
153
+ "date": "2026-06-28",
154
+ "cwd": "/repo",
155
+ "project_focus": [
156
+ "bourdon"
157
+ ],
158
+ "key_actions": [
159
+ "ported l5"
160
+ ],
161
+ "files_touched": [
162
+ "a.py"
163
+ ],
164
+ "visibility": "public"
165
+ }
166
+ ],
167
+ "known_entities": [
168
+ {
169
+ "name": "Bourdon",
170
+ "type": "project",
171
+ "aliases": [
172
+ "NeuroLayer"
173
+ ],
174
+ "summary": "Federation.",
175
+ "last_touched": "2026-06-29",
176
+ "tags": [
177
+ "infra"
178
+ ],
179
+ "visibility": "team",
180
+ "valid_from": "2026-01-01",
181
+ "valid_to": "2026-12-31"
182
+ }
183
+ ],
184
+ "visibility_policy": {
185
+ "default": "public",
186
+ "private_tags": [
187
+ "financial"
188
+ ],
189
+ "team_tags": [
190
+ "team"
191
+ ]
192
+ }
193
+ },
194
+ "expected": {
195
+ "spec_version": "0.1",
196
+ "agent": {
197
+ "id": "claude-code",
198
+ "type": "code-assistant",
199
+ "instance": "pc-threadripper",
200
+ "spec_version_compat": ">=0.1",
201
+ "role_narrative": "Lead code-assistant."
202
+ },
203
+ "last_updated": "2026-06-29T12:00:00+00:00",
204
+ "capabilities": [
205
+ "code-read",
206
+ "code-write"
207
+ ],
208
+ "recent_sessions": [
209
+ {
210
+ "date": "2026-06-28",
211
+ "cwd": "/repo",
212
+ "project_focus": [
213
+ "bourdon"
214
+ ],
215
+ "key_actions": [
216
+ "ported l5"
217
+ ],
218
+ "files_touched": [
219
+ "a.py"
220
+ ],
221
+ "visibility": "public"
222
+ }
223
+ ],
224
+ "known_entities": [
225
+ {
226
+ "name": "Bourdon",
227
+ "type": "project",
228
+ "aliases": [
229
+ "NeuroLayer"
230
+ ],
231
+ "summary": "Federation.",
232
+ "last_touched": "2026-06-29",
233
+ "tags": [
234
+ "infra"
235
+ ],
236
+ "visibility": "team",
237
+ "valid_from": "2026-01-01",
238
+ "valid_to": "2026-12-31"
239
+ }
240
+ ],
241
+ "visibility_policy": {
242
+ "default": "public",
243
+ "private_tags": [
244
+ "financial"
245
+ ],
246
+ "team_tags": [
247
+ "team"
248
+ ]
249
+ }
250
+ }
251
+ }
252
+ ]
253
+ }