eval-quality 0.2.0 → 0.3.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/README.md +3 -3
- package/corpus/dev/README.md +3 -2
- package/corpus/dev/compile-seal-example/brief.json +1 -1
- package/corpus/dev/compile-seal-example/contract.json +1 -1
- package/corpus/dev/contracts/absent-collection-locations.json +1 -1
- package/corpus/dev/contracts/absent-sibling-groups.json +1 -1
- package/corpus/dev/contracts/absent-success-indicator.json +1 -1
- package/corpus/dev/contracts/empty-channel-roles.json +1 -1
- package/corpus/dev/contracts/empty-collection-locations.json +1 -1
- package/corpus/dev/contracts/empty-request-shapes.json +1 -1
- package/corpus/dev/contracts/empty-sibling-groups.json +1 -1
- package/corpus/dev/contracts/fragment-selection.json +1 -0
- package/corpus/dev/contracts/no-collection-quantifier.json +1 -1
- package/corpus/dev/contracts/no-operation-inventory.json +1 -1
- package/corpus/dev/contracts/no-read-back-relation.json +1 -1
- package/corpus/dev/contracts/no-state-change-marker.json +1 -1
- package/corpus/dev/contracts/no-type-violating-step.json +1 -1
- package/corpus/dev/contracts/per-key-split-oracles.json +1 -1
- package/corpus/dev/contracts/review-corpus.json +1 -0
- package/corpus/dev/contracts/satisfied-declarations.json +1 -1
- package/corpus/dev/contracts/single-required-response-key.json +1 -1
- package/corpus/dev/contracts/split-indicator-oracle.json +1 -1
- package/corpus/dev/contracts/unaddressed-parameter-sibling.json +1 -1
- package/corpus/dev/contracts/unnamed-reference-set.json +1 -1
- package/corpus/dev/contracts/wrong-cardinality-form.json +1 -1
- package/corpus/dev/index.json +1 -1
- package/dist/cli/render.d.ts +2 -5
- package/dist/cli/render.js +51 -1
- package/dist/core/compile/bindings.d.ts +26 -7
- package/dist/core/compile/bindings.js +49 -32
- package/dist/core/compile/compile.d.ts +12 -0
- package/dist/core/compile/compile.js +28 -1
- package/dist/core/compile/excluded-content.d.ts +11 -0
- package/dist/core/compile/excluded-content.js +42 -0
- package/dist/core/compile/expression-legality.d.ts +2 -2
- package/dist/core/compile/expression-legality.js +58 -12
- package/dist/core/compile/interface-inventory.d.ts +34 -1
- package/dist/core/compile/interface-inventory.js +88 -11
- package/dist/core/compile/reachability.d.ts +12 -2
- package/dist/core/compile/reachability.js +123 -36
- package/dist/core/compile/schema-version.d.ts +2 -0
- package/dist/core/compile/schema-version.js +25 -0
- package/dist/core/compile/sensitivity-witness.d.ts +31 -12
- package/dist/core/compile/sensitivity-witness.js +110 -23
- package/dist/core/compile/step-reference.d.ts +2 -0
- package/dist/core/compile/step-reference.js +49 -0
- package/dist/core/coverage/operations.d.ts +62 -0
- package/dist/core/coverage/operations.js +57 -0
- package/dist/core/coverage/relevance.d.ts +4 -2
- package/dist/core/coverage/relevance.js +22 -23
- package/dist/core/coverage/satisfaction.d.ts +2 -2
- package/dist/core/coverage/satisfaction.js +73 -48
- package/dist/core/declared-inputs.d.ts +83 -4
- package/dist/core/declared-inputs.js +105 -8
- package/dist/core/evaluate/evidence-resolution.d.ts +9 -12
- package/dist/core/evaluate/evidence-resolution.js +70 -10
- package/dist/core/evaluate/operators.d.ts +22 -0
- package/dist/core/evaluate/operators.js +17 -1
- package/dist/core/evaluate/resolution.d.ts +14 -3
- package/dist/core/evaluate/resolution.js +63 -3
- package/dist/core/excluded-content.d.ts +65 -0
- package/dist/core/excluded-content.js +113 -0
- package/dist/core/failure-codes.d.ts +2 -2
- package/dist/core/failure-codes.js +5 -2
- package/dist/core/ingest/conditions.d.ts +1 -1
- package/dist/core/ingest/ingest.js +8 -0
- package/dist/core/preflight/plan.d.ts +7 -5
- package/dist/core/preflight/plan.js +75 -32
- package/dist/core/preflight/projection.d.ts +6 -3
- package/dist/core/preflight/projection.js +22 -2
- package/dist/core/preflight/reduce.js +47 -7
- package/dist/core/preflight/witness-evidence.d.ts +5 -5
- package/dist/core/preflight/witness-evidence.js +63 -20
- package/dist/core/schemas/artifact.d.ts +683 -35
- package/dist/core/schemas/constraint-ledger.js +11 -0
- package/dist/core/schemas/defect-signature.d.ts +438 -16
- package/dist/core/schemas/defect-signature.js +58 -10
- package/dist/core/schemas/eval-contract.d.ts +517 -12
- package/dist/core/schemas/eval-contract.js +18 -2
- package/dist/core/schemas/evidence-artifact.d.ts +14 -4
- package/dist/core/schemas/evidence-artifact.js +1 -1
- package/dist/core/schemas/interface.d.ts +741 -13
- package/dist/core/schemas/interface.js +120 -7
- package/dist/core/schemas/isolation-manifest.js +16 -9
- package/dist/core/schemas/plan.d.ts +217 -3
- package/dist/core/schemas/plan.js +22 -1
- package/dist/core/schemas/pointer.d.ts +47 -1
- package/dist/core/schemas/pointer.js +89 -8
- package/dist/core/schemas/port-messages.d.ts +194 -10
- package/dist/core/schemas/port-messages.js +73 -6
- package/dist/core/schemas/probe-body.d.ts +18 -0
- package/dist/core/schemas/probe-body.js +13 -0
- package/dist/core/schemas/probe.d.ts +122 -3
- package/dist/core/schemas/probe.js +1 -1
- package/dist/core/schemas/sealed-run-record.d.ts +131 -9
- package/dist/core/schemas/sealed-run-record.js +56 -11
- package/dist/core/schemas/sensitivity-witness.d.ts +108 -6
- package/dist/core/schemas/sensitivity-witness.js +61 -5
- package/dist/core/score/bindings.d.ts +2 -2
- package/dist/core/score/bindings.js +25 -13
- package/dist/core/score/qualification.d.ts +5 -5
- package/dist/core/score/qualification.js +67 -37
- package/dist/core/score/quotation.d.ts +1 -24
- package/dist/core/score/quotation.js +29 -4
- package/dist/core/score/score.js +28 -2
- package/dist/core/score/strength.d.ts +9 -0
- package/dist/core/score/strength.js +35 -1
- package/dist/core/score/witness.d.ts +21 -0
- package/dist/core/score/witness.js +9 -4
- package/dist/core/seal/derived-reference.d.ts +2 -9
- package/dist/core/seal/derived-reference.js +62 -23
- package/dist/core/seal/plan-index.d.ts +18 -3
- package/dist/core/seal/plan-index.js +44 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/ports/environment-probe-port.d.ts +60 -4
- package/dist/testing/probe-conformance.d.ts +29 -0
- package/dist/testing/probe-conformance.js +34 -5
- package/package.json +1 -1
- package/schemas/eval-contract.schema.json +1356 -464
- package/schemas/evidence-artifact.schema.json +59 -29
- package/schemas/isolation-manifest.schema.json +17 -10
- package/schemas/probe.schema.json +197 -71
- package/schemas/rubric.schema.json +1 -1
- package/schemas/sealed-run-record.schema.json +296 -39
|
@@ -151,6 +151,19 @@
|
|
|
151
151
|
],
|
|
152
152
|
"description": "AD-23: `baseline` for a pre-canned or deterministic test, `evaluator-chosen` for an action the evaluator selected. The distinction is the one the product's central finding rests on: what a sealed evaluator detects beyond the pre-canned baseline. It lives on the observation, never on the finding."
|
|
153
153
|
},
|
|
154
|
+
"principal": {
|
|
155
|
+
"anyOf": [
|
|
156
|
+
{
|
|
157
|
+
"type": "string",
|
|
158
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
159
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"type": "null"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"description": "The declared principal the harness acted as, or `null` where the run named none. Owed item 3's other half: a `{ principal }` input binding is presence-only by construction, since the contract declares a name and the harness provisions the value, so without this field two steps of one operation binding `owner` and `other-user` both match every observation and both resolve `several`. That is exactly the act-as-A-read-as-B shape the two critical-severity cross-user behaviours need, and it was unscoreable while the record said nothing about which account was used. An opaque label carrying no account identifier or credential, on `testData.principals`' own AD-18 terms."
|
|
166
|
+
},
|
|
154
167
|
"callInputs": {
|
|
155
168
|
"type": "object",
|
|
156
169
|
"properties": {
|
|
@@ -217,13 +230,81 @@
|
|
|
217
230
|
"type": "null"
|
|
218
231
|
}
|
|
219
232
|
]
|
|
233
|
+
},
|
|
234
|
+
"argument": {
|
|
235
|
+
"anyOf": [
|
|
236
|
+
{
|
|
237
|
+
"type": "object",
|
|
238
|
+
"propertyNames": {
|
|
239
|
+
"type": "string"
|
|
240
|
+
},
|
|
241
|
+
"additionalProperties": {
|
|
242
|
+
"$ref": "#/$defs/JsonValue"
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"type": "null"
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
},
|
|
250
|
+
"option": {
|
|
251
|
+
"anyOf": [
|
|
252
|
+
{
|
|
253
|
+
"type": "object",
|
|
254
|
+
"propertyNames": {
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
"additionalProperties": {
|
|
258
|
+
"$ref": "#/$defs/JsonValue"
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"type": "null"
|
|
263
|
+
}
|
|
264
|
+
]
|
|
265
|
+
},
|
|
266
|
+
"environment": {
|
|
267
|
+
"anyOf": [
|
|
268
|
+
{
|
|
269
|
+
"type": "object",
|
|
270
|
+
"propertyNames": {
|
|
271
|
+
"type": "string"
|
|
272
|
+
},
|
|
273
|
+
"additionalProperties": {
|
|
274
|
+
"$ref": "#/$defs/JsonValue"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"type": "null"
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
"stdin": {
|
|
283
|
+
"anyOf": [
|
|
284
|
+
{
|
|
285
|
+
"type": "object",
|
|
286
|
+
"propertyNames": {
|
|
287
|
+
"type": "string"
|
|
288
|
+
},
|
|
289
|
+
"additionalProperties": {
|
|
290
|
+
"$ref": "#/$defs/JsonValue"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"type": "null"
|
|
295
|
+
}
|
|
296
|
+
]
|
|
220
297
|
}
|
|
221
298
|
},
|
|
222
299
|
"required": [
|
|
223
300
|
"path",
|
|
224
301
|
"query",
|
|
225
302
|
"header",
|
|
226
|
-
"body"
|
|
303
|
+
"body",
|
|
304
|
+
"argument",
|
|
305
|
+
"option",
|
|
306
|
+
"environment",
|
|
307
|
+
"stdin"
|
|
227
308
|
],
|
|
228
309
|
"additionalProperties": false
|
|
229
310
|
},
|
|
@@ -269,24 +350,108 @@
|
|
|
269
350
|
"description": "Deliberately not bounded to a protocol range. A negative status is meaningless and excluded, but the upper end is left open: AD-19 declares four interface kinds and v0 rejects three of them at compile time under `unsupported-interface-kind`, so bounding this to HTTP would encode a protocol assumption the artifact outlives. `null` where the channel does not apply."
|
|
270
351
|
},
|
|
271
352
|
"stdout": {
|
|
272
|
-
"
|
|
353
|
+
"oneOf": [
|
|
273
354
|
{
|
|
274
|
-
"type": "
|
|
355
|
+
"type": "object",
|
|
356
|
+
"properties": {
|
|
357
|
+
"kind": {
|
|
358
|
+
"type": "string",
|
|
359
|
+
"const": "json"
|
|
360
|
+
},
|
|
361
|
+
"value": {
|
|
362
|
+
"$ref": "#/$defs/JsonValue"
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"required": [
|
|
366
|
+
"kind",
|
|
367
|
+
"value"
|
|
368
|
+
],
|
|
369
|
+
"additionalProperties": false
|
|
275
370
|
},
|
|
276
371
|
{
|
|
277
|
-
"type": "
|
|
372
|
+
"type": "object",
|
|
373
|
+
"properties": {
|
|
374
|
+
"kind": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"const": "text"
|
|
377
|
+
},
|
|
378
|
+
"value": {
|
|
379
|
+
"type": "string"
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
"required": [
|
|
383
|
+
"kind",
|
|
384
|
+
"value"
|
|
385
|
+
],
|
|
386
|
+
"additionalProperties": false
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"type": "object",
|
|
390
|
+
"properties": {
|
|
391
|
+
"kind": {
|
|
392
|
+
"type": "string",
|
|
393
|
+
"const": "absent"
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
"required": [
|
|
397
|
+
"kind"
|
|
398
|
+
],
|
|
399
|
+
"additionalProperties": false
|
|
278
400
|
}
|
|
279
|
-
]
|
|
401
|
+
],
|
|
402
|
+
"description": "AD-26's `stdout` channel, tagged rather than a bare string. An operation may nominate standard output as the channel its response descriptor describes, in which case a pointer descends into it, and an untagged string could not tell output that was JSON from output that was only ever text. `{ \"kind\": \"absent\" }` is the channel a run did not observe."
|
|
280
403
|
},
|
|
281
404
|
"stderr": {
|
|
282
|
-
"
|
|
405
|
+
"oneOf": [
|
|
283
406
|
{
|
|
284
|
-
"type": "
|
|
407
|
+
"type": "object",
|
|
408
|
+
"properties": {
|
|
409
|
+
"kind": {
|
|
410
|
+
"type": "string",
|
|
411
|
+
"const": "json"
|
|
412
|
+
},
|
|
413
|
+
"value": {
|
|
414
|
+
"$ref": "#/$defs/JsonValue"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"required": [
|
|
418
|
+
"kind",
|
|
419
|
+
"value"
|
|
420
|
+
],
|
|
421
|
+
"additionalProperties": false
|
|
285
422
|
},
|
|
286
423
|
{
|
|
287
|
-
"type": "
|
|
424
|
+
"type": "object",
|
|
425
|
+
"properties": {
|
|
426
|
+
"kind": {
|
|
427
|
+
"type": "string",
|
|
428
|
+
"const": "text"
|
|
429
|
+
},
|
|
430
|
+
"value": {
|
|
431
|
+
"type": "string"
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
"required": [
|
|
435
|
+
"kind",
|
|
436
|
+
"value"
|
|
437
|
+
],
|
|
438
|
+
"additionalProperties": false
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"type": "object",
|
|
442
|
+
"properties": {
|
|
443
|
+
"kind": {
|
|
444
|
+
"type": "string",
|
|
445
|
+
"const": "absent"
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
"required": [
|
|
449
|
+
"kind"
|
|
450
|
+
],
|
|
451
|
+
"additionalProperties": false
|
|
288
452
|
}
|
|
289
|
-
]
|
|
453
|
+
],
|
|
454
|
+
"description": "AD-26's `stderr` channel, tagged on the same terms as `stdout`."
|
|
290
455
|
},
|
|
291
456
|
"exitCode": {
|
|
292
457
|
"anyOf": [
|
|
@@ -300,6 +465,66 @@
|
|
|
300
465
|
}
|
|
301
466
|
],
|
|
302
467
|
"description": "Signed on purpose, unlike `responseStatus`: a process terminated by a signal is conventionally reported as a negative code, and this field records what was observed rather than what is tidy."
|
|
468
|
+
},
|
|
469
|
+
"artifacts": {
|
|
470
|
+
"type": "object",
|
|
471
|
+
"propertyNames": {
|
|
472
|
+
"type": "string",
|
|
473
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
474
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
475
|
+
},
|
|
476
|
+
"additionalProperties": {
|
|
477
|
+
"oneOf": [
|
|
478
|
+
{
|
|
479
|
+
"type": "object",
|
|
480
|
+
"properties": {
|
|
481
|
+
"kind": {
|
|
482
|
+
"type": "string",
|
|
483
|
+
"const": "json"
|
|
484
|
+
},
|
|
485
|
+
"value": {
|
|
486
|
+
"$ref": "#/$defs/JsonValue"
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"required": [
|
|
490
|
+
"kind",
|
|
491
|
+
"value"
|
|
492
|
+
],
|
|
493
|
+
"additionalProperties": false
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"type": "object",
|
|
497
|
+
"properties": {
|
|
498
|
+
"kind": {
|
|
499
|
+
"type": "string",
|
|
500
|
+
"const": "text"
|
|
501
|
+
},
|
|
502
|
+
"value": {
|
|
503
|
+
"type": "string"
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
"required": [
|
|
507
|
+
"kind",
|
|
508
|
+
"value"
|
|
509
|
+
],
|
|
510
|
+
"additionalProperties": false
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
"type": "object",
|
|
514
|
+
"properties": {
|
|
515
|
+
"kind": {
|
|
516
|
+
"type": "string",
|
|
517
|
+
"const": "absent"
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
"required": [
|
|
521
|
+
"kind"
|
|
522
|
+
],
|
|
523
|
+
"additionalProperties": false
|
|
524
|
+
}
|
|
525
|
+
]
|
|
526
|
+
},
|
|
527
|
+
"description": "AD-26's `artifact` channel, keyed by the identifier the operation declares it writes, which is the segment an artifact pointer carries before its tail. Caller-keyed and expected to be partial: a run that wrote no files carries `{}`. Tagged on the same terms as `stdout`, since a written report may be JSON, may be prose, and may not have been written at all."
|
|
303
528
|
}
|
|
304
529
|
},
|
|
305
530
|
"required": [
|
|
@@ -307,13 +532,15 @@
|
|
|
307
532
|
"sequence",
|
|
308
533
|
"operationId",
|
|
309
534
|
"provenance",
|
|
535
|
+
"principal",
|
|
310
536
|
"callInputs",
|
|
311
537
|
"responseBody",
|
|
312
538
|
"responseHeaders",
|
|
313
539
|
"responseStatus",
|
|
314
540
|
"stdout",
|
|
315
541
|
"stderr",
|
|
316
|
-
"exitCode"
|
|
542
|
+
"exitCode",
|
|
543
|
+
"artifacts"
|
|
317
544
|
],
|
|
318
545
|
"additionalProperties": false
|
|
319
546
|
},
|
|
@@ -343,7 +570,7 @@
|
|
|
343
570
|
"type": "null"
|
|
344
571
|
}
|
|
345
572
|
],
|
|
346
|
-
"description": "An integer, because AD-22 puts the scale on the rubric's own anchored levels and `ScaleLevel.level` is already `z.int()`; no second scale is minted here. `null` is the shape AD-6's `judge-error` fires on, so it must parse. That the criterion is one the cited rubric
|
|
573
|
+
"description": "An integer, because AD-22 puts the scale on the rubric's own anchored levels and `ScaleLevel.level` is already `z.int()`; no second scale is minted here. `null` is the shape AD-6's `judge-error` fires on, so it must parse. Two AD-17 rules sit over this field and only one of them is decidable from a record. That a criterion is scored at most once IS: `core/ingest` reports a repeated `rubricId`/`criterionId` pair as a `duplicate-record-identifier` condition, since a criterion scored twice is not one judge call's product whatever else the record says. That a scored criterion is one the cited rubric DECLARES is not, and never will be from inside this package: the rubric is not among ingest's declared inputs, no stage row names it, and a schema over one artifact has no second operand. That half is the caller's, on the same terms AD-12 states for the remediation cap, and it is a stated boundary rather than an unimplemented rule."
|
|
347
574
|
},
|
|
348
575
|
"note": {
|
|
349
576
|
"anyOf": [
|
|
@@ -471,7 +698,7 @@
|
|
|
471
698
|
"invalidReason"
|
|
472
699
|
],
|
|
473
700
|
"additionalProperties": false,
|
|
474
|
-
"description": "One sealed evaluator trial, as the caller presents it. Succeeds the prior-art `h0-run-result` schema per AD-24, keeping its run identifier, condition arm, findings, action-log reference, resource use, invalidation reason, evaluator recommendation as a closed enum, and per-finding confidence on a declared scale. Divergences: `condition` is demoted to the opaque `conditionArm`, `verdict` becomes `evaluatorRecommendation` without `NOT_APPLICABLE`, money is a decimal string, and `taskId`, `note`, and per-finding `actionIds` do not survive: the contract is pinned by `contractDigest`, an unstructured orchestrator annotation is the free-prose channel the Conventions close everywhere else, and two citation vocabularies on one finding is the ambiguity ADR-009 removed. The run MODE landed here as a required field under a BREAKING `schemaVersion` bump, which is where AD-21's \"fixed before ingest\" puts it; owed item 4 is now closed: mode enters AD-11's identity inputs as `ScoringVersionInputs`'s sixth field, and `core/score/ladder.ts` carries `ProductionAssessment`/`ContractAssessment` as the two assessment input types with their own total ladders. Observation ORDERING landed here too, under its own BREAKING `schemaVersion` bump: `sequence` is required and unique per record, closing owed item 2's ADR-006 gap, since array position was never a legal ordering.",
|
|
701
|
+
"description": "One sealed evaluator trial, as the caller presents it. Succeeds the prior-art `h0-run-result` schema per AD-24, keeping its run identifier, condition arm, findings, action-log reference, resource use, invalidation reason, evaluator recommendation as a closed enum, and per-finding confidence on a declared scale. Divergences: `condition` is demoted to the opaque `conditionArm`, `verdict` becomes `evaluatorRecommendation` without `NOT_APPLICABLE`, money is a decimal string, and `taskId`, `note`, and per-finding `actionIds` do not survive: the contract is pinned by `contractDigest`, an unstructured orchestrator annotation is the free-prose channel the Conventions close everywhere else, and two citation vocabularies on one finding is the ambiguity ADR-009 removed. The run MODE landed here as a required field under a BREAKING `schemaVersion` bump, which is where AD-21's \"fixed before ingest\" puts it; owed item 4 is now closed: mode enters AD-11's identity inputs as `ScoringVersionInputs`'s sixth field, and `core/score/ladder.ts` carries `ProductionAssessment`/`ContractAssessment` as the two assessment input types with their own total ladders. Observation ORDERING landed here too, under its own BREAKING `schemaVersion` bump: `sequence` is required and unique per record, closing owed item 2's ADR-006 gap, since array position was never a legal ordering. Version 4 opened the record to a system under test that runs behind a command: `callInputs` carries the four command channels beside the four transport ones, `stdout` and `stderr` are tagged rather than bare strings so a nominated output channel can be descended into, and `artifacts` records the files the run wrote, keyed by the identifier the operation declares.",
|
|
475
702
|
"$defs": {
|
|
476
703
|
"EvaluatorRecommendation": {
|
|
477
704
|
"type": "string",
|
|
@@ -563,22 +790,65 @@
|
|
|
563
790
|
"minItems": 1,
|
|
564
791
|
"type": "array",
|
|
565
792
|
"items": {
|
|
566
|
-
"
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
"
|
|
570
|
-
|
|
571
|
-
|
|
793
|
+
"anyOf": [
|
|
794
|
+
{
|
|
795
|
+
"type": "object",
|
|
796
|
+
"properties": {
|
|
797
|
+
"quote": {
|
|
798
|
+
"type": "string",
|
|
799
|
+
"minLength": 1,
|
|
800
|
+
"description": "The evaluator's verbatim quotation, per AD-23. Non-empty: an empty quotation quotes nothing, no AD-5 code names the condition, and under the admit-rule's second clause the schema is therefore the enforcement point. That this text appears in at least one of the finding's cited observations is NOT checked here; it is an AD-32 declared-versus-observed inconsistency that invalidates at ingest, and ADR-009 Decision 2 settles the precedence: \"cited identifiers govern the witness match; quotation audits it.\""
|
|
801
|
+
},
|
|
802
|
+
"channel": {
|
|
803
|
+
"type": "string",
|
|
804
|
+
"const": "artifact"
|
|
805
|
+
},
|
|
806
|
+
"artifactId": {
|
|
807
|
+
"type": "string",
|
|
808
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
809
|
+
"description": "Which written file the quotation came from. A channel alone does not identify one: an operation may write several, and an audit that searched all of them at once accepted a quotation lifted from a file the finding never cited, which is the opposite of what AD-23's verbatim requirement is for."
|
|
810
|
+
}
|
|
811
|
+
},
|
|
812
|
+
"required": [
|
|
813
|
+
"quote",
|
|
814
|
+
"channel",
|
|
815
|
+
"artifactId"
|
|
816
|
+
],
|
|
817
|
+
"additionalProperties": false
|
|
572
818
|
},
|
|
573
|
-
|
|
574
|
-
"
|
|
819
|
+
{
|
|
820
|
+
"type": "object",
|
|
821
|
+
"properties": {
|
|
822
|
+
"quote": {
|
|
823
|
+
"type": "string",
|
|
824
|
+
"minLength": 1,
|
|
825
|
+
"description": "The evaluator's verbatim quotation, per AD-23. Non-empty: an empty quotation quotes nothing, no AD-5 code names the condition, and under the admit-rule's second clause the schema is therefore the enforcement point. That this text appears in at least one of the finding's cited observations is NOT checked here; it is an AD-32 declared-versus-observed inconsistency that invalidates at ingest, and ADR-009 Decision 2 settles the precedence: \"cited identifiers govern the witness match; quotation audits it.\""
|
|
826
|
+
},
|
|
827
|
+
"channel": {
|
|
828
|
+
"type": "string",
|
|
829
|
+
"enum": [
|
|
830
|
+
"response-body",
|
|
831
|
+
"response-headers",
|
|
832
|
+
"response-status",
|
|
833
|
+
"call-inputs",
|
|
834
|
+
"stdout",
|
|
835
|
+
"stderr",
|
|
836
|
+
"exit-code"
|
|
837
|
+
]
|
|
838
|
+
},
|
|
839
|
+
"artifactId": {
|
|
840
|
+
"type": "null",
|
|
841
|
+
"description": "Null on every channel but `artifact`, and required rather than optional so a record cannot omit the question. Only a written file needs naming; every other channel is one thing per observation."
|
|
842
|
+
}
|
|
843
|
+
},
|
|
844
|
+
"required": [
|
|
845
|
+
"quote",
|
|
846
|
+
"channel",
|
|
847
|
+
"artifactId"
|
|
848
|
+
],
|
|
849
|
+
"additionalProperties": false
|
|
575
850
|
}
|
|
576
|
-
|
|
577
|
-
"required": [
|
|
578
|
-
"quote",
|
|
579
|
-
"channel"
|
|
580
|
-
],
|
|
581
|
-
"additionalProperties": false
|
|
851
|
+
]
|
|
582
852
|
},
|
|
583
853
|
"description": "Required and non-empty on this branch alone, per AD-23. Only `defect` findings enter a detection measure, and a detection claim with no quotation is the shape AD-40 records revision 4 having no way to match."
|
|
584
854
|
}
|
|
@@ -843,19 +1113,6 @@
|
|
|
843
1113
|
],
|
|
844
1114
|
"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."
|
|
845
1115
|
},
|
|
846
|
-
"EvidenceChannel": {
|
|
847
|
-
"type": "string",
|
|
848
|
-
"enum": [
|
|
849
|
-
"response-body",
|
|
850
|
-
"response-headers",
|
|
851
|
-
"response-status",
|
|
852
|
-
"call-inputs",
|
|
853
|
-
"stdout",
|
|
854
|
-
"stderr",
|
|
855
|
-
"exit-code"
|
|
856
|
-
],
|
|
857
|
-
"description": "AD-26's closed evidence channel vocabulary. The same seven the interaction-rooted pointer addresses; a channel outside this set is a syntax error rather than an unreachable-evidence finding."
|
|
858
|
-
},
|
|
859
1116
|
"JsonValue": {
|
|
860
1117
|
"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.",
|
|
861
1118
|
"anyOf": [
|