@openwop/openwop-conformance 2.42.9 → 2.43.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/CHANGELOG.md +13 -0
- package/README.md +3 -3
- package/coverage.md +1 -1
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures.md +2 -1
- package/package.json +2 -2
- package/requirements.json +350 -16
- package/scenario-majors.json +17 -5
- package/schemas/CORPUS-STAMP.json +37 -36
- package/src/lib/auditIntegrity.ts +45 -0
- package/src/scenarios/audit-anomaly-shape.test.ts +100 -0
- package/src/scenarios/audit-checkpoint-signature.test.ts +14 -15
- package/src/scenarios/audit-log-integrity.test.ts +102 -46
- package/src/scenarios/byok-roundtrip.test.ts +21 -7
- package/src/scenarios/v2-approval-reject-disposition.test.ts +162 -0
- package/src/scenarios/v2-registry-lifecycle.test.ts +232 -0
package/requirements.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-requirement-registry.mjs — do not edit. One record per it()/test() in src/scenarios. Ids: openwop.it.<file-stem>.<title-slug>[~n] (src/lib/requirement-ids.ts). A record with id null has an interpolated title; its run-time row is keyed by the rendered title and maps here by file+line only. Renamed ids need a row in requirement-aliases.json.",
|
|
3
3
|
"generatedFrom": "src/scenarios/*.test.ts",
|
|
4
4
|
"counts": {
|
|
5
|
-
"files":
|
|
6
|
-
"tests":
|
|
7
|
-
"withStableId":
|
|
5
|
+
"files": 645,
|
|
6
|
+
"tests": 2481,
|
|
7
|
+
"withStableId": 2481,
|
|
8
8
|
"interpolatedTitles": 0,
|
|
9
|
-
"explicitIds":
|
|
9
|
+
"explicitIds": 2367
|
|
10
10
|
},
|
|
11
11
|
"records": [
|
|
12
12
|
{
|
|
@@ -5425,15 +5425,72 @@
|
|
|
5425
5425
|
}
|
|
5426
5426
|
]
|
|
5427
5427
|
},
|
|
5428
|
+
{
|
|
5429
|
+
"id": "openwop.it.audit-anomaly-shape.every-anomaly-kind-validates-in-its-own-shape",
|
|
5430
|
+
"file": "audit-anomaly-shape.test.ts",
|
|
5431
|
+
"line": 74,
|
|
5432
|
+
"title": "every anomaly kind validates in its own shape",
|
|
5433
|
+
"explicitId": "openwop.requirement.0218.anomaly-shape",
|
|
5434
|
+
"citations": [
|
|
5435
|
+
{
|
|
5436
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5437
|
+
"requirement": null,
|
|
5438
|
+
"interpolated": true
|
|
5439
|
+
},
|
|
5440
|
+
{
|
|
5441
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5442
|
+
"requirement": null,
|
|
5443
|
+
"interpolated": true
|
|
5444
|
+
}
|
|
5445
|
+
]
|
|
5446
|
+
},
|
|
5447
|
+
{
|
|
5448
|
+
"id": "openwop.it.audit-anomaly-shape.an-anomaly-outside-its-kind-s-shape-is-refused",
|
|
5449
|
+
"file": "audit-anomaly-shape.test.ts",
|
|
5450
|
+
"line": 84,
|
|
5451
|
+
"title": "an anomaly outside its kind's shape is refused",
|
|
5452
|
+
"explicitId": "openwop.requirement.0218.anomaly-shape",
|
|
5453
|
+
"citations": [
|
|
5454
|
+
{
|
|
5455
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5456
|
+
"requirement": null,
|
|
5457
|
+
"interpolated": true
|
|
5458
|
+
}
|
|
5459
|
+
]
|
|
5460
|
+
},
|
|
5461
|
+
{
|
|
5462
|
+
"id": "openwop.it.audit-anomaly-shape.chainvalid-is-false-exactly-when-anomalies-is-non-empty",
|
|
5463
|
+
"file": "audit-anomaly-shape.test.ts",
|
|
5464
|
+
"line": 92,
|
|
5465
|
+
"title": "chainValid is false exactly when anomalies is non-empty",
|
|
5466
|
+
"explicitId": "openwop.requirement.0218.anomaly-shape",
|
|
5467
|
+
"citations": [
|
|
5468
|
+
{
|
|
5469
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5470
|
+
"requirement": null,
|
|
5471
|
+
"interpolated": true
|
|
5472
|
+
},
|
|
5473
|
+
{
|
|
5474
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5475
|
+
"requirement": null,
|
|
5476
|
+
"interpolated": true
|
|
5477
|
+
},
|
|
5478
|
+
{
|
|
5479
|
+
"section": "RFC 0218 §C · spec/v1/auth-profiles.md §\"Audit-log integrity\" 4",
|
|
5480
|
+
"requirement": null,
|
|
5481
|
+
"interpolated": true
|
|
5482
|
+
}
|
|
5483
|
+
]
|
|
5484
|
+
},
|
|
5428
5485
|
{
|
|
5429
5486
|
"id": "openwop.it.audit-checkpoint-signature.every-checkpoint-get-v1-audit-verify-returns-verifies-under-the-advertised-key",
|
|
5430
5487
|
"file": "audit-checkpoint-signature.test.ts",
|
|
5431
|
-
"line":
|
|
5488
|
+
"line": 29,
|
|
5432
5489
|
"title": "every checkpoint GET /v1/audit/verify returns verifies under the advertised key",
|
|
5433
5490
|
"explicitId": "openwop.requirement.0218.checkpoint-signature-over-root",
|
|
5434
5491
|
"citations": [
|
|
5435
5492
|
{
|
|
5436
|
-
"section": "RFC 0218 · spec/v1/auth-profiles.md §\"Audit-log integrity\" 3",
|
|
5493
|
+
"section": "RFC 0218 · spec/v1/auth-profiles.md §\"Audit-log integrity\" 3; spec/v2/core/security-defaults.md §\"Audit-log integrity\" (RFC 0224)",
|
|
5437
5494
|
"requirement": null,
|
|
5438
5495
|
"interpolated": true
|
|
5439
5496
|
}
|
|
@@ -5534,10 +5591,19 @@
|
|
|
5534
5591
|
{
|
|
5535
5592
|
"id": "openwop.it.audit-log-integrity.host-that-claims-the-profile-advertises-required-capability-fields",
|
|
5536
5593
|
"file": "audit-log-integrity.test.ts",
|
|
5537
|
-
"line":
|
|
5594
|
+
"line": 80,
|
|
5538
5595
|
"title": "host that claims the profile advertises required capability fields",
|
|
5539
5596
|
"explicitId": "openwop.it.audit-log-integrity.host-that-claims-the-profile-advertises-required-capability-fields",
|
|
5540
5597
|
"citations": [
|
|
5598
|
+
{
|
|
5599
|
+
"section": "security-defaults.md §\"Audit-log integrity\"",
|
|
5600
|
+
"requirement": null,
|
|
5601
|
+
"interpolated": true
|
|
5602
|
+
},
|
|
5603
|
+
{
|
|
5604
|
+
"section": "security-defaults.md §\"Audit-log integrity\"",
|
|
5605
|
+
"requirement": "auditLogIntegrity.checkpointPublicKey MUST be an Ed25519 SubjectPublicKeyInfo, base64"
|
|
5606
|
+
},
|
|
5541
5607
|
{
|
|
5542
5608
|
"section": "auth-profiles.md §\"Audit-log integrity\"",
|
|
5543
5609
|
"requirement": "openwop-audit-log-integrity profile MUST advertise auditLogIntegrity.hashChain: true"
|
|
@@ -5551,13 +5617,14 @@
|
|
|
5551
5617
|
{
|
|
5552
5618
|
"id": "openwop.it.audit-log-integrity.get-v1-audit-verify-on-a-recent-range-reports-chainvalid-true",
|
|
5553
5619
|
"file": "audit-log-integrity.test.ts",
|
|
5554
|
-
"line":
|
|
5620
|
+
"line": 111,
|
|
5555
5621
|
"title": "GET /v1/audit/verify on a recent range reports chainValid: true",
|
|
5556
5622
|
"explicitId": "openwop.it.audit-log-integrity.get-v1-audit-verify-on-a-recent-range-reports-chainvalid-true",
|
|
5557
5623
|
"citations": [
|
|
5558
5624
|
{
|
|
5559
5625
|
"section": "auth-profiles.md §\"Audit-log integrity\" §\"Verification endpoint\"",
|
|
5560
|
-
"requirement":
|
|
5626
|
+
"requirement": null,
|
|
5627
|
+
"interpolated": true
|
|
5561
5628
|
},
|
|
5562
5629
|
{
|
|
5563
5630
|
"section": "audit-verify-result.schema.json",
|
|
@@ -5574,6 +5641,29 @@
|
|
|
5574
5641
|
}
|
|
5575
5642
|
]
|
|
5576
5643
|
},
|
|
5644
|
+
{
|
|
5645
|
+
"id": "openwop.it.audit-log-integrity.verify-lists-every-checkpoint-ascending-no-more-than-checkpointintervalentries-a",
|
|
5646
|
+
"file": "audit-log-integrity.test.ts",
|
|
5647
|
+
"line": 163,
|
|
5648
|
+
"title": "verify lists every checkpoint ascending, no more than checkpointIntervalEntries apart",
|
|
5649
|
+
"explicitId": "openwop.requirement.0224.checkpoint-cadence",
|
|
5650
|
+
"citations": [
|
|
5651
|
+
{
|
|
5652
|
+
"section": "security-defaults.md §\"Audit-log integrity\"",
|
|
5653
|
+
"requirement": "every checkpoint MUST carry an integer atSequence"
|
|
5654
|
+
},
|
|
5655
|
+
{
|
|
5656
|
+
"section": "security-defaults.md §\"Audit-log integrity\"",
|
|
5657
|
+
"requirement": null,
|
|
5658
|
+
"interpolated": true
|
|
5659
|
+
},
|
|
5660
|
+
{
|
|
5661
|
+
"section": "security-defaults.md §\"Audit-log integrity\"",
|
|
5662
|
+
"requirement": null,
|
|
5663
|
+
"interpolated": true
|
|
5664
|
+
}
|
|
5665
|
+
]
|
|
5666
|
+
},
|
|
5577
5667
|
{
|
|
5578
5668
|
"id": "openwop.it.auth-api-key-rotation.host-claiming-rotation-profile-advertises-required-fields",
|
|
5579
5669
|
"file": "auth-api-key-rotation.test.ts",
|
|
@@ -6731,7 +6821,7 @@
|
|
|
6731
6821
|
{
|
|
6732
6822
|
"id": "openwop.it.byok-roundtrip.the-canary-fixture-run-must-resolve-a-host-provisioned-secret-and-emit-sha-256-h",
|
|
6733
6823
|
"file": "byok-roundtrip.test.ts",
|
|
6734
|
-
"line":
|
|
6824
|
+
"line": 51,
|
|
6735
6825
|
"title": "the canary fixture run MUST resolve a host-provisioned secret and emit SHA-256 hex",
|
|
6736
6826
|
"explicitId": "openwop.it.byok-roundtrip.the-canary-fixture-run-must-resolve-a-host-provisioned-secret-and-emit-sha-256-h",
|
|
6737
6827
|
"citations": [
|
|
@@ -6756,7 +6846,7 @@
|
|
|
6756
6846
|
{
|
|
6757
6847
|
"id": "openwop.it.byok-roundtrip.byok-fixture-run-must-emit-a-node-completed-event-for-the-resolve-step",
|
|
6758
6848
|
"file": "byok-roundtrip.test.ts",
|
|
6759
|
-
"line":
|
|
6849
|
+
"line": 116,
|
|
6760
6850
|
"title": "BYOK fixture run MUST emit a node.completed event for the resolve step",
|
|
6761
6851
|
"explicitId": "openwop.it.byok-roundtrip.byok-fixture-run-must-emit-a-node-completed-event-for-the-resolve-step",
|
|
6762
6852
|
"citations": [
|
|
@@ -6769,7 +6859,7 @@
|
|
|
6769
6859
|
{
|
|
6770
6860
|
"id": "openwop.it.byok-roundtrip.byok-fixture-run-event-log-must-not-echo-the-resolved-secret-value-redaction",
|
|
6771
6861
|
"file": "byok-roundtrip.test.ts",
|
|
6772
|
-
"line":
|
|
6862
|
+
"line": 143,
|
|
6773
6863
|
"title": "BYOK fixture run event log MUST NOT echo the resolved secret value (redaction)",
|
|
6774
6864
|
"explicitId": "openwop.it.byok-roundtrip.byok-fixture-run-event-log-must-not-echo-the-resolved-secret-value-redaction",
|
|
6775
6865
|
"citations": [
|
|
@@ -27713,6 +27803,95 @@
|
|
|
27713
27803
|
}
|
|
27714
27804
|
]
|
|
27715
27805
|
},
|
|
27806
|
+
{
|
|
27807
|
+
"id": "openwop.it.v2-approval-reject-disposition.a-rejected-gate-with-no-routing-edge-fails-the-run-with-approval-rejected",
|
|
27808
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27809
|
+
"line": 103,
|
|
27810
|
+
"title": "a rejected gate with no routing edge fails the run with approval_rejected",
|
|
27811
|
+
"explicitId": null,
|
|
27812
|
+
"citations": [
|
|
27813
|
+
{
|
|
27814
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27815
|
+
"requirement": null,
|
|
27816
|
+
"interpolated": true
|
|
27817
|
+
},
|
|
27818
|
+
{
|
|
27819
|
+
"section": null,
|
|
27820
|
+
"requirement": "the terminal snapshot error.code MUST be approval_rejected",
|
|
27821
|
+
"interpolated": true
|
|
27822
|
+
},
|
|
27823
|
+
{
|
|
27824
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27825
|
+
"requirement": "run.failed.error.code MUST be approval_rejected"
|
|
27826
|
+
}
|
|
27827
|
+
]
|
|
27828
|
+
},
|
|
27829
|
+
{
|
|
27830
|
+
"id": "openwop.it.v2-approval-reject-disposition.interrupt-resolved-records-action-reject-and-decision-rejected",
|
|
27831
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27832
|
+
"line": 114,
|
|
27833
|
+
"title": "interrupt.resolved records action reject and decision rejected",
|
|
27834
|
+
"explicitId": null,
|
|
27835
|
+
"citations": [
|
|
27836
|
+
{
|
|
27837
|
+
"section": null,
|
|
27838
|
+
"requirement": "the reject MUST be recorded as interrupt.resolved",
|
|
27839
|
+
"interpolated": true
|
|
27840
|
+
},
|
|
27841
|
+
{
|
|
27842
|
+
"section": null,
|
|
27843
|
+
"requirement": "interrupt.resolved MUST carry action \"reject\" and decision \"rejected\"",
|
|
27844
|
+
"interpolated": true
|
|
27845
|
+
}
|
|
27846
|
+
]
|
|
27847
|
+
},
|
|
27848
|
+
{
|
|
27849
|
+
"id": "openwop.it.v2-approval-reject-disposition.the-gate-node-fails-with-approval-rejected-not-retryable-and-run-failed-names-it",
|
|
27850
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27851
|
+
"line": 127,
|
|
27852
|
+
"title": "the gate node fails with approval_rejected, not retryable, and run.failed names it",
|
|
27853
|
+
"explicitId": null,
|
|
27854
|
+
"citations": [
|
|
27855
|
+
{
|
|
27856
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27857
|
+
"requirement": "the gate that does not turn the rejection into an output MUST emit node.failed"
|
|
27858
|
+
},
|
|
27859
|
+
{
|
|
27860
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27861
|
+
"requirement": "node.failed.error MUST carry code approval_rejected and retryable false"
|
|
27862
|
+
},
|
|
27863
|
+
{
|
|
27864
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27865
|
+
"requirement": "run.failed.failedNodeId MUST name the gate"
|
|
27866
|
+
}
|
|
27867
|
+
]
|
|
27868
|
+
},
|
|
27869
|
+
{
|
|
27870
|
+
"id": "openwop.it.v2-approval-reject-disposition.a-majority-reject-decides-the-quorum-gate-on-the-deciding-vote-and-fails-the-run",
|
|
27871
|
+
"file": "v2-approval-reject-disposition.test.ts",
|
|
27872
|
+
"line": 140,
|
|
27873
|
+
"title": "a majority reject decides the quorum gate on the deciding vote and fails the run with approval_rejected",
|
|
27874
|
+
"explicitId": null,
|
|
27875
|
+
"citations": [
|
|
27876
|
+
{
|
|
27877
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27878
|
+
"requirement": "one reject of three under majority does not decide the gate: the run MUST stay waiting-approval"
|
|
27879
|
+
},
|
|
27880
|
+
{
|
|
27881
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27882
|
+
"requirement": "a vote that does not decide the gate MUST NOT emit interrupt.resolved"
|
|
27883
|
+
},
|
|
27884
|
+
{
|
|
27885
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27886
|
+
"requirement": null,
|
|
27887
|
+
"interpolated": true
|
|
27888
|
+
},
|
|
27889
|
+
{
|
|
27890
|
+
"section": "spec/v2/core/interrupt.md §Rejection (RFC 0223)",
|
|
27891
|
+
"requirement": "the terminal snapshot error.code MUST be approval_rejected"
|
|
27892
|
+
}
|
|
27893
|
+
]
|
|
27894
|
+
},
|
|
27716
27895
|
{
|
|
27717
27896
|
"id": "openwop.it.v2-approver-enforced.a-resolver-outside-approverslist-is-refused-at-resolve-time",
|
|
27718
27897
|
"file": "v2-approver-enforced.test.ts",
|
|
@@ -32594,6 +32773,56 @@
|
|
|
32594
32773
|
}
|
|
32595
32774
|
]
|
|
32596
32775
|
},
|
|
32776
|
+
{
|
|
32777
|
+
"id": "openwop.it.v2-registry-lifecycle.a-yanked-version-is-never-latest-while-an-unyanked-one-exists-the-flags-agree-ac",
|
|
32778
|
+
"file": "v2-registry-lifecycle.test.ts",
|
|
32779
|
+
"line": 130,
|
|
32780
|
+
"title": "a yanked version is never latest while an unyanked one exists, the flags agree across index and manifest, and a yanked version stays served",
|
|
32781
|
+
"explicitId": "openwop.requirement.0222.yanked-version-lifecycle",
|
|
32782
|
+
"citations": [
|
|
32783
|
+
{
|
|
32784
|
+
"section": "RFC 0222 · packs.md §\"Version manifests\"",
|
|
32785
|
+
"requirement": null,
|
|
32786
|
+
"interpolated": true
|
|
32787
|
+
},
|
|
32788
|
+
{
|
|
32789
|
+
"section": "RFC 0222 · packs.md §\"Version manifests\"",
|
|
32790
|
+
"requirement": "the per-pack index MUST NOT name a yanked version latest while an unyanked one exists, and the index MUST agree with each version manifest"
|
|
32791
|
+
},
|
|
32792
|
+
{
|
|
32793
|
+
"section": "RFC 0222 · packs.md §\"Version manifests\"",
|
|
32794
|
+
"requirement": null,
|
|
32795
|
+
"interpolated": true
|
|
32796
|
+
}
|
|
32797
|
+
]
|
|
32798
|
+
},
|
|
32799
|
+
{
|
|
32800
|
+
"id": "openwop.it.v2-registry-lifecycle.every-served-version-names-a-listed-key-whose-permittednamespaces-admit-it-and-i",
|
|
32801
|
+
"file": "v2-registry-lifecycle.test.ts",
|
|
32802
|
+
"line": 177,
|
|
32803
|
+
"title": "every served version names a listed key whose permittedNamespaces admit it, and its signature verifies — whatever the key status",
|
|
32804
|
+
"explicitId": "openwop.requirement.0222.signing-keys-cover-served-versions",
|
|
32805
|
+
"citations": [
|
|
32806
|
+
{
|
|
32807
|
+
"section": "RFC 0222 · packs.md §Signing",
|
|
32808
|
+
"requirement": null,
|
|
32809
|
+
"interpolated": true
|
|
32810
|
+
},
|
|
32811
|
+
{
|
|
32812
|
+
"section": "RFC 0222 · packs.md §Signing",
|
|
32813
|
+
"requirement": "every signingKeys[] entry MUST carry keyId, publicKeyUrl, status and permittedNamespaces"
|
|
32814
|
+
},
|
|
32815
|
+
{
|
|
32816
|
+
"section": "RFC 0222 · packs.md §Signing",
|
|
32817
|
+
"requirement": "the v2 tree MUST serve at least one version manifest to witness"
|
|
32818
|
+
},
|
|
32819
|
+
{
|
|
32820
|
+
"section": "RFC 0222 · packs.md §Signing",
|
|
32821
|
+
"requirement": null,
|
|
32822
|
+
"interpolated": true
|
|
32823
|
+
}
|
|
32824
|
+
]
|
|
32825
|
+
},
|
|
32597
32826
|
{
|
|
32598
32827
|
"id": "openwop.it.v2-relaxation-recorded.a-bundle-recording-a-relaxation-cannot-certify-the-relaxed-profile",
|
|
32599
32828
|
"file": "v2-relaxation-recorded.test.ts",
|
|
@@ -42161,7 +42390,7 @@
|
|
|
42161
42390
|
{
|
|
42162
42391
|
"id": "openwop.it.v2-error-registry-prose-parity.errors-md-states-the-registry-count-it-was-generated-from-and-renders-every-code",
|
|
42163
42392
|
"file": "v2-error-registry-prose-parity.test.ts",
|
|
42164
|
-
"line":
|
|
42393
|
+
"line": 35,
|
|
42165
42394
|
"title": "errors.md states the registry count it was generated from and renders every code",
|
|
42166
42395
|
"explicitId": "openwop.requirement.0171.error-registry-prose-parity",
|
|
42167
42396
|
"citations": [
|
|
@@ -42181,6 +42410,34 @@
|
|
|
42181
42410
|
}
|
|
42182
42411
|
]
|
|
42183
42412
|
},
|
|
42413
|
+
{
|
|
42414
|
+
"id": "openwop.it.v2-error-registry-prose-parity.approval-rejected-is-a-registered-422-not-retriable-and-interrupt-md-rejection-n",
|
|
42415
|
+
"file": "v2-error-registry-prose-parity.test.ts",
|
|
42416
|
+
"line": 67,
|
|
42417
|
+
"title": "approval_rejected is a registered 422, not retriable, and interrupt.md §Rejection names it",
|
|
42418
|
+
"explicitId": "openwop.requirement.0223.code-registered",
|
|
42419
|
+
"citations": [
|
|
42420
|
+
{
|
|
42421
|
+
"section": "spec/v2/errors.json",
|
|
42422
|
+
"requirement": null,
|
|
42423
|
+
"interpolated": true
|
|
42424
|
+
},
|
|
42425
|
+
{
|
|
42426
|
+
"section": "spec/v2/errors.json",
|
|
42427
|
+
"requirement": null,
|
|
42428
|
+
"interpolated": true
|
|
42429
|
+
},
|
|
42430
|
+
{
|
|
42431
|
+
"section": "spec/v2/core/interrupt.md §Rejection",
|
|
42432
|
+
"requirement": null,
|
|
42433
|
+
"interpolated": true
|
|
42434
|
+
},
|
|
42435
|
+
{
|
|
42436
|
+
"section": "schemas/v2/suspend-request.schema.json ApprovalData.onTimeout",
|
|
42437
|
+
"requirement": "onTimeout MUST exist and declare no default — absent means reject by prose (RFC 0223)"
|
|
42438
|
+
}
|
|
42439
|
+
]
|
|
42440
|
+
},
|
|
42184
42441
|
{
|
|
42185
42442
|
"id": "openwop.it.v2-event-naming-rule.every-closed-enum-v2-event-type-is-two-kebab-segments-and-every-recorded-artifac",
|
|
42186
42443
|
"file": "v2-event-naming-rule.test.ts",
|
|
@@ -43029,9 +43286,86 @@
|
|
|
43029
43286
|
]
|
|
43030
43287
|
},
|
|
43031
43288
|
{
|
|
43032
|
-
"id": "openwop.it.v2-surface-monotone-gate.
|
|
43289
|
+
"id": "openwop.it.v2-surface-monotone-gate.positive-control-a-required-under-a-then-selecting-only-enum-members-this-diff-a",
|
|
43033
43290
|
"file": "v2-surface-monotone-gate.test.ts",
|
|
43034
43291
|
"line": 156,
|
|
43292
|
+
"title": "POSITIVE CONTROL — a `required` under a `then` selecting only enum members this diff adds is additive",
|
|
43293
|
+
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43294
|
+
"citations": [
|
|
43295
|
+
{
|
|
43296
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43297
|
+
"requirement": null,
|
|
43298
|
+
"interpolated": true
|
|
43299
|
+
},
|
|
43300
|
+
{
|
|
43301
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43302
|
+
"requirement": "the gate must say it admitted the conditional, not pass it silently"
|
|
43303
|
+
}
|
|
43304
|
+
]
|
|
43305
|
+
},
|
|
43306
|
+
{
|
|
43307
|
+
"id": "openwop.it.v2-surface-monotone-gate.a-required-under-a-then-an-existing-enum-value-selects-is-refused-b-6",
|
|
43308
|
+
"file": "v2-surface-monotone-gate.test.ts",
|
|
43309
|
+
"line": 171,
|
|
43310
|
+
"title": "a `required` under a `then` an EXISTING enum value selects is REFUSED (§B.6)",
|
|
43311
|
+
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43312
|
+
"citations": [
|
|
43313
|
+
{
|
|
43314
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43315
|
+
"requirement": null,
|
|
43316
|
+
"interpolated": true
|
|
43317
|
+
},
|
|
43318
|
+
{
|
|
43319
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43320
|
+
"requirement": "the refusal must name the property and the object"
|
|
43321
|
+
}
|
|
43322
|
+
]
|
|
43323
|
+
},
|
|
43324
|
+
{
|
|
43325
|
+
"id": "openwop.it.v2-surface-monotone-gate.a-then-pinning-only-a-pre-existing-value-or-pinning-nothing-required-licenses-no",
|
|
43326
|
+
"file": "v2-surface-monotone-gate.test.ts",
|
|
43327
|
+
"line": 186,
|
|
43328
|
+
"title": "a `then` pinning only a PRE-EXISTING value, or pinning nothing required, licenses nothing",
|
|
43329
|
+
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43330
|
+
"citations": [
|
|
43331
|
+
{
|
|
43332
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43333
|
+
"requirement": null,
|
|
43334
|
+
"interpolated": true
|
|
43335
|
+
},
|
|
43336
|
+
{
|
|
43337
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43338
|
+
"requirement": null,
|
|
43339
|
+
"interpolated": true
|
|
43340
|
+
},
|
|
43341
|
+
{
|
|
43342
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43343
|
+
"requirement": "the refusal must name the property and the object"
|
|
43344
|
+
}
|
|
43345
|
+
]
|
|
43346
|
+
},
|
|
43347
|
+
{
|
|
43348
|
+
"id": "openwop.it.v2-surface-monotone-gate.a-new-value-conditional-does-not-launder-an-unconditional-required-beside-it",
|
|
43349
|
+
"file": "v2-surface-monotone-gate.test.ts",
|
|
43350
|
+
"line": 204,
|
|
43351
|
+
"title": "a new-value conditional does not launder an UNCONDITIONAL `required` beside it",
|
|
43352
|
+
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43353
|
+
"citations": [
|
|
43354
|
+
{
|
|
43355
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43356
|
+
"requirement": null,
|
|
43357
|
+
"interpolated": true
|
|
43358
|
+
},
|
|
43359
|
+
{
|
|
43360
|
+
"section": "spec/v2/core/overview.md §0a (RFC 0197 §A.1)",
|
|
43361
|
+
"requirement": "the refusal must name the unconditional property"
|
|
43362
|
+
}
|
|
43363
|
+
]
|
|
43364
|
+
},
|
|
43365
|
+
{
|
|
43366
|
+
"id": "openwop.it.v2-surface-monotone-gate.an-open-object-closed-to-additionalproperties-false-is-refused-b-6",
|
|
43367
|
+
"file": "v2-surface-monotone-gate.test.ts",
|
|
43368
|
+
"line": 218,
|
|
43035
43369
|
"title": "an OPEN object closed to `additionalProperties: false` is REFUSED (§B.6)",
|
|
43036
43370
|
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43037
43371
|
"citations": [
|
|
@@ -43049,7 +43383,7 @@
|
|
|
43049
43383
|
{
|
|
43050
43384
|
"id": "openwop.it.v2-surface-monotone-gate.a-narrowed-type-is-refused-a-1-add-the-new-shape-beside-the-old-one",
|
|
43051
43385
|
"file": "v2-surface-monotone-gate.test.ts",
|
|
43052
|
-
"line":
|
|
43386
|
+
"line": 225,
|
|
43053
43387
|
"title": "a narrowed `type` is REFUSED (§A.1 — add the new shape beside the old one)",
|
|
43054
43388
|
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43055
43389
|
"citations": [
|
|
@@ -43067,7 +43401,7 @@
|
|
|
43067
43401
|
{
|
|
43068
43402
|
"id": "openwop.it.v2-surface-monotone-gate.a-removed-operation-is-refused-a-path-manifest-row-is-a-surface-too",
|
|
43069
43403
|
"file": "v2-surface-monotone-gate.test.ts",
|
|
43070
|
-
"line":
|
|
43404
|
+
"line": 232,
|
|
43071
43405
|
"title": "a removed OPERATION is REFUSED (a path-manifest row is a surface too)",
|
|
43072
43406
|
"explicitId": "openwop.requirement.0197.no-reshape",
|
|
43073
43407
|
"citations": [
|
package/scenario-majors.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "GENERATED by conformance/scripts/generate-scenario-majors.mjs (RFC 0168 §D.3). Do not edit; add a file to BOTH_MAJORS in the generator to target both majors.",
|
|
3
3
|
"counts": {
|
|
4
|
-
"files":
|
|
5
|
-
"v1":
|
|
6
|
-
"v2":
|
|
4
|
+
"files": 570,
|
|
5
|
+
"v1": 452,
|
|
6
|
+
"v2": 133
|
|
7
7
|
},
|
|
8
8
|
"majors": {
|
|
9
9
|
"a2a-1-0-agent-card.test.ts": [
|
|
@@ -249,15 +249,21 @@
|
|
|
249
249
|
"artifact-type-store-without-render.test.ts": [
|
|
250
250
|
1
|
|
251
251
|
],
|
|
252
|
+
"audit-anomaly-shape.test.ts": [
|
|
253
|
+
1,
|
|
254
|
+
2
|
|
255
|
+
],
|
|
252
256
|
"audit-checkpoint-signature.test.ts": [
|
|
253
|
-
1
|
|
257
|
+
1,
|
|
258
|
+
2
|
|
254
259
|
],
|
|
255
260
|
"audit-checkpoint-vectors.test.ts": [
|
|
256
261
|
1,
|
|
257
262
|
2
|
|
258
263
|
],
|
|
259
264
|
"audit-log-integrity.test.ts": [
|
|
260
|
-
1
|
|
265
|
+
1,
|
|
266
|
+
2
|
|
261
267
|
],
|
|
262
268
|
"auth-api-key-rotation.test.ts": [
|
|
263
269
|
1
|
|
@@ -1281,6 +1287,9 @@
|
|
|
1281
1287
|
"v2-advertised-path-space-served.test.ts": [
|
|
1282
1288
|
2
|
|
1283
1289
|
],
|
|
1290
|
+
"v2-approval-reject-disposition.test.ts": [
|
|
1291
|
+
2
|
|
1292
|
+
],
|
|
1284
1293
|
"v2-approver-enforced.test.ts": [
|
|
1285
1294
|
2
|
|
1286
1295
|
],
|
|
@@ -1503,6 +1512,9 @@
|
|
|
1503
1512
|
"v2-refresh-sla.test.ts": [
|
|
1504
1513
|
2
|
|
1505
1514
|
],
|
|
1515
|
+
"v2-registry-lifecycle.test.ts": [
|
|
1516
|
+
2
|
|
1517
|
+
],
|
|
1506
1518
|
"v2-relaxation-recorded.test.ts": [
|
|
1507
1519
|
2
|
|
1508
1520
|
],
|