eval-quality 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.
- package/LICENSE +190 -0
- package/README.md +355 -0
- package/corpus/dev/README.md +36 -0
- package/corpus/dev/compile-seal-example/brief.json +1 -0
- package/corpus/dev/compile-seal-example/contract.json +1 -0
- package/corpus/dev/contracts/absent-collection-locations.json +1 -0
- package/corpus/dev/contracts/absent-sibling-groups.json +1 -0
- package/corpus/dev/contracts/absent-success-indicator.json +1 -0
- package/corpus/dev/contracts/empty-channel-roles.json +1 -0
- package/corpus/dev/contracts/empty-collection-locations.json +1 -0
- package/corpus/dev/contracts/empty-request-shapes.json +1 -0
- package/corpus/dev/contracts/empty-sibling-groups.json +1 -0
- package/corpus/dev/contracts/no-collection-quantifier.json +1 -0
- package/corpus/dev/contracts/no-operation-inventory.json +1 -0
- package/corpus/dev/contracts/no-read-back-relation.json +1 -0
- package/corpus/dev/contracts/no-state-change-marker.json +1 -0
- package/corpus/dev/contracts/no-type-violating-step.json +1 -0
- package/corpus/dev/contracts/per-key-split-oracles.json +1 -0
- package/corpus/dev/contracts/satisfied-declarations.json +1 -0
- package/corpus/dev/contracts/single-required-response-key.json +1 -0
- package/corpus/dev/contracts/split-indicator-oracle.json +1 -0
- package/corpus/dev/contracts/unaddressed-parameter-sibling.json +1 -0
- package/corpus/dev/contracts/unnamed-reference-set.json +1 -0
- package/corpus/dev/contracts/wrong-cardinality-form.json +1 -0
- package/corpus/dev/index.json +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/local-corpus-adapter.d.ts +7 -0
- package/dist/adapters/local-corpus-adapter.js +78 -0
- package/dist/adapters/node-file-system-adapter.d.ts +7 -0
- package/dist/adapters/node-file-system-adapter.js +39 -0
- package/dist/adapters/port-boundary.d.ts +18 -0
- package/dist/adapters/port-boundary.js +83 -0
- package/dist/adapters/system-clock-adapter.d.ts +10 -0
- package/dist/adapters/system-clock-adapter.js +18 -0
- package/dist/application/compile.d.ts +4 -0
- package/dist/application/compile.js +24 -0
- package/dist/application/diagnostics.d.ts +22 -0
- package/dist/application/diagnostics.js +18 -0
- package/dist/application/index.d.ts +23 -0
- package/dist/application/index.js +17 -0
- package/dist/application/invoke-port.d.ts +2 -0
- package/dist/application/invoke-port.js +45 -0
- package/dist/application/preflight.d.ts +27 -0
- package/dist/application/preflight.js +131 -0
- package/dist/application/seal.d.ts +4 -0
- package/dist/application/seal.js +28 -0
- package/dist/application/serialize.d.ts +6 -0
- package/dist/application/serialize.js +9 -0
- package/dist/cli/arguments.d.ts +28 -0
- package/dist/cli/arguments.js +167 -0
- package/dist/cli/exit-codes.d.ts +36 -0
- package/dist/cli/exit-codes.js +39 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +143 -0
- package/dist/cli/render.d.ts +26 -0
- package/dist/cli/render.js +53 -0
- package/dist/cli/run.d.ts +41 -0
- package/dist/cli/run.js +203 -0
- package/dist/core/canonical/canonicalize.d.ts +1 -0
- package/dist/core/canonical/canonicalize.js +113 -0
- package/dist/core/canonical/digest.d.ts +7 -0
- package/dist/core/canonical/digest.js +81 -0
- package/dist/core/canonical/scan-json.d.ts +1 -0
- package/dist/core/canonical/scan-json.js +298 -0
- package/dist/core/canonical/value-domain.d.ts +4 -0
- package/dist/core/canonical/value-domain.js +113 -0
- package/dist/core/compile/compile.d.ts +24 -0
- package/dist/core/compile/compile.js +67 -0
- package/dist/core/compile/declarations.d.ts +5 -0
- package/dist/core/compile/declarations.js +22 -0
- package/dist/core/compile/expression-legality.d.ts +14 -0
- package/dist/core/compile/expression-legality.js +346 -0
- package/dist/core/compile/forbidden-inputs.d.ts +5 -0
- package/dist/core/compile/forbidden-inputs.js +19 -0
- package/dist/core/compile/interface-inventory.d.ts +10 -0
- package/dist/core/compile/interface-inventory.js +55 -0
- package/dist/core/compile/oracle-alignment.d.ts +14 -0
- package/dist/core/compile/oracle-alignment.js +93 -0
- package/dist/core/compile/reachability.d.ts +17 -0
- package/dist/core/compile/reachability.js +177 -0
- package/dist/core/compile/rubrics.d.ts +55 -0
- package/dist/core/compile/rubrics.js +198 -0
- package/dist/core/compile/scripting-bound.d.ts +5 -0
- package/dist/core/compile/scripting-bound.js +151 -0
- package/dist/core/compile/sensitivity-witness.d.ts +73 -0
- package/dist/core/compile/sensitivity-witness.js +232 -0
- package/dist/core/compile/waivers.d.ts +3 -0
- package/dist/core/compile/waivers.js +21 -0
- package/dist/core/coverage/coverage.d.ts +18 -0
- package/dist/core/coverage/coverage.js +47 -0
- package/dist/core/coverage/relevance.d.ts +75 -0
- package/dist/core/coverage/relevance.js +186 -0
- package/dist/core/coverage/rules.d.ts +7 -0
- package/dist/core/coverage/rules.js +18 -0
- package/dist/core/coverage/satisfaction.d.ts +107 -0
- package/dist/core/coverage/satisfaction.js +415 -0
- package/dist/core/coverage/table.d.ts +26 -0
- package/dist/core/coverage/table.js +222 -0
- package/dist/core/declared-inputs.d.ts +16 -0
- package/dist/core/declared-inputs.js +18 -0
- package/dist/core/evaluate/evidence-resolution.d.ts +54 -0
- package/dist/core/evaluate/evidence-resolution.js +153 -0
- package/dist/core/evaluate/operators.d.ts +87 -0
- package/dist/core/evaluate/operators.js +350 -0
- package/dist/core/evaluate/resolution.d.ts +40 -0
- package/dist/core/evaluate/resolution.js +336 -0
- package/dist/core/evaluate/resolved-value.d.ts +9 -0
- package/dist/core/evaluate/resolved-value.js +6 -0
- package/dist/core/failure-codes.d.ts +18 -0
- package/dist/core/failure-codes.js +50 -0
- package/dist/core/lineage/chain.d.ts +49 -0
- package/dist/core/lineage/chain.js +210 -0
- package/dist/core/lineage/freeze.d.ts +12 -0
- package/dist/core/lineage/freeze.js +35 -0
- package/dist/core/lineage/stage-table.d.ts +43 -0
- package/dist/core/lineage/stage-table.js +106 -0
- package/dist/core/preflight/plan.d.ts +67 -0
- package/dist/core/preflight/plan.js +313 -0
- package/dist/core/preflight/projection.d.ts +40 -0
- package/dist/core/preflight/projection.js +96 -0
- package/dist/core/preflight/reduce.d.ts +8 -0
- package/dist/core/preflight/reduce.js +180 -0
- package/dist/core/preflight/witness-evidence.d.ts +42 -0
- package/dist/core/preflight/witness-evidence.js +88 -0
- package/dist/core/probe/target-policy.d.ts +63 -0
- package/dist/core/probe/target-policy.js +328 -0
- package/dist/core/schemas/artifact-reference.d.ts +19 -0
- package/dist/core/schemas/artifact-reference.js +30 -0
- package/dist/core/schemas/artifact.d.ts +1153 -0
- package/dist/core/schemas/artifact.js +84 -0
- package/dist/core/schemas/constraint-ledger.d.ts +57 -0
- package/dist/core/schemas/constraint-ledger.js +143 -0
- package/dist/core/schemas/eval-contract.d.ts +402 -0
- package/dist/core/schemas/eval-contract.js +147 -0
- package/dist/core/schemas/evaluator-configuration.d.ts +37 -0
- package/dist/core/schemas/evaluator-configuration.js +43 -0
- package/dist/core/schemas/evidence-artifact.d.ts +471 -0
- package/dist/core/schemas/evidence-artifact.js +232 -0
- package/dist/core/schemas/expression.d.ts +197 -0
- package/dist/core/schemas/expression.js +284 -0
- package/dist/core/schemas/faults.d.ts +9 -0
- package/dist/core/schemas/faults.js +32 -0
- package/dist/core/schemas/interface.d.ts +417 -0
- package/dist/core/schemas/interface.js +115 -0
- package/dist/core/schemas/isolation-manifest.d.ts +136 -0
- package/dist/core/schemas/isolation-manifest.js +92 -0
- package/dist/core/schemas/lineage.d.ts +21 -0
- package/dist/core/schemas/lineage.js +28 -0
- package/dist/core/schemas/oracle.d.ts +72 -0
- package/dist/core/schemas/oracle.js +35 -0
- package/dist/core/schemas/plan.d.ts +115 -0
- package/dist/core/schemas/plan.js +58 -0
- package/dist/core/schemas/pointer.d.ts +63 -0
- package/dist/core/schemas/pointer.js +94 -0
- package/dist/core/schemas/port-messages.d.ts +103 -0
- package/dist/core/schemas/port-messages.js +90 -0
- package/dist/core/schemas/preflight-verdict.d.ts +60 -0
- package/dist/core/schemas/preflight-verdict.js +38 -0
- package/dist/core/schemas/primitives.d.ts +78 -0
- package/dist/core/schemas/primitives.js +121 -0
- package/dist/core/schemas/private-artifact-manifest.d.ts +56 -0
- package/dist/core/schemas/private-artifact-manifest.js +46 -0
- package/dist/core/schemas/probe-body.d.ts +25 -0
- package/dist/core/schemas/probe-body.js +23 -0
- package/dist/core/schemas/probe-policy.d.ts +76 -0
- package/dist/core/schemas/probe-policy.js +33 -0
- package/dist/core/schemas/probe.d.ts +189 -0
- package/dist/core/schemas/probe.js +82 -0
- package/dist/core/schemas/publish.d.ts +30 -0
- package/dist/core/schemas/publish.js +135 -0
- package/dist/core/schemas/reference-set.d.ts +18 -0
- package/dist/core/schemas/reference-set.js +27 -0
- package/dist/core/schemas/rubric.d.ts +62 -0
- package/dist/core/schemas/rubric.js +68 -0
- package/dist/core/schemas/scoring-policy.d.ts +28 -0
- package/dist/core/schemas/scoring-policy.js +51 -0
- package/dist/core/schemas/sealed-evaluator-brief.d.ts +80 -0
- package/dist/core/schemas/sealed-evaluator-brief.js +59 -0
- package/dist/core/schemas/sealed-run-record.d.ts +382 -0
- package/dist/core/schemas/sealed-run-record.js +215 -0
- package/dist/core/schemas/sensitivity-witness.d.ts +138 -0
- package/dist/core/schemas/sensitivity-witness.js +86 -0
- package/dist/core/schemas/verdict.d.ts +25 -0
- package/dist/core/schemas/verdict.js +20 -0
- package/dist/core/schemas/waiver.d.ts +17 -0
- package/dist/core/schemas/waiver.js +24 -0
- package/dist/core/seal/derived-reference.d.ts +36 -0
- package/dist/core/seal/derived-reference.js +383 -0
- package/dist/core/seal/direction-prose.d.ts +13 -0
- package/dist/core/seal/direction-prose.js +120 -0
- package/dist/core/seal/plan-index.d.ts +63 -0
- package/dist/core/seal/plan-index.js +155 -0
- package/dist/core/seal/scripting-audit.d.ts +15 -0
- package/dist/core/seal/scripting-audit.js +51 -0
- package/dist/core/seal/seal.d.ts +18 -0
- package/dist/core/seal/seal.js +155 -0
- package/dist/core/stage-contracts.d.ts +30 -0
- package/dist/core/stage-contracts.js +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +22 -0
- package/dist/ports/clock-port.d.ts +13 -0
- package/dist/ports/clock-port.js +7 -0
- package/dist/ports/corpus-port.d.ts +16 -0
- package/dist/ports/corpus-port.js +7 -0
- package/dist/ports/environment-probe-port.d.ts +76 -0
- package/dist/ports/environment-probe-port.js +32 -0
- package/dist/ports/file-system-port.d.ts +27 -0
- package/dist/ports/file-system-port.js +11 -0
- package/dist/ports/port.d.ts +33 -0
- package/dist/ports/port.js +14 -0
- package/dist/testing/conformance.d.ts +88 -0
- package/dist/testing/conformance.js +281 -0
- package/dist/testing/index.d.ts +26 -0
- package/dist/testing/index.js +18 -0
- package/dist/testing/probe-conformance.d.ts +45 -0
- package/dist/testing/probe-conformance.js +186 -0
- package/package.json +130 -0
- package/schemas/artifact-reference.schema.json +64 -0
- package/schemas/eval-contract.schema.json +2145 -0
- package/schemas/evaluator-configuration.schema.json +199 -0
- package/schemas/evidence-artifact.schema.json +1229 -0
- package/schemas/isolation-manifest.schema.json +394 -0
- package/schemas/preflight-verdict.schema.json +114 -0
- package/schemas/private-artifact-manifest.schema.json +103 -0
- package/schemas/probe.schema.json +1151 -0
- package/schemas/rubric.schema.json +148 -0
- package/schemas/scoring-policy.schema.json +90 -0
- package/schemas/sealed-evaluator-brief.schema.json +268 -0
- package/schemas/sealed-run-record.schema.json +875 -0
|
@@ -0,0 +1,1151 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:eval-quality:schema:probe",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"schemaVersion": {
|
|
9
|
+
"type": "integer",
|
|
10
|
+
"minimum": 1,
|
|
11
|
+
"maximum": 9007199254740991,
|
|
12
|
+
"description": "AD-11 requires an integer under this exact name. Deliberately not `z.literal(1)`: the literal exports as `{\"type\":\"number\",\"const\":1}`, losing `integer` for a non-TypeScript consumer, and it would turn a version-2 artifact into an anonymous schema-parse failure instead of AD-28's dedicated `schema-version-mismatch` fault. Version equality belongs to the reader that throws that fault."
|
|
13
|
+
},
|
|
14
|
+
"parentDigest": {
|
|
15
|
+
"anyOf": [
|
|
16
|
+
{
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
19
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"type": "null"
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"description": "AD-29 lineage. `null` if and only if `revisionCount` is 0. That biconditional is stated here rather than refined: a refinement is silently dropped from the published schema, so a non-TypeScript consumer would never see it, and the constraint ledger records it as not expressible."
|
|
26
|
+
},
|
|
27
|
+
"revisionCount": {
|
|
28
|
+
"type": "integer",
|
|
29
|
+
"minimum": 0,
|
|
30
|
+
"maximum": 9007199254740991,
|
|
31
|
+
"description": "AD-29: one greater than the parent artifact's."
|
|
32
|
+
},
|
|
33
|
+
"probeId": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
36
|
+
},
|
|
37
|
+
"probeClass": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"enum": [
|
|
40
|
+
"defect",
|
|
41
|
+
"gameability",
|
|
42
|
+
"zero-action",
|
|
43
|
+
"canary"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"behaviorId": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^B-[0-9]{3,}$",
|
|
49
|
+
"description": "AD-9 puts the behaviour on the probe. The prior art put one on each seeded defect only, and this schema carries both."
|
|
50
|
+
},
|
|
51
|
+
"systemId": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"minLength": 1,
|
|
54
|
+
"description": "An opaque caller label for the system under test."
|
|
55
|
+
},
|
|
56
|
+
"implementationDigest": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
59
|
+
"description": "The prior art's `implementationSha`, renamed against the shared AD-27 primitive. An AD-24 divergence."
|
|
60
|
+
},
|
|
61
|
+
"artifactDigest": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
64
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
65
|
+
},
|
|
66
|
+
"commitDigest": {
|
|
67
|
+
"type": "string",
|
|
68
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
69
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
70
|
+
},
|
|
71
|
+
"rationale": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"minLength": 1
|
|
74
|
+
},
|
|
75
|
+
"expectedClean": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"const": true
|
|
78
|
+
},
|
|
79
|
+
"defects": {
|
|
80
|
+
"maxItems": 0,
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "object",
|
|
84
|
+
"properties": {
|
|
85
|
+
"defectId": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"pattern": "^D-[0-9]{3,}$"
|
|
88
|
+
},
|
|
89
|
+
"behaviorId": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"pattern": "^B-[0-9]{3,}$",
|
|
92
|
+
"description": "The behaviour this defect breaks. AD-9 also puts a behaviour on the probe itself and this schema carries both; that the two may disagree is a cross-field rule with no AD-5 code and is left unenforced in v0 rather than silently refined here."
|
|
93
|
+
},
|
|
94
|
+
"summary": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1
|
|
97
|
+
},
|
|
98
|
+
"severity": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"enum": [
|
|
101
|
+
"low",
|
|
102
|
+
"material",
|
|
103
|
+
"critical"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"oracleEvidence": {
|
|
107
|
+
"type": "array",
|
|
108
|
+
"items": {
|
|
109
|
+
"$ref": "#/$defs/ArtifactReference"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"source": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"enum": [
|
|
115
|
+
"natural",
|
|
116
|
+
"controlled-mutation"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"manifestationWitness": {
|
|
120
|
+
"anyOf": [
|
|
121
|
+
{
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {
|
|
124
|
+
"legId": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
127
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
128
|
+
},
|
|
129
|
+
"interfaceId": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
132
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
133
|
+
},
|
|
134
|
+
"operationId": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
137
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
138
|
+
},
|
|
139
|
+
"inputs": {
|
|
140
|
+
"$ref": "#/$defs/WitnessInputs"
|
|
141
|
+
},
|
|
142
|
+
"relation": {
|
|
143
|
+
"$ref": "#/$defs/Expression"
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"required": [
|
|
147
|
+
"legId",
|
|
148
|
+
"interfaceId",
|
|
149
|
+
"operationId",
|
|
150
|
+
"inputs",
|
|
151
|
+
"relation"
|
|
152
|
+
],
|
|
153
|
+
"additionalProperties": false
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"type": "null"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"description": "AD-10: what pre-flight probes to observe this defect fire. `null` parses, so the prior art's six-field defect still round-trips, and pre-flight records a null witness as a **failed** `seeded-fault-fired` check rather than as an exemption. A seeded fault that cannot be observed to fire is the vacuous probe AD-40 resolves to `infrastructure-error`, and pre-flight is the one place where invalidating is the cheap outcome."
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"required": [
|
|
163
|
+
"defectId",
|
|
164
|
+
"behaviorId",
|
|
165
|
+
"summary",
|
|
166
|
+
"severity",
|
|
167
|
+
"oracleEvidence",
|
|
168
|
+
"source",
|
|
169
|
+
"manifestationWitness"
|
|
170
|
+
],
|
|
171
|
+
"additionalProperties": false
|
|
172
|
+
},
|
|
173
|
+
"description": "A known-clean control seeds nothing, which is the prior art's own `if`/`then` expressed structurally."
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"required": [
|
|
177
|
+
"schemaVersion",
|
|
178
|
+
"parentDigest",
|
|
179
|
+
"revisionCount",
|
|
180
|
+
"probeId",
|
|
181
|
+
"probeClass",
|
|
182
|
+
"behaviorId",
|
|
183
|
+
"systemId",
|
|
184
|
+
"implementationDigest",
|
|
185
|
+
"artifactDigest",
|
|
186
|
+
"commitDigest",
|
|
187
|
+
"rationale",
|
|
188
|
+
"expectedClean",
|
|
189
|
+
"defects"
|
|
190
|
+
],
|
|
191
|
+
"additionalProperties": false,
|
|
192
|
+
"description": "A known-clean control. Never enters AD-7's dominance vector."
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"type": "object",
|
|
196
|
+
"properties": {
|
|
197
|
+
"schemaVersion": {
|
|
198
|
+
"type": "integer",
|
|
199
|
+
"minimum": 1,
|
|
200
|
+
"maximum": 9007199254740991,
|
|
201
|
+
"description": "AD-11 requires an integer under this exact name. Deliberately not `z.literal(1)`: the literal exports as `{\"type\":\"number\",\"const\":1}`, losing `integer` for a non-TypeScript consumer, and it would turn a version-2 artifact into an anonymous schema-parse failure instead of AD-28's dedicated `schema-version-mismatch` fault. Version equality belongs to the reader that throws that fault."
|
|
202
|
+
},
|
|
203
|
+
"parentDigest": {
|
|
204
|
+
"anyOf": [
|
|
205
|
+
{
|
|
206
|
+
"type": "string",
|
|
207
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
208
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"type": "null"
|
|
212
|
+
}
|
|
213
|
+
],
|
|
214
|
+
"description": "AD-29 lineage. `null` if and only if `revisionCount` is 0. That biconditional is stated here rather than refined: a refinement is silently dropped from the published schema, so a non-TypeScript consumer would never see it, and the constraint ledger records it as not expressible."
|
|
215
|
+
},
|
|
216
|
+
"revisionCount": {
|
|
217
|
+
"type": "integer",
|
|
218
|
+
"minimum": 0,
|
|
219
|
+
"maximum": 9007199254740991,
|
|
220
|
+
"description": "AD-29: one greater than the parent artifact's."
|
|
221
|
+
},
|
|
222
|
+
"probeId": {
|
|
223
|
+
"type": "string",
|
|
224
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
225
|
+
},
|
|
226
|
+
"probeClass": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"enum": [
|
|
229
|
+
"defect",
|
|
230
|
+
"gameability",
|
|
231
|
+
"zero-action",
|
|
232
|
+
"canary"
|
|
233
|
+
]
|
|
234
|
+
},
|
|
235
|
+
"behaviorId": {
|
|
236
|
+
"type": "string",
|
|
237
|
+
"pattern": "^B-[0-9]{3,}$",
|
|
238
|
+
"description": "AD-9 puts the behaviour on the probe. The prior art put one on each seeded defect only, and this schema carries both."
|
|
239
|
+
},
|
|
240
|
+
"systemId": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"minLength": 1,
|
|
243
|
+
"description": "An opaque caller label for the system under test."
|
|
244
|
+
},
|
|
245
|
+
"implementationDigest": {
|
|
246
|
+
"type": "string",
|
|
247
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
248
|
+
"description": "The prior art's `implementationSha`, renamed against the shared AD-27 primitive. An AD-24 divergence."
|
|
249
|
+
},
|
|
250
|
+
"artifactDigest": {
|
|
251
|
+
"type": "string",
|
|
252
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
253
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
254
|
+
},
|
|
255
|
+
"commitDigest": {
|
|
256
|
+
"type": "string",
|
|
257
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
258
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
259
|
+
},
|
|
260
|
+
"rationale": {
|
|
261
|
+
"type": "string",
|
|
262
|
+
"minLength": 1
|
|
263
|
+
},
|
|
264
|
+
"expectedClean": {
|
|
265
|
+
"type": "boolean",
|
|
266
|
+
"const": false
|
|
267
|
+
},
|
|
268
|
+
"defects": {
|
|
269
|
+
"type": "array",
|
|
270
|
+
"items": {
|
|
271
|
+
"type": "object",
|
|
272
|
+
"properties": {
|
|
273
|
+
"defectId": {
|
|
274
|
+
"type": "string",
|
|
275
|
+
"pattern": "^D-[0-9]{3,}$"
|
|
276
|
+
},
|
|
277
|
+
"behaviorId": {
|
|
278
|
+
"type": "string",
|
|
279
|
+
"pattern": "^B-[0-9]{3,}$",
|
|
280
|
+
"description": "The behaviour this defect breaks. AD-9 also puts a behaviour on the probe itself and this schema carries both; that the two may disagree is a cross-field rule with no AD-5 code and is left unenforced in v0 rather than silently refined here."
|
|
281
|
+
},
|
|
282
|
+
"summary": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"minLength": 1
|
|
285
|
+
},
|
|
286
|
+
"severity": {
|
|
287
|
+
"type": "string",
|
|
288
|
+
"enum": [
|
|
289
|
+
"low",
|
|
290
|
+
"material",
|
|
291
|
+
"critical"
|
|
292
|
+
]
|
|
293
|
+
},
|
|
294
|
+
"oracleEvidence": {
|
|
295
|
+
"type": "array",
|
|
296
|
+
"items": {
|
|
297
|
+
"$ref": "#/$defs/ArtifactReference"
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
"source": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"enum": [
|
|
303
|
+
"natural",
|
|
304
|
+
"controlled-mutation"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
"manifestationWitness": {
|
|
308
|
+
"anyOf": [
|
|
309
|
+
{
|
|
310
|
+
"type": "object",
|
|
311
|
+
"properties": {
|
|
312
|
+
"legId": {
|
|
313
|
+
"type": "string",
|
|
314
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
315
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
316
|
+
},
|
|
317
|
+
"interfaceId": {
|
|
318
|
+
"type": "string",
|
|
319
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
320
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
321
|
+
},
|
|
322
|
+
"operationId": {
|
|
323
|
+
"type": "string",
|
|
324
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
325
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
326
|
+
},
|
|
327
|
+
"inputs": {
|
|
328
|
+
"$ref": "#/$defs/WitnessInputs"
|
|
329
|
+
},
|
|
330
|
+
"relation": {
|
|
331
|
+
"$ref": "#/$defs/Expression"
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"required": [
|
|
335
|
+
"legId",
|
|
336
|
+
"interfaceId",
|
|
337
|
+
"operationId",
|
|
338
|
+
"inputs",
|
|
339
|
+
"relation"
|
|
340
|
+
],
|
|
341
|
+
"additionalProperties": false
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"type": "null"
|
|
345
|
+
}
|
|
346
|
+
],
|
|
347
|
+
"description": "AD-10: what pre-flight probes to observe this defect fire. `null` parses, so the prior art's six-field defect still round-trips, and pre-flight records a null witness as a **failed** `seeded-fault-fired` check rather than as an exemption. A seeded fault that cannot be observed to fire is the vacuous probe AD-40 resolves to `infrastructure-error`, and pre-flight is the one place where invalidating is the cheap outcome."
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"required": [
|
|
351
|
+
"defectId",
|
|
352
|
+
"behaviorId",
|
|
353
|
+
"summary",
|
|
354
|
+
"severity",
|
|
355
|
+
"oracleEvidence",
|
|
356
|
+
"source",
|
|
357
|
+
"manifestationWitness"
|
|
358
|
+
],
|
|
359
|
+
"additionalProperties": false
|
|
360
|
+
},
|
|
361
|
+
"description": "No minimum. AD-9 states none, and a minimum would make a canary unrepresentable, since a canary indicts the fixture rather than seeding a defect."
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"required": [
|
|
365
|
+
"schemaVersion",
|
|
366
|
+
"parentDigest",
|
|
367
|
+
"revisionCount",
|
|
368
|
+
"probeId",
|
|
369
|
+
"probeClass",
|
|
370
|
+
"behaviorId",
|
|
371
|
+
"systemId",
|
|
372
|
+
"implementationDigest",
|
|
373
|
+
"artifactDigest",
|
|
374
|
+
"commitDigest",
|
|
375
|
+
"rationale",
|
|
376
|
+
"expectedClean",
|
|
377
|
+
"defects"
|
|
378
|
+
],
|
|
379
|
+
"additionalProperties": false,
|
|
380
|
+
"description": "A probe that is not a known-clean control."
|
|
381
|
+
}
|
|
382
|
+
],
|
|
383
|
+
"description": "One corpus probe. Succeeds the prior-art `h0-ground-truth` schema per AD-24, carrying its system identifier, implementation digest, `expectedClean` flag, seeded defects, and rationale, and adding AD-9's probe class and AD-9's per-probe artifact and commit digests. Divergences: `implementationSha` becomes `implementationDigest`, `taskId` does not survive because the probe pins what it describes by digest, and `expectedGate` does not survive because AD-40 makes detection a signature match rather than a verdict comparison and AD-7 keeps comparisons inside the dominance vector, so carrying an expected gate would invite a comparison the architecture forbids. Two constructions are deliberately absent: AD-9's per-class QUALIFICATION record, whose five prose routes name no fields and whose acceptance criteria of record do not command it, and AD-40's machine-readable DEFECT SIGNATURE, which Owed item 7 records as having no fixture to land in because this repository contains no probe at all. Both arrive as additive `schemaVersion` bumps under AD-11 once a corpus exists to carry them. The cost is named rather than hidden: AD-9's \"an unqualified probe cannot enter a sealed set\" is enforced by nothing in v0: not this schema, not an AD-5 code, and not an AD-21 rung.",
|
|
384
|
+
"$defs": {
|
|
385
|
+
"ArtifactReference": {
|
|
386
|
+
"oneOf": [
|
|
387
|
+
{
|
|
388
|
+
"type": "object",
|
|
389
|
+
"properties": {
|
|
390
|
+
"storage": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"const": "public"
|
|
393
|
+
},
|
|
394
|
+
"path": {
|
|
395
|
+
"type": "string",
|
|
396
|
+
"minLength": 1
|
|
397
|
+
},
|
|
398
|
+
"privateRef": {
|
|
399
|
+
"type": "null"
|
|
400
|
+
},
|
|
401
|
+
"digest": {
|
|
402
|
+
"type": "string",
|
|
403
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
404
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
"required": [
|
|
408
|
+
"storage",
|
|
409
|
+
"path",
|
|
410
|
+
"privateRef",
|
|
411
|
+
"digest"
|
|
412
|
+
],
|
|
413
|
+
"additionalProperties": false
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"type": "object",
|
|
417
|
+
"properties": {
|
|
418
|
+
"storage": {
|
|
419
|
+
"type": "string",
|
|
420
|
+
"const": "private"
|
|
421
|
+
},
|
|
422
|
+
"path": {
|
|
423
|
+
"type": "null"
|
|
424
|
+
},
|
|
425
|
+
"privateRef": {
|
|
426
|
+
"type": "string",
|
|
427
|
+
"minLength": 1,
|
|
428
|
+
"description": "An opaque handle resolved through the corpus port under AD-8, never a filesystem path and never a URL. AD-18 forbids a private path from entering any artifact, and this is the field a caller would otherwise reach for."
|
|
429
|
+
},
|
|
430
|
+
"digest": {
|
|
431
|
+
"type": "string",
|
|
432
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
433
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
"required": [
|
|
437
|
+
"storage",
|
|
438
|
+
"path",
|
|
439
|
+
"privateRef",
|
|
440
|
+
"digest"
|
|
441
|
+
],
|
|
442
|
+
"additionalProperties": false
|
|
443
|
+
}
|
|
444
|
+
],
|
|
445
|
+
"description": "A reference to an artifact, public by path or private by opaque handle. Succeeds the prior-art `artifact-ref` schema per AD-24, with its two `if`/`then` branches re-expressed as a discriminated union per AD-13 and its `sha256` field renamed to `digest` against the shared AD-27 primitive. Alone among the twelve interchange artifacts this one carries NO `schemaVersion` and NO AD-29 lineage: it is a reference shape embedded inside other artifacts rather than one that crosses the package boundary alone, so versioning it would add a key to every finding and every manifest entry for no reader. It is in the inventory because it is published, not because it is exchanged; the exemption is asserted by a test against the registry's `carriesLineage` flag."
|
|
446
|
+
},
|
|
447
|
+
"WitnessInputs": {
|
|
448
|
+
"type": "object",
|
|
449
|
+
"properties": {
|
|
450
|
+
"path": {
|
|
451
|
+
"type": "object",
|
|
452
|
+
"propertyNames": {
|
|
453
|
+
"type": "string"
|
|
454
|
+
},
|
|
455
|
+
"additionalProperties": {
|
|
456
|
+
"$ref": "#/$defs/JsonValue"
|
|
457
|
+
}
|
|
458
|
+
},
|
|
459
|
+
"query": {
|
|
460
|
+
"type": "object",
|
|
461
|
+
"propertyNames": {
|
|
462
|
+
"type": "string"
|
|
463
|
+
},
|
|
464
|
+
"additionalProperties": {
|
|
465
|
+
"$ref": "#/$defs/JsonValue"
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"header": {
|
|
469
|
+
"type": "object",
|
|
470
|
+
"propertyNames": {
|
|
471
|
+
"type": "string",
|
|
472
|
+
"minLength": 1
|
|
473
|
+
},
|
|
474
|
+
"additionalProperties": {
|
|
475
|
+
"type": "string"
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"body": {
|
|
479
|
+
"oneOf": [
|
|
480
|
+
{
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"kind": {
|
|
484
|
+
"type": "string",
|
|
485
|
+
"const": "json"
|
|
486
|
+
},
|
|
487
|
+
"value": {
|
|
488
|
+
"$ref": "#/$defs/JsonValue"
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
"required": [
|
|
492
|
+
"kind",
|
|
493
|
+
"value"
|
|
494
|
+
],
|
|
495
|
+
"additionalProperties": false
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"type": "object",
|
|
499
|
+
"properties": {
|
|
500
|
+
"kind": {
|
|
501
|
+
"type": "string",
|
|
502
|
+
"const": "absent"
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"required": [
|
|
506
|
+
"kind"
|
|
507
|
+
],
|
|
508
|
+
"additionalProperties": false
|
|
509
|
+
}
|
|
510
|
+
]
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
"required": [
|
|
514
|
+
"path",
|
|
515
|
+
"query",
|
|
516
|
+
"header",
|
|
517
|
+
"body"
|
|
518
|
+
],
|
|
519
|
+
"additionalProperties": false,
|
|
520
|
+
"description": "One probe leg's supplied inputs, keyed by AD-19 transport channel, in the spelling the environment-probe port accepts. Shared by both witness kinds and by the fixture reset, so the export carries it once."
|
|
521
|
+
},
|
|
522
|
+
"JsonValue": {
|
|
523
|
+
"description": "AD-36 value domain. Every number is a finite IEEE 754 double-precision value, and every integer lies in the safe-integer range; a larger integer, and any value needing exact decimal semantics such as money, is carried as a string in its own declared format. JSON Schema cannot express finiteness, so this restriction is stated rather than encoded: producers are told the rule here instead of discovering it through a digest mismatch, and the canonical scanner rejects a violating value before any parse.",
|
|
524
|
+
"anyOf": [
|
|
525
|
+
{
|
|
526
|
+
"type": "string"
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"type": "number"
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"type": "boolean"
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
"type": "null"
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"type": "array",
|
|
539
|
+
"items": {
|
|
540
|
+
"$ref": "#/$defs/JsonValue"
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"type": "object",
|
|
545
|
+
"propertyNames": {
|
|
546
|
+
"type": "string"
|
|
547
|
+
},
|
|
548
|
+
"additionalProperties": {
|
|
549
|
+
"$ref": "#/$defs/JsonValue"
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
]
|
|
553
|
+
},
|
|
554
|
+
"Expression": {
|
|
555
|
+
"description": "A `check` expression tree over AD-4's closed vocabulary, discriminated on `op`. Exports as a `oneOf` of sixteen branches, each identified by its `op` const; a constraint ledger entry names a branch by that const rather than by position.",
|
|
556
|
+
"oneOf": [
|
|
557
|
+
{
|
|
558
|
+
"type": "object",
|
|
559
|
+
"properties": {
|
|
560
|
+
"op": {
|
|
561
|
+
"type": "string",
|
|
562
|
+
"const": "equality"
|
|
563
|
+
},
|
|
564
|
+
"operands": {
|
|
565
|
+
"type": "array",
|
|
566
|
+
"prefixItems": [
|
|
567
|
+
{
|
|
568
|
+
"$ref": "#/$defs/Operand"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"$ref": "#/$defs/Operand"
|
|
572
|
+
}
|
|
573
|
+
],
|
|
574
|
+
"description": "Two operands, each legally a pointer or a literal. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
575
|
+
"minItems": 2,
|
|
576
|
+
"items": false
|
|
577
|
+
}
|
|
578
|
+
},
|
|
579
|
+
"required": [
|
|
580
|
+
"op",
|
|
581
|
+
"operands"
|
|
582
|
+
],
|
|
583
|
+
"additionalProperties": false
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"type": "object",
|
|
587
|
+
"properties": {
|
|
588
|
+
"op": {
|
|
589
|
+
"type": "string",
|
|
590
|
+
"const": "deep-equality"
|
|
591
|
+
},
|
|
592
|
+
"operands": {
|
|
593
|
+
"type": "array",
|
|
594
|
+
"prefixItems": [
|
|
595
|
+
{
|
|
596
|
+
"$ref": "#/$defs/Operand"
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"$ref": "#/$defs/Operand"
|
|
600
|
+
}
|
|
601
|
+
],
|
|
602
|
+
"description": "Two operands, each legally a pointer or a literal. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
603
|
+
"minItems": 2,
|
|
604
|
+
"items": false
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
"required": [
|
|
608
|
+
"op",
|
|
609
|
+
"operands"
|
|
610
|
+
],
|
|
611
|
+
"additionalProperties": false
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
"type": "object",
|
|
615
|
+
"properties": {
|
|
616
|
+
"op": {
|
|
617
|
+
"type": "string",
|
|
618
|
+
"const": "containment"
|
|
619
|
+
},
|
|
620
|
+
"operands": {
|
|
621
|
+
"type": "array",
|
|
622
|
+
"prefixItems": [
|
|
623
|
+
{
|
|
624
|
+
"$ref": "#/$defs/Operand"
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
"$ref": "#/$defs/Operand"
|
|
628
|
+
}
|
|
629
|
+
],
|
|
630
|
+
"description": "Two operands: the container is legally a pointer, and the set is legally a pointer, a literal, or a reference set. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
631
|
+
"minItems": 2,
|
|
632
|
+
"items": false
|
|
633
|
+
}
|
|
634
|
+
},
|
|
635
|
+
"required": [
|
|
636
|
+
"op",
|
|
637
|
+
"operands"
|
|
638
|
+
],
|
|
639
|
+
"additionalProperties": false
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"type": "object",
|
|
643
|
+
"properties": {
|
|
644
|
+
"op": {
|
|
645
|
+
"type": "string",
|
|
646
|
+
"const": "existence"
|
|
647
|
+
},
|
|
648
|
+
"operands": {
|
|
649
|
+
"type": "array",
|
|
650
|
+
"prefixItems": [
|
|
651
|
+
{
|
|
652
|
+
"$ref": "#/$defs/Operand"
|
|
653
|
+
}
|
|
654
|
+
],
|
|
655
|
+
"description": "One operand, legally a pointer. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
656
|
+
"minItems": 1,
|
|
657
|
+
"items": false
|
|
658
|
+
}
|
|
659
|
+
},
|
|
660
|
+
"required": [
|
|
661
|
+
"op",
|
|
662
|
+
"operands"
|
|
663
|
+
],
|
|
664
|
+
"additionalProperties": false
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"type": "object",
|
|
668
|
+
"properties": {
|
|
669
|
+
"op": {
|
|
670
|
+
"type": "string",
|
|
671
|
+
"const": "absence"
|
|
672
|
+
},
|
|
673
|
+
"operands": {
|
|
674
|
+
"type": "array",
|
|
675
|
+
"prefixItems": [
|
|
676
|
+
{
|
|
677
|
+
"$ref": "#/$defs/Operand"
|
|
678
|
+
}
|
|
679
|
+
],
|
|
680
|
+
"description": "One operand, legally a pointer. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
681
|
+
"minItems": 1,
|
|
682
|
+
"items": false
|
|
683
|
+
}
|
|
684
|
+
},
|
|
685
|
+
"required": [
|
|
686
|
+
"op",
|
|
687
|
+
"operands"
|
|
688
|
+
],
|
|
689
|
+
"additionalProperties": false
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
"type": "object",
|
|
693
|
+
"properties": {
|
|
694
|
+
"op": {
|
|
695
|
+
"type": "string",
|
|
696
|
+
"const": "regex"
|
|
697
|
+
},
|
|
698
|
+
"operands": {
|
|
699
|
+
"type": "array",
|
|
700
|
+
"prefixItems": [
|
|
701
|
+
{
|
|
702
|
+
"$ref": "#/$defs/Operand"
|
|
703
|
+
}
|
|
704
|
+
],
|
|
705
|
+
"description": "One operand, legally a pointer. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
706
|
+
"minItems": 1,
|
|
707
|
+
"items": false
|
|
708
|
+
},
|
|
709
|
+
"pattern": {
|
|
710
|
+
"type": "string",
|
|
711
|
+
"pattern": "^\\^[\\s\\S]*\\$$",
|
|
712
|
+
"description": "An ECMA-262 pattern, fully anchored: it begins with \"^\" and ends with \"$\". A named field rather than a `{ literal }` operand, so the compiler's backreference and lookbehind check has one place to look instead of a JsonValue that may hold anything. The check is positional and is wrong in both directions. It admits patterns that are not anchored, such as the alternation \"^a|b$\" or a trailing \"$\" that is escaped; those are the compiler's, alongside backreferences and lookbehind. It also rejects patterns that are anchored but wrapped in a group, such as \"(^a$)\" \u2014 write \"^(?:a|b)$\" rather than \"(?:^a$|^b$)\" and the form accepts it. Deciding anchoring properly requires parsing the pattern, which no JSON Schema keyword can express."
|
|
713
|
+
}
|
|
714
|
+
},
|
|
715
|
+
"required": [
|
|
716
|
+
"op",
|
|
717
|
+
"operands",
|
|
718
|
+
"pattern"
|
|
719
|
+
],
|
|
720
|
+
"additionalProperties": false
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
"type": "object",
|
|
724
|
+
"properties": {
|
|
725
|
+
"op": {
|
|
726
|
+
"type": "string",
|
|
727
|
+
"const": "set-membership"
|
|
728
|
+
},
|
|
729
|
+
"operands": {
|
|
730
|
+
"type": "array",
|
|
731
|
+
"prefixItems": [
|
|
732
|
+
{
|
|
733
|
+
"$ref": "#/$defs/Operand"
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
"anyOf": [
|
|
737
|
+
{
|
|
738
|
+
"type": "object",
|
|
739
|
+
"properties": {
|
|
740
|
+
"referenceSet": {
|
|
741
|
+
"type": "string",
|
|
742
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
743
|
+
"description": "A plain identifier. Deliberately not an enum of the contract's declared reference sets and deliberately not refined against them: an identifier the contract does not declare is `unresolved-reference-set`, a coded compile-time error, and a schema that rejected it would convert that code into an anonymous parse fault."
|
|
744
|
+
}
|
|
745
|
+
},
|
|
746
|
+
"required": [
|
|
747
|
+
"referenceSet"
|
|
748
|
+
],
|
|
749
|
+
"additionalProperties": false
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
"type": "object",
|
|
753
|
+
"properties": {
|
|
754
|
+
"literal": {
|
|
755
|
+
"minItems": 1,
|
|
756
|
+
"type": "array",
|
|
757
|
+
"items": {
|
|
758
|
+
"$ref": "#/$defs/JsonValue"
|
|
759
|
+
},
|
|
760
|
+
"description": "Coin flip (b), settled: a literal set operand is admitted alongside the reference-set form, and is constrained to a non-empty array because `set-membership` against an empty set is unfalsifiable authoring rather than an observation about the world. This is the one deliberately narrowed operand position in the grammar; the cost is that `{ \"literal\": [] }` and a `{ \"pointer\" }` in this position are schema rejections rather than `malformed-operator-expression`."
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
"required": [
|
|
764
|
+
"literal"
|
|
765
|
+
],
|
|
766
|
+
"additionalProperties": false
|
|
767
|
+
}
|
|
768
|
+
]
|
|
769
|
+
}
|
|
770
|
+
],
|
|
771
|
+
"description": "Two operands: the value is legally a pointer, and the set is a reference set or a non-empty literal array. The set position is the one place the schema does narrow, and coin flip (b) records what that costs. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
772
|
+
"minItems": 2,
|
|
773
|
+
"items": false
|
|
774
|
+
}
|
|
775
|
+
},
|
|
776
|
+
"required": [
|
|
777
|
+
"op",
|
|
778
|
+
"operands"
|
|
779
|
+
],
|
|
780
|
+
"additionalProperties": false
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"type": "object",
|
|
784
|
+
"properties": {
|
|
785
|
+
"op": {
|
|
786
|
+
"type": "string",
|
|
787
|
+
"const": "ordering"
|
|
788
|
+
},
|
|
789
|
+
"operands": {
|
|
790
|
+
"type": "array",
|
|
791
|
+
"prefixItems": [
|
|
792
|
+
{
|
|
793
|
+
"$ref": "#/$defs/Operand"
|
|
794
|
+
}
|
|
795
|
+
],
|
|
796
|
+
"description": "One operand, legally a pointer to a collection. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
797
|
+
"minItems": 1,
|
|
798
|
+
"items": false
|
|
799
|
+
},
|
|
800
|
+
"key": {
|
|
801
|
+
"type": "string",
|
|
802
|
+
"minLength": 1
|
|
803
|
+
},
|
|
804
|
+
"order": {
|
|
805
|
+
"type": "string",
|
|
806
|
+
"enum": [
|
|
807
|
+
"ascending",
|
|
808
|
+
"descending"
|
|
809
|
+
]
|
|
810
|
+
}
|
|
811
|
+
},
|
|
812
|
+
"required": [
|
|
813
|
+
"op",
|
|
814
|
+
"operands",
|
|
815
|
+
"key",
|
|
816
|
+
"order"
|
|
817
|
+
],
|
|
818
|
+
"additionalProperties": false
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"type": "object",
|
|
822
|
+
"properties": {
|
|
823
|
+
"op": {
|
|
824
|
+
"type": "string",
|
|
825
|
+
"const": "count-tolerance"
|
|
826
|
+
},
|
|
827
|
+
"operands": {
|
|
828
|
+
"type": "array",
|
|
829
|
+
"prefixItems": [
|
|
830
|
+
{
|
|
831
|
+
"$ref": "#/$defs/Operand"
|
|
832
|
+
}
|
|
833
|
+
],
|
|
834
|
+
"description": "One operand, legally a pointer to a collection. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
835
|
+
"minItems": 1,
|
|
836
|
+
"items": false
|
|
837
|
+
},
|
|
838
|
+
"expected": {
|
|
839
|
+
"type": "integer",
|
|
840
|
+
"minimum": 0,
|
|
841
|
+
"maximum": 9007199254740991,
|
|
842
|
+
"description": "The expected element count. Non-negative: a negative count is not a count, and no AD-5 code fires on one, so the schema is the enforcement point."
|
|
843
|
+
},
|
|
844
|
+
"tolerance": {
|
|
845
|
+
"type": "integer",
|
|
846
|
+
"minimum": 0,
|
|
847
|
+
"maximum": 9007199254740991,
|
|
848
|
+
"description": "The permitted deviation from `expected`, non-negative for the same reason. When `relative` is declared the tolerance is read as whole percentage points, which is stated because AD-4 supplies no value space for the magnitude and any reader that resolves this check inherits the semantics. An integer therefore cannot express a fractional relative tolerance such as 2.5 percent; widening the value space later is an additive `schemaVersion` bump under AD-11, and was not taken here because it would export as a bare `type: \"number\"` and cost a constraint ledger entry for a case no declaration needs yet."
|
|
849
|
+
},
|
|
850
|
+
"relative": {
|
|
851
|
+
"type": "boolean",
|
|
852
|
+
"description": "AD-4: the tolerance is absolute unless this flag is declared. Required and explicit rather than defaulted, because a Zod default diverges input and output mode and drops the key from the exported `required` list."
|
|
853
|
+
}
|
|
854
|
+
},
|
|
855
|
+
"required": [
|
|
856
|
+
"op",
|
|
857
|
+
"operands",
|
|
858
|
+
"expected",
|
|
859
|
+
"tolerance",
|
|
860
|
+
"relative"
|
|
861
|
+
],
|
|
862
|
+
"additionalProperties": false
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"type": "object",
|
|
866
|
+
"properties": {
|
|
867
|
+
"op": {
|
|
868
|
+
"type": "string",
|
|
869
|
+
"const": "shape"
|
|
870
|
+
},
|
|
871
|
+
"operands": {
|
|
872
|
+
"type": "array",
|
|
873
|
+
"prefixItems": [
|
|
874
|
+
{
|
|
875
|
+
"$ref": "#/$defs/Operand"
|
|
876
|
+
}
|
|
877
|
+
],
|
|
878
|
+
"description": "One operand, legally a pointer. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
879
|
+
"minItems": 1,
|
|
880
|
+
"items": false
|
|
881
|
+
},
|
|
882
|
+
"descriptor": {
|
|
883
|
+
"type": "object",
|
|
884
|
+
"properties": {
|
|
885
|
+
"requiredKeys": {
|
|
886
|
+
"type": "array",
|
|
887
|
+
"items": {
|
|
888
|
+
"type": "string",
|
|
889
|
+
"minLength": 1
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
"permittedKeys": {
|
|
893
|
+
"type": "array",
|
|
894
|
+
"items": {
|
|
895
|
+
"type": "string",
|
|
896
|
+
"minLength": 1
|
|
897
|
+
},
|
|
898
|
+
"description": "The closed set of keys the shape admits. Deliberately not refined to be a superset of `requiredKeys`: no AD-5 code names that contradiction, so it joins the cross-field rules left to the compiler in v0. There is no spelling for \"these keys are required and extras are unconstrained\" \u2014 AD-4 calls the descriptor closed, so an open mode would be a different grammar."
|
|
899
|
+
},
|
|
900
|
+
"types": {
|
|
901
|
+
"type": "object",
|
|
902
|
+
"propertyNames": {
|
|
903
|
+
"type": "string",
|
|
904
|
+
"minLength": 1
|
|
905
|
+
},
|
|
906
|
+
"additionalProperties": {
|
|
907
|
+
"anyOf": [
|
|
908
|
+
{
|
|
909
|
+
"type": "string",
|
|
910
|
+
"enum": [
|
|
911
|
+
"string",
|
|
912
|
+
"number",
|
|
913
|
+
"boolean",
|
|
914
|
+
"object",
|
|
915
|
+
"array",
|
|
916
|
+
"null"
|
|
917
|
+
]
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"type": "null"
|
|
921
|
+
}
|
|
922
|
+
]
|
|
923
|
+
},
|
|
924
|
+
"description": "Caller-keyed by plain key name, never by pointer: the descriptor-relative pointer spelling does not apply to these keys and must not be extended to them by analogy. A missing key means \"not declared\"; an explicit `null` value means \"declared, type not stated\"."
|
|
925
|
+
}
|
|
926
|
+
},
|
|
927
|
+
"required": [
|
|
928
|
+
"requiredKeys",
|
|
929
|
+
"permittedKeys",
|
|
930
|
+
"types"
|
|
931
|
+
],
|
|
932
|
+
"additionalProperties": false,
|
|
933
|
+
"description": "AD-4: a closed descriptor, never an embedded JSON Schema. Typing it as a named field is what makes that structural, and it is a deliberate divergence from the Gate C fixture's `{ \"literal\": { \u2026 } }` spelling, where any JSON could sit."
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
"required": [
|
|
937
|
+
"op",
|
|
938
|
+
"operands",
|
|
939
|
+
"descriptor"
|
|
940
|
+
],
|
|
941
|
+
"additionalProperties": false
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"type": "object",
|
|
945
|
+
"properties": {
|
|
946
|
+
"op": {
|
|
947
|
+
"type": "string",
|
|
948
|
+
"const": "covers-by-key"
|
|
949
|
+
},
|
|
950
|
+
"operands": {
|
|
951
|
+
"type": "array",
|
|
952
|
+
"prefixItems": [
|
|
953
|
+
{
|
|
954
|
+
"$ref": "#/$defs/Operand"
|
|
955
|
+
},
|
|
956
|
+
{
|
|
957
|
+
"$ref": "#/$defs/Operand"
|
|
958
|
+
}
|
|
959
|
+
],
|
|
960
|
+
"description": "Two operands: `expected` is legally a reference set, and `actual` is legally a pointer to a collection. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it.",
|
|
961
|
+
"minItems": 2,
|
|
962
|
+
"items": false
|
|
963
|
+
},
|
|
964
|
+
"expectedKey": {
|
|
965
|
+
"type": "string",
|
|
966
|
+
"minLength": 1
|
|
967
|
+
},
|
|
968
|
+
"actualKey": {
|
|
969
|
+
"type": "string",
|
|
970
|
+
"minLength": 1
|
|
971
|
+
}
|
|
972
|
+
},
|
|
973
|
+
"required": [
|
|
974
|
+
"op",
|
|
975
|
+
"operands",
|
|
976
|
+
"expectedKey",
|
|
977
|
+
"actualKey"
|
|
978
|
+
],
|
|
979
|
+
"additionalProperties": false
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"type": "object",
|
|
983
|
+
"properties": {
|
|
984
|
+
"op": {
|
|
985
|
+
"type": "string",
|
|
986
|
+
"const": "not"
|
|
987
|
+
},
|
|
988
|
+
"operands": {
|
|
989
|
+
"type": "array",
|
|
990
|
+
"prefixItems": [
|
|
991
|
+
{
|
|
992
|
+
"$ref": "#/$defs/Expression"
|
|
993
|
+
}
|
|
994
|
+
],
|
|
995
|
+
"description": "One nested expression rather than an operand. A connective composes the tree; it never addresses evidence itself.",
|
|
996
|
+
"minItems": 1,
|
|
997
|
+
"items": false
|
|
998
|
+
}
|
|
999
|
+
},
|
|
1000
|
+
"required": [
|
|
1001
|
+
"op",
|
|
1002
|
+
"operands"
|
|
1003
|
+
],
|
|
1004
|
+
"additionalProperties": false
|
|
1005
|
+
},
|
|
1006
|
+
{
|
|
1007
|
+
"type": "object",
|
|
1008
|
+
"properties": {
|
|
1009
|
+
"op": {
|
|
1010
|
+
"type": "string",
|
|
1011
|
+
"const": "all"
|
|
1012
|
+
},
|
|
1013
|
+
"operands": {
|
|
1014
|
+
"minItems": 2,
|
|
1015
|
+
"type": "array",
|
|
1016
|
+
"items": {
|
|
1017
|
+
"$ref": "#/$defs/Expression"
|
|
1018
|
+
},
|
|
1019
|
+
"description": "Two or more nested expressions rather than operands. The minimum is settled here because AD-4 leaves connective arity unstated: zero operands would certify vacuously and one is the identity."
|
|
1020
|
+
}
|
|
1021
|
+
},
|
|
1022
|
+
"required": [
|
|
1023
|
+
"op",
|
|
1024
|
+
"operands"
|
|
1025
|
+
],
|
|
1026
|
+
"additionalProperties": false
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
"type": "object",
|
|
1030
|
+
"properties": {
|
|
1031
|
+
"op": {
|
|
1032
|
+
"type": "string",
|
|
1033
|
+
"const": "any"
|
|
1034
|
+
},
|
|
1035
|
+
"operands": {
|
|
1036
|
+
"minItems": 2,
|
|
1037
|
+
"type": "array",
|
|
1038
|
+
"items": {
|
|
1039
|
+
"$ref": "#/$defs/Expression"
|
|
1040
|
+
},
|
|
1041
|
+
"description": "Two or more nested expressions rather than operands, for the same reason `all` carries the same minimum."
|
|
1042
|
+
}
|
|
1043
|
+
},
|
|
1044
|
+
"required": [
|
|
1045
|
+
"op",
|
|
1046
|
+
"operands"
|
|
1047
|
+
],
|
|
1048
|
+
"additionalProperties": false
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
"type": "object",
|
|
1052
|
+
"properties": {
|
|
1053
|
+
"op": {
|
|
1054
|
+
"type": "string",
|
|
1055
|
+
"const": "for-all"
|
|
1056
|
+
},
|
|
1057
|
+
"collection": {
|
|
1058
|
+
"$ref": "#/$defs/Operand"
|
|
1059
|
+
},
|
|
1060
|
+
"predicate": {
|
|
1061
|
+
"$ref": "#/$defs/Expression"
|
|
1062
|
+
}
|
|
1063
|
+
},
|
|
1064
|
+
"required": [
|
|
1065
|
+
"op",
|
|
1066
|
+
"collection",
|
|
1067
|
+
"predicate"
|
|
1068
|
+
],
|
|
1069
|
+
"additionalProperties": false,
|
|
1070
|
+
"description": "`collection` is legally a pointer to a collection, and `predicate` is the expression each bound element is tested against, addressed by the `@/` pointer spelling. A quantifier inside the predicate is structurally admitted so `quantifier-nesting-exceeded` keeps a shape to fire on. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it."
|
|
1071
|
+
},
|
|
1072
|
+
{
|
|
1073
|
+
"type": "object",
|
|
1074
|
+
"properties": {
|
|
1075
|
+
"op": {
|
|
1076
|
+
"type": "string",
|
|
1077
|
+
"const": "for-any"
|
|
1078
|
+
},
|
|
1079
|
+
"collection": {
|
|
1080
|
+
"$ref": "#/$defs/Operand"
|
|
1081
|
+
},
|
|
1082
|
+
"predicate": {
|
|
1083
|
+
"$ref": "#/$defs/Expression"
|
|
1084
|
+
}
|
|
1085
|
+
},
|
|
1086
|
+
"required": [
|
|
1087
|
+
"op",
|
|
1088
|
+
"collection",
|
|
1089
|
+
"predicate"
|
|
1090
|
+
],
|
|
1091
|
+
"additionalProperties": false,
|
|
1092
|
+
"description": "`collection` is legally a pointer to a collection, and `predicate` is the expression each bound element is tested against, addressed by the `@/` pointer spelling. Every position admits the full operand union on purpose. AD-26 makes a reference-set operand outside its three legal positions \u2014 `covers-by-key`'s expected operand, and the set operand of `set-membership` or `containment` \u2014 fail compilation under `malformed-operator-expression`, which only stays fireable if the other positions admit it. Compilation enforces the legality stated here; the schema does not narrow it."
|
|
1093
|
+
}
|
|
1094
|
+
]
|
|
1095
|
+
},
|
|
1096
|
+
"Operand": {
|
|
1097
|
+
"anyOf": [
|
|
1098
|
+
{
|
|
1099
|
+
"type": "object",
|
|
1100
|
+
"properties": {
|
|
1101
|
+
"pointer": {
|
|
1102
|
+
"anyOf": [
|
|
1103
|
+
{
|
|
1104
|
+
"type": "string",
|
|
1105
|
+
"pattern": "^\\/interactions\\/[a-z0-9]+(?:-[a-z0-9]+)*\\/(?:(?:response-body|response-headers|stdout|stderr)(?:\\/(?:[^/~]|~[01])*)*|(?:response-status|exit-code)|call-inputs\\/(?:path|query|header|body)(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
1106
|
+
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one of the four transport channels as its next segment; `response-status` and `exit-code` take no tail. Syntax only: whether the step exists and whether the evidence is reachable are compile-time checks, not schema checks."
|
|
1107
|
+
},
|
|
1108
|
+
{
|
|
1109
|
+
"type": "string",
|
|
1110
|
+
"pattern": "^@(?:\\/(?:[^/~]|~[01])*)+$",
|
|
1111
|
+
"description": "AD-26 bound-element pointer: \"@/\" plus an RFC 6901 tail, addressing the element a quantifier binds. Bare \"@/\" addresses the element itself. That it appears only inside a quantifier is a compile-time check, not a schema check."
|
|
1112
|
+
}
|
|
1113
|
+
]
|
|
1114
|
+
}
|
|
1115
|
+
},
|
|
1116
|
+
"required": [
|
|
1117
|
+
"pointer"
|
|
1118
|
+
],
|
|
1119
|
+
"additionalProperties": false
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
"type": "object",
|
|
1123
|
+
"properties": {
|
|
1124
|
+
"literal": {
|
|
1125
|
+
"$ref": "#/$defs/JsonValue"
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
"required": [
|
|
1129
|
+
"literal"
|
|
1130
|
+
],
|
|
1131
|
+
"additionalProperties": false
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
"type": "object",
|
|
1135
|
+
"properties": {
|
|
1136
|
+
"referenceSet": {
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
1139
|
+
"description": "A plain identifier. Deliberately not an enum of the contract's declared reference sets and deliberately not refined against them: an identifier the contract does not declare is `unresolved-reference-set`, a coded compile-time error, and a schema that rejected it would convert that code into an anonymous parse fault."
|
|
1140
|
+
}
|
|
1141
|
+
},
|
|
1142
|
+
"required": [
|
|
1143
|
+
"referenceSet"
|
|
1144
|
+
],
|
|
1145
|
+
"additionalProperties": false
|
|
1146
|
+
}
|
|
1147
|
+
],
|
|
1148
|
+
"description": "One of the three operand forms, each a single-keyed object. Named so the published schema carries it once as a shared definition rather than inlining it at seventeen use sites. Which forms are legal in which position is declared on each operator's own `operands`, never narrowed here."
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
}
|