@adcp/sdk 7.10.2 → 7.11.1

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 (305) hide show
  1. package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
  2. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  3. package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
  4. package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
  5. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
  6. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
  7. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  8. package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
  9. package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
  10. package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
  11. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  12. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
  13. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  14. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
  15. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  16. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  17. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  18. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  19. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
  20. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
  21. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
  22. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  23. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  24. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  25. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
  26. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
  27. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
  28. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  29. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
  30. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  31. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  32. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
  33. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  34. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  35. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  36. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  37. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  38. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  39. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  40. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
  41. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  42. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  43. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  44. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  45. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  46. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  47. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  48. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
  49. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  50. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  51. package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  52. package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
  53. package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
  54. package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
  55. package/compliance/cache/3.1.0-rc.2/index.json +356 -0
  56. package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
  57. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
  58. package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
  59. package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
  60. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
  61. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
  62. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
  63. package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
  64. package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
  65. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
  66. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
  67. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
  68. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
  69. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
  70. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
  71. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
  72. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
  73. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
  74. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
  75. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
  76. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
  77. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
  78. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
  79. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
  80. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
  81. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
  82. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
  83. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
  84. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
  85. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
  86. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
  87. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
  88. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
  89. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
  90. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
  91. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
  92. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
  93. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
  94. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
  95. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
  96. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
  97. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
  98. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
  99. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
  100. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
  101. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
  102. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
  103. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  104. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
  105. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
  106. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
  107. package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
  108. package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
  109. package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
  110. package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
  111. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
  112. package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
  113. package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
  114. package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
  115. package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
  116. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
  117. package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
  118. package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
  119. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
  120. package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
  121. package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
  122. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
  123. package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
  124. package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
  125. package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
  126. package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
  127. package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
  128. package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
  129. package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
  130. package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
  131. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
  132. package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
  133. package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
  134. package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
  135. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
  136. package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
  137. package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
  138. package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
  139. package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
  140. package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
  141. package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
  142. package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
  143. package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
  144. package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
  145. package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
  146. package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
  147. package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
  148. package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
  149. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  150. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
  151. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  152. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  153. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  154. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  155. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  156. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  157. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  158. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  159. package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  160. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
  161. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
  162. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
  163. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  164. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  165. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  166. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  167. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  168. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  169. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  170. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  171. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  172. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  173. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  174. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  175. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  176. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  177. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  178. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  179. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  180. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  181. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  182. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  183. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  184. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  185. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  186. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  187. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  188. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  189. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  190. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
  191. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  192. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  193. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  194. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  195. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  196. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  197. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  198. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  199. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  200. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  201. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  202. package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  203. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
  204. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
  205. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  206. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  207. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  208. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  209. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  210. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  211. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  212. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  213. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  214. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  215. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  216. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  217. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  218. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  219. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  220. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  221. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  222. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  223. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  224. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  225. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  226. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  227. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  228. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  229. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  230. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  231. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  232. package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  233. package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
  234. package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
  235. package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
  236. package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
  237. package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
  238. package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
  239. package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
  240. package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
  241. package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
  242. package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
  243. package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
  244. package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
  245. package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
  246. package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
  247. package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
  248. package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
  249. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
  250. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
  251. package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
  252. package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
  253. package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
  254. package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
  255. package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
  256. package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
  257. package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
  258. package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
  259. package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
  260. package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
  261. package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
  262. package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
  263. package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
  264. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
  265. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
  266. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
  267. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
  268. package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
  269. package/dist/lib/index.d.ts +1 -1
  270. package/dist/lib/index.d.ts.map +1 -1
  271. package/dist/lib/index.js +9 -5
  272. package/dist/lib/index.js.map +1 -1
  273. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  274. package/dist/lib/testing/storyboard/default-invariants.js +30 -1
  275. package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
  276. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  277. package/dist/lib/testing/storyboard/runner.js +84 -21
  278. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  279. package/dist/lib/testing/storyboard/types.d.ts +21 -0
  280. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  281. package/dist/lib/testing/storyboard/types.js.map +1 -1
  282. package/dist/lib/testing/types.d.ts +9 -0
  283. package/dist/lib/testing/types.d.ts.map +1 -1
  284. package/dist/lib/types/schemas.generated.d.ts +6707 -12040
  285. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  286. package/dist/lib/types/schemas.generated.js +1 -1
  287. package/dist/lib/types/schemas.generated.js.map +1 -1
  288. package/dist/lib/utils/signal-id-builders.d.ts +19 -0
  289. package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
  290. package/dist/lib/utils/signal-id-builders.js +30 -0
  291. package/dist/lib/utils/signal-id-builders.js.map +1 -1
  292. package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
  293. package/dist/lib/utils/tool-request-schemas.js +3 -0
  294. package/dist/lib/utils/tool-request-schemas.js.map +1 -1
  295. package/dist/lib/v2/projection/constants.d.ts +28 -0
  296. package/dist/lib/v2/projection/constants.d.ts.map +1 -0
  297. package/dist/lib/v2/projection/constants.js +31 -0
  298. package/dist/lib/v2/projection/constants.js.map +1 -0
  299. package/dist/lib/v2/projection/registry.d.ts.map +1 -1
  300. package/dist/lib/v2/projection/registry.js +9 -4
  301. package/dist/lib/v2/projection/registry.js.map +1 -1
  302. package/dist/lib/version.d.ts +3 -3
  303. package/dist/lib/version.js +3 -3
  304. package/package.json +1 -1
  305. package/skills/SHAPE-GOTCHAS.md +5 -0
@@ -0,0 +1,265 @@
1
+ id: pagination_integrity_creative_formats
2
+ version: "1.0.0"
3
+ title: "Pagination cursor integrity — list_creative_formats"
4
+ category: schema_validation
5
+ summary: "Validates the cursor↔has_more invariant on list_creative_formats by seeding two formats and walking pages with max_results=1."
6
+ track: core
7
+ required_tools:
8
+ - list_creative_formats
9
+
10
+ narrative: |
11
+ Pagination is cursor-based across AdCP. Every response carrying a
12
+ `pagination` block satisfies one invariant: when `has_more` is true the
13
+ `cursor` MUST be present; when `has_more` is false the `cursor` MUST be
14
+ absent. This storyboard exercises both sides of the invariant on
15
+ `list_creative_formats`, mirroring the approach used by
16
+ `pagination-integrity.yaml` for `list_creatives`.
17
+
18
+ The runner seeds two creative formats into the agent's session ahead of
19
+ time so the result set has a knowable size at storyboard-author time. A
20
+ request filtered to those seeded names with `max_results=1` MUST trigger a
21
+ continuation page on the first call (`has_more=true` with a cursor).
22
+ Following that cursor MUST produce a terminal page (`has_more=false` with
23
+ no cursor). The unique name prefix narrows the result set to the seeded
24
+ fixtures so production catalogs are not swept during the pagination check.
25
+
26
+ The `list-creative-formats-response.json` schema does not define a
27
+ `query_summary` field, so this storyboard only asserts the
28
+ `pagination` block fields (`has_more`, `cursor`, `total_count`).
29
+
30
+ agent:
31
+ interaction_model: stateful_preloaded
32
+ capabilities:
33
+ - has_creative_formats
34
+ examples:
35
+ - "Any AdCP agent that exposes a paginated list_creative_formats"
36
+
37
+ caller:
38
+ role: buyer_agent
39
+ example: "Compliance test harness"
40
+
41
+ prerequisites:
42
+ description: |
43
+ The runner seeds two creative formats ahead of time so a max_results=1
44
+ request reliably triggers a continuation page on the first call.
45
+ test_kit: "test-kits/acme-outdoor.yaml"
46
+ controller_seeding: true
47
+
48
+ fixtures:
49
+ creative_formats:
50
+ - format_id: "pagination_integrity_format_1"
51
+ fixture:
52
+ name: "Pagination Integrity Format A"
53
+ type: "display"
54
+ - format_id: "pagination_integrity_format_2"
55
+ fixture:
56
+ name: "Pagination Integrity Format B"
57
+ type: "display"
58
+
59
+ phases:
60
+ - id: capability_discovery
61
+ title: "Capability discovery"
62
+ narrative: |
63
+ Confirm the agent supports list_creative_formats before exercising
64
+ pagination.
65
+ steps:
66
+ - id: get_capabilities
67
+ title: "Check agent capabilities"
68
+ narrative: |
69
+ Verify that the agent declares creative in supported_protocols
70
+ before driving paginated list_creative_formats.
71
+ task: get_adcp_capabilities
72
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
73
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
74
+ doc_ref: "/protocol/get_adcp_capabilities"
75
+ comply_scenario: capability_discovery
76
+ stateful: false
77
+ expected: |
78
+ Return capabilities declaring creative in supported_protocols.
79
+
80
+ sample_request:
81
+ context:
82
+ correlation_id: "pagination_integrity_creative_formats--get_capabilities"
83
+ validations:
84
+ - check: response_schema
85
+ description: "Response matches get-adcp-capabilities-response.json schema"
86
+ - check: field_present
87
+ path: "supported_protocols"
88
+ description: "Agent declares supported protocols"
89
+ - check: field_present
90
+ path: "context"
91
+ description: "Response echoes back the context object"
92
+ - check: field_value
93
+ path: "context.correlation_id"
94
+ value: "pagination_integrity_creative_formats--get_capabilities"
95
+ description: "Context correlation_id returned unchanged"
96
+
97
+ - id: seed_formats
98
+ title: "Seed two creative formats"
99
+ narrative: |
100
+ Pre-populate exactly two creative formats via comply_test_controller
101
+ so the result set has a knowable size for the pagination walk.
102
+ steps:
103
+ - id: seed_format_1
104
+ title: "Seed first format fixture"
105
+ task: comply_test_controller
106
+ schema_ref: "compliance/comply-test-controller-request.json"
107
+ response_schema_ref: "compliance/comply-test-controller-response.json"
108
+ comply_scenario: seed_creative_format
109
+ stateful: true
110
+ expected: |
111
+ Return success: true.
112
+ sample_request:
113
+ account:
114
+ sandbox: true
115
+ account_id: "acct_pagination_integrity_formats"
116
+ scenario: "seed_creative_format"
117
+ params:
118
+ format_id: "pagination_integrity_format_1"
119
+ fixture:
120
+ name: "Pagination Integrity Format A"
121
+ type: "display"
122
+ context:
123
+ correlation_id: "pagination_integrity_creative_formats--seed_1"
124
+ validations:
125
+ - check: field_value
126
+ path: "success"
127
+ value: true
128
+ description: "Seed acknowledged"
129
+
130
+ - id: seed_format_2
131
+ title: "Seed second format fixture"
132
+ task: comply_test_controller
133
+ schema_ref: "compliance/comply-test-controller-request.json"
134
+ response_schema_ref: "compliance/comply-test-controller-response.json"
135
+ comply_scenario: seed_creative_format
136
+ stateful: true
137
+ expected: |
138
+ Return success: true.
139
+ sample_request:
140
+ account:
141
+ sandbox: true
142
+ account_id: "acct_pagination_integrity_formats"
143
+ scenario: "seed_creative_format"
144
+ params:
145
+ format_id: "pagination_integrity_format_2"
146
+ fixture:
147
+ name: "Pagination Integrity Format B"
148
+ type: "display"
149
+ context:
150
+ correlation_id: "pagination_integrity_creative_formats--seed_2"
151
+ validations:
152
+ - check: field_value
153
+ path: "success"
154
+ value: true
155
+ description: "Seed acknowledged"
156
+
157
+ - id: pagination_walk
158
+ title: "Walk pages with max_results=1"
159
+ narrative: |
160
+ With two matching seeded formats and `max_results: 1`, the first call
161
+ MUST return a continuation page (has_more=true with a cursor). The
162
+ runner then follows the cursor; the second call MUST return a terminal
163
+ page (has_more=false with no cursor).
164
+
165
+ steps:
166
+ - id: first_page
167
+ title: "Request the first page with max_results=1"
168
+ narrative: |
169
+ The buyer asks for one matching test format at a time. The agent has
170
+ two seeded formats matching the name search, so the first page is
171
+ non-terminal. The runner captures `pagination.cursor` for the
172
+ follow-up step.
173
+ task: list_creative_formats
174
+ schema_ref: "creative/list-creative-formats-request.json"
175
+ response_schema_ref: "creative/list-creative-formats-response.json"
176
+ doc_ref: "/creative/task-reference/list_creative_formats"
177
+ comply_scenario: pagination_integrity
178
+ stateful: true
179
+ context_outputs:
180
+ - name: next_cursor
181
+ path: "pagination.cursor"
182
+ expected: |
183
+ Return one format with:
184
+ - pagination.has_more = true
185
+ - pagination.cursor present (an opaque continuation token)
186
+
187
+ sample_request:
188
+ account:
189
+ account_id: "acct_pagination_integrity_formats"
190
+ name_search: "Pagination Integrity Format"
191
+ pagination:
192
+ max_results: 1
193
+ context:
194
+ correlation_id: "pagination_integrity_creative_formats--first_page"
195
+ validations:
196
+ - check: response_schema
197
+ description: "Response matches list-creative-formats-response.json schema"
198
+ - check: field_value
199
+ path: "pagination.has_more"
200
+ value: true
201
+ description: "Two formats seeded with max_results=1 → first page is non-terminal"
202
+ - check: field_present
203
+ path: "pagination.cursor"
204
+ description: "has_more=true requires a cursor — without one the caller cannot continue"
205
+ - check: field_value_or_absent
206
+ path: "pagination.total_count"
207
+ allowed_values: [2]
208
+ description: "If volunteered, total_count MUST equal the seeded set size of two"
209
+ - check: field_present
210
+ path: "context"
211
+ description: "Response echoes back the context object"
212
+ - check: field_value
213
+ path: "context.correlation_id"
214
+ value: "pagination_integrity_creative_formats--first_page"
215
+ description: "Context correlation_id returned unchanged"
216
+
217
+ - id: terminal_page
218
+ title: "Follow the cursor to the terminal page"
219
+ narrative: |
220
+ The buyer follows the captured cursor. With one format remaining
221
+ the agent MUST return a terminal page: `has_more=false` with no
222
+ `cursor` field. A cursor on `has_more=false` is a stale token
223
+ that invites callers to follow it past the end of results.
224
+ task: list_creative_formats
225
+ schema_ref: "creative/list-creative-formats-request.json"
226
+ response_schema_ref: "creative/list-creative-formats-response.json"
227
+ doc_ref: "/creative/task-reference/list_creative_formats"
228
+ comply_scenario: pagination_integrity
229
+ stateful: true
230
+ expected: |
231
+ Return the remaining format with:
232
+ - pagination.has_more = false
233
+ - pagination.cursor absent
234
+
235
+ sample_request:
236
+ account:
237
+ account_id: "acct_pagination_integrity_formats"
238
+ name_search: "Pagination Integrity Format"
239
+ pagination:
240
+ cursor: "$context.next_cursor"
241
+ max_results: 1
242
+ context:
243
+ correlation_id: "pagination_integrity_creative_formats--terminal_page"
244
+ validations:
245
+ - check: response_schema
246
+ description: "Response matches list-creative-formats-response.json schema"
247
+ - check: field_value
248
+ path: "pagination.has_more"
249
+ value: false
250
+ description: "After two pages of one item the seeded set is exhausted"
251
+ - check: field_value_or_absent
252
+ path: "pagination.cursor"
253
+ allowed_values: [null]
254
+ description: "Terminal page MUST omit cursor (null also accepted for clients that explicitly clear the field)"
255
+ - check: field_value_or_absent
256
+ path: "pagination.total_count"
257
+ allowed_values: [2]
258
+ description: "total_count (when volunteered) MUST stay stable across pages and equal the seeded set size"
259
+ - check: field_present
260
+ path: "context"
261
+ description: "Response echoes back the context object"
262
+ - check: field_value
263
+ path: "context.correlation_id"
264
+ value: "pagination_integrity_creative_formats--terminal_page"
265
+ description: "Context correlation_id returned unchanged"
@@ -0,0 +1,245 @@
1
+ id: pagination_integrity_list_accounts
2
+ version: "1.0.0"
3
+ title: "Pagination continuation integrity — list_accounts"
4
+ category: schema_validation
5
+ summary: "Validates the has_more=true continuation side of list_accounts pagination by creating sandbox accounts, requesting a small first page, and following its cursor once."
6
+ track: core
7
+ required_tools:
8
+ - list_accounts
9
+
10
+ narrative: |
11
+ Pagination is cursor-based across AdCP. Every response carrying a
12
+ `pagination` block satisfies a single invariant: when `has_more` is true the
13
+ `cursor` MUST be present (callers need it to fetch the next page); when
14
+ `has_more` is false the `cursor` MUST be absent (a stale token on a terminal
15
+ page invites callers to follow it into undefined behavior).
16
+
17
+ The invariant is documented in prose on
18
+ `static/schemas/source/core/pagination-response.json` but JSON Schema does
19
+ not gate the two fields against each other. This storyboard exercises the
20
+ continuation side on `list_accounts`: when `has_more=true`, `cursor` must be
21
+ present and usable.
22
+
23
+ The runner bootstraps three sandbox accounts via `sync_accounts`, then
24
+ lists sandbox accounts back with `max_results=2`. The first page MUST cap
25
+ at two accounts and signal continuation with `has_more=true` plus a cursor.
26
+ The runner then follows that cursor to prove the continuation token is usable.
27
+ Agents may have pre-existing sandbox accounts, so this storyboard deliberately
28
+ does not assert that the second observed page is terminal or that
29
+ `total_count` equals exactly three. The terminal side of the invariant is
30
+ covered by pagination storyboards with isolated seeded result sets; adding
31
+ equivalent account seeding with isolated lookup semantics is tracked
32
+ separately.
33
+
34
+ agent:
35
+ interaction_model: stateful_preloaded
36
+ capabilities: []
37
+ examples:
38
+ - "Any AdCP agent that exposes a paginated list_accounts"
39
+
40
+ caller:
41
+ role: buyer_agent
42
+ example: "Compliance test harness"
43
+
44
+ prerequisites:
45
+ description: |
46
+ The storyboard bootstraps three accounts in the setup phase via
47
+ `sync_accounts`. The seed-DAG documented at
48
+ `static/compliance/source/universal/storyboard-schema.yaml` does not
49
+ include accounts (today's seed kinds are products, pricing_options,
50
+ creatives, plans, media_buys), so this storyboard deliberately
51
+ departs from the `controller_seeding: true` precedent used by
52
+ `pagination-integrity.yaml` (list_creatives) and bootstraps via
53
+ real protocol calls. Adding `seed_account` to the controller is
54
+ tracked separately; until then the create-then-list pattern keeps
55
+ the storyboard self-contained without extending the seed taxonomy.
56
+ test_kit: "test-kits/acme-outdoor.yaml"
57
+ controller_seeding: false
58
+
59
+ phases:
60
+ - id: capability_discovery
61
+ title: "Capability discovery"
62
+ narrative: |
63
+ Confirm the agent responds to get_adcp_capabilities before
64
+ exercising list_accounts.
65
+ steps:
66
+ - id: get_capabilities
67
+ title: "Check agent capabilities"
68
+ narrative: |
69
+ Verify that the agent declares supported protocols before
70
+ driving paginated list_accounts.
71
+ task: get_adcp_capabilities
72
+ schema_ref: "protocol/get-adcp-capabilities-request.json"
73
+ response_schema_ref: "protocol/get-adcp-capabilities-response.json"
74
+ doc_ref: "/protocol/get_adcp_capabilities"
75
+ comply_scenario: capability_discovery
76
+ stateful: false
77
+ expected: |
78
+ Return capabilities declaring supported protocols.
79
+
80
+ sample_request:
81
+ context:
82
+ correlation_id: "pagination_integrity_list_accounts--get_capabilities"
83
+ validations:
84
+ - check: response_schema
85
+ description: "Response matches get-adcp-capabilities-response.json schema"
86
+ - check: field_present
87
+ path: "supported_protocols"
88
+ description: "Agent declares supported protocols"
89
+
90
+ - check: field_present
91
+ path: "context"
92
+ description: "Response echoes back the context object"
93
+ - check: field_value
94
+ path: "context.correlation_id"
95
+ value: "pagination_integrity_list_accounts--get_capabilities"
96
+ description: "Context correlation_id returned unchanged"
97
+
98
+ - id: setup
99
+ title: "Bootstrap three test accounts"
100
+ narrative: |
101
+ Sync three sandbox accounts so the pagination walk has at least three
102
+ sandbox items to page through with max_results=2.
103
+ steps:
104
+ - id: sync_three_accounts
105
+ title: "Sync three sandbox accounts"
106
+ narrative: |
107
+ Create three sandbox accounts — Acme c/o Pinnacle, Nova c/o Pinnacle,
108
+ and Pinnacle Direct. The agent MUST accept all three and respond with
109
+ account_id values that subsequent list_accounts calls surface.
110
+ task: sync_accounts
111
+ schema_ref: "account/sync-accounts-request.json"
112
+ response_schema_ref: "account/sync-accounts-response.json"
113
+ doc_ref: "/accounts/task-reference/sync_accounts"
114
+ comply_scenario: pagination_integrity_list_accounts
115
+ stateful: true
116
+ expected: |
117
+ Accept all three accounts and return account_id for each.
118
+
119
+ sample_request:
120
+ accounts:
121
+ - brand:
122
+ domain: acme-corp.com
123
+ operator: pinnacle-media.com
124
+ billing: operator
125
+ sandbox: true
126
+ - brand:
127
+ domain: nova-brands.com
128
+ operator: pinnacle-media.com
129
+ billing: operator
130
+ sandbox: true
131
+ - brand:
132
+ domain: pinnacle-media.com
133
+ operator: pinnacle-media.com
134
+ billing: operator
135
+ sandbox: true
136
+
137
+ idempotency_key: "$generate:uuid_v4#pagination_integrity_list_accounts_setup_sync_three_accounts"
138
+ context:
139
+ correlation_id: "pagination_integrity_list_accounts--setup"
140
+ validations:
141
+ - check: response_schema
142
+ description: "Response matches sync-accounts-response.json schema"
143
+ - check: field_present
144
+ path: "accounts"
145
+ description: "Response contains accounts array"
146
+
147
+ - id: pagination_walk
148
+ title: "Walk pages with a small max_results"
149
+ narrative: |
150
+ With at least three sandbox accounts and `max_results: 2`, the first call
151
+ MUST return a continuation page (has_more=true with a cursor). The
152
+ runner then follows the cursor and validates the next page response shape.
153
+
154
+ steps:
155
+ - id: first_page
156
+ title: "Request the first page with max_results=2"
157
+ narrative: |
158
+ The buyer asks for up to two sandbox accounts. The agent has at least
159
+ three matching accounts, so the request is non-terminal: callers expect
160
+ `has_more=true` and a `cursor` they can follow to retrieve the
161
+ remaining account.
162
+
163
+ The runner captures `pagination.cursor` into `$context.next_cursor`
164
+ for the follow-up step. If the agent reports `has_more=false` on
165
+ this page (hiding the seeded third sandbox account behind a dishonest
166
+ terminal signal), the field_value check on `pagination.has_more`
167
+ fails — surfacing exactly the bug class this storyboard exists to
168
+ catch.
169
+ task: list_accounts
170
+ schema_ref: "account/list-accounts-request.json"
171
+ response_schema_ref: "account/list-accounts-response.json"
172
+ doc_ref: "/accounts/task-reference/list_accounts"
173
+ comply_scenario: pagination_integrity_list_accounts
174
+ stateful: true
175
+ context_outputs:
176
+ - name: next_cursor
177
+ path: "pagination.cursor"
178
+ expected: |
179
+ Return up to two accounts with:
180
+ - pagination.has_more = true
181
+ - pagination.cursor present (an opaque continuation token)
182
+
183
+ sample_request:
184
+ sandbox: true
185
+ pagination:
186
+ max_results: 2
187
+
188
+ context:
189
+ correlation_id: "pagination_integrity_list_accounts--first_page"
190
+ validations:
191
+ - check: response_schema
192
+ description: "Response matches list-accounts-response.json schema"
193
+ - check: field_value
194
+ path: "pagination.has_more"
195
+ value: true
196
+ description: "At least three sandbox accounts exist with max_results=2 → first page is non-terminal"
197
+ - check: field_present
198
+ path: "pagination.cursor"
199
+ description: "has_more=true requires a cursor — without one the caller cannot continue"
200
+ - check: field_present
201
+ path: "context"
202
+ description: "Response echoes back the context object"
203
+ - check: field_value
204
+ path: "context.correlation_id"
205
+ value: "pagination_integrity_list_accounts--first_page"
206
+ description: "Context correlation_id returned unchanged"
207
+
208
+ - id: next_page
209
+ title: "Follow the cursor to the next page"
210
+ narrative: |
211
+ The buyer follows the captured cursor. The response MUST remain
212
+ schema-valid and echo context. The runner does not require this page
213
+ to be terminal because sellers may already have more than the three
214
+ sandbox accounts created during setup.
215
+ task: list_accounts
216
+ schema_ref: "account/list-accounts-request.json"
217
+ response_schema_ref: "account/list-accounts-response.json"
218
+ doc_ref: "/accounts/task-reference/list_accounts"
219
+ comply_scenario: pagination_integrity_list_accounts
220
+ stateful: true
221
+ expected: |
222
+ Return the next page of sandbox accounts with a valid pagination block.
223
+
224
+ sample_request:
225
+ sandbox: true
226
+ pagination:
227
+ cursor: "$context.next_cursor"
228
+ max_results: 2
229
+
230
+ context:
231
+ correlation_id: "pagination_integrity_list_accounts--next_page"
232
+ validations:
233
+ - check: response_schema
234
+ description: "Response matches list-accounts-response.json schema"
235
+ - check: field_present
236
+ path: "pagination.has_more"
237
+ description: "Pagination response declares whether more sandbox accounts remain"
238
+
239
+ - check: field_present
240
+ path: "context"
241
+ description: "Response echoes back the context object"
242
+ - check: field_value
243
+ path: "context.correlation_id"
244
+ value: "pagination_integrity_list_accounts--next_page"
245
+ description: "Context correlation_id returned unchanged"