@getbourdon/conformance 0.3.0 → 0.5.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.
@@ -0,0 +1,98 @@
1
+ {
2
+ "_doc": "Sealed pagination-cursor parity vectors. Envelope: 'v1.' + urlsafe_b64(payload) + '.' + urlsafe_b64(mac); payload is compact JSON (field order offset,since,agent,access; separators ',',':'); both base64 legs padded urlsafe; mac = HMAC-SHA256(key, context + 0x00 + payload). All tokens here are sealed under the fixed TEST key below; production keys come from BOURDON_CURSOR_KEY or a per-process default.",
3
+ "envelope_version": "v1",
4
+ "context": "bourdon-cursor-v1",
5
+ "test_key": "bourdon-conformance-cursor-fixed-test-key",
6
+ "mint": [
7
+ {
8
+ "name": "offset_only",
9
+ "fields": {
10
+ "offset": 0
11
+ },
12
+ "token": "v1.eyJvZmZzZXQiOjB9.O23LHICHKQMnyCchY2JObFFfEUmxkXHiJJOgvtKzAes="
13
+ },
14
+ {
15
+ "name": "offset_paged",
16
+ "fields": {
17
+ "offset": 40
18
+ },
19
+ "token": "v1.eyJvZmZzZXQiOjQwfQ==.tHYiB6G2_nevaLGCHNs9msqGER3dQmkE8NbkYn4qqK8="
20
+ },
21
+ {
22
+ "name": "with_since",
23
+ "fields": {
24
+ "offset": 20,
25
+ "since": "2026-06-01"
26
+ },
27
+ "token": "v1.eyJvZmZzZXQiOjIwLCJzaW5jZSI6IjIwMjYtMDYtMDEifQ==.YedXuS8RgmB7QLM5dkL6k1lSeBD7RrXxowshIw4ZKu0="
28
+ },
29
+ {
30
+ "name": "with_since_agent",
31
+ "fields": {
32
+ "offset": 3,
33
+ "since": "2026-06-01",
34
+ "agent": "claude-code"
35
+ },
36
+ "token": "v1.eyJvZmZzZXQiOjMsInNpbmNlIjoiMjAyNi0wNi0wMSIsImFnZW50IjoiY2xhdWRlLWNvZGUifQ==.18KRIPGR6SKF2wkzBTb9u7ZwK7Jfe61bZuSrlVG--cU="
37
+ },
38
+ {
39
+ "name": "fully_sealed",
40
+ "fields": {
41
+ "offset": 7,
42
+ "since": "2026-01-31",
43
+ "agent": "codex",
44
+ "access": "team"
45
+ },
46
+ "token": "v1.eyJvZmZzZXQiOjcsInNpbmNlIjoiMjAyNi0wMS0zMSIsImFnZW50IjoiY29kZXgiLCJhY2Nlc3MiOiJ0ZWFtIn0=.pfsyw9cnfF-efyMDQbDXS0LDWXz2kDqCJ242O9K9K3M="
47
+ },
48
+ {
49
+ "name": "boundary_offset",
50
+ "fields": {
51
+ "offset": 100000
52
+ },
53
+ "token": "v1.eyJvZmZzZXQiOjEwMDAwMH0=.m5lcihdSLILlvCU5wSpDqRxt48BO3J5yjJOjyBi-LFA="
54
+ }
55
+ ],
56
+ "reject": [
57
+ {
58
+ "name": "tampered_payload",
59
+ "token": "v1.eyJvZmZzZXQiOjB9.tHYiB6G2_nevaLGCHNs9msqGER3dQmkE8NbkYn4qqK8=",
60
+ "reason": "payload altered after sealing"
61
+ },
62
+ {
63
+ "name": "truncated_seal",
64
+ "token": "v1.eyJvZmZzZXQiOjQwfQ==.tHYiB6G2",
65
+ "reason": "seal leg truncated"
66
+ },
67
+ {
68
+ "name": "wrong_key",
69
+ "token": "v1.eyJvZmZzZXQiOjF9.MTVm4fQjNF6apa7Xtn1hmQB368lDgU757p8EYweNSZI=",
70
+ "reason": "sealed under a different key"
71
+ },
72
+ {
73
+ "name": "unknown_version",
74
+ "token": "v2.eyJvZmZzZXQiOjQwfQ==.tHYiB6G2_nevaLGCHNs9msqGER3dQmkE8NbkYn4qqK8=",
75
+ "reason": "unrecognized envelope version"
76
+ },
77
+ {
78
+ "name": "unsealed_legacy",
79
+ "token": "eyJvZmZzZXQiOjQwfQ==",
80
+ "reason": "pre-seal token format has no acceptance path"
81
+ },
82
+ {
83
+ "name": "sealed_unknown_field",
84
+ "token": "v1.eyJvZmZzZXQiOjAsImV2aWwiOnRydWV9.InPILvmi50rNO9SwE5Iv0nyl_yrWJYtow38xWL2F3fA=",
85
+ "reason": "seal verifies but the payload carries an unknown field"
86
+ },
87
+ {
88
+ "name": "sealed_negative_offset",
89
+ "token": "v1.eyJvZmZzZXQiOi0xfQ==.TeSILWl7vbNY75xoxmqEv0SLqaAGv_99Wv5fzLq3GL0=",
90
+ "reason": "seal verifies but the offset is negative"
91
+ },
92
+ {
93
+ "name": "sealed_offset_over_bound",
94
+ "token": "v1.eyJvZmZzZXQiOjEwMDAwMX0=.hWPH08t5lNmBLzAVG63azOgFJXxCVw2rJtQX9Xn5I1E=",
95
+ "reason": "seal verifies but the offset exceeds the pagination bound"
96
+ }
97
+ ]
98
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_doc": "Index of cross-impl parity fixtures. conformance_version bumps on any fixture change (patch=added cases, minor=new family, major=changed expected-output = a reviewed behavior change). Python is the oracle; this file is generated by tools/gen_conformance.py.",
3
- "conformance_version": "2.1.0",
3
+ "conformance_version": "2.3.0",
4
4
  "produced_against": {
5
- "bourdon_version": "0.13.0"
5
+ "bourdon_version": "0.16.1"
6
6
  },
7
7
  "fixtures": [
8
8
  {
@@ -100,6 +100,11 @@
100
100
  "sha256": "963f9eb6c68cd8897650f098c241ebbff34ab23603bf9fee92e5431ae2db78af",
101
101
  "producer": "tools/gen_conformance.py::l5_schema_and_manifests"
102
102
  },
103
+ {
104
+ "path": "merge_vectors.json",
105
+ "sha256": "9a1d105d6c2b0bc00e419b318ae4d802457241cca0cbbe87f1a87c529a11e923",
106
+ "producer": "tools/gen_conformance.py::merge_vectors"
107
+ },
103
108
  {
104
109
  "path": "fed_seed_library/agents/claude-code.l5.yaml",
105
110
  "sha256": "efe5467ee41bfe807098f2339dda7295f236c1ae7f575016b2402f9ba1988f7c",
@@ -115,6 +120,11 @@
115
120
  "sha256": "9753ad1fd4a092bdf4110b3b24576f2bfe7001d6d6758ef55047ee5da851e25c",
116
121
  "producer": "tools/gen_conformance.py::tier_matrix"
117
122
  },
123
+ {
124
+ "path": "cursor_vectors.json",
125
+ "sha256": "433e7a1c8f87f5544b8a0a3a8df1be89b6f53199f0295a458564bf53a9bf8029",
126
+ "producer": "tools/gen_conformance.py::cursor_vectors"
127
+ },
118
128
  {
119
129
  "path": "on_disk/federation.yaml",
120
130
  "sha256": "7a3795961d369ec57a6caa6af15e250d016c98e883077e82d7d103bd0c016cfe",
@@ -167,7 +177,7 @@
167
177
  },
168
178
  {
169
179
  "path": "mcp_snapshots/prepare_recognition_context_drifting.res.json",
170
- "sha256": "665c149473ce295b22970f072483de4d3f93bc4affb022752a0251a5852e4567",
180
+ "sha256": "2d217ba56593bf6593216546c223adf0b972470632adb326bb82eb5d5996acc8",
171
181
  "producer": "tools/gen_conformance.py::mcp_snapshots"
172
182
  },
173
183
  {
@@ -267,7 +277,7 @@
267
277
  },
268
278
  {
269
279
  "path": "mcp_snapshots/prepare_recognition_context.res.json",
270
- "sha256": "fed8be60118cc027654ce8c2d1bb072482808c62e7997fd236ba276d5a50a580",
280
+ "sha256": "dfb2d73ddb812d41dfe8e0b17dddeb1399373904972c09cf80e0bf9daa65941f",
271
281
  "producer": "tools/gen_conformance.py::mcp_snapshots"
272
282
  },
273
283
  {
@@ -287,7 +297,7 @@
287
297
  },
288
298
  {
289
299
  "path": "mcp_snapshots/get_deeper_context.res.json",
290
- "sha256": "842926cd013275692fd11daab8553a329f2685c870b59389ee5b075544d5ed49",
300
+ "sha256": "c92ec338c23f2cdc3f1215751812c7f5c2c08aa86fb3ff097288e4c831313053",
291
301
  "producer": "tools/gen_conformance.py::mcp_snapshots"
292
302
  },
293
303
  {
@@ -327,7 +337,7 @@
327
337
  },
328
338
  {
329
339
  "path": "mcp_snapshots/_normalizer.json",
330
- "sha256": "7b9eef3ee22267274657117243086ea52403d33ceb2509f7be314d025fd0872b",
340
+ "sha256": "438071a3b1de83fb23083fd9ad2d4a734a27032d84faabf9d5772f14779a1721",
331
341
  "producer": "tools/gen_conformance.py::mcp_snapshots"
332
342
  },
333
343
  {
@@ -387,7 +397,7 @@
387
397
  },
388
398
  {
389
399
  "path": "native_stores/claude_code/expected_l5.json",
390
- "sha256": "9235bd39863934d3ce6686218ab0b535b6c7a6d94348ffdde2f132517da03b8d",
400
+ "sha256": "a352c29e299c50322f28e9250df1642ab7f1ae285cdfc3b794f13c1335e19899",
391
401
  "producer": "tools/gen_conformance.py::native_stores"
392
402
  },
393
403
  {
@@ -84,7 +84,7 @@
84
84
  }
85
85
  },
86
86
  {
87
- "_doc": "decodes a base64 next_cursor to its {offset} payload; null cursor drops",
87
+ "_doc": "decodes a sealed next_cursor to its {offset} payload (token sealed under the conformance test key from cursor_vectors.json; replaying this case requires injecting that key); null cursor drops",
88
88
  "normalized": {
89
89
  "has_more": true,
90
90
  "next_cursor": {
@@ -93,7 +93,7 @@
93
93
  },
94
94
  "raw": {
95
95
  "has_more": true,
96
- "next_cursor": "eyJvZmZzZXQiOjJ9"
96
+ "next_cursor": "v1.eyJvZmZzZXQiOjJ9.Kq1CqjJ2bx9GKxUve6An2fcBMxcGu9Ledn3C1V_6oZI="
97
97
  }
98
98
  },
99
99
  {
@@ -1,7 +1,18 @@
1
1
  {
2
2
  "access_level": "team",
3
- "context": "",
4
- "context_chars": 0,
3
+ "context": "## Bourdon (project)\nknown by: claude-code, codex\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
4
+ "context_chars": 349,
5
+ "doors": [
6
+ "recognition"
7
+ ],
8
+ "entities": [
9
+ "Bourdon"
10
+ ],
11
+ "hydration_hint": "Local retrieval only -- these are stored bytes, not generated prose. Synthesize with your own model if you want a narrative answer; Bourdon does not call one.",
5
12
  "include_private": false,
6
- "prompt": "what about Bourdon"
13
+ "l1_documents": 1,
14
+ "prompt": "what about Bourdon",
15
+ "reason": "",
16
+ "source": "local-store",
17
+ "truncated": false
7
18
  }
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "access_level": "team",
3
3
  "confidence": "medium",
4
+ "hydration": "# Bourdon\n\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
5
+ "hydration_chars": 310,
4
6
  "hydration_scheduled": true,
5
7
  "include_private": false,
6
8
  "matched_entities": [
@@ -8,6 +8,8 @@
8
8
  "reason": "yielded nothing this run - last yielded 400 record(s) at 2026-06-29T09:00:00Z"
9
9
  }
10
10
  ],
11
+ "hydration": "# Bourdon\n\nConformance fixture synopsis. L1 hydration is byte-checkable, so this text is\npinned verbatim into the interop vectors -- which is exactly why it must be\nfixture-owned rather than real documentation. A second implementation has to\nreproduce THIS, not whatever the project's docs happen to say today.",
12
+ "hydration_chars": 310,
11
13
  "hydration_scheduled": true,
12
14
  "include_private": false,
13
15
  "matched_entities": [
@@ -0,0 +1,325 @@
1
+ {
2
+ "_doc": "merge_family parity vectors: run each (family, existing, incoming) through the mirror's merge and compare to expected.merged/added/updated/clamped. Caps are schema-derived, restated here for assertion only.",
3
+ "caps_from_schema": {
4
+ "recent_sessions": {
5
+ "key_actions": 10,
6
+ "files_touched": 50
7
+ },
8
+ "known_entities": {
9
+ "aliases": 16
10
+ },
11
+ "known_workstreams": {
12
+ "related_entities": 32
13
+ },
14
+ "notes": {
15
+ "related_entities": 16
16
+ }
17
+ },
18
+ "cases": [
19
+ {
20
+ "id": "session-union-under-cap-preserves-order",
21
+ "family": "recent_sessions",
22
+ "existing": [
23
+ {
24
+ "date": "2026-08-01",
25
+ "cwd": "/w",
26
+ "key_actions": [
27
+ "a",
28
+ "b"
29
+ ]
30
+ }
31
+ ],
32
+ "incoming": [
33
+ {
34
+ "date": "2026-08-01",
35
+ "cwd": "/w",
36
+ "key_actions": [
37
+ "b",
38
+ "c"
39
+ ]
40
+ }
41
+ ],
42
+ "expected": {
43
+ "merged": [
44
+ {
45
+ "date": "2026-08-01",
46
+ "cwd": "/w",
47
+ "key_actions": [
48
+ "a",
49
+ "b",
50
+ "c"
51
+ ]
52
+ }
53
+ ],
54
+ "added": 0,
55
+ "updated": 1,
56
+ "clamped": 0
57
+ }
58
+ },
59
+ {
60
+ "id": "session-union-clamps-to-cap-keeping-newest",
61
+ "family": "recent_sessions",
62
+ "existing": [
63
+ {
64
+ "date": "2026-08-01",
65
+ "cwd": "/w",
66
+ "key_actions": [
67
+ "first-0",
68
+ "first-1",
69
+ "first-2",
70
+ "first-3",
71
+ "first-4",
72
+ "first-5",
73
+ "first-6",
74
+ "first-7",
75
+ "first-8",
76
+ "first-9"
77
+ ]
78
+ }
79
+ ],
80
+ "incoming": [
81
+ {
82
+ "date": "2026-08-01",
83
+ "cwd": "/w",
84
+ "key_actions": [
85
+ "second-0",
86
+ "second-1",
87
+ "second-2",
88
+ "second-3",
89
+ "second-4",
90
+ "second-5",
91
+ "second-6",
92
+ "second-7",
93
+ "second-8",
94
+ "second-9"
95
+ ]
96
+ }
97
+ ],
98
+ "expected": {
99
+ "merged": [
100
+ {
101
+ "date": "2026-08-01",
102
+ "cwd": "/w",
103
+ "key_actions": [
104
+ "second-0",
105
+ "second-1",
106
+ "second-2",
107
+ "second-3",
108
+ "second-4",
109
+ "second-5",
110
+ "second-6",
111
+ "second-7",
112
+ "second-8",
113
+ "second-9"
114
+ ]
115
+ }
116
+ ],
117
+ "added": 0,
118
+ "updated": 1,
119
+ "clamped": 10
120
+ }
121
+ },
122
+ {
123
+ "id": "session-dupe-non-none-scalar-wins-none-ignored",
124
+ "family": "recent_sessions",
125
+ "existing": [
126
+ {
127
+ "date": "2026-08-01",
128
+ "cwd": "/w",
129
+ "visibility": "team"
130
+ }
131
+ ],
132
+ "incoming": [
133
+ {
134
+ "date": "2026-08-01",
135
+ "cwd": "/w",
136
+ "visibility": null
137
+ }
138
+ ],
139
+ "expected": {
140
+ "merged": [
141
+ {
142
+ "date": "2026-08-01",
143
+ "cwd": "/w",
144
+ "visibility": "team"
145
+ }
146
+ ],
147
+ "added": 0,
148
+ "updated": 1,
149
+ "clamped": 0
150
+ }
151
+ },
152
+ {
153
+ "id": "session-incoming-scalar-list-coerces-not-chars",
154
+ "family": "recent_sessions",
155
+ "existing": [
156
+ {
157
+ "date": "2026-08-01",
158
+ "cwd": "/w",
159
+ "project_focus": [
160
+ "Bourdon"
161
+ ]
162
+ }
163
+ ],
164
+ "incoming": [
165
+ {
166
+ "date": "2026-08-01",
167
+ "cwd": "/w",
168
+ "project_focus": "OXbeat"
169
+ }
170
+ ],
171
+ "expected": {
172
+ "merged": [
173
+ {
174
+ "date": "2026-08-01",
175
+ "cwd": "/w",
176
+ "project_focus": [
177
+ "Bourdon",
178
+ "OXbeat"
179
+ ]
180
+ }
181
+ ],
182
+ "added": 0,
183
+ "updated": 1,
184
+ "clamped": 0
185
+ }
186
+ },
187
+ {
188
+ "id": "entity-alias-union-clamps-case-insensitive-name-key",
189
+ "family": "known_entities",
190
+ "existing": [
191
+ {
192
+ "name": "Bourdon",
193
+ "aliases": [
194
+ "alias-0",
195
+ "alias-1",
196
+ "alias-2",
197
+ "alias-3",
198
+ "alias-4",
199
+ "alias-5",
200
+ "alias-6",
201
+ "alias-7",
202
+ "alias-8",
203
+ "alias-9",
204
+ "alias-10",
205
+ "alias-11",
206
+ "alias-12",
207
+ "alias-13",
208
+ "alias-14",
209
+ "alias-15"
210
+ ]
211
+ }
212
+ ],
213
+ "incoming": [
214
+ {
215
+ "name": "bourdon",
216
+ "aliases": [
217
+ "fresh-alias"
218
+ ]
219
+ }
220
+ ],
221
+ "expected": {
222
+ "merged": [
223
+ {
224
+ "name": "bourdon",
225
+ "aliases": [
226
+ "alias-1",
227
+ "alias-2",
228
+ "alias-3",
229
+ "alias-4",
230
+ "alias-5",
231
+ "alias-6",
232
+ "alias-7",
233
+ "alias-8",
234
+ "alias-9",
235
+ "alias-10",
236
+ "alias-11",
237
+ "alias-12",
238
+ "alias-13",
239
+ "alias-14",
240
+ "alias-15",
241
+ "fresh-alias"
242
+ ]
243
+ }
244
+ ],
245
+ "added": 0,
246
+ "updated": 1,
247
+ "clamped": 1
248
+ }
249
+ },
250
+ {
251
+ "id": "fresh-row-scalar-list-normalized-on-add",
252
+ "family": "recent_sessions",
253
+ "existing": [],
254
+ "incoming": [
255
+ {
256
+ "date": "2026-08-02",
257
+ "cwd": "/n",
258
+ "project_focus": "solo"
259
+ }
260
+ ],
261
+ "expected": {
262
+ "merged": [
263
+ {
264
+ "date": "2026-08-02",
265
+ "cwd": "/n",
266
+ "project_focus": [
267
+ "solo"
268
+ ]
269
+ }
270
+ ],
271
+ "added": 1,
272
+ "updated": 0,
273
+ "clamped": 0
274
+ }
275
+ },
276
+ {
277
+ "id": "fresh-row-over-cap-passes-through-unclamped",
278
+ "family": "recent_sessions",
279
+ "existing": [],
280
+ "incoming": [
281
+ {
282
+ "date": "2026-08-03",
283
+ "cwd": "/o",
284
+ "key_actions": [
285
+ "x-0",
286
+ "x-1",
287
+ "x-2",
288
+ "x-3",
289
+ "x-4",
290
+ "x-5",
291
+ "x-6",
292
+ "x-7",
293
+ "x-8",
294
+ "x-9",
295
+ "x-10"
296
+ ]
297
+ }
298
+ ],
299
+ "expected": {
300
+ "merged": [
301
+ {
302
+ "date": "2026-08-03",
303
+ "cwd": "/o",
304
+ "key_actions": [
305
+ "x-0",
306
+ "x-1",
307
+ "x-2",
308
+ "x-3",
309
+ "x-4",
310
+ "x-5",
311
+ "x-6",
312
+ "x-7",
313
+ "x-8",
314
+ "x-9",
315
+ "x-10"
316
+ ]
317
+ }
318
+ ],
319
+ "added": 1,
320
+ "updated": 0,
321
+ "clamped": 0
322
+ }
323
+ }
324
+ ]
325
+ }
@@ -44,7 +44,8 @@
44
44
  "summary": "A retired experiment.",
45
45
  "tags": [
46
46
  "archived"
47
- ]
47
+ ],
48
+ "valid_to": "2026-01-15"
48
49
  },
49
50
  {
50
51
  "name": "Zephyr",
package/fixtures.pin.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "_doc": "The recorded fixture pin. CI and the package tests assert the vendored fixtures/manifest.json hashes to exactly this value, so the fixture set in any build is provably the reviewed one. Refresh via the re-pin ritual in README.md.",
3
- "conformance_version": "2.1.0",
4
- "manifest_sha256": "f854d2a75d4616554e97e5c746f5ca9ae30ff23ed21a6d023424922e2e70813e"
3
+ "conformance_version": "2.3.0",
4
+ "manifest_sha256": "8887c3db998a7062c5ef991edc1ddb8af20bc8a8d448228cb78000b3f8c4dfa5"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getbourdon/conformance",
3
- "version": "0.3.0",
3
+ "version": "0.5.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",