@hypequery/protocol-conformance 0.16.1 → 0.17.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.
@@ -1 +1 @@
1
- {"version":3,"file":"client-contract-fixtures.d.ts","sourceRoot":"","sources":["../src/client-contract-fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAwBpF"}
1
+ {"version":3,"file":"client-contract-fixtures.d.ts","sourceRoot":"","sources":["../src/client-contract-fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CA4BpF"}
@@ -43,6 +43,11 @@ export function composeClientContractCases(cases) {
43
43
  const dimensions = Object.fromEntries(Array.from({ length: 256 }, (_, i) => ['field' + i, null]));
44
44
  value = { ...base(values, 'build'), endpoints: Array.from({ length: generator.count }, () => ({ dimensions })) };
45
45
  }
46
+ else if (generator.type === 'annotation-fields') {
47
+ const fields = Object.fromEntries(Array.from({ length: generator.count }, (_, i) => ['field' + i, { label: 'x' }]));
48
+ const build = base(values, 'build'), endpoints = build.endpoints;
49
+ value = { ...build, endpoints: [{ ...endpoints[0], annotations: { fields } }, ...endpoints.slice(1)] };
50
+ }
46
51
  else if (generator.type === 'members')
47
52
  value = Array.from({ length: generator.count }, () => null);
48
53
  else if (generator.type === 'bytes')
@@ -3,7 +3,8 @@
3
3
  Normative vectors for [RFC 0018](../../rfc/0018-semantic-client-contract.md).
4
4
  The family is required by the TypeScript/Python conformance gates.
5
5
 
6
- - success.json pins build, metric-only, empty and narrowed signed contracts.
6
+ - success.json pins build, metric-only, empty, narrowed and annotated signed contracts.
7
+ annotated is build plus endpoint annotations: same schemaHashes, new contentHash.
7
8
  - identities.json pins canonical complete documents and both identity domains.
8
9
  - rejections.json pins malformed descriptors, identity failures, safe messages
9
10
  and JSON Pointer paths, plus exact size/depth/count boundaries and text decoding.
@@ -19,7 +20,8 @@ implementations receive complete inputs and need no fixture-file access. A set
19
20
  array adds/replaces fields in a deep-copied base using RFC 6901 JSON Pointers;
20
21
  - appends an array element. Parents must exist. It never recomputes identities:
21
22
  malformed shape validation must precede identity validation. The runner's boundary
22
- generators expand only synthetic byte, depth, endpoint, descriptor and array-member counts.
23
+ generators expand only synthetic byte, depth, endpoint, descriptor, annotation-field
24
+ and array-member counts.
23
25
  Identity cases reuse the matching success value, as other fixture families do.
24
26
 
25
27
  The query compiler preserves fixed MCP tool names; empty target sets have required
@@ -27,3 +29,8 @@ never-valued routing fields. JSON Schema pins structural types; call-time semant
27
29
  validation additionally enforces selected fields, uniqueness, portable timezones
28
30
  and combined predicate budgets. No artifact identity authenticates a principal or
29
31
  certifies an endpoint's execution implementation.
32
+
33
+ RFC 0023 added the `null-checks` contract, whose filters advertise isNull and
34
+ isNotNull on every logical type, with value-free accepted queries and rejections
35
+ for a null check carrying a value (null included), one the filter does not
36
+ advertise, and a value operator without a value.
@@ -32,5 +32,23 @@
32
32
  "ordersRevenue": "e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d"
33
33
  },
34
34
  "sha256": "c350b9b6e0351acbbac7509bf5d889afa343b9fb5048d826265d8e9f5ef895d8"
35
+ },
36
+ {
37
+ "id": "annotated",
38
+ "canonical": "{\"contentHash\":\"1cc64833994d5da761e9dae3b62992f66b6a270f01228ab97d91ebb74e54ae85\",\"endpoints\":[{\"annotations\":{\"description\":\"Reference list of supported countries.\",\"label\":\"Countries\"},\"dataset\":\"countries\",\"defaultMeasures\":[],\"dimensions\":{\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{},\"id\":\"countries\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":0,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":0},\"measures\":{},\"metadata\":false,\"path\":\"/api/v1/datasets/countries/query\",\"schemaHash\":\"9a5f50cd7564f283d2f0ee8f3f1cdc27731683c939e176bd25919a83d28d94ca\",\"time\":null},{\"annotations\":{\"description\":\"One row per customer order.\",\"fields\":{\"country\":{\"label\":\"Country\"},\"customer.tier\":{\"description\":\"Tier of the ordering customer.\"},\"revenue\":{\"description\":\"Gross order value in €, before refunds.\",\"label\":\"Revenue\"}},\"label\":\"Orders\"},\"dataset\":\"orders\",\"defaultMeasures\":[\"revenue\",\"orderCount\",\"latestLabel\"],\"dimensions\":{\"amount\":{\"groupable\":true,\"nullable\":\"unknown\",\"orderable\":true,\"type\":\"number\",\"wireType\":\"number-or-string\"},\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"},\"customer.active\":{\"groupable\":false,\"nullable\":true,\"orderable\":false,\"type\":\"boolean\",\"wireType\":\"boolean\"},\"customer.tier\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"amount\":{\"operators\":[\"between\",\"eq\",\"gt\",\"gte\",\"in\",\"lt\",\"lte\",\"neq\",\"notIn\"],\"type\":\"number\"},\"country\":{\"operators\":[\"eq\",\"in\",\"like\",\"neq\",\"notIn\"],\"type\":\"string\"},\"customer.active\":{\"operators\":[\"eq\",\"neq\"],\"type\":\"boolean\"},\"customer.tier\":{\"operators\":[\"eq\",\"in\"],\"type\":\"string\"},\"paidStatus\":{\"operators\":[\"eq\"],\"type\":\"string\"}},\"id\":\"orders\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":50,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"averageRevenue\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"customer.unique\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"latestLabel\":{\"having\":false,\"nullable\":true,\"wireType\":\"string\"},\"orderCount\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"revenue\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":true,\"path\":\"/api/v1/datasets/orders/query\",\"schemaHash\":\"88802c0d4798fd0758b7e7697f582b034afada967bfe0fdcb1cafd957144b1f3\",\"time\":{\"defaultTimezone\":\"UTC\",\"grains\":[\"day\",\"hour\",\"month\",\"week\"],\"periodFormat\":\"calendar-date-or-local-datetime-v1\",\"timezone\":true}},{\"annotations\":{\"description\":\"One row per customer order.\",\"fields\":{\"revenue\":{\"description\":\"Gross order value in €, before refunds.\",\"label\":\"Revenue\"}},\"label\":\"Orders\"},\"dataset\":\"orders\",\"dimensions\":{\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"},\"customer.active\":{\"groupable\":false,\"nullable\":true,\"orderable\":false,\"type\":\"boolean\",\"wireType\":\"boolean\"},\"customer.tier\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"amount\":{\"operators\":[\"between\",\"eq\",\"gt\",\"gte\",\"in\",\"lt\",\"lte\",\"neq\",\"notIn\"],\"type\":\"number\"},\"country\":{\"operators\":[\"eq\",\"in\",\"like\",\"neq\",\"notIn\"],\"type\":\"string\"},\"customer.active\":{\"operators\":[\"eq\",\"neq\"],\"type\":\"boolean\"},\"customer.tier\":{\"operators\":[\"eq\",\"in\"],\"type\":\"string\"},\"paidStatus\":{\"operators\":[\"eq\"],\"type\":\"string\"}},\"id\":\"ordersRevenue\",\"kind\":\"metric\",\"limits\":{\"defaultLimit\":20,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":20,\"maxMeasures\":1,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"revenue\":{\"having\":false,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":true,\"path\":\"/api/v1/metrics/revenue\",\"schemaHash\":\"e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d\",\"time\":{\"defaultTimezone\":\"UTC\",\"grains\":[\"day\",\"hour\",\"month\",\"week\"],\"periodFormat\":\"calendar-date-or-local-datetime-v1\",\"timezone\":true}}],\"kind\":\"hypequery-client-contract\",\"version\":1,\"view\":\"build\"}",
39
+ "endpointHashes": {
40
+ "countries": "9a5f50cd7564f283d2f0ee8f3f1cdc27731683c939e176bd25919a83d28d94ca",
41
+ "orders": "88802c0d4798fd0758b7e7697f582b034afada967bfe0fdcb1cafd957144b1f3",
42
+ "ordersRevenue": "e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d"
43
+ },
44
+ "sha256": "1cc64833994d5da761e9dae3b62992f66b6a270f01228ab97d91ebb74e54ae85"
45
+ },
46
+ {
47
+ "id": "null-checks",
48
+ "canonical": "{\"contentHash\":\"08e3b75129b0f8c528d7dc25ba19ecf7472b5ef2a152655d3181c21e41f2e5c1\",\"endpoints\":[{\"dataset\":\"customers\",\"defaultMeasures\":[\"customerCount\"],\"dimensions\":{\"plan\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"churnedAt\":{\"operators\":[\"gte\",\"isNotNull\",\"isNull\"],\"type\":\"timestamp\"},\"plan\":{\"operators\":[\"eq\",\"isNull\"],\"type\":\"string\"},\"seats\":{\"operators\":[\"isNotNull\"],\"type\":\"number\"},\"trial\":{\"operators\":[\"eq\",\"isNotNull\",\"isNull\"],\"type\":\"boolean\"}},\"id\":\"customers\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":50,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"customerCount\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":false,\"path\":\"/api/v1/datasets/customers/query\",\"schemaHash\":\"67821b626e7688afa43c6598893a736854b658924e4564361b1db8bcd1f3192d\",\"time\":null}],\"kind\":\"hypequery-client-contract\",\"version\":1,\"view\":\"build\"}",
49
+ "endpointHashes": {
50
+ "customers": "67821b626e7688afa43c6598893a736854b658924e4564361b1db8bcd1f3192d"
51
+ },
52
+ "sha256": "08e3b75129b0f8c528d7dc25ba19ecf7472b5ef2a152655d3181c21e41f2e5c1"
35
53
  }
36
54
  ]
@@ -28,6 +28,35 @@
28
28
  "effectiveLimit": 100
29
29
  }
30
30
  },
31
+ {
32
+ "id": "annotated-contract-query",
33
+ "contract": "annotated",
34
+ "endpoint": "orders",
35
+ "input": {},
36
+ "mode": "query",
37
+ "expected": {
38
+ "body": {
39
+ "dimensions": [],
40
+ "filters": [],
41
+ "orderBy": [],
42
+ "limit": 100,
43
+ "offset": 0,
44
+ "includeMeta": false,
45
+ "measures": [
46
+ "revenue",
47
+ "orderCount",
48
+ "latestLabel"
49
+ ],
50
+ "having": []
51
+ },
52
+ "selectedMeasures": [
53
+ "revenue",
54
+ "orderCount",
55
+ "latestLabel"
56
+ ],
57
+ "effectiveLimit": 100
58
+ }
59
+ },
31
60
  {
32
61
  "id": "explicit-derived-and-related",
33
62
  "contract": "build",
@@ -480,5 +509,113 @@
480
509
  ],
481
510
  "effectiveLimit": 1000
482
511
  }
512
+ },
513
+ {
514
+ "id": "null-check-filters-without-value",
515
+ "contract": "null-checks",
516
+ "endpoint": "customers",
517
+ "input": {
518
+ "filters": [
519
+ {
520
+ "field": "churnedAt",
521
+ "operator": "isNotNull"
522
+ },
523
+ {
524
+ "field": "plan",
525
+ "operator": "isNull"
526
+ },
527
+ {
528
+ "field": "seats",
529
+ "operator": "isNotNull"
530
+ },
531
+ {
532
+ "field": "trial",
533
+ "operator": "isNull"
534
+ }
535
+ ]
536
+ },
537
+ "mode": "query",
538
+ "expected": {
539
+ "body": {
540
+ "dimensions": [],
541
+ "filters": [
542
+ {
543
+ "field": "churnedAt",
544
+ "operator": "isNotNull"
545
+ },
546
+ {
547
+ "field": "plan",
548
+ "operator": "isNull"
549
+ },
550
+ {
551
+ "field": "seats",
552
+ "operator": "isNotNull"
553
+ },
554
+ {
555
+ "field": "trial",
556
+ "operator": "isNull"
557
+ }
558
+ ],
559
+ "orderBy": [],
560
+ "limit": 100,
561
+ "offset": 0,
562
+ "includeMeta": false,
563
+ "measures": [
564
+ "customerCount"
565
+ ],
566
+ "having": []
567
+ },
568
+ "selectedMeasures": [
569
+ "customerCount"
570
+ ],
571
+ "effectiveLimit": 100
572
+ }
573
+ },
574
+ {
575
+ "id": "null-check-beside-value-filter",
576
+ "contract": "null-checks",
577
+ "endpoint": "customers",
578
+ "input": {
579
+ "filters": [
580
+ {
581
+ "field": "churnedAt",
582
+ "operator": "isNotNull"
583
+ },
584
+ {
585
+ "field": "churnedAt",
586
+ "operator": "gte",
587
+ "value": "2026-01-01"
588
+ }
589
+ ]
590
+ },
591
+ "mode": "query",
592
+ "expected": {
593
+ "body": {
594
+ "dimensions": [],
595
+ "filters": [
596
+ {
597
+ "field": "churnedAt",
598
+ "operator": "isNotNull"
599
+ },
600
+ {
601
+ "field": "churnedAt",
602
+ "operator": "gte",
603
+ "value": "2026-01-01"
604
+ }
605
+ ],
606
+ "orderBy": [],
607
+ "limit": 100,
608
+ "offset": 0,
609
+ "includeMeta": false,
610
+ "measures": [
611
+ "customerCount"
612
+ ],
613
+ "having": []
614
+ },
615
+ "selectedMeasures": [
616
+ "customerCount"
617
+ ],
618
+ "effectiveLimit": 100
619
+ }
483
620
  }
484
621
  ]
@@ -2110,5 +2110,110 @@
2110
2110
  "mode": "query",
2111
2111
  "path": "/limit",
2112
2112
  "message": "Invalid client query."
2113
+ },
2114
+ {
2115
+ "id": "null-check-with-value-rejected",
2116
+ "contract": "null-checks",
2117
+ "endpoint": "customers",
2118
+ "input": {
2119
+ "filters": [
2120
+ {
2121
+ "field": "churnedAt",
2122
+ "operator": "isNotNull",
2123
+ "value": "2026-01-01"
2124
+ }
2125
+ ]
2126
+ },
2127
+ "error": "HQ_CLIENT_QUERY",
2128
+ "mode": "query",
2129
+ "path": "",
2130
+ "message": "Invalid client query."
2131
+ },
2132
+ {
2133
+ "id": "null-check-with-null-value-rejected",
2134
+ "contract": "null-checks",
2135
+ "endpoint": "customers",
2136
+ "input": {
2137
+ "filters": [
2138
+ {
2139
+ "field": "plan",
2140
+ "operator": "isNull",
2141
+ "value": null
2142
+ }
2143
+ ]
2144
+ },
2145
+ "error": "HQ_CLIENT_QUERY",
2146
+ "mode": "query",
2147
+ "path": "",
2148
+ "message": "Invalid client query."
2149
+ },
2150
+ {
2151
+ "id": "null-check-with-boolean-value-rejected",
2152
+ "contract": "null-checks",
2153
+ "endpoint": "customers",
2154
+ "input": {
2155
+ "filters": [
2156
+ {
2157
+ "field": "trial",
2158
+ "operator": "isNull",
2159
+ "value": true
2160
+ }
2161
+ ]
2162
+ },
2163
+ "error": "HQ_CLIENT_QUERY",
2164
+ "mode": "query",
2165
+ "path": "",
2166
+ "message": "Invalid client query."
2167
+ },
2168
+ {
2169
+ "id": "null-check-not-advertised",
2170
+ "contract": "null-checks",
2171
+ "endpoint": "customers",
2172
+ "input": {
2173
+ "filters": [
2174
+ {
2175
+ "field": "plan",
2176
+ "operator": "isNotNull"
2177
+ }
2178
+ ]
2179
+ },
2180
+ "error": "HQ_CLIENT_QUERY",
2181
+ "mode": "query",
2182
+ "path": "",
2183
+ "message": "Invalid client query."
2184
+ },
2185
+ {
2186
+ "id": "null-check-not-advertised-by-build",
2187
+ "contract": "build",
2188
+ "endpoint": "orders",
2189
+ "input": {
2190
+ "filters": [
2191
+ {
2192
+ "field": "country",
2193
+ "operator": "isNull"
2194
+ }
2195
+ ]
2196
+ },
2197
+ "error": "HQ_CLIENT_QUERY",
2198
+ "mode": "query",
2199
+ "path": "",
2200
+ "message": "Invalid client query."
2201
+ },
2202
+ {
2203
+ "id": "value-operator-without-value-rejected",
2204
+ "contract": "null-checks",
2205
+ "endpoint": "customers",
2206
+ "input": {
2207
+ "filters": [
2208
+ {
2209
+ "field": "churnedAt",
2210
+ "operator": "gte"
2211
+ }
2212
+ ]
2213
+ },
2214
+ "error": "HQ_CLIENT_QUERY",
2215
+ "mode": "query",
2216
+ "path": "",
2217
+ "message": "Invalid client query."
2113
2218
  }
2114
2219
  ]
@@ -449,6 +449,265 @@
449
449
  "path": "/contentHash",
450
450
  "message": "Client contract identity does not match."
451
451
  },
452
+ {
453
+ "id": "annotation-not-object",
454
+ "base": "build",
455
+ "set": [
456
+ {
457
+ "path": "/endpoints/0/annotations",
458
+ "value": "Countries"
459
+ }
460
+ ],
461
+ "error": "HQ_CLIENT_SHAPE",
462
+ "path": "/endpoints/0/annotations",
463
+ "message": "Invalid client contract shape."
464
+ },
465
+ {
466
+ "id": "annotation-empty-object",
467
+ "base": "build",
468
+ "set": [
469
+ {
470
+ "path": "/endpoints/0/annotations",
471
+ "value": {}
472
+ }
473
+ ],
474
+ "error": "HQ_CLIENT_SHAPE",
475
+ "path": "/endpoints/0/annotations",
476
+ "message": "Invalid client contract shape."
477
+ },
478
+ {
479
+ "id": "annotation-unknown-field",
480
+ "base": "annotated",
481
+ "set": [
482
+ {
483
+ "path": "/endpoints/1/annotations/owner",
484
+ "value": "analytics"
485
+ }
486
+ ],
487
+ "error": "HQ_CLIENT_UNKNOWN_FIELD",
488
+ "path": "/endpoints/1/annotations",
489
+ "message": "Unknown client contract field."
490
+ },
491
+ {
492
+ "id": "annotation-empty-fields",
493
+ "base": "annotated",
494
+ "set": [
495
+ {
496
+ "path": "/endpoints/0/annotations/fields",
497
+ "value": {}
498
+ }
499
+ ],
500
+ "error": "HQ_CLIENT_SHAPE",
501
+ "path": "/endpoints/0/annotations/fields",
502
+ "message": "Invalid client contract shape."
503
+ },
504
+ {
505
+ "id": "annotation-empty-field-entry",
506
+ "base": "annotated",
507
+ "set": [
508
+ {
509
+ "path": "/endpoints/1/annotations/fields/country",
510
+ "value": {}
511
+ }
512
+ ],
513
+ "error": "HQ_CLIENT_SHAPE",
514
+ "path": "/endpoints/1/annotations/fields/country",
515
+ "message": "Invalid client contract shape."
516
+ },
517
+ {
518
+ "id": "annotation-unknown-field-entry-member",
519
+ "base": "annotated",
520
+ "set": [
521
+ {
522
+ "path": "/endpoints/1/annotations/fields/country/unit",
523
+ "value": "USD"
524
+ }
525
+ ],
526
+ "error": "HQ_CLIENT_UNKNOWN_FIELD",
527
+ "path": "/endpoints/1/annotations/fields/country",
528
+ "message": "Unknown client contract field."
529
+ },
530
+ {
531
+ "id": "annotation-non-string-label",
532
+ "base": "annotated",
533
+ "set": [
534
+ {
535
+ "path": "/endpoints/1/annotations/label",
536
+ "value": 7
537
+ }
538
+ ],
539
+ "error": "HQ_CLIENT_SHAPE",
540
+ "path": "/endpoints/1/annotations/label",
541
+ "message": "Invalid client contract shape."
542
+ },
543
+ {
544
+ "id": "annotation-blank-description",
545
+ "base": "annotated",
546
+ "set": [
547
+ {
548
+ "path": "/endpoints/1/annotations/description",
549
+ "value": " \u3000 "
550
+ }
551
+ ],
552
+ "error": "HQ_CLIENT_SHAPE",
553
+ "path": "/endpoints/1/annotations/description",
554
+ "message": "Invalid client contract shape."
555
+ },
556
+ {
557
+ "id": "annotation-byte-order-mark-only",
558
+ "base": "annotated",
559
+ "set": [
560
+ {
561
+ "path": "/endpoints/1/annotations/label",
562
+ "value": "\ufeff"
563
+ }
564
+ ],
565
+ "error": "HQ_CLIENT_SHAPE",
566
+ "path": "/endpoints/1/annotations/label",
567
+ "message": "Invalid client contract shape."
568
+ },
569
+ {
570
+ "id": "annotation-line-break",
571
+ "base": "annotated",
572
+ "set": [
573
+ {
574
+ "path": "/endpoints/1/annotations/description",
575
+ "value": "One row per\norder."
576
+ }
577
+ ],
578
+ "error": "HQ_CLIENT_SHAPE",
579
+ "path": "/endpoints/1/annotations/description",
580
+ "message": "Invalid client contract shape."
581
+ },
582
+ {
583
+ "id": "annotation-tab",
584
+ "base": "annotated",
585
+ "set": [
586
+ {
587
+ "path": "/endpoints/1/annotations/fields/revenue/label",
588
+ "value": "Gross\trevenue"
589
+ }
590
+ ],
591
+ "error": "HQ_CLIENT_SHAPE",
592
+ "path": "/endpoints/1/annotations/fields/revenue/label",
593
+ "message": "Invalid client contract shape."
594
+ },
595
+ {
596
+ "id": "annotation-c1-control",
597
+ "base": "annotated",
598
+ "set": [
599
+ {
600
+ "path": "/endpoints/1/annotations/label",
601
+ "value": "Orders\u0085"
602
+ }
603
+ ],
604
+ "error": "HQ_CLIENT_SHAPE",
605
+ "path": "/endpoints/1/annotations/label",
606
+ "message": "Invalid client contract shape."
607
+ },
608
+ {
609
+ "id": "annotation-text-4096-bytes",
610
+ "base": "annotated",
611
+ "set": [
612
+ {
613
+ "path": "/endpoints/1/annotations/description",
614
+ "value": "éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé"
615
+ }
616
+ ],
617
+ "error": "HQ_CLIENT_IDENTITY",
618
+ "path": "/contentHash",
619
+ "message": "Client contract identity does not match."
620
+ },
621
+ {
622
+ "id": "annotation-text-4097-bytes",
623
+ "base": "annotated",
624
+ "set": [
625
+ {
626
+ "path": "/endpoints/1/annotations/description",
627
+ "value": "ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééa"
628
+ }
629
+ ],
630
+ "error": "HQ_CLIENT_SHAPE",
631
+ "path": "/endpoints/1/annotations/description",
632
+ "message": "Invalid client contract shape."
633
+ },
634
+ {
635
+ "id": "annotation-invalid-field-name",
636
+ "base": "annotated",
637
+ "set": [
638
+ {
639
+ "path": "/endpoints/1/annotations/fields/customer.next.tier",
640
+ "value": {
641
+ "label": "Tier"
642
+ }
643
+ }
644
+ ],
645
+ "error": "HQ_CLIENT_IDENTIFIER",
646
+ "path": "/endpoints/1/annotations/fields",
647
+ "message": "Invalid client contract identifier."
648
+ },
649
+ {
650
+ "id": "annotation-unknown-field-reference",
651
+ "base": "annotated",
652
+ "set": [
653
+ {
654
+ "path": "/endpoints/1/annotations/fields/missing",
655
+ "value": {
656
+ "label": "Missing"
657
+ }
658
+ }
659
+ ],
660
+ "error": "HQ_CLIENT_REFERENCE",
661
+ "path": "/endpoints/1",
662
+ "message": "Inconsistent client contract reference."
663
+ },
664
+ {
665
+ "id": "annotation-filter-alias-reference",
666
+ "base": "annotated",
667
+ "set": [
668
+ {
669
+ "path": "/endpoints/1/annotations/fields/paidStatus",
670
+ "value": {
671
+ "label": "Paid status"
672
+ }
673
+ }
674
+ ],
675
+ "error": "HQ_CLIENT_REFERENCE",
676
+ "path": "/endpoints/1",
677
+ "message": "Inconsistent client contract reference."
678
+ },
679
+ {
680
+ "id": "annotation-shape-precedes-reference",
681
+ "base": "annotated",
682
+ "set": [
683
+ {
684
+ "path": "/endpoints/1/defaultMeasures",
685
+ "value": [
686
+ "missing"
687
+ ]
688
+ },
689
+ {
690
+ "path": "/endpoints/1/annotations/description",
691
+ "value": ""
692
+ }
693
+ ],
694
+ "error": "HQ_CLIENT_SHAPE",
695
+ "path": "/endpoints/1/annotations/description",
696
+ "message": "Invalid client contract shape."
697
+ },
698
+ {
699
+ "id": "annotation-does-not-sign-schema",
700
+ "base": "annotated",
701
+ "set": [
702
+ {
703
+ "path": "/endpoints/1/annotations/description",
704
+ "value": "Reworded without a new schemaHash."
705
+ }
706
+ ],
707
+ "error": "HQ_CLIENT_IDENTITY",
708
+ "path": "/contentHash",
709
+ "message": "Client contract identity does not match."
710
+ },
452
711
  {
453
712
  "id": "endpoints-256",
454
713
  "mode": "boundary",
@@ -590,5 +849,27 @@
590
849
  "error": "HQ_CLIENT_LIMIT",
591
850
  "path": "",
592
851
  "message": "Client contract exceeds validation limits."
852
+ },
853
+ {
854
+ "id": "annotation-fields-512",
855
+ "mode": "boundary",
856
+ "generator": {
857
+ "type": "annotation-fields",
858
+ "count": 512
859
+ },
860
+ "error": "HQ_CLIENT_REFERENCE",
861
+ "path": "/endpoints/0",
862
+ "message": "Inconsistent client contract reference."
863
+ },
864
+ {
865
+ "id": "annotation-fields-513",
866
+ "mode": "boundary",
867
+ "generator": {
868
+ "type": "annotation-fields",
869
+ "count": 513
870
+ },
871
+ "error": "HQ_CLIENT_LIMIT",
872
+ "path": "/endpoints/0/annotations/fields",
873
+ "message": "Client contract exceeds validation limits."
593
874
  }
594
875
  ]