@openwop/openwop-conformance 2.45.15 → 2.45.17

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +2 -2
  3. package/dist/spec-artifacts.lock.json +2 -2
  4. package/package.json +2 -2
  5. package/requirements.json +1335 -14
  6. package/scenario-majors.json +104 -2
  7. package/schemas/CORPUS-STAMP.json +13 -13
  8. package/src/lib/artifact-schema-url-witness.ts +83 -0
  9. package/src/lib/dispatch-witness.ts +212 -0
  10. package/src/lib/family-advert-witness.ts +204 -5
  11. package/src/lib/fixture-run-observer.ts +97 -0
  12. package/src/lib/prompt-library-witness.ts +11 -2
  13. package/src/lib/provider-usage-witness.ts +63 -0
  14. package/src/lib/run-graph-double.ts +144 -0
  15. package/src/lib/subworkflow-witness.ts +192 -0
  16. package/src/scenarios/v2-agent-runtime-advertisement.test.ts +51 -0
  17. package/src/scenarios/v2-ai-envelope-advertisement.test.ts +43 -0
  18. package/src/scenarios/v2-artifact-created-static.test.ts +92 -0
  19. package/src/scenarios/v2-artifact-type-schema-url.test.ts +44 -0
  20. package/src/scenarios/v2-artifact-types-advertisement.test.ts +64 -0
  21. package/src/scenarios/v2-authorization-advertisement.test.ts +66 -0
  22. package/src/scenarios/v2-channel-presence-advertisement.test.ts +41 -0
  23. package/src/scenarios/v2-conversation-turn-model-provenance-advertisement.test.ts +41 -0
  24. package/src/scenarios/v2-conversation-turn-model-provenance.test.ts +110 -0
  25. package/src/scenarios/v2-credentials-advertisement.test.ts +66 -0
  26. package/src/scenarios/v2-data-residency-admission.test.ts +98 -0
  27. package/src/scenarios/v2-data-residency-advertisement.test.ts +52 -0
  28. package/src/scenarios/v2-dead-letter-advertisement.test.ts +54 -0
  29. package/src/scenarios/v2-discovery-etag.test.ts +86 -0
  30. package/src/scenarios/v2-dispatch-input-mapping.test.ts +70 -0
  31. package/src/scenarios/v2-dispatch-loop.test.ts +80 -0
  32. package/src/scenarios/v2-envelope-contracts-advertisement.test.ts +40 -0
  33. package/src/scenarios/v2-export-bundle-static.test.ts +108 -0
  34. package/src/scenarios/v2-multi-party-conversation-advertisement.test.ts +52 -0
  35. package/src/scenarios/v2-node-pack-runtimes-advertisement.test.ts +52 -0
  36. package/src/scenarios/v2-nondeterminism-policy-advertisement.test.ts +41 -0
  37. package/src/scenarios/v2-portability-advertisement.test.ts +63 -0
  38. package/src/scenarios/v2-prompt-library-advertisement.test.ts +40 -0
  39. package/src/scenarios/v2-prompt-list-and-fetch.test.ts +4 -2
  40. package/src/scenarios/v2-provider-usage-advertisement.test.ts +61 -0
  41. package/src/scenarios/v2-provider-usage-emission.test.ts +50 -0
  42. package/src/scenarios/v2-provider-usage-payload-static.test.ts +92 -0
  43. package/src/scenarios/v2-purpose-propagation-advertisement.test.ts +52 -0
  44. package/src/scenarios/v2-run-snapshot-etag.test.ts +35 -22
  45. package/src/scenarios/v2-scheduling-advertisement.test.ts +55 -0
  46. package/src/scenarios/v2-self-hosted-runner-advertisement.test.ts +52 -0
  47. package/src/scenarios/v2-self-hosted-runner-frames-static.test.ts +121 -0
  48. package/src/scenarios/v2-sub-workflow-advertisement.test.ts +53 -0
  49. package/src/scenarios/v2-subworkflow-input-mapping.test.ts +74 -0
  50. package/src/scenarios/v2-subworkflow-linkage.test.ts +76 -0
  51. package/src/scenarios/v2-ui-plugins-advertisement.test.ts +85 -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": 690,
6
- "tests": 2652,
7
- "withStableId": 2652,
5
+ "files": 725,
6
+ "tests": 2747,
7
+ "withStableId": 2747,
8
8
  "interpolatedTitles": 0,
9
- "explicitIds": 2529
9
+ "explicitIds": 2613
10
10
  },
11
11
  "records": [
12
12
  {
@@ -28252,6 +28252,48 @@
28252
28252
  }
28253
28253
  ]
28254
28254
  },
28255
+ {
28256
+ "id": "openwop.it.v2-agent-runtime-advertisement.the-agentruntime-record-validates-against-its-capabilities-schema-seat",
28257
+ "file": "v2-agent-runtime-advertisement.test.ts",
28258
+ "line": 34,
28259
+ "title": "the agentRuntime record validates against its capabilities-schema seat",
28260
+ "explicitId": "openwop.requirement.agent-runtime.advert-record-schema",
28261
+ "citations": [
28262
+ {
28263
+ "section": null,
28264
+ "requirement": null,
28265
+ "interpolated": true
28266
+ }
28267
+ ]
28268
+ },
28269
+ {
28270
+ "id": "openwop.it.v2-agent-runtime-advertisement.advertising-agentruntime-also-advertises-agents-manifestruntime",
28271
+ "file": "v2-agent-runtime-advertisement.test.ts",
28272
+ "line": 43,
28273
+ "title": "advertising agentRuntime also advertises agents.manifestRuntime",
28274
+ "explicitId": "openwop.requirement.agent-runtime.implies-manifest-runtime",
28275
+ "citations": [
28276
+ {
28277
+ "section": null,
28278
+ "requirement": null,
28279
+ "interpolated": true
28280
+ }
28281
+ ]
28282
+ },
28283
+ {
28284
+ "id": "openwop.it.v2-ai-envelope-advertisement.the-aienvelope-record-validates-against-its-capabilities-schema-seat",
28285
+ "file": "v2-ai-envelope-advertisement.test.ts",
28286
+ "line": 35,
28287
+ "title": "the aiEnvelope record validates against its capabilities-schema seat",
28288
+ "explicitId": "openwop.requirement.ai-envelope.advert-record-schema",
28289
+ "citations": [
28290
+ {
28291
+ "section": null,
28292
+ "requirement": null,
28293
+ "interpolated": true
28294
+ }
28295
+ ]
28296
+ },
28255
28297
  {
28256
28298
  "id": "openwop.it.v2-ai-envelope-shape-static.ai-envelope-schema-json-compiles-under-ajv-2020",
28257
28299
  "file": "v2-ai-envelope-shape-static.test.ts",
@@ -28734,6 +28776,165 @@
28734
28776
  }
28735
28777
  ]
28736
28778
  },
28779
+ {
28780
+ "id": "openwop.it.v2-artifact-created-static.artifact-created-is-a-registered-v2-run-event-type",
28781
+ "file": "v2-artifact-created-static.test.ts",
28782
+ "line": 51,
28783
+ "title": "artifact.created is a registered v2 run-event type",
28784
+ "explicitId": "openwop.requirement.artifact-types.created-event-type-registered",
28785
+ "citations": [
28786
+ {
28787
+ "section": "artifact-type-packs.md §Registration",
28788
+ "requirement": null,
28789
+ "interpolated": true
28790
+ }
28791
+ ]
28792
+ },
28793
+ {
28794
+ "id": "openwop.it.v2-artifact-created-static.accepts-a-well-formed-payload-with-either-provenance-or-none",
28795
+ "file": "v2-artifact-created-static.test.ts",
28796
+ "line": 56,
28797
+ "title": "accepts a well-formed payload, with either provenance or none",
28798
+ "explicitId": "openwop.requirement.artifact-types.created-registration-source-enum",
28799
+ "citations": [
28800
+ {
28801
+ "section": "artifact-type-packs.md §Registration",
28802
+ "requirement": null,
28803
+ "interpolated": true
28804
+ }
28805
+ ]
28806
+ },
28807
+ {
28808
+ "id": "openwop.it.v2-artifact-created-static.rejects-a-payload-without-s",
28809
+ "file": "v2-artifact-created-static.test.ts",
28810
+ "line": 64,
28811
+ "title": "rejects a payload without %s",
28812
+ "explicitId": "openwop.requirement.artifact-types.created-requires-artifact-type",
28813
+ "citations": [
28814
+ {
28815
+ "section": "artifact-type-packs.md §Registration",
28816
+ "requirement": null,
28817
+ "interpolated": true
28818
+ }
28819
+ ]
28820
+ },
28821
+ {
28822
+ "id": "openwop.it.v2-artifact-created-static.rejects-a-registrationsource-outside-pack-host",
28823
+ "file": "v2-artifact-created-static.test.ts",
28824
+ "line": 70,
28825
+ "title": "rejects a registrationSource outside pack | host",
28826
+ "explicitId": "openwop.requirement.artifact-types.created-registration-source-enum",
28827
+ "citations": [
28828
+ {
28829
+ "section": "artifact-type-packs.md §Registration",
28830
+ "requirement": "registrationSource MUST be pack or host"
28831
+ }
28832
+ ]
28833
+ },
28834
+ {
28835
+ "id": "openwop.it.v2-artifact-created-static.the-discovery-per-type-registrationsource-carries-the-same-vocabulary-as-the-eve",
28836
+ "file": "v2-artifact-created-static.test.ts",
28837
+ "line": 74,
28838
+ "title": "the discovery per-type registrationSource carries the same vocabulary as the event",
28839
+ "explicitId": "openwop.requirement.artifact-types.created-registration-source-enum",
28840
+ "citations": [
28841
+ {
28842
+ "section": "artifact-type-packs.md §Registration",
28843
+ "requirement": "artifact.created.registrationSource MUST be the pack | host enum"
28844
+ },
28845
+ {
28846
+ "section": "capabilities.schema.json §artifactTypes.types",
28847
+ "requirement": "the advertised per-type registrationSource MUST use the vocabulary artifact.created carries"
28848
+ }
28849
+ ]
28850
+ },
28851
+ {
28852
+ "id": "openwop.it.v2-artifact-created-static.rejects-a-non-boolean-registered",
28853
+ "file": "v2-artifact-created-static.test.ts",
28854
+ "line": 83,
28855
+ "title": "rejects a non-boolean registered",
28856
+ "explicitId": "openwop.requirement.artifact-types.created-registered-boolean",
28857
+ "citations": [
28858
+ {
28859
+ "section": "artifact-type-packs.md §Registration",
28860
+ "requirement": "registered MUST be a boolean"
28861
+ }
28862
+ ]
28863
+ },
28864
+ {
28865
+ "id": "openwop.it.v2-artifact-created-static.rejects-an-unknown-key-and-carries-a-vendor-key-under-the-rfc-0185-hatch",
28866
+ "file": "v2-artifact-created-static.test.ts",
28867
+ "line": 87,
28868
+ "title": "rejects an unknown key, and carries a vendor key under the RFC 0185 hatch",
28869
+ "explicitId": "openwop.requirement.artifact-types.created-payload-closed",
28870
+ "citations": [
28871
+ {
28872
+ "section": "artifact-type-packs.md §Registration",
28873
+ "requirement": "an unknown key on artifact.created MUST be rejected"
28874
+ },
28875
+ {
28876
+ "section": "run-event-payloads.schema.json §artifactCreated (RFC 0185)",
28877
+ "requirement": null,
28878
+ "interpolated": true
28879
+ }
28880
+ ]
28881
+ },
28882
+ {
28883
+ "id": "openwop.it.v2-artifact-type-schema-url.every-host-registered-type-with-an-advertised-schemaversion-has-its-schema-serve",
28884
+ "file": "v2-artifact-type-schema-url.test.ts",
28885
+ "line": 34,
28886
+ "title": "every host-registered type with an advertised schemaVersion has its schema served at {HostBase}/schemas/artifacts/{id}.schema.json",
28887
+ "explicitId": "openwop.requirement.artifact-types.host-registered-schema-served",
28888
+ "citations": [
28889
+ {
28890
+ "section": null,
28891
+ "requirement": null,
28892
+ "interpolated": true
28893
+ }
28894
+ ]
28895
+ },
28896
+ {
28897
+ "id": "openwop.it.v2-artifact-types-advertisement.the-artifacttypes-record-validates-against-its-capabilities-schema-seat",
28898
+ "file": "v2-artifact-types-advertisement.test.ts",
28899
+ "line": 41,
28900
+ "title": "the artifactTypes record validates against its capabilities-schema seat",
28901
+ "explicitId": "openwop.requirement.artifact-types.advert-record-schema",
28902
+ "citations": [
28903
+ {
28904
+ "section": null,
28905
+ "requirement": null,
28906
+ "interpolated": true
28907
+ }
28908
+ ]
28909
+ },
28910
+ {
28911
+ "id": "openwop.it.v2-artifact-types-advertisement.artifacttypes-store-render-and-export-are-well-formed",
28912
+ "file": "v2-artifact-types-advertisement.test.ts",
28913
+ "line": 49,
28914
+ "title": "artifactTypes.store, render and export are well-formed",
28915
+ "explicitId": "openwop.requirement.artifact-types.global-facets-shape",
28916
+ "citations": [
28917
+ {
28918
+ "section": null,
28919
+ "requirement": null,
28920
+ "interpolated": true
28921
+ }
28922
+ ]
28923
+ },
28924
+ {
28925
+ "id": "openwop.it.v2-artifact-types-advertisement.every-artifacttypes-types-entry-validates-against-its-seat",
28926
+ "file": "v2-artifact-types-advertisement.test.ts",
28927
+ "line": 57,
28928
+ "title": "every artifactTypes.types entry validates against its seat",
28929
+ "explicitId": "openwop.requirement.artifact-types.per-type-entry-shape",
28930
+ "citations": [
28931
+ {
28932
+ "section": null,
28933
+ "requirement": null,
28934
+ "interpolated": true
28935
+ }
28936
+ ]
28937
+ },
28737
28938
  {
28738
28939
  "id": "openwop.it.v2-assurance-downgrade-audited.an-identity-below-the-lane-floor-is-refused-with-sender-constraint-missing",
28739
28940
  "file": "v2-assurance-downgrade-audited.test.ts",
@@ -28839,6 +29040,48 @@
28839
29040
  }
28840
29041
  ]
28841
29042
  },
29043
+ {
29044
+ "id": "openwop.it.v2-authorization-advertisement.the-authorization-record-validates-against-its-capabilities-schema-seat",
29045
+ "file": "v2-authorization-advertisement.test.ts",
29046
+ "line": 40,
29047
+ "title": "the authorization record validates against its capabilities-schema seat",
29048
+ "explicitId": "openwop.requirement.authorization.advert-record-schema",
29049
+ "citations": [
29050
+ {
29051
+ "section": null,
29052
+ "requirement": null,
29053
+ "interpolated": true
29054
+ }
29055
+ ]
29056
+ },
29057
+ {
29058
+ "id": "openwop.it.v2-authorization-advertisement.authorization-failclosed-is-true-when-present",
29059
+ "file": "v2-authorization-advertisement.test.ts",
29060
+ "line": 49,
29061
+ "title": "authorization.failClosed is true when present",
29062
+ "explicitId": "openwop.requirement.authorization.fail-closed-true",
29063
+ "citations": [
29064
+ {
29065
+ "section": null,
29066
+ "requirement": null,
29067
+ "interpolated": true
29068
+ }
29069
+ ]
29070
+ },
29071
+ {
29072
+ "id": "openwop.it.v2-authorization-advertisement.every-authorization-roles-entry-has-a-non-empty-role-and-a-scopes-list",
29073
+ "file": "v2-authorization-advertisement.test.ts",
29074
+ "line": 58,
29075
+ "title": "every authorization.roles entry has a non-empty role and a scopes list",
29076
+ "explicitId": "openwop.requirement.authorization.roles-shape",
29077
+ "citations": [
29078
+ {
29079
+ "section": null,
29080
+ "requirement": null,
29081
+ "interpolated": true
29082
+ }
29083
+ ]
29084
+ },
28842
29085
  {
28843
29086
  "id": "openwop.it.v2-bound-id-kinds.subscriptionid-post-webhooks-mints-a-bound-webhookid-the-projected-segment-is-ac",
28844
29087
  "file": "v2-bound-id-kinds.test.ts",
@@ -29339,6 +29582,20 @@
29339
29582
  }
29340
29583
  ]
29341
29584
  },
29585
+ {
29586
+ "id": "openwop.it.v2-channel-presence-advertisement.the-channelpresence-record-validates-against-its-capabilities-schema-seat",
29587
+ "file": "v2-channel-presence-advertisement.test.ts",
29588
+ "line": 33,
29589
+ "title": "the channelPresence record validates against its capabilities-schema seat",
29590
+ "explicitId": "openwop.requirement.channel-presence.advert-record-schema",
29591
+ "citations": [
29592
+ {
29593
+ "section": null,
29594
+ "requirement": null,
29595
+ "interpolated": true
29596
+ }
29597
+ ]
29598
+ },
29342
29599
  {
29343
29600
  "id": "openwop.it.v2-client-version-header.a-client-at-the-floor-is-not-below-it-equal-on-major-minor-the-patch-never-decid",
29344
29601
  "file": "v2-client-version-header.test.ts",
@@ -29613,6 +29870,48 @@
29613
29870
  }
29614
29871
  ]
29615
29872
  },
29873
+ {
29874
+ "id": "openwop.it.v2-conversation-turn-model-provenance-advertisement.the-conversationturnmodelprovenance-record-validates-against-its-capabilities-sc",
29875
+ "file": "v2-conversation-turn-model-provenance-advertisement.test.ts",
29876
+ "line": 33,
29877
+ "title": "the conversationTurnModelProvenance record validates against its capabilities-schema seat",
29878
+ "explicitId": "openwop.requirement.conversation-turn-model-provenance.advert-record-schema",
29879
+ "citations": [
29880
+ {
29881
+ "section": null,
29882
+ "requirement": null,
29883
+ "interpolated": true
29884
+ }
29885
+ ]
29886
+ },
29887
+ {
29888
+ "id": "openwop.it.v2-conversation-turn-model-provenance.a-host-that-stamps-agent-model-on-a-turn-advertises-conversationturnmodelprovena",
29889
+ "file": "v2-conversation-turn-model-provenance.test.ts",
29890
+ "line": 90,
29891
+ "title": "a host that stamps agent.model on a turn advertises conversationTurnModelProvenance",
29892
+ "explicitId": "openwop.requirement.conversation-turn-model-provenance.stamp-requires-advert",
29893
+ "citations": [
29894
+ {
29895
+ "section": "conversation.md §conversationTurnModelProvenance",
29896
+ "requirement": null,
29897
+ "interpolated": true
29898
+ }
29899
+ ]
29900
+ },
29901
+ {
29902
+ "id": "openwop.it.v2-conversation-turn-model-provenance.every-agent-model-stamp-carries-provider-and-model-identifiers-only",
29903
+ "file": "v2-conversation-turn-model-provenance.test.ts",
29904
+ "line": 99,
29905
+ "title": "every agent.model stamp carries provider and model identifiers only",
29906
+ "explicitId": "openwop.requirement.conversation-turn-model-provenance.stamp-closed",
29907
+ "citations": [
29908
+ {
29909
+ "section": "conversation.md §conversationTurnModelProvenance",
29910
+ "requirement": null,
29911
+ "interpolated": true
29912
+ }
29913
+ ]
29914
+ },
29616
29915
  {
29617
29916
  "id": "openwop.it.v2-conversation-turn-parts.every-conversation-exchanged-turn-carrying-parts-validates-against-the-v2-turn-d",
29618
29917
  "file": "v2-conversation-turn-parts.test.ts",
@@ -29903,6 +30202,229 @@
29903
30202
  }
29904
30203
  ]
29905
30204
  },
30205
+ {
30206
+ "id": "openwop.it.v2-credentials-advertisement.the-credentials-record-validates-against-its-capabilities-schema-seat",
30207
+ "file": "v2-credentials-advertisement.test.ts",
30208
+ "line": 40,
30209
+ "title": "the credentials record validates against its capabilities-schema seat",
30210
+ "explicitId": "openwop.requirement.credentials.advert-record-schema",
30211
+ "citations": [
30212
+ {
30213
+ "section": null,
30214
+ "requirement": null,
30215
+ "interpolated": true
30216
+ }
30217
+ ]
30218
+ },
30219
+ {
30220
+ "id": "openwop.it.v2-credentials-advertisement.credentials-scopes-is-a-subset-of-user-workspace-tenant",
30221
+ "file": "v2-credentials-advertisement.test.ts",
30222
+ "line": 49,
30223
+ "title": "credentials.scopes is a subset of user, workspace, tenant",
30224
+ "explicitId": "openwop.requirement.credentials.scopes-subset",
30225
+ "citations": [
30226
+ {
30227
+ "section": null,
30228
+ "requirement": null,
30229
+ "interpolated": true
30230
+ }
30231
+ ]
30232
+ },
30233
+ {
30234
+ "id": "openwop.it.v2-credentials-advertisement.credentials-rotation-is-none-or-two-key-overlap",
30235
+ "file": "v2-credentials-advertisement.test.ts",
30236
+ "line": 58,
30237
+ "title": "credentials.rotation is none or two-key-overlap",
30238
+ "explicitId": "openwop.requirement.credentials.rotation-value",
30239
+ "citations": [
30240
+ {
30241
+ "section": null,
30242
+ "requirement": null,
30243
+ "interpolated": true
30244
+ }
30245
+ ]
30246
+ },
30247
+ {
30248
+ "id": "openwop.it.v2-data-residency-admission.a-region-outside-dataresidency-regions-answers-422-residency-unavailable-and-cre",
30249
+ "file": "v2-data-residency-admission.test.ts",
30250
+ "line": 66,
30251
+ "title": "a region outside dataResidency.regions answers 422 residency_unavailable and creates no run",
30252
+ "explicitId": "openwop.requirement.data-residency.reject-unadvertised-region",
30253
+ "citations": [
30254
+ {
30255
+ "section": "spec/v2/core/runs.md §dataResidency",
30256
+ "requirement": null,
30257
+ "interpolated": true
30258
+ },
30259
+ {
30260
+ "section": "spec/v2/core/runs.md §dataResidency",
30261
+ "requirement": "the refusal MUST carry the registered code residency_unavailable"
30262
+ },
30263
+ {
30264
+ "section": "spec/v2/core/runs.md §dataResidency",
30265
+ "requirement": null,
30266
+ "interpolated": true
30267
+ }
30268
+ ]
30269
+ },
30270
+ {
30271
+ "id": "openwop.it.v2-data-residency-admission.a-region-inside-dataresidency-regions-is-accepted",
30272
+ "file": "v2-data-residency-admission.test.ts",
30273
+ "line": 82,
30274
+ "title": "a region inside dataResidency.regions is accepted",
30275
+ "explicitId": "openwop.requirement.data-residency.accept-advertised-region",
30276
+ "citations": [
30277
+ {
30278
+ "section": "spec/v2/core/runs.md §dataResidency",
30279
+ "requirement": null,
30280
+ "interpolated": true
30281
+ },
30282
+ {
30283
+ "section": "spec/v2/core/runs.md §dataResidency",
30284
+ "requirement": null,
30285
+ "interpolated": true
30286
+ }
30287
+ ]
30288
+ },
30289
+ {
30290
+ "id": "openwop.it.v2-data-residency-advertisement.the-dataresidency-record-validates-against-its-capabilities-schema-seat",
30291
+ "file": "v2-data-residency-advertisement.test.ts",
30292
+ "line": 35,
30293
+ "title": "the dataResidency record validates against its capabilities-schema seat",
30294
+ "explicitId": "openwop.requirement.data-residency.advert-record-schema",
30295
+ "citations": [
30296
+ {
30297
+ "section": null,
30298
+ "requirement": null,
30299
+ "interpolated": true
30300
+ }
30301
+ ]
30302
+ },
30303
+ {
30304
+ "id": "openwop.it.v2-data-residency-advertisement.dataresidency-regions-holds-unique-non-empty-region-codes",
30305
+ "file": "v2-data-residency-advertisement.test.ts",
30306
+ "line": 44,
30307
+ "title": "dataResidency.regions holds unique non-empty region codes",
30308
+ "explicitId": "openwop.requirement.data-residency.regions-shape",
30309
+ "citations": [
30310
+ {
30311
+ "section": null,
30312
+ "requirement": null,
30313
+ "interpolated": true
30314
+ }
30315
+ ]
30316
+ },
30317
+ {
30318
+ "id": "openwop.it.v2-dead-letter-advertisement.the-deadletter-record-validates-against-its-capabilities-schema-seat",
30319
+ "file": "v2-dead-letter-advertisement.test.ts",
30320
+ "line": 37,
30321
+ "title": "the deadLetter record validates against its capabilities-schema seat",
30322
+ "explicitId": "openwop.requirement.dead-letter.advert-record-schema",
30323
+ "citations": [
30324
+ {
30325
+ "section": null,
30326
+ "requirement": null,
30327
+ "interpolated": true
30328
+ }
30329
+ ]
30330
+ },
30331
+ {
30332
+ "id": "openwop.it.v2-dead-letter-advertisement.deadletter-retentiondays-is-an-integer-of-at-least-1",
30333
+ "file": "v2-dead-letter-advertisement.test.ts",
30334
+ "line": 46,
30335
+ "title": "deadLetter.retentionDays is an integer of at least 1",
30336
+ "explicitId": "openwop.requirement.dead-letter.retention-days",
30337
+ "citations": [
30338
+ {
30339
+ "section": null,
30340
+ "requirement": null,
30341
+ "interpolated": true
30342
+ }
30343
+ ]
30344
+ },
30345
+ {
30346
+ "id": "openwop.it.v2-discovery-etag.the-discovery-document-carries-an-etag",
30347
+ "file": "v2-discovery-etag.test.ts",
30348
+ "line": 58,
30349
+ "title": "the discovery document carries an ETag",
30350
+ "explicitId": "openwop.requirement.capabilities.discovery-etag-emitted",
30351
+ "citations": [
30352
+ {
30353
+ "section": "spec/v2/core/capabilities.md §1",
30354
+ "requirement": null,
30355
+ "interpolated": true
30356
+ }
30357
+ ]
30358
+ },
30359
+ {
30360
+ "id": "openwop.it.v2-discovery-etag.a-matching-if-none-match-receives-304-with-no-body-and-the-version-header-a-non",
30361
+ "file": "v2-discovery-etag.test.ts",
30362
+ "line": 65,
30363
+ "title": "a matching If-None-Match receives 304 with no body and the version header; a non-matching one receives 200",
30364
+ "explicitId": "openwop.requirement.capabilities.discovery-etag-revalidates",
30365
+ "citations": [
30366
+ {
30367
+ "section": "spec/v2/core/capabilities.md §1",
30368
+ "requirement": null,
30369
+ "interpolated": true
30370
+ },
30371
+ {
30372
+ "section": "spec/v2/core/headers.md §Request headers",
30373
+ "requirement": null,
30374
+ "interpolated": true
30375
+ },
30376
+ {
30377
+ "section": "spec/v2/core/versioning.md §1.4",
30378
+ "requirement": null,
30379
+ "interpolated": true
30380
+ },
30381
+ {
30382
+ "section": "spec/v2/core/capabilities.md §1",
30383
+ "requirement": null,
30384
+ "interpolated": true
30385
+ }
30386
+ ]
30387
+ },
30388
+ {
30389
+ "id": "openwop.it.v2-dispatch-input-mapping.inputmapping-projects-the-parent-variable-into-the-dispatched-child-inputs",
30390
+ "file": "v2-dispatch-input-mapping.test.ts",
30391
+ "line": 59,
30392
+ "title": "inputMapping projects the parent variable into the dispatched child inputs",
30393
+ "explicitId": null,
30394
+ "citations": []
30395
+ },
30396
+ {
30397
+ "id": "openwop.it.v2-dispatch-input-mapping.an-unset-parent-variable-projects-to-undefined-the-child-input-is-absent-never-n",
30398
+ "file": "v2-dispatch-input-mapping.test.ts",
30399
+ "line": 65,
30400
+ "title": "an unset parent variable projects to undefined: the child input is absent, never null",
30401
+ "explicitId": null,
30402
+ "citations": []
30403
+ },
30404
+ {
30405
+ "id": "openwop.it.v2-dispatch-loop.each-turn-records-its-decision-and-terminate-completes-the-run",
30406
+ "file": "v2-dispatch-loop.test.ts",
30407
+ "line": 63,
30408
+ "title": "each turn records its decision and terminate completes the run",
30409
+ "explicitId": null,
30410
+ "citations": []
30411
+ },
30412
+ {
30413
+ "id": "openwop.it.v2-dispatch-loop.every-recorded-decision-is-well-formed-and-the-deciding-agent-never-changes",
30414
+ "file": "v2-dispatch-loop.test.ts",
30415
+ "line": 69,
30416
+ "title": "every recorded decision is well-formed and the deciding agent never changes",
30417
+ "explicitId": null,
30418
+ "citations": []
30419
+ },
30420
+ {
30421
+ "id": "openwop.it.v2-dispatch-loop.at-executionmodel-version-5-iteration-is-1-based-and-increments-by-exactly-1-per",
30422
+ "file": "v2-dispatch-loop.test.ts",
30423
+ "line": 75,
30424
+ "title": "at executionModel.version >= 5, iteration is 1-based and increments by exactly 1 per turn",
30425
+ "explicitId": null,
30426
+ "citations": []
30427
+ },
29906
30428
  {
29907
30429
  "id": "openwop.it.v2-dual-stack-negotiation.a-run-created-through-v1-runs-with-no-header-is-readable-through-runs-under-open",
29908
30430
  "file": "v2-dual-stack-negotiation.test.ts",
@@ -30283,6 +30805,20 @@
30283
30805
  }
30284
30806
  ]
30285
30807
  },
30808
+ {
30809
+ "id": "openwop.it.v2-envelope-contracts-advertisement.the-envelopecontracts-record-validates-against-its-capabilities-schema-seat",
30810
+ "file": "v2-envelope-contracts-advertisement.test.ts",
30811
+ "line": 32,
30812
+ "title": "the envelopeContracts record validates against its capabilities-schema seat",
30813
+ "explicitId": "openwop.requirement.envelope-contracts.advert-record-schema",
30814
+ "citations": [
30815
+ {
30816
+ "section": null,
30817
+ "requirement": null,
30818
+ "interpolated": true
30819
+ }
30820
+ ]
30821
+ },
30286
30822
  {
30287
30823
  "id": "openwop.requirement.envelopes.reasoning-declared-optional-string",
30288
30824
  "file": "v2-envelope-reasoning-shape.test.ts",
@@ -30754,6 +31290,144 @@
30754
31290
  }
30755
31291
  ]
30756
31292
  },
31293
+ {
31294
+ "id": "openwop.it.v2-export-bundle-static.accepts-a-conforming-bundle-at-bundleversion-2",
31295
+ "file": "v2-export-bundle-static.test.ts",
31296
+ "line": 53,
31297
+ "title": "accepts a conforming bundle at bundleVersion \"2\"",
31298
+ "explicitId": "openwop.requirement.portability.bundle-version-2",
31299
+ "citations": [
31300
+ {
31301
+ "section": "portability.md §The export bundle",
31302
+ "requirement": null,
31303
+ "interpolated": true
31304
+ }
31305
+ ]
31306
+ },
31307
+ {
31308
+ "id": "openwop.it.v2-export-bundle-static.rejects-the-v1-bundleversion-1-and-a-missing-bundleversion",
31309
+ "file": "v2-export-bundle-static.test.ts",
31310
+ "line": 58,
31311
+ "title": "rejects the v1 bundleVersion \"1\" and a missing bundleVersion",
31312
+ "explicitId": "openwop.requirement.portability.bundle-version-2",
31313
+ "citations": [
31314
+ {
31315
+ "section": "portability.md §The export bundle",
31316
+ "requirement": "a v2 bundle MUST carry bundleVersion \"2\"; \"1\" MUST be rejected"
31317
+ },
31318
+ {
31319
+ "section": "portability.md §The export bundle",
31320
+ "requirement": "a bundle without bundleVersion MUST be rejected"
31321
+ }
31322
+ ]
31323
+ },
31324
+ {
31325
+ "id": "openwop.it.v2-export-bundle-static.rejects-an-unknown-item-kind-and-an-item-without-ref",
31326
+ "file": "v2-export-bundle-static.test.ts",
31327
+ "line": 64,
31328
+ "title": "rejects an unknown item kind and an item without ref",
31329
+ "explicitId": "openwop.requirement.portability.bundle-item-shape",
31330
+ "citations": [
31331
+ {
31332
+ "section": "portability.md §The export bundle",
31333
+ "requirement": "an unknown item kind MUST be rejected"
31334
+ },
31335
+ {
31336
+ "section": "portability.md §The export bundle",
31337
+ "requirement": "an item without a ref MUST be rejected"
31338
+ }
31339
+ ]
31340
+ },
31341
+ {
31342
+ "id": "openwop.it.v2-export-bundle-static.admits-no-s-field-at-the-bundle-root-or-under-source",
31343
+ "file": "v2-export-bundle-static.test.ts",
31344
+ "line": 69,
31345
+ "title": "admits no %s field at the bundle root or under source",
31346
+ "explicitId": "openwop.requirement.portability.bundle-no-credential-field",
31347
+ "citations": [
31348
+ {
31349
+ "section": "portability.md §The export bundle",
31350
+ "requirement": null,
31351
+ "interpolated": true
31352
+ },
31353
+ {
31354
+ "section": "portability.md §The export bundle",
31355
+ "requirement": null,
31356
+ "interpolated": true
31357
+ }
31358
+ ]
31359
+ },
31360
+ {
31361
+ "id": "openwop.it.v2-export-bundle-static.import-applied-is-a-registered-v2-run-event-type",
31362
+ "file": "v2-export-bundle-static.test.ts",
31363
+ "line": 79,
31364
+ "title": "import.applied is a registered v2 run-event type",
31365
+ "explicitId": "openwop.requirement.portability.import-applied-content-free",
31366
+ "citations": [
31367
+ {
31368
+ "section": null,
31369
+ "requirement": null,
31370
+ "interpolated": true
31371
+ }
31372
+ ]
31373
+ },
31374
+ {
31375
+ "id": "openwop.it.v2-export-bundle-static.a-counts-and-refs-payload-validates-one-carrying-item-payloads-does-not",
31376
+ "file": "v2-export-bundle-static.test.ts",
31377
+ "line": 84,
31378
+ "title": "a counts-and-refs payload validates; one carrying item payloads does not",
31379
+ "explicitId": "openwop.requirement.portability.import-applied-content-free",
31380
+ "citations": [
31381
+ {
31382
+ "section": null,
31383
+ "requirement": null,
31384
+ "interpolated": true
31385
+ },
31386
+ {
31387
+ "section": null,
31388
+ "requirement": "import.applied MUST NOT carry item payloads",
31389
+ "interpolated": true
31390
+ },
31391
+ {
31392
+ "section": null,
31393
+ "requirement": "import.applied counts MUST be the four outcome tallies only",
31394
+ "interpolated": true
31395
+ }
31396
+ ]
31397
+ },
31398
+ {
31399
+ "id": "openwop.it.v2-export-bundle-static.import-true-with-dryrun-true-validates-import-false-needs-no-dryrun",
31400
+ "file": "v2-export-bundle-static.test.ts",
31401
+ "line": 97,
31402
+ "title": "import: true with dryRun: true validates; import: false needs no dryRun",
31403
+ "explicitId": "openwop.requirement.portability.import-dry-run-schema-rule",
31404
+ "citations": [
31405
+ {
31406
+ "section": null,
31407
+ "requirement": null,
31408
+ "interpolated": true
31409
+ }
31410
+ ]
31411
+ },
31412
+ {
31413
+ "id": "openwop.it.v2-export-bundle-static.import-true-without-dryrun-or-with-dryrun-false-is-rejected",
31414
+ "file": "v2-export-bundle-static.test.ts",
31415
+ "line": 104,
31416
+ "title": "import: true without dryRun, or with dryRun: false, is rejected",
31417
+ "explicitId": "openwop.requirement.portability.import-dry-run-schema-rule",
31418
+ "citations": [
31419
+ {
31420
+ "section": null,
31421
+ "requirement": "import: true without dryRun MUST be rejected",
31422
+ "interpolated": true
31423
+ },
31424
+ {
31425
+ "section": null,
31426
+ "requirement": "import: true with dryRun: false MUST be rejected",
31427
+ "interpolated": true
31428
+ }
31429
+ ]
31430
+ },
30757
31431
  {
30758
31432
  "id": "openwop.it.v2-ext-family-claims.brand",
30759
31433
  "file": "v2-ext-family-claims.test.ts",
@@ -33270,6 +33944,34 @@
33270
33944
  }
33271
33945
  ]
33272
33946
  },
33947
+ {
33948
+ "id": "openwop.it.v2-multi-party-conversation-advertisement.the-multipartyconversation-record-validates-against-its-capabilities-schema-seat",
33949
+ "file": "v2-multi-party-conversation-advertisement.test.ts",
33950
+ "line": 35,
33951
+ "title": "the multiPartyConversation record validates against its capabilities-schema seat",
33952
+ "explicitId": "openwop.requirement.multi-party-conversation.advert-record-schema",
33953
+ "citations": [
33954
+ {
33955
+ "section": null,
33956
+ "requirement": null,
33957
+ "interpolated": true
33958
+ }
33959
+ ]
33960
+ },
33961
+ {
33962
+ "id": "openwop.it.v2-multi-party-conversation-advertisement.multipartyconversation-maxparticipants-is-an-integer-of-at-least-2",
33963
+ "file": "v2-multi-party-conversation-advertisement.test.ts",
33964
+ "line": 44,
33965
+ "title": "multiPartyConversation.maxParticipants is an integer of at least 2",
33966
+ "explicitId": "openwop.requirement.multi-party-conversation.max-participants",
33967
+ "citations": [
33968
+ {
33969
+ "section": null,
33970
+ "requirement": null,
33971
+ "interpolated": true
33972
+ }
33973
+ ]
33974
+ },
33273
33975
  {
33274
33976
  "id": "openwop.it.v2-negotiation-authenticated.an-unauthenticated-a2a-exchange-cannot-lower-the-version-below-preferredversion",
33275
33977
  "file": "v2-negotiation-authenticated.test.ts",
@@ -33329,6 +34031,48 @@
33329
34031
  }
33330
34032
  ]
33331
34033
  },
34034
+ {
34035
+ "id": "openwop.it.v2-node-pack-runtimes-advertisement.the-nodepackruntimes-record-validates-against-its-capabilities-schema-seat",
34036
+ "file": "v2-node-pack-runtimes-advertisement.test.ts",
34037
+ "line": 35,
34038
+ "title": "the nodePackRuntimes record validates against its capabilities-schema seat",
34039
+ "explicitId": "openwop.requirement.node-pack-runtimes.advert-record-schema",
34040
+ "citations": [
34041
+ {
34042
+ "section": null,
34043
+ "requirement": null,
34044
+ "interpolated": true
34045
+ }
34046
+ ]
34047
+ },
34048
+ {
34049
+ "id": "openwop.it.v2-node-pack-runtimes-advertisement.nodepackruntimes-wasm-lists-abi-versions-and-a-memory-cap-in-range",
34050
+ "file": "v2-node-pack-runtimes-advertisement.test.ts",
34051
+ "line": 44,
34052
+ "title": "nodePackRuntimes.wasm lists ABI versions and a memory cap in range",
34053
+ "explicitId": "openwop.requirement.node-pack-runtimes.wasm-facet-shape",
34054
+ "citations": [
34055
+ {
34056
+ "section": null,
34057
+ "requirement": null,
34058
+ "interpolated": true
34059
+ }
34060
+ ]
34061
+ },
34062
+ {
34063
+ "id": "openwop.it.v2-nondeterminism-policy-advertisement.the-nondeterminismpolicy-record-validates-against-its-capabilities-schema-seat",
34064
+ "file": "v2-nondeterminism-policy-advertisement.test.ts",
34065
+ "line": 33,
34066
+ "title": "the nondeterminismPolicy record validates against its capabilities-schema seat",
34067
+ "explicitId": "openwop.requirement.nondeterminism-policy.advert-record-schema",
34068
+ "citations": [
34069
+ {
34070
+ "section": null,
34071
+ "requirement": null,
34072
+ "interpolated": true
34073
+ }
34074
+ ]
34075
+ },
33332
34076
  {
33333
34077
  "id": "openwop.it.v2-oauth-client-pkce-state-iss.sends-pkce-s256-and-the-verifier-at-the-token-endpoint-hashes-to-the-challenge",
33334
34078
  "file": "v2-oauth-client-pkce-state-iss.test.ts",
@@ -34126,6 +34870,48 @@
34126
34870
  }
34127
34871
  ]
34128
34872
  },
34873
+ {
34874
+ "id": "openwop.it.v2-portability-advertisement.the-portability-record-validates-against-its-capabilities-schema-seat",
34875
+ "file": "v2-portability-advertisement.test.ts",
34876
+ "line": 40,
34877
+ "title": "the portability record validates against its capabilities-schema seat",
34878
+ "explicitId": "openwop.requirement.portability.advert-record-schema",
34879
+ "citations": [
34880
+ {
34881
+ "section": null,
34882
+ "requirement": null,
34883
+ "interpolated": true
34884
+ }
34885
+ ]
34886
+ },
34887
+ {
34888
+ "id": "openwop.it.v2-portability-advertisement.a-host-advertising-portability-import-advertises-dryrun-true",
34889
+ "file": "v2-portability-advertisement.test.ts",
34890
+ "line": 48,
34891
+ "title": "a host advertising portability.import advertises dryRun: true",
34892
+ "explicitId": "openwop.requirement.portability.import-requires-dry-run",
34893
+ "citations": [
34894
+ {
34895
+ "section": null,
34896
+ "requirement": null,
34897
+ "interpolated": true
34898
+ }
34899
+ ]
34900
+ },
34901
+ {
34902
+ "id": "openwop.it.v2-portability-advertisement.portability-kinds-lists-unique-export-bundle-item-kinds",
34903
+ "file": "v2-portability-advertisement.test.ts",
34904
+ "line": 56,
34905
+ "title": "portability.kinds lists unique export-bundle item kinds",
34906
+ "explicitId": "openwop.requirement.portability.kinds-shape",
34907
+ "citations": [
34908
+ {
34909
+ "section": null,
34910
+ "requirement": null,
34911
+ "interpolated": true
34912
+ }
34913
+ ]
34914
+ },
34129
34915
  {
34130
34916
  "id": "openwop.it.v2-preferred-version-default.preferredversion-is-a-member-of-protocolversions",
34131
34917
  "file": "v2-preferred-version-default.test.ts",
@@ -34326,10 +35112,24 @@
34326
35112
  }
34327
35113
  ]
34328
35114
  },
35115
+ {
35116
+ "id": "openwop.it.v2-prompt-library-advertisement.the-promptlibrary-record-validates-against-its-capabilities-schema-seat",
35117
+ "file": "v2-prompt-library-advertisement.test.ts",
35118
+ "line": 32,
35119
+ "title": "the promptLibrary record validates against its capabilities-schema seat",
35120
+ "explicitId": "openwop.requirement.prompt-library.advert-record-schema",
35121
+ "citations": [
35122
+ {
35123
+ "section": null,
35124
+ "requirement": null,
35125
+ "interpolated": true
35126
+ }
35127
+ ]
35128
+ },
34329
35129
  {
34330
35130
  "id": "openwop.it.v2-prompt-list-and-fetch.get-prompts-answers-items-whose-every-entry-validates",
34331
35131
  "file": "v2-prompt-list-and-fetch.test.ts",
34332
- "line": 56,
35132
+ "line": 58,
34333
35133
  "title": "GET /prompts answers items whose every entry validates",
34334
35134
  "explicitId": "openwop.requirement.prompts.list-shape",
34335
35135
  "citations": [
@@ -34343,7 +35143,7 @@
34343
35143
  {
34344
35144
  "id": "openwop.it.v2-prompt-list-and-fetch.the-kind-and-source-filters-narrow-the-list",
34345
35145
  "file": "v2-prompt-list-and-fetch.test.ts",
34346
- "line": 64,
35146
+ "line": 66,
34347
35147
  "title": "the kind and source filters narrow the list",
34348
35148
  "explicitId": "openwop.requirement.prompts.list-filters",
34349
35149
  "citations": [
@@ -34357,7 +35157,7 @@
34357
35157
  {
34358
35158
  "id": "openwop.it.v2-prompt-list-and-fetch.a-listed-template-is-fetched-by-id",
34359
35159
  "file": "v2-prompt-list-and-fetch.test.ts",
34360
- "line": 72,
35160
+ "line": 74,
34361
35161
  "title": "a listed template is fetched by id",
34362
35162
  "explicitId": "openwop.requirement.prompts.fetch-by-id",
34363
35163
  "citations": [
@@ -34369,10 +35169,10 @@
34369
35169
  ]
34370
35170
  },
34371
35171
  {
34372
- "id": "openwop.it.v2-prompt-list-and-fetch.an-etag-when-sent-revalidates-to-304",
35172
+ "id": "openwop.it.v2-prompt-list-and-fetch.advisory-an-etag-when-sent-revalidates-to-304",
34373
35173
  "file": "v2-prompt-list-and-fetch.test.ts",
34374
- "line": 80,
34375
- "title": "an ETag, when sent, revalidates to 304",
35174
+ "line": 82,
35175
+ "title": "advisory: an ETag, when sent, revalidates to 304",
34376
35176
  "explicitId": "openwop.requirement.prompts.etag-revalidation",
34377
35177
  "citations": [
34378
35178
  {
@@ -34385,7 +35185,7 @@
34385
35185
  {
34386
35186
  "id": "openwop.it.v2-prompt-list-and-fetch.an-unknown-templateid-answers-404-with-the-error-envelope",
34387
35187
  "file": "v2-prompt-list-and-fetch.test.ts",
34388
- "line": 88,
35188
+ "line": 90,
34389
35189
  "title": "an unknown templateId answers 404 with the error envelope",
34390
35190
  "explicitId": "openwop.requirement.prompts.unknown-template-404",
34391
35191
  "citations": [
@@ -34399,7 +35199,7 @@
34399
35199
  {
34400
35200
  "id": "openwop.it.v2-prompt-list-and-fetch.with-endpointssupported-unadvertised-get-prompts-answers-404-not-found",
34401
35201
  "file": "v2-prompt-list-and-fetch.test.ts",
34402
- "line": 96,
35202
+ "line": 98,
34403
35203
  "title": "with endpointsSupported unadvertised, GET /prompts answers 404 not_found",
34404
35204
  "explicitId": "openwop.requirement.prompts.endpoints-gate-off-404",
34405
35205
  "citations": [
@@ -34925,6 +35725,174 @@
34925
35725
  }
34926
35726
  ]
34927
35727
  },
35728
+ {
35729
+ "id": "openwop.it.v2-provider-usage-advertisement.the-providerusage-record-validates-against-its-capabilities-schema-seat",
35730
+ "file": "v2-provider-usage-advertisement.test.ts",
35731
+ "line": 38,
35732
+ "title": "the providerUsage record validates against its capabilities-schema seat",
35733
+ "explicitId": "openwop.requirement.provider-usage.advert-record-schema",
35734
+ "citations": [
35735
+ {
35736
+ "section": null,
35737
+ "requirement": null,
35738
+ "interpolated": true
35739
+ }
35740
+ ]
35741
+ },
35742
+ {
35743
+ "id": "openwop.it.v2-provider-usage-advertisement.providerusage-costestimates-is-one-boolean",
35744
+ "file": "v2-provider-usage-advertisement.test.ts",
35745
+ "line": 46,
35746
+ "title": "providerUsage.costEstimates is one boolean",
35747
+ "explicitId": "openwop.requirement.provider-usage.cost-estimates-boolean",
35748
+ "citations": [
35749
+ {
35750
+ "section": null,
35751
+ "requirement": null,
35752
+ "interpolated": true
35753
+ }
35754
+ ]
35755
+ },
35756
+ {
35757
+ "id": "openwop.it.v2-provider-usage-advertisement.providerusage-currency-is-an-iso-4217-code",
35758
+ "file": "v2-provider-usage-advertisement.test.ts",
35759
+ "line": 54,
35760
+ "title": "providerUsage.currency is an ISO 4217 code",
35761
+ "explicitId": "openwop.requirement.provider-usage.currency-iso-4217",
35762
+ "citations": [
35763
+ {
35764
+ "section": null,
35765
+ "requirement": null,
35766
+ "interpolated": true
35767
+ }
35768
+ ]
35769
+ },
35770
+ {
35771
+ "id": "openwop.it.v2-provider-usage-emission.a-live-model-run-carries-provider-usage-each-before-its-node-completed-and-each",
35772
+ "file": "v2-provider-usage-emission.test.ts",
35773
+ "line": 38,
35774
+ "title": "a live-model run carries provider.usage, each before its node.completed and each payload valid",
35775
+ "explicitId": "openwop.requirement.provider-usage.emitted-before-node-completed",
35776
+ "citations": [
35777
+ {
35778
+ "section": null,
35779
+ "requirement": null,
35780
+ "interpolated": true
35781
+ }
35782
+ ]
35783
+ },
35784
+ {
35785
+ "id": "openwop.it.v2-provider-usage-payload-static.provider-usage-is-a-registered-v2-run-event-type",
35786
+ "file": "v2-provider-usage-payload-static.test.ts",
35787
+ "line": 52,
35788
+ "title": "provider.usage is a registered v2 run-event type",
35789
+ "explicitId": "openwop.requirement.provider-usage.event-type-registered",
35790
+ "citations": [
35791
+ {
35792
+ "section": "events.md §providerUsage",
35793
+ "requirement": null,
35794
+ "interpolated": true
35795
+ }
35796
+ ]
35797
+ },
35798
+ {
35799
+ "id": "openwop.it.v2-provider-usage-payload-static.accepts-a-minimal-and-a-full-payload",
35800
+ "file": "v2-provider-usage-payload-static.test.ts",
35801
+ "line": 57,
35802
+ "title": "accepts a minimal and a full payload",
35803
+ "explicitId": "openwop.requirement.provider-usage.payload-well-formed-accepted",
35804
+ "citations": [
35805
+ {
35806
+ "section": "events.md §providerUsage",
35807
+ "requirement": null,
35808
+ "interpolated": true
35809
+ }
35810
+ ]
35811
+ },
35812
+ {
35813
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-a-payload-without-s",
35814
+ "file": "v2-provider-usage-payload-static.test.ts",
35815
+ "line": 64,
35816
+ "title": "rejects a payload without %s",
35817
+ "explicitId": "openwop.requirement.provider-usage.payload-required-fields",
35818
+ "citations": [
35819
+ {
35820
+ "section": "events.md §providerUsage",
35821
+ "requirement": null,
35822
+ "interpolated": true
35823
+ }
35824
+ ]
35825
+ },
35826
+ {
35827
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-s",
35828
+ "file": "v2-provider-usage-payload-static.test.ts",
35829
+ "line": 68,
35830
+ "title": "rejects %s",
35831
+ "explicitId": "openwop.requirement.provider-usage.payload-token-counts",
35832
+ "citations": [
35833
+ {
35834
+ "section": "events.md §providerUsage",
35835
+ "requirement": null,
35836
+ "interpolated": true
35837
+ }
35838
+ ]
35839
+ },
35840
+ {
35841
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-s~2",
35842
+ "file": "v2-provider-usage-payload-static.test.ts",
35843
+ "line": 76,
35844
+ "title": "rejects %s",
35845
+ "explicitId": "openwop.requirement.provider-usage.payload-cost-and-currency",
35846
+ "citations": [
35847
+ {
35848
+ "section": "events.md §providerUsage",
35849
+ "requirement": null,
35850
+ "interpolated": true
35851
+ }
35852
+ ]
35853
+ },
35854
+ {
35855
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-a-payload-carrying-s",
35856
+ "file": "v2-provider-usage-payload-static.test.ts",
35857
+ "line": 84,
35858
+ "title": "rejects a payload carrying %s",
35859
+ "explicitId": "openwop.requirement.provider-usage.payload-no-credential-or-content",
35860
+ "citations": [
35861
+ {
35862
+ "section": "events.md §providerUsage",
35863
+ "requirement": null,
35864
+ "interpolated": true
35865
+ }
35866
+ ]
35867
+ },
35868
+ {
35869
+ "id": "openwop.it.v2-purpose-propagation-advertisement.the-purposepropagation-record-validates-against-its-capabilities-schema-seat",
35870
+ "file": "v2-purpose-propagation-advertisement.test.ts",
35871
+ "line": 35,
35872
+ "title": "the purposePropagation record validates against its capabilities-schema seat",
35873
+ "explicitId": "openwop.requirement.purpose-propagation.advert-record-schema",
35874
+ "citations": [
35875
+ {
35876
+ "section": null,
35877
+ "requirement": null,
35878
+ "interpolated": true
35879
+ }
35880
+ ]
35881
+ },
35882
+ {
35883
+ "id": "openwop.it.v2-purpose-propagation-advertisement.purposepropagation-propagatesonward-is-a-boolean",
35884
+ "file": "v2-purpose-propagation-advertisement.test.ts",
35885
+ "line": 44,
35886
+ "title": "purposePropagation.propagatesOnward is a boolean",
35887
+ "explicitId": "openwop.requirement.purpose-propagation.propagates-onward-boolean",
35888
+ "citations": [
35889
+ {
35890
+ "section": null,
35891
+ "requirement": null,
35892
+ "interpolated": true
35893
+ }
35894
+ ]
35895
+ },
34928
35896
  {
34929
35897
  "id": "openwop.it.v2-queue-cross-tenant-isolation.a-message-tenant-a-publishes-on-topic-t-is-never-consumed-by-tenant-b-on-t-and-a",
34930
35898
  "file": "v2-queue-cross-tenant-isolation.test.ts",
@@ -35755,7 +36723,7 @@
35755
36723
  {
35756
36724
  "id": "openwop.it.v2-run-snapshot-etag.a-matching-if-none-match-receives-304-with-no-body-and-the-version-header-a-non",
35757
36725
  "file": "v2-run-snapshot-etag.test.ts",
35758
- "line": 35,
36726
+ "line": 46,
35759
36727
  "title": "a matching If-None-Match receives 304 with no body and the version header; a non-matching one receives 200",
35760
36728
  "explicitId": "openwop.requirement.0170.run-snapshot-etag",
35761
36729
  "citations": [
@@ -35771,7 +36739,8 @@
35771
36739
  },
35772
36740
  {
35773
36741
  "section": "spec/v2/core/versioning.md §1.4",
35774
- "requirement": "every response carries OpenWOP-Version, the 304 included"
36742
+ "requirement": null,
36743
+ "interpolated": true
35775
36744
  },
35776
36745
  {
35777
36746
  "section": "spec/v2/core/runs.md §Snapshot",
@@ -35839,6 +36808,34 @@
35839
36808
  }
35840
36809
  ]
35841
36810
  },
36811
+ {
36812
+ "id": "openwop.it.v2-scheduling-advertisement.the-scheduling-record-validates-against-its-capabilities-schema-seat",
36813
+ "file": "v2-scheduling-advertisement.test.ts",
36814
+ "line": 38,
36815
+ "title": "the scheduling record validates against its capabilities-schema seat",
36816
+ "explicitId": "openwop.requirement.scheduling.advert-record-schema",
36817
+ "citations": [
36818
+ {
36819
+ "section": null,
36820
+ "requirement": null,
36821
+ "interpolated": true
36822
+ }
36823
+ ]
36824
+ },
36825
+ {
36826
+ "id": "openwop.it.v2-scheduling-advertisement.scheduling-cron-delayed-and-calendar-are-booleans",
36827
+ "file": "v2-scheduling-advertisement.test.ts",
36828
+ "line": 47,
36829
+ "title": "scheduling.cron, delayed and calendar are booleans",
36830
+ "explicitId": "openwop.requirement.scheduling.forms-boolean",
36831
+ "citations": [
36832
+ {
36833
+ "section": null,
36834
+ "requirement": null,
36835
+ "interpolated": true
36836
+ }
36837
+ ]
36838
+ },
35842
36839
  {
35843
36840
  "id": "openwop.it.v2-secret-canary-absent.a-secret-resolved-from-the-host-s-store-appears-on-no-readable-surface-of-the-ru",
35844
36841
  "file": "v2-secret-canary-absent.test.ts",
@@ -35988,6 +36985,144 @@
35988
36985
  }
35989
36986
  ]
35990
36987
  },
36988
+ {
36989
+ "id": "openwop.it.v2-self-hosted-runner-advertisement.the-selfhostedrunner-record-validates-against-its-capabilities-schema-seat",
36990
+ "file": "v2-self-hosted-runner-advertisement.test.ts",
36991
+ "line": 37,
36992
+ "title": "the selfHostedRunner record validates against its capabilities-schema seat",
36993
+ "explicitId": "openwop.requirement.self-hosted-runner.advert-record-schema",
36994
+ "citations": [
36995
+ {
36996
+ "section": null,
36997
+ "requirement": null,
36998
+ "interpolated": true
36999
+ }
37000
+ ]
37001
+ },
37002
+ {
37003
+ "id": "openwop.it.v2-self-hosted-runner-advertisement.selfhostedrunner-dispatchkinds-lists-model-tool-or-both",
37004
+ "file": "v2-self-hosted-runner-advertisement.test.ts",
37005
+ "line": 45,
37006
+ "title": "selfHostedRunner.dispatchKinds lists model, tool or both",
37007
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-kinds",
37008
+ "citations": [
37009
+ {
37010
+ "section": null,
37011
+ "requirement": null,
37012
+ "interpolated": true
37013
+ }
37014
+ ]
37015
+ },
37016
+ {
37017
+ "id": "openwop.requirement.self-hosted-runner.frame-schemas-compile",
37018
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37019
+ "line": 56,
37020
+ "title": null,
37021
+ "explicitId": "openwop.requirement.self-hosted-runner.frame-schemas-compile",
37022
+ "citations": [
37023
+ {
37024
+ "section": "execution.md §selfHostedRunner",
37025
+ "requirement": null,
37026
+ "interpolated": true
37027
+ }
37028
+ ]
37029
+ },
37030
+ {
37031
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-model-frame-and-a-tool-frame",
37032
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37033
+ "line": 65,
37034
+ "title": "accepts a model frame and a tool frame",
37035
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-frame-shape",
37036
+ "citations": [
37037
+ {
37038
+ "section": "execution.md §selfHostedRunner",
37039
+ "requirement": null,
37040
+ "interpolated": true
37041
+ }
37042
+ ]
37043
+ },
37044
+ {
37045
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-s",
37046
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37047
+ "line": 72,
37048
+ "title": "rejects %s",
37049
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-frame-shape",
37050
+ "citations": [
37051
+ {
37052
+ "section": "execution.md §selfHostedRunner",
37053
+ "requirement": null,
37054
+ "interpolated": true
37055
+ }
37056
+ ]
37057
+ },
37058
+ {
37059
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-result-frame",
37060
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37061
+ "line": 89,
37062
+ "title": "accepts a result frame",
37063
+ "explicitId": "openwop.requirement.self-hosted-runner.result-frame-shape",
37064
+ "citations": [
37065
+ {
37066
+ "section": "execution.md §selfHostedRunner",
37067
+ "requirement": null,
37068
+ "interpolated": true
37069
+ }
37070
+ ]
37071
+ },
37072
+ {
37073
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-a-result-frame-without-output",
37074
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37075
+ "line": 94,
37076
+ "title": "rejects a result frame without output",
37077
+ "explicitId": "openwop.requirement.self-hosted-runner.result-frame-shape",
37078
+ "citations": [
37079
+ {
37080
+ "section": "execution.md §selfHostedRunner",
37081
+ "requirement": "a result frame without output MUST be rejected"
37082
+ }
37083
+ ]
37084
+ },
37085
+ {
37086
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.a-s-with-an-extra-credential-named-field-is-rejected",
37087
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37088
+ "line": 100,
37089
+ "title": "a %s with an extra credential-named field is rejected",
37090
+ "explicitId": "openwop.requirement.self-hosted-runner.frames-closed",
37091
+ "citations": [
37092
+ {
37093
+ "section": "execution.md §selfHostedRunner",
37094
+ "requirement": null,
37095
+ "interpolated": true
37096
+ }
37097
+ ]
37098
+ },
37099
+ {
37100
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-registration",
37101
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37102
+ "line": 113,
37103
+ "title": "accepts a registration",
37104
+ "explicitId": "openwop.requirement.self-hosted-runner.registration-shape",
37105
+ "citations": [
37106
+ {
37107
+ "section": "execution.md §selfHostedRunner",
37108
+ "requirement": null,
37109
+ "interpolated": true
37110
+ }
37111
+ ]
37112
+ },
37113
+ {
37114
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-a-registration-without-subject",
37115
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37116
+ "line": 118,
37117
+ "title": "rejects a registration without subject",
37118
+ "explicitId": "openwop.requirement.self-hosted-runner.registration-shape",
37119
+ "citations": [
37120
+ {
37121
+ "section": "execution.md §selfHostedRunner",
37122
+ "requirement": "a registration without its owning subject MUST be rejected"
37123
+ }
37124
+ ]
37125
+ },
35991
37126
  {
35992
37127
  "id": "openwop.it.v2-sse-last-event-id-cursor.a-last-event-id-past-the-log-is-an-exclusive-cursor-a-terminal-run-answers-200-w",
35993
37128
  "file": "v2-sse-last-event-id-cursor.test.ts",
@@ -36459,6 +37594,34 @@
36459
37594
  }
36460
37595
  ]
36461
37596
  },
37597
+ {
37598
+ "id": "openwop.it.v2-sub-workflow-advertisement.the-subworkflow-record-validates-against-its-capabilities-schema-seat",
37599
+ "file": "v2-sub-workflow-advertisement.test.ts",
37600
+ "line": 36,
37601
+ "title": "the subWorkflow record validates against its capabilities-schema seat",
37602
+ "explicitId": "openwop.requirement.sub-workflow.advert-record-schema",
37603
+ "citations": [
37604
+ {
37605
+ "section": null,
37606
+ "requirement": null,
37607
+ "interpolated": true
37608
+ }
37609
+ ]
37610
+ },
37611
+ {
37612
+ "id": "openwop.it.v2-sub-workflow-advertisement.subworkflow-inputmapping-is-one-boolean",
37613
+ "file": "v2-sub-workflow-advertisement.test.ts",
37614
+ "line": 45,
37615
+ "title": "subWorkflow.inputMapping is one boolean",
37616
+ "explicitId": "openwop.requirement.sub-workflow.input-mapping-boolean",
37617
+ "citations": [
37618
+ {
37619
+ "section": null,
37620
+ "requirement": null,
37621
+ "interpolated": true
37622
+ }
37623
+ ]
37624
+ },
36462
37625
  {
36463
37626
  "id": "openwop.it.v2-subject-link-record.the-link-formed-across-scim-and-saml-is-a-closed-subjectlink-record",
36464
37627
  "file": "v2-subject-link-record.test.ts",
@@ -36503,6 +37666,54 @@
36503
37666
  }
36504
37667
  ]
36505
37668
  },
37669
+ {
37670
+ "id": "openwop.it.v2-subworkflow-input-mapping.inputmapping-seeds-the-child-variable-bag-at-creation",
37671
+ "file": "v2-subworkflow-input-mapping.test.ts",
37672
+ "line": 57,
37673
+ "title": "inputMapping seeds the child variable bag at creation",
37674
+ "explicitId": null,
37675
+ "citations": []
37676
+ },
37677
+ {
37678
+ "id": "openwop.it.v2-subworkflow-input-mapping.the-mapped-parent-value-lands-after-and-over-the-child-defaultvalue",
37679
+ "file": "v2-subworkflow-input-mapping.test.ts",
37680
+ "line": 63,
37681
+ "title": "the mapped parent value lands after and over the child defaultValue",
37682
+ "explicitId": null,
37683
+ "citations": []
37684
+ },
37685
+ {
37686
+ "id": "openwop.it.v2-subworkflow-input-mapping.an-unset-parent-variable-arrives-undefined-never-an-error-or-null",
37687
+ "file": "v2-subworkflow-input-mapping.test.ts",
37688
+ "line": 69,
37689
+ "title": "an unset parent variable arrives undefined, never an error or null",
37690
+ "explicitId": null,
37691
+ "citations": []
37692
+ },
37693
+ {
37694
+ "id": "openwop.it.v2-subworkflow-linkage.node-completed-for-the-core-subworkflow-node-carries-outputs-childrunid-and-outp",
37695
+ "file": "v2-subworkflow-linkage.test.ts",
37696
+ "line": 59,
37697
+ "title": "node.completed for the core.subWorkflow node carries outputs.childRunId and outputs.childStatus",
37698
+ "explicitId": null,
37699
+ "citations": []
37700
+ },
37701
+ {
37702
+ "id": "openwop.it.v2-subworkflow-linkage.outputmapping-copies-the-child-variable-into-the-parent-after-the-child-complete",
37703
+ "file": "v2-subworkflow-linkage.test.ts",
37704
+ "line": 65,
37705
+ "title": "outputMapping copies the child variable into the parent after the child completes",
37706
+ "explicitId": null,
37707
+ "citations": []
37708
+ },
37709
+ {
37710
+ "id": "openwop.it.v2-subworkflow-linkage.getrunancestry-names-the-parent-run-with-cause-core-subworkflow",
37711
+ "file": "v2-subworkflow-linkage.test.ts",
37712
+ "line": 71,
37713
+ "title": "getRunAncestry names the parent run with cause core.subWorkflow",
37714
+ "explicitId": null,
37715
+ "citations": []
37716
+ },
36506
37717
  {
36507
37718
  "id": "openwop.it.v2-table-schema-enforcement.a-well-typed-insert-completes-positive-control",
36508
37719
  "file": "v2-table-schema-enforcement.test.ts",
@@ -36865,6 +38076,76 @@
36865
38076
  }
36866
38077
  ]
36867
38078
  },
38079
+ {
38080
+ "id": "openwop.it.v2-ui-plugins-advertisement.the-uiplugins-record-validates-against-its-capabilities-schema-seat",
38081
+ "file": "v2-ui-plugins-advertisement.test.ts",
38082
+ "line": 41,
38083
+ "title": "the uiPlugins record validates against its capabilities-schema seat",
38084
+ "explicitId": "openwop.requirement.ui-plugins.advert-record-schema",
38085
+ "citations": [
38086
+ {
38087
+ "section": null,
38088
+ "requirement": null,
38089
+ "interpolated": true
38090
+ }
38091
+ ]
38092
+ },
38093
+ {
38094
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-isolation-is-a-closed-mechanism-or-an-x-host-value",
38095
+ "file": "v2-ui-plugins-advertisement.test.ts",
38096
+ "line": 50,
38097
+ "title": "uiPlugins.isolation is a closed mechanism or an x-host value",
38098
+ "explicitId": "openwop.requirement.ui-plugins.isolation-model",
38099
+ "citations": [
38100
+ {
38101
+ "section": null,
38102
+ "requirement": null,
38103
+ "interpolated": true
38104
+ }
38105
+ ]
38106
+ },
38107
+ {
38108
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-surfaces-are-unique-members-of-the-closed-surface-set",
38109
+ "file": "v2-ui-plugins-advertisement.test.ts",
38110
+ "line": 59,
38111
+ "title": "uiPlugins.surfaces are unique members of the closed surface set",
38112
+ "explicitId": "openwop.requirement.ui-plugins.surfaces-closed",
38113
+ "citations": [
38114
+ {
38115
+ "section": null,
38116
+ "requirement": null,
38117
+ "interpolated": true
38118
+ }
38119
+ ]
38120
+ },
38121
+ {
38122
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-hostapi-are-unique-members-of-the-ui-plugin-1-method-set",
38123
+ "file": "v2-ui-plugins-advertisement.test.ts",
38124
+ "line": 68,
38125
+ "title": "uiPlugins.hostApi are unique members of the ui-plugin/1 method set",
38126
+ "explicitId": "openwop.requirement.ui-plugins.host-api-closed",
38127
+ "citations": [
38128
+ {
38129
+ "section": null,
38130
+ "requirement": null,
38131
+ "interpolated": true
38132
+ }
38133
+ ]
38134
+ },
38135
+ {
38136
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-maxentrybytes-is-a-positive-integer",
38137
+ "file": "v2-ui-plugins-advertisement.test.ts",
38138
+ "line": 77,
38139
+ "title": "uiPlugins.maxEntryBytes is a positive integer",
38140
+ "explicitId": "openwop.requirement.ui-plugins.max-entry-bytes",
38141
+ "citations": [
38142
+ {
38143
+ "section": null,
38144
+ "requirement": null,
38145
+ "interpolated": true
38146
+ }
38147
+ ]
38148
+ },
36868
38149
  {
36869
38150
  "id": "openwop.it.v2-unadvertised-operation-not-found.get-prompts-answers-404-not-found-when-prompts-endpointssupported-is-not-adverti",
36870
38151
  "file": "v2-unadvertised-operation-not-found.test.ts",
@@ -45368,6 +46649,46 @@
45368
46649
  }
45369
46650
  ]
45370
46651
  },
46652
+ {
46653
+ "id": "openwop.it.v2-conversation-payload-mirrors.conversationopened-seats-every-field-conversationopenedpayload-carries",
46654
+ "file": "v2-conversation-payload-mirrors.test.ts",
46655
+ "line": 44,
46656
+ "title": "conversationOpened seats every field ConversationOpenedPayload carries",
46657
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46658
+ "citations": [
46659
+ {
46660
+ "section": "conversation.md",
46661
+ "requirement": null,
46662
+ "interpolated": true
46663
+ }
46664
+ ]
46665
+ },
46666
+ {
46667
+ "id": "openwop.it.v2-conversation-payload-mirrors.the-inlined-conversationturn-carries-every-field-of-conversation-turn-schema-jso",
46668
+ "file": "v2-conversation-payload-mirrors.test.ts",
46669
+ "line": 51,
46670
+ "title": "the inlined ConversationTurn carries every field of conversation-turn.schema.json",
46671
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46672
+ "citations": [
46673
+ {
46674
+ "section": "conversation.md",
46675
+ "requirement": "the ConversationTurn mirror MUST carry the same top-level fields as conversation-turn.schema.json"
46676
+ }
46677
+ ]
46678
+ },
46679
+ {
46680
+ "id": "openwop.it.v2-conversation-payload-mirrors.the-inlined-conversationturn-agent-carries-every-field-of-the-source-agent",
46681
+ "file": "v2-conversation-payload-mirrors.test.ts",
46682
+ "line": 56,
46683
+ "title": "the inlined ConversationTurn.agent carries every field of the source agent",
46684
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46685
+ "citations": [
46686
+ {
46687
+ "section": "conversation.md",
46688
+ "requirement": "ConversationTurn.agent MUST carry the same fields as conversation-turn.schema.json agent (incl. `model`)"
46689
+ }
46690
+ ]
46691
+ },
45371
46692
  {
45372
46693
  "id": "openwop.it.v2-corpus-tag-pinned.every-vendoring-consumer-in-the-cross-repo-inventory-records-a-published-corpus",
45373
46694
  "file": "v2-corpus-tag-pinned.test.ts",