@openwop/openwop-conformance 2.45.14 → 2.45.16

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 (82) hide show
  1. package/CHANGELOG.md +45 -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 +2668 -4
  6. package/scenario-majors.json +164 -2
  7. package/schemas/CORPUS-STAMP.json +13 -13
  8. package/src/lib/artifact-schema-url-witness.ts +83 -0
  9. package/src/lib/backpressure-witness.ts +2 -2
  10. package/src/lib/budget-witness.ts +3 -3
  11. package/src/lib/dispatch-witness.ts +212 -0
  12. package/src/lib/envelope-schema-static.ts +166 -0
  13. package/src/lib/exhaustion-facet-witness.ts +1 -1
  14. package/src/lib/family-advert-witness.ts +411 -0
  15. package/src/lib/fixture-run-observer.ts +97 -0
  16. package/src/lib/i18n-double.ts +99 -0
  17. package/src/lib/i18n-negotiation-witness.ts +173 -0
  18. package/src/lib/localized-content-witness.ts +49 -0
  19. package/src/lib/model-capability-insufficient-witness.ts +121 -0
  20. package/src/lib/prompt-double.ts +217 -0
  21. package/src/lib/prompt-events-witness.ts +211 -0
  22. package/src/lib/prompt-library-witness.ts +406 -0
  23. package/src/lib/provider-usage-witness.ts +63 -0
  24. package/src/lib/run-bounds-witness.ts +111 -0
  25. package/src/lib/run-graph-double.ts +144 -0
  26. package/src/lib/scratch-host.ts +4 -1
  27. package/src/lib/subworkflow-witness.ts +192 -0
  28. package/src/lib/table-schema-witness.ts +3 -1
  29. package/src/scenarios/v2-agent-runtime-advertisement.test.ts +51 -0
  30. package/src/scenarios/v2-ai-envelope-advertisement.test.ts +43 -0
  31. package/src/scenarios/v2-ai-envelope-shape-static.test.ts +93 -0
  32. package/src/scenarios/v2-ai-providers-advertisement.test.ts +94 -0
  33. package/src/scenarios/v2-artifact-created-static.test.ts +92 -0
  34. package/src/scenarios/v2-artifact-type-schema-url.test.ts +44 -0
  35. package/src/scenarios/v2-artifact-types-advertisement.test.ts +64 -0
  36. package/src/scenarios/v2-authorization-advertisement.test.ts +66 -0
  37. package/src/scenarios/v2-channel-presence-advertisement.test.ts +41 -0
  38. package/src/scenarios/v2-conversation-turn-model-provenance-advertisement.test.ts +41 -0
  39. package/src/scenarios/v2-conversation-turn-model-provenance.test.ts +110 -0
  40. package/src/scenarios/v2-credentials-advertisement.test.ts +66 -0
  41. package/src/scenarios/v2-data-residency-admission.test.ts +98 -0
  42. package/src/scenarios/v2-data-residency-advertisement.test.ts +52 -0
  43. package/src/scenarios/v2-dead-letter-advertisement.test.ts +54 -0
  44. package/src/scenarios/v2-dispatch-input-mapping.test.ts +70 -0
  45. package/src/scenarios/v2-dispatch-loop.test.ts +80 -0
  46. package/src/scenarios/v2-envelope-contracts-advertisement.test.ts +40 -0
  47. package/src/scenarios/v2-envelope-reasoning-shape.test.ts +81 -0
  48. package/src/scenarios/v2-envelope-tier-one-subset-static.test.ts +77 -0
  49. package/src/scenarios/v2-envelope-variant-discriminator-static.test.ts +57 -0
  50. package/src/scenarios/v2-envelopes-advertisement.test.ts +85 -0
  51. package/src/scenarios/v2-export-bundle-static.test.ts +108 -0
  52. package/src/scenarios/v2-i18n-negotiation.test.ts +91 -0
  53. package/src/scenarios/v2-limits-envelope-caps-advertisement.test.ts +61 -0
  54. package/src/scenarios/v2-localized-content-delivery.test.ts +136 -0
  55. package/src/scenarios/v2-media-inline-cap-static.test.ts +59 -0
  56. package/src/scenarios/v2-model-capabilities-advertisement.test.ts +61 -0
  57. package/src/scenarios/v2-model-capability-insufficient.test.ts +63 -0
  58. package/src/scenarios/v2-multi-party-conversation-advertisement.test.ts +52 -0
  59. package/src/scenarios/v2-node-pack-runtimes-advertisement.test.ts +52 -0
  60. package/src/scenarios/v2-nondeterminism-policy-advertisement.test.ts +41 -0
  61. package/src/scenarios/v2-portability-advertisement.test.ts +63 -0
  62. package/src/scenarios/v2-prompt-all-four-kinds-events.test.ts +69 -0
  63. package/src/scenarios/v2-prompt-end-to-end-events.test.ts +71 -0
  64. package/src/scenarios/v2-prompt-library-advertisement.test.ts +40 -0
  65. package/src/scenarios/v2-prompt-list-and-fetch.test.ts +103 -0
  66. package/src/scenarios/v2-prompt-mutable-lifecycle.test.ts +130 -0
  67. package/src/scenarios/v2-prompt-pack-install.test.ts +78 -0
  68. package/src/scenarios/v2-prompt-render-deterministic.test.ts +87 -0
  69. package/src/scenarios/v2-prompt-resolution-chain-event.test.ts +46 -0
  70. package/src/scenarios/v2-prompt-template-shape.test.ts +112 -0
  71. package/src/scenarios/v2-provider-usage-advertisement.test.ts +61 -0
  72. package/src/scenarios/v2-provider-usage-emission.test.ts +50 -0
  73. package/src/scenarios/v2-provider-usage-payload-static.test.ts +92 -0
  74. package/src/scenarios/v2-purpose-propagation-advertisement.test.ts +52 -0
  75. package/src/scenarios/v2-run-execution-bounds.test.ts +67 -0
  76. package/src/scenarios/v2-scheduling-advertisement.test.ts +55 -0
  77. package/src/scenarios/v2-self-hosted-runner-advertisement.test.ts +52 -0
  78. package/src/scenarios/v2-self-hosted-runner-frames-static.test.ts +121 -0
  79. package/src/scenarios/v2-sub-workflow-advertisement.test.ts +53 -0
  80. package/src/scenarios/v2-subworkflow-input-mapping.test.ts +74 -0
  81. package/src/scenarios/v2-subworkflow-linkage.test.ts +76 -0
  82. 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": 669,
6
- "tests": 2565,
7
- "withStableId": 2565,
5
+ "files": 724,
6
+ "tests": 2745,
7
+ "withStableId": 2745,
8
8
  "interpolatedTitles": 0,
9
- "explicitIds": 2442
9
+ "explicitIds": 2611
10
10
  },
11
11
  "records": [
12
12
  {
@@ -28252,6 +28252,211 @@
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
+ },
28297
+ {
28298
+ "id": "openwop.it.v2-ai-envelope-shape-static.ai-envelope-schema-json-compiles-under-ajv-2020",
28299
+ "file": "v2-ai-envelope-shape-static.test.ts",
28300
+ "line": 58,
28301
+ "title": "ai-envelope.schema.json compiles under Ajv 2020",
28302
+ "explicitId": "openwop.requirement.ai-envelope.schemas-compile",
28303
+ "citations": [
28304
+ {
28305
+ "section": "events.md §AI envelopes: E1–E5",
28306
+ "requirement": "schemas/v2/ai-envelope.schema.json MUST compile"
28307
+ }
28308
+ ]
28309
+ },
28310
+ {
28311
+ "id": "openwop.requirement.ai-envelope.schemas-compile",
28312
+ "file": "v2-ai-envelope-shape-static.test.ts",
28313
+ "line": 63,
28314
+ "title": null,
28315
+ "explicitId": "openwop.requirement.ai-envelope.schemas-compile",
28316
+ "citations": [
28317
+ {
28318
+ "section": "events.md §AI envelopes: E1–E5",
28319
+ "requirement": null,
28320
+ "interpolated": true
28321
+ }
28322
+ ]
28323
+ },
28324
+ {
28325
+ "id": "openwop.it.v2-ai-envelope-shape-static.accepts-a-well-formed-envelope-carrying-correlationid-and-meta-source",
28326
+ "file": "v2-ai-envelope-shape-static.test.ts",
28327
+ "line": 72,
28328
+ "title": "accepts a well-formed envelope carrying correlationId and meta.source",
28329
+ "explicitId": "openwop.requirement.ai-envelope.well-formed-accepted",
28330
+ "citations": [
28331
+ {
28332
+ "section": "events.md §AI envelopes: E1–E5",
28333
+ "requirement": null,
28334
+ "interpolated": true
28335
+ }
28336
+ ]
28337
+ },
28338
+ {
28339
+ "id": "openwop.it.v2-ai-envelope-shape-static.rejects-an-envelope-missing-meta",
28340
+ "file": "v2-ai-envelope-shape-static.test.ts",
28341
+ "line": 77,
28342
+ "title": "rejects an envelope missing meta",
28343
+ "explicitId": "openwop.requirement.ai-envelope.meta-required",
28344
+ "citations": [
28345
+ {
28346
+ "section": "events.md §AI envelopes: E1–E5",
28347
+ "requirement": "an envelope without meta MUST be rejected"
28348
+ }
28349
+ ]
28350
+ },
28351
+ {
28352
+ "id": "openwop.it.v2-ai-envelope-shape-static.rejects-an-envelope-with-an-unknown-top-level-property",
28353
+ "file": "v2-ai-envelope-shape-static.test.ts",
28354
+ "line": 81,
28355
+ "title": "rejects an envelope with an unknown top-level property",
28356
+ "explicitId": "openwop.requirement.ai-envelope.top-level-closed",
28357
+ "citations": [
28358
+ {
28359
+ "section": "schemas/v2/ai-envelope.schema.json",
28360
+ "requirement": "the envelope is closed: an unknown top-level property MUST be rejected"
28361
+ }
28362
+ ]
28363
+ },
28364
+ {
28365
+ "id": "openwop.it.v2-ai-envelope-shape-static.rejects-an-envelope-missing-correlationid",
28366
+ "file": "v2-ai-envelope-shape-static.test.ts",
28367
+ "line": 85,
28368
+ "title": "rejects an envelope missing correlationId",
28369
+ "explicitId": "openwop.requirement.ai-envelope.correlation-id-required",
28370
+ "citations": [
28371
+ {
28372
+ "section": "events.md §AI envelopes: E1–E5",
28373
+ "requirement": "correlationId is REQUIRED on every envelope at v2 — an envelope without it MUST be rejected, never synthesized"
28374
+ }
28375
+ ]
28376
+ },
28377
+ {
28378
+ "id": "openwop.it.v2-ai-envelope-shape-static.rejects-an-envelope-whose-meta-carries-no-source",
28379
+ "file": "v2-ai-envelope-shape-static.test.ts",
28380
+ "line": 89,
28381
+ "title": "rejects an envelope whose meta carries no source",
28382
+ "explicitId": "openwop.requirement.ai-envelope.meta-source-required",
28383
+ "citations": [
28384
+ {
28385
+ "section": "events.md §AI envelopes: E1–E5",
28386
+ "requirement": "meta.source is REQUIRED on every envelope at v2 — an envelope without it MUST be rejected"
28387
+ }
28388
+ ]
28389
+ },
28390
+ {
28391
+ "id": "openwop.it.v2-ai-providers-advertisement.the-aiproviders-record-validates-against-its-capabilities-schema-seat",
28392
+ "file": "v2-ai-providers-advertisement.test.ts",
28393
+ "line": 55,
28394
+ "title": "the aiProviders record validates against its capabilities-schema seat",
28395
+ "explicitId": "openwop.requirement.ai-providers.advert-record-schema",
28396
+ "citations": [
28397
+ {
28398
+ "section": null,
28399
+ "requirement": null,
28400
+ "interpolated": true
28401
+ }
28402
+ ]
28403
+ },
28404
+ {
28405
+ "id": "openwop.it.v2-ai-providers-advertisement.aiproviders-selfhosted-is-one-boolean",
28406
+ "file": "v2-ai-providers-advertisement.test.ts",
28407
+ "line": 63,
28408
+ "title": "aiProviders.selfHosted is one boolean",
28409
+ "explicitId": "openwop.requirement.ai-providers.self-hosted-boolean",
28410
+ "citations": [
28411
+ {
28412
+ "section": null,
28413
+ "requirement": null,
28414
+ "interpolated": true
28415
+ }
28416
+ ]
28417
+ },
28418
+ {
28419
+ "id": "openwop.it.v2-ai-providers-advertisement.aiproviders-authmodes-is-one-flat-list-of-modes",
28420
+ "file": "v2-ai-providers-advertisement.test.ts",
28421
+ "line": 71,
28422
+ "title": "aiProviders.authModes is one flat list of modes",
28423
+ "explicitId": "openwop.requirement.ai-providers.auth-modes-flat-list",
28424
+ "citations": [
28425
+ {
28426
+ "section": null,
28427
+ "requirement": null,
28428
+ "interpolated": true
28429
+ }
28430
+ ]
28431
+ },
28432
+ {
28433
+ "id": "openwop.it.v2-ai-providers-advertisement.aiproviders-maxinlinemediabytes-is-an-integer-of-at-least-1",
28434
+ "file": "v2-ai-providers-advertisement.test.ts",
28435
+ "line": 79,
28436
+ "title": "aiProviders.maxInlineMediaBytes is an integer of at least 1",
28437
+ "explicitId": "openwop.requirement.ai-providers.max-inline-media-bytes",
28438
+ "citations": [
28439
+ {
28440
+ "section": null,
28441
+ "requirement": null,
28442
+ "interpolated": true
28443
+ }
28444
+ ]
28445
+ },
28446
+ {
28447
+ "id": "openwop.it.v2-ai-providers-advertisement.aiproviders-promptprefixcache-is-one-boolean",
28448
+ "file": "v2-ai-providers-advertisement.test.ts",
28449
+ "line": 87,
28450
+ "title": "aiProviders.promptPrefixCache is one boolean",
28451
+ "explicitId": "openwop.requirement.ai-providers.prompt-prefix-cache-boolean",
28452
+ "citations": [
28453
+ {
28454
+ "section": null,
28455
+ "requirement": null,
28456
+ "interpolated": true
28457
+ }
28458
+ ]
28459
+ },
28255
28460
  {
28256
28461
  "id": "openwop.it.v2-approval-reject-disposition.a-rejected-gate-with-no-routing-edge-fails-the-run-with-approval-rejected",
28257
28462
  "file": "v2-approval-reject-disposition.test.ts",
@@ -28571,6 +28776,165 @@
28571
28776
  }
28572
28777
  ]
28573
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
+ },
28574
28938
  {
28575
28939
  "id": "openwop.it.v2-assurance-downgrade-audited.an-identity-below-the-lane-floor-is-refused-with-sender-constraint-missing",
28576
28940
  "file": "v2-assurance-downgrade-audited.test.ts",
@@ -28676,6 +29040,48 @@
28676
29040
  }
28677
29041
  ]
28678
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
+ },
28679
29085
  {
28680
29086
  "id": "openwop.it.v2-bound-id-kinds.subscriptionid-post-webhooks-mints-a-bound-webhookid-the-projected-segment-is-ac",
28681
29087
  "file": "v2-bound-id-kinds.test.ts",
@@ -29176,6 +29582,20 @@
29176
29582
  }
29177
29583
  ]
29178
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
+ },
29179
29599
  {
29180
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",
29181
29601
  "file": "v2-client-version-header.test.ts",
@@ -29450,6 +29870,48 @@
29450
29870
  }
29451
29871
  ]
29452
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
+ },
29453
29915
  {
29454
29916
  "id": "openwop.it.v2-conversation-turn-parts.every-conversation-exchanged-turn-carrying-parts-validates-against-the-v2-turn-d",
29455
29917
  "file": "v2-conversation-turn-parts.test.ts",
@@ -29740,6 +30202,186 @@
29740
30202
  }
29741
30203
  ]
29742
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-dispatch-input-mapping.inputmapping-projects-the-parent-variable-into-the-dispatched-child-inputs",
30347
+ "file": "v2-dispatch-input-mapping.test.ts",
30348
+ "line": 59,
30349
+ "title": "inputMapping projects the parent variable into the dispatched child inputs",
30350
+ "explicitId": null,
30351
+ "citations": []
30352
+ },
30353
+ {
30354
+ "id": "openwop.it.v2-dispatch-input-mapping.an-unset-parent-variable-projects-to-undefined-the-child-input-is-absent-never-n",
30355
+ "file": "v2-dispatch-input-mapping.test.ts",
30356
+ "line": 65,
30357
+ "title": "an unset parent variable projects to undefined: the child input is absent, never null",
30358
+ "explicitId": null,
30359
+ "citations": []
30360
+ },
30361
+ {
30362
+ "id": "openwop.it.v2-dispatch-loop.each-turn-records-its-decision-and-terminate-completes-the-run",
30363
+ "file": "v2-dispatch-loop.test.ts",
30364
+ "line": 63,
30365
+ "title": "each turn records its decision and terminate completes the run",
30366
+ "explicitId": null,
30367
+ "citations": []
30368
+ },
30369
+ {
30370
+ "id": "openwop.it.v2-dispatch-loop.every-recorded-decision-is-well-formed-and-the-deciding-agent-never-changes",
30371
+ "file": "v2-dispatch-loop.test.ts",
30372
+ "line": 69,
30373
+ "title": "every recorded decision is well-formed and the deciding agent never changes",
30374
+ "explicitId": null,
30375
+ "citations": []
30376
+ },
30377
+ {
30378
+ "id": "openwop.it.v2-dispatch-loop.at-executionmodel-version-5-iteration-is-1-based-and-increments-by-exactly-1-per",
30379
+ "file": "v2-dispatch-loop.test.ts",
30380
+ "line": 75,
30381
+ "title": "at executionModel.version >= 5, iteration is 1-based and increments by exactly 1 per turn",
30382
+ "explicitId": null,
30383
+ "citations": []
30384
+ },
29743
30385
  {
29744
30386
  "id": "openwop.it.v2-dual-stack-negotiation.a-run-created-through-v1-runs-with-no-header-is-readable-through-runs-under-open",
29745
30387
  "file": "v2-dual-stack-negotiation.test.ts",
@@ -30120,6 +30762,248 @@
30120
30762
  }
30121
30763
  ]
30122
30764
  },
30765
+ {
30766
+ "id": "openwop.it.v2-envelope-contracts-advertisement.the-envelopecontracts-record-validates-against-its-capabilities-schema-seat",
30767
+ "file": "v2-envelope-contracts-advertisement.test.ts",
30768
+ "line": 32,
30769
+ "title": "the envelopeContracts record validates against its capabilities-schema seat",
30770
+ "explicitId": "openwop.requirement.envelope-contracts.advert-record-schema",
30771
+ "citations": [
30772
+ {
30773
+ "section": null,
30774
+ "requirement": null,
30775
+ "interpolated": true
30776
+ }
30777
+ ]
30778
+ },
30779
+ {
30780
+ "id": "openwop.requirement.envelopes.reasoning-declared-optional-string",
30781
+ "file": "v2-envelope-reasoning-shape.test.ts",
30782
+ "line": 45,
30783
+ "title": null,
30784
+ "explicitId": "openwop.requirement.envelopes.reasoning-declared-optional-string",
30785
+ "citations": [
30786
+ {
30787
+ "section": "events.md §envelopes",
30788
+ "requirement": null,
30789
+ "interpolated": true
30790
+ },
30791
+ {
30792
+ "section": "events.md §envelopes",
30793
+ "requirement": null,
30794
+ "interpolated": true
30795
+ },
30796
+ {
30797
+ "section": "events.md §envelopes",
30798
+ "requirement": null,
30799
+ "interpolated": true
30800
+ }
30801
+ ]
30802
+ },
30803
+ {
30804
+ "id": "openwop.it.v2-envelope-reasoning-shape.schema-response-does-not-declare-reasoning-a-side-channel-ack",
30805
+ "file": "v2-envelope-reasoning-shape.test.ts",
30806
+ "line": 55,
30807
+ "title": "schema.response does not declare reasoning (a side-channel ack)",
30808
+ "explicitId": "openwop.requirement.envelopes.reasoning-omitted-from-schema-response",
30809
+ "citations": [
30810
+ {
30811
+ "section": "RFC 0030 §A",
30812
+ "requirement": "schemas/v2/envelopes/schema.response.schema.json MUST exist"
30813
+ },
30814
+ {
30815
+ "section": "RFC 0030 §A",
30816
+ "requirement": "schema.response MUST NOT declare reasoning"
30817
+ }
30818
+ ]
30819
+ },
30820
+ {
30821
+ "id": "openwop.requirement.envelopes.reasoning-absent-accepted",
30822
+ "file": "v2-envelope-reasoning-shape.test.ts",
30823
+ "line": 67,
30824
+ "title": null,
30825
+ "explicitId": "openwop.requirement.envelopes.reasoning-absent-accepted",
30826
+ "citations": [
30827
+ {
30828
+ "section": "events.md §envelopes",
30829
+ "requirement": null,
30830
+ "interpolated": true
30831
+ }
30832
+ ]
30833
+ },
30834
+ {
30835
+ "id": "openwop.requirement.envelopes.reasoning-present-accepted",
30836
+ "file": "v2-envelope-reasoning-shape.test.ts",
30837
+ "line": 72,
30838
+ "title": null,
30839
+ "explicitId": "openwop.requirement.envelopes.reasoning-present-accepted",
30840
+ "citations": [
30841
+ {
30842
+ "section": "events.md §envelopes",
30843
+ "requirement": null,
30844
+ "interpolated": true
30845
+ }
30846
+ ]
30847
+ },
30848
+ {
30849
+ "id": "openwop.requirement.envelopes.reasoning-non-string-rejected",
30850
+ "file": "v2-envelope-reasoning-shape.test.ts",
30851
+ "line": 77,
30852
+ "title": null,
30853
+ "explicitId": "openwop.requirement.envelopes.reasoning-non-string-rejected",
30854
+ "citations": [
30855
+ {
30856
+ "section": "events.md §envelopes",
30857
+ "requirement": null,
30858
+ "interpolated": true
30859
+ }
30860
+ ]
30861
+ },
30862
+ {
30863
+ "id": "openwop.requirement.envelopes.tier-one-load-bearing-universal-kinds",
30864
+ "file": "v2-envelope-tier-one-subset-static.test.ts",
30865
+ "line": 46,
30866
+ "title": null,
30867
+ "explicitId": "openwop.requirement.envelopes.tier-one-load-bearing-universal-kinds",
30868
+ "citations": [
30869
+ {
30870
+ "section": "RFC 0030 §B",
30871
+ "requirement": null,
30872
+ "interpolated": true
30873
+ },
30874
+ {
30875
+ "section": "RFC 0030 §B",
30876
+ "requirement": null,
30877
+ "interpolated": true
30878
+ }
30879
+ ]
30880
+ },
30881
+ {
30882
+ "id": "openwop.it.v2-envelope-tier-one-subset-static.a-host-advertising-tieronesubsetcompliance-strict-has-advertised-kinds-whose-cor",
30883
+ "file": "v2-envelope-tier-one-subset-static.test.ts",
30884
+ "line": 56,
30885
+ "title": "a host advertising tierOneSubsetCompliance strict has advertised kinds whose corpus schemas satisfy the Tier-1 intersection",
30886
+ "explicitId": "openwop.requirement.envelopes.tier-one-strict-advertised-kinds",
30887
+ "citations": [
30888
+ {
30889
+ "section": "capabilities.schema.json §envelopes.tierOneSubsetCompliance",
30890
+ "requirement": null,
30891
+ "interpolated": true
30892
+ }
30893
+ ]
30894
+ },
30895
+ {
30896
+ "id": "openwop.it.v2-envelope-variant-discriminator-static.schemas-v2-envelopes-carries-a-payload-schema-for-each-universal-kind",
30897
+ "file": "v2-envelope-variant-discriminator-static.test.ts",
30898
+ "line": 42,
30899
+ "title": "schemas/v2/envelopes carries a payload schema for each universal kind",
30900
+ "explicitId": "openwop.requirement.envelopes.payload-schemas-present",
30901
+ "citations": [
30902
+ {
30903
+ "section": "RFC 0031 §A",
30904
+ "requirement": null,
30905
+ "interpolated": true
30906
+ }
30907
+ ]
30908
+ },
30909
+ {
30910
+ "id": "openwop.requirement.envelopes.variant-no-oneof",
30911
+ "file": "v2-envelope-variant-discriminator-static.test.ts",
30912
+ "line": 47,
30913
+ "title": null,
30914
+ "explicitId": "openwop.requirement.envelopes.variant-no-oneof",
30915
+ "citations": [
30916
+ {
30917
+ "section": "RFC 0031 §A",
30918
+ "requirement": null,
30919
+ "interpolated": true
30920
+ }
30921
+ ]
30922
+ },
30923
+ {
30924
+ "id": "openwop.requirement.envelopes.variant-anyof-discriminated",
30925
+ "file": "v2-envelope-variant-discriminator-static.test.ts",
30926
+ "line": 52,
30927
+ "title": null,
30928
+ "explicitId": "openwop.requirement.envelopes.variant-anyof-discriminated",
30929
+ "citations": [
30930
+ {
30931
+ "section": "RFC 0031 §A",
30932
+ "requirement": null,
30933
+ "interpolated": true
30934
+ }
30935
+ ]
30936
+ },
30937
+ {
30938
+ "id": "openwop.it.v2-envelopes-advertisement.the-envelopes-record-validates-against-its-capabilities-schema-seat",
30939
+ "file": "v2-envelopes-advertisement.test.ts",
30940
+ "line": 46,
30941
+ "title": "the envelopes record validates against its capabilities-schema seat",
30942
+ "explicitId": "openwop.requirement.envelopes.advert-record-schema",
30943
+ "citations": [
30944
+ {
30945
+ "section": null,
30946
+ "requirement": null,
30947
+ "interpolated": true
30948
+ }
30949
+ ]
30950
+ },
30951
+ {
30952
+ "id": "openwop.it.v2-envelopes-advertisement.envelopes-reasoning-promptdirective-is-mandatory-advisory-or-off",
30953
+ "file": "v2-envelopes-advertisement.test.ts",
30954
+ "line": 54,
30955
+ "title": "envelopes.reasoning.promptDirective is mandatory, advisory or off",
30956
+ "explicitId": "openwop.requirement.envelopes.reasoning-advert-shape",
30957
+ "citations": [
30958
+ {
30959
+ "section": null,
30960
+ "requirement": null,
30961
+ "interpolated": true
30962
+ }
30963
+ ]
30964
+ },
30965
+ {
30966
+ "id": "openwop.it.v2-envelopes-advertisement.envelopes-tieronesubsetcompliance-is-strict-warn-or-off",
30967
+ "file": "v2-envelopes-advertisement.test.ts",
30968
+ "line": 62,
30969
+ "title": "envelopes.tierOneSubsetCompliance is strict, warn or off",
30970
+ "explicitId": "openwop.requirement.envelopes.tier-one-subset-compliance-value",
30971
+ "citations": [
30972
+ {
30973
+ "section": null,
30974
+ "requirement": null,
30975
+ "interpolated": true
30976
+ }
30977
+ ]
30978
+ },
30979
+ {
30980
+ "id": "openwop.it.v2-envelopes-advertisement.envelopes-reliability-events-lists-only-reliability-events-and-includes-retry-ex",
30981
+ "file": "v2-envelopes-advertisement.test.ts",
30982
+ "line": 70,
30983
+ "title": "envelopes.reliability.events lists only reliability events and includes retry-exhausted and refusal",
30984
+ "explicitId": "openwop.requirement.envelopes.reliability-events-advert",
30985
+ "citations": [
30986
+ {
30987
+ "section": null,
30988
+ "requirement": null,
30989
+ "interpolated": true
30990
+ }
30991
+ ]
30992
+ },
30993
+ {
30994
+ "id": "openwop.it.v2-envelopes-advertisement.envelopes-reliability-completion-distinguishestruncation-is-a-boolean",
30995
+ "file": "v2-envelopes-advertisement.test.ts",
30996
+ "line": 78,
30997
+ "title": "envelopes.reliability.completion.distinguishesTruncation is a boolean",
30998
+ "explicitId": "openwop.requirement.envelopes.completion-advert-shape",
30999
+ "citations": [
31000
+ {
31001
+ "section": null,
31002
+ "requirement": null,
31003
+ "interpolated": true
31004
+ }
31005
+ ]
31006
+ },
30123
31007
  {
30124
31008
  "id": "openwop.it.v2-era-2-append-vocabulary.a-host-append-to-an-open-era-2-run-keeps-the-log-in-v1-vocabulary-so-the-whole-l",
30125
31009
  "file": "v2-era-2-append-vocabulary.test.ts",
@@ -30363,6 +31247,144 @@
30363
31247
  }
30364
31248
  ]
30365
31249
  },
31250
+ {
31251
+ "id": "openwop.it.v2-export-bundle-static.accepts-a-conforming-bundle-at-bundleversion-2",
31252
+ "file": "v2-export-bundle-static.test.ts",
31253
+ "line": 53,
31254
+ "title": "accepts a conforming bundle at bundleVersion \"2\"",
31255
+ "explicitId": "openwop.requirement.portability.bundle-version-2",
31256
+ "citations": [
31257
+ {
31258
+ "section": "portability.md §The export bundle",
31259
+ "requirement": null,
31260
+ "interpolated": true
31261
+ }
31262
+ ]
31263
+ },
31264
+ {
31265
+ "id": "openwop.it.v2-export-bundle-static.rejects-the-v1-bundleversion-1-and-a-missing-bundleversion",
31266
+ "file": "v2-export-bundle-static.test.ts",
31267
+ "line": 58,
31268
+ "title": "rejects the v1 bundleVersion \"1\" and a missing bundleVersion",
31269
+ "explicitId": "openwop.requirement.portability.bundle-version-2",
31270
+ "citations": [
31271
+ {
31272
+ "section": "portability.md §The export bundle",
31273
+ "requirement": "a v2 bundle MUST carry bundleVersion \"2\"; \"1\" MUST be rejected"
31274
+ },
31275
+ {
31276
+ "section": "portability.md §The export bundle",
31277
+ "requirement": "a bundle without bundleVersion MUST be rejected"
31278
+ }
31279
+ ]
31280
+ },
31281
+ {
31282
+ "id": "openwop.it.v2-export-bundle-static.rejects-an-unknown-item-kind-and-an-item-without-ref",
31283
+ "file": "v2-export-bundle-static.test.ts",
31284
+ "line": 64,
31285
+ "title": "rejects an unknown item kind and an item without ref",
31286
+ "explicitId": "openwop.requirement.portability.bundle-item-shape",
31287
+ "citations": [
31288
+ {
31289
+ "section": "portability.md §The export bundle",
31290
+ "requirement": "an unknown item kind MUST be rejected"
31291
+ },
31292
+ {
31293
+ "section": "portability.md §The export bundle",
31294
+ "requirement": "an item without a ref MUST be rejected"
31295
+ }
31296
+ ]
31297
+ },
31298
+ {
31299
+ "id": "openwop.it.v2-export-bundle-static.admits-no-s-field-at-the-bundle-root-or-under-source",
31300
+ "file": "v2-export-bundle-static.test.ts",
31301
+ "line": 69,
31302
+ "title": "admits no %s field at the bundle root or under source",
31303
+ "explicitId": "openwop.requirement.portability.bundle-no-credential-field",
31304
+ "citations": [
31305
+ {
31306
+ "section": "portability.md §The export bundle",
31307
+ "requirement": null,
31308
+ "interpolated": true
31309
+ },
31310
+ {
31311
+ "section": "portability.md §The export bundle",
31312
+ "requirement": null,
31313
+ "interpolated": true
31314
+ }
31315
+ ]
31316
+ },
31317
+ {
31318
+ "id": "openwop.it.v2-export-bundle-static.import-applied-is-a-registered-v2-run-event-type",
31319
+ "file": "v2-export-bundle-static.test.ts",
31320
+ "line": 79,
31321
+ "title": "import.applied is a registered v2 run-event type",
31322
+ "explicitId": "openwop.requirement.portability.import-applied-content-free",
31323
+ "citations": [
31324
+ {
31325
+ "section": null,
31326
+ "requirement": null,
31327
+ "interpolated": true
31328
+ }
31329
+ ]
31330
+ },
31331
+ {
31332
+ "id": "openwop.it.v2-export-bundle-static.a-counts-and-refs-payload-validates-one-carrying-item-payloads-does-not",
31333
+ "file": "v2-export-bundle-static.test.ts",
31334
+ "line": 84,
31335
+ "title": "a counts-and-refs payload validates; one carrying item payloads does not",
31336
+ "explicitId": "openwop.requirement.portability.import-applied-content-free",
31337
+ "citations": [
31338
+ {
31339
+ "section": null,
31340
+ "requirement": null,
31341
+ "interpolated": true
31342
+ },
31343
+ {
31344
+ "section": null,
31345
+ "requirement": "import.applied MUST NOT carry item payloads",
31346
+ "interpolated": true
31347
+ },
31348
+ {
31349
+ "section": null,
31350
+ "requirement": "import.applied counts MUST be the four outcome tallies only",
31351
+ "interpolated": true
31352
+ }
31353
+ ]
31354
+ },
31355
+ {
31356
+ "id": "openwop.it.v2-export-bundle-static.import-true-with-dryrun-true-validates-import-false-needs-no-dryrun",
31357
+ "file": "v2-export-bundle-static.test.ts",
31358
+ "line": 97,
31359
+ "title": "import: true with dryRun: true validates; import: false needs no dryRun",
31360
+ "explicitId": "openwop.requirement.portability.import-dry-run-schema-rule",
31361
+ "citations": [
31362
+ {
31363
+ "section": null,
31364
+ "requirement": null,
31365
+ "interpolated": true
31366
+ }
31367
+ ]
31368
+ },
31369
+ {
31370
+ "id": "openwop.it.v2-export-bundle-static.import-true-without-dryrun-or-with-dryrun-false-is-rejected",
31371
+ "file": "v2-export-bundle-static.test.ts",
31372
+ "line": 104,
31373
+ "title": "import: true without dryRun, or with dryRun: false, is rejected",
31374
+ "explicitId": "openwop.requirement.portability.import-dry-run-schema-rule",
31375
+ "citations": [
31376
+ {
31377
+ "section": null,
31378
+ "requirement": "import: true without dryRun MUST be rejected",
31379
+ "interpolated": true
31380
+ },
31381
+ {
31382
+ "section": null,
31383
+ "requirement": "import: true with dryRun: false MUST be rejected",
31384
+ "interpolated": true
31385
+ }
31386
+ ]
31387
+ },
30366
31388
  {
30367
31389
  "id": "openwop.it.v2-ext-family-claims.brand",
30368
31390
  "file": "v2-ext-family-claims.test.ts",
@@ -30745,6 +31767,67 @@
30745
31767
  }
30746
31768
  ]
30747
31769
  },
31770
+ {
31771
+ "id": "openwop.it.v2-i18n-negotiation.the-advertised-i18n-record-is-well-formed-and-lists-its-default-locale",
31772
+ "file": "v2-i18n-negotiation.test.ts",
31773
+ "line": 59,
31774
+ "title": "the advertised i18n record is well-formed and lists its default locale",
31775
+ "explicitId": "openwop.requirement.i18n.record-shape",
31776
+ "citations": [
31777
+ {
31778
+ "section": "schemas/v2/capabilities.schema.json §i18n",
31779
+ "requirement": null,
31780
+ "interpolated": true
31781
+ },
31782
+ {
31783
+ "section": null,
31784
+ "requirement": null,
31785
+ "interpolated": true
31786
+ }
31787
+ ]
31788
+ },
31789
+ {
31790
+ "id": "openwop.it.v2-i18n-negotiation.an-unsupported-accept-language-falls-back-and-content-language-never-lies",
31791
+ "file": "v2-i18n-negotiation.test.ts",
31792
+ "line": 68,
31793
+ "title": "an unsupported Accept-Language falls back and Content-Language never lies",
31794
+ "explicitId": "openwop.requirement.i18n.unsupported-locale-falls-back",
31795
+ "citations": [
31796
+ {
31797
+ "section": null,
31798
+ "requirement": null,
31799
+ "interpolated": true
31800
+ }
31801
+ ]
31802
+ },
31803
+ {
31804
+ "id": "openwop.it.v2-i18n-negotiation.a-malformed-accept-language-does-not-cause-400",
31805
+ "file": "v2-i18n-negotiation.test.ts",
31806
+ "line": 76,
31807
+ "title": "a malformed Accept-Language does not cause 400",
31808
+ "explicitId": "openwop.requirement.i18n.malformed-accept-language-not-400",
31809
+ "citations": [
31810
+ {
31811
+ "section": null,
31812
+ "requirement": null,
31813
+ "interpolated": true
31814
+ }
31815
+ ]
31816
+ },
31817
+ {
31818
+ "id": "openwop.it.v2-i18n-negotiation.the-error-code-and-details-keys-are-identical-under-every-negotiated-locale",
31819
+ "file": "v2-i18n-negotiation.test.ts",
31820
+ "line": 84,
31821
+ "title": "the error code and details keys are identical under every negotiated locale",
31822
+ "explicitId": "openwop.requirement.i18n.error-code-locale-invariant",
31823
+ "citations": [
31824
+ {
31825
+ "section": null,
31826
+ "requirement": null,
31827
+ "interpolated": true
31828
+ }
31829
+ ]
31830
+ },
30748
31831
  {
30749
31832
  "id": "openwop.it.v2-id-grammar.every-id-on-the-run-snapshot-matches-its-ids-schema-json-kind",
30750
31833
  "file": "v2-id-grammar.test.ts",
@@ -31350,6 +32433,215 @@
31350
32433
  }
31351
32434
  ]
31352
32435
  },
32436
+ {
32437
+ "id": "openwop.it.v2-limits-envelope-caps-advertisement.limits-clarificationrounds-is-present-and-a-non-negative-integer",
32438
+ "file": "v2-limits-envelope-caps-advertisement.test.ts",
32439
+ "line": 38,
32440
+ "title": "limits.clarificationRounds is present and a non-negative integer",
32441
+ "explicitId": "openwop.requirement.limits.clarification-rounds-advertised",
32442
+ "citations": [
32443
+ {
32444
+ "section": null,
32445
+ "requirement": null,
32446
+ "interpolated": true
32447
+ }
32448
+ ]
32449
+ },
32450
+ {
32451
+ "id": "openwop.it.v2-limits-envelope-caps-advertisement.limits-schemarounds-is-present-and-a-non-negative-integer",
32452
+ "file": "v2-limits-envelope-caps-advertisement.test.ts",
32453
+ "line": 46,
32454
+ "title": "limits.schemaRounds is present and a non-negative integer",
32455
+ "explicitId": "openwop.requirement.limits.schema-rounds-advertised",
32456
+ "citations": [
32457
+ {
32458
+ "section": null,
32459
+ "requirement": null,
32460
+ "interpolated": true
32461
+ }
32462
+ ]
32463
+ },
32464
+ {
32465
+ "id": "openwop.it.v2-limits-envelope-caps-advertisement.limits-envelopesperturn-is-present-and-a-non-negative-integer",
32466
+ "file": "v2-limits-envelope-caps-advertisement.test.ts",
32467
+ "line": 54,
32468
+ "title": "limits.envelopesPerTurn is present and a non-negative integer",
32469
+ "explicitId": "openwop.requirement.limits.envelopes-per-turn-advertised",
32470
+ "citations": [
32471
+ {
32472
+ "section": null,
32473
+ "requirement": null,
32474
+ "interpolated": true
32475
+ }
32476
+ ]
32477
+ },
32478
+ {
32479
+ "id": "openwop.it.v2-localized-content-delivery.the-v2-content-record-requires-baselocale-and-supportedlocales-and-has-no-suppor",
32480
+ "file": "v2-localized-content-delivery.test.ts",
32481
+ "line": 62,
32482
+ "title": "the v2 content record requires baseLocale and supportedLocales and has no supported seat",
32483
+ "explicitId": "openwop.requirement.content.capability-record-shape",
32484
+ "citations": [
32485
+ {
32486
+ "section": "schemas/v2/capabilities.schema.json §content",
32487
+ "requirement": "content MUST require baseLocale and supportedLocales"
32488
+ },
32489
+ {
32490
+ "section": "spec/v2/core/capabilities.md (presence is the claim)",
32491
+ "requirement": "the v2 content record MUST NOT declare a supported seat"
32492
+ },
32493
+ {
32494
+ "section": "schemas/v2/capabilities.schema.json §content",
32495
+ "requirement": "a conforming content record MUST validate"
32496
+ },
32497
+ {
32498
+ "section": "schemas/v2/capabilities.schema.json §content",
32499
+ "requirement": "a content record carrying supported MUST be rejected (closed record)"
32500
+ }
32501
+ ]
32502
+ },
32503
+ {
32504
+ "id": "openwop.it.v2-localized-content-delivery.a-conforming-section-validates-a-non-canonical-or-underscore-locale-key-a-missin",
32505
+ "file": "v2-localized-content-delivery.test.ts",
32506
+ "line": 73,
32507
+ "title": "a conforming section validates; a non-canonical or underscore locale key, a missing status, or an unknown status is rejected",
32508
+ "explicitId": "openwop.requirement.content.section-schema",
32509
+ "citations": [
32510
+ {
32511
+ "section": "spec/v2/core/i18n.md §Localized content",
32512
+ "requirement": null,
32513
+ "interpolated": true
32514
+ },
32515
+ {
32516
+ "section": "RFC 0206 §A.1",
32517
+ "requirement": null,
32518
+ "interpolated": true
32519
+ },
32520
+ {
32521
+ "section": "RFC 0206 §A.1",
32522
+ "requirement": null,
32523
+ "interpolated": true
32524
+ },
32525
+ {
32526
+ "section": "spec/v2/core/i18n.md §Localized content",
32527
+ "requirement": "status is REQUIRED"
32528
+ },
32529
+ {
32530
+ "section": "spec/v2/core/i18n.md §Localized content",
32531
+ "requirement": "status MUST be draft or published"
32532
+ },
32533
+ {
32534
+ "section": "spec/v2/core/i18n.md §Localized content",
32535
+ "requirement": "a section is a closed record"
32536
+ }
32537
+ ]
32538
+ },
32539
+ {
32540
+ "id": "openwop.it.v2-localized-content-delivery.a-conforming-page-validates-and-a-bad-slug-is-rejected",
32541
+ "file": "v2-localized-content-delivery.test.ts",
32542
+ "line": 87,
32543
+ "title": "a conforming page validates and a bad slug is rejected",
32544
+ "explicitId": "openwop.requirement.content.page-schema",
32545
+ "citations": [
32546
+ {
32547
+ "section": "spec/v2/core/i18n.md §Localized content",
32548
+ "requirement": null,
32549
+ "interpolated": true
32550
+ },
32551
+ {
32552
+ "section": "spec/v2/core/i18n.md §Localized content",
32553
+ "requirement": "slug MUST match ^[a-z][a-z0-9-]*$"
32554
+ }
32555
+ ]
32556
+ },
32557
+ {
32558
+ "id": "openwop.it.v2-localized-content-delivery.a-conforming-language-settings-document-validates",
32559
+ "file": "v2-localized-content-delivery.test.ts",
32560
+ "line": 93,
32561
+ "title": "a conforming language-settings document validates",
32562
+ "explicitId": "openwop.requirement.content.language-settings-schema",
32563
+ "citations": [
32564
+ {
32565
+ "section": "spec/v2/core/i18n.md §Localized content",
32566
+ "requirement": null,
32567
+ "interpolated": true
32568
+ },
32569
+ {
32570
+ "section": "spec/v2/core/i18n.md §Localized content",
32571
+ "requirement": "baseLocale MUST be a canonical BCP 47 key"
32572
+ }
32573
+ ]
32574
+ },
32575
+ {
32576
+ "id": "openwop.it.v2-localized-content-delivery.a-conforming-page-response-validates",
32577
+ "file": "v2-localized-content-delivery.test.ts",
32578
+ "line": 99,
32579
+ "title": "a conforming page response validates",
32580
+ "explicitId": "openwop.requirement.content.page-response-schema",
32581
+ "citations": [
32582
+ {
32583
+ "section": "spec/v2/core/i18n.md §Localized content",
32584
+ "requirement": null,
32585
+ "interpolated": true
32586
+ },
32587
+ {
32588
+ "section": "spec/v2/core/i18n.md §Localized content",
32589
+ "requirement": "a delivered section carries resolved data, never its localizations"
32590
+ }
32591
+ ]
32592
+ },
32593
+ {
32594
+ "id": "openwop.it.v2-localized-content-delivery.exact-tag-then-script-family-then-language-then-data-a-shallow-overlay",
32595
+ "file": "v2-localized-content-delivery.test.ts",
32596
+ "line": 111,
32597
+ "title": "exact tag, then script family, then language, then data — a shallow overlay",
32598
+ "explicitId": "openwop.requirement.content.section-merge",
32599
+ "citations": [
32600
+ {
32601
+ "section": "spec/v2/core/i18n.md §Localized content",
32602
+ "requirement": "an exact hit MUST overlay its fields onto data"
32603
+ },
32604
+ {
32605
+ "section": "spec/v2/core/i18n.md §Localized content",
32606
+ "requirement": "a field the overlay lacks MUST fall through to data"
32607
+ },
32608
+ {
32609
+ "section": "spec/v2/core/i18n.md §Localized content",
32610
+ "requirement": "pt-BR MUST fall back to the pt language overlay"
32611
+ },
32612
+ {
32613
+ "section": "spec/v2/core/i18n.md §Localized content",
32614
+ "requirement": "zh-Hant-TW MUST take the zh-Hant script family before zh"
32615
+ },
32616
+ {
32617
+ "section": "spec/v2/core/i18n.md §Localized content",
32618
+ "requirement": "no overlay MUST resolve to data alone"
32619
+ },
32620
+ {
32621
+ "section": "spec/v2/core/i18n.md §Localized content",
32622
+ "requirement": "baseLocale MUST resolve to data"
32623
+ }
32624
+ ]
32625
+ },
32626
+ {
32627
+ "id": "openwop.it.v2-localized-content-delivery.the-advertised-content-record-is-coherent-with-the-advertised-i18n-record",
32628
+ "file": "v2-localized-content-delivery.test.ts",
32629
+ "line": 123,
32630
+ "title": "the advertised content record is coherent with the advertised i18n record",
32631
+ "explicitId": "openwop.requirement.content.advertisement-coherent",
32632
+ "citations": [
32633
+ {
32634
+ "section": "schemas/v2/capabilities.schema.json §content",
32635
+ "requirement": null,
32636
+ "interpolated": true
32637
+ },
32638
+ {
32639
+ "section": null,
32640
+ "requirement": null,
32641
+ "interpolated": true
32642
+ }
32643
+ ]
32644
+ },
31353
32645
  {
31354
32646
  "id": "openwop.requirement.0172.malformed-body-envelope",
31355
32647
  "file": "v2-malformed-body-envelope.test.ts",
@@ -32344,6 +33636,74 @@
32344
33636
  }
32345
33637
  ]
32346
33638
  },
33639
+ {
33640
+ "id": "openwop.requirement.media.payload-schemas-compile",
33641
+ "file": "v2-media-inline-cap-static.test.ts",
33642
+ "line": 37,
33643
+ "title": null,
33644
+ "explicitId": "openwop.requirement.media.payload-schemas-compile",
33645
+ "citations": [
33646
+ {
33647
+ "section": "host-services.md §aiProviders",
33648
+ "requirement": null,
33649
+ "interpolated": true
33650
+ }
33651
+ ]
33652
+ },
33653
+ {
33654
+ "id": "openwop.it.v2-media-inline-cap-static.accepts-a-url-reference-image-payload",
33655
+ "file": "v2-media-inline-cap-static.test.ts",
33656
+ "line": 42,
33657
+ "title": "accepts a URL-reference image payload",
33658
+ "explicitId": "openwop.requirement.media.url-reference-accepted",
33659
+ "citations": [
33660
+ {
33661
+ "section": "host-services.md §aiProviders",
33662
+ "requirement": null,
33663
+ "interpolated": true
33664
+ }
33665
+ ]
33666
+ },
33667
+ {
33668
+ "id": "openwop.it.v2-media-inline-cap-static.accepts-an-inline-base64-audio-payload",
33669
+ "file": "v2-media-inline-cap-static.test.ts",
33670
+ "line": 47,
33671
+ "title": "accepts an inline-base64 audio payload",
33672
+ "explicitId": "openwop.requirement.media.inline-base64-accepted",
33673
+ "citations": [
33674
+ {
33675
+ "section": "host-services.md §aiProviders",
33676
+ "requirement": null,
33677
+ "interpolated": true
33678
+ }
33679
+ ]
33680
+ },
33681
+ {
33682
+ "id": "openwop.it.v2-media-inline-cap-static.rejects-a-media-payload-missing-bytes",
33683
+ "file": "v2-media-inline-cap-static.test.ts",
33684
+ "line": 52,
33685
+ "title": "rejects a media payload missing bytes",
33686
+ "explicitId": "openwop.requirement.media.bytes-required",
33687
+ "citations": [
33688
+ {
33689
+ "section": "host-services.md §aiProviders",
33690
+ "requirement": "bytes is required on a media payload — it is what the inline cap is judged against"
33691
+ }
33692
+ ]
33693
+ },
33694
+ {
33695
+ "id": "openwop.it.v2-media-inline-cap-static.rejects-a-media-payload-with-an-unknown-property",
33696
+ "file": "v2-media-inline-cap-static.test.ts",
33697
+ "line": 56,
33698
+ "title": "rejects a media payload with an unknown property",
33699
+ "explicitId": "openwop.requirement.media.payload-closed",
33700
+ "citations": [
33701
+ {
33702
+ "section": "host-services.md §aiProviders",
33703
+ "requirement": "a media payload is closed: an unknown property MUST be rejected"
33704
+ }
33705
+ ]
33706
+ },
32347
33707
  {
32348
33708
  "id": "openwop.it.v2-memory-cross-tenant-isolation.a-second-tenant-listing-the-same-memoryref-sees-none-of-the-first-tenant-s-entri",
32349
33709
  "file": "v2-memory-cross-tenant-isolation.test.ts",
@@ -32428,6 +33788,76 @@
32428
33788
  }
32429
33789
  ]
32430
33790
  },
33791
+ {
33792
+ "id": "openwop.it.v2-model-capabilities-advertisement.the-modelcapabilities-record-validates-against-its-capabilities-schema-seat",
33793
+ "file": "v2-model-capabilities-advertisement.test.ts",
33794
+ "line": 38,
33795
+ "title": "the modelCapabilities record validates against its capabilities-schema seat",
33796
+ "explicitId": "openwop.requirement.model-capabilities.advert-record-schema",
33797
+ "citations": [
33798
+ {
33799
+ "section": null,
33800
+ "requirement": null,
33801
+ "interpolated": true
33802
+ }
33803
+ ]
33804
+ },
33805
+ {
33806
+ "id": "openwop.it.v2-model-capabilities-advertisement.modelcapabilities-advertised-names-only-spec-reserved-or-x-host-prefixed-identif",
33807
+ "file": "v2-model-capabilities-advertisement.test.ts",
33808
+ "line": 46,
33809
+ "title": "modelCapabilities.advertised names only spec-reserved or x-host- prefixed identifiers",
33810
+ "explicitId": "openwop.requirement.model-capabilities.advertised-identifiers",
33811
+ "citations": [
33812
+ {
33813
+ "section": null,
33814
+ "requirement": null,
33815
+ "interpolated": true
33816
+ }
33817
+ ]
33818
+ },
33819
+ {
33820
+ "id": "openwop.it.v2-model-capabilities-advertisement.modelcapabilities-substitutionsupported-is-a-boolean",
33821
+ "file": "v2-model-capabilities-advertisement.test.ts",
33822
+ "line": 54,
33823
+ "title": "modelCapabilities.substitutionSupported is a boolean",
33824
+ "explicitId": "openwop.requirement.model-capabilities.substitution-supported-boolean",
33825
+ "citations": [
33826
+ {
33827
+ "section": null,
33828
+ "requirement": null,
33829
+ "interpolated": true
33830
+ }
33831
+ ]
33832
+ },
33833
+ {
33834
+ "id": "openwop.it.v2-model-capability-insufficient.a-node-requiring-a-capability-no-model-offers-fails-capability-not-provided-afte",
33835
+ "file": "v2-model-capability-insufficient.test.ts",
33836
+ "line": 50,
33837
+ "title": "a node requiring a capability no model offers fails capability_not_provided after model.capability-insufficient",
33838
+ "explicitId": "openwop.requirement.model-capabilities.insufficient-refusal",
33839
+ "citations": [
33840
+ {
33841
+ "section": null,
33842
+ "requirement": null,
33843
+ "interpolated": true
33844
+ }
33845
+ ]
33846
+ },
33847
+ {
33848
+ "id": "openwop.it.v2-model-capability-insufficient.a-refused-dispatch-emits-no-node-completion-provider-usage-or-envelope-reliabili",
33849
+ "file": "v2-model-capability-insufficient.test.ts",
33850
+ "line": 57,
33851
+ "title": "a refused dispatch emits no node completion, provider usage or envelope-reliability event",
33852
+ "explicitId": "openwop.requirement.model-capabilities.insufficient-no-dispatch",
33853
+ "citations": [
33854
+ {
33855
+ "section": null,
33856
+ "requirement": null,
33857
+ "interpolated": true
33858
+ }
33859
+ ]
33860
+ },
32431
33861
  {
32432
33862
  "id": "openwop.it.v2-mrtr-rounds-ceiling.mcp-mrtr-maxrounds-is-an-integer-ceiling-in-1-16",
32433
33863
  "file": "v2-mrtr-rounds-ceiling.test.ts",
@@ -32471,6 +33901,34 @@
32471
33901
  }
32472
33902
  ]
32473
33903
  },
33904
+ {
33905
+ "id": "openwop.it.v2-multi-party-conversation-advertisement.the-multipartyconversation-record-validates-against-its-capabilities-schema-seat",
33906
+ "file": "v2-multi-party-conversation-advertisement.test.ts",
33907
+ "line": 35,
33908
+ "title": "the multiPartyConversation record validates against its capabilities-schema seat",
33909
+ "explicitId": "openwop.requirement.multi-party-conversation.advert-record-schema",
33910
+ "citations": [
33911
+ {
33912
+ "section": null,
33913
+ "requirement": null,
33914
+ "interpolated": true
33915
+ }
33916
+ ]
33917
+ },
33918
+ {
33919
+ "id": "openwop.it.v2-multi-party-conversation-advertisement.multipartyconversation-maxparticipants-is-an-integer-of-at-least-2",
33920
+ "file": "v2-multi-party-conversation-advertisement.test.ts",
33921
+ "line": 44,
33922
+ "title": "multiPartyConversation.maxParticipants is an integer of at least 2",
33923
+ "explicitId": "openwop.requirement.multi-party-conversation.max-participants",
33924
+ "citations": [
33925
+ {
33926
+ "section": null,
33927
+ "requirement": null,
33928
+ "interpolated": true
33929
+ }
33930
+ ]
33931
+ },
32474
33932
  {
32475
33933
  "id": "openwop.it.v2-negotiation-authenticated.an-unauthenticated-a2a-exchange-cannot-lower-the-version-below-preferredversion",
32476
33934
  "file": "v2-negotiation-authenticated.test.ts",
@@ -32530,6 +33988,48 @@
32530
33988
  }
32531
33989
  ]
32532
33990
  },
33991
+ {
33992
+ "id": "openwop.it.v2-node-pack-runtimes-advertisement.the-nodepackruntimes-record-validates-against-its-capabilities-schema-seat",
33993
+ "file": "v2-node-pack-runtimes-advertisement.test.ts",
33994
+ "line": 35,
33995
+ "title": "the nodePackRuntimes record validates against its capabilities-schema seat",
33996
+ "explicitId": "openwop.requirement.node-pack-runtimes.advert-record-schema",
33997
+ "citations": [
33998
+ {
33999
+ "section": null,
34000
+ "requirement": null,
34001
+ "interpolated": true
34002
+ }
34003
+ ]
34004
+ },
34005
+ {
34006
+ "id": "openwop.it.v2-node-pack-runtimes-advertisement.nodepackruntimes-wasm-lists-abi-versions-and-a-memory-cap-in-range",
34007
+ "file": "v2-node-pack-runtimes-advertisement.test.ts",
34008
+ "line": 44,
34009
+ "title": "nodePackRuntimes.wasm lists ABI versions and a memory cap in range",
34010
+ "explicitId": "openwop.requirement.node-pack-runtimes.wasm-facet-shape",
34011
+ "citations": [
34012
+ {
34013
+ "section": null,
34014
+ "requirement": null,
34015
+ "interpolated": true
34016
+ }
34017
+ ]
34018
+ },
34019
+ {
34020
+ "id": "openwop.it.v2-nondeterminism-policy-advertisement.the-nondeterminismpolicy-record-validates-against-its-capabilities-schema-seat",
34021
+ "file": "v2-nondeterminism-policy-advertisement.test.ts",
34022
+ "line": 33,
34023
+ "title": "the nondeterminismPolicy record validates against its capabilities-schema seat",
34024
+ "explicitId": "openwop.requirement.nondeterminism-policy.advert-record-schema",
34025
+ "citations": [
34026
+ {
34027
+ "section": null,
34028
+ "requirement": null,
34029
+ "interpolated": true
34030
+ }
34031
+ ]
34032
+ },
32533
34033
  {
32534
34034
  "id": "openwop.it.v2-oauth-client-pkce-state-iss.sends-pkce-s256-and-the-verifier-at-the-token-endpoint-hashes-to-the-challenge",
32535
34035
  "file": "v2-oauth-client-pkce-state-iss.test.ts",
@@ -33327,6 +34827,48 @@
33327
34827
  }
33328
34828
  ]
33329
34829
  },
34830
+ {
34831
+ "id": "openwop.it.v2-portability-advertisement.the-portability-record-validates-against-its-capabilities-schema-seat",
34832
+ "file": "v2-portability-advertisement.test.ts",
34833
+ "line": 40,
34834
+ "title": "the portability record validates against its capabilities-schema seat",
34835
+ "explicitId": "openwop.requirement.portability.advert-record-schema",
34836
+ "citations": [
34837
+ {
34838
+ "section": null,
34839
+ "requirement": null,
34840
+ "interpolated": true
34841
+ }
34842
+ ]
34843
+ },
34844
+ {
34845
+ "id": "openwop.it.v2-portability-advertisement.a-host-advertising-portability-import-advertises-dryrun-true",
34846
+ "file": "v2-portability-advertisement.test.ts",
34847
+ "line": 48,
34848
+ "title": "a host advertising portability.import advertises dryRun: true",
34849
+ "explicitId": "openwop.requirement.portability.import-requires-dry-run",
34850
+ "citations": [
34851
+ {
34852
+ "section": null,
34853
+ "requirement": null,
34854
+ "interpolated": true
34855
+ }
34856
+ ]
34857
+ },
34858
+ {
34859
+ "id": "openwop.it.v2-portability-advertisement.portability-kinds-lists-unique-export-bundle-item-kinds",
34860
+ "file": "v2-portability-advertisement.test.ts",
34861
+ "line": 56,
34862
+ "title": "portability.kinds lists unique export-bundle item kinds",
34863
+ "explicitId": "openwop.requirement.portability.kinds-shape",
34864
+ "citations": [
34865
+ {
34866
+ "section": null,
34867
+ "requirement": null,
34868
+ "interpolated": true
34869
+ }
34870
+ ]
34871
+ },
33330
34872
  {
33331
34873
  "id": "openwop.it.v2-preferred-version-default.preferredversion-is-a-member-of-protocolversions",
33332
34874
  "file": "v2-preferred-version-default.test.ts",
@@ -33471,6 +35013,566 @@
33471
35013
  }
33472
35014
  ]
33473
35015
  },
35016
+ {
35017
+ "id": "openwop.it.v2-prompt-all-four-kinds-events.each-kind-and-each-configured-ref-is-resolved-and-composed",
35018
+ "file": "v2-prompt-all-four-kinds-events.test.ts",
35019
+ "line": 58,
35020
+ "title": "each kind and each configured ref is resolved and composed",
35021
+ "explicitId": "openwop.requirement.prompts.all-four-kinds-events",
35022
+ "citations": [
35023
+ {
35024
+ "section": null,
35025
+ "requirement": null,
35026
+ "interpolated": true
35027
+ }
35028
+ ]
35029
+ },
35030
+ {
35031
+ "id": "openwop.it.v2-prompt-all-four-kinds-events.every-prompt-composed-follows-an-agent-prompt-resolved-for-its-node",
35032
+ "file": "v2-prompt-all-four-kinds-events.test.ts",
35033
+ "line": 64,
35034
+ "title": "every prompt.composed follows an agent.prompt-resolved for its node",
35035
+ "explicitId": "openwop.requirement.prompts.resolution-precedes-composition",
35036
+ "citations": [
35037
+ {
35038
+ "section": null,
35039
+ "requirement": null,
35040
+ "interpolated": true
35041
+ }
35042
+ ]
35043
+ },
35044
+ {
35045
+ "id": "openwop.it.v2-prompt-end-to-end-events.the-node-layer-wins-and-prompt-composed-carries-the-hash-with-bodies-only-under",
35046
+ "file": "v2-prompt-end-to-end-events.test.ts",
35047
+ "line": 60,
35048
+ "title": "the node layer wins, and prompt.composed carries the hash with bodies only under full",
35049
+ "explicitId": "openwop.requirement.prompts.end-to-end-resolution-and-composition",
35050
+ "citations": [
35051
+ {
35052
+ "section": null,
35053
+ "requirement": null,
35054
+ "interpolated": true
35055
+ }
35056
+ ]
35057
+ },
35058
+ {
35059
+ "id": "openwop.it.v2-prompt-end-to-end-events.agent-prompt-resolved-precedes-prompt-composed-for-the-node",
35060
+ "file": "v2-prompt-end-to-end-events.test.ts",
35061
+ "line": 66,
35062
+ "title": "agent.prompt-resolved precedes prompt.composed for the node",
35063
+ "explicitId": "openwop.requirement.prompts.resolution-precedes-composition",
35064
+ "citations": [
35065
+ {
35066
+ "section": null,
35067
+ "requirement": null,
35068
+ "interpolated": true
35069
+ }
35070
+ ]
35071
+ },
35072
+ {
35073
+ "id": "openwop.it.v2-prompt-library-advertisement.the-promptlibrary-record-validates-against-its-capabilities-schema-seat",
35074
+ "file": "v2-prompt-library-advertisement.test.ts",
35075
+ "line": 32,
35076
+ "title": "the promptLibrary record validates against its capabilities-schema seat",
35077
+ "explicitId": "openwop.requirement.prompt-library.advert-record-schema",
35078
+ "citations": [
35079
+ {
35080
+ "section": null,
35081
+ "requirement": null,
35082
+ "interpolated": true
35083
+ }
35084
+ ]
35085
+ },
35086
+ {
35087
+ "id": "openwop.it.v2-prompt-list-and-fetch.get-prompts-answers-items-whose-every-entry-validates",
35088
+ "file": "v2-prompt-list-and-fetch.test.ts",
35089
+ "line": 56,
35090
+ "title": "GET /prompts answers items whose every entry validates",
35091
+ "explicitId": "openwop.requirement.prompts.list-shape",
35092
+ "citations": [
35093
+ {
35094
+ "section": null,
35095
+ "requirement": null,
35096
+ "interpolated": true
35097
+ }
35098
+ ]
35099
+ },
35100
+ {
35101
+ "id": "openwop.it.v2-prompt-list-and-fetch.the-kind-and-source-filters-narrow-the-list",
35102
+ "file": "v2-prompt-list-and-fetch.test.ts",
35103
+ "line": 64,
35104
+ "title": "the kind and source filters narrow the list",
35105
+ "explicitId": "openwop.requirement.prompts.list-filters",
35106
+ "citations": [
35107
+ {
35108
+ "section": null,
35109
+ "requirement": null,
35110
+ "interpolated": true
35111
+ }
35112
+ ]
35113
+ },
35114
+ {
35115
+ "id": "openwop.it.v2-prompt-list-and-fetch.a-listed-template-is-fetched-by-id",
35116
+ "file": "v2-prompt-list-and-fetch.test.ts",
35117
+ "line": 72,
35118
+ "title": "a listed template is fetched by id",
35119
+ "explicitId": "openwop.requirement.prompts.fetch-by-id",
35120
+ "citations": [
35121
+ {
35122
+ "section": null,
35123
+ "requirement": null,
35124
+ "interpolated": true
35125
+ }
35126
+ ]
35127
+ },
35128
+ {
35129
+ "id": "openwop.it.v2-prompt-list-and-fetch.an-etag-when-sent-revalidates-to-304",
35130
+ "file": "v2-prompt-list-and-fetch.test.ts",
35131
+ "line": 80,
35132
+ "title": "an ETag, when sent, revalidates to 304",
35133
+ "explicitId": "openwop.requirement.prompts.etag-revalidation",
35134
+ "citations": [
35135
+ {
35136
+ "section": null,
35137
+ "requirement": null,
35138
+ "interpolated": true
35139
+ }
35140
+ ]
35141
+ },
35142
+ {
35143
+ "id": "openwop.it.v2-prompt-list-and-fetch.an-unknown-templateid-answers-404-with-the-error-envelope",
35144
+ "file": "v2-prompt-list-and-fetch.test.ts",
35145
+ "line": 88,
35146
+ "title": "an unknown templateId answers 404 with the error envelope",
35147
+ "explicitId": "openwop.requirement.prompts.unknown-template-404",
35148
+ "citations": [
35149
+ {
35150
+ "section": null,
35151
+ "requirement": null,
35152
+ "interpolated": true
35153
+ }
35154
+ ]
35155
+ },
35156
+ {
35157
+ "id": "openwop.it.v2-prompt-list-and-fetch.with-endpointssupported-unadvertised-get-prompts-answers-404-not-found",
35158
+ "file": "v2-prompt-list-and-fetch.test.ts",
35159
+ "line": 96,
35160
+ "title": "with endpointsSupported unadvertised, GET /prompts answers 404 not_found",
35161
+ "explicitId": "openwop.requirement.prompts.endpoints-gate-off-404",
35162
+ "citations": [
35163
+ {
35164
+ "section": null,
35165
+ "requirement": null,
35166
+ "interpolated": true
35167
+ }
35168
+ ]
35169
+ },
35170
+ {
35171
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.post-prompts-creates-a-user-template-with-201-and-a-location",
35172
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35173
+ "line": 69,
35174
+ "title": "POST /prompts creates a user template with 201 and a Location",
35175
+ "explicitId": "openwop.requirement.prompts.create-user-template",
35176
+ "citations": [
35177
+ {
35178
+ "section": null,
35179
+ "requirement": null,
35180
+ "interpolated": true
35181
+ }
35182
+ ]
35183
+ },
35184
+ {
35185
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.the-created-template-reads-back-with-meta-source-user",
35186
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35187
+ "line": 75,
35188
+ "title": "the created template reads back with meta.source user",
35189
+ "explicitId": "openwop.requirement.prompts.created-template-source-user",
35190
+ "citations": [
35191
+ {
35192
+ "section": null,
35193
+ "requirement": null,
35194
+ "interpolated": true
35195
+ }
35196
+ ]
35197
+ },
35198
+ {
35199
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.a-second-post-of-the-same-templateid-and-version-answers-409",
35200
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35201
+ "line": 81,
35202
+ "title": "a second POST of the same templateId and version answers 409",
35203
+ "explicitId": "openwop.requirement.prompts.duplicate-version-409",
35204
+ "citations": [
35205
+ {
35206
+ "section": null,
35207
+ "requirement": null,
35208
+ "interpolated": true
35209
+ }
35210
+ ]
35211
+ },
35212
+ {
35213
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.put-with-a-greater-semver-replaces-the-template",
35214
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35215
+ "line": 87,
35216
+ "title": "PUT with a greater SemVer replaces the template",
35217
+ "explicitId": "openwop.requirement.prompts.update-greater-semver",
35218
+ "citations": [
35219
+ {
35220
+ "section": null,
35221
+ "requirement": null,
35222
+ "interpolated": true
35223
+ }
35224
+ ]
35225
+ },
35226
+ {
35227
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.put-with-a-lower-semver-answers-409",
35228
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35229
+ "line": 93,
35230
+ "title": "PUT with a lower SemVer answers 409",
35231
+ "explicitId": "openwop.requirement.prompts.update-non-monotonic-409",
35232
+ "citations": [
35233
+ {
35234
+ "section": null,
35235
+ "requirement": null,
35236
+ "interpolated": true
35237
+ }
35238
+ ]
35239
+ },
35240
+ {
35241
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.delete-answers-204-and-the-template-then-reads-404",
35242
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35243
+ "line": 99,
35244
+ "title": "DELETE answers 204 and the template then reads 404",
35245
+ "explicitId": "openwop.requirement.prompts.delete-user-template",
35246
+ "citations": [
35247
+ {
35248
+ "section": null,
35249
+ "requirement": null,
35250
+ "interpolated": true
35251
+ }
35252
+ ]
35253
+ },
35254
+ {
35255
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.a-host-built-in-template-is-read-only-delete-answers-403",
35256
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35257
+ "line": 107,
35258
+ "title": "a host built-in template is read-only: DELETE answers 403",
35259
+ "explicitId": "openwop.requirement.prompts.builtin-read-only",
35260
+ "citations": [
35261
+ {
35262
+ "section": null,
35263
+ "requirement": null,
35264
+ "interpolated": true
35265
+ }
35266
+ ]
35267
+ },
35268
+ {
35269
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.an-unauthenticated-write-is-refused-401",
35270
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35271
+ "line": 115,
35272
+ "title": "an unauthenticated write is refused 401",
35273
+ "explicitId": "openwop.requirement.prompts.writes-authenticated",
35274
+ "citations": [
35275
+ {
35276
+ "section": null,
35277
+ "requirement": null,
35278
+ "interpolated": true
35279
+ }
35280
+ ]
35281
+ },
35282
+ {
35283
+ "id": "openwop.it.v2-prompt-mutable-lifecycle.with-mutablelibrary-unadvertised-post-prompts-answers-404-not-found",
35284
+ "file": "v2-prompt-mutable-lifecycle.test.ts",
35285
+ "line": 123,
35286
+ "title": "with mutableLibrary unadvertised, POST /prompts answers 404 not_found",
35287
+ "explicitId": "openwop.requirement.prompts.mutable-gate-off-404",
35288
+ "citations": [
35289
+ {
35290
+ "section": null,
35291
+ "requirement": null,
35292
+ "interpolated": true
35293
+ }
35294
+ ]
35295
+ },
35296
+ {
35297
+ "id": "openwop.it.v2-prompt-pack-install.get-prompts-source-pack-lists-only-pack-templates-and-none-unless-packssupported",
35298
+ "file": "v2-prompt-pack-install.test.ts",
35299
+ "line": 55,
35300
+ "title": "GET /prompts?source=pack lists only pack templates, and none unless packsSupported",
35301
+ "explicitId": "openwop.requirement.prompts.pack-listing",
35302
+ "citations": [
35303
+ {
35304
+ "section": null,
35305
+ "requirement": null,
35306
+ "interpolated": true
35307
+ }
35308
+ ]
35309
+ },
35310
+ {
35311
+ "id": "openwop.it.v2-prompt-pack-install.every-pack-template-carries-meta-packname-and-meta-packversion",
35312
+ "file": "v2-prompt-pack-install.test.ts",
35313
+ "line": 63,
35314
+ "title": "every pack template carries meta.packName and meta.packVersion",
35315
+ "explicitId": "openwop.requirement.prompts.pack-template-stamps",
35316
+ "citations": [
35317
+ {
35318
+ "section": null,
35319
+ "requirement": null,
35320
+ "interpolated": true
35321
+ }
35322
+ ]
35323
+ },
35324
+ {
35325
+ "id": "openwop.it.v2-prompt-pack-install.the-reference-pack-template-is-fetched-by-id-and-keeps-its-pack-provenance",
35326
+ "file": "v2-prompt-pack-install.test.ts",
35327
+ "line": 71,
35328
+ "title": "the reference pack template is fetched by id and keeps its pack provenance",
35329
+ "explicitId": "openwop.requirement.prompts.reference-pack-fetch",
35330
+ "citations": [
35331
+ {
35332
+ "section": null,
35333
+ "requirement": null,
35334
+ "interpolated": true
35335
+ }
35336
+ ]
35337
+ },
35338
+ {
35339
+ "id": "openwop.it.v2-prompt-render-deterministic.identical-ref-and-variables-render-the-identical-hash-and-variablehashes",
35340
+ "file": "v2-prompt-render-deterministic.test.ts",
35341
+ "line": 56,
35342
+ "title": "identical ref and variables render the identical hash and variableHashes",
35343
+ "explicitId": "openwop.requirement.prompts.render-deterministic",
35344
+ "citations": [
35345
+ {
35346
+ "section": null,
35347
+ "requirement": null,
35348
+ "interpolated": true
35349
+ }
35350
+ ]
35351
+ },
35352
+ {
35353
+ "id": "openwop.it.v2-prompt-render-deterministic.a-changed-binding-changes-the-hash-and-its-variablehash",
35354
+ "file": "v2-prompt-render-deterministic.test.ts",
35355
+ "line": 64,
35356
+ "title": "a changed binding changes the hash and its variableHash",
35357
+ "explicitId": "openwop.requirement.prompts.render-binding-sensitive",
35358
+ "citations": [
35359
+ {
35360
+ "section": null,
35361
+ "requirement": null,
35362
+ "interpolated": true
35363
+ }
35364
+ ]
35365
+ },
35366
+ {
35367
+ "id": "openwop.it.v2-prompt-render-deterministic.hashes-are-sha256-hex-and-the-body-is-present-only-under-observability-full",
35368
+ "file": "v2-prompt-render-deterministic.test.ts",
35369
+ "line": 72,
35370
+ "title": "hashes are sha256 hex and the body is present only under observability full",
35371
+ "explicitId": "openwop.requirement.prompts.render-shape",
35372
+ "citations": [
35373
+ {
35374
+ "section": null,
35375
+ "requirement": null,
35376
+ "interpolated": true
35377
+ }
35378
+ ]
35379
+ },
35380
+ {
35381
+ "id": "openwop.it.v2-prompt-render-deterministic.an-unbound-required-variable-is-refused-400-validation-error",
35382
+ "file": "v2-prompt-render-deterministic.test.ts",
35383
+ "line": 80,
35384
+ "title": "an unbound required variable is refused 400 validation_error",
35385
+ "explicitId": "openwop.requirement.prompts.render-unbound-required-refused",
35386
+ "citations": [
35387
+ {
35388
+ "section": null,
35389
+ "requirement": null,
35390
+ "interpolated": true
35391
+ }
35392
+ ]
35393
+ },
35394
+ {
35395
+ "id": "openwop.it.v2-prompt-resolution-chain-event.every-agent-prompt-resolved-records-the-chain-it-walked-with-one-applied-layer-m",
35396
+ "file": "v2-prompt-resolution-chain-event.test.ts",
35397
+ "line": 37,
35398
+ "title": "every agent.prompt-resolved records the chain it walked, with one applied layer mirrored by resolved",
35399
+ "explicitId": "openwop.requirement.prompts.resolution-chain-record",
35400
+ "citations": [
35401
+ {
35402
+ "section": null,
35403
+ "requirement": null,
35404
+ "interpolated": true
35405
+ }
35406
+ ]
35407
+ },
35408
+ {
35409
+ "id": "openwop.it.v2-prompt-template-shape.prompt-kind-is-a-string-enum-of-exactly-the-four-kinds",
35410
+ "file": "v2-prompt-template-shape.test.ts",
35411
+ "line": 44,
35412
+ "title": "prompt-kind is a string enum of exactly the four kinds",
35413
+ "explicitId": "openwop.requirement.prompts.prompt-kind-enum",
35414
+ "citations": [
35415
+ {
35416
+ "section": "schemas/v2/prompt-kind.schema.json",
35417
+ "requirement": "prompt-kind MUST be type string"
35418
+ },
35419
+ {
35420
+ "section": "schemas/v2/prompt-kind.schema.json",
35421
+ "requirement": "prompt-kind MUST be exactly system, user, few-shot, schema-hint"
35422
+ }
35423
+ ]
35424
+ },
35425
+ {
35426
+ "id": "openwop.it.v2-prompt-template-shape.a-minimal-and-a-full-prompttemplate-validate-a-missing-text-a-non-semver-version",
35427
+ "file": "v2-prompt-template-shape.test.ts",
35428
+ "line": 50,
35429
+ "title": "a minimal and a full PromptTemplate validate; a missing text, a non-SemVer version, a bad templateId or kind, or a dashed variable name is rejected",
35430
+ "explicitId": "openwop.requirement.prompts.prompt-template-shape",
35431
+ "citations": [
35432
+ {
35433
+ "section": "schemas/v2/prompt-template.schema.json",
35434
+ "requirement": null,
35435
+ "interpolated": true
35436
+ },
35437
+ {
35438
+ "section": "schemas/v2/prompt-template.schema.json",
35439
+ "requirement": null,
35440
+ "interpolated": true
35441
+ },
35442
+ {
35443
+ "section": "schemas/v2/prompt-template.schema.json",
35444
+ "requirement": "text is REQUIRED"
35445
+ },
35446
+ {
35447
+ "section": "schemas/v2/prompt-template.schema.json",
35448
+ "requirement": "version MUST be SemVer"
35449
+ },
35450
+ {
35451
+ "section": "schemas/v2/ids.schema.json §templateId",
35452
+ "requirement": "templateId MUST match the templateId grammar (no /)"
35453
+ },
35454
+ {
35455
+ "section": "schemas/v2/prompt-template.schema.json",
35456
+ "requirement": "kind MUST be one of the four"
35457
+ },
35458
+ {
35459
+ "section": "schemas/v2/prompt-template.schema.json",
35460
+ "requirement": "a variable name MUST be a templating identifier (no dashes)"
35461
+ }
35462
+ ]
35463
+ },
35464
+ {
35465
+ "id": "openwop.it.v2-prompt-template-shape.prompttemplate-is-closed-an-unknown-property-is-rejected-an-extension-prefixed-o",
35466
+ "file": "v2-prompt-template-shape.test.ts",
35467
+ "line": 67,
35468
+ "title": "PromptTemplate is closed: an unknown property is rejected, an extension-prefixed one admitted, and a pack meta must carry its stamps",
35469
+ "explicitId": "openwop.requirement.prompts.prompt-template-closed",
35470
+ "citations": [
35471
+ {
35472
+ "section": "schemas/v2/prompt-template.schema.json",
35473
+ "requirement": "an unknown top-level property MUST be rejected"
35474
+ },
35475
+ {
35476
+ "section": null,
35477
+ "requirement": "an x- extension property MUST be admitted",
35478
+ "interpolated": true
35479
+ },
35480
+ {
35481
+ "section": "schemas/v2/prompt-template.schema.json",
35482
+ "requirement": "PromptVariable is closed"
35483
+ },
35484
+ {
35485
+ "section": "host-services.md §Library",
35486
+ "requirement": "a pack template MUST carry meta.packName and meta.packVersion"
35487
+ },
35488
+ {
35489
+ "section": "schemas/v2/prompt-template.schema.json",
35490
+ "requirement": "a stamped pack template MUST validate"
35491
+ }
35492
+ ]
35493
+ },
35494
+ {
35495
+ "id": "openwop.it.v2-prompt-template-shape.the-string-and-object-forms-validate-a-missing-prefix-a-non-semver-version-a-mis",
35496
+ "file": "v2-prompt-template-shape.test.ts",
35497
+ "line": 77,
35498
+ "title": "the string and object forms validate; a missing prefix, a non-SemVer version, a missing templateId or an unknown property is rejected",
35499
+ "explicitId": "openwop.requirement.prompts.prompt-ref-forms",
35500
+ "citations": [
35501
+ {
35502
+ "section": "schemas/v2/prompt-ref.schema.json",
35503
+ "requirement": null,
35504
+ "interpolated": true
35505
+ },
35506
+ {
35507
+ "section": "schemas/v2/prompt-ref.schema.json",
35508
+ "requirement": "the object form with templateId alone MUST validate"
35509
+ },
35510
+ {
35511
+ "section": "schemas/v2/prompt-ref.schema.json",
35512
+ "requirement": "the full object form MUST validate"
35513
+ },
35514
+ {
35515
+ "section": "schemas/v2/prompt-ref.schema.json",
35516
+ "requirement": "a string ref MUST start with prompt:"
35517
+ },
35518
+ {
35519
+ "section": "schemas/v2/prompt-ref.schema.json",
35520
+ "requirement": "a string ref version MUST be SemVer"
35521
+ },
35522
+ {
35523
+ "section": "schemas/v2/prompt-ref.schema.json",
35524
+ "requirement": "the object form MUST carry templateId"
35525
+ },
35526
+ {
35527
+ "section": "schemas/v2/prompt-ref.schema.json",
35528
+ "requirement": "the object form is closed"
35529
+ }
35530
+ ]
35531
+ },
35532
+ {
35533
+ "id": "openwop.it.v2-prompt-template-shape.a-kind-prompt-pack-validates-and-carries-no-nodes-or-chains",
35534
+ "file": "v2-prompt-template-shape.test.ts",
35535
+ "line": 91,
35536
+ "title": "a kind prompt pack validates and carries no nodes or chains",
35537
+ "explicitId": "openwop.requirement.prompts.prompt-pack-manifest-shape",
35538
+ "citations": [
35539
+ {
35540
+ "section": "schemas/v2/prompt-pack-manifest.schema.json",
35541
+ "requirement": null,
35542
+ "interpolated": true
35543
+ },
35544
+ {
35545
+ "section": "host-services.md §Library",
35546
+ "requirement": "a kind prompt pack MUST NOT carry nodes[]"
35547
+ },
35548
+ {
35549
+ "section": "host-services.md §Library",
35550
+ "requirement": "a kind prompt pack MUST NOT carry chains[]"
35551
+ },
35552
+ {
35553
+ "section": "schemas/v2/prompt-pack-manifest.schema.json",
35554
+ "requirement": "kind MUST be prompt"
35555
+ },
35556
+ {
35557
+ "section": "schemas/v2/prompt-pack-manifest.schema.json",
35558
+ "requirement": "a prompt pack MUST ship at least one template"
35559
+ }
35560
+ ]
35561
+ },
35562
+ {
35563
+ "id": "openwop.it.v2-prompt-template-shape.the-prompts-record-when-advertised-validates-against-the-v2-capabilities-schema",
35564
+ "file": "v2-prompt-template-shape.test.ts",
35565
+ "line": 102,
35566
+ "title": "the prompts record, when advertised, validates against the v2 capabilities schema",
35567
+ "explicitId": "openwop.requirement.prompts.capability-record-shape",
35568
+ "citations": [
35569
+ {
35570
+ "section": "schemas/v2/capabilities.schema.json §prompts",
35571
+ "requirement": null,
35572
+ "interpolated": true
35573
+ }
35574
+ ]
35575
+ },
33474
35576
  {
33475
35577
  "id": "openwop.it.v2-protected-resource-metadata.serves-rfc-9728-metadata-unauthenticated-at-the-uri-derived-from-its-resource-id",
33476
35578
  "file": "v2-protected-resource-metadata.test.ts",
@@ -33580,6 +35682,174 @@
33580
35682
  }
33581
35683
  ]
33582
35684
  },
35685
+ {
35686
+ "id": "openwop.it.v2-provider-usage-advertisement.the-providerusage-record-validates-against-its-capabilities-schema-seat",
35687
+ "file": "v2-provider-usage-advertisement.test.ts",
35688
+ "line": 38,
35689
+ "title": "the providerUsage record validates against its capabilities-schema seat",
35690
+ "explicitId": "openwop.requirement.provider-usage.advert-record-schema",
35691
+ "citations": [
35692
+ {
35693
+ "section": null,
35694
+ "requirement": null,
35695
+ "interpolated": true
35696
+ }
35697
+ ]
35698
+ },
35699
+ {
35700
+ "id": "openwop.it.v2-provider-usage-advertisement.providerusage-costestimates-is-one-boolean",
35701
+ "file": "v2-provider-usage-advertisement.test.ts",
35702
+ "line": 46,
35703
+ "title": "providerUsage.costEstimates is one boolean",
35704
+ "explicitId": "openwop.requirement.provider-usage.cost-estimates-boolean",
35705
+ "citations": [
35706
+ {
35707
+ "section": null,
35708
+ "requirement": null,
35709
+ "interpolated": true
35710
+ }
35711
+ ]
35712
+ },
35713
+ {
35714
+ "id": "openwop.it.v2-provider-usage-advertisement.providerusage-currency-is-an-iso-4217-code",
35715
+ "file": "v2-provider-usage-advertisement.test.ts",
35716
+ "line": 54,
35717
+ "title": "providerUsage.currency is an ISO 4217 code",
35718
+ "explicitId": "openwop.requirement.provider-usage.currency-iso-4217",
35719
+ "citations": [
35720
+ {
35721
+ "section": null,
35722
+ "requirement": null,
35723
+ "interpolated": true
35724
+ }
35725
+ ]
35726
+ },
35727
+ {
35728
+ "id": "openwop.it.v2-provider-usage-emission.a-live-model-run-carries-provider-usage-each-before-its-node-completed-and-each",
35729
+ "file": "v2-provider-usage-emission.test.ts",
35730
+ "line": 38,
35731
+ "title": "a live-model run carries provider.usage, each before its node.completed and each payload valid",
35732
+ "explicitId": "openwop.requirement.provider-usage.emitted-before-node-completed",
35733
+ "citations": [
35734
+ {
35735
+ "section": null,
35736
+ "requirement": null,
35737
+ "interpolated": true
35738
+ }
35739
+ ]
35740
+ },
35741
+ {
35742
+ "id": "openwop.it.v2-provider-usage-payload-static.provider-usage-is-a-registered-v2-run-event-type",
35743
+ "file": "v2-provider-usage-payload-static.test.ts",
35744
+ "line": 52,
35745
+ "title": "provider.usage is a registered v2 run-event type",
35746
+ "explicitId": "openwop.requirement.provider-usage.event-type-registered",
35747
+ "citations": [
35748
+ {
35749
+ "section": "events.md §providerUsage",
35750
+ "requirement": null,
35751
+ "interpolated": true
35752
+ }
35753
+ ]
35754
+ },
35755
+ {
35756
+ "id": "openwop.it.v2-provider-usage-payload-static.accepts-a-minimal-and-a-full-payload",
35757
+ "file": "v2-provider-usage-payload-static.test.ts",
35758
+ "line": 57,
35759
+ "title": "accepts a minimal and a full payload",
35760
+ "explicitId": "openwop.requirement.provider-usage.payload-well-formed-accepted",
35761
+ "citations": [
35762
+ {
35763
+ "section": "events.md §providerUsage",
35764
+ "requirement": null,
35765
+ "interpolated": true
35766
+ }
35767
+ ]
35768
+ },
35769
+ {
35770
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-a-payload-without-s",
35771
+ "file": "v2-provider-usage-payload-static.test.ts",
35772
+ "line": 64,
35773
+ "title": "rejects a payload without %s",
35774
+ "explicitId": "openwop.requirement.provider-usage.payload-required-fields",
35775
+ "citations": [
35776
+ {
35777
+ "section": "events.md §providerUsage",
35778
+ "requirement": null,
35779
+ "interpolated": true
35780
+ }
35781
+ ]
35782
+ },
35783
+ {
35784
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-s",
35785
+ "file": "v2-provider-usage-payload-static.test.ts",
35786
+ "line": 68,
35787
+ "title": "rejects %s",
35788
+ "explicitId": "openwop.requirement.provider-usage.payload-token-counts",
35789
+ "citations": [
35790
+ {
35791
+ "section": "events.md §providerUsage",
35792
+ "requirement": null,
35793
+ "interpolated": true
35794
+ }
35795
+ ]
35796
+ },
35797
+ {
35798
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-s~2",
35799
+ "file": "v2-provider-usage-payload-static.test.ts",
35800
+ "line": 76,
35801
+ "title": "rejects %s",
35802
+ "explicitId": "openwop.requirement.provider-usage.payload-cost-and-currency",
35803
+ "citations": [
35804
+ {
35805
+ "section": "events.md §providerUsage",
35806
+ "requirement": null,
35807
+ "interpolated": true
35808
+ }
35809
+ ]
35810
+ },
35811
+ {
35812
+ "id": "openwop.it.v2-provider-usage-payload-static.rejects-a-payload-carrying-s",
35813
+ "file": "v2-provider-usage-payload-static.test.ts",
35814
+ "line": 84,
35815
+ "title": "rejects a payload carrying %s",
35816
+ "explicitId": "openwop.requirement.provider-usage.payload-no-credential-or-content",
35817
+ "citations": [
35818
+ {
35819
+ "section": "events.md §providerUsage",
35820
+ "requirement": null,
35821
+ "interpolated": true
35822
+ }
35823
+ ]
35824
+ },
35825
+ {
35826
+ "id": "openwop.it.v2-purpose-propagation-advertisement.the-purposepropagation-record-validates-against-its-capabilities-schema-seat",
35827
+ "file": "v2-purpose-propagation-advertisement.test.ts",
35828
+ "line": 35,
35829
+ "title": "the purposePropagation record validates against its capabilities-schema seat",
35830
+ "explicitId": "openwop.requirement.purpose-propagation.advert-record-schema",
35831
+ "citations": [
35832
+ {
35833
+ "section": null,
35834
+ "requirement": null,
35835
+ "interpolated": true
35836
+ }
35837
+ ]
35838
+ },
35839
+ {
35840
+ "id": "openwop.it.v2-purpose-propagation-advertisement.purposepropagation-propagatesonward-is-a-boolean",
35841
+ "file": "v2-purpose-propagation-advertisement.test.ts",
35842
+ "line": 44,
35843
+ "title": "purposePropagation.propagatesOnward is a boolean",
35844
+ "explicitId": "openwop.requirement.purpose-propagation.propagates-onward-boolean",
35845
+ "citations": [
35846
+ {
35847
+ "section": null,
35848
+ "requirement": null,
35849
+ "interpolated": true
35850
+ }
35851
+ ]
35852
+ },
33583
35853
  {
33584
35854
  "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",
33585
35855
  "file": "v2-queue-cross-tenant-isolation.test.ts",
@@ -34062,6 +36332,48 @@
34062
36332
  }
34063
36333
  ]
34064
36334
  },
36335
+ {
36336
+ "id": "openwop.it.v2-run-execution-bounds.advertised-limits-maxrundurationms-and-maxloopiterations-are-well-formed",
36337
+ "file": "v2-run-execution-bounds.test.ts",
36338
+ "line": 46,
36339
+ "title": "advertised limits.maxRunDurationMs and maxLoopIterations are well-formed",
36340
+ "explicitId": "openwop.requirement.runs.limits-bounds-shape",
36341
+ "citations": [
36342
+ {
36343
+ "section": null,
36344
+ "requirement": null,
36345
+ "interpolated": true
36346
+ }
36347
+ ]
36348
+ },
36349
+ {
36350
+ "id": "openwop.it.v2-run-execution-bounds.an-out-of-range-runtimeoutms-is-refused-400-validation-error-at-create",
36351
+ "file": "v2-run-execution-bounds.test.ts",
36352
+ "line": 56,
36353
+ "title": "an out-of-range runTimeoutMs is refused 400 validation_error at create",
36354
+ "explicitId": "openwop.requirement.runs.run-timeout-out-of-range-refused",
36355
+ "citations": [
36356
+ {
36357
+ "section": null,
36358
+ "requirement": null,
36359
+ "interpolated": true
36360
+ }
36361
+ ]
36362
+ },
36363
+ {
36364
+ "id": "openwop.it.v2-run-execution-bounds.a-run-exceeding-runtimeoutms-fails-run-timeout-with-cap-breached-kind-run-durati",
36365
+ "file": "v2-run-execution-bounds.test.ts",
36366
+ "line": 62,
36367
+ "title": "a run exceeding runTimeoutMs fails run_timeout with cap.breached { kind: run-duration }",
36368
+ "explicitId": "openwop.requirement.runs.run-timeout-breach",
36369
+ "citations": [
36370
+ {
36371
+ "section": null,
36372
+ "requirement": null,
36373
+ "interpolated": true
36374
+ }
36375
+ ]
36376
+ },
34065
36377
  {
34066
36378
  "id": "openwop.it.v2-run-fork-ancestry.a-branch-fork-is-not-a-composition-child-its-ancestry-parent-is-null",
34067
36379
  "file": "v2-run-fork-ancestry.test.ts",
@@ -34452,6 +36764,34 @@
34452
36764
  }
34453
36765
  ]
34454
36766
  },
36767
+ {
36768
+ "id": "openwop.it.v2-scheduling-advertisement.the-scheduling-record-validates-against-its-capabilities-schema-seat",
36769
+ "file": "v2-scheduling-advertisement.test.ts",
36770
+ "line": 38,
36771
+ "title": "the scheduling record validates against its capabilities-schema seat",
36772
+ "explicitId": "openwop.requirement.scheduling.advert-record-schema",
36773
+ "citations": [
36774
+ {
36775
+ "section": null,
36776
+ "requirement": null,
36777
+ "interpolated": true
36778
+ }
36779
+ ]
36780
+ },
36781
+ {
36782
+ "id": "openwop.it.v2-scheduling-advertisement.scheduling-cron-delayed-and-calendar-are-booleans",
36783
+ "file": "v2-scheduling-advertisement.test.ts",
36784
+ "line": 47,
36785
+ "title": "scheduling.cron, delayed and calendar are booleans",
36786
+ "explicitId": "openwop.requirement.scheduling.forms-boolean",
36787
+ "citations": [
36788
+ {
36789
+ "section": null,
36790
+ "requirement": null,
36791
+ "interpolated": true
36792
+ }
36793
+ ]
36794
+ },
34455
36795
  {
34456
36796
  "id": "openwop.it.v2-secret-canary-absent.a-secret-resolved-from-the-host-s-store-appears-on-no-readable-surface-of-the-ru",
34457
36797
  "file": "v2-secret-canary-absent.test.ts",
@@ -34601,6 +36941,144 @@
34601
36941
  }
34602
36942
  ]
34603
36943
  },
36944
+ {
36945
+ "id": "openwop.it.v2-self-hosted-runner-advertisement.the-selfhostedrunner-record-validates-against-its-capabilities-schema-seat",
36946
+ "file": "v2-self-hosted-runner-advertisement.test.ts",
36947
+ "line": 37,
36948
+ "title": "the selfHostedRunner record validates against its capabilities-schema seat",
36949
+ "explicitId": "openwop.requirement.self-hosted-runner.advert-record-schema",
36950
+ "citations": [
36951
+ {
36952
+ "section": null,
36953
+ "requirement": null,
36954
+ "interpolated": true
36955
+ }
36956
+ ]
36957
+ },
36958
+ {
36959
+ "id": "openwop.it.v2-self-hosted-runner-advertisement.selfhostedrunner-dispatchkinds-lists-model-tool-or-both",
36960
+ "file": "v2-self-hosted-runner-advertisement.test.ts",
36961
+ "line": 45,
36962
+ "title": "selfHostedRunner.dispatchKinds lists model, tool or both",
36963
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-kinds",
36964
+ "citations": [
36965
+ {
36966
+ "section": null,
36967
+ "requirement": null,
36968
+ "interpolated": true
36969
+ }
36970
+ ]
36971
+ },
36972
+ {
36973
+ "id": "openwop.requirement.self-hosted-runner.frame-schemas-compile",
36974
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
36975
+ "line": 56,
36976
+ "title": null,
36977
+ "explicitId": "openwop.requirement.self-hosted-runner.frame-schemas-compile",
36978
+ "citations": [
36979
+ {
36980
+ "section": "execution.md §selfHostedRunner",
36981
+ "requirement": null,
36982
+ "interpolated": true
36983
+ }
36984
+ ]
36985
+ },
36986
+ {
36987
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-model-frame-and-a-tool-frame",
36988
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
36989
+ "line": 65,
36990
+ "title": "accepts a model frame and a tool frame",
36991
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-frame-shape",
36992
+ "citations": [
36993
+ {
36994
+ "section": "execution.md §selfHostedRunner",
36995
+ "requirement": null,
36996
+ "interpolated": true
36997
+ }
36998
+ ]
36999
+ },
37000
+ {
37001
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-s",
37002
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37003
+ "line": 72,
37004
+ "title": "rejects %s",
37005
+ "explicitId": "openwop.requirement.self-hosted-runner.dispatch-frame-shape",
37006
+ "citations": [
37007
+ {
37008
+ "section": "execution.md §selfHostedRunner",
37009
+ "requirement": null,
37010
+ "interpolated": true
37011
+ }
37012
+ ]
37013
+ },
37014
+ {
37015
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-result-frame",
37016
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37017
+ "line": 89,
37018
+ "title": "accepts a result frame",
37019
+ "explicitId": "openwop.requirement.self-hosted-runner.result-frame-shape",
37020
+ "citations": [
37021
+ {
37022
+ "section": "execution.md §selfHostedRunner",
37023
+ "requirement": null,
37024
+ "interpolated": true
37025
+ }
37026
+ ]
37027
+ },
37028
+ {
37029
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-a-result-frame-without-output",
37030
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37031
+ "line": 94,
37032
+ "title": "rejects a result frame without output",
37033
+ "explicitId": "openwop.requirement.self-hosted-runner.result-frame-shape",
37034
+ "citations": [
37035
+ {
37036
+ "section": "execution.md §selfHostedRunner",
37037
+ "requirement": "a result frame without output MUST be rejected"
37038
+ }
37039
+ ]
37040
+ },
37041
+ {
37042
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.a-s-with-an-extra-credential-named-field-is-rejected",
37043
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37044
+ "line": 100,
37045
+ "title": "a %s with an extra credential-named field is rejected",
37046
+ "explicitId": "openwop.requirement.self-hosted-runner.frames-closed",
37047
+ "citations": [
37048
+ {
37049
+ "section": "execution.md §selfHostedRunner",
37050
+ "requirement": null,
37051
+ "interpolated": true
37052
+ }
37053
+ ]
37054
+ },
37055
+ {
37056
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.accepts-a-registration",
37057
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37058
+ "line": 113,
37059
+ "title": "accepts a registration",
37060
+ "explicitId": "openwop.requirement.self-hosted-runner.registration-shape",
37061
+ "citations": [
37062
+ {
37063
+ "section": "execution.md §selfHostedRunner",
37064
+ "requirement": null,
37065
+ "interpolated": true
37066
+ }
37067
+ ]
37068
+ },
37069
+ {
37070
+ "id": "openwop.it.v2-self-hosted-runner-frames-static.rejects-a-registration-without-subject",
37071
+ "file": "v2-self-hosted-runner-frames-static.test.ts",
37072
+ "line": 118,
37073
+ "title": "rejects a registration without subject",
37074
+ "explicitId": "openwop.requirement.self-hosted-runner.registration-shape",
37075
+ "citations": [
37076
+ {
37077
+ "section": "execution.md §selfHostedRunner",
37078
+ "requirement": "a registration without its owning subject MUST be rejected"
37079
+ }
37080
+ ]
37081
+ },
34604
37082
  {
34605
37083
  "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",
34606
37084
  "file": "v2-sse-last-event-id-cursor.test.ts",
@@ -35072,6 +37550,34 @@
35072
37550
  }
35073
37551
  ]
35074
37552
  },
37553
+ {
37554
+ "id": "openwop.it.v2-sub-workflow-advertisement.the-subworkflow-record-validates-against-its-capabilities-schema-seat",
37555
+ "file": "v2-sub-workflow-advertisement.test.ts",
37556
+ "line": 36,
37557
+ "title": "the subWorkflow record validates against its capabilities-schema seat",
37558
+ "explicitId": "openwop.requirement.sub-workflow.advert-record-schema",
37559
+ "citations": [
37560
+ {
37561
+ "section": null,
37562
+ "requirement": null,
37563
+ "interpolated": true
37564
+ }
37565
+ ]
37566
+ },
37567
+ {
37568
+ "id": "openwop.it.v2-sub-workflow-advertisement.subworkflow-inputmapping-is-one-boolean",
37569
+ "file": "v2-sub-workflow-advertisement.test.ts",
37570
+ "line": 45,
37571
+ "title": "subWorkflow.inputMapping is one boolean",
37572
+ "explicitId": "openwop.requirement.sub-workflow.input-mapping-boolean",
37573
+ "citations": [
37574
+ {
37575
+ "section": null,
37576
+ "requirement": null,
37577
+ "interpolated": true
37578
+ }
37579
+ ]
37580
+ },
35075
37581
  {
35076
37582
  "id": "openwop.it.v2-subject-link-record.the-link-formed-across-scim-and-saml-is-a-closed-subjectlink-record",
35077
37583
  "file": "v2-subject-link-record.test.ts",
@@ -35116,6 +37622,54 @@
35116
37622
  }
35117
37623
  ]
35118
37624
  },
37625
+ {
37626
+ "id": "openwop.it.v2-subworkflow-input-mapping.inputmapping-seeds-the-child-variable-bag-at-creation",
37627
+ "file": "v2-subworkflow-input-mapping.test.ts",
37628
+ "line": 57,
37629
+ "title": "inputMapping seeds the child variable bag at creation",
37630
+ "explicitId": null,
37631
+ "citations": []
37632
+ },
37633
+ {
37634
+ "id": "openwop.it.v2-subworkflow-input-mapping.the-mapped-parent-value-lands-after-and-over-the-child-defaultvalue",
37635
+ "file": "v2-subworkflow-input-mapping.test.ts",
37636
+ "line": 63,
37637
+ "title": "the mapped parent value lands after and over the child defaultValue",
37638
+ "explicitId": null,
37639
+ "citations": []
37640
+ },
37641
+ {
37642
+ "id": "openwop.it.v2-subworkflow-input-mapping.an-unset-parent-variable-arrives-undefined-never-an-error-or-null",
37643
+ "file": "v2-subworkflow-input-mapping.test.ts",
37644
+ "line": 69,
37645
+ "title": "an unset parent variable arrives undefined, never an error or null",
37646
+ "explicitId": null,
37647
+ "citations": []
37648
+ },
37649
+ {
37650
+ "id": "openwop.it.v2-subworkflow-linkage.node-completed-for-the-core-subworkflow-node-carries-outputs-childrunid-and-outp",
37651
+ "file": "v2-subworkflow-linkage.test.ts",
37652
+ "line": 59,
37653
+ "title": "node.completed for the core.subWorkflow node carries outputs.childRunId and outputs.childStatus",
37654
+ "explicitId": null,
37655
+ "citations": []
37656
+ },
37657
+ {
37658
+ "id": "openwop.it.v2-subworkflow-linkage.outputmapping-copies-the-child-variable-into-the-parent-after-the-child-complete",
37659
+ "file": "v2-subworkflow-linkage.test.ts",
37660
+ "line": 65,
37661
+ "title": "outputMapping copies the child variable into the parent after the child completes",
37662
+ "explicitId": null,
37663
+ "citations": []
37664
+ },
37665
+ {
37666
+ "id": "openwop.it.v2-subworkflow-linkage.getrunancestry-names-the-parent-run-with-cause-core-subworkflow",
37667
+ "file": "v2-subworkflow-linkage.test.ts",
37668
+ "line": 71,
37669
+ "title": "getRunAncestry names the parent run with cause core.subWorkflow",
37670
+ "explicitId": null,
37671
+ "citations": []
37672
+ },
35119
37673
  {
35120
37674
  "id": "openwop.it.v2-table-schema-enforcement.a-well-typed-insert-completes-positive-control",
35121
37675
  "file": "v2-table-schema-enforcement.test.ts",
@@ -35478,6 +38032,76 @@
35478
38032
  }
35479
38033
  ]
35480
38034
  },
38035
+ {
38036
+ "id": "openwop.it.v2-ui-plugins-advertisement.the-uiplugins-record-validates-against-its-capabilities-schema-seat",
38037
+ "file": "v2-ui-plugins-advertisement.test.ts",
38038
+ "line": 41,
38039
+ "title": "the uiPlugins record validates against its capabilities-schema seat",
38040
+ "explicitId": "openwop.requirement.ui-plugins.advert-record-schema",
38041
+ "citations": [
38042
+ {
38043
+ "section": null,
38044
+ "requirement": null,
38045
+ "interpolated": true
38046
+ }
38047
+ ]
38048
+ },
38049
+ {
38050
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-isolation-is-a-closed-mechanism-or-an-x-host-value",
38051
+ "file": "v2-ui-plugins-advertisement.test.ts",
38052
+ "line": 50,
38053
+ "title": "uiPlugins.isolation is a closed mechanism or an x-host value",
38054
+ "explicitId": "openwop.requirement.ui-plugins.isolation-model",
38055
+ "citations": [
38056
+ {
38057
+ "section": null,
38058
+ "requirement": null,
38059
+ "interpolated": true
38060
+ }
38061
+ ]
38062
+ },
38063
+ {
38064
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-surfaces-are-unique-members-of-the-closed-surface-set",
38065
+ "file": "v2-ui-plugins-advertisement.test.ts",
38066
+ "line": 59,
38067
+ "title": "uiPlugins.surfaces are unique members of the closed surface set",
38068
+ "explicitId": "openwop.requirement.ui-plugins.surfaces-closed",
38069
+ "citations": [
38070
+ {
38071
+ "section": null,
38072
+ "requirement": null,
38073
+ "interpolated": true
38074
+ }
38075
+ ]
38076
+ },
38077
+ {
38078
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-hostapi-are-unique-members-of-the-ui-plugin-1-method-set",
38079
+ "file": "v2-ui-plugins-advertisement.test.ts",
38080
+ "line": 68,
38081
+ "title": "uiPlugins.hostApi are unique members of the ui-plugin/1 method set",
38082
+ "explicitId": "openwop.requirement.ui-plugins.host-api-closed",
38083
+ "citations": [
38084
+ {
38085
+ "section": null,
38086
+ "requirement": null,
38087
+ "interpolated": true
38088
+ }
38089
+ ]
38090
+ },
38091
+ {
38092
+ "id": "openwop.it.v2-ui-plugins-advertisement.uiplugins-maxentrybytes-is-a-positive-integer",
38093
+ "file": "v2-ui-plugins-advertisement.test.ts",
38094
+ "line": 77,
38095
+ "title": "uiPlugins.maxEntryBytes is a positive integer",
38096
+ "explicitId": "openwop.requirement.ui-plugins.max-entry-bytes",
38097
+ "citations": [
38098
+ {
38099
+ "section": null,
38100
+ "requirement": null,
38101
+ "interpolated": true
38102
+ }
38103
+ ]
38104
+ },
35481
38105
  {
35482
38106
  "id": "openwop.it.v2-unadvertised-operation-not-found.get-prompts-answers-404-not-found-when-prompts-endpointssupported-is-not-adverti",
35483
38107
  "file": "v2-unadvertised-operation-not-found.test.ts",
@@ -43981,6 +46605,46 @@
43981
46605
  }
43982
46606
  ]
43983
46607
  },
46608
+ {
46609
+ "id": "openwop.it.v2-conversation-payload-mirrors.conversationopened-seats-every-field-conversationopenedpayload-carries",
46610
+ "file": "v2-conversation-payload-mirrors.test.ts",
46611
+ "line": 44,
46612
+ "title": "conversationOpened seats every field ConversationOpenedPayload carries",
46613
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46614
+ "citations": [
46615
+ {
46616
+ "section": "conversation.md",
46617
+ "requirement": null,
46618
+ "interpolated": true
46619
+ }
46620
+ ]
46621
+ },
46622
+ {
46623
+ "id": "openwop.it.v2-conversation-payload-mirrors.the-inlined-conversationturn-carries-every-field-of-conversation-turn-schema-jso",
46624
+ "file": "v2-conversation-payload-mirrors.test.ts",
46625
+ "line": 51,
46626
+ "title": "the inlined ConversationTurn carries every field of conversation-turn.schema.json",
46627
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46628
+ "citations": [
46629
+ {
46630
+ "section": "conversation.md",
46631
+ "requirement": "the ConversationTurn mirror MUST carry the same top-level fields as conversation-turn.schema.json"
46632
+ }
46633
+ ]
46634
+ },
46635
+ {
46636
+ "id": "openwop.it.v2-conversation-payload-mirrors.the-inlined-conversationturn-agent-carries-every-field-of-the-source-agent",
46637
+ "file": "v2-conversation-payload-mirrors.test.ts",
46638
+ "line": 56,
46639
+ "title": "the inlined ConversationTurn.agent carries every field of the source agent",
46640
+ "explicitId": "openwop.requirement.conversation.payload-mirrors-agree",
46641
+ "citations": [
46642
+ {
46643
+ "section": "conversation.md",
46644
+ "requirement": "ConversationTurn.agent MUST carry the same fields as conversation-turn.schema.json agent (incl. `model`)"
46645
+ }
46646
+ ]
46647
+ },
43984
46648
  {
43985
46649
  "id": "openwop.it.v2-corpus-tag-pinned.every-vendoring-consumer-in-the-cross-repo-inventory-records-a-published-corpus",
43986
46650
  "file": "v2-corpus-tag-pinned.test.ts",