eval-quality 1.4.2 → 3.0.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 +6 -6
- package/corpus/dev/README.md +24 -13
- 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/captured-read-back.json +1 -0
- package/corpus/dev/contracts/checklist-selection.json +1 -0
- 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 -1
- 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/notes-tool-server.json +1 -0
- package/corpus/dev/contracts/per-key-split-oracles.json +1 -1
- package/corpus/dev/contracts/review-corpus.json +1 -1
- 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/adapters/command-line-adapter.js +44 -6
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +1 -0
- package/dist/adapters/mcp-adapter.d.ts +32 -0
- package/dist/adapters/mcp-adapter.js +357 -0
- package/dist/adapters/mcp-target-policy.d.ts +39 -0
- package/dist/adapters/mcp-target-policy.js +30 -0
- package/dist/cli/render.d.ts +8 -3
- package/dist/cli/render.js +13 -6
- package/dist/cli/run.js +2 -1
- package/dist/core/compile/bindings.d.ts +8 -18
- package/dist/core/compile/bindings.js +13 -10
- package/dist/core/compile/compile.js +6 -1
- package/dist/core/compile/interface-inventory.d.ts +81 -3
- package/dist/core/compile/interface-inventory.js +134 -23
- package/dist/core/compile/reachability.d.ts +73 -1
- package/dist/core/compile/reachability.js +134 -19
- package/dist/core/compile/schema-version.d.ts +15 -2
- package/dist/core/compile/schema-version.js +11 -3
- package/dist/core/compile/sensitivity-witness.d.ts +22 -10
- package/dist/core/compile/sensitivity-witness.js +101 -13
- package/dist/core/coverage/operations.d.ts +1 -1
- package/dist/core/coverage/operations.js +1 -1
- package/dist/core/coverage/relevance.d.ts +3 -3
- package/dist/core/coverage/relevance.js +3 -3
- package/dist/core/declared-inputs.d.ts +21 -9
- package/dist/core/declared-inputs.js +51 -16
- package/dist/core/evaluate/evidence-resolution.d.ts +8 -7
- package/dist/core/evaluate/evidence-resolution.js +25 -18
- package/dist/core/preflight/plan.js +43 -6
- package/dist/core/preflight/projection.d.ts +10 -1
- package/dist/core/preflight/projection.js +9 -5
- package/dist/core/preflight/reduce.js +6 -2
- package/dist/core/preflight/witness-evidence.js +31 -9
- package/dist/core/schemas/artifact.d.ts +145 -49
- package/dist/core/schemas/defect-signature.d.ts +280 -23
- package/dist/core/schemas/defect-signature.js +65 -37
- package/dist/core/schemas/eval-contract.d.ts +33 -48
- package/dist/core/schemas/eval-contract.js +3 -3
- package/dist/core/schemas/interface.d.ts +193 -55
- package/dist/core/schemas/interface.js +82 -15
- package/dist/core/schemas/plan.d.ts +45 -1
- package/dist/core/schemas/plan.js +13 -2
- package/dist/core/schemas/pointer.d.ts +23 -9
- package/dist/core/schemas/pointer.js +25 -11
- package/dist/core/schemas/port-messages.d.ts +81 -0
- package/dist/core/schemas/port-messages.js +50 -3
- package/dist/core/schemas/primitives.d.ts +18 -0
- package/dist/core/schemas/primitives.js +29 -0
- package/dist/core/schemas/probe-policy.d.ts +41 -0
- package/dist/core/schemas/probe-policy.js +61 -1
- package/dist/core/schemas/probe.d.ts +156 -2
- package/dist/core/schemas/probe.js +45 -2
- package/dist/core/schemas/sealed-run-record.d.ts +11 -5
- package/dist/core/schemas/sealed-run-record.js +21 -9
- package/dist/core/schemas/sensitivity-witness.d.ts +31 -7
- package/dist/core/schemas/sensitivity-witness.js +32 -9
- package/dist/core/score/bindings.d.ts +1 -1
- package/dist/core/score/bindings.js +4 -4
- package/dist/core/score/qualification.d.ts +7 -5
- package/dist/core/score/qualification.js +92 -23
- package/dist/core/score/score.d.ts +1 -1
- package/dist/core/score/score.js +24 -1
- package/dist/core/seal/derived-reference.js +20 -17
- package/dist/core/seal/plan-index.d.ts +18 -9
- package/dist/core/seal/plan-index.js +79 -37
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/ports/environment-probe-port.d.ts +50 -17
- package/dist/ports/environment-probe-port.js +26 -17
- package/dist/testing/conformance.d.ts +3 -2
- package/dist/testing/conformance.js +2 -1
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +1 -1
- package/dist/testing/probe-conformance.d.ts +90 -13
- package/dist/testing/probe-conformance.js +375 -160
- package/package.json +4 -2
- package/schemas/eval-contract.schema.json +571 -18
- package/schemas/probe.schema.json +152 -12
- package/schemas/rubric.schema.json +1 -1
- package/schemas/sealed-run-record.schema.json +24 -17
|
@@ -161,8 +161,8 @@
|
|
|
161
161
|
"type": "array",
|
|
162
162
|
"items": {
|
|
163
163
|
"type": "string",
|
|
164
|
-
"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|argument|option|environment|stdin)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
165
|
-
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels
|
|
164
|
+
"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|argument|option|environment|stdin|arguments)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
165
|
+
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels, one of the four command channels, or the `arguments` channel a tool call accepts; `artifact` takes the identifier of a file the operation declares it writes; `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."
|
|
166
166
|
},
|
|
167
167
|
"description": "Interaction-rooted pointers only. AD-3 computes containment after quantifier substitution, so a target is always fully rooted and the bound-element spelling never appears here."
|
|
168
168
|
},
|
|
@@ -380,7 +380,7 @@
|
|
|
380
380
|
"items": {
|
|
381
381
|
"$ref": "#/$defs/Operation"
|
|
382
382
|
},
|
|
383
|
-
"description": "No uniqueness constraint: two operations colliding on their transport identity
|
|
383
|
+
"description": "No uniqueness constraint: two operations colliding on their transport identity is `duplicate-operation-signature`, a coded compile-time error, and a schema that deduped them would delete it. What that identity is depends on the kind, and `compile/interface-inventory.ts` is what computes it."
|
|
384
384
|
}
|
|
385
385
|
},
|
|
386
386
|
"required": [
|
|
@@ -407,7 +407,7 @@
|
|
|
407
407
|
"items": {
|
|
408
408
|
"$ref": "#/$defs/Operation"
|
|
409
409
|
},
|
|
410
|
-
"description": "No uniqueness constraint: two operations colliding on their transport identity
|
|
410
|
+
"description": "No uniqueness constraint: two operations colliding on their transport identity is `duplicate-operation-signature`, a coded compile-time error, and a schema that deduped them would delete it. What that identity is depends on the kind, and `compile/interface-inventory.ts` is what computes it."
|
|
411
411
|
}
|
|
412
412
|
},
|
|
413
413
|
"required": [
|
|
@@ -432,9 +432,494 @@
|
|
|
432
432
|
"operations": {
|
|
433
433
|
"type": "array",
|
|
434
434
|
"items": {
|
|
435
|
-
"
|
|
435
|
+
"type": "object",
|
|
436
|
+
"properties": {
|
|
437
|
+
"operationId": {
|
|
438
|
+
"type": "string",
|
|
439
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
440
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
441
|
+
},
|
|
442
|
+
"toolName": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"pattern": "^[A-Za-z0-9_-]+$",
|
|
445
|
+
"description": "The name the MCP server publishes for one tool, in the server's own spelling. AD-35: a logical identifier, never a URL, host, or port. The charset admits no \"/\", \":\", or \".\", so an address is unrepresentable rather than refused by a later check, and it excludes \"~\" so a tool name can be embedded in a pointer without escaping."
|
|
446
|
+
},
|
|
447
|
+
"stateChangeMarker": {
|
|
448
|
+
"type": "boolean",
|
|
449
|
+
"description": "AD-19: whether the operation is intended to change state. AD-20 rule 7 relevance reads it, and AD-10 selects the sensitivity channel by it. Both values are legal and neither is a default."
|
|
450
|
+
},
|
|
451
|
+
"requestShape": {
|
|
452
|
+
"type": "object",
|
|
453
|
+
"properties": {
|
|
454
|
+
"arguments": {
|
|
455
|
+
"type": "object",
|
|
456
|
+
"properties": {
|
|
457
|
+
"requiredKeys": {
|
|
458
|
+
"type": "array",
|
|
459
|
+
"items": {
|
|
460
|
+
"type": "string",
|
|
461
|
+
"minLength": 1
|
|
462
|
+
}
|
|
463
|
+
},
|
|
464
|
+
"permittedKeys": {
|
|
465
|
+
"type": "array",
|
|
466
|
+
"items": {
|
|
467
|
+
"type": "string",
|
|
468
|
+
"minLength": 1
|
|
469
|
+
},
|
|
470
|
+
"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."
|
|
471
|
+
},
|
|
472
|
+
"types": {
|
|
473
|
+
"type": "object",
|
|
474
|
+
"propertyNames": {
|
|
475
|
+
"type": "string",
|
|
476
|
+
"minLength": 1
|
|
477
|
+
},
|
|
478
|
+
"additionalProperties": {
|
|
479
|
+
"anyOf": [
|
|
480
|
+
{
|
|
481
|
+
"type": "string",
|
|
482
|
+
"enum": [
|
|
483
|
+
"string",
|
|
484
|
+
"number",
|
|
485
|
+
"boolean",
|
|
486
|
+
"object",
|
|
487
|
+
"array",
|
|
488
|
+
"null"
|
|
489
|
+
]
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"type": "null"
|
|
493
|
+
}
|
|
494
|
+
]
|
|
495
|
+
},
|
|
496
|
+
"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\"."
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
"required": [
|
|
500
|
+
"requiredKeys",
|
|
501
|
+
"permittedKeys",
|
|
502
|
+
"types"
|
|
503
|
+
],
|
|
504
|
+
"additionalProperties": false,
|
|
505
|
+
"description": "The tool's declared arguments, keyed by the names the server publishes for them. AD-18 applies as it does to a header: a declaration names an argument and its type and never carries a credential value."
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
"required": [
|
|
509
|
+
"arguments"
|
|
510
|
+
],
|
|
511
|
+
"additionalProperties": false
|
|
512
|
+
},
|
|
513
|
+
"descriptorChannel": {
|
|
514
|
+
"oneOf": [
|
|
515
|
+
{
|
|
516
|
+
"type": "object",
|
|
517
|
+
"properties": {
|
|
518
|
+
"kind": {
|
|
519
|
+
"type": "string",
|
|
520
|
+
"const": "structured-result"
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
"required": [
|
|
524
|
+
"kind"
|
|
525
|
+
],
|
|
526
|
+
"additionalProperties": false
|
|
527
|
+
}
|
|
528
|
+
]
|
|
529
|
+
},
|
|
530
|
+
"responseDescriptor": {
|
|
531
|
+
"type": "object",
|
|
532
|
+
"properties": {
|
|
533
|
+
"requiredKeys": {
|
|
534
|
+
"type": "array",
|
|
535
|
+
"items": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"minLength": 1
|
|
538
|
+
},
|
|
539
|
+
"description": "No minimum of two anywhere in this shape: AD-20 rule 2 relevance is \"the descriptor declares more than one pointer\", so a one-pointer descriptor must parse in order to be the irrelevant case."
|
|
540
|
+
},
|
|
541
|
+
"permittedKeys": {
|
|
542
|
+
"type": "array",
|
|
543
|
+
"items": {
|
|
544
|
+
"type": "string",
|
|
545
|
+
"minLength": 1
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
"types": {
|
|
549
|
+
"type": "object",
|
|
550
|
+
"propertyNames": {
|
|
551
|
+
"type": "string",
|
|
552
|
+
"minLength": 1
|
|
553
|
+
},
|
|
554
|
+
"additionalProperties": {
|
|
555
|
+
"anyOf": [
|
|
556
|
+
{
|
|
557
|
+
"type": "string",
|
|
558
|
+
"enum": [
|
|
559
|
+
"string",
|
|
560
|
+
"number",
|
|
561
|
+
"boolean",
|
|
562
|
+
"object",
|
|
563
|
+
"array",
|
|
564
|
+
"null"
|
|
565
|
+
]
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"type": "null"
|
|
569
|
+
}
|
|
570
|
+
]
|
|
571
|
+
},
|
|
572
|
+
"description": "Caller-keyed by plain key name, never by pointer: this is the shape where that trap bites, since `requiredKeys` sits beside a pointer-keyed `channelRoles` and a pointer-valued `successIndicator`, and the descriptor-relative spelling must not be extended here by analogy. A missing key means \"not declared\"; an explicit `null` value means \"declared, type not stated\", which is AD-31's enumerated indeterminate descriptor state and the shape `quantifier-over-non-collection` reads."
|
|
573
|
+
},
|
|
574
|
+
"successIndicator": {
|
|
575
|
+
"anyOf": [
|
|
576
|
+
{
|
|
577
|
+
"type": "string",
|
|
578
|
+
"pattern": "^(?:\\/(?:[^/~]|~[01])*)*$",
|
|
579
|
+
"description": "A plain RFC 6901 pointer into one operation's response descriptor. It resolves through the operation an interaction step names, never through the interaction root. A request or response shape's descriptor keys are plain key names rather than pointers, so this spelling does not apply there. The empty string is admitted and carries RFC 6901's own meaning, the whole document: as a nominated success indicator it says success is visible in the response taken as a whole rather than at any one key, and as a channel-role key it assigns a role to the whole body."
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"type": "null"
|
|
583
|
+
}
|
|
584
|
+
],
|
|
585
|
+
"description": "AD-20 rule 1 relevance reads this as its first conjunct, so `null` must stay representable."
|
|
586
|
+
},
|
|
587
|
+
"channelRoles": {
|
|
588
|
+
"anyOf": [
|
|
589
|
+
{
|
|
590
|
+
"type": "object",
|
|
591
|
+
"propertyNames": {
|
|
592
|
+
"type": "string",
|
|
593
|
+
"pattern": "^(?:\\/(?:[^/~]|~[01])*)*$",
|
|
594
|
+
"description": "A plain RFC 6901 pointer into one operation's response descriptor. It resolves through the operation an interaction step names, never through the interaction root. A request or response shape's descriptor keys are plain key names rather than pointers, so this spelling does not apply there. The empty string is admitted and carries RFC 6901's own meaning, the whole document: as a nominated success indicator it says success is visible in the response taken as a whole rather than at any one key, and as a channel-role key it assigns a role to the whole body."
|
|
595
|
+
},
|
|
596
|
+
"additionalProperties": {
|
|
597
|
+
"type": "string",
|
|
598
|
+
"enum": [
|
|
599
|
+
"success-indicator",
|
|
600
|
+
"diagnostic",
|
|
601
|
+
"payload",
|
|
602
|
+
"collection"
|
|
603
|
+
]
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"type": "null"
|
|
608
|
+
}
|
|
609
|
+
],
|
|
610
|
+
"description": "Caller-keyed, and expected to be partial: a missing key means \"no role declared for that pointer\". AD-31 grades absent and explicitly empty differently, so `null`, `{}`, and a populated map are three distinct answers. Deliberately not refined to require a role for every descriptor key: no AD-5 code names that rule, the AD-31 predicates degrade gracefully on partial roles, and a refinement buys nothing an export can carry."
|
|
611
|
+
},
|
|
612
|
+
"collectionLocations": {
|
|
613
|
+
"anyOf": [
|
|
614
|
+
{
|
|
615
|
+
"type": "array",
|
|
616
|
+
"items": {
|
|
617
|
+
"type": "object",
|
|
618
|
+
"properties": {
|
|
619
|
+
"pointer": {
|
|
620
|
+
"type": "string",
|
|
621
|
+
"pattern": "^(?:\\/(?:[^/~]|~[01])*)*$",
|
|
622
|
+
"description": "A plain RFC 6901 pointer into one operation's response descriptor. It resolves through the operation an interaction step names, never through the interaction root. A request or response shape's descriptor keys are plain key names rather than pointers, so this spelling does not apply there. The empty string is admitted and carries RFC 6901's own meaning, the whole document: as a nominated success indicator it says success is visible in the response taken as a whole rather than at any one key, and as a channel-role key it assigns a role to the whole body."
|
|
623
|
+
},
|
|
624
|
+
"expectedCardinality": {
|
|
625
|
+
"oneOf": [
|
|
626
|
+
{
|
|
627
|
+
"type": "object",
|
|
628
|
+
"properties": {
|
|
629
|
+
"mode": {
|
|
630
|
+
"type": "string",
|
|
631
|
+
"const": "exact"
|
|
632
|
+
},
|
|
633
|
+
"count": {
|
|
634
|
+
"type": "integer",
|
|
635
|
+
"minimum": 0,
|
|
636
|
+
"maximum": 9007199254740991
|
|
637
|
+
}
|
|
638
|
+
},
|
|
639
|
+
"required": [
|
|
640
|
+
"mode",
|
|
641
|
+
"count"
|
|
642
|
+
],
|
|
643
|
+
"additionalProperties": false
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
"type": "object",
|
|
647
|
+
"properties": {
|
|
648
|
+
"mode": {
|
|
649
|
+
"type": "string",
|
|
650
|
+
"const": "at-most"
|
|
651
|
+
},
|
|
652
|
+
"max": {
|
|
653
|
+
"type": "integer",
|
|
654
|
+
"minimum": 0,
|
|
655
|
+
"maximum": 9007199254740991
|
|
656
|
+
}
|
|
657
|
+
},
|
|
658
|
+
"required": [
|
|
659
|
+
"mode",
|
|
660
|
+
"max"
|
|
661
|
+
],
|
|
662
|
+
"additionalProperties": false
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
"type": "object",
|
|
666
|
+
"properties": {
|
|
667
|
+
"mode": {
|
|
668
|
+
"type": "string",
|
|
669
|
+
"const": "page-bounded"
|
|
670
|
+
},
|
|
671
|
+
"max": {
|
|
672
|
+
"type": "integer",
|
|
673
|
+
"minimum": 0,
|
|
674
|
+
"maximum": 9007199254740991
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
"required": [
|
|
678
|
+
"mode",
|
|
679
|
+
"max"
|
|
680
|
+
],
|
|
681
|
+
"additionalProperties": false
|
|
682
|
+
}
|
|
683
|
+
]
|
|
684
|
+
},
|
|
685
|
+
"referenceSet": {
|
|
686
|
+
"anyOf": [
|
|
687
|
+
{
|
|
688
|
+
"type": "string",
|
|
689
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
690
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
"type": "null"
|
|
694
|
+
}
|
|
695
|
+
],
|
|
696
|
+
"description": "AD-20 rule 6 is relevant when a declared collection location names a reference set, so `null` is the shape that makes the rule irrelevant and must stay representable."
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"required": [
|
|
700
|
+
"pointer",
|
|
701
|
+
"expectedCardinality",
|
|
702
|
+
"referenceSet"
|
|
703
|
+
],
|
|
704
|
+
"additionalProperties": false
|
|
705
|
+
}
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"type": "null"
|
|
709
|
+
}
|
|
710
|
+
],
|
|
711
|
+
"description": "AD-20 rule 4 relevance reads this, and AD-31 grades an absent declaration and an explicit empty one differently, so `null` and `[]` are distinct answers."
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
"required": [
|
|
715
|
+
"requiredKeys",
|
|
716
|
+
"permittedKeys",
|
|
717
|
+
"types",
|
|
718
|
+
"successIndicator",
|
|
719
|
+
"channelRoles",
|
|
720
|
+
"collectionLocations"
|
|
721
|
+
],
|
|
722
|
+
"additionalProperties": false
|
|
723
|
+
},
|
|
724
|
+
"volatilePointers": {
|
|
725
|
+
"type": "array",
|
|
726
|
+
"items": {
|
|
727
|
+
"type": "string",
|
|
728
|
+
"pattern": "^(?:\\/(?:[^/~]|~[01])*)*$",
|
|
729
|
+
"description": "A plain RFC 6901 pointer into one operation's response descriptor. It resolves through the operation an interaction step names, never through the interaction root. A request or response shape's descriptor keys are plain key names rather than pointers, so this spelling does not apply there. The empty string is admitted and carries RFC 6901's own meaning, the whole document: as a nominated success indicator it says success is visible in the response taken as a whole rather than at any one key, and as a channel-role key it assigns a role to the whole body."
|
|
730
|
+
}
|
|
731
|
+
},
|
|
732
|
+
"sensitivityWitness": {
|
|
733
|
+
"anyOf": [
|
|
734
|
+
{
|
|
735
|
+
"type": "object",
|
|
736
|
+
"properties": {
|
|
737
|
+
"witnessId": {
|
|
738
|
+
"type": "string",
|
|
739
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
740
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
741
|
+
},
|
|
742
|
+
"channel": {
|
|
743
|
+
"type": "string",
|
|
744
|
+
"enum": [
|
|
745
|
+
"path",
|
|
746
|
+
"query",
|
|
747
|
+
"body",
|
|
748
|
+
"argument",
|
|
749
|
+
"option",
|
|
750
|
+
"environment",
|
|
751
|
+
"stdin",
|
|
752
|
+
"arguments"
|
|
753
|
+
]
|
|
754
|
+
},
|
|
755
|
+
"legs": {
|
|
756
|
+
"minItems": 2,
|
|
757
|
+
"maxItems": 2,
|
|
758
|
+
"type": "array",
|
|
759
|
+
"items": {
|
|
760
|
+
"type": "object",
|
|
761
|
+
"properties": {
|
|
762
|
+
"legId": {
|
|
763
|
+
"type": "string",
|
|
764
|
+
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
|
|
765
|
+
"description": "A kebab-case slug. Excludes \"/\" and \"~\" so an identifier can be embedded in an interaction-rooted pointer without escaping."
|
|
766
|
+
},
|
|
767
|
+
"inputs": {
|
|
768
|
+
"anyOf": [
|
|
769
|
+
{
|
|
770
|
+
"$ref": "#/$defs/WitnessInputs"
|
|
771
|
+
},
|
|
772
|
+
{
|
|
773
|
+
"type": "object",
|
|
774
|
+
"properties": {
|
|
775
|
+
"argument": {
|
|
776
|
+
"type": "object",
|
|
777
|
+
"propertyNames": {
|
|
778
|
+
"type": "string"
|
|
779
|
+
},
|
|
780
|
+
"additionalProperties": {
|
|
781
|
+
"$ref": "#/$defs/JsonValue"
|
|
782
|
+
}
|
|
783
|
+
},
|
|
784
|
+
"option": {
|
|
785
|
+
"type": "object",
|
|
786
|
+
"propertyNames": {
|
|
787
|
+
"type": "string"
|
|
788
|
+
},
|
|
789
|
+
"additionalProperties": {
|
|
790
|
+
"$ref": "#/$defs/JsonValue"
|
|
791
|
+
}
|
|
792
|
+
},
|
|
793
|
+
"environment": {
|
|
794
|
+
"type": "object",
|
|
795
|
+
"propertyNames": {
|
|
796
|
+
"type": "string",
|
|
797
|
+
"minLength": 1
|
|
798
|
+
},
|
|
799
|
+
"additionalProperties": {
|
|
800
|
+
"type": "string"
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
"stdin": {
|
|
804
|
+
"oneOf": [
|
|
805
|
+
{
|
|
806
|
+
"type": "object",
|
|
807
|
+
"properties": {
|
|
808
|
+
"kind": {
|
|
809
|
+
"type": "string",
|
|
810
|
+
"const": "json"
|
|
811
|
+
},
|
|
812
|
+
"value": {
|
|
813
|
+
"$ref": "#/$defs/JsonValue"
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"required": [
|
|
817
|
+
"kind",
|
|
818
|
+
"value"
|
|
819
|
+
],
|
|
820
|
+
"additionalProperties": false
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"type": "object",
|
|
824
|
+
"properties": {
|
|
825
|
+
"kind": {
|
|
826
|
+
"type": "string",
|
|
827
|
+
"const": "text"
|
|
828
|
+
},
|
|
829
|
+
"value": {
|
|
830
|
+
"type": "string"
|
|
831
|
+
}
|
|
832
|
+
},
|
|
833
|
+
"required": [
|
|
834
|
+
"kind",
|
|
835
|
+
"value"
|
|
836
|
+
],
|
|
837
|
+
"additionalProperties": false
|
|
838
|
+
},
|
|
839
|
+
{
|
|
840
|
+
"type": "object",
|
|
841
|
+
"properties": {
|
|
842
|
+
"kind": {
|
|
843
|
+
"type": "string",
|
|
844
|
+
"const": "absent"
|
|
845
|
+
}
|
|
846
|
+
},
|
|
847
|
+
"required": [
|
|
848
|
+
"kind"
|
|
849
|
+
],
|
|
850
|
+
"additionalProperties": false
|
|
851
|
+
}
|
|
852
|
+
]
|
|
853
|
+
}
|
|
854
|
+
},
|
|
855
|
+
"required": [
|
|
856
|
+
"argument",
|
|
857
|
+
"option",
|
|
858
|
+
"environment",
|
|
859
|
+
"stdin"
|
|
860
|
+
],
|
|
861
|
+
"additionalProperties": false
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
"type": "object",
|
|
865
|
+
"properties": {
|
|
866
|
+
"arguments": {
|
|
867
|
+
"type": "object",
|
|
868
|
+
"propertyNames": {
|
|
869
|
+
"type": "string"
|
|
870
|
+
},
|
|
871
|
+
"additionalProperties": {
|
|
872
|
+
"$ref": "#/$defs/JsonValue"
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
},
|
|
876
|
+
"required": [
|
|
877
|
+
"arguments"
|
|
878
|
+
],
|
|
879
|
+
"additionalProperties": false
|
|
880
|
+
}
|
|
881
|
+
]
|
|
882
|
+
}
|
|
883
|
+
},
|
|
884
|
+
"required": [
|
|
885
|
+
"legId",
|
|
886
|
+
"inputs"
|
|
887
|
+
],
|
|
888
|
+
"additionalProperties": false
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
"relation": {
|
|
892
|
+
"$ref": "#/$defs/Expression"
|
|
893
|
+
}
|
|
894
|
+
},
|
|
895
|
+
"required": [
|
|
896
|
+
"witnessId",
|
|
897
|
+
"channel",
|
|
898
|
+
"legs",
|
|
899
|
+
"relation"
|
|
900
|
+
],
|
|
901
|
+
"additionalProperties": false
|
|
902
|
+
},
|
|
903
|
+
{
|
|
904
|
+
"type": "null"
|
|
905
|
+
}
|
|
906
|
+
],
|
|
907
|
+
"description": "AD-10, mandatory per declared operation rather than per interface, on the api operation's own terms. `null` is legal only for an operation declaring no keys in its arguments channel. An input-bearing operation declaring `null` fails a strict compilation under `undeclared-mandatory-input`."
|
|
908
|
+
}
|
|
909
|
+
},
|
|
910
|
+
"required": [
|
|
911
|
+
"operationId",
|
|
912
|
+
"toolName",
|
|
913
|
+
"stateChangeMarker",
|
|
914
|
+
"requestShape",
|
|
915
|
+
"descriptorChannel",
|
|
916
|
+
"responseDescriptor",
|
|
917
|
+
"volatilePointers",
|
|
918
|
+
"sensitivityWitness"
|
|
919
|
+
],
|
|
920
|
+
"additionalProperties": false
|
|
436
921
|
},
|
|
437
|
-
"description": "No uniqueness constraint: two operations colliding on their transport identity
|
|
922
|
+
"description": "No uniqueness constraint: two operations colliding on their transport identity is `duplicate-operation-signature`, a coded compile-time error, and a schema that deduped them would delete it. What that identity is depends on the kind, and `compile/interface-inventory.ts` is what computes it."
|
|
438
923
|
}
|
|
439
924
|
},
|
|
440
925
|
"required": [
|
|
@@ -990,7 +1475,8 @@
|
|
|
990
1475
|
"argument",
|
|
991
1476
|
"option",
|
|
992
1477
|
"environment",
|
|
993
|
-
"stdin"
|
|
1478
|
+
"stdin",
|
|
1479
|
+
"arguments"
|
|
994
1480
|
]
|
|
995
1481
|
},
|
|
996
1482
|
"legs": {
|
|
@@ -1100,6 +1586,24 @@
|
|
|
1100
1586
|
"stdin"
|
|
1101
1587
|
],
|
|
1102
1588
|
"additionalProperties": false
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
"type": "object",
|
|
1592
|
+
"properties": {
|
|
1593
|
+
"arguments": {
|
|
1594
|
+
"type": "object",
|
|
1595
|
+
"propertyNames": {
|
|
1596
|
+
"type": "string"
|
|
1597
|
+
},
|
|
1598
|
+
"additionalProperties": {
|
|
1599
|
+
"$ref": "#/$defs/JsonValue"
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
},
|
|
1603
|
+
"required": [
|
|
1604
|
+
"arguments"
|
|
1605
|
+
],
|
|
1606
|
+
"additionalProperties": false
|
|
1103
1607
|
}
|
|
1104
1608
|
]
|
|
1105
1609
|
}
|
|
@@ -1143,7 +1647,7 @@
|
|
|
1143
1647
|
],
|
|
1144
1648
|
"additionalProperties": false
|
|
1145
1649
|
},
|
|
1146
|
-
"description": "No uniqueness constraint: two operations colliding on their transport identity
|
|
1650
|
+
"description": "No uniqueness constraint: two operations colliding on their transport identity is `duplicate-operation-signature`, a coded compile-time error, and a schema that deduped them would delete it. What that identity is depends on the kind, and `compile/interface-inventory.ts` is what computes it."
|
|
1147
1651
|
}
|
|
1148
1652
|
},
|
|
1149
1653
|
"required": [
|
|
@@ -1155,7 +1659,7 @@
|
|
|
1155
1659
|
}
|
|
1156
1660
|
]
|
|
1157
1661
|
},
|
|
1158
|
-
"description": "AD-35: logical identifiers only. No entry here is ever a URL, a host, or a port. Discriminated on `kind`,
|
|
1662
|
+
"description": "AD-35: logical identifiers only. No entry here is ever a URL, a host, or a port. Discriminated on `kind`, and the field AD-11 puts this artifact's bump record on, whose rule is that \"adding an optional field is a `schemaVersion` bump recorded in the field's own description; removing or retyping is breaking\". Version 4 added the `cli` branch, carrying a command operation: a logical invocation in place of a method and a path template, four command input channels, a nominated output channel for its one response descriptor, and the files it writes. Version 5 is the `schemaVersion` 4 -> 5 BREAKING bump: the `mcp` branch stops carrying the HTTP operation shape and carries a tool call instead, declaring a published tool name as its whole transport identity, one `arguments` request channel, and a tagged descriptor channel over the structured result. An `mcp` interface written against version 4 no longer parses. `api`, `web`, and `cli` keep every byte they had."
|
|
1159
1663
|
},
|
|
1160
1664
|
"referenceSets": {
|
|
1161
1665
|
"anyOf": [
|
|
@@ -1322,6 +1826,18 @@
|
|
|
1322
1826
|
"stdin"
|
|
1323
1827
|
],
|
|
1324
1828
|
"additionalProperties": false
|
|
1829
|
+
},
|
|
1830
|
+
{
|
|
1831
|
+
"type": "object",
|
|
1832
|
+
"properties": {
|
|
1833
|
+
"arguments": {
|
|
1834
|
+
"$ref": "#/$defs/InputBindingChannel"
|
|
1835
|
+
}
|
|
1836
|
+
},
|
|
1837
|
+
"required": [
|
|
1838
|
+
"arguments"
|
|
1839
|
+
],
|
|
1840
|
+
"additionalProperties": false
|
|
1325
1841
|
}
|
|
1326
1842
|
]
|
|
1327
1843
|
},
|
|
@@ -1660,6 +2176,24 @@
|
|
|
1660
2176
|
"stdin"
|
|
1661
2177
|
],
|
|
1662
2178
|
"additionalProperties": false
|
|
2179
|
+
},
|
|
2180
|
+
{
|
|
2181
|
+
"type": "object",
|
|
2182
|
+
"properties": {
|
|
2183
|
+
"arguments": {
|
|
2184
|
+
"type": "object",
|
|
2185
|
+
"propertyNames": {
|
|
2186
|
+
"type": "string"
|
|
2187
|
+
},
|
|
2188
|
+
"additionalProperties": {
|
|
2189
|
+
"$ref": "#/$defs/JsonValue"
|
|
2190
|
+
}
|
|
2191
|
+
}
|
|
2192
|
+
},
|
|
2193
|
+
"required": [
|
|
2194
|
+
"arguments"
|
|
2195
|
+
],
|
|
2196
|
+
"additionalProperties": false
|
|
1663
2197
|
}
|
|
1664
2198
|
]
|
|
1665
2199
|
}
|
|
@@ -1703,7 +2237,7 @@
|
|
|
1703
2237
|
"fixtureReset"
|
|
1704
2238
|
],
|
|
1705
2239
|
"additionalProperties": false,
|
|
1706
|
-
"description": "The Eval Contract. Succeeds the prior-art `eval-contract` schema per AD-24. It carries every declaration AD-19 requires so that AD-31's fourteen relevance and satisfaction predicates are decidable from declarations alone. AD-10's sensitivity witnesses arrived on each operation as an additive `schemaVersion` bump; version 4 opens `permittedInterfaces` to a second interface kind, so a contract may describe a system under test that runs behind a command, and widens the interaction pointer's accepted language with the four command input channels and the `artifact` channel. The widening retypes nothing on its own, since every pointer legal under version 3 is still legal; it carries the same version because it ships in the same release as the retypes. Each bump is recorded in its own field's description, and `compile` compares the stamp against `EVAL_CONTRACT_SCHEMA_VERSION` and throws AD-28's `schema-version-mismatch` on anything else.",
|
|
2240
|
+
"description": "The Eval Contract. Succeeds the prior-art `eval-contract` schema per AD-24. It carries every declaration AD-19 requires so that AD-31's fourteen relevance and satisfaction predicates are decidable from declarations alone. AD-10's sensitivity witnesses arrived on each operation as an additive `schemaVersion` bump; version 4 opens `permittedInterfaces` to a second interface kind, so a contract may describe a system under test that runs behind a command, and widens the interaction pointer's accepted language with the four command input channels and the `artifact` channel. The widening retypes nothing on its own, since every pointer legal under version 3 is still legal; it carries the same version because it ships in the same release as the retypes. Version 5 gives the `mcp` kind its own operation shape, so a contract may describe a tool server, and widens the pointer language and a step's input binding with the `arguments` channel. Each bump is recorded in its own field's description, and `compile` compares the stamp against `EVAL_CONTRACT_SCHEMA_VERSION` and throws AD-28's `schema-version-mismatch` on anything else.",
|
|
1707
2241
|
"$defs": {
|
|
1708
2242
|
"Expression": {
|
|
1709
2243
|
"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.",
|
|
@@ -2256,8 +2790,8 @@
|
|
|
2256
2790
|
"anyOf": [
|
|
2257
2791
|
{
|
|
2258
2792
|
"type": "string",
|
|
2259
|
-
"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|argument|option|environment|stdin)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
2260
|
-
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels
|
|
2793
|
+
"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|argument|option|environment|stdin|arguments)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
2794
|
+
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels, one of the four command channels, or the `arguments` channel a tool call accepts; `artifact` takes the identifier of a file the operation declares it writes; `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."
|
|
2261
2795
|
},
|
|
2262
2796
|
{
|
|
2263
2797
|
"type": "string",
|
|
@@ -2428,7 +2962,7 @@
|
|
|
2428
2962
|
},
|
|
2429
2963
|
"evidence": {
|
|
2430
2964
|
"type": "string",
|
|
2431
|
-
"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|argument|option|environment|stdin)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
2965
|
+
"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|argument|option|environment|stdin|arguments)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
2432
2966
|
"description": "Where the criterion is answerable from. A pointer that resolves nowhere is `rubric-evidence-unreachable`, a compile-time code, and is deliberately not a schema rejection."
|
|
2433
2967
|
}
|
|
2434
2968
|
},
|
|
@@ -2922,7 +3456,8 @@
|
|
|
2922
3456
|
"argument",
|
|
2923
3457
|
"option",
|
|
2924
3458
|
"environment",
|
|
2925
|
-
"stdin"
|
|
3459
|
+
"stdin",
|
|
3460
|
+
"arguments"
|
|
2926
3461
|
]
|
|
2927
3462
|
},
|
|
2928
3463
|
"legs": {
|
|
@@ -3032,6 +3567,24 @@
|
|
|
3032
3567
|
"stdin"
|
|
3033
3568
|
],
|
|
3034
3569
|
"additionalProperties": false
|
|
3570
|
+
},
|
|
3571
|
+
{
|
|
3572
|
+
"type": "object",
|
|
3573
|
+
"properties": {
|
|
3574
|
+
"arguments": {
|
|
3575
|
+
"type": "object",
|
|
3576
|
+
"propertyNames": {
|
|
3577
|
+
"type": "string"
|
|
3578
|
+
},
|
|
3579
|
+
"additionalProperties": {
|
|
3580
|
+
"$ref": "#/$defs/JsonValue"
|
|
3581
|
+
}
|
|
3582
|
+
}
|
|
3583
|
+
},
|
|
3584
|
+
"required": [
|
|
3585
|
+
"arguments"
|
|
3586
|
+
],
|
|
3587
|
+
"additionalProperties": false
|
|
3035
3588
|
}
|
|
3036
3589
|
]
|
|
3037
3590
|
}
|
|
@@ -3073,7 +3626,7 @@
|
|
|
3073
3626
|
"sensitivityWitness"
|
|
3074
3627
|
],
|
|
3075
3628
|
"additionalProperties": false,
|
|
3076
|
-
"description": "AD-19's per-operation declaration inventory for an interface that speaks HTTP. Carried by the `api
|
|
3629
|
+
"description": "AD-19's per-operation declaration inventory for an interface that speaks HTTP. Carried by the `api` and `web` branches alike, so the export names it once instead of inlining two copies that could drift apart."
|
|
3077
3630
|
},
|
|
3078
3631
|
"WitnessInputs": {
|
|
3079
3632
|
"type": "object",
|
|
@@ -3148,7 +3701,7 @@
|
|
|
3148
3701
|
"body"
|
|
3149
3702
|
],
|
|
3150
3703
|
"additionalProperties": false,
|
|
3151
|
-
"description": "One probe leg's supplied inputs, keyed by AD-19 transport channel, in the spelling the environment-probe port accepts.
|
|
3704
|
+
"description": "One probe leg's supplied inputs, keyed by AD-19 transport channel, in the spelling the environment-probe port accepts. The transport branch of the union every leg shape takes: a sensitivity leg, a manifestation witness, and the fixture reset."
|
|
3152
3705
|
},
|
|
3153
3706
|
"InputBindingChannel": {
|
|
3154
3707
|
"anyOf": [
|
|
@@ -3193,8 +3746,8 @@
|
|
|
3193
3746
|
"properties": {
|
|
3194
3747
|
"captured": {
|
|
3195
3748
|
"type": "string",
|
|
3196
|
-
"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|argument|option|environment|stdin)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
3197
|
-
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels
|
|
3749
|
+
"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|argument|option|environment|stdin|arguments)(?:\\/(?:[^/~]|~[01])*)*|artifact\\/[a-z0-9]+(?:-[a-z0-9]+)*(?:\\/(?:[^/~]|~[01])*)*)$",
|
|
3750
|
+
"description": "AD-26 interaction-rooted pointer: \"/interactions/{stepId}/\" followed by one channel of the closed vocabulary. `call-inputs` takes one input channel as its next segment, one of the four transport channels, one of the four command channels, or the `arguments` channel a tool call accepts; `artifact` takes the identifier of a file the operation declares it writes; `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."
|
|
3198
3751
|
}
|
|
3199
3752
|
},
|
|
3200
3753
|
"required": [
|