@hypequery/protocol-conformance 0.9.2 → 0.10.1

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,134 @@
1
+ [
2
+ {
3
+ "id": "basic",
4
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
5
+ "namespace": {
6
+ "project": "acme",
7
+ "environment": "production"
8
+ },
9
+ "keyVersion": 1,
10
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
11
+ "namespaceToken": "QZmJzTyhPUpRooLespx4XQ",
12
+ "key": "hq1.1.QZmJzTyhPUpRooLespx4XQ.uDrSq4MwQ-yttsrzdpCHbiGutMxHn2LM8sf2T0boN3k"
13
+ },
14
+ {
15
+ "id": "namespace-separates-environment",
16
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
17
+ "namespace": {
18
+ "project": "acme",
19
+ "environment": "staging"
20
+ },
21
+ "keyVersion": 1,
22
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
23
+ "namespaceToken": "Ze61MnuVhdrTfAaVhRQAlw",
24
+ "key": "hq1.1.Ze61MnuVhdrTfAaVhRQAlw.yOeRV5mUwtkZ2ElBExrNWtjpiO2VC7Ite2vLVtyua7U"
25
+ },
26
+ {
27
+ "id": "namespace-separates-project",
28
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
29
+ "namespace": {
30
+ "project": "globex",
31
+ "environment": "production"
32
+ },
33
+ "keyVersion": 1,
34
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
35
+ "namespaceToken": "VOSW_B4ow0Tv5VwAzLza9Q",
36
+ "key": "hq1.1.VOSW_B4ow0Tv5VwAzLza9Q.m3d9igKuFNjuJKT1K15y4H5VqnkqZ3YiYIrtZbeOhqI"
37
+ },
38
+ {
39
+ "id": "rotation-changes-key",
40
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
41
+ "namespace": {
42
+ "project": "acme",
43
+ "environment": "production"
44
+ },
45
+ "keyVersion": 2,
46
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
47
+ "namespaceToken": "QZmJzTyhPUpRooLespx4XQ",
48
+ "key": "hq1.2.QZmJzTyhPUpRooLespx4XQ.uDrSq4MwQ-yttsrzdpCHbiGutMxHn2LM8sf2T0boN3k"
49
+ },
50
+ {
51
+ "id": "secret-separates-key",
52
+ "secretHex": "2222222222222222222222222222222222222222222222222222222222222222",
53
+ "namespace": {
54
+ "project": "acme",
55
+ "environment": "production"
56
+ },
57
+ "keyVersion": 1,
58
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
59
+ "namespaceToken": "IOwBfU4fGoFMYm-dzKMTxw",
60
+ "key": "hq1.1.IOwBfU4fGoFMYm-dzKMTxw.0bhDqv_vgmO_y7t6gSX64uIh4uWj8iZX5Z5HIthWTZc"
61
+ },
62
+ {
63
+ "id": "long-secret",
64
+ "secretHex": "33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333",
65
+ "namespace": {
66
+ "project": "acme",
67
+ "environment": "production"
68
+ },
69
+ "keyVersion": 1,
70
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
71
+ "namespaceToken": "ZIWp472wGrPSAa8KgOAQAg",
72
+ "key": "hq1.1.ZIWp472wGrPSAa8KgOAQAg.k3DrKZocGPEgjdpv4_Y7AYzDbFZGe-mZUxPyEakGHWM"
73
+ },
74
+ {
75
+ "id": "empty-preimage",
76
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
77
+ "namespace": {
78
+ "project": "acme",
79
+ "environment": "production"
80
+ },
81
+ "keyVersion": 1,
82
+ "preimageUtf8": "",
83
+ "namespaceToken": "QZmJzTyhPUpRooLespx4XQ",
84
+ "key": "hq1.1.QZmJzTyhPUpRooLespx4XQ.JyTBb3tVj3hk39GNDkQdfzzacOFM7Mi28KI2JFF3x0U"
85
+ },
86
+ {
87
+ "id": "sensitive-preimage-not-recoverable",
88
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
89
+ "namespace": {
90
+ "project": "acme",
91
+ "environment": "production"
92
+ },
93
+ "keyVersion": 1,
94
+ "preimageUtf8": "{\"filters\":[{\"field\":\"email\",\"operator\":\"eq\",\"value\":\"ana@example.com\"}],\"tenant\":{\"value\":\"acme_corp\"}}",
95
+ "namespaceToken": "QZmJzTyhPUpRooLespx4XQ",
96
+ "key": "hq1.1.QZmJzTyhPUpRooLespx4XQ.GYbj4VYnkB6WuxsF1qI0k1PmLQiyiE1harFHqlUvREk"
97
+ },
98
+ {
99
+ "id": "max-key-version",
100
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
101
+ "namespace": {
102
+ "project": "acme",
103
+ "environment": "production"
104
+ },
105
+ "keyVersion": 2147483647,
106
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
107
+ "namespaceToken": "QZmJzTyhPUpRooLespx4XQ",
108
+ "key": "hq1.2147483647.QZmJzTyhPUpRooLespx4XQ.uDrSq4MwQ-yttsrzdpCHbiGutMxHn2LM8sf2T0boN3k"
109
+ },
110
+ {
111
+ "id": "deployment-target-punctuation",
112
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
113
+ "namespace": {
114
+ "project": "project-1",
115
+ "environment": "preview.eu:1"
116
+ },
117
+ "keyVersion": 1,
118
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
119
+ "namespaceToken": "5K9R0USPhZZ80IwqwSQTpA",
120
+ "key": "hq1.1.5K9R0USPhZZ80IwqwSQTpA.IoVojW5ZVqSAIc1xOKExteLniKobmndoGRIQ1SulVu4"
121
+ },
122
+ {
123
+ "id": "deployment-target-leading-digit",
124
+ "secretHex": "1111111111111111111111111111111111111111111111111111111111111111",
125
+ "namespace": {
126
+ "project": "1acme",
127
+ "environment": "production"
128
+ },
129
+ "keyVersion": 1,
130
+ "preimageUtf8": "{\"kind\":\"dataset\",\"target\":\"orders\",\"v\":1}",
131
+ "namespaceToken": "nCVELIgkASbf5L3bU9HY1Q",
132
+ "key": "hq1.1.nCVELIgkASbf5L3bU9HY1Q.0QiWBc1mnpiVmKm8nvYnTXoppJ7SEHtJNQgW-70eDMo"
133
+ }
134
+ ]
@@ -54,5 +54,43 @@
54
54
  "count": 9
55
55
  },
56
56
  "error": "HQ_IDENTIFIER_TOO_MANY_SEGMENTS"
57
+ },
58
+ {
59
+ "id": "qualified-bytes-513",
60
+ "mode": "qualified",
61
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
62
+ "error": "HQ_IDENTIFIER_TOO_LONG"
63
+ },
64
+ {
65
+ "id": "reserved-non-first-segment",
66
+ "mode": "qualified",
67
+ "value": "orders.__hypequery_internal",
68
+ "error": "HQ_IDENTIFIER_RESERVED"
69
+ },
70
+ {
71
+ "id": "precedence-length-before-reserved",
72
+ "mode": "simple",
73
+ "generator": {
74
+ "type": "repeat-string",
75
+ "value": "__hypequery",
76
+ "count": 12
77
+ },
78
+ "error": "HQ_IDENTIFIER_TOO_LONG"
79
+ },
80
+ {
81
+ "id": "precedence-length-before-format",
82
+ "mode": "simple",
83
+ "generator": {
84
+ "type": "repeat-string",
85
+ "value": "-",
86
+ "count": 129
87
+ },
88
+ "error": "HQ_IDENTIFIER_TOO_LONG"
89
+ },
90
+ {
91
+ "id": "precedence-format-before-reserved",
92
+ "mode": "simple",
93
+ "value": "__hypequery-internal",
94
+ "error": "HQ_IDENTIFIER_INVALID_FORMAT"
57
95
  }
58
96
  ]
@@ -22,5 +22,23 @@
22
22
  "mode": "qualified",
23
23
  "value": "orders.customer.country",
24
24
  "segments": ["orders", "customer", "country"]
25
+ },
26
+ {
27
+ "id": "segment-bytes-128",
28
+ "mode": "simple",
29
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
30
+ "segments": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
31
+ },
32
+ {
33
+ "id": "qualified-segments-8",
34
+ "mode": "qualified",
35
+ "value": "s0.s1.s2.s3.s4.s5.s6.s7",
36
+ "segments": ["s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7"]
37
+ },
38
+ {
39
+ "id": "qualified-bytes-512",
40
+ "mode": "qualified",
41
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
42
+ "segments": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
25
43
  }
26
44
  ]
@@ -5,113 +5,235 @@
5
5
  {
6
6
  "name": "tagged-values-v1",
7
7
  "rfc": "0001",
8
- "codePrefixes": ["HQ_VALUE_"],
8
+ "codePrefixes": [
9
+ "HQ_VALUE_"
10
+ ],
9
11
  "files": [
10
- { "path": "tagged-values-v1/success.json", "role": "success" },
11
- { "path": "tagged-values-v1/rejections.json", "role": "rejection" }
12
+ {
13
+ "path": "tagged-values-v1/success.json",
14
+ "role": "success"
15
+ },
16
+ {
17
+ "path": "tagged-values-v1/rejections.json",
18
+ "role": "rejection"
19
+ }
12
20
  ]
13
21
  },
14
22
  {
15
23
  "name": "identifiers-v1",
16
24
  "rfc": "0002",
17
- "codePrefixes": ["HQ_IDENTIFIER_"],
25
+ "codePrefixes": [
26
+ "HQ_IDENTIFIER_"
27
+ ],
18
28
  "files": [
19
- { "path": "identifiers-v1/success.json", "role": "success" },
20
- { "path": "identifiers-v1/rejections.json", "role": "rejection" }
29
+ {
30
+ "path": "identifiers-v1/success.json",
31
+ "role": "success"
32
+ },
33
+ {
34
+ "path": "identifiers-v1/rejections.json",
35
+ "role": "rejection"
36
+ }
21
37
  ]
22
38
  },
23
39
  {
24
40
  "name": "expressions-v1",
25
41
  "rfc": "0003",
26
- "codePrefixes": ["HQ_EXPRESSION_"],
42
+ "codePrefixes": [
43
+ "HQ_EXPRESSION_"
44
+ ],
27
45
  "files": [
28
46
  {
29
47
  "path": "expressions-v1/success.json",
30
48
  "role": "success",
31
- "sections": ["/expressions", "/queries"]
49
+ "sections": [
50
+ "/expressions",
51
+ "/queries"
52
+ ]
32
53
  },
33
- { "path": "expressions-v1/rejections.json", "role": "rejection" }
54
+ {
55
+ "path": "expressions-v1/rejections.json",
56
+ "role": "rejection"
57
+ }
34
58
  ]
35
59
  },
36
60
  {
37
61
  "name": "query-schemas-v1",
38
62
  "rfc": "0004",
39
- "codePrefixes": ["HQ_SCHEMA_"],
63
+ "codePrefixes": [
64
+ "HQ_SCHEMA_"
65
+ ],
40
66
  "files": [
41
- { "path": "query-schemas-v1/success.json", "role": "success" },
42
- { "path": "query-schemas-v1/rejections.json", "role": "rejection" }
67
+ {
68
+ "path": "query-schemas-v1/success.json",
69
+ "role": "success"
70
+ },
71
+ {
72
+ "path": "query-schemas-v1/rejections.json",
73
+ "role": "rejection"
74
+ }
43
75
  ]
44
76
  },
45
77
  {
46
78
  "name": "query-implementations-v1",
47
79
  "rfc": "0005",
48
- "codePrefixes": ["HQ_QUERY_IMPLEMENTATION_"],
80
+ "codePrefixes": [
81
+ "HQ_QUERY_IMPLEMENTATION_"
82
+ ],
49
83
  "files": [
50
- { "path": "query-implementations-v1/success.json", "role": "success" },
51
- { "path": "query-implementations-v1/rejections.json", "role": "rejection" }
84
+ {
85
+ "path": "query-implementations-v1/success.json",
86
+ "role": "success"
87
+ },
88
+ {
89
+ "path": "query-implementations-v1/rejections.json",
90
+ "role": "rejection"
91
+ }
52
92
  ]
53
93
  },
54
94
  {
55
95
  "name": "deployments-v1",
56
96
  "rfc": "0006",
57
- "codePrefixes": ["HQ_DEPLOYMENT_"],
97
+ "codePrefixes": [
98
+ "HQ_DEPLOYMENT_"
99
+ ],
58
100
  "files": [
59
- { "path": "deployments-v1/success.json", "role": "success" },
60
- { "path": "deployments-v1/rejections.json", "role": "rejection" },
61
- { "path": "deployments-v1/identity.json", "role": "identity" }
101
+ {
102
+ "path": "deployments-v1/success.json",
103
+ "role": "success"
104
+ },
105
+ {
106
+ "path": "deployments-v1/rejections.json",
107
+ "role": "rejection"
108
+ },
109
+ {
110
+ "path": "deployments-v1/identity.json",
111
+ "role": "identity"
112
+ }
62
113
  ]
63
114
  },
64
115
  {
65
116
  "name": "deployment-bundles-v1",
66
117
  "rfc": "0007",
67
- "codePrefixes": ["HQ_BUNDLE_"],
118
+ "codePrefixes": [
119
+ "HQ_BUNDLE_"
120
+ ],
68
121
  "files": [
69
- { "path": "deployment-bundles-v1/success.json", "role": "success" },
70
- { "path": "deployment-bundles-v1/rejections.json", "role": "rejection" },
71
- { "path": "deployment-bundles-v1/identity.json", "role": "identity" }
122
+ {
123
+ "path": "deployment-bundles-v1/success.json",
124
+ "role": "success"
125
+ },
126
+ {
127
+ "path": "deployment-bundles-v1/rejections.json",
128
+ "role": "rejection"
129
+ },
130
+ {
131
+ "path": "deployment-bundles-v1/identity.json",
132
+ "role": "identity"
133
+ }
72
134
  ]
73
135
  },
74
136
  {
75
137
  "name": "deployment-releases-v1",
76
138
  "rfc": "0008",
77
- "codePrefixes": ["HQ_RELEASE_"],
139
+ "codePrefixes": [
140
+ "HQ_RELEASE_"
141
+ ],
78
142
  "files": [
79
- { "path": "deployment-releases-v1/success.json", "role": "success" },
80
- { "path": "deployment-releases-v1/rejections.json", "role": "rejection" },
81
- { "path": "deployment-releases-v1/identity.json", "role": "identity" }
143
+ {
144
+ "path": "deployment-releases-v1/success.json",
145
+ "role": "success"
146
+ },
147
+ {
148
+ "path": "deployment-releases-v1/rejections.json",
149
+ "role": "rejection"
150
+ },
151
+ {
152
+ "path": "deployment-releases-v1/identity.json",
153
+ "role": "identity"
154
+ }
82
155
  ]
83
156
  },
84
157
  {
85
158
  "name": "query-events-v1",
86
159
  "rfc": "0011",
87
- "codePrefixes": ["HQ_EVENT_"],
160
+ "codePrefixes": [
161
+ "HQ_EVENT_"
162
+ ],
88
163
  "files": [
89
- { "path": "query-events-v1/success.json", "role": "success" },
90
- { "path": "query-events-v1/rejections.json", "role": "rejection" }
164
+ {
165
+ "path": "query-events-v1/success.json",
166
+ "role": "success"
167
+ },
168
+ {
169
+ "path": "query-events-v1/rejections.json",
170
+ "role": "rejection"
171
+ }
91
172
  ]
92
173
  },
93
174
  {
94
175
  "name": "query-diagnostics-v1",
95
176
  "rfc": "0011",
96
- "codePrefixes": ["HQ_DIAGNOSTICS_"],
177
+ "codePrefixes": [
178
+ "HQ_DIAGNOSTICS_"
179
+ ],
97
180
  "files": [
98
- { "path": "query-diagnostics-v1/success.json", "role": "success" },
99
- { "path": "query-diagnostics-v1/rejections.json", "role": "rejection" }
181
+ {
182
+ "path": "query-diagnostics-v1/success.json",
183
+ "role": "success"
184
+ },
185
+ {
186
+ "path": "query-diagnostics-v1/rejections.json",
187
+ "role": "rejection"
188
+ }
100
189
  ]
101
190
  },
102
191
  {
103
192
  "name": "sql-portability-v1",
104
193
  "rfc": "0003",
105
- "codePrefixes": ["HQ_SQL_PORT_"],
194
+ "codePrefixes": [
195
+ "HQ_SQL_PORT_"
196
+ ],
106
197
  "files": [
107
- { "path": "sql-portability-v1/portable.json", "role": "portable" },
108
- { "path": "sql-portability-v1/non-portable.json", "role": "non-portable" }
198
+ {
199
+ "path": "sql-portability-v1/portable.json",
200
+ "role": "portable"
201
+ },
202
+ {
203
+ "path": "sql-portability-v1/non-portable.json",
204
+ "role": "non-portable"
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ "name": "cache-keys-v1",
210
+ "rfc": "0013",
211
+ "codePrefixes": [
212
+ "HQ_CACHE_KEY_"
213
+ ],
214
+ "files": [
215
+ {
216
+ "path": "cache-keys-v1/success.json",
217
+ "role": "success"
218
+ },
219
+ {
220
+ "path": "cache-keys-v1/rejections.json",
221
+ "role": "rejection"
222
+ }
109
223
  ]
110
224
  }
111
225
  ],
112
226
  "fuzz": [
113
- { "path": "fuzz-seeds-v1/value-sources.json", "family": "tagged-values-v1" },
114
- { "path": "fuzz-seeds-v1/structured-values.json" },
115
- { "path": "fuzz-seeds-v1/sql-expressions.json", "family": "sql-portability-v1" }
227
+ {
228
+ "path": "fuzz-seeds-v1/value-sources.json",
229
+ "family": "tagged-values-v1"
230
+ },
231
+ {
232
+ "path": "fuzz-seeds-v1/structured-values.json"
233
+ },
234
+ {
235
+ "path": "fuzz-seeds-v1/sql-expressions.json",
236
+ "family": "sql-portability-v1"
237
+ }
116
238
  ]
117
239
  }
@@ -1,8 +1,59 @@
1
- # Tagged value v1 fixtures
1
+ # Tagged value version 1 fixtures
2
2
 
3
- These draft fixtures accompany RFC 0001 and pin canonical values before they become a stable wire contract.
3
+ These draft language-neutral fixtures accompany RFC 0001. They become
4
+ normative when the RFC is accepted.
4
5
 
5
- - `success.json` contains parsed values, exact RFC 8785 UTF-8 bytes as hex, and SHA-256 integrity hashes.
6
- - `rejections.json` contains exact JSON source, parsed values, or deterministic boundary generators with required error codes.
6
+ ## Success manifest
7
7
 
8
- The hash here verifies fixture bytes; it is not a deployment or cache identity. Duplicate-key cases must reach a duplicate-aware parser before ordinary object decoding. Generated cases cover non-finite numbers, nested and wide arrays, repeated strings, and integer tag/type compatibility.
8
+ Each entry in `success.json` contains:
9
+
10
+ - `id`: stable fixture identifier;
11
+ - `value`: the parsed canonical value before JCS;
12
+ - `canonicalHex`: exact RFC 8785 canonical UTF-8 bytes as lowercase hex;
13
+ - `sha256`: lowercase SHA-256 of those exact bytes.
14
+
15
+ The hash is a fixture integrity check, not a deployment digest or cache key.
16
+
17
+ The success corpus includes every finite, non-negative-zero number from RFC
18
+ 8785 Appendix B. RFC 0001 is intentionally stricter than JCS for negative zero,
19
+ NaN, and infinities, so those Appendix B cases live in the rejection corpus.
20
+
21
+ ## Rejection manifest
22
+
23
+ Entries in `rejections.json` use one of:
24
+
25
+ - `sourceUtf8`: exact JSON source presented to a duplicate-aware parser;
26
+ - `value`: an already parsed value presented to model validation;
27
+ - `generator`: a deterministic boundary case that would be wasteful to store
28
+ expanded.
29
+
30
+ `declaredClickHouseType`, when present, supplies the containing schema type
31
+ needed to validate integer-tag requirements and exact tag/type compatibility.
32
+
33
+ Generators expand as follows:
34
+
35
+ - `non-finite-float`: creates the host-language non-finite number named by
36
+ `value` (`NaN`, `Infinity`, or `-Infinity`) after JSON parsing;
37
+ - `nested-array`: wraps `leaf` in the tagged array form `depth` times;
38
+ - `array`: creates one tagged array containing `items` copies of `value`;
39
+ - `array-tree`: creates one tagged array containing `branches` tagged arrays,
40
+ each containing `itemsPerBranch` copies of `value`;
41
+ - `repeat-string`: concatenates `count` copies of the UTF-8 string `utf8`;
42
+ - `unsafe-accessor`: builds an object whose `$hypequery` member is served by a
43
+ computed accessor rather than a plain data property. Implementations whose
44
+ input model cannot express computed accessors respond `skipped`, and must
45
+ then declare their own hostile-object suite per RFC 0012.
46
+
47
+ `error` is the required stable failure code. `phase` identifies the earliest
48
+ stage that must reject the input. A consumer may reject earlier only when it
49
+ returns the same code and does not partially execute or hash the value.
50
+
51
+ ## What these fixtures cannot express
52
+
53
+ Metadata integers are accepted by value, not by lexical form: `1`, `1.0`, and
54
+ `1e0` all denote `1` and all canonicalize to `1`. The manifest cannot carry
55
+ that distinction — writing `1.0` into a `value` field serializes back to `1` —
56
+ so per-language unit tests cover the coercion of an integral host float.
57
+
58
+ Fixture runners must not pass `sourceUtf8` through an ordinary JSON dictionary
59
+ parser before duplicate-key detection.
@@ -294,5 +294,94 @@
294
294
  "count": 65537
295
295
  },
296
296
  "error": "HQ_VALUE_TOO_LARGE"
297
+ },
298
+ {
299
+ "id": "datetime64-nanoseconds-overflow",
300
+ "phase": "model",
301
+ "value": {
302
+ "$hypequery": {
303
+ "type": "datetime",
304
+ "version": 1,
305
+ "clickhouseType": "DateTime64",
306
+ "precision": 9,
307
+ "timezone": "UTC",
308
+ "value": "2262-04-11T23:47:16.854775808Z"
309
+ }
310
+ },
311
+ "error": "HQ_VALUE_OUT_OF_RANGE"
312
+ },
313
+ {
314
+ "id": "timezone-fixed-offset",
315
+ "phase": "model",
316
+ "value": {
317
+ "$hypequery": {
318
+ "type": "datetime",
319
+ "version": 1,
320
+ "clickhouseType": "DateTime",
321
+ "precision": 0,
322
+ "timezone": "+02:00",
323
+ "value": "2026-07-13T14:30:45Z"
324
+ }
325
+ },
326
+ "error": "HQ_VALUE_INVALID_FORMAT"
327
+ },
328
+ {
329
+ "id": "control-character-vertical-tab",
330
+ "phase": "model",
331
+ "value": "before\u000bafter",
332
+ "error": "HQ_VALUE_CONTROL_CHARACTER"
333
+ },
334
+ {
335
+ "id": "value-unsafe-accessor",
336
+ "phase": "model",
337
+ "generator": {
338
+ "type": "unsafe-accessor"
339
+ },
340
+ "error": "HQ_VALUE_UNSAFE_OBJECT"
341
+ },
342
+ {
343
+ "id": "timezone-offset-shaped",
344
+ "phase": "model",
345
+ "value": {
346
+ "$hypequery": {
347
+ "type": "datetime",
348
+ "version": 1,
349
+ "clickhouseType": "DateTime",
350
+ "precision": 0,
351
+ "timezone": "+0200",
352
+ "value": "2026-07-13T14:30:45Z"
353
+ }
354
+ },
355
+ "error": "HQ_VALUE_INVALID_FORMAT"
356
+ },
357
+ {
358
+ "id": "timezone-leading-underscore",
359
+ "phase": "model",
360
+ "value": {
361
+ "$hypequery": {
362
+ "type": "datetime",
363
+ "version": 1,
364
+ "clickhouseType": "DateTime",
365
+ "precision": 0,
366
+ "timezone": "_Foo/Bar",
367
+ "value": "2026-07-13T14:30:45Z"
368
+ }
369
+ },
370
+ "error": "HQ_VALUE_INVALID_FORMAT"
371
+ },
372
+ {
373
+ "id": "timezone-too-long",
374
+ "phase": "model",
375
+ "value": {
376
+ "$hypequery": {
377
+ "type": "datetime",
378
+ "version": 1,
379
+ "clickhouseType": "DateTime",
380
+ "precision": 0,
381
+ "timezone": "Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
382
+ "value": "2026-07-13T14:30:45Z"
383
+ }
384
+ },
385
+ "error": "HQ_VALUE_TOO_LARGE"
297
386
  }
298
387
  ]