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,1229 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:eval-quality:schema:evidence-artifact",
|
|
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
|
+
"runId": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1
|
|
36
|
+
},
|
|
37
|
+
"scoringVersion": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
40
|
+
"description": "AD-11: computed by the scorer over the five named inputs below and never caller-supplied."
|
|
41
|
+
},
|
|
42
|
+
"scoringVersionInputs": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"properties": {
|
|
45
|
+
"contractSchemaVersion": {
|
|
46
|
+
"type": "integer",
|
|
47
|
+
"minimum": 1,
|
|
48
|
+
"maximum": 9007199254740991
|
|
49
|
+
},
|
|
50
|
+
"corpusDigest": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
53
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
54
|
+
},
|
|
55
|
+
"fixtureDigest": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
58
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
59
|
+
},
|
|
60
|
+
"evaluatorConfigurationDigest": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
63
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
64
|
+
},
|
|
65
|
+
"scoringPolicyDigest": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
68
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"required": [
|
|
72
|
+
"contractSchemaVersion",
|
|
73
|
+
"corpusDigest",
|
|
74
|
+
"fixtureDigest",
|
|
75
|
+
"evaluatorConfigurationDigest",
|
|
76
|
+
"scoringPolicyDigest"
|
|
77
|
+
],
|
|
78
|
+
"additionalProperties": false
|
|
79
|
+
},
|
|
80
|
+
"comparabilityKey": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
83
|
+
"description": "AD-7's declared key: the scoring policy digest plus the corpus digest restricted to the probes both results cover. Deliberately weaker than the scoring version, so adding a probe narrows a comparison rather than voiding every prior result."
|
|
84
|
+
},
|
|
85
|
+
"excludedProbeIds": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"items": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
90
|
+
},
|
|
91
|
+
"description": "The probes a narrowed comparison excluded, per AD-7. Empty is the ordinary case."
|
|
92
|
+
},
|
|
93
|
+
"exitCode": {
|
|
94
|
+
"type": "integer",
|
|
95
|
+
"minimum": -9007199254740991,
|
|
96
|
+
"maximum": 9007199254740991,
|
|
97
|
+
"description": "AD-21's exit code for the verdict this artifact carries. Recorded rather than derived at read time so the artifact and the process agree."
|
|
98
|
+
},
|
|
99
|
+
"verdictBasis": {
|
|
100
|
+
"type": "array",
|
|
101
|
+
"items": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"minLength": 1
|
|
104
|
+
},
|
|
105
|
+
"description": "Every condition that fired, in AD-21 terms. Free text by design: the rungs are prose in AD-21 and assigning them identifiers would be minting a vocabulary that AD has not. Each member is non-empty, on the same reasoning that `InvalidatedAttempt.reason` is: a condition that names itself with nothing has not been recorded. An empty array is legal and is what a PASS with no firing condition carries."
|
|
106
|
+
},
|
|
107
|
+
"callerAttestedInputs": {
|
|
108
|
+
"type": "array",
|
|
109
|
+
"items": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"enum": [
|
|
112
|
+
"contractSchemaVersion",
|
|
113
|
+
"corpusDigest",
|
|
114
|
+
"fixtureDigest",
|
|
115
|
+
"evaluatorConfigurationDigest",
|
|
116
|
+
"scoringPolicyDigest"
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"description": "Which of the five scoring-version inputs were caller-attested rather than computed by this package. An enum over the five key names rather than free strings, because AD-32 requires the artifact to state *which* inputs were attested and an unconstrained string cannot be checked against anything. AD-11 names three of the five as caller-attested; the enum admits any subset so a stricter or looser integration stays representable."
|
|
120
|
+
},
|
|
121
|
+
"trials": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"properties": {
|
|
124
|
+
"declaredMinimum": {
|
|
125
|
+
"type": "integer",
|
|
126
|
+
"minimum": 1,
|
|
127
|
+
"maximum": 9007199254740991
|
|
128
|
+
},
|
|
129
|
+
"completed": {
|
|
130
|
+
"type": "integer",
|
|
131
|
+
"minimum": 0,
|
|
132
|
+
"maximum": 9007199254740991
|
|
133
|
+
},
|
|
134
|
+
"invalidatedAttempts": {
|
|
135
|
+
"type": "array",
|
|
136
|
+
"items": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"properties": {
|
|
139
|
+
"attempt": {
|
|
140
|
+
"type": "integer",
|
|
141
|
+
"minimum": 1,
|
|
142
|
+
"maximum": 9007199254740991
|
|
143
|
+
},
|
|
144
|
+
"reason": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"minLength": 1,
|
|
147
|
+
"description": "AD-6 requires each attempt's reason. Non-empty: a reason that says nothing is not a reason, no AD-5 code names the condition, and the schema is therefore the enforcement point."
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"required": [
|
|
151
|
+
"attempt",
|
|
152
|
+
"reason"
|
|
153
|
+
],
|
|
154
|
+
"additionalProperties": false
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
"required": [
|
|
159
|
+
"declaredMinimum",
|
|
160
|
+
"completed",
|
|
161
|
+
"invalidatedAttempts"
|
|
162
|
+
],
|
|
163
|
+
"additionalProperties": false
|
|
164
|
+
},
|
|
165
|
+
"outcomes": {
|
|
166
|
+
"type": "array",
|
|
167
|
+
"items": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"properties": {
|
|
170
|
+
"oracleId": {
|
|
171
|
+
"type": "string",
|
|
172
|
+
"pattern": "^O-[0-9]{3,}$"
|
|
173
|
+
},
|
|
174
|
+
"probeId": {
|
|
175
|
+
"anyOf": [
|
|
176
|
+
{
|
|
177
|
+
"type": "string",
|
|
178
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"type": "null"
|
|
182
|
+
}
|
|
183
|
+
]
|
|
184
|
+
},
|
|
185
|
+
"state": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"enum": [
|
|
188
|
+
"caught",
|
|
189
|
+
"confirmed",
|
|
190
|
+
"missed",
|
|
191
|
+
"passed-clean-control",
|
|
192
|
+
"false-positive",
|
|
193
|
+
"abstained",
|
|
194
|
+
"bypassed",
|
|
195
|
+
"unreached",
|
|
196
|
+
"oracle-error",
|
|
197
|
+
"judge-error",
|
|
198
|
+
"infrastructure-error",
|
|
199
|
+
"not-applicable"
|
|
200
|
+
],
|
|
201
|
+
"description": "AD-6's closed twelve, assigned by AD-33. `not-applicable` is excluded from every count and is legal in exactly two cases: against an unexpired waiver, and against a probe AD-40 records as unexercised."
|
|
202
|
+
},
|
|
203
|
+
"severity": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"enum": [
|
|
206
|
+
"low",
|
|
207
|
+
"material",
|
|
208
|
+
"critical"
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
"disposition": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"enum": [
|
|
214
|
+
"held",
|
|
215
|
+
"violated",
|
|
216
|
+
"not-attempted"
|
|
217
|
+
],
|
|
218
|
+
"description": "The evaluator's own statement, carried through from the run record's dispositions rather than re-derived. One vocabulary, spelled once, in the artifact the caller produces."
|
|
219
|
+
},
|
|
220
|
+
"resolvedFrom": {
|
|
221
|
+
"anyOf": [
|
|
222
|
+
{
|
|
223
|
+
"type": "string",
|
|
224
|
+
"pattern": "^F-[0-9]{3,}$"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"type": "null"
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
"description": "The finding this outcome resolved from, or `null` where no finding was cited. A finding citing no oracle is recorded in `uncitedFindings` rather than discarded or forced into a state."
|
|
231
|
+
},
|
|
232
|
+
"corroboration": {
|
|
233
|
+
"type": "string",
|
|
234
|
+
"enum": [
|
|
235
|
+
"agrees",
|
|
236
|
+
"disagrees",
|
|
237
|
+
"not-evaluable"
|
|
238
|
+
],
|
|
239
|
+
"description": "AD-33's closed three. `not-evaluable` and AD-4's `insufficient-evidence` are DIFFERENT conditions and AD-33 forbids merging them: `not-evaluable` means the expression never ran, while `insufficient-evidence` means it ran to completion and found nothing to examine. That is why both vocabularies appear on one outcome, this field and `checkResolution`, rather than collapsing into one."
|
|
240
|
+
},
|
|
241
|
+
"selectedObservationIds": {
|
|
242
|
+
"type": "array",
|
|
243
|
+
"items": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
246
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
247
|
+
},
|
|
248
|
+
"description": "The cited observation identifiers AD-40 names as \"what the witness match resolves against and what AD-33 records on the outcome\". Recorded now rather than deferred: Owed item 2 is about selection DETERMINISM, meaning a monotonic sequence and a declared selector cardinality, which is a different question from whether the selection is recorded."
|
|
249
|
+
},
|
|
250
|
+
"checkResolution": {
|
|
251
|
+
"anyOf": [
|
|
252
|
+
{
|
|
253
|
+
"$ref": "#/$defs/CheckResolution"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"type": "null"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"description": "The oracle's `check` tree as it resolved, per AD-4. `null` for an oracle whose check never ran, which is the `not-evaluable` corroboration case; the two fields are read together and neither substitutes for the other."
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"required": [
|
|
263
|
+
"oracleId",
|
|
264
|
+
"probeId",
|
|
265
|
+
"state",
|
|
266
|
+
"severity",
|
|
267
|
+
"disposition",
|
|
268
|
+
"resolvedFrom",
|
|
269
|
+
"corroboration",
|
|
270
|
+
"selectedObservationIds",
|
|
271
|
+
"checkResolution"
|
|
272
|
+
],
|
|
273
|
+
"additionalProperties": false
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"uncitedFindings": {
|
|
277
|
+
"type": "array",
|
|
278
|
+
"items": {
|
|
279
|
+
"type": "string",
|
|
280
|
+
"pattern": "^F-[0-9]{3,}$"
|
|
281
|
+
},
|
|
282
|
+
"description": "Findings citing no oracle, retained rather than discarded or forced into a state, per AD-33. Discarding them would hide exactly the evaluator-chosen detection AD-23 exists to preserve."
|
|
283
|
+
},
|
|
284
|
+
"coverageGaps": {
|
|
285
|
+
"type": "array",
|
|
286
|
+
"items": {
|
|
287
|
+
"type": "object",
|
|
288
|
+
"properties": {
|
|
289
|
+
"rule": {
|
|
290
|
+
"type": "string",
|
|
291
|
+
"minLength": 1,
|
|
292
|
+
"description": "Opaque and deliberately not an enum, for the reason `Waiver.rule` is opaque: AD-20 enumerates its seven discipline rules in prose and assigns them no identifiers, so an enum here would be this schema minting the vocabulary AD-20 declined to."
|
|
293
|
+
},
|
|
294
|
+
"relevancePredicate": {
|
|
295
|
+
"type": "string",
|
|
296
|
+
"minLength": 1
|
|
297
|
+
},
|
|
298
|
+
"satisfactionPredicate": {
|
|
299
|
+
"type": "string",
|
|
300
|
+
"minLength": 1
|
|
301
|
+
},
|
|
302
|
+
"satisfied": {
|
|
303
|
+
"type": "boolean"
|
|
304
|
+
},
|
|
305
|
+
"severity": {
|
|
306
|
+
"type": "string",
|
|
307
|
+
"enum": [
|
|
308
|
+
"low",
|
|
309
|
+
"material",
|
|
310
|
+
"critical"
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"required": [
|
|
315
|
+
"rule",
|
|
316
|
+
"relevancePredicate",
|
|
317
|
+
"satisfactionPredicate",
|
|
318
|
+
"satisfied",
|
|
319
|
+
"severity"
|
|
320
|
+
],
|
|
321
|
+
"additionalProperties": false
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"strength": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"properties": {
|
|
327
|
+
"denominator": {
|
|
328
|
+
"type": "string",
|
|
329
|
+
"minLength": 1,
|
|
330
|
+
"description": "AD-7 requires the denominator to be named in the artifact \"so two consumers cannot derive two different recalls\"."
|
|
331
|
+
},
|
|
332
|
+
"basis": {
|
|
333
|
+
"type": "string",
|
|
334
|
+
"enum": [
|
|
335
|
+
"measured",
|
|
336
|
+
"reconstructed"
|
|
337
|
+
],
|
|
338
|
+
"description": "AD-40 forbids pooling a containment-reconstructed detection with a measured catch rate. Without this field the two are identical on disk and pooling is the default reading."
|
|
339
|
+
},
|
|
340
|
+
"vector": {
|
|
341
|
+
"type": "object",
|
|
342
|
+
"properties": {
|
|
343
|
+
"defect": {
|
|
344
|
+
"anyOf": [
|
|
345
|
+
{
|
|
346
|
+
"type": "object",
|
|
347
|
+
"properties": {
|
|
348
|
+
"caught": {
|
|
349
|
+
"type": "integer",
|
|
350
|
+
"minimum": 0,
|
|
351
|
+
"maximum": 9007199254740991
|
|
352
|
+
},
|
|
353
|
+
"exercised": {
|
|
354
|
+
"type": "integer",
|
|
355
|
+
"minimum": 0,
|
|
356
|
+
"maximum": 9007199254740991
|
|
357
|
+
},
|
|
358
|
+
"rate": {
|
|
359
|
+
"anyOf": [
|
|
360
|
+
{
|
|
361
|
+
"type": "number",
|
|
362
|
+
"minimum": 0,
|
|
363
|
+
"maximum": 1
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"type": "null"
|
|
367
|
+
}
|
|
368
|
+
],
|
|
369
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
370
|
+
}
|
|
371
|
+
},
|
|
372
|
+
"required": [
|
|
373
|
+
"caught",
|
|
374
|
+
"exercised",
|
|
375
|
+
"rate"
|
|
376
|
+
],
|
|
377
|
+
"additionalProperties": false
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"type": "null"
|
|
381
|
+
}
|
|
382
|
+
]
|
|
383
|
+
},
|
|
384
|
+
"gameability": {
|
|
385
|
+
"anyOf": [
|
|
386
|
+
{
|
|
387
|
+
"type": "object",
|
|
388
|
+
"properties": {
|
|
389
|
+
"caught": {
|
|
390
|
+
"type": "integer",
|
|
391
|
+
"minimum": 0,
|
|
392
|
+
"maximum": 9007199254740991
|
|
393
|
+
},
|
|
394
|
+
"exercised": {
|
|
395
|
+
"type": "integer",
|
|
396
|
+
"minimum": 0,
|
|
397
|
+
"maximum": 9007199254740991
|
|
398
|
+
},
|
|
399
|
+
"rate": {
|
|
400
|
+
"anyOf": [
|
|
401
|
+
{
|
|
402
|
+
"type": "number",
|
|
403
|
+
"minimum": 0,
|
|
404
|
+
"maximum": 1
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"type": "null"
|
|
408
|
+
}
|
|
409
|
+
],
|
|
410
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
"required": [
|
|
414
|
+
"caught",
|
|
415
|
+
"exercised",
|
|
416
|
+
"rate"
|
|
417
|
+
],
|
|
418
|
+
"additionalProperties": false
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"type": "null"
|
|
422
|
+
}
|
|
423
|
+
]
|
|
424
|
+
},
|
|
425
|
+
"zero-action": {
|
|
426
|
+
"anyOf": [
|
|
427
|
+
{
|
|
428
|
+
"type": "object",
|
|
429
|
+
"properties": {
|
|
430
|
+
"caught": {
|
|
431
|
+
"type": "integer",
|
|
432
|
+
"minimum": 0,
|
|
433
|
+
"maximum": 9007199254740991
|
|
434
|
+
},
|
|
435
|
+
"exercised": {
|
|
436
|
+
"type": "integer",
|
|
437
|
+
"minimum": 0,
|
|
438
|
+
"maximum": 9007199254740991
|
|
439
|
+
},
|
|
440
|
+
"rate": {
|
|
441
|
+
"anyOf": [
|
|
442
|
+
{
|
|
443
|
+
"type": "number",
|
|
444
|
+
"minimum": 0,
|
|
445
|
+
"maximum": 1
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"type": "null"
|
|
449
|
+
}
|
|
450
|
+
],
|
|
451
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
"required": [
|
|
455
|
+
"caught",
|
|
456
|
+
"exercised",
|
|
457
|
+
"rate"
|
|
458
|
+
],
|
|
459
|
+
"additionalProperties": false
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"type": "null"
|
|
463
|
+
}
|
|
464
|
+
]
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
"required": [
|
|
468
|
+
"defect",
|
|
469
|
+
"gameability",
|
|
470
|
+
"zero-action"
|
|
471
|
+
],
|
|
472
|
+
"additionalProperties": false
|
|
473
|
+
},
|
|
474
|
+
"comparable": {
|
|
475
|
+
"type": "boolean",
|
|
476
|
+
"description": "AD-21: a run that resolved `unreached` or completed fewer trials than the policy's declared minimum marks the vector non-comparable rather than silently comparing it."
|
|
477
|
+
},
|
|
478
|
+
"note": {
|
|
479
|
+
"anyOf": [
|
|
480
|
+
{
|
|
481
|
+
"type": "string"
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
"type": "null"
|
|
485
|
+
}
|
|
486
|
+
]
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"required": [
|
|
490
|
+
"denominator",
|
|
491
|
+
"basis",
|
|
492
|
+
"vector",
|
|
493
|
+
"comparable",
|
|
494
|
+
"note"
|
|
495
|
+
],
|
|
496
|
+
"additionalProperties": false
|
|
497
|
+
},
|
|
498
|
+
"remediation": {
|
|
499
|
+
"type": "object",
|
|
500
|
+
"properties": {
|
|
501
|
+
"revisionCount": {
|
|
502
|
+
"type": "integer",
|
|
503
|
+
"minimum": 0,
|
|
504
|
+
"maximum": 9007199254740991,
|
|
505
|
+
"description": "AD-12's REMEDIATION count, meaning how many times the contract was revised in response to results, and NOT AD-29's lineage `revisionCount` at the root of this artifact. The two are distinguished only by nesting, so both descriptions say so."
|
|
506
|
+
},
|
|
507
|
+
"cap": {
|
|
508
|
+
"type": "integer",
|
|
509
|
+
"minimum": 0,
|
|
510
|
+
"maximum": 9007199254740991
|
|
511
|
+
},
|
|
512
|
+
"capSource": {
|
|
513
|
+
"type": "string",
|
|
514
|
+
"const": "caller-attested",
|
|
515
|
+
"description": "A literal because AD-12 states the package validates the cap rather than enforcing it. There is no second legal value, and inventing one would claim an enforcement the architecture disclaims."
|
|
516
|
+
},
|
|
517
|
+
"lineageChain": {
|
|
518
|
+
"type": "object",
|
|
519
|
+
"properties": {
|
|
520
|
+
"lengthConsistent": {
|
|
521
|
+
"type": "boolean"
|
|
522
|
+
},
|
|
523
|
+
"noRepeatedDigest": {
|
|
524
|
+
"type": "boolean"
|
|
525
|
+
},
|
|
526
|
+
"noGap": {
|
|
527
|
+
"type": "boolean"
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
"required": [
|
|
531
|
+
"lengthConsistent",
|
|
532
|
+
"noRepeatedDigest",
|
|
533
|
+
"noGap"
|
|
534
|
+
],
|
|
535
|
+
"additionalProperties": false
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
"required": [
|
|
539
|
+
"revisionCount",
|
|
540
|
+
"cap",
|
|
541
|
+
"capSource",
|
|
542
|
+
"lineageChain"
|
|
543
|
+
],
|
|
544
|
+
"additionalProperties": false
|
|
545
|
+
},
|
|
546
|
+
"mode": {
|
|
547
|
+
"type": "string",
|
|
548
|
+
"const": "production"
|
|
549
|
+
},
|
|
550
|
+
"productionVerdict": {
|
|
551
|
+
"$ref": "#/$defs/Verdict"
|
|
552
|
+
}
|
|
553
|
+
},
|
|
554
|
+
"required": [
|
|
555
|
+
"schemaVersion",
|
|
556
|
+
"parentDigest",
|
|
557
|
+
"revisionCount",
|
|
558
|
+
"runId",
|
|
559
|
+
"scoringVersion",
|
|
560
|
+
"scoringVersionInputs",
|
|
561
|
+
"comparabilityKey",
|
|
562
|
+
"excludedProbeIds",
|
|
563
|
+
"exitCode",
|
|
564
|
+
"verdictBasis",
|
|
565
|
+
"callerAttestedInputs",
|
|
566
|
+
"trials",
|
|
567
|
+
"outcomes",
|
|
568
|
+
"uncitedFindings",
|
|
569
|
+
"coverageGaps",
|
|
570
|
+
"strength",
|
|
571
|
+
"remediation",
|
|
572
|
+
"mode",
|
|
573
|
+
"productionVerdict"
|
|
574
|
+
],
|
|
575
|
+
"additionalProperties": false,
|
|
576
|
+
"description": "Production mode: the verdict is about the system under test, and an ingested evaluator recommendation promotes as AD-21's ladder describes."
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"type": "object",
|
|
580
|
+
"properties": {
|
|
581
|
+
"schemaVersion": {
|
|
582
|
+
"type": "integer",
|
|
583
|
+
"minimum": 1,
|
|
584
|
+
"maximum": 9007199254740991,
|
|
585
|
+
"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."
|
|
586
|
+
},
|
|
587
|
+
"parentDigest": {
|
|
588
|
+
"anyOf": [
|
|
589
|
+
{
|
|
590
|
+
"type": "string",
|
|
591
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
592
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
"type": "null"
|
|
596
|
+
}
|
|
597
|
+
],
|
|
598
|
+
"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."
|
|
599
|
+
},
|
|
600
|
+
"revisionCount": {
|
|
601
|
+
"type": "integer",
|
|
602
|
+
"minimum": 0,
|
|
603
|
+
"maximum": 9007199254740991,
|
|
604
|
+
"description": "AD-29: one greater than the parent artifact's."
|
|
605
|
+
},
|
|
606
|
+
"runId": {
|
|
607
|
+
"type": "string",
|
|
608
|
+
"minLength": 1
|
|
609
|
+
},
|
|
610
|
+
"scoringVersion": {
|
|
611
|
+
"type": "string",
|
|
612
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
613
|
+
"description": "AD-11: computed by the scorer over the five named inputs below and never caller-supplied."
|
|
614
|
+
},
|
|
615
|
+
"scoringVersionInputs": {
|
|
616
|
+
"type": "object",
|
|
617
|
+
"properties": {
|
|
618
|
+
"contractSchemaVersion": {
|
|
619
|
+
"type": "integer",
|
|
620
|
+
"minimum": 1,
|
|
621
|
+
"maximum": 9007199254740991
|
|
622
|
+
},
|
|
623
|
+
"corpusDigest": {
|
|
624
|
+
"type": "string",
|
|
625
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
626
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
627
|
+
},
|
|
628
|
+
"fixtureDigest": {
|
|
629
|
+
"type": "string",
|
|
630
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
631
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
632
|
+
},
|
|
633
|
+
"evaluatorConfigurationDigest": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
636
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
637
|
+
},
|
|
638
|
+
"scoringPolicyDigest": {
|
|
639
|
+
"type": "string",
|
|
640
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
641
|
+
"description": "AD-27 digest: \"sha256:\" plus 64 lowercase hexadecimal characters."
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
"required": [
|
|
645
|
+
"contractSchemaVersion",
|
|
646
|
+
"corpusDigest",
|
|
647
|
+
"fixtureDigest",
|
|
648
|
+
"evaluatorConfigurationDigest",
|
|
649
|
+
"scoringPolicyDigest"
|
|
650
|
+
],
|
|
651
|
+
"additionalProperties": false
|
|
652
|
+
},
|
|
653
|
+
"comparabilityKey": {
|
|
654
|
+
"type": "string",
|
|
655
|
+
"pattern": "^sha256:[0-9a-f]{64}$",
|
|
656
|
+
"description": "AD-7's declared key: the scoring policy digest plus the corpus digest restricted to the probes both results cover. Deliberately weaker than the scoring version, so adding a probe narrows a comparison rather than voiding every prior result."
|
|
657
|
+
},
|
|
658
|
+
"excludedProbeIds": {
|
|
659
|
+
"type": "array",
|
|
660
|
+
"items": {
|
|
661
|
+
"type": "string",
|
|
662
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
663
|
+
},
|
|
664
|
+
"description": "The probes a narrowed comparison excluded, per AD-7. Empty is the ordinary case."
|
|
665
|
+
},
|
|
666
|
+
"exitCode": {
|
|
667
|
+
"type": "integer",
|
|
668
|
+
"minimum": -9007199254740991,
|
|
669
|
+
"maximum": 9007199254740991,
|
|
670
|
+
"description": "AD-21's exit code for the verdict this artifact carries. Recorded rather than derived at read time so the artifact and the process agree."
|
|
671
|
+
},
|
|
672
|
+
"verdictBasis": {
|
|
673
|
+
"type": "array",
|
|
674
|
+
"items": {
|
|
675
|
+
"type": "string",
|
|
676
|
+
"minLength": 1
|
|
677
|
+
},
|
|
678
|
+
"description": "Every condition that fired, in AD-21 terms. Free text by design: the rungs are prose in AD-21 and assigning them identifiers would be minting a vocabulary that AD has not. Each member is non-empty, on the same reasoning that `InvalidatedAttempt.reason` is: a condition that names itself with nothing has not been recorded. An empty array is legal and is what a PASS with no firing condition carries."
|
|
679
|
+
},
|
|
680
|
+
"callerAttestedInputs": {
|
|
681
|
+
"type": "array",
|
|
682
|
+
"items": {
|
|
683
|
+
"type": "string",
|
|
684
|
+
"enum": [
|
|
685
|
+
"contractSchemaVersion",
|
|
686
|
+
"corpusDigest",
|
|
687
|
+
"fixtureDigest",
|
|
688
|
+
"evaluatorConfigurationDigest",
|
|
689
|
+
"scoringPolicyDigest"
|
|
690
|
+
]
|
|
691
|
+
},
|
|
692
|
+
"description": "Which of the five scoring-version inputs were caller-attested rather than computed by this package. An enum over the five key names rather than free strings, because AD-32 requires the artifact to state *which* inputs were attested and an unconstrained string cannot be checked against anything. AD-11 names three of the five as caller-attested; the enum admits any subset so a stricter or looser integration stays representable."
|
|
693
|
+
},
|
|
694
|
+
"trials": {
|
|
695
|
+
"type": "object",
|
|
696
|
+
"properties": {
|
|
697
|
+
"declaredMinimum": {
|
|
698
|
+
"type": "integer",
|
|
699
|
+
"minimum": 1,
|
|
700
|
+
"maximum": 9007199254740991
|
|
701
|
+
},
|
|
702
|
+
"completed": {
|
|
703
|
+
"type": "integer",
|
|
704
|
+
"minimum": 0,
|
|
705
|
+
"maximum": 9007199254740991
|
|
706
|
+
},
|
|
707
|
+
"invalidatedAttempts": {
|
|
708
|
+
"type": "array",
|
|
709
|
+
"items": {
|
|
710
|
+
"type": "object",
|
|
711
|
+
"properties": {
|
|
712
|
+
"attempt": {
|
|
713
|
+
"type": "integer",
|
|
714
|
+
"minimum": 1,
|
|
715
|
+
"maximum": 9007199254740991
|
|
716
|
+
},
|
|
717
|
+
"reason": {
|
|
718
|
+
"type": "string",
|
|
719
|
+
"minLength": 1,
|
|
720
|
+
"description": "AD-6 requires each attempt's reason. Non-empty: a reason that says nothing is not a reason, no AD-5 code names the condition, and the schema is therefore the enforcement point."
|
|
721
|
+
}
|
|
722
|
+
},
|
|
723
|
+
"required": [
|
|
724
|
+
"attempt",
|
|
725
|
+
"reason"
|
|
726
|
+
],
|
|
727
|
+
"additionalProperties": false
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
},
|
|
731
|
+
"required": [
|
|
732
|
+
"declaredMinimum",
|
|
733
|
+
"completed",
|
|
734
|
+
"invalidatedAttempts"
|
|
735
|
+
],
|
|
736
|
+
"additionalProperties": false
|
|
737
|
+
},
|
|
738
|
+
"outcomes": {
|
|
739
|
+
"type": "array",
|
|
740
|
+
"items": {
|
|
741
|
+
"type": "object",
|
|
742
|
+
"properties": {
|
|
743
|
+
"oracleId": {
|
|
744
|
+
"type": "string",
|
|
745
|
+
"pattern": "^O-[0-9]{3,}$"
|
|
746
|
+
},
|
|
747
|
+
"probeId": {
|
|
748
|
+
"anyOf": [
|
|
749
|
+
{
|
|
750
|
+
"type": "string",
|
|
751
|
+
"pattern": "^P-[0-9]{3,}$"
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"type": "null"
|
|
755
|
+
}
|
|
756
|
+
]
|
|
757
|
+
},
|
|
758
|
+
"state": {
|
|
759
|
+
"type": "string",
|
|
760
|
+
"enum": [
|
|
761
|
+
"caught",
|
|
762
|
+
"confirmed",
|
|
763
|
+
"missed",
|
|
764
|
+
"passed-clean-control",
|
|
765
|
+
"false-positive",
|
|
766
|
+
"abstained",
|
|
767
|
+
"bypassed",
|
|
768
|
+
"unreached",
|
|
769
|
+
"oracle-error",
|
|
770
|
+
"judge-error",
|
|
771
|
+
"infrastructure-error",
|
|
772
|
+
"not-applicable"
|
|
773
|
+
],
|
|
774
|
+
"description": "AD-6's closed twelve, assigned by AD-33. `not-applicable` is excluded from every count and is legal in exactly two cases: against an unexpired waiver, and against a probe AD-40 records as unexercised."
|
|
775
|
+
},
|
|
776
|
+
"severity": {
|
|
777
|
+
"type": "string",
|
|
778
|
+
"enum": [
|
|
779
|
+
"low",
|
|
780
|
+
"material",
|
|
781
|
+
"critical"
|
|
782
|
+
]
|
|
783
|
+
},
|
|
784
|
+
"disposition": {
|
|
785
|
+
"type": "string",
|
|
786
|
+
"enum": [
|
|
787
|
+
"held",
|
|
788
|
+
"violated",
|
|
789
|
+
"not-attempted"
|
|
790
|
+
],
|
|
791
|
+
"description": "The evaluator's own statement, carried through from the run record's dispositions rather than re-derived. One vocabulary, spelled once, in the artifact the caller produces."
|
|
792
|
+
},
|
|
793
|
+
"resolvedFrom": {
|
|
794
|
+
"anyOf": [
|
|
795
|
+
{
|
|
796
|
+
"type": "string",
|
|
797
|
+
"pattern": "^F-[0-9]{3,}$"
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"type": "null"
|
|
801
|
+
}
|
|
802
|
+
],
|
|
803
|
+
"description": "The finding this outcome resolved from, or `null` where no finding was cited. A finding citing no oracle is recorded in `uncitedFindings` rather than discarded or forced into a state."
|
|
804
|
+
},
|
|
805
|
+
"corroboration": {
|
|
806
|
+
"type": "string",
|
|
807
|
+
"enum": [
|
|
808
|
+
"agrees",
|
|
809
|
+
"disagrees",
|
|
810
|
+
"not-evaluable"
|
|
811
|
+
],
|
|
812
|
+
"description": "AD-33's closed three. `not-evaluable` and AD-4's `insufficient-evidence` are DIFFERENT conditions and AD-33 forbids merging them: `not-evaluable` means the expression never ran, while `insufficient-evidence` means it ran to completion and found nothing to examine. That is why both vocabularies appear on one outcome, this field and `checkResolution`, rather than collapsing into one."
|
|
813
|
+
},
|
|
814
|
+
"selectedObservationIds": {
|
|
815
|
+
"type": "array",
|
|
816
|
+
"items": {
|
|
817
|
+
"type": "string",
|
|
818
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
819
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
820
|
+
},
|
|
821
|
+
"description": "The cited observation identifiers AD-40 names as \"what the witness match resolves against and what AD-33 records on the outcome\". Recorded now rather than deferred: Owed item 2 is about selection DETERMINISM, meaning a monotonic sequence and a declared selector cardinality, which is a different question from whether the selection is recorded."
|
|
822
|
+
},
|
|
823
|
+
"checkResolution": {
|
|
824
|
+
"anyOf": [
|
|
825
|
+
{
|
|
826
|
+
"$ref": "#/$defs/CheckResolution"
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"type": "null"
|
|
830
|
+
}
|
|
831
|
+
],
|
|
832
|
+
"description": "The oracle's `check` tree as it resolved, per AD-4. `null` for an oracle whose check never ran, which is the `not-evaluable` corroboration case; the two fields are read together and neither substitutes for the other."
|
|
833
|
+
}
|
|
834
|
+
},
|
|
835
|
+
"required": [
|
|
836
|
+
"oracleId",
|
|
837
|
+
"probeId",
|
|
838
|
+
"state",
|
|
839
|
+
"severity",
|
|
840
|
+
"disposition",
|
|
841
|
+
"resolvedFrom",
|
|
842
|
+
"corroboration",
|
|
843
|
+
"selectedObservationIds",
|
|
844
|
+
"checkResolution"
|
|
845
|
+
],
|
|
846
|
+
"additionalProperties": false
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
"uncitedFindings": {
|
|
850
|
+
"type": "array",
|
|
851
|
+
"items": {
|
|
852
|
+
"type": "string",
|
|
853
|
+
"pattern": "^F-[0-9]{3,}$"
|
|
854
|
+
},
|
|
855
|
+
"description": "Findings citing no oracle, retained rather than discarded or forced into a state, per AD-33. Discarding them would hide exactly the evaluator-chosen detection AD-23 exists to preserve."
|
|
856
|
+
},
|
|
857
|
+
"coverageGaps": {
|
|
858
|
+
"type": "array",
|
|
859
|
+
"items": {
|
|
860
|
+
"type": "object",
|
|
861
|
+
"properties": {
|
|
862
|
+
"rule": {
|
|
863
|
+
"type": "string",
|
|
864
|
+
"minLength": 1,
|
|
865
|
+
"description": "Opaque and deliberately not an enum, for the reason `Waiver.rule` is opaque: AD-20 enumerates its seven discipline rules in prose and assigns them no identifiers, so an enum here would be this schema minting the vocabulary AD-20 declined to."
|
|
866
|
+
},
|
|
867
|
+
"relevancePredicate": {
|
|
868
|
+
"type": "string",
|
|
869
|
+
"minLength": 1
|
|
870
|
+
},
|
|
871
|
+
"satisfactionPredicate": {
|
|
872
|
+
"type": "string",
|
|
873
|
+
"minLength": 1
|
|
874
|
+
},
|
|
875
|
+
"satisfied": {
|
|
876
|
+
"type": "boolean"
|
|
877
|
+
},
|
|
878
|
+
"severity": {
|
|
879
|
+
"type": "string",
|
|
880
|
+
"enum": [
|
|
881
|
+
"low",
|
|
882
|
+
"material",
|
|
883
|
+
"critical"
|
|
884
|
+
]
|
|
885
|
+
}
|
|
886
|
+
},
|
|
887
|
+
"required": [
|
|
888
|
+
"rule",
|
|
889
|
+
"relevancePredicate",
|
|
890
|
+
"satisfactionPredicate",
|
|
891
|
+
"satisfied",
|
|
892
|
+
"severity"
|
|
893
|
+
],
|
|
894
|
+
"additionalProperties": false
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
"strength": {
|
|
898
|
+
"type": "object",
|
|
899
|
+
"properties": {
|
|
900
|
+
"denominator": {
|
|
901
|
+
"type": "string",
|
|
902
|
+
"minLength": 1,
|
|
903
|
+
"description": "AD-7 requires the denominator to be named in the artifact \"so two consumers cannot derive two different recalls\"."
|
|
904
|
+
},
|
|
905
|
+
"basis": {
|
|
906
|
+
"type": "string",
|
|
907
|
+
"enum": [
|
|
908
|
+
"measured",
|
|
909
|
+
"reconstructed"
|
|
910
|
+
],
|
|
911
|
+
"description": "AD-40 forbids pooling a containment-reconstructed detection with a measured catch rate. Without this field the two are identical on disk and pooling is the default reading."
|
|
912
|
+
},
|
|
913
|
+
"vector": {
|
|
914
|
+
"type": "object",
|
|
915
|
+
"properties": {
|
|
916
|
+
"defect": {
|
|
917
|
+
"anyOf": [
|
|
918
|
+
{
|
|
919
|
+
"type": "object",
|
|
920
|
+
"properties": {
|
|
921
|
+
"caught": {
|
|
922
|
+
"type": "integer",
|
|
923
|
+
"minimum": 0,
|
|
924
|
+
"maximum": 9007199254740991
|
|
925
|
+
},
|
|
926
|
+
"exercised": {
|
|
927
|
+
"type": "integer",
|
|
928
|
+
"minimum": 0,
|
|
929
|
+
"maximum": 9007199254740991
|
|
930
|
+
},
|
|
931
|
+
"rate": {
|
|
932
|
+
"anyOf": [
|
|
933
|
+
{
|
|
934
|
+
"type": "number",
|
|
935
|
+
"minimum": 0,
|
|
936
|
+
"maximum": 1
|
|
937
|
+
},
|
|
938
|
+
{
|
|
939
|
+
"type": "null"
|
|
940
|
+
}
|
|
941
|
+
],
|
|
942
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
943
|
+
}
|
|
944
|
+
},
|
|
945
|
+
"required": [
|
|
946
|
+
"caught",
|
|
947
|
+
"exercised",
|
|
948
|
+
"rate"
|
|
949
|
+
],
|
|
950
|
+
"additionalProperties": false
|
|
951
|
+
},
|
|
952
|
+
{
|
|
953
|
+
"type": "null"
|
|
954
|
+
}
|
|
955
|
+
]
|
|
956
|
+
},
|
|
957
|
+
"gameability": {
|
|
958
|
+
"anyOf": [
|
|
959
|
+
{
|
|
960
|
+
"type": "object",
|
|
961
|
+
"properties": {
|
|
962
|
+
"caught": {
|
|
963
|
+
"type": "integer",
|
|
964
|
+
"minimum": 0,
|
|
965
|
+
"maximum": 9007199254740991
|
|
966
|
+
},
|
|
967
|
+
"exercised": {
|
|
968
|
+
"type": "integer",
|
|
969
|
+
"minimum": 0,
|
|
970
|
+
"maximum": 9007199254740991
|
|
971
|
+
},
|
|
972
|
+
"rate": {
|
|
973
|
+
"anyOf": [
|
|
974
|
+
{
|
|
975
|
+
"type": "number",
|
|
976
|
+
"minimum": 0,
|
|
977
|
+
"maximum": 1
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
"type": "null"
|
|
981
|
+
}
|
|
982
|
+
],
|
|
983
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
984
|
+
}
|
|
985
|
+
},
|
|
986
|
+
"required": [
|
|
987
|
+
"caught",
|
|
988
|
+
"exercised",
|
|
989
|
+
"rate"
|
|
990
|
+
],
|
|
991
|
+
"additionalProperties": false
|
|
992
|
+
},
|
|
993
|
+
{
|
|
994
|
+
"type": "null"
|
|
995
|
+
}
|
|
996
|
+
]
|
|
997
|
+
},
|
|
998
|
+
"zero-action": {
|
|
999
|
+
"anyOf": [
|
|
1000
|
+
{
|
|
1001
|
+
"type": "object",
|
|
1002
|
+
"properties": {
|
|
1003
|
+
"caught": {
|
|
1004
|
+
"type": "integer",
|
|
1005
|
+
"minimum": 0,
|
|
1006
|
+
"maximum": 9007199254740991
|
|
1007
|
+
},
|
|
1008
|
+
"exercised": {
|
|
1009
|
+
"type": "integer",
|
|
1010
|
+
"minimum": 0,
|
|
1011
|
+
"maximum": 9007199254740991
|
|
1012
|
+
},
|
|
1013
|
+
"rate": {
|
|
1014
|
+
"anyOf": [
|
|
1015
|
+
{
|
|
1016
|
+
"type": "number",
|
|
1017
|
+
"minimum": 0,
|
|
1018
|
+
"maximum": 1
|
|
1019
|
+
},
|
|
1020
|
+
{
|
|
1021
|
+
"type": "null"
|
|
1022
|
+
}
|
|
1023
|
+
],
|
|
1024
|
+
"description": "Nullable because `exercised` may be zero and a rate over an empty denominator is undefined rather than zero. There is no separate `rawCounts` block: AD-7 wants raw counts recorded alongside the rate so a consumer can recompute, and this entry already carries both; a second copy is one more thing to disagree with itself. That `rate` equals `caught` over `exercised` is a cross-field rule with no AD-5 code and is left to the scorer."
|
|
1025
|
+
}
|
|
1026
|
+
},
|
|
1027
|
+
"required": [
|
|
1028
|
+
"caught",
|
|
1029
|
+
"exercised",
|
|
1030
|
+
"rate"
|
|
1031
|
+
],
|
|
1032
|
+
"additionalProperties": false
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
"type": "null"
|
|
1036
|
+
}
|
|
1037
|
+
]
|
|
1038
|
+
}
|
|
1039
|
+
},
|
|
1040
|
+
"required": [
|
|
1041
|
+
"defect",
|
|
1042
|
+
"gameability",
|
|
1043
|
+
"zero-action"
|
|
1044
|
+
],
|
|
1045
|
+
"additionalProperties": false
|
|
1046
|
+
},
|
|
1047
|
+
"comparable": {
|
|
1048
|
+
"type": "boolean",
|
|
1049
|
+
"description": "AD-21: a run that resolved `unreached` or completed fewer trials than the policy's declared minimum marks the vector non-comparable rather than silently comparing it."
|
|
1050
|
+
},
|
|
1051
|
+
"note": {
|
|
1052
|
+
"anyOf": [
|
|
1053
|
+
{
|
|
1054
|
+
"type": "string"
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
"type": "null"
|
|
1058
|
+
}
|
|
1059
|
+
]
|
|
1060
|
+
}
|
|
1061
|
+
},
|
|
1062
|
+
"required": [
|
|
1063
|
+
"denominator",
|
|
1064
|
+
"basis",
|
|
1065
|
+
"vector",
|
|
1066
|
+
"comparable",
|
|
1067
|
+
"note"
|
|
1068
|
+
],
|
|
1069
|
+
"additionalProperties": false
|
|
1070
|
+
},
|
|
1071
|
+
"remediation": {
|
|
1072
|
+
"type": "object",
|
|
1073
|
+
"properties": {
|
|
1074
|
+
"revisionCount": {
|
|
1075
|
+
"type": "integer",
|
|
1076
|
+
"minimum": 0,
|
|
1077
|
+
"maximum": 9007199254740991,
|
|
1078
|
+
"description": "AD-12's REMEDIATION count, meaning how many times the contract was revised in response to results, and NOT AD-29's lineage `revisionCount` at the root of this artifact. The two are distinguished only by nesting, so both descriptions say so."
|
|
1079
|
+
},
|
|
1080
|
+
"cap": {
|
|
1081
|
+
"type": "integer",
|
|
1082
|
+
"minimum": 0,
|
|
1083
|
+
"maximum": 9007199254740991
|
|
1084
|
+
},
|
|
1085
|
+
"capSource": {
|
|
1086
|
+
"type": "string",
|
|
1087
|
+
"const": "caller-attested",
|
|
1088
|
+
"description": "A literal because AD-12 states the package validates the cap rather than enforcing it. There is no second legal value, and inventing one would claim an enforcement the architecture disclaims."
|
|
1089
|
+
},
|
|
1090
|
+
"lineageChain": {
|
|
1091
|
+
"type": "object",
|
|
1092
|
+
"properties": {
|
|
1093
|
+
"lengthConsistent": {
|
|
1094
|
+
"type": "boolean"
|
|
1095
|
+
},
|
|
1096
|
+
"noRepeatedDigest": {
|
|
1097
|
+
"type": "boolean"
|
|
1098
|
+
},
|
|
1099
|
+
"noGap": {
|
|
1100
|
+
"type": "boolean"
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
"required": [
|
|
1104
|
+
"lengthConsistent",
|
|
1105
|
+
"noRepeatedDigest",
|
|
1106
|
+
"noGap"
|
|
1107
|
+
],
|
|
1108
|
+
"additionalProperties": false
|
|
1109
|
+
}
|
|
1110
|
+
},
|
|
1111
|
+
"required": [
|
|
1112
|
+
"revisionCount",
|
|
1113
|
+
"cap",
|
|
1114
|
+
"capSource",
|
|
1115
|
+
"lineageChain"
|
|
1116
|
+
],
|
|
1117
|
+
"additionalProperties": false
|
|
1118
|
+
},
|
|
1119
|
+
"mode": {
|
|
1120
|
+
"type": "string",
|
|
1121
|
+
"const": "contract-scoring"
|
|
1122
|
+
},
|
|
1123
|
+
"contractVerdict": {
|
|
1124
|
+
"$ref": "#/$defs/Verdict"
|
|
1125
|
+
},
|
|
1126
|
+
"systemRecommendationRecorded": {
|
|
1127
|
+
"description": "The evaluator's recommendation about the SYSTEM, recorded and never promoted. On a knowingly defective probe a system-directed FAIL is an input rather than a signal about the contract.",
|
|
1128
|
+
"$ref": "#/$defs/EvaluatorRecommendation"
|
|
1129
|
+
},
|
|
1130
|
+
"systemRecommendationNote": {
|
|
1131
|
+
"anyOf": [
|
|
1132
|
+
{
|
|
1133
|
+
"type": "string"
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"type": "null"
|
|
1137
|
+
}
|
|
1138
|
+
]
|
|
1139
|
+
}
|
|
1140
|
+
},
|
|
1141
|
+
"required": [
|
|
1142
|
+
"schemaVersion",
|
|
1143
|
+
"parentDigest",
|
|
1144
|
+
"revisionCount",
|
|
1145
|
+
"runId",
|
|
1146
|
+
"scoringVersion",
|
|
1147
|
+
"scoringVersionInputs",
|
|
1148
|
+
"comparabilityKey",
|
|
1149
|
+
"excludedProbeIds",
|
|
1150
|
+
"exitCode",
|
|
1151
|
+
"verdictBasis",
|
|
1152
|
+
"callerAttestedInputs",
|
|
1153
|
+
"trials",
|
|
1154
|
+
"outcomes",
|
|
1155
|
+
"uncitedFindings",
|
|
1156
|
+
"coverageGaps",
|
|
1157
|
+
"strength",
|
|
1158
|
+
"remediation",
|
|
1159
|
+
"mode",
|
|
1160
|
+
"contractVerdict",
|
|
1161
|
+
"systemRecommendationRecorded",
|
|
1162
|
+
"systemRecommendationNote"
|
|
1163
|
+
],
|
|
1164
|
+
"additionalProperties": false,
|
|
1165
|
+
"description": "Contract-scoring mode: the verdict is about the contract, and the evaluator's recommendation about the system is recorded beside it rather than promoted."
|
|
1166
|
+
}
|
|
1167
|
+
],
|
|
1168
|
+
"description": "The scored output, owned by `emit` per AD-24, with no prior art; `score` produces the outcome and verdict values it serializes. The two modes are separate branches because AD-21 requires that the production verdict and the contract verdict never share a field. This expresses that settled sentence and no more: Owed item 4's remaining half stays open, namely mode being fixed before ingest and entering AD-11's identity inputs rather than appearing first here; and the Sealed Run Record still carries no mode.",
|
|
1169
|
+
"$defs": {
|
|
1170
|
+
"CheckResolution": {
|
|
1171
|
+
"description": "One node of an oracle's `check` tree as it resolved. AD-4's resolution is three-valued rather than two, and the introduction vocabulary has exactly one member because AD-4 closes the introduction set at one: an empty collection. `null` where the resolution is not `insufficient-evidence`. A leaf carries an empty `children` array.",
|
|
1172
|
+
"type": "object",
|
|
1173
|
+
"properties": {
|
|
1174
|
+
"resolution": {
|
|
1175
|
+
"type": "string",
|
|
1176
|
+
"enum": [
|
|
1177
|
+
"true",
|
|
1178
|
+
"false",
|
|
1179
|
+
"insufficient-evidence"
|
|
1180
|
+
]
|
|
1181
|
+
},
|
|
1182
|
+
"introductionCondition": {
|
|
1183
|
+
"anyOf": [
|
|
1184
|
+
{
|
|
1185
|
+
"type": "string",
|
|
1186
|
+
"enum": [
|
|
1187
|
+
"empty-collection"
|
|
1188
|
+
]
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
"type": "null"
|
|
1192
|
+
}
|
|
1193
|
+
]
|
|
1194
|
+
},
|
|
1195
|
+
"children": {
|
|
1196
|
+
"type": "array",
|
|
1197
|
+
"items": {
|
|
1198
|
+
"$ref": "#/$defs/CheckResolution"
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
},
|
|
1202
|
+
"required": [
|
|
1203
|
+
"resolution",
|
|
1204
|
+
"introductionCondition",
|
|
1205
|
+
"children"
|
|
1206
|
+
],
|
|
1207
|
+
"additionalProperties": false
|
|
1208
|
+
},
|
|
1209
|
+
"Verdict": {
|
|
1210
|
+
"type": "string",
|
|
1211
|
+
"enum": [
|
|
1212
|
+
"PASS",
|
|
1213
|
+
"WAIVED",
|
|
1214
|
+
"CONCERNS",
|
|
1215
|
+
"FAIL"
|
|
1216
|
+
],
|
|
1217
|
+
"description": "AD-21's four verdicts. Uppercase is one of the two named exceptions to the lowercase kebab-case enum convention. Exit codes are AD-21's and belong to the CLI rather than to this value: PASS, WAIVED, and CONCERNS exit zero and FAIL exits two."
|
|
1218
|
+
},
|
|
1219
|
+
"EvaluatorRecommendation": {
|
|
1220
|
+
"type": "string",
|
|
1221
|
+
"enum": [
|
|
1222
|
+
"PASS",
|
|
1223
|
+
"CONCERNS",
|
|
1224
|
+
"FAIL"
|
|
1225
|
+
],
|
|
1226
|
+
"description": "The evaluator's own recommendation, ingested and never promoted to a verdict in contract-scoring mode. AD-24 requires a closed enum; the prior art's `NOT_APPLICABLE` is dropped with the `scripted` arm it belonged to. Consequence recorded here because it closes a rung: AD-21's Invalid condition for \"an unrecognised evaluator recommendation value\" is unreachable for a schema-valid artifact, since an unrecognised value fails to parse and becomes an AD-28 `schema-parse-failure` fault, and a fault never becomes a verdict. An ingesting reader either validates this field leniently and maps an unrecognised value to that rung, or accepts that the rung fires only as a fault."
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
}
|