@openwop/openwop-conformance 2.40.1 → 2.40.3

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/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": 635,
6
- "tests": 2430,
7
- "withStableId": 2430,
5
+ "files": 636,
6
+ "tests": 2438,
7
+ "withStableId": 2438,
8
8
  "interpolatedTitles": 0,
9
- "explicitIds": 2310
9
+ "explicitIds": 2332
10
10
  },
11
11
  "records": [
12
12
  {
@@ -7170,9 +7170,38 @@
7170
7170
  ]
7171
7171
  },
7172
7172
  {
7173
- "id": "openwop.it.certification-bundle-redaction.evidencesecretsfromenv-never-scrubs-a-key-identifier-id-variables-are-excluded-a",
7173
+ "id": "openwop.it.certification-bundle-redaction.evidencesecretsfromenv-never-treats-a-setting-about-a-secret-as-one-a-bare-integ",
7174
7174
  "file": "certification-bundle-redaction.test.ts",
7175
7175
  "line": 157,
7176
+ "title": "evidenceSecretsFromEnv never treats a setting ABOUT a secret as one: a bare integer or a value under 8 characters is not swept from the environment",
7177
+ "explicitId": "openwop.it.certification-bundle-redaction.setting-about-a-secret-not-swept",
7178
+ "citations": [
7179
+ {
7180
+ "section": "RFC 0148 §C",
7181
+ "requirement": "a bare-integer setting whose NAME mentions a secret (a rotation overlap, a TTL) MUST NOT be swept as a credential"
7182
+ },
7183
+ {
7184
+ "section": "RFC 0148 §C",
7185
+ "requirement": "a value under 8 characters is not credential-shaped and is not swept from the environment"
7186
+ },
7187
+ {
7188
+ "section": "RFC 0148 §C",
7189
+ "requirement": "a credential-shaped value is still swept"
7190
+ },
7191
+ {
7192
+ "section": "RFC 0148 §C",
7193
+ "requirement": "a credential the emitter hands over explicitly is scrubbed whatever its shape"
7194
+ },
7195
+ {
7196
+ "section": "RFC 0148 §C",
7197
+ "requirement": "scrubbing MUST NOT corrupt a digest the bundle carries"
7198
+ }
7199
+ ]
7200
+ },
7201
+ {
7202
+ "id": "openwop.it.certification-bundle-redaction.evidencesecretsfromenv-never-scrubs-a-key-identifier-id-variables-are-excluded-a",
7203
+ "file": "certification-bundle-redaction.test.ts",
7204
+ "line": 180,
7176
7205
  "title": "evidenceSecretsFromEnv never scrubs a key IDENTIFIER: *_ID variables are excluded and `except` values stay visible whichever variable carried them",
7177
7206
  "explicitId": "openwop.it.certification-bundle-redaction.key-identifier-never-scrubbed",
7178
7207
  "citations": [
@@ -7189,7 +7218,7 @@
7189
7218
  {
7190
7219
  "id": "openwop.it.certification-bundle-redaction.verifybundlev2-rejects-a-bundle-carrying-the-conformance-canary-anywhere-and-acc",
7191
7220
  "file": "certification-bundle-redaction.test.ts",
7192
- "line": 177,
7221
+ "line": 200,
7193
7222
  "title": "verifyBundleV2 REJECTS a bundle carrying the conformance canary anywhere, and accepts the scrubbed twin",
7194
7223
  "explicitId": "openwop.it.certification-bundle-redaction.verifybundlev2-rejects-a-bundle-carrying-the-conformance-canary-anywhere-and-acc",
7195
7224
  "citations": [
@@ -7202,7 +7231,7 @@
7202
7231
  {
7203
7232
  "id": "openwop.it.certification-bundle-redaction.the-canary-in-a-discovery-document-key-is-still-a-rejection-keys-are-evidence",
7204
7233
  "file": "certification-bundle-redaction.test.ts",
7205
- "line": 192,
7234
+ "line": 215,
7206
7235
  "title": "the canary in a discovery-document KEY is still a rejection (keys are evidence)",
7207
7236
  "explicitId": "openwop.it.certification-bundle-redaction.the-canary-in-a-discovery-document-key-is-still-a-rejection-keys-are-evidence",
7208
7237
  "citations": [
@@ -7215,7 +7244,7 @@
7215
7244
  {
7216
7245
  "id": "openwop.it.certification-bundle-redaction.the-target-configuration-digest-is-a-digest-the-api-key-is-not-a-substring-of-an",
7217
7246
  "file": "certification-bundle-redaction.test.ts",
7218
- "line": 198,
7247
+ "line": 221,
7219
7248
  "title": "the target-configuration digest is a digest: the API key is not a substring of any string in the document",
7220
7249
  "explicitId": "openwop.it.certification-bundle-redaction.the-target-configuration-digest-is-a-digest-the-api-key-is-not-a-substring-of-an",
7221
7250
  "citations": [
@@ -26810,7 +26839,7 @@
26810
26839
  "file": "v2-a2a-operation-map.test.ts",
26811
26840
  "line": 275,
26812
26841
  "title": "a host not advertising a2a.pushNotifications refuses all four push-config operations with PushNotificationNotSupportedError",
26813
- "explicitId": null,
26842
+ "explicitId": "openwop.requirement.0214.a2a-push-unadvertised-refused",
26814
26843
  "citations": [
26815
26844
  {
26816
26845
  "section": "spec/v2/core/interop.md §\"The operation mappings\" (RFC 0208)",
@@ -26823,7 +26852,7 @@
26823
26852
  "interpolated": true
26824
26853
  },
26825
26854
  {
26826
- "section": null,
26855
+ "section": "interop-map.json a2a.errors PushNotificationNotSupportedError (serverWhen: push config without a2a.pushNotifications) and the push-config operation rows; A2A v1.0.1 §3.3.4",
26827
26856
  "requirement": null,
26828
26857
  "interpolated": true
26829
26858
  }
@@ -26834,7 +26863,7 @@
26834
26863
  "file": "v2-a2a-operation-map.test.ts",
26835
26864
  "line": 306,
26836
26865
  "title": "RFC 0214 — CreateTaskPushNotificationConfig refuses a non-https or private destination",
26837
- "explicitId": null,
26866
+ "explicitId": "openwop.requirement.0214.a2a-push-register-ssrf",
26838
26867
  "citations": [
26839
26868
  {
26840
26869
  "section": "spec/v2/core/interop.md §\"The operation mappings\" (RFC 0208)",
@@ -26842,12 +26871,12 @@
26842
26871
  "interpolated": true
26843
26872
  },
26844
26873
  {
26845
- "section": null,
26874
+ "section": "interop-map.json a2a.operations CreateTaskPushNotificationConfig (\"the url MUST pass the webhooks.md egress guard\"); webhooks.md §Egress; RFC 0214 §B",
26846
26875
  "requirement": null,
26847
26876
  "interpolated": true
26848
26877
  },
26849
26878
  {
26850
- "section": null,
26879
+ "section": "interop-map.json a2a.operations CreateTaskPushNotificationConfig (\"the url MUST pass the webhooks.md egress guard\"); webhooks.md §Egress; RFC 0214 §B",
26851
26880
  "requirement": null,
26852
26881
  "interpolated": true
26853
26882
  }
@@ -26858,41 +26887,40 @@
26858
26887
  "file": "v2-a2a-operation-map.test.ts",
26859
26888
  "line": 324,
26860
26889
  "title": "RFC 0214 §E — a push config of another tenant's task, of another task, or unknown, is answered identically",
26861
- "explicitId": null,
26890
+ "explicitId": "openwop.requirement.0214.a2a-push-config-isolation",
26862
26891
  "citations": [
26863
26892
  {
26864
26893
  "section": "spec/v2/core/interop.md §\"The operation mappings\" (RFC 0208)",
26865
26894
  "requirement": "SendMessage MUST start two tasks with tenant-bound ids"
26866
26895
  },
26867
26896
  {
26868
- "section": null,
26897
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26869
26898
  "requirement": null,
26870
26899
  "interpolated": true
26871
26900
  },
26872
26901
  {
26873
- "section": null,
26902
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26874
26903
  "requirement": null,
26875
26904
  "interpolated": true
26876
26905
  },
26877
26906
  {
26878
- "section": null,
26907
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26879
26908
  "requirement": null,
26880
26909
  "interpolated": true
26881
26910
  },
26882
26911
  {
26883
- "section": null,
26912
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26884
26913
  "requirement": null,
26885
26914
  "interpolated": true
26886
26915
  },
26887
26916
  {
26888
- "section": null,
26917
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26889
26918
  "requirement": null,
26890
26919
  "interpolated": true
26891
26920
  },
26892
26921
  {
26893
- "section": null,
26894
- "requirement": "a delete naming another tenant's task MUST NOT delete the caller's config",
26895
- "interpolated": true
26922
+ "section": "interop.md §\"A2A push delivery\" (RFC 0214 §E); interop.md §\"The operation mappings\" Isolation",
26923
+ "requirement": "a delete naming another tenant's task MUST NOT delete the caller's config"
26896
26924
  },
26897
26925
  {
26898
26926
  "section": "A2A v1.0.1 §3.1.10 (\"MUST be idempotent\")",
@@ -26906,7 +26934,7 @@
26906
26934
  "file": "v2-a2a-operation-map.test.ts",
26907
26935
  "line": 368,
26908
26936
  "title": "RFC 0214 §A — a push config's token and credentials are never returned, and never reach task, events or state",
26909
- "explicitId": null,
26937
+ "explicitId": "openwop.requirement.0214.a2a-push-secrets-not-returned",
26910
26938
  "citations": [
26911
26939
  {
26912
26940
  "section": "spec/v2/core/interop.md §\"The operation mappings\" (RFC 0208)",
@@ -26914,12 +26942,12 @@
26914
26942
  "interpolated": true
26915
26943
  },
26916
26944
  {
26917
- "section": null,
26945
+ "section": "interop-map.json a2a.operations push rows (\"secrets are never returned\"); security-defaults.md §\"Onward hops\" (RFC 0214 §A)",
26918
26946
  "requirement": null,
26919
26947
  "interpolated": true
26920
26948
  },
26921
26949
  {
26922
- "section": null,
26950
+ "section": "interop-map.json a2a.operations push rows (\"secrets are never returned\"); security-defaults.md §\"Onward hops\" (RFC 0214 §A)",
26923
26951
  "requirement": null,
26924
26952
  "interpolated": true
26925
26953
  }
@@ -27062,7 +27090,7 @@
27062
27090
  "file": "v2-a2a-operation-map.test.ts",
27063
27091
  "line": 509,
27064
27092
  "title": "a run suspended on a credential interrupt projects to TASK_STATE_AUTH_REQUIRED, naming the provider and carrying connectUrl",
27065
- "explicitId": null,
27093
+ "explicitId": "openwop.requirement.0199.a2a-auth-required",
27066
27094
  "citations": [
27067
27095
  {
27068
27096
  "section": "runs.md createRun",
@@ -29657,7 +29685,7 @@
29657
29685
  {
29658
29686
  "id": "openwop.it.v2-lane-exp-only-bound.a-credential-inside-the-advertised-window-is-accepted-the-control-the-two-refusa",
29659
29687
  "file": "v2-lane-exp-only-bound.test.ts",
29660
- "line": 149,
29688
+ "line": 152,
29661
29689
  "title": "a credential inside the advertised window is accepted — the control the two refusals rest on",
29662
29690
  "explicitId": "openwop.requirement.0210.exp-only-control-accepted",
29663
29691
  "citations": [
@@ -29671,7 +29699,7 @@
29671
29699
  {
29672
29700
  "id": "openwop.it.v2-lane-exp-only-bound.a-credential-whose-total-lifetime-exceeds-the-window-is-refused-401-and-so-is-on",
29673
29701
  "file": "v2-lane-exp-only-bound.test.ts",
29674
- "line": 164,
29702
+ "line": 167,
29675
29703
  "title": "a credential whose TOTAL lifetime exceeds the window is refused 401, and so is one carrying no iat",
29676
29704
  "explicitId": "openwop.requirement.0210.exp-only-lifetime-bound",
29677
29705
  "citations": [
@@ -29690,7 +29718,7 @@
29690
29718
  {
29691
29719
  "id": "openwop.it.v2-lane-exp-only-bound.the-over-lifetime-refusal-names-credential-lifetime-exceeded-not-a-generic-unaut",
29692
29720
  "file": "v2-lane-exp-only-bound.test.ts",
29693
- "line": 199,
29721
+ "line": 202,
29694
29722
  "title": "the over-lifetime refusal names credential_lifetime_exceeded, not a generic unauthenticated",
29695
29723
  "explicitId": "openwop.requirement.0210.credential-lifetime-code",
29696
29724
  "citations": [
@@ -29704,7 +29732,7 @@
29704
29732
  {
29705
29733
  "id": "openwop.it.v2-lane-exp-only-bound.a-credential-whose-remaining-lifetime-exceeds-the-window-is-refused-though-its-t",
29706
29734
  "file": "v2-lane-exp-only-bound.test.ts",
29707
- "line": 217,
29735
+ "line": 220,
29708
29736
  "title": "a credential whose REMAINING lifetime exceeds the window is refused, though its total lifetime does not",
29709
29737
  "explicitId": "openwop.requirement.0210.exp-only-remaining-bound",
29710
29738
  "citations": [
@@ -30394,7 +30422,7 @@
30394
30422
  "file": "v2-mcp-mount-map.test.ts",
30395
30423
  "line": 287,
30396
30424
  "title": "a credential interrupt is answered in URL mode (url = connectUrl), isError without URL support, and input_required again on an accept retry with no credential",
30397
- "explicitId": null,
30425
+ "explicitId": "openwop.requirement.0199.mcp-url-mode",
30398
30426
  "citations": [
30399
30427
  {
30400
30428
  "section": "interop-map.json mcp.mrtr InputRequiredResult (host as server)",
@@ -30432,7 +30460,7 @@
30432
30460
  "file": "v2-mcp-mount-map.test.ts",
30433
30461
  "line": 328,
30434
30462
  "title": "form mode is never emitted for a nested schema or a sensitive (format password) field",
30435
- "explicitId": null,
30463
+ "explicitId": "openwop.requirement.0199.form-mode-no-secret",
30436
30464
  "citations": [
30437
30465
  {
30438
30466
  "section": "interop-map.json mcp.mrtr InputRequiredResult (host as server)",
@@ -31251,7 +31279,7 @@
31251
31279
  {
31252
31280
  "id": "openwop.it.v2-oidc-id-token-audience.a-same-audience-id-token-is-admissible-and-one-minted-for-another-relying-party",
31253
31281
  "file": "v2-oidc-id-token-audience.test.ts",
31254
- "line": 74,
31282
+ "line": 68,
31255
31283
  "title": "a same-audience ID token is admissible, and one minted for another relying party is audience_mismatch",
31256
31284
  "explicitId": "openwop.requirement.0200.id-token-aud",
31257
31285
  "citations": [
@@ -32081,7 +32109,7 @@
32081
32109
  {
32082
32110
  "id": "openwop.it.v2-revocation-honored.a-revoked-next-request-credential-is-refused-on-the-next-request-with-credential",
32083
32111
  "file": "v2-revocation-honored.test.ts",
32084
- "line": 38,
32112
+ "line": 40,
32085
32113
  "title": "a revoked next-request credential is refused on the next request with credential_revoked",
32086
32114
  "explicitId": "openwop.requirement.0170.revocation-honored",
32087
32115
  "citations": [
@@ -33419,7 +33447,7 @@
33419
33447
  "file": "v2-webhook-endpoint-verification.test.ts",
33420
33448
  "line": 64,
33421
33449
  "title": "no-echo, wrong-echo and a redirect are refused and persist nothing; an echo is accepted",
33422
- "explicitId": null,
33450
+ "explicitId": "openwop.requirement.0201.endpoint-verification",
33423
33451
  "citations": [
33424
33452
  {
33425
33453
  "section": "RFC 0201 §D.14",
@@ -33487,7 +33515,7 @@
33487
33515
  "file": "v2-webhook-message-id-stable.test.ts",
33488
33516
  "line": 69,
33489
33517
  "title": "every attempt of one delivery carries one webhook-id, and distinct deliveries carry distinct ids",
33490
- "explicitId": null,
33518
+ "explicitId": "openwop.requirement.0201.message-id-stable",
33491
33519
  "citations": [
33492
33520
  {
33493
33521
  "section": "RFC 0201 §C.10",
@@ -33520,7 +33548,7 @@
33520
33548
  "file": "v2-webhook-secret-rotation.test.ts",
33521
33549
  "line": 67,
33522
33550
  "title": "a rotation dual-signs for overlapSeconds, keeps OpenWOP-Signature on the previous secret, and is tenant-checked",
33523
- "explicitId": null,
33551
+ "explicitId": "openwop.requirement.0201.secret-rotation",
33524
33552
  "citations": [
33525
33553
  {
33526
33554
  "section": "RFC 0201 §E.18 / identity.md §5",
@@ -33603,7 +33631,7 @@
33603
33631
  "file": "v2-webhook-standard-webhooks-delivery.test.ts",
33604
33632
  "line": 77,
33605
33633
  "title": "a subscription that did not opt in is neither verified nor given webhook-* headers",
33606
- "explicitId": null,
33634
+ "explicitId": "openwop.requirement.0201.opt-in-only",
33607
33635
  "citations": [
33608
33636
  {
33609
33637
  "section": "RFC 0201 §B.8 / §D.15",
@@ -33637,7 +33665,7 @@
33637
33665
  "file": "v2-webhook-standard-webhooks-delivery.test.ts",
33638
33666
  "line": 110,
33639
33667
  "title": "the opt-in is validated, its 201 echoes the applied list, and no response carries the secret",
33640
- "explicitId": null,
33668
+ "explicitId": "openwop.requirement.0201.registration-validated",
33641
33669
  "citations": [
33642
33670
  {
33643
33671
  "section": "RFC 0201 §B.5–§B.6",
@@ -33669,7 +33697,7 @@
33669
33697
  "file": "v2-webhook-standard-webhooks-delivery.test.ts",
33670
33698
  "line": 155,
33671
33699
  "title": "an opted-in delivery is dual-signed and its Standard Webhooks signature covers the id",
33672
- "explicitId": null,
33700
+ "explicitId": "openwop.requirement.0201.delivery-signed",
33673
33701
  "citations": [
33674
33702
  {
33675
33703
  "section": "RFC 0201 §B",
@@ -41095,7 +41123,7 @@
41095
41123
  {
41096
41124
  "id": "openwop.it.v2-bundle-witness-preimage.every-committed-v3-bundle-re-derives-its-witnesssha256-from-the-prose-preimage",
41097
41125
  "file": "v2-bundle-witness-preimage.test.ts",
41098
- "line": 66,
41126
+ "line": 69,
41099
41127
  "title": "every committed v3 bundle re-derives its witnessSha256 from the prose preimage",
41100
41128
  "explicitId": "openwop.it.v2-bundle-witness-preimage.every-committed-v3-bundle-re-derives-its-witnesssha256-from-the-prose-preimage",
41101
41129
  "citations": [
@@ -41122,7 +41150,7 @@
41122
41150
  {
41123
41151
  "id": "openwop.it.v2-bundle-witness-preimage.the-row-comparator-is-code-unit-order-which-a-locale-collation-contradicts",
41124
41152
  "file": "v2-bundle-witness-preimage.test.ts",
41125
- "line": 80,
41153
+ "line": 83,
41126
41154
  "title": "the row comparator is code-unit order, which a locale collation contradicts",
41127
41155
  "explicitId": "openwop.it.v2-bundle-witness-preimage.the-row-comparator-is-code-unit-order-which-a-locale-collation-contradicts",
41128
41156
  "citations": [
@@ -41136,6 +41164,167 @@
41136
41164
  }
41137
41165
  ]
41138
41166
  },
41167
+ {
41168
+ "id": "openwop.it.v2-colocated-companion.a-3-the-anchor-list-is-closed-and-exact",
41169
+ "file": "v2-colocated-companion.test.ts",
41170
+ "line": 157,
41171
+ "title": "§A.3 the anchor list is closed and exact",
41172
+ "explicitId": "openwop.requirement.0216.anchor-list-closed",
41173
+ "citations": [
41174
+ {
41175
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41176
+ "requirement": "the base fixture list MUST pass the anchor gate, or every sabotage below proves nothing"
41177
+ },
41178
+ {
41179
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41180
+ "requirement": null,
41181
+ "interpolated": true
41182
+ },
41183
+ {
41184
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41185
+ "requirement": null,
41186
+ "interpolated": true
41187
+ }
41188
+ ]
41189
+ },
41190
+ {
41191
+ "id": "openwop.it.v2-colocated-companion.b-7-the-marker-is-inside-the-signed-digest",
41192
+ "file": "v2-colocated-companion.test.ts",
41193
+ "line": 175,
41194
+ "title": "§B.7 the marker is inside the signed digest",
41195
+ "explicitId": "openwop.requirement.0216.deployment-in-preimage",
41196
+ "citations": [
41197
+ {
41198
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41199
+ "requirement": "host.deployment MUST enter the witnessSha256 preimage when present"
41200
+ },
41201
+ {
41202
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41203
+ "requirement": "a bundle without the marker MUST digest exactly as before RFC 0216"
41204
+ },
41205
+ {
41206
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41207
+ "requirement": "a signed companion that sheds host.deployment MUST fail verification with witness-digest"
41208
+ },
41209
+ {
41210
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41211
+ "requirement": "the unaltered companion MUST NOT be refused for its digest"
41212
+ }
41213
+ ]
41214
+ },
41215
+ {
41216
+ "id": "openwop.it.v2-colocated-companion.c-9-a-companion-counts-only-for-listed-rows",
41217
+ "file": "v2-colocated-companion.test.ts",
41218
+ "line": 187,
41219
+ "title": "§C.9 a companion counts only for listed rows",
41220
+ "explicitId": "openwop.requirement.0216.companion-anchor-rows-only",
41221
+ "citations": [
41222
+ {
41223
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41224
+ "requirement": "the base companion MUST pair with the served-host bundle of the same image, key and configuration"
41225
+ },
41226
+ {
41227
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41228
+ "requirement": "a paired companion MUST witness its harness-trust-anchor rows"
41229
+ },
41230
+ {
41231
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41232
+ "requirement": "a paired companion MUST NOT witness a row off the anchor list, however it passed"
41233
+ },
41234
+ {
41235
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41236
+ "requirement": "an uncertified companion MUST witness nothing"
41237
+ }
41238
+ ]
41239
+ },
41240
+ {
41241
+ "id": "openwop.it.v2-colocated-companion.c-9-a-b-the-same-host-and-the-same-image-digest",
41242
+ "file": "v2-colocated-companion.test.ts",
41243
+ "line": 197,
41244
+ "title": "§C.9(a)/(b) the same host and the same image digest",
41245
+ "explicitId": "openwop.requirement.0216.companion-same-image",
41246
+ "citations": [
41247
+ {
41248
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41249
+ "requirement": "the base MUST pair"
41250
+ },
41251
+ {
41252
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41253
+ "requirement": "a commit-kind build MUST NOT pair — a commit does not name the bytes that ran"
41254
+ },
41255
+ {
41256
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41257
+ "requirement": "image digests differing in one byte MUST NOT pair"
41258
+ },
41259
+ {
41260
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41261
+ "requirement": "a companion of another host MUST NOT pair"
41262
+ }
41263
+ ]
41264
+ },
41265
+ {
41266
+ "id": "openwop.it.v2-colocated-companion.c-9-c-signed-under-a-key-the-served-bundle-publishes",
41267
+ "file": "v2-colocated-companion.test.ts",
41268
+ "line": 209,
41269
+ "title": "§C.9(c) signed under a key the served bundle publishes",
41270
+ "explicitId": "openwop.requirement.0216.companion-attributable",
41271
+ "citations": [
41272
+ {
41273
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41274
+ "requirement": "the base MUST pair"
41275
+ },
41276
+ {
41277
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41278
+ "requirement": "a companion whose attestation does not verify under the named published key MUST NOT pair"
41279
+ },
41280
+ {
41281
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41282
+ "requirement": "a companion signed under a key the served bundle does not publish MUST NOT pair"
41283
+ }
41284
+ ]
41285
+ },
41286
+ {
41287
+ "id": "openwop.it.v2-colocated-companion.c-9-d-equivalent-discovery-origin-and-oidc-issuers-aside",
41288
+ "file": "v2-colocated-companion.test.ts",
41289
+ "line": 218,
41290
+ "title": "§C.9(d) equivalent discovery, origin and oidc issuers aside",
41291
+ "explicitId": "openwop.requirement.0216.companion-equivalent",
41292
+ "citations": [
41293
+ {
41294
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41295
+ "requirement": "a companion differing only in origin and oidc issuers MUST pair"
41296
+ },
41297
+ {
41298
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41299
+ "requirement": "a different revocationWindowSeconds MUST NOT pair — it is a different claim"
41300
+ },
41301
+ {
41302
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41303
+ "requirement": "a difference in a non-oidc lane MUST NOT pair"
41304
+ }
41305
+ ]
41306
+ },
41307
+ {
41308
+ "id": "openwop.it.v2-colocated-companion.c-10-the-committed-unmarked-companion-witnesses-nothing",
41309
+ "file": "v2-colocated-companion.test.ts",
41310
+ "line": 227,
41311
+ "title": "§C.10 the committed unmarked companion witnesses nothing",
41312
+ "explicitId": "openwop.requirement.0216.legacy-companion",
41313
+ "citations": [
41314
+ {
41315
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41316
+ "requirement": "the committed 2026-09-25 companion MUST be recognised as a companion by its witnessSha256"
41317
+ },
41318
+ {
41319
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41320
+ "requirement": "the committed unmarked companion MUST witness nothing (commit-kind build, throwaway key)"
41321
+ },
41322
+ {
41323
+ "section": "RFC 0216 · spec/v2/core/conformance.md §\"Bundle v3\"",
41324
+ "requirement": "the legacy file carries no marker — it is caught by digest, not by a field it could drop"
41325
+ }
41326
+ ]
41327
+ },
41139
41328
  {
41140
41329
  "id": "openwop.it.v2-corpus-tag-pinned.every-vendoring-consumer-in-the-cross-repo-inventory-records-a-published-corpus",
41141
41330
  "file": "v2-corpus-tag-pinned.test.ts",
@@ -41522,7 +41711,7 @@
41522
41711
  "file": "v2-lane-exp-only-schema.test.ts",
41523
41712
  "line": 127,
41524
41713
  "title": "the gate refuses an enum member with no §2.2 row, and a suite map the table does not license",
41525
- "explicitId": null,
41714
+ "explicitId": "openwop.requirement.0210.lane-rule-surfaces-agree",
41526
41715
  "citations": [
41527
41716
  {
41528
41717
  "section": "scripts/check-lane-revocation-rules.mjs",
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "_comment": "Provenance of @openwop/spec-artifacts (RFC 0168 §D.2). files: SHA-256 per file; the conformance suite compares the installed peer against dist/spec-artifacts.lock.json at start.",
3
3
  "package": "@openwop/spec-artifacts",
4
- "version": "2.40.1",
5
- "corpusTag": "v2.40.1",
4
+ "version": "2.40.3",
5
+ "corpusTag": "v2.40.3",
6
6
  "files": {
7
7
  "api/.redocly.lint-ignore.yaml": "bf5a8350b88a72fa43f59605ed8d903ed24b6cfccda5e45509c9f6ed9ee4e712",
8
8
  "api/asyncapi.yaml": "d5ecb9ee6114582be3b1f662c84bfac9ae96dae7bacb853e461168f70a8e1c7d",
9
9
  "api/grpc/openwop.proto": "c3e72bb17cba514ee98feb6434e6c9b6ea6795bfd086489ec69fd882dd1ad977",
10
10
  "api/openapi.yaml": "6366b5514be71098e9ea41fc81ff52bc39db1a547b353c0b344cc2a2bf5370aa",
11
11
  "api/redocly.yaml": "b0604c89b2ca6d5076ec25725c539dad44a741a811fe524439ee6daef8baa09f",
12
- "api/seams-v2.yaml": "23c87c259cbe4b6d087faa9f358684921d400a11330bde6b27c8cacbf0b16d78",
13
- "api/v2/asyncapi.yaml": "3629ae4718168e424aee3e93b3c785df904a12229a2c58c0eec0ecaf9f8f5b2e",
14
- "api/v2/openapi.yaml": "74d9beac93b861a3d191ee5e87ce047a907171df6ecdb3fcb0854d28e8df119c",
12
+ "api/seams-v2.yaml": "96b5b49ba8aab1595b547d568ece7c4fb9fae9d7bdde29aff7c39f20ef31b120",
13
+ "api/v2/asyncapi.yaml": "cc4d94df8eb1e168f30f8c12279bc65cf34c948a5ed95cc062288728fc605618",
14
+ "api/v2/openapi.yaml": "5029e637cd61c900b169cb3f79e61e48b3ee89a6c3c11f3262158bf2fa910125",
15
15
  "api/v2/redocly.yaml": "1e66b60e6118ad11a823bb620678be464d99dfe50a40e3e6f93ec9429b88b34c",
16
16
  "schemas/README.md": "0c0b737ffcf8f30e7d2809cec8a498232de710f41443212922ad8337cdde0b51",
17
17
  "schemas/a2a-task-state.schema.json": "75d5049dea8bd873ff0e7546f1c60c8d36c219bec7084264360be54a8be30ae1",
@@ -117,7 +117,7 @@
117
117
  "schemas/v2/audit-verify-result.schema.json": "a748dfadb5155adfde8a91045e76b0db6695005fe559035d71670fdd55edb3ba",
118
118
  "schemas/v2/budget-policy.schema.json": "c7449daeb6e1d95e7a047b8c2814d3d54748697c27046972834874867d9b5f4c",
119
119
  "schemas/v2/capabilities.schema.json": "740944d7f0a00c91308449f3a3f52fa7b91b16b8fd36a0171b917afe9f4b0f09",
120
- "schemas/v2/certification-bundle.schema.json": "67ac56bbf5f8deeec58b32e8d7bc9ce854a6a8c3cd81693e65192e5c3b726154",
120
+ "schemas/v2/certification-bundle.schema.json": "82ce31a1ed6c7e21b0ba88ff62a7b8b768fc3b176b1d06fce023203830b94725",
121
121
  "schemas/v2/channel-presence-payload.schema.json": "4eeb224910e6f7eee3ab5e7c3899559c25c83a26d0022e0ad195c4672611977a",
122
122
  "schemas/v2/channel-written-payload.schema.json": "ccecff3c71a3275ad8db035ac0e04db25e6f8d23cf091ddbcd5a60d1be1cbb6b",
123
123
  "schemas/v2/chat-card-pack-manifest.schema.json": "92a57db2fd4b2463f14ef155fef8e3f18afc78960b646459dcf32efc79ff6bf5",
@@ -204,13 +204,13 @@
204
204
  "schemas/workspace-file.schema.json": "464de85c2a068243084ee9c1d969bc7cd5d8f7948574e58450d6493c38a0e1e4",
205
205
  "spec/v1/alias-detectors.json": "2401fcb1c18cdd688c018b3d716ae6bca85c5e356220ee2b793bd9d81872412d",
206
206
  "spec/v1/capability-declaration-classes.json": "e7729aed5c4b4e1dd02abab0530f14cc95f5d4070fe51fb139e7f5cccefa00c6",
207
- "spec/v1/core-standard-manifest.json": "77d77c3ee245f8f7855a530a3aa610a0a7c00a26df6c97962f1600c93e8b13c1",
207
+ "spec/v1/core-standard-manifest.json": "c8d01314ab747038fb9b3ef17552d336f61211591b4af07379e65f65a6e55454",
208
208
  "spec/v1/deprecations.json": "2d03f4729810280147ea08c630ea65434f2dc5370567d0aac41c3595f8337d40",
209
209
  "spec/v1/deprecations.schema.json": "3e393c405d2a41b467d8c5e3c468549078df1ce6a6d2588fc488097b95d9b55b",
210
210
  "spec/v1/event-codemap.json": "3da60d884157793a360da532a9fcbbfb5285636db325a74cec94b34622186d97",
211
211
  "spec/v1/event-codemap.schema.json": "d05933b2e88103aff51a2f774df97b9bda065e0fc88dbd9b114cc47a32189174",
212
212
  "spec/v1/extensions.json": "79a60754aa16cbdbdb604f8e5c00038af535a1690a4d07bd5ff7c38f0256a7bc",
213
- "spec/v1/gaps.json": "45483b0932d4b2a80b0781419abc697f7d363be46bddfd8163a48364b8f76a36",
213
+ "spec/v1/gaps.json": "41e5bbd50515eb08923a29a79dfeb41d045f2b28dec9b2af3473c18db148c7be",
214
214
  "spec/v1/gaps.schema.json": "8fd83259f556553c9df0f53e7a82ca8c2a4771d471197f69b4e2ae0ceeacfd66",
215
215
  "spec/v1/migrations.json": "8839497d6a4830b53fa7867014a8336f0d725ef2346352e54fb580b7947897af",
216
216
  "spec/v1/migrations.schema.json": "886779aa6c22e646db097f5df210adb018a4dd14a7b815465a18c8a7056c8f72",
@@ -218,7 +218,7 @@
218
218
  "spec/v1/spec-gaps.json": "ea9612af55bea9dae3e82223d4f714243f8f590b0193f1188257b13491a38afc",
219
219
  "spec/v2/README.md": "ccfed7d978ce7293a6d8f3c0f6045835dfb7e488f2b67a68f6b04d67c4b0cfc9",
220
220
  "spec/v2/core/capabilities.md": "e22381fed3a93376ad478fa7f07571fdad9653aefd7c05f189a2ef45a49f6c63",
221
- "spec/v2/core/conformance.md": "38ebc9e56a830d0ee0ade429b81b0cd302c23e49a13647b1b902275262d6610d",
221
+ "spec/v2/core/conformance.md": "e4d3b34ef5b7c6a34675ed59a086143e8bfd0e00d0d04ce0f2a2ec6245275084",
222
222
  "spec/v2/core/connection-packs.md": "7257339a4fc125011bf89961588c949cb058a0c0f7d9808ad08a5288deb3f8fc",
223
223
  "spec/v2/core/conversation.md": "c9a937e410fdb4e092cec2f05a7cab8b5232745090cfb20041c03c70ccbb5cdc",
224
224
  "spec/v2/core/errors.md": "619cd74381c41acf33d012eb1afd834e148ac292663a1a6fa6744dbaff9661d9",
@@ -231,7 +231,7 @@
231
231
  "spec/v2/core/interop.md": "9a6b37e07c0235856199ace6b3a84f592fa5903fcf6c442f8a18f4d6b6aa5525",
232
232
  "spec/v2/core/interrupt.md": "1dc94f7c791dd5a547b1abafde6a8a76acd3d2993d288057f302f57911dc83bf",
233
233
  "spec/v2/core/node-pack-runtimes.md": "c435ad506f618831b6c0a9fd9150d83a5dc6caa1e3d755b949af2ff8949f1140",
234
- "spec/v2/core/oauth.md": "08e558a742259e75cfb2123f4c364d238dc4c57eea1a3c25d8f420ab4dff8244",
234
+ "spec/v2/core/oauth.md": "38ec0e70d46f328430138559095f261ae4fcd3d32c2d994a2d3e630a062c0e6c",
235
235
  "spec/v2/core/overview.md": "8f9d4a68b6185664e40d226cb82d9a9270a6c6630e3db59bddff300be781947d",
236
236
  "spec/v2/core/packs.md": "91cd577b4a636c1587ef78742e583a203244b8508b289b01a18a8ef2ef0a9b3e",
237
237
  "spec/v2/core/persistence.md": "d32736bd74e51df7c552565b4105a8ec801ece6d2292c8676421368ee9bffec1",
@@ -240,7 +240,7 @@
240
240
  "spec/v2/core/security-defaults.md": "500471a8db7af9b776ac40b4a9a278c9f3d45e1c1dead880114e7fadc7bee37d",
241
241
  "spec/v2/core/tool-catalog.md": "35f1a3fd509db0fc0490ddf400686fe94dc4b20c98064d5ebe776da516153e60",
242
242
  "spec/v2/core/versioning.md": "0aded71d090c8358c3ce17763c120cfc1cc42531a5eaa1b8a2a7016ed9594069",
243
- "spec/v2/core/webhooks.md": "95880896e37e5b7096693a75203cf0ed70cefa09959230e17b45aa9193078eff",
243
+ "spec/v2/core/webhooks.md": "2a44b100c42dd841fe2b8f87179a981be6c0dd26608ce1b14e077318c4ac8201",
244
244
  "spec/v2/core/workflow-chain-packs.md": "ee45d3fede3bb6f0cc6abcf0d6c929c7cd213a0fbe862b738a998f929c4d1102",
245
245
  "spec/v2/corrections.json": "cc74ffde74384b0f261a4f625871d922e8661d654d647a8534e21036595cb280",
246
246
  "spec/v2/corrections.schema.json": "4ac595b9a6d7f66d53de03fe0edbe0dc58de46426932387bfdc0ceb3cf949a3e",
@@ -284,6 +284,8 @@
284
284
  "spec/v2/facets/supportedEnvelopes.schema.json": "644f22cc2236e30a611b5b7f1ba0458ff1925d68b94c514d9672583224e126bd",
285
285
  "spec/v2/facets/webhooks.schema.json": "2fac635ee5fbc10a14a1a46cf512a11bac660bfbabe0aea79f6c7b657ecb9e4e",
286
286
  "spec/v2/facets/workflowChainPacks.schema.json": "ea625ce818fbeb746478f00f31f96ee9613d538e4409c258c1bfb517acdeaba9",
287
+ "spec/v2/harness-trust-anchors.json": "6007b92eae16a070fbc3777424efb0abfe865fda89d096963109b96282b91205",
288
+ "spec/v2/harness-trust-anchors.schema.json": "372b5d92337c893d3449eff3f6bfd009ac09fdac285296d8bdbe0a08fff9e34c",
287
289
  "spec/v2/id-field-bindings.json": "9f6fd280250447e26a6704811c352bb8f2ff6c4bd242befe3da0ba38962370e9",
288
290
  "spec/v2/interop-map.json": "02255dafe7eb55f61ca7f9ae7c21f079d1848a6756991343088975ac9d184b8d",
289
291
  "spec/v2/interop-map.schema.json": "0017c882df34ee215e2e0729de051490e09d43aac3d2c949285698ed51832f12",
@@ -292,9 +294,9 @@
292
294
  "spec/v2/path-manifest.json": "ae9b56d03a701061fd48ad0b73cb0373493f6a4547da92763b422295b5e19535",
293
295
  "spec/v2/peer-dependency-aliases.json": "d10299280abee08258502925bc327293ee413e0108cd6e6ec75ff6110653308d",
294
296
  "spec/v2/profiles.json": "0636f19fceae625390003a347e70ef4797d84766b5c24ce8a02cea52aadebca4",
295
- "spec/v2/release.json": "c24fde3d12b1732d9f0162ef0a0596ebd24501935cd28801eb892fbb6ec57949",
297
+ "spec/v2/release.json": "4c84997343779f46a54f9c4caf3d02714abc563f618b25729ca4b52468a23d39",
296
298
  "spec/v2/retention-floors.json": "eaf3722d95c79947af1d4269ef85117e126518c588cfcf1a2b21b97269f51624",
297
- "spec/v2/surface-baseline.json": "72d51a1bd81cbe3cee07f9ad0ab7b481b60d4e74e651704e9b3242c49c93ec11"
299
+ "spec/v2/surface-baseline.json": "2f1da906609307ec885cb04c36d7e688cd3124933759c88dc9ae3fa0ee9ec88b"
298
300
  },
299
- "corpusCommit": "470ee4d7a2cb94ddb893d82d57ade4d95644d74b"
301
+ "corpusCommit": "5d3d440cac757fb2b6c08452f64785eaeda086d3"
300
302
  }