@getbourdon/conformance 0.3.0 → 0.4.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
|
+
}
|
package/fixtures/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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.
|
|
3
|
+
"conformance_version": "2.2.0",
|
|
4
4
|
"produced_against": {
|
|
5
5
|
"bourdon_version": "0.13.0"
|
|
6
6
|
},
|
|
@@ -115,6 +115,11 @@
|
|
|
115
115
|
"sha256": "9753ad1fd4a092bdf4110b3b24576f2bfe7001d6d6758ef55047ee5da851e25c",
|
|
116
116
|
"producer": "tools/gen_conformance.py::tier_matrix"
|
|
117
117
|
},
|
|
118
|
+
{
|
|
119
|
+
"path": "cursor_vectors.json",
|
|
120
|
+
"sha256": "433e7a1c8f87f5544b8a0a3a8df1be89b6f53199f0295a458564bf53a9bf8029",
|
|
121
|
+
"producer": "tools/gen_conformance.py::cursor_vectors"
|
|
122
|
+
},
|
|
118
123
|
{
|
|
119
124
|
"path": "on_disk/federation.yaml",
|
|
120
125
|
"sha256": "7a3795961d369ec57a6caa6af15e250d016c98e883077e82d7d103bd0c016cfe",
|
|
@@ -327,7 +332,7 @@
|
|
|
327
332
|
},
|
|
328
333
|
{
|
|
329
334
|
"path": "mcp_snapshots/_normalizer.json",
|
|
330
|
-
"sha256": "
|
|
335
|
+
"sha256": "438071a3b1de83fb23083fd9ad2d4a734a27032d84faabf9d5772f14779a1721",
|
|
331
336
|
"producer": "tools/gen_conformance.py::mcp_snapshots"
|
|
332
337
|
},
|
|
333
338
|
{
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
|
-
"_doc": "decodes a
|
|
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
|
{
|
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.
|
|
4
|
-
"manifest_sha256": "
|
|
3
|
+
"conformance_version": "2.2.0",
|
|
4
|
+
"manifest_sha256": "4854fbdf12003fc8f7bc198fa98e83636293d0bfbee91116335614cd1abc0518"
|
|
5
5
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getbourdon/conformance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.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",
|