@adcp/sdk 6.7.0 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (971) hide show
  1. package/ADCP_VERSION +1 -1
  2. package/bin/adcp.js +15 -3
  3. package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/inventory_list_targeting.yaml +5 -0
  4. package/compliance/cache/{3.0.5 → 3.0.6}/index.json +2 -2
  5. package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +5 -0
  6. package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-guaranteed/index.yaml +1 -1
  7. package/compliance/cache/{3.0.5 → 3.0.6}/universal/storyboard-schema.yaml +15 -0
  8. package/dist/lib/adapters/derived-account-store.d.ts +152 -0
  9. package/dist/lib/adapters/derived-account-store.d.ts.map +1 -0
  10. package/dist/lib/adapters/derived-account-store.js +135 -0
  11. package/dist/lib/adapters/derived-account-store.js.map +1 -0
  12. package/dist/lib/adapters/implicit-account-store.d.ts +3 -1
  13. package/dist/lib/adapters/implicit-account-store.d.ts.map +1 -1
  14. package/dist/lib/adapters/implicit-account-store.js +3 -1
  15. package/dist/lib/adapters/implicit-account-store.js.map +1 -1
  16. package/dist/lib/adapters/index.d.ts +1 -0
  17. package/dist/lib/adapters/index.d.ts.map +1 -1
  18. package/dist/lib/adapters/index.js +7 -1
  19. package/dist/lib/adapters/index.js.map +1 -1
  20. package/dist/lib/adapters/oauth-passthrough-resolver.d.ts +3 -1
  21. package/dist/lib/adapters/oauth-passthrough-resolver.d.ts.map +1 -1
  22. package/dist/lib/adapters/oauth-passthrough-resolver.js +3 -1
  23. package/dist/lib/adapters/oauth-passthrough-resolver.js.map +1 -1
  24. package/dist/lib/adapters/roster-account-store.d.ts +85 -24
  25. package/dist/lib/adapters/roster-account-store.d.ts.map +1 -1
  26. package/dist/lib/adapters/roster-account-store.js +52 -30
  27. package/dist/lib/adapters/roster-account-store.js.map +1 -1
  28. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  29. package/dist/lib/core/AgentClient.js +20 -0
  30. package/dist/lib/core/AgentClient.js.map +1 -1
  31. package/dist/lib/index.d.ts +3 -3
  32. package/dist/lib/index.d.ts.map +1 -1
  33. package/dist/lib/index.js +13 -8
  34. package/dist/lib/index.js.map +1 -1
  35. package/dist/lib/mock-server/creative-ad-server/seed-data.d.ts +81 -0
  36. package/dist/lib/mock-server/creative-ad-server/seed-data.d.ts.map +1 -0
  37. package/dist/lib/mock-server/creative-ad-server/seed-data.js +200 -0
  38. package/dist/lib/mock-server/creative-ad-server/seed-data.js.map +1 -0
  39. package/dist/lib/mock-server/creative-ad-server/server.d.ts +39 -0
  40. package/dist/lib/mock-server/creative-ad-server/server.d.ts.map +1 -0
  41. package/dist/lib/mock-server/creative-ad-server/server.js +618 -0
  42. package/dist/lib/mock-server/creative-ad-server/server.js.map +1 -0
  43. package/dist/lib/mock-server/creative-template/seed-data.d.ts +1 -1
  44. package/dist/lib/mock-server/creative-template/seed-data.d.ts.map +1 -1
  45. package/dist/lib/mock-server/creative-template/seed-data.js +53 -0
  46. package/dist/lib/mock-server/creative-template/seed-data.js.map +1 -1
  47. package/dist/lib/mock-server/creative-template/server.d.ts.map +1 -1
  48. package/dist/lib/mock-server/creative-template/server.js +12 -0
  49. package/dist/lib/mock-server/creative-template/server.js.map +1 -1
  50. package/dist/lib/mock-server/index.d.ts.map +1 -1
  51. package/dist/lib/mock-server/index.js +180 -24
  52. package/dist/lib/mock-server/index.js.map +1 -1
  53. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.d.ts +66 -0
  54. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.d.ts.map +1 -0
  55. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.js +193 -0
  56. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.js.map +1 -0
  57. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts +33 -0
  58. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts.map +1 -0
  59. package/dist/lib/mock-server/sales-non-guaranteed/server.js +782 -0
  60. package/dist/lib/mock-server/sales-non-guaranteed/server.js.map +1 -0
  61. package/dist/lib/mock-server/sponsored-intelligence/seed-data.d.ts +50 -0
  62. package/dist/lib/mock-server/sponsored-intelligence/seed-data.d.ts.map +1 -0
  63. package/dist/lib/mock-server/sponsored-intelligence/seed-data.js +133 -0
  64. package/dist/lib/mock-server/sponsored-intelligence/seed-data.js.map +1 -0
  65. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts +13 -0
  66. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts.map +1 -0
  67. package/dist/lib/mock-server/sponsored-intelligence/server.js +609 -0
  68. package/dist/lib/mock-server/sponsored-intelligence/server.js.map +1 -0
  69. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  70. package/dist/lib/protocols/mcp.js +1 -41
  71. package/dist/lib/protocols/mcp.js.map +1 -1
  72. package/dist/lib/schemas-data/3.0/a2ui/bound-value.json +1 -1
  73. package/dist/lib/schemas-data/3.0/a2ui/component.json +1 -1
  74. package/dist/lib/schemas-data/3.0/a2ui/si-catalog.json +25 -25
  75. package/dist/lib/schemas-data/3.0/a2ui/surface.json +2 -2
  76. package/dist/lib/schemas-data/3.0/a2ui/user-action.json +1 -1
  77. package/dist/lib/schemas-data/3.0/account/get-account-financials-request.json +5 -5
  78. package/dist/lib/schemas-data/3.0/account/get-account-financials-response.json +10 -10
  79. package/dist/lib/schemas-data/3.0/account/list-accounts-request.json +4 -4
  80. package/dist/lib/schemas-data/3.0/account/list-accounts-response.json +6 -6
  81. package/dist/lib/schemas-data/3.0/account/report-usage-request.json +5 -5
  82. package/dist/lib/schemas-data/3.0/account/report-usage-response.json +4 -4
  83. package/dist/lib/schemas-data/3.0/account/sync-accounts-request.json +9 -9
  84. package/dist/lib/schemas-data/3.0/account/sync-accounts-response.json +12 -12
  85. package/dist/lib/schemas-data/3.0/account/sync-governance-request.json +5 -5
  86. package/dist/lib/schemas-data/3.0/account/sync-governance-response.json +8 -8
  87. package/dist/lib/schemas-data/3.0/adagents.json +32 -32
  88. package/dist/lib/schemas-data/3.0/brand/acquire-rights-request.json +8 -8
  89. package/dist/lib/schemas-data/3.0/brand/acquire-rights-response.json +14 -14
  90. package/dist/lib/schemas-data/3.0/brand/creative-approval-request.json +4 -4
  91. package/dist/lib/schemas-data/3.0/brand/creative-approval-response.json +10 -10
  92. package/dist/lib/schemas-data/3.0/brand/get-brand-identity-request.json +3 -3
  93. package/dist/lib/schemas-data/3.0/brand/get-brand-identity-response.json +8 -8
  94. package/dist/lib/schemas-data/3.0/brand/get-rights-request.json +7 -7
  95. package/dist/lib/schemas-data/3.0/brand/get-rights-response.json +9 -9
  96. package/dist/lib/schemas-data/3.0/brand/revocation-notification.json +4 -4
  97. package/dist/lib/schemas-data/3.0/brand/rights-pricing-option.json +5 -5
  98. package/dist/lib/schemas-data/3.0/brand/rights-terms.json +3 -3
  99. package/dist/lib/schemas-data/3.0/brand/update-rights-request.json +4 -4
  100. package/dist/lib/schemas-data/3.0/brand/update-rights-response.json +9 -9
  101. package/dist/lib/schemas-data/3.0/brand.json +14 -14
  102. package/dist/lib/schemas-data/3.0/bundled/content-standards/calibrate-content-request.json +2 -2
  103. package/dist/lib/schemas-data/3.0/bundled/content-standards/calibrate-content-response.json +2 -2
  104. package/dist/lib/schemas-data/3.0/bundled/content-standards/create-content-standards-request.json +2 -2
  105. package/dist/lib/schemas-data/3.0/bundled/content-standards/create-content-standards-response.json +2 -2
  106. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-content-standards-request.json +2 -2
  107. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-content-standards-response.json +2 -2
  108. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-media-buy-artifacts-request.json +2 -2
  109. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-media-buy-artifacts-response.json +2 -2
  110. package/dist/lib/schemas-data/3.0/bundled/content-standards/list-content-standards-request.json +2 -2
  111. package/dist/lib/schemas-data/3.0/bundled/content-standards/list-content-standards-response.json +2 -2
  112. package/dist/lib/schemas-data/3.0/bundled/content-standards/update-content-standards-request.json +2 -2
  113. package/dist/lib/schemas-data/3.0/bundled/content-standards/update-content-standards-response.json +2 -2
  114. package/dist/lib/schemas-data/3.0/bundled/content-standards/validate-content-delivery-request.json +2 -2
  115. package/dist/lib/schemas-data/3.0/bundled/content-standards/validate-content-delivery-response.json +2 -2
  116. package/dist/lib/schemas-data/3.0/bundled/core/tasks-get-request.json +2 -2
  117. package/dist/lib/schemas-data/3.0/bundled/core/tasks-get-response.json +2 -2
  118. package/dist/lib/schemas-data/3.0/bundled/core/tasks-list-request.json +2 -2
  119. package/dist/lib/schemas-data/3.0/bundled/core/tasks-list-response.json +2 -2
  120. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-delivery-request.json +2 -2
  121. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-delivery-response.json +2 -2
  122. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-features-request.json +2 -2
  123. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-features-response.json +2 -2
  124. package/dist/lib/schemas-data/3.0/bundled/creative/list-creative-formats-request.json +2 -2
  125. package/dist/lib/schemas-data/3.0/bundled/creative/list-creative-formats-response.json +2 -2
  126. package/dist/lib/schemas-data/3.0/bundled/creative/list-creatives-request.json +2 -2
  127. package/dist/lib/schemas-data/3.0/bundled/creative/list-creatives-response.json +2 -2
  128. package/dist/lib/schemas-data/3.0/bundled/creative/preview-creative-request.json +2 -2
  129. package/dist/lib/schemas-data/3.0/bundled/creative/preview-creative-response.json +2 -2
  130. package/dist/lib/schemas-data/3.0/bundled/creative/sync-creatives-request.json +2 -2
  131. package/dist/lib/schemas-data/3.0/bundled/creative/sync-creatives-response.json +2 -2
  132. package/dist/lib/schemas-data/3.0/bundled/media-buy/build-creative-request.json +2 -2
  133. package/dist/lib/schemas-data/3.0/bundled/media-buy/build-creative-response.json +2 -2
  134. package/dist/lib/schemas-data/3.0/bundled/media-buy/create-media-buy-request.json +2 -2
  135. package/dist/lib/schemas-data/3.0/bundled/media-buy/create-media-buy-response.json +2 -2
  136. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buy-delivery-request.json +2 -2
  137. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buy-delivery-response.json +2 -2
  138. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buys-request.json +2 -2
  139. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buys-response.json +2 -2
  140. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-products-request.json +2 -2
  141. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-products-response.json +2 -2
  142. package/dist/lib/schemas-data/3.0/bundled/media-buy/list-creative-formats-request.json +2 -2
  143. package/dist/lib/schemas-data/3.0/bundled/media-buy/list-creative-formats-response.json +2 -2
  144. package/dist/lib/schemas-data/3.0/bundled/media-buy/log-event-request.json +2 -2
  145. package/dist/lib/schemas-data/3.0/bundled/media-buy/log-event-response.json +2 -2
  146. package/dist/lib/schemas-data/3.0/bundled/media-buy/package-request.json +2 -2
  147. package/dist/lib/schemas-data/3.0/bundled/media-buy/provide-performance-feedback-request.json +2 -2
  148. package/dist/lib/schemas-data/3.0/bundled/media-buy/provide-performance-feedback-response.json +2 -2
  149. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-audiences-request.json +2 -2
  150. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-audiences-response.json +2 -2
  151. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-catalogs-request.json +2 -2
  152. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-catalogs-response.json +2 -2
  153. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-event-sources-request.json +2 -2
  154. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-event-sources-response.json +2 -2
  155. package/dist/lib/schemas-data/3.0/bundled/media-buy/update-media-buy-request.json +2 -2
  156. package/dist/lib/schemas-data/3.0/bundled/media-buy/update-media-buy-response.json +2 -2
  157. package/dist/lib/schemas-data/3.0/bundled/property/create-property-list-request.json +2 -2
  158. package/dist/lib/schemas-data/3.0/bundled/property/create-property-list-response.json +2 -2
  159. package/dist/lib/schemas-data/3.0/bundled/property/delete-property-list-request.json +2 -2
  160. package/dist/lib/schemas-data/3.0/bundled/property/delete-property-list-response.json +2 -2
  161. package/dist/lib/schemas-data/3.0/bundled/property/get-property-list-request.json +2 -2
  162. package/dist/lib/schemas-data/3.0/bundled/property/get-property-list-response.json +2 -2
  163. package/dist/lib/schemas-data/3.0/bundled/property/list-property-lists-request.json +2 -2
  164. package/dist/lib/schemas-data/3.0/bundled/property/list-property-lists-response.json +2 -2
  165. package/dist/lib/schemas-data/3.0/bundled/property/update-property-list-request.json +2 -2
  166. package/dist/lib/schemas-data/3.0/bundled/property/update-property-list-response.json +2 -2
  167. package/dist/lib/schemas-data/3.0/bundled/property/validate-property-delivery-request.json +2 -2
  168. package/dist/lib/schemas-data/3.0/bundled/property/validate-property-delivery-response.json +2 -2
  169. package/dist/lib/schemas-data/3.0/bundled/protocol/get-adcp-capabilities-request.json +2 -2
  170. package/dist/lib/schemas-data/3.0/bundled/protocol/get-adcp-capabilities-response.json +2 -2
  171. package/dist/lib/schemas-data/3.0/bundled/signals/activate-signal-request.json +2 -2
  172. package/dist/lib/schemas-data/3.0/bundled/signals/activate-signal-response.json +2 -2
  173. package/dist/lib/schemas-data/3.0/bundled/signals/get-signals-request.json +2 -2
  174. package/dist/lib/schemas-data/3.0/bundled/signals/get-signals-response.json +2 -2
  175. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-get-offering-request.json +2 -2
  176. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-get-offering-response.json +2 -2
  177. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-initiate-session-request.json +2 -2
  178. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-initiate-session-response.json +2 -2
  179. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-send-message-request.json +2 -2
  180. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-send-message-response.json +2 -2
  181. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-terminate-session-request.json +2 -2
  182. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-terminate-session-response.json +2 -2
  183. package/dist/lib/schemas-data/3.0/collection/base-collection-source.json +3 -3
  184. package/dist/lib/schemas-data/3.0/collection/collection-list-changed-webhook.json +2 -2
  185. package/dist/lib/schemas-data/3.0/collection/collection-list-filters.json +7 -7
  186. package/dist/lib/schemas-data/3.0/collection/collection-list.json +5 -5
  187. package/dist/lib/schemas-data/3.0/collection/create-collection-list-request.json +7 -7
  188. package/dist/lib/schemas-data/3.0/collection/create-collection-list-response.json +4 -4
  189. package/dist/lib/schemas-data/3.0/collection/delete-collection-list-request.json +4 -4
  190. package/dist/lib/schemas-data/3.0/collection/delete-collection-list-response.json +3 -3
  191. package/dist/lib/schemas-data/3.0/collection/get-collection-list-request.json +4 -4
  192. package/dist/lib/schemas-data/3.0/collection/get-collection-list-response.json +10 -10
  193. package/dist/lib/schemas-data/3.0/collection/list-collection-lists-request.json +5 -5
  194. package/dist/lib/schemas-data/3.0/collection/list-collection-lists-response.json +5 -5
  195. package/dist/lib/schemas-data/3.0/collection/update-collection-list-request.json +7 -7
  196. package/dist/lib/schemas-data/3.0/collection/update-collection-list-response.json +4 -4
  197. package/dist/lib/schemas-data/3.0/content-standards/artifact-webhook-payload.json +3 -3
  198. package/dist/lib/schemas-data/3.0/content-standards/artifact.json +7 -7
  199. package/dist/lib/schemas-data/3.0/content-standards/calibrate-content-request.json +4 -4
  200. package/dist/lib/schemas-data/3.0/content-standards/calibrate-content-response.json +8 -8
  201. package/dist/lib/schemas-data/3.0/content-standards/content-standards.json +7 -7
  202. package/dist/lib/schemas-data/3.0/content-standards/create-content-standards-request.json +7 -7
  203. package/dist/lib/schemas-data/3.0/content-standards/create-content-standards-response.json +6 -6
  204. package/dist/lib/schemas-data/3.0/content-standards/get-content-standards-request.json +3 -3
  205. package/dist/lib/schemas-data/3.0/content-standards/get-content-standards-response.json +7 -7
  206. package/dist/lib/schemas-data/3.0/content-standards/get-media-buy-artifacts-request.json +4 -4
  207. package/dist/lib/schemas-data/3.0/content-standards/get-media-buy-artifacts-response.json +8 -8
  208. package/dist/lib/schemas-data/3.0/content-standards/list-content-standards-request.json +5 -5
  209. package/dist/lib/schemas-data/3.0/content-standards/list-content-standards-response.json +8 -8
  210. package/dist/lib/schemas-data/3.0/content-standards/update-content-standards-request.json +7 -7
  211. package/dist/lib/schemas-data/3.0/content-standards/update-content-standards-response.json +6 -6
  212. package/dist/lib/schemas-data/3.0/content-standards/validate-content-delivery-request.json +4 -4
  213. package/dist/lib/schemas-data/3.0/content-standards/validate-content-delivery-response.json +8 -8
  214. package/dist/lib/schemas-data/3.0/core/account-ref.json +2 -2
  215. package/dist/lib/schemas-data/3.0/core/account.json +9 -9
  216. package/dist/lib/schemas-data/3.0/core/activation-key.json +1 -1
  217. package/dist/lib/schemas-data/3.0/core/ad-inventory-config.json +1 -1
  218. package/dist/lib/schemas-data/3.0/core/agent-encryption-key.json +1 -1
  219. package/dist/lib/schemas-data/3.0/core/agent-signing-key.json +1 -1
  220. package/dist/lib/schemas-data/3.0/core/app-item.json +4 -4
  221. package/dist/lib/schemas-data/3.0/core/assets/asset-union.json +15 -15
  222. package/dist/lib/schemas-data/3.0/core/assets/audio-asset.json +3 -3
  223. package/dist/lib/schemas-data/3.0/core/assets/brief-asset.json +2 -2
  224. package/dist/lib/schemas-data/3.0/core/assets/catalog-asset.json +2 -2
  225. package/dist/lib/schemas-data/3.0/core/assets/css-asset.json +2 -2
  226. package/dist/lib/schemas-data/3.0/core/assets/daast-asset.json +4 -4
  227. package/dist/lib/schemas-data/3.0/core/assets/html-asset.json +2 -2
  228. package/dist/lib/schemas-data/3.0/core/assets/image-asset.json +2 -2
  229. package/dist/lib/schemas-data/3.0/core/assets/javascript-asset.json +3 -3
  230. package/dist/lib/schemas-data/3.0/core/assets/markdown-asset.json +2 -2
  231. package/dist/lib/schemas-data/3.0/core/assets/text-asset.json +2 -2
  232. package/dist/lib/schemas-data/3.0/core/assets/url-asset.json +3 -3
  233. package/dist/lib/schemas-data/3.0/core/assets/vast-asset.json +4 -4
  234. package/dist/lib/schemas-data/3.0/core/assets/video-asset.json +7 -7
  235. package/dist/lib/schemas-data/3.0/core/assets/webhook-asset.json +7 -7
  236. package/dist/lib/schemas-data/3.0/core/async-response-data.json +25 -25
  237. package/dist/lib/schemas-data/3.0/core/attribution-window.json +4 -4
  238. package/dist/lib/schemas-data/3.0/core/audience-member.json +3 -3
  239. package/dist/lib/schemas-data/3.0/core/audience-selector.json +4 -4
  240. package/dist/lib/schemas-data/3.0/core/brand-id.json +1 -1
  241. package/dist/lib/schemas-data/3.0/core/brand-ref.json +2 -2
  242. package/dist/lib/schemas-data/3.0/core/business-entity.json +2 -2
  243. package/dist/lib/schemas-data/3.0/core/cancellation-policy.json +2 -2
  244. package/dist/lib/schemas-data/3.0/core/catalog-field-mapping.json +2 -2
  245. package/dist/lib/schemas-data/3.0/core/catalog.json +7 -7
  246. package/dist/lib/schemas-data/3.0/core/catchment.json +5 -5
  247. package/dist/lib/schemas-data/3.0/core/collection-distribution.json +2 -2
  248. package/dist/lib/schemas-data/3.0/core/collection-list-ref.json +1 -1
  249. package/dist/lib/schemas-data/3.0/core/collection-selector.json +1 -1
  250. package/dist/lib/schemas-data/3.0/core/collection.json +13 -13
  251. package/dist/lib/schemas-data/3.0/core/content-rating.json +2 -2
  252. package/dist/lib/schemas-data/3.0/core/context.json +1 -1
  253. package/dist/lib/schemas-data/3.0/core/creative-asset.json +6 -6
  254. package/dist/lib/schemas-data/3.0/core/creative-assignment.json +1 -1
  255. package/dist/lib/schemas-data/3.0/core/creative-brief.json +4 -4
  256. package/dist/lib/schemas-data/3.0/core/creative-consumption.json +1 -1
  257. package/dist/lib/schemas-data/3.0/core/creative-filters.json +4 -4
  258. package/dist/lib/schemas-data/3.0/core/creative-item.json +1 -1
  259. package/dist/lib/schemas-data/3.0/core/creative-manifest.json +7 -7
  260. package/dist/lib/schemas-data/3.0/core/creative-policy.json +3 -3
  261. package/dist/lib/schemas-data/3.0/core/creative-variable.json +1 -1
  262. package/dist/lib/schemas-data/3.0/core/creative-variant.json +5 -5
  263. package/dist/lib/schemas-data/3.0/core/data-provider-signal-selector.json +1 -1
  264. package/dist/lib/schemas-data/3.0/core/date-range.json +1 -1
  265. package/dist/lib/schemas-data/3.0/core/datetime-range.json +1 -1
  266. package/dist/lib/schemas-data/3.0/core/daypart-target.json +2 -2
  267. package/dist/lib/schemas-data/3.0/core/deadline-policy.json +1 -1
  268. package/dist/lib/schemas-data/3.0/core/delivery-forecast.json +7 -7
  269. package/dist/lib/schemas-data/3.0/core/delivery-metrics.json +5 -5
  270. package/dist/lib/schemas-data/3.0/core/deployment.json +3 -3
  271. package/dist/lib/schemas-data/3.0/core/destination-item.json +4 -4
  272. package/dist/lib/schemas-data/3.0/core/destination.json +1 -1
  273. package/dist/lib/schemas-data/3.0/core/diagnostic-issue.json +1 -1
  274. package/dist/lib/schemas-data/3.0/core/duration.json +1 -1
  275. package/dist/lib/schemas-data/3.0/core/education-item.json +4 -4
  276. package/dist/lib/schemas-data/3.0/core/error.json +1 -1
  277. package/dist/lib/schemas-data/3.0/core/event-custom-data.json +2 -2
  278. package/dist/lib/schemas-data/3.0/core/event-source-health.json +3 -3
  279. package/dist/lib/schemas-data/3.0/core/event.json +6 -6
  280. package/dist/lib/schemas-data/3.0/core/ext.json +1 -1
  281. package/dist/lib/schemas-data/3.0/core/feature-requirement.json +1 -1
  282. package/dist/lib/schemas-data/3.0/core/flight-item.json +4 -4
  283. package/dist/lib/schemas-data/3.0/core/forecast-point.json +18 -18
  284. package/dist/lib/schemas-data/3.0/core/forecast-range.json +1 -1
  285. package/dist/lib/schemas-data/3.0/core/format-id.json +1 -1
  286. package/dist/lib/schemas-data/3.0/core/format.json +42 -42
  287. package/dist/lib/schemas-data/3.0/core/frequency-cap.json +4 -4
  288. package/dist/lib/schemas-data/3.0/core/generation-credential.json +3 -3
  289. package/dist/lib/schemas-data/3.0/core/geo-breakdown-support.json +3 -3
  290. package/dist/lib/schemas-data/3.0/core/hotel-item.json +4 -4
  291. package/dist/lib/schemas-data/3.0/core/identifier.json +2 -2
  292. package/dist/lib/schemas-data/3.0/core/industry-identifier.json +2 -2
  293. package/dist/lib/schemas-data/3.0/core/insertion-order.json +1 -1
  294. package/dist/lib/schemas-data/3.0/core/installment-deadlines.json +2 -2
  295. package/dist/lib/schemas-data/3.0/core/installment.json +9 -9
  296. package/dist/lib/schemas-data/3.0/core/job-item.json +3 -3
  297. package/dist/lib/schemas-data/3.0/core/limited-series.json +1 -1
  298. package/dist/lib/schemas-data/3.0/core/material-deadline.json +1 -1
  299. package/dist/lib/schemas-data/3.0/core/mcp-webhook-payload.json +5 -5
  300. package/dist/lib/schemas-data/3.0/core/measurement-readiness.json +5 -5
  301. package/dist/lib/schemas-data/3.0/core/measurement-terms.json +3 -3
  302. package/dist/lib/schemas-data/3.0/core/measurement-window.json +1 -1
  303. package/dist/lib/schemas-data/3.0/core/media-buy-features.json +1 -1
  304. package/dist/lib/schemas-data/3.0/core/media-buy.json +7 -7
  305. package/dist/lib/schemas-data/3.0/core/offering-asset-group.json +15 -15
  306. package/dist/lib/schemas-data/3.0/core/offering.json +5 -5
  307. package/dist/lib/schemas-data/3.0/core/optimization-goal.json +6 -6
  308. package/dist/lib/schemas-data/3.0/core/outcome-measurement.json +2 -2
  309. package/dist/lib/schemas-data/3.0/core/overlay.json +1 -1
  310. package/dist/lib/schemas-data/3.0/core/package.json +14 -14
  311. package/dist/lib/schemas-data/3.0/core/pagination-request.json +1 -1
  312. package/dist/lib/schemas-data/3.0/core/pagination-response.json +1 -1
  313. package/dist/lib/schemas-data/3.0/core/performance-feedback.json +3 -3
  314. package/dist/lib/schemas-data/3.0/core/performance-standard.json +4 -4
  315. package/dist/lib/schemas-data/3.0/core/placement-definition.json +5 -5
  316. package/dist/lib/schemas-data/3.0/core/placement.json +2 -2
  317. package/dist/lib/schemas-data/3.0/core/planned-delivery.json +5 -5
  318. package/dist/lib/schemas-data/3.0/core/price.json +1 -1
  319. package/dist/lib/schemas-data/3.0/core/pricing-option.json +10 -10
  320. package/dist/lib/schemas-data/3.0/core/product-allocation.json +4 -4
  321. package/dist/lib/schemas-data/3.0/core/product-filters.json +16 -16
  322. package/dist/lib/schemas-data/3.0/core/product.json +28 -28
  323. package/dist/lib/schemas-data/3.0/core/property-id.json +1 -1
  324. package/dist/lib/schemas-data/3.0/core/property-list-ref.json +1 -1
  325. package/dist/lib/schemas-data/3.0/core/property-tag.json +1 -1
  326. package/dist/lib/schemas-data/3.0/core/property.json +6 -6
  327. package/dist/lib/schemas-data/3.0/core/proposal.json +6 -6
  328. package/dist/lib/schemas-data/3.0/core/protocol-envelope.json +3 -3
  329. package/dist/lib/schemas-data/3.0/core/provenance.json +6 -6
  330. package/dist/lib/schemas-data/3.0/core/publisher-property-selector.json +3 -3
  331. package/dist/lib/schemas-data/3.0/core/push-notification-config.json +2 -2
  332. package/dist/lib/schemas-data/3.0/core/real-estate-item.json +4 -4
  333. package/dist/lib/schemas-data/3.0/core/reference-asset.json +1 -1
  334. package/dist/lib/schemas-data/3.0/core/reporting-capabilities.json +5 -5
  335. package/dist/lib/schemas-data/3.0/core/reporting-webhook.json +3 -3
  336. package/dist/lib/schemas-data/3.0/core/requirements/asset-requirements.json +13 -13
  337. package/dist/lib/schemas-data/3.0/core/requirements/audio-asset-requirements.json +1 -1
  338. package/dist/lib/schemas-data/3.0/core/requirements/catalog-field-binding.json +4 -4
  339. package/dist/lib/schemas-data/3.0/core/requirements/catalog-requirements.json +5 -5
  340. package/dist/lib/schemas-data/3.0/core/requirements/css-asset-requirements.json +1 -1
  341. package/dist/lib/schemas-data/3.0/core/requirements/daast-asset-requirements.json +1 -1
  342. package/dist/lib/schemas-data/3.0/core/requirements/html-asset-requirements.json +1 -1
  343. package/dist/lib/schemas-data/3.0/core/requirements/image-asset-requirements.json +2 -2
  344. package/dist/lib/schemas-data/3.0/core/requirements/javascript-asset-requirements.json +1 -1
  345. package/dist/lib/schemas-data/3.0/core/requirements/markdown-asset-requirements.json +1 -1
  346. package/dist/lib/schemas-data/3.0/core/requirements/offering-asset-constraint.json +4 -4
  347. package/dist/lib/schemas-data/3.0/core/requirements/text-asset-requirements.json +1 -1
  348. package/dist/lib/schemas-data/3.0/core/requirements/url-asset-requirements.json +1 -1
  349. package/dist/lib/schemas-data/3.0/core/requirements/vast-asset-requirements.json +1 -1
  350. package/dist/lib/schemas-data/3.0/core/requirements/video-asset-requirements.json +6 -6
  351. package/dist/lib/schemas-data/3.0/core/requirements/webhook-asset-requirements.json +1 -1
  352. package/dist/lib/schemas-data/3.0/core/response.json +1 -1
  353. package/dist/lib/schemas-data/3.0/core/rights-constraint.json +4 -4
  354. package/dist/lib/schemas-data/3.0/core/seller-agent-ref.json +1 -1
  355. package/dist/lib/schemas-data/3.0/core/signal-definition.json +3 -3
  356. package/dist/lib/schemas-data/3.0/core/signal-filters.json +2 -2
  357. package/dist/lib/schemas-data/3.0/core/signal-id.json +1 -1
  358. package/dist/lib/schemas-data/3.0/core/signal-pricing-option.json +2 -2
  359. package/dist/lib/schemas-data/3.0/core/signal-pricing.json +6 -6
  360. package/dist/lib/schemas-data/3.0/core/signal-targeting.json +4 -4
  361. package/dist/lib/schemas-data/3.0/core/special.json +2 -2
  362. package/dist/lib/schemas-data/3.0/core/start-timing.json +1 -1
  363. package/dist/lib/schemas-data/3.0/core/store-item.json +3 -3
  364. package/dist/lib/schemas-data/3.0/core/talent.json +2 -2
  365. package/dist/lib/schemas-data/3.0/core/targeting.json +20 -20
  366. package/dist/lib/schemas-data/3.0/core/tasks-get-request.json +3 -3
  367. package/dist/lib/schemas-data/3.0/core/tasks-get-response.json +7 -7
  368. package/dist/lib/schemas-data/3.0/core/tasks-list-request.json +11 -11
  369. package/dist/lib/schemas-data/3.0/core/tasks-list-response.json +6 -6
  370. package/dist/lib/schemas-data/3.0/core/user-match.json +3 -3
  371. package/dist/lib/schemas-data/3.0/core/vehicle-item.json +4 -4
  372. package/dist/lib/schemas-data/3.0/core/vendor-pricing-option.json +2 -2
  373. package/dist/lib/schemas-data/3.0/core/x-entity-types.json +1 -1
  374. package/dist/lib/schemas-data/3.0/creative/asset-types/index.json +5 -5
  375. package/dist/lib/schemas-data/3.0/creative/creative-feature-result.json +2 -2
  376. package/dist/lib/schemas-data/3.0/creative/get-creative-delivery-request.json +5 -5
  377. package/dist/lib/schemas-data/3.0/creative/get-creative-delivery-response.json +7 -7
  378. package/dist/lib/schemas-data/3.0/creative/get-creative-features-request.json +5 -5
  379. package/dist/lib/schemas-data/3.0/creative/get-creative-features-response.json +8 -8
  380. package/dist/lib/schemas-data/3.0/creative/list-creative-formats-request.json +11 -11
  381. package/dist/lib/schemas-data/3.0/creative/list-creative-formats-response.json +7 -7
  382. package/dist/lib/schemas-data/3.0/creative/list-creatives-request.json +8 -8
  383. package/dist/lib/schemas-data/3.0/creative/list-creatives-response.json +14 -14
  384. package/dist/lib/schemas-data/3.0/creative/preview-creative-request.json +11 -11
  385. package/dist/lib/schemas-data/3.0/creative/preview-creative-response.json +12 -12
  386. package/dist/lib/schemas-data/3.0/creative/preview-render.json +1 -1
  387. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-input-required.json +3 -3
  388. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-submitted.json +3 -3
  389. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-working.json +3 -3
  390. package/dist/lib/schemas-data/3.0/creative/sync-creatives-request.json +7 -7
  391. package/dist/lib/schemas-data/3.0/creative/sync-creatives-response.json +13 -13
  392. package/dist/lib/schemas-data/3.0/enums/account-scope.json +1 -1
  393. package/dist/lib/schemas-data/3.0/enums/account-status.json +1 -1
  394. package/dist/lib/schemas-data/3.0/enums/action-source.json +1 -1
  395. package/dist/lib/schemas-data/3.0/enums/adcp-protocol.json +1 -1
  396. package/dist/lib/schemas-data/3.0/enums/adjustment-kind.json +1 -1
  397. package/dist/lib/schemas-data/3.0/enums/advertiser-industry.json +1 -1
  398. package/dist/lib/schemas-data/3.0/enums/age-verification-method.json +1 -1
  399. package/dist/lib/schemas-data/3.0/enums/assessment-status.json +1 -1
  400. package/dist/lib/schemas-data/3.0/enums/asset-content-type.json +1 -1
  401. package/dist/lib/schemas-data/3.0/enums/attribution-model.json +1 -1
  402. package/dist/lib/schemas-data/3.0/enums/audience-source.json +1 -1
  403. package/dist/lib/schemas-data/3.0/enums/audience-status.json +1 -1
  404. package/dist/lib/schemas-data/3.0/enums/audio-channel-layout.json +1 -1
  405. package/dist/lib/schemas-data/3.0/enums/auth-scheme.json +1 -1
  406. package/dist/lib/schemas-data/3.0/enums/available-metric.json +1 -1
  407. package/dist/lib/schemas-data/3.0/enums/billing-party.json +1 -1
  408. package/dist/lib/schemas-data/3.0/enums/binary-verdict.json +1 -1
  409. package/dist/lib/schemas-data/3.0/enums/brand-agent-type.json +1 -1
  410. package/dist/lib/schemas-data/3.0/enums/canceled-by.json +1 -1
  411. package/dist/lib/schemas-data/3.0/enums/catalog-action.json +1 -1
  412. package/dist/lib/schemas-data/3.0/enums/catalog-item-status.json +1 -1
  413. package/dist/lib/schemas-data/3.0/enums/catalog-type.json +1 -1
  414. package/dist/lib/schemas-data/3.0/enums/channels.json +1 -1
  415. package/dist/lib/schemas-data/3.0/enums/cloud-storage-protocol.json +1 -1
  416. package/dist/lib/schemas-data/3.0/enums/co-branding-requirement.json +1 -1
  417. package/dist/lib/schemas-data/3.0/enums/collection-cadence.json +1 -1
  418. package/dist/lib/schemas-data/3.0/enums/collection-kind.json +1 -1
  419. package/dist/lib/schemas-data/3.0/enums/collection-relationship.json +1 -1
  420. package/dist/lib/schemas-data/3.0/enums/collection-status.json +1 -1
  421. package/dist/lib/schemas-data/3.0/enums/consent-basis.json +1 -1
  422. package/dist/lib/schemas-data/3.0/enums/content-id-type.json +1 -1
  423. package/dist/lib/schemas-data/3.0/enums/content-rating-system.json +1 -1
  424. package/dist/lib/schemas-data/3.0/enums/creative-action.json +1 -1
  425. package/dist/lib/schemas-data/3.0/enums/creative-agent-capability.json +1 -1
  426. package/dist/lib/schemas-data/3.0/enums/creative-approval-status.json +1 -1
  427. package/dist/lib/schemas-data/3.0/enums/creative-identifier-type.json +1 -1
  428. package/dist/lib/schemas-data/3.0/enums/creative-quality.json +1 -1
  429. package/dist/lib/schemas-data/3.0/enums/creative-sort-field.json +1 -1
  430. package/dist/lib/schemas-data/3.0/enums/creative-status.json +1 -1
  431. package/dist/lib/schemas-data/3.0/enums/daast-tracking-event.json +1 -1
  432. package/dist/lib/schemas-data/3.0/enums/daast-version.json +1 -1
  433. package/dist/lib/schemas-data/3.0/enums/day-of-week.json +1 -1
  434. package/dist/lib/schemas-data/3.0/enums/delegation-authority.json +1 -1
  435. package/dist/lib/schemas-data/3.0/enums/delivery-type.json +1 -1
  436. package/dist/lib/schemas-data/3.0/enums/demographic-system.json +1 -1
  437. package/dist/lib/schemas-data/3.0/enums/derivative-type.json +1 -1
  438. package/dist/lib/schemas-data/3.0/enums/device-platform.json +1 -1
  439. package/dist/lib/schemas-data/3.0/enums/device-type.json +1 -1
  440. package/dist/lib/schemas-data/3.0/enums/digital-source-type.json +1 -1
  441. package/dist/lib/schemas-data/3.0/enums/dimension-unit.json +1 -1
  442. package/dist/lib/schemas-data/3.0/enums/disclosure-persistence.json +1 -1
  443. package/dist/lib/schemas-data/3.0/enums/disclosure-position.json +1 -1
  444. package/dist/lib/schemas-data/3.0/enums/distance-unit.json +1 -1
  445. package/dist/lib/schemas-data/3.0/enums/distribution-identifier-type.json +1 -1
  446. package/dist/lib/schemas-data/3.0/enums/error-code.json +3 -3
  447. package/dist/lib/schemas-data/3.0/enums/escalation-severity.json +1 -1
  448. package/dist/lib/schemas-data/3.0/enums/event-type.json +1 -1
  449. package/dist/lib/schemas-data/3.0/enums/exclusivity.json +1 -1
  450. package/dist/lib/schemas-data/3.0/enums/feature-check-status.json +1 -1
  451. package/dist/lib/schemas-data/3.0/enums/feed-format.json +1 -1
  452. package/dist/lib/schemas-data/3.0/enums/feedback-source.json +1 -1
  453. package/dist/lib/schemas-data/3.0/enums/forecast-method.json +1 -1
  454. package/dist/lib/schemas-data/3.0/enums/forecast-range-unit.json +1 -1
  455. package/dist/lib/schemas-data/3.0/enums/forecastable-metric.json +1 -1
  456. package/dist/lib/schemas-data/3.0/enums/format-id-parameter.json +1 -1
  457. package/dist/lib/schemas-data/3.0/enums/frame-rate-type.json +1 -1
  458. package/dist/lib/schemas-data/3.0/enums/frequency-cap-scope.json +1 -1
  459. package/dist/lib/schemas-data/3.0/enums/genre-taxonomy.json +1 -1
  460. package/dist/lib/schemas-data/3.0/enums/geo-level.json +1 -1
  461. package/dist/lib/schemas-data/3.0/enums/gop-type.json +1 -1
  462. package/dist/lib/schemas-data/3.0/enums/governance-decision.json +1 -1
  463. package/dist/lib/schemas-data/3.0/enums/governance-domain.json +1 -1
  464. package/dist/lib/schemas-data/3.0/enums/governance-mode.json +1 -1
  465. package/dist/lib/schemas-data/3.0/enums/governance-phase.json +1 -1
  466. package/dist/lib/schemas-data/3.0/enums/history-entry-type.json +1 -1
  467. package/dist/lib/schemas-data/3.0/enums/http-method.json +1 -1
  468. package/dist/lib/schemas-data/3.0/enums/identifier-types.json +1 -1
  469. package/dist/lib/schemas-data/3.0/enums/installment-status.json +1 -1
  470. package/dist/lib/schemas-data/3.0/enums/javascript-module-type.json +1 -1
  471. package/dist/lib/schemas-data/3.0/enums/landing-page-requirement.json +1 -1
  472. package/dist/lib/schemas-data/3.0/enums/makegood-remedy.json +1 -1
  473. package/dist/lib/schemas-data/3.0/enums/markdown-flavor.json +1 -1
  474. package/dist/lib/schemas-data/3.0/enums/match-id-type.json +1 -1
  475. package/dist/lib/schemas-data/3.0/enums/match-type.json +1 -1
  476. package/dist/lib/schemas-data/3.0/enums/media-buy-status.json +1 -1
  477. package/dist/lib/schemas-data/3.0/enums/media-buy-valid-action.json +1 -1
  478. package/dist/lib/schemas-data/3.0/enums/metric-type.json +1 -1
  479. package/dist/lib/schemas-data/3.0/enums/metro-system.json +1 -1
  480. package/dist/lib/schemas-data/3.0/enums/moov-atom-position.json +1 -1
  481. package/dist/lib/schemas-data/3.0/enums/notification-type.json +1 -1
  482. package/dist/lib/schemas-data/3.0/enums/outcome-type.json +1 -1
  483. package/dist/lib/schemas-data/3.0/enums/pacing.json +1 -1
  484. package/dist/lib/schemas-data/3.0/enums/payment-terms.json +1 -1
  485. package/dist/lib/schemas-data/3.0/enums/performance-standard-metric.json +1 -1
  486. package/dist/lib/schemas-data/3.0/enums/policy-category.json +1 -1
  487. package/dist/lib/schemas-data/3.0/enums/policy-enforcement.json +1 -1
  488. package/dist/lib/schemas-data/3.0/enums/postal-system.json +1 -1
  489. package/dist/lib/schemas-data/3.0/enums/preview-output-format.json +1 -1
  490. package/dist/lib/schemas-data/3.0/enums/pricing-model.json +1 -1
  491. package/dist/lib/schemas-data/3.0/enums/production-quality.json +1 -1
  492. package/dist/lib/schemas-data/3.0/enums/property-type.json +1 -1
  493. package/dist/lib/schemas-data/3.0/enums/proposal-status.json +1 -1
  494. package/dist/lib/schemas-data/3.0/enums/publisher-identifier-types.json +1 -1
  495. package/dist/lib/schemas-data/3.0/enums/purchase-type.json +1 -1
  496. package/dist/lib/schemas-data/3.0/enums/reach-unit.json +1 -1
  497. package/dist/lib/schemas-data/3.0/enums/reporting-frequency.json +1 -1
  498. package/dist/lib/schemas-data/3.0/enums/response-type.json +1 -1
  499. package/dist/lib/schemas-data/3.0/enums/restricted-attribute.json +1 -1
  500. package/dist/lib/schemas-data/3.0/enums/right-type.json +1 -1
  501. package/dist/lib/schemas-data/3.0/enums/right-use.json +1 -1
  502. package/dist/lib/schemas-data/3.0/enums/rights-billing-period.json +1 -1
  503. package/dist/lib/schemas-data/3.0/enums/scan-type.json +1 -1
  504. package/dist/lib/schemas-data/3.0/enums/si-session-status.json +1 -1
  505. package/dist/lib/schemas-data/3.0/enums/signal-catalog-type.json +1 -1
  506. package/dist/lib/schemas-data/3.0/enums/signal-source.json +1 -1
  507. package/dist/lib/schemas-data/3.0/enums/signal-value-type.json +1 -1
  508. package/dist/lib/schemas-data/3.0/enums/snapshot-unavailable-reason.json +1 -1
  509. package/dist/lib/schemas-data/3.0/enums/sort-direction.json +1 -1
  510. package/dist/lib/schemas-data/3.0/enums/sort-metric.json +1 -1
  511. package/dist/lib/schemas-data/3.0/enums/special-category.json +1 -1
  512. package/dist/lib/schemas-data/3.0/enums/specialism.json +1 -1
  513. package/dist/lib/schemas-data/3.0/enums/talent-role.json +1 -1
  514. package/dist/lib/schemas-data/3.0/enums/task-status.json +1 -1
  515. package/dist/lib/schemas-data/3.0/enums/task-type.json +1 -1
  516. package/dist/lib/schemas-data/3.0/enums/transport-mode.json +1 -1
  517. package/dist/lib/schemas-data/3.0/enums/travel-time-unit.json +1 -1
  518. package/dist/lib/schemas-data/3.0/enums/uid-type.json +1 -1
  519. package/dist/lib/schemas-data/3.0/enums/universal-macro.json +1 -1
  520. package/dist/lib/schemas-data/3.0/enums/update-frequency.json +1 -1
  521. package/dist/lib/schemas-data/3.0/enums/url-asset-type.json +1 -1
  522. package/dist/lib/schemas-data/3.0/enums/validation-mode.json +1 -1
  523. package/dist/lib/schemas-data/3.0/enums/vast-tracking-event.json +1 -1
  524. package/dist/lib/schemas-data/3.0/enums/vast-version.json +1 -1
  525. package/dist/lib/schemas-data/3.0/enums/viewability-standard.json +1 -1
  526. package/dist/lib/schemas-data/3.0/enums/wcag-level.json +1 -1
  527. package/dist/lib/schemas-data/3.0/enums/webhook-response-type.json +1 -1
  528. package/dist/lib/schemas-data/3.0/enums/webhook-security-method.json +1 -1
  529. package/dist/lib/schemas-data/3.0/error-details/account-setup-required.json +1 -1
  530. package/dist/lib/schemas-data/3.0/error-details/audience-too-small.json +1 -1
  531. package/dist/lib/schemas-data/3.0/error-details/budget-too-low.json +1 -1
  532. package/dist/lib/schemas-data/3.0/error-details/conflict.json +1 -1
  533. package/dist/lib/schemas-data/3.0/error-details/creative-rejected.json +1 -1
  534. package/dist/lib/schemas-data/3.0/error-details/policy-violation.json +1 -1
  535. package/dist/lib/schemas-data/3.0/error-details/rate-limited.json +1 -1
  536. package/dist/lib/schemas-data/3.0/error-details/vendor-error-codes.json +1 -1
  537. package/dist/lib/schemas-data/3.0/extensions/extension-meta.json +1 -1
  538. package/dist/lib/schemas-data/3.0/extensions/index.json +2 -2
  539. package/dist/lib/schemas-data/3.0/governance/attribute-definition.json +1 -1
  540. package/dist/lib/schemas-data/3.0/governance/audience-constraints.json +3 -3
  541. package/dist/lib/schemas-data/3.0/governance/check-governance-request.json +7 -7
  542. package/dist/lib/schemas-data/3.0/governance/check-governance-response.json +6 -6
  543. package/dist/lib/schemas-data/3.0/governance/get-plan-audit-logs-request.json +4 -4
  544. package/dist/lib/schemas-data/3.0/governance/get-plan-audit-logs-response.json +9 -9
  545. package/dist/lib/schemas-data/3.0/governance/policy-category-definition.json +2 -2
  546. package/dist/lib/schemas-data/3.0/governance/policy-entry.json +6 -6
  547. package/dist/lib/schemas-data/3.0/governance/policy-ref.json +1 -1
  548. package/dist/lib/schemas-data/3.0/governance/report-plan-outcome-request.json +6 -6
  549. package/dist/lib/schemas-data/3.0/governance/report-plan-outcome-response.json +4 -4
  550. package/dist/lib/schemas-data/3.0/governance/sync-plans-request.json +13 -13
  551. package/dist/lib/schemas-data/3.0/governance/sync-plans-response.json +4 -4
  552. package/dist/lib/schemas-data/3.0/index.json +364 -364
  553. package/dist/lib/schemas-data/3.0/manifest.json +5 -5
  554. package/dist/lib/schemas-data/3.0/manifest.schema.json +1 -1
  555. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-input-required.json +4 -4
  556. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-submitted.json +3 -3
  557. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-working.json +3 -3
  558. package/dist/lib/schemas-data/3.0/media-buy/build-creative-request.json +11 -11
  559. package/dist/lib/schemas-data/3.0/media-buy/build-creative-response.json +17 -17
  560. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-input-required.json +4 -4
  561. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-submitted.json +3 -3
  562. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-working.json +3 -3
  563. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-request.json +12 -12
  564. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-response.json +15 -15
  565. package/dist/lib/schemas-data/3.0/media-buy/get-media-buy-delivery-request.json +17 -17
  566. package/dist/lib/schemas-data/3.0/media-buy/get-media-buy-delivery-response.json +24 -24
  567. package/dist/lib/schemas-data/3.0/media-buy/get-media-buys-request.json +7 -7
  568. package/dist/lib/schemas-data/3.0/media-buy/get-media-buys-response.json +19 -19
  569. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-input-required.json +4 -4
  570. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-submitted.json +3 -3
  571. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-working.json +3 -3
  572. package/dist/lib/schemas-data/3.0/media-buy/get-products-request.json +11 -11
  573. package/dist/lib/schemas-data/3.0/media-buy/get-products-response.json +8 -8
  574. package/dist/lib/schemas-data/3.0/media-buy/list-creative-formats-request.json +11 -11
  575. package/dist/lib/schemas-data/3.0/media-buy/list-creative-formats-response.json +7 -7
  576. package/dist/lib/schemas-data/3.0/media-buy/log-event-request.json +4 -4
  577. package/dist/lib/schemas-data/3.0/media-buy/log-event-response.json +6 -6
  578. package/dist/lib/schemas-data/3.0/media-buy/package-request.json +12 -12
  579. package/dist/lib/schemas-data/3.0/media-buy/package-update.json +13 -13
  580. package/dist/lib/schemas-data/3.0/media-buy/provide-performance-feedback-request.json +6 -6
  581. package/dist/lib/schemas-data/3.0/media-buy/provide-performance-feedback-response.json +6 -6
  582. package/dist/lib/schemas-data/3.0/media-buy/sync-audiences-request.json +7 -7
  583. package/dist/lib/schemas-data/3.0/media-buy/sync-audiences-response.json +9 -9
  584. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-input-required.json +3 -3
  585. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-submitted.json +3 -3
  586. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-working.json +3 -3
  587. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-request.json +7 -7
  588. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-response.json +9 -9
  589. package/dist/lib/schemas-data/3.0/media-buy/sync-event-sources-request.json +5 -5
  590. package/dist/lib/schemas-data/3.0/media-buy/sync-event-sources-response.json +10 -10
  591. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-input-required.json +3 -3
  592. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-submitted.json +3 -3
  593. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-working.json +3 -3
  594. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-request.json +10 -10
  595. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-response.json +10 -10
  596. package/dist/lib/schemas-data/3.0/pricing-options/cpa-option.json +4 -4
  597. package/dist/lib/schemas-data/3.0/pricing-options/cpc-option.json +4 -4
  598. package/dist/lib/schemas-data/3.0/pricing-options/cpcv-option.json +4 -4
  599. package/dist/lib/schemas-data/3.0/pricing-options/cpm-option.json +4 -4
  600. package/dist/lib/schemas-data/3.0/pricing-options/cpp-option.json +5 -5
  601. package/dist/lib/schemas-data/3.0/pricing-options/cpv-option.json +4 -4
  602. package/dist/lib/schemas-data/3.0/pricing-options/flat-rate-option.json +4 -4
  603. package/dist/lib/schemas-data/3.0/pricing-options/price-breakdown.json +2 -2
  604. package/dist/lib/schemas-data/3.0/pricing-options/price-guidance.json +1 -1
  605. package/dist/lib/schemas-data/3.0/pricing-options/time-option.json +4 -4
  606. package/dist/lib/schemas-data/3.0/pricing-options/vcpm-option.json +4 -4
  607. package/dist/lib/schemas-data/3.0/property/authorization-result.json +1 -1
  608. package/dist/lib/schemas-data/3.0/property/base-property-source.json +4 -4
  609. package/dist/lib/schemas-data/3.0/property/create-property-list-request.json +7 -7
  610. package/dist/lib/schemas-data/3.0/property/create-property-list-response.json +4 -4
  611. package/dist/lib/schemas-data/3.0/property/delete-property-list-request.json +4 -4
  612. package/dist/lib/schemas-data/3.0/property/delete-property-list-response.json +3 -3
  613. package/dist/lib/schemas-data/3.0/property/delivery-record.json +3 -3
  614. package/dist/lib/schemas-data/3.0/property/get-property-list-request.json +4 -4
  615. package/dist/lib/schemas-data/3.0/property/get-property-list-response.json +7 -7
  616. package/dist/lib/schemas-data/3.0/property/list-property-lists-request.json +5 -5
  617. package/dist/lib/schemas-data/3.0/property/list-property-lists-response.json +5 -5
  618. package/dist/lib/schemas-data/3.0/property/property-error.json +2 -2
  619. package/dist/lib/schemas-data/3.0/property/property-feature-definition.json +2 -2
  620. package/dist/lib/schemas-data/3.0/property/property-feature-result.json +4 -4
  621. package/dist/lib/schemas-data/3.0/property/property-feature-value.json +2 -2
  622. package/dist/lib/schemas-data/3.0/property/property-feature.json +1 -1
  623. package/dist/lib/schemas-data/3.0/property/property-list-changed-webhook.json +2 -2
  624. package/dist/lib/schemas-data/3.0/property/property-list-filters.json +5 -5
  625. package/dist/lib/schemas-data/3.0/property/property-list.json +6 -6
  626. package/dist/lib/schemas-data/3.0/property/update-property-list-request.json +7 -7
  627. package/dist/lib/schemas-data/3.0/property/update-property-list-response.json +4 -4
  628. package/dist/lib/schemas-data/3.0/property/validate-property-delivery-request.json +5 -5
  629. package/dist/lib/schemas-data/3.0/property/validate-property-delivery-response.json +4 -4
  630. package/dist/lib/schemas-data/3.0/property/validation-result.json +5 -5
  631. package/dist/lib/schemas-data/3.0/protocol/get-adcp-capabilities-request.json +3 -3
  632. package/dist/lib/schemas-data/3.0/protocol/get-adcp-capabilities-response.json +25 -25
  633. package/dist/lib/schemas-data/3.0/signals/activate-signal-request.json +5 -5
  634. package/dist/lib/schemas-data/3.0/signals/activate-signal-response.json +7 -7
  635. package/dist/lib/schemas-data/3.0/signals/get-signals-request.json +8 -8
  636. package/dist/lib/schemas-data/3.0/signals/get-signals-response.json +10 -10
  637. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-capabilities.json +1 -1
  638. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-get-offering-request.json +3 -3
  639. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-get-offering-response.json +4 -4
  640. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-identity.json +1 -1
  641. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-initiate-session-request.json +5 -5
  642. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-initiate-session-response.json +7 -7
  643. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-send-message-request.json +3 -3
  644. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-send-message-response.json +7 -7
  645. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-terminate-session-request.json +3 -3
  646. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-terminate-session-response.json +5 -5
  647. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-ui-element.json +1 -1
  648. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  649. package/dist/lib/server/account-mode.d.ts +113 -0
  650. package/dist/lib/server/account-mode.d.ts.map +1 -0
  651. package/dist/lib/server/account-mode.js +125 -0
  652. package/dist/lib/server/account-mode.js.map +1 -0
  653. package/dist/lib/server/adcp-server.js +41 -0
  654. package/dist/lib/server/adcp-server.js.map +1 -1
  655. package/dist/lib/server/auth.d.ts +35 -0
  656. package/dist/lib/server/auth.d.ts.map +1 -1
  657. package/dist/lib/server/auth.js.map +1 -1
  658. package/dist/lib/server/create-adcp-server.d.ts +26 -9
  659. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  660. package/dist/lib/server/create-adcp-server.js +46 -20
  661. package/dist/lib/server/create-adcp-server.js.map +1 -1
  662. package/dist/lib/server/ctx-metadata/store.d.ts +1 -1
  663. package/dist/lib/server/ctx-metadata/store.d.ts.map +1 -1
  664. package/dist/lib/server/ctx-metadata/store.js +1 -0
  665. package/dist/lib/server/ctx-metadata/store.js.map +1 -1
  666. package/dist/lib/server/decisioning/account.d.ts +19 -0
  667. package/dist/lib/server/decisioning/account.d.ts.map +1 -1
  668. package/dist/lib/server/decisioning/account.js.map +1 -1
  669. package/dist/lib/server/decisioning/buyer-agent.d.ts +37 -4
  670. package/dist/lib/server/decisioning/buyer-agent.d.ts.map +1 -1
  671. package/dist/lib/server/decisioning/buyer-agent.js +12 -2
  672. package/dist/lib/server/decisioning/buyer-agent.js.map +1 -1
  673. package/dist/lib/server/decisioning/compose.d.ts +33 -2
  674. package/dist/lib/server/decisioning/compose.d.ts.map +1 -1
  675. package/dist/lib/server/decisioning/compose.js +13 -46
  676. package/dist/lib/server/decisioning/compose.js.map +1 -1
  677. package/dist/lib/server/decisioning/index.d.ts +2 -1
  678. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  679. package/dist/lib/server/decisioning/index.js +2 -1
  680. package/dist/lib/server/decisioning/index.js.map +1 -1
  681. package/dist/lib/server/decisioning/platform-helpers.d.ts +18 -0
  682. package/dist/lib/server/decisioning/platform-helpers.d.ts.map +1 -1
  683. package/dist/lib/server/decisioning/platform-helpers.js +20 -0
  684. package/dist/lib/server/decisioning/platform-helpers.js.map +1 -1
  685. package/dist/lib/server/decisioning/platform.d.ts +19 -21
  686. package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
  687. package/dist/lib/server/decisioning/platform.js.map +1 -1
  688. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.js +1 -1
  689. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  690. package/dist/lib/server/decisioning/runtime/from-platform.js +369 -54
  691. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  692. package/dist/lib/server/decisioning/runtime/observed-modes.d.ts +40 -0
  693. package/dist/lib/server/decisioning/runtime/observed-modes.d.ts.map +1 -0
  694. package/dist/lib/server/decisioning/runtime/observed-modes.js +82 -0
  695. package/dist/lib/server/decisioning/runtime/observed-modes.js.map +1 -0
  696. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js +2 -2
  697. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js.map +1 -1
  698. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
  699. package/dist/lib/server/decisioning/runtime/validate-platform.js +9 -1
  700. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
  701. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts +125 -0
  702. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts.map +1 -0
  703. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js +52 -0
  704. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js.map +1 -0
  705. package/dist/lib/server/decisioning/tenant-registry.d.ts +16 -0
  706. package/dist/lib/server/decisioning/tenant-registry.d.ts.map +1 -1
  707. package/dist/lib/server/decisioning/tenant-registry.js.map +1 -1
  708. package/dist/lib/server/index.d.ts +5 -1
  709. package/dist/lib/server/index.d.ts.map +1 -1
  710. package/dist/lib/server/index.js +15 -3
  711. package/dist/lib/server/index.js.map +1 -1
  712. package/dist/lib/server/serve.js +20 -2
  713. package/dist/lib/server/serve.js.map +1 -1
  714. package/dist/lib/server/socket-mode/conformance-client.d.ts +83 -0
  715. package/dist/lib/server/socket-mode/conformance-client.d.ts.map +1 -0
  716. package/dist/lib/server/socket-mode/conformance-client.js +117 -0
  717. package/dist/lib/server/socket-mode/conformance-client.js.map +1 -0
  718. package/dist/lib/server/socket-mode/index.d.ts +15 -0
  719. package/dist/lib/server/socket-mode/index.d.ts.map +1 -0
  720. package/dist/lib/server/socket-mode/index.js +20 -0
  721. package/dist/lib/server/socket-mode/index.js.map +1 -0
  722. package/dist/lib/server/socket-mode/ws-transport.d.ts +26 -0
  723. package/dist/lib/server/socket-mode/ws-transport.d.ts.map +1 -0
  724. package/dist/lib/server/socket-mode/ws-transport.js +93 -0
  725. package/dist/lib/server/socket-mode/ws-transport.js.map +1 -0
  726. package/dist/lib/server/test-controller.d.ts +3 -0
  727. package/dist/lib/server/test-controller.d.ts.map +1 -1
  728. package/dist/lib/server/test-controller.js +23 -20
  729. package/dist/lib/server/test-controller.js.map +1 -1
  730. package/dist/lib/testing/comply-controller.d.ts +65 -3
  731. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  732. package/dist/lib/testing/comply-controller.js +32 -3
  733. package/dist/lib/testing/comply-controller.js.map +1 -1
  734. package/dist/lib/testing/index.d.ts +1 -1
  735. package/dist/lib/testing/index.d.ts.map +1 -1
  736. package/dist/lib/testing/index.js.map +1 -1
  737. package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
  738. package/dist/lib/testing/storyboard/request-builder.js +63 -40
  739. package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
  740. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  741. package/dist/lib/testing/storyboard/validations.js +36 -54
  742. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  743. package/dist/lib/testing/test-controller.d.ts +10 -4
  744. package/dist/lib/testing/test-controller.d.ts.map +1 -1
  745. package/dist/lib/testing/test-controller.js +9 -3
  746. package/dist/lib/testing/test-controller.js.map +1 -1
  747. package/dist/lib/types/core.generated.d.ts +54 -14
  748. package/dist/lib/types/core.generated.d.ts.map +1 -1
  749. package/dist/lib/types/core.generated.js +2 -2
  750. package/dist/lib/types/error-codes.d.ts +2 -2
  751. package/dist/lib/types/index.d.ts +4 -3
  752. package/dist/lib/types/index.d.ts.map +1 -1
  753. package/dist/lib/types/index.js +3 -0
  754. package/dist/lib/types/index.js.map +1 -1
  755. package/dist/lib/types/manifest.generated.d.ts +5 -5
  756. package/dist/lib/types/manifest.generated.js +3 -3
  757. package/dist/lib/types/manifest.generated.js.map +1 -1
  758. package/dist/lib/types/schemas.generated.d.ts +465 -381
  759. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  760. package/dist/lib/types/schemas.generated.js +171 -143
  761. package/dist/lib/types/schemas.generated.js.map +1 -1
  762. package/dist/lib/types/tools.generated.d.ts +42 -14
  763. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  764. package/dist/lib/utils/glob.d.ts +4 -2
  765. package/dist/lib/utils/glob.d.ts.map +1 -1
  766. package/dist/lib/utils/glob.js +4 -2
  767. package/dist/lib/utils/glob.js.map +1 -1
  768. package/dist/lib/version.d.ts +7 -7
  769. package/dist/lib/version.d.ts.map +1 -1
  770. package/dist/lib/version.js +6 -5
  771. package/dist/lib/version.js.map +1 -1
  772. package/docs/llms.txt +5 -4
  773. package/examples/README.md +29 -13
  774. package/examples/hello-cluster.ts +62 -23
  775. package/examples/hello_creative_adapter_ad_server.ts +809 -0
  776. package/examples/hello_creative_adapter_template.ts +61 -6
  777. package/examples/hello_seller_adapter_guaranteed.ts +158 -25
  778. package/examples/hello_seller_adapter_multi_tenant.ts +39 -5
  779. package/examples/hello_seller_adapter_non_guaranteed.ts +1071 -0
  780. package/examples/hello_seller_adapter_social.ts +1 -1
  781. package/examples/hello_si_adapter_brand.ts +572 -0
  782. package/examples/hello_signals_adapter_marketplace.ts +34 -29
  783. package/package.json +7 -5
  784. package/skills/SHAPE-GOTCHAS.md +18 -0
  785. package/skills/build-brand-rights-agent/SKILL.md +61 -597
  786. package/skills/build-creative-agent/SKILL.md +69 -830
  787. package/skills/build-generative-seller-agent/SKILL.md +43 -577
  788. package/skills/build-governance-agent/SKILL.md +63 -950
  789. package/skills/build-holdco-agent/SKILL.md +8 -0
  790. package/skills/build-retail-media-agent/SKILL.md +46 -478
  791. package/skills/build-seller-agent/SKILL.md +53 -1795
  792. package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +9 -31
  793. package/skills/build-si-agent/SKILL.md +55 -318
  794. package/skills/build-signals-agent/SKILL.md +49 -537
  795. package/skills/call-adcp-agent/SKILL.md +7 -1
  796. package/skills/cross-cutting.md +84 -0
  797. package/skills/call-adcp-agent.previous/SKILL.md +0 -261
  798. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/brand/index.yaml +0 -0
  799. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/creative/index.yaml +0 -0
  800. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/governance/index.yaml +0 -0
  801. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/creative-reception.yaml +0 -0
  802. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/index.yaml +0 -0
  803. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  804. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -0
  805. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
  806. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
  807. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
  808. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
  809. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  810. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
  811. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  812. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  813. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  814. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
  815. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/refine_products.yaml +0 -0
  816. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/state-machine.yaml +0 -0
  817. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/signals/index.yaml +0 -0
  818. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/sponsored-intelligence/index.yaml +0 -0
  819. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/brand/index.yaml +0 -0
  820. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/creative/index.yaml +0 -0
  821. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/governance/index.yaml +0 -0
  822. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/creative-reception.yaml +0 -0
  823. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/index.yaml +0 -0
  824. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  825. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -0
  826. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
  827. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
  828. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
  829. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
  830. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  831. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
  832. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  833. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  834. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  835. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
  836. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
  837. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/state-machine.yaml +0 -0
  838. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/signals/index.yaml +0 -0
  839. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/sponsored-intelligence/index.yaml +0 -0
  840. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/audience-sync/index.yaml +0 -0
  841. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/brand-rights/index.yaml +0 -0
  842. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
  843. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/collection-lists/index.yaml +0 -0
  844. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/content-standards/index.yaml +0 -0
  845. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-ad-server/index.yaml +0 -0
  846. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-generative/generative-seller.yaml +0 -0
  847. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-generative/index.yaml +0 -0
  848. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-template/index.yaml +0 -0
  849. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-aware-seller/index.yaml +0 -0
  850. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-delivery-monitor/index.yaml +0 -0
  851. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-spend-authority/denied.yaml +0 -0
  852. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-spend-authority/index.yaml +0 -0
  853. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/property-lists/index.yaml +0 -0
  854. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-broadcast-tv/index.yaml +0 -0
  855. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-catalog-driven/index.yaml +0 -0
  856. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-non-guaranteed/index.yaml +0 -0
  857. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-proposal-mode/index.yaml +0 -0
  858. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-social/index.yaml +0 -0
  859. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-marketplace/index.yaml +0 -0
  860. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
  861. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-owned/index.yaml +0 -0
  862. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/acme-outdoor.yaml +0 -0
  863. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/bistro-oranje.yaml +0 -0
  864. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/nova-motors.yaml +0 -0
  865. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/osei-natural.yaml +0 -0
  866. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/signed-requests-runner.yaml +0 -0
  867. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/substitution-observer-runner.yaml +0 -0
  868. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/summit-foods.yaml +0 -0
  869. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/webhook-receiver-runner.yaml +0 -0
  870. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
  871. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/002-full-plan.json +0 -0
  872. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
  873. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
  874. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
  875. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
  876. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
  877. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
  878. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
  879. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
  880. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
  881. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/README.md +0 -0
  882. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/canonicalization.json +0 -0
  883. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/keys.json +0 -0
  884. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
  885. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
  886. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
  887. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
  888. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
  889. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
  890. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
  891. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
  892. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
  893. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
  894. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
  895. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
  896. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
  897. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
  898. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
  899. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
  900. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
  901. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
  902. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
  903. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
  904. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
  905. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
  906. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
  907. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
  908. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
  909. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
  910. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
  911. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
  912. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
  913. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
  914. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
  915. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
  916. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
  917. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
  918. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
  919. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
  920. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
  921. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
  922. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
  923. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/README.md +0 -0
  924. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/keys.json +0 -0
  925. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
  926. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
  927. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
  928. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
  929. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
  930. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
  931. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
  932. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
  933. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
  934. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
  935. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
  936. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
  937. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
  938. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
  939. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
  940. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
  941. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
  942. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
  943. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
  944. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
  945. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
  946. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
  947. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
  948. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
  949. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
  950. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
  951. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
  952. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
  953. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/capability-discovery.yaml +0 -0
  954. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/collection-lists-pagination-integrity.yaml +0 -0
  955. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/content-standards-pagination-integrity.yaml +0 -0
  956. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/deterministic-testing.yaml +0 -0
  957. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/error-compliance.yaml +0 -0
  958. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/fictional-entities.yaml +0 -0
  959. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/get-media-buys-pagination-integrity.yaml +0 -0
  960. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/get-signals-pagination-integrity.yaml +0 -0
  961. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/idempotency.yaml +0 -0
  962. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity-creative-formats.yaml +0 -0
  963. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity-list-accounts.yaml +0 -0
  964. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity.yaml +0 -0
  965. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/property-lists-pagination-integrity.yaml +0 -0
  966. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/runner-output-contract.yaml +0 -0
  967. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/schema-validation.yaml +0 -0
  968. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/security.yaml +0 -0
  969. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/signed-requests.yaml +0 -0
  970. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/v3-envelope-integrity.yaml +0 -0
  971. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/webhook-emission.yaml +0 -0
@@ -1,997 +1,110 @@
1
1
  ---
2
2
  name: build-governance-agent
3
- description: Use when building an AdCP governance agent — a platform that evaluates media buys against spending authority, manages property lists, and enforces content standards.
3
+ description: Use when building an AdCP governance agent — campaign governance (spending authority, approval/denial), property/collection lists for brand safety, or content standards for creative compliance.
4
4
  ---
5
5
 
6
6
  # Build a Governance Agent
7
7
 
8
- ## Overview
8
+ A governance agent enforces policy on the buy side. It evaluates spending authority, maintains property and collection lists, and defines content standards. There is no dedicated `hello_governance_adapter_*.ts` yet — this skill collapses against the seller adapter pattern and the documented tool surface.
9
9
 
10
- A governance agent sits between buyers and sellers, evaluating proposed media buys against organizational policies. Three domains: campaign governance (spending authority, approval/denial), property governance (inclusion/exclusion lists for brand safety), and content standards (creative compliance rules). Determine which domains the user needs.
10
+ ## Pick your fork target
11
11
 
12
- ## When to Use
12
+ | Specialism | Status | Fork this | Storyboard |
13
+ | --- | --- | --- | --- |
14
+ | `governance-spend-authority` | stable | [`hello_seller_adapter_multi_tenant.ts`](../../examples/hello_seller_adapter_multi_tenant.ts) — `campaignGovernance` block | `governance_spend_authority` |
15
+ | `governance-delivery-monitor` | stable | Same; add `phase: 'delivery'` branch on `checkGovernance` | `governance_delivery_monitor` |
16
+ | `property-lists` | stable | [`hello_seller_adapter_multi_tenant.ts`](../../examples/hello_seller_adapter_multi_tenant.ts) — `propertyLists` block | `property_lists` |
17
+ | `collection-lists` | stable | Same shape as property-lists; add IMDb/Gracenote/EIDR resolution | placeholder |
18
+ | `content-standards` | stable | Add `contentStandards` domain group via `defineContentStandardsPlatform` | placeholder |
19
+ | `measurement-verification` | preview | v3.1 placeholder. Baseline only. | placeholder |
13
20
 
14
- - User wants to build an agent that evaluates or approves media buys
15
- - User mentions governance, brand safety, spending authority, property lists, or content standards
16
- - User references `check_governance`, `sync_plans`, `create_property_list`, or `calibrate_content`
21
+ The multi-tenant adapter is the canonical fork target it implements `campaignGovernance` (sync_plans, check_governance, report_plan_outcome, get_plan_audit_logs), `propertyLists` (CRUD + `validate_property_delivery`), and `brandRights` against a per-tenant in-memory store with full tenant isolation via `createTenantStore`.
17
22
 
18
- **Not this skill:**
19
-
20
- - Selling ad inventory → `skills/build-seller-agent/`
21
- - Serving audience segments → `skills/build-signals-agent/`
22
- - Managing brand identity and licensing → `skills/build-brand-rights-agent/`
23
-
24
- ## Specialisms This Skill Covers
25
-
26
- Your compliance obligations come from the specialisms you claim in `get_adcp_capabilities`. Each maps to a storyboard at `compliance/cache/latest/specialisms/<id>/`:
27
-
28
- | Specialism | Status | Delta from baseline | See |
29
- | ----------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
30
- | `governance-spend-authority` | stable | `check_governance` evaluates `binding` against Plan's `budget.total`, `human_review_required`, and `custom_policies`; return `approved`, `conditions`, or `denied` | [§ governance-spend-authority](#specialism-governance-spend-authority) |
31
- | `governance-delivery-monitor` | stable | `check_governance` with `phase: 'delivery'` + `delivery_metrics`; compute drift vs Plan's `budget.reallocation_threshold`; return `BUDGET_DRIFT_EXCEEDED` findings | [§ governance-delivery-monitor](#specialism-governance-delivery-monitor) |
32
- | `property-lists` | stable | Tool family `property_list` — implement CRUD plus `validate_property_delivery` with full `violations[]` | [§ property-lists](#specialism-property-lists) |
33
- | `collection-lists` | stable | Tool family `collection_list` — program-level brand safety (shows, series, podcasts) identified by platform-independent IDs: IMDb, Gracenote, EIDR. Mirrors property-lists CRUD plus collection resolution. | [§ collection-lists](#specialism-collection-lists) |
34
- | `content-standards` | stable | `policies[]` is an array of `{ policy_id, enforcement, policy, policy_categories?, channels? }`; `validate_content_delivery` uses `records[].artifact` (not `creative_id`); re-read policies per call for `standards_version_change` | [§ content-standards](#specialism-content-standards) |
35
- | `measurement-verification` | preview | v3.1 placeholder (empty `phases`). Pass universal + governance baseline only. Advertise `measurement_verification` capability for discoverability. | Baseline only |
36
-
37
- **Not in this skill:** `audience-sync` lives under `protocol: media-buy`. Build it in `skills/build-seller-agent/` instead — it uses `sync_audiences` (overloaded for discovery, add, and delete) and `list_accounts` under the `accounts` / `eventTracking` domain groups.
38
-
39
- Specialism ID (kebab-case) = storyboard directory. Storyboard `id:` (snake_case, e.g. `campaign_governance_conditions`) is the category name — multiple specialisms can reference the same storyboard category.
40
-
41
- ## Protocol-Wide Requirements
42
-
43
- Every production governance agent — regardless of specialism — must wire these. Full treatment in `skills/build-seller-agent/SKILL.md` §Protocol-Wide Requirements and §Composing OAuth, signing, and idempotency; minimum-viable pointers:
44
-
45
- - **`idempotency_key`** on every mutating request (`sync_plans`, `create_property_list`/`update_property_list`/`delete_property_list`, `create_collection_list`/`update_collection_list`/`delete_collection_list`, `create_content_standards`/`update_content_standards`, `calibrate_content`). Pass `createIdempotencyStore` to `createAdcpServerFromPlatform(platform, { idempotency })`.
46
- - **Authentication** via `serve({ authenticate: verifyApiKey(...)/verifyBearer(...) })` from `@adcp/sdk/server`. Unauthenticated agents fail the universal `security_baseline` storyboard.
47
- - **Signature-header transparency**: don't reject requests that carry `Signature-Input`/`Signature` headers even if you don't claim `signed-requests`.
48
- - **Resolve-then-authorize** on id lookups (`get_property_list`, `get_content_standards`, `get_collection_list`): return byte-equivalent errors whether the id is cross-tenant or nonexistent — always `REFERENCE_NOT_FOUND`, never `PERMISSION_DENIED`. `adcp fuzz` runs a paired-probe invariant that enforces this; stand up two test tenants and pass `--auth-token` + `--auth-token-cross-tenant` for full coverage. See `skills/build-seller-agent/SKILL.md` §Resolve-then-authorize for the full rules.
49
- - **`comply_test_controller`** — required to pass the `governance_spend_authority` and `property_lists` storyboards. Each seeds fixtures via `comply_test_controller.seed_plan` / `seed_property_list` before running the business-logic phases. Register via `createComplyController({ seed: { plan, property_list, collection_list, content_standards } })` and call `controller.register(server)` — same pattern as seller. Full treatment in `skills/build-seller-agent/SKILL.md` §Compliance Testing. Without it, all business-logic steps skip with `missing_test_controller` and the track vacuously "passes" (no tests run, vacuous green detected by the grader as fail).
50
-
51
- ## Before Writing Code
52
-
53
- ### 1. Which Governance Domains?
54
-
55
- - **Campaign governance** — evaluates media buys against spending authority. Returns approved, denied, or approved with conditions.
56
- - **Property governance** — maintains inclusion/exclusion lists of publisher properties for brand safety.
57
- - **Content standards** — defines creative compliance rules and validates delivery against them.
58
-
59
- Most governance agents start with campaign governance. Add property and content standards as needed.
60
-
61
- ### 2. Decision Logic
62
-
63
- For campaign governance, how should the agent decide?
64
-
65
- - **Budget threshold** — deny buys over a per-transaction limit
66
- - **Policy conditions** — approve with conditions (e.g., "weekly reporting required for CTV")
67
- - **Channel restrictions** — deny certain channels or require review
68
- - **Delivery monitoring** — re-evaluate when spend drifts past threshold
69
-
70
- ### 3. Property List Types
71
-
72
- - **Inclusion lists** — only serve ads on these properties
73
- - **Exclusion lists** — never serve ads on these properties
74
- - **GARM category filters** — exclude by IAB/GARM category
75
-
76
- ## Tools and Required Response Shapes
77
-
78
- > **Before writing any handler's return statement, fetch [`docs/llms.txt`](../../docs/llms.txt) and grep for `#### \`<tool_name>\``(e.g.`#### \`check_governance\``) to read the exact required + optional field list.** The schema-derived contract lives there; this skill covers patterns, gotchas, and domain-specific examples. Strict response validation is on by default in dev — it will tell you the exact field path if you drift, so write the obvious thing and trust the contract.
79
- >
80
- > **Cross-cutting pitfalls matrix runs keep catching:**
81
- >
82
- > - **Declare `capabilities.specialisms: ['governance-spend-authority', 'property-lists'] as const` on the `DecisioningPlatform` you pass to `createAdcpServerFromPlatform`.** Value is `string[]` of enum ids (not `[{id, version}]`). Agents that don't declare their specialism fail the grader with "No applicable tracks found" even if every tool works — tracks are gated on the specialism claim.
83
- > - Every mutating-tool response (`create_property_list`, `create_collection_list`, `create_content_standards`, etc.) has `additionalProperties: false` — don't add extra fields. Return exactly what the schema declares.
84
-
85
- ### Campaign Governance
86
-
87
- **`get_adcp_capabilities`** — register first, empty `{}` schema
88
-
89
- ```
90
- capabilitiesResponse({
91
- adcp: { major_versions: [3] },
92
- supported_protocols: ['governance'],
93
- })
94
- ```
95
-
96
- **`sync_plans`** — `SyncPlansRequestSchema.shape`
97
-
98
- Register governance plans. Each plan in the response needs `plan_id`, `status`, and `version`.
99
-
100
- ```
101
- taskToolResponse({
102
- plans: [{
103
- plan_id: string, // required — echo from request
104
- status: 'active', // required — 'active' | 'paused'
105
- version: 1, // required — integer version number
106
- }],
107
- })
108
- ```
109
-
110
- **`check_governance`** — `CheckGovernanceRequestSchema.shape`
111
-
112
- Evaluate a media buy against the registered plan. The request carries a `binding` (what is being evaluated) and a `phase`:
113
-
114
- ```
115
- // Request shape:
116
- {
117
- plan_id: string, // required — registered via sync_plans
118
- phase?: 'create' | 'delivery', // optional — authoritative when present
119
- binding: { // what to evaluate (create-phase)
120
- type: 'media_buy',
121
- media_buy_id?: string, // on delivery phase, the already-created buy
122
- account: { brand: {...}, operator: string },
123
- total_budget: { amount: number, currency: string },
124
- packages: [{ product_id, pricing_option_id, budget }],
125
- },
126
- delivery_metrics?: { // on delivery-phase checks — NOT delivery_evidence
127
- reporting_period: { start: string, end: string },
128
- spend: number,
129
- cumulative_spend: number,
130
- channel_distribution: { [channel: string]: number }, // percent by channel
131
- pacing: 'ahead' | 'on_pace' | 'behind',
132
- },
133
- governance_context?: string, // prior check's context, for re-evaluation
134
- }
135
- ```
136
-
137
- `phase` is an optional top-level field (`'create' | 'delivery'`). When present, it is authoritative — use it to route. When absent, the presence of `delivery_metrics` is the corroborating signal. The storyboard sends both for delivery-phase checks.
138
-
139
- The Plan object (stored via `sync_plans`) drives decisions. Expected shape:
140
-
141
- ```
142
- {
143
- plan_id: string,
144
- brand: { domain: string },
145
- objectives: string,
146
- budget: {
147
- total: number,
148
- currency: string,
149
- // Exactly one of the next two is required:
150
- reallocation_threshold?: number, // absolute currency amount the orchestrator can reallocate without human escalation
151
- reallocation_unlimited?: boolean, // set true for full autonomy up to total (prefer this over threshold == total)
152
- },
153
- flight: { start: string, end: string },
154
- countries: string[],
155
- human_review_required?: boolean, // GDPR Art 22 / EU AI Act Annex III — when true, every action on this plan needs human review regardless of budget. Set automatically by the agent if any resolved policy has requires_human_review: true.
156
- custom_policies: [ // array of structured policy objects — NOT bare strings
157
- {
158
- policy_id: string,
159
- enforcement: 'must' | 'should',
160
- policy: string, // prose description of the rule
161
- },
162
- ],
163
- }
164
- ```
165
-
166
- Authority is split into two independent concerns:
167
-
168
- - **`budget.reallocation_threshold` / `reallocation_unlimited`** — budget autonomy. Dollar-denominated cap on how much the orchestrator can shift around without asking.
169
- - **`human_review_required`** — decisions affecting data subjects (targeting, creative, delivery). Fires regardless of budget. Driven by regulation, not finance.
170
-
171
- Both can be true simultaneously on the same plan.
172
-
173
- The response needs `check_id`, `status`, `plan_id`, and `explanation`.
174
-
175
- ```
176
- // Approved:
177
- taskToolResponse({
178
- check_id: string, // required — unique check identifier
179
- status: 'approved', // required — enum: 'approved' | 'denied' | 'conditions'
180
- plan_id: string, // required — echo from request
181
- explanation: string, // required — human-readable explanation
182
- governance_context: string, // pass to create_media_buy
183
- })
184
-
185
- // Approved with conditions — status is literally 'conditions' (not 'approved' plus a conditions array):
186
- taskToolResponse({
187
- check_id: string,
188
- status: 'conditions',
189
- plan_id: string,
190
- explanation: 'Approved with conditions',
191
- conditions: [{ // array of binding conditions
192
- field: string, // required — what the condition applies to
193
- reason: string, // required — why the condition exists
194
- required_value: string, // optional — specific value required
195
- }],
196
- governance_context: string,
197
- })
198
-
199
- // Denied — also the way human review is signalled (no separate 'escalate' status):
200
- taskToolResponse({
201
- check_id: string,
202
- status: 'denied',
203
- plan_id: string,
204
- explanation: 'Exceeds spending authority',
205
- findings: [{ // array of policy findings
206
- category_id: string, // required — policy category ID
207
- severity: 'info' | 'warning' | 'critical', // required — human-review signal uses 'critical'
208
- explanation: string, // required — human-readable
209
- }],
210
- })
211
- ```
212
-
213
- **`get_plan_audit_logs`** — `GetPlanAuditLogsRequestSchema.shape`
214
-
215
- ```
216
- taskToolResponse({
217
- plan_id: string,
218
- logs: [{
219
- timestamp: string, // ISO timestamp
220
- action: string,
221
- actor: string,
222
- }],
223
- })
224
- ```
225
-
226
- ### Property Governance
227
-
228
- **`create_property_list`** — `CreatePropertyListRequestSchema.shape`
229
-
230
- Response must include `list` object and `auth_token`.
231
-
232
- ```
233
- taskToolResponse({
234
- list: {
235
- list_id: string, // required
236
- name: string, // required — echo from request
237
- description: string,
238
- property_count: 0,
239
- },
240
- auth_token: string, // required — token for subsequent operations
241
- })
242
- ```
243
-
244
- **`get_property_list`** — `GetPropertyListRequestSchema.shape`
245
-
246
- ```
247
- taskToolResponse({
248
- list: {
249
- list_id: string,
250
- name: string,
251
- },
252
- })
253
- ```
254
-
255
- **`update_property_list`** — `UpdatePropertyListRequestSchema.shape`
256
-
257
- ```
258
- taskToolResponse({
259
- list: {
260
- list_id: string,
261
- name: string,
262
- },
263
- })
264
- ```
23
+ ### What to delete if you're single-specialism
265
24
 
266
- **`list_property_lists`**`ListPropertyListsRequestSchema.shape`
25
+ **Forking the multi-tenant adapter for a single specialism? Delete these blocks first** leaning on stable symbol names rather than line numbers (the adapter evolves; greppable identifiers don't):
267
26
 
268
- ```
269
- taskToolResponse({
270
- lists: [{
271
- list_id: string,
272
- name: string,
273
- }],
274
- })
275
- ```
27
+ A single-specialism `governance-spend-authority` adopter (an in-house policy engine, IAS, DoubleVerify) deletes:
276
28
 
277
- **`delete_property_list`** `DeletePropertyListRequestSchema.shape`
29
+ - The `brandRights = defineBrandRightsPlatform({ ... })` block (the entire brand-rights surface)
30
+ - The `propertyLists = definePropertyListsPlatform({ ... })` block if you don't claim `property-lists`
31
+ - The `private async enforceGovernance(...)` helper and the `interface GovernanceBinding` — these belong to `brandRights` cross-specialism dispatch, not to standalone governance
32
+ - Per-tenant `brands` / `rights` Maps on `TenantState` (no brand-rights catalog to seed)
278
33
 
279
- ```
280
- taskToolResponse({
281
- deleted: true, // required — boolean
282
- list_id: string, // required — echo from request
283
- })
284
- ```
34
+ A single-specialism `property-lists` adopter mirrors this: keep the `propertyLists` block; delete `campaignGovernance`, `brandRights`, `enforceGovernance`, the brand/rights Maps, and the `governanceBindings` map.
285
35
 
286
- **`validate_property_delivery`**no generated schema, use `{}` for input
36
+ **Keep**: the `accounts` / `createTenantStore` block (translates to single-tenant by passing one tenant entry needed for tenant isolation), `agentRegistry`, the specialism block(s) you claim, `getTenant(ctx)` resolution. **Don't keep `enforceGovernance` if you also delete `brandRights`** — the helper has no caller and wires a non-existent governance binding.
287
37
 
288
- The storyboard's enforcement phase asserts per-record `violations` with list reference and severity. A minimal `{property, compliant}` response will pass schema but fail the behavioral checks.
38
+ For `content-standards` and `collection-lists`, no worked fork target ships yet wire `defineContentStandardsPlatform` / `defineCollectionListsPlatform` from `@adcp/sdk/server` against the multi-tenant scaffolding.
289
39
 
290
- ```
291
- // Request:
292
- {
293
- list_id: string,
294
- records: [{
295
- record_id: string,
296
- property: { type: 'domain' | 'bundle_id' | ..., value: string },
297
- impressions: number,
298
- }],
299
- }
300
-
301
- // Response:
302
- taskToolResponse({
303
- compliant: true, // required — overall compliance
304
- list_id: string, // echo from request
305
- results: [{
306
- record_id: string, // echo
307
- property: { type, value }, // echo
308
- impressions: number,
309
- compliant: boolean,
310
- violations: [{ // empty when compliant
311
- list_id: string,
312
- list_type: 'inclusion' | 'exclusion',
313
- severity: 'critical',
314
- explanation: string, // e.g. "Property {value} is not on inclusion list {name}"
315
- }],
316
- }],
317
- violations: [], // flattened — all violations across results
318
- })
319
- ```
40
+ For exact response shapes, error codes, and optional fields, `docs/llms.txt` is the canonical reference.
320
41
 
321
- ### Content Standards
42
+ ## When to use this skill
322
43
 
323
- **`list_content_standards`** `ListContentStandardsRequestSchema.shape`
44
+ - User wants to enforce campaign governance, property lists, collection lists, or content standards
45
+ - User describes themselves as a brand-safety vendor (IAS, DoubleVerify), policy engine (OPA/Cerbos), or compliance platform
46
+ - User mentions `check_governance`, `validate_property_delivery`, `validate_content_delivery`
324
47
 
325
- ```
326
- taskToolResponse({
327
- standards: [{
328
- standards_id: string,
329
- name: string,
330
- }],
331
- })
332
- ```
333
-
334
- **`create_content_standards`** — `CreateContentStandardsRequestSchema.shape`
335
-
336
- ```
337
- taskToolResponse({
338
- standards_id: string, // required — generated ID
339
- })
340
- ```
341
-
342
- **`get_content_standards`** — `GetContentStandardsRequestSchema.shape`
343
-
344
- `policies` is an array of structured rules. Each entry has a `policy_id`, enforcement level (`must` or `should`), a prose `policy` description, optional `policy_categories`, and optional `channels` scope. The prose lives **inside each entry**, not at the container level.
345
-
346
- ```
347
- taskToolResponse({
348
- standards_id: string,
349
- name: string,
350
- policies: [
351
- {
352
- policy_id: 'no_violent_imagery',
353
- policy_categories: ['brand_safety'],
354
- enforcement: 'must',
355
- policy: 'No violent or controversial imagery',
356
- },
357
- {
358
- policy_id: 'min_display_dpi',
359
- policy_categories: ['imagery_quality'],
360
- enforcement: 'should',
361
- channels: ['display'],
362
- policy: 'Minimum 72 DPI for display assets',
363
- },
364
- ],
365
- scope: { languages_any: ['en'], description: 'Acme Outdoor creative standards' },
366
- })
367
- ```
368
-
369
- On `create_content_standards` / `update_content_standards`, the buyer sends the same `policies[]` array. Store it indexed by `standards_id` and re-read on every `calibrate_content` / `validate_content_delivery` call — the `standards_version_change` storyboard phase re-issues policies and expects the next calibration to reflect the update (a memoized calibration will fail that phase).
370
-
371
- **`update_content_standards`** — `UpdateContentStandardsRequestSchema.shape`
372
-
373
- ```
374
- taskToolResponse({
375
- success: true,
376
- standards_id: string,
377
- })
378
- ```
379
-
380
- **`calibrate_content`** — `CalibrateContentRequestSchema.shape`
381
-
382
- Verdict mapping: any `enforcement: 'must'` violation → `'fail'`. Only `'should'` violations → `'review'`. No violations → `'pass'`. The `standards_version_change` phase depends on this — after policies update, the same artifact must flip verdicts.
383
-
384
- ```
385
- taskToolResponse({
386
- verdict: 'pass' | 'fail' | 'review',
387
- confidence: 0.95,
388
- explanation: string,
389
- features: [],
390
- })
391
- ```
392
-
393
- **`validate_content_delivery`** — `ValidateContentDeliveryRequestSchema.shape`
394
-
395
- The request uses `records[].artifact`, not `creative_id`. Each record scopes a served impression with `property_rid`, `artifact_id`, and `assets`. Response returns per-record compliance plus a `summary`.
396
-
397
- ```
398
- // Request:
399
- {
400
- standards_id: string,
401
- records: [{
402
- record_id: string,
403
- property_rid: string,
404
- artifact: {
405
- artifact_id: string,
406
- property_rid: string,
407
- description?: string, // optional prose describing the ad — used by calibration matchers
408
- assets: [{ // ARRAY of assets — not an object
409
- type: 'image' | 'video' | 'html' | 'text',
410
- url: string,
411
- width?: number,
412
- height?: number,
413
- duration_ms?: number,
414
- }],
415
- },
416
- impressions: number,
417
- }],
418
- }
419
-
420
- // Response:
421
- taskToolResponse({
422
- summary: {
423
- compliant: true,
424
- total_impressions: number,
425
- non_compliant_impressions: 0,
426
- },
427
- results: [{
428
- record_id: string, // echo from request
429
- artifact: {
430
- artifact_id: string,
431
- property_rid: string,
432
- description?: string, // optional prose describing the ad — used by calibration matchers
433
- assets: [{ // ARRAY of assets — not an object
434
- type: 'image' | 'video' | 'html' | 'text',
435
- url: string,
436
- width?: number,
437
- height?: number,
438
- duration_ms?: number,
439
- }],
440
- },
441
- impressions: number,
442
- compliant: boolean,
443
- violations: [{ // empty when compliant
444
- rule: string, // e.g. "No tobacco advertising"
445
- severity: 'must' | 'should',
446
- evidence: string, // why it failed
447
- remediation: string, // how to fix
448
- }],
449
- }],
450
- })
451
- ```
452
-
453
- ### Context and Ext Passthrough
454
-
455
- The framework auto-echoes the request's `context` into every response — **do not set `context` yourself in your handler return values.** It's injected post-handler only when the field isn't already present.
456
-
457
- **Crucial:** `context` is schema-typed as an object. If your handler hand-sets a string or narrative description, validation fails with `/context: must be object` and the framework does not overwrite. Leave the field out entirely; the framework handles it.
458
-
459
- Some schemas also define an `ext` field for vendor-namespaced extensions. If your request schema includes `ext`, accept it without error. Tools with explicit `ext` support: `sync_governance`.
460
-
461
- ## SDK Quick Reference
462
-
463
- | SDK piece | Usage |
464
- | ---------------------------------------- | -------------------------------------------------------------------------- |
465
- | `createAdcpServerFromPlatform(platform, opts)` | Create server from a typed `DecisioningPlatform` — compile-time specialism enforcement, auto-generated capabilities, ctx_metadata round-trip |
466
- | `createAdcpServer(config)` *(legacy)* | v5 handler-bag entry. Mid-migration / escape-hatch only; reach via `@adcp/sdk/server/legacy/v5` |
467
- | `serve(() => createAdcpServerFromPlatform(platform, opts))` | Start HTTP server on `:3001/mcp` |
468
- | `ctx.store` | State persistence — `get/put/patch/delete/list` domain objects |
469
- | `adcpError(code, { message })` | Structured error |
470
-
471
- Handlers return raw data objects. The framework auto-wraps responses and auto-generates `get_adcp_capabilities` from registered handlers.
472
-
473
- Import: `import { createAdcpServerFromPlatform, serve, adcpError } from '@adcp/sdk/server';`
48
+ **Not this skill:**
474
49
 
475
- ## Setup
50
+ - Selling inventory while consuming governance signals → `skills/build-seller-agent/` (governance-aware seller track)
51
+ - Brand identity / rights licensing → `skills/build-brand-rights-agent/`
52
+ - Audience sync (despite the name overlap) → `skills/build-seller-agent/` (audience-sync track)
476
53
 
477
- ```bash
478
- npm init -y
479
- npm install @adcp/sdk
480
- npm install -D typescript @types/node
481
- ```
54
+ ## Cross-cutting rules
482
55
 
483
- Minimal `tsconfig.json`:
484
-
485
- ```json
486
- {
487
- "compilerOptions": {
488
- "target": "ES2022",
489
- "module": "Node16",
490
- "moduleResolution": "Node16",
491
- "strict": true,
492
- "skipLibCheck": true,
493
- "outDir": "dist"
494
- }
495
- }
496
- ```
56
+ Every governance agent hits the cross-cutting rules in [`../cross-cutting.md`](../cross-cutting.md). The high-traffic ones for governance (deep-linked to the rule):
497
57
 
498
- `skipLibCheck: true` avoids false-positive errors from transitive `.d.ts` files (e.g., `@opentelemetry/api`).
499
-
500
- ## Implementation
501
-
502
- 1. Single `.ts` file — `class MyGovernance implements DecisioningPlatform` with `campaignGovernance`, `propertyLists`, `collectionLists`, `contentStandards` typed sub-platforms
503
- 2. Do not register `get_adcp_capabilities` — the framework generates it from registered handlers
504
- 3. Return raw data objects from handlers — the framework wraps responses automatically
505
- 4. Use `ctx.store` to persist plans, property lists, and content standards
506
- 5. Set `sandbox: true` on all mock/demo responses
507
- 6. Handlers receive `(params, ctx)` — `ctx.store` for state, `ctx.account` for resolved account
508
-
509
- ```typescript
510
- import { randomUUID } from 'node:crypto';
511
- import {
512
- createAdcpServerFromPlatform,
513
- serve,
514
- createIdempotencyStore,
515
- memoryBackend,
516
- type DecisioningPlatform,
517
- type CampaignGovernancePlatform,
518
- type PropertyListsPlatform,
519
- type AccountStore,
520
- } from '@adcp/sdk/server';
521
-
522
- const idempotency = createIdempotencyStore({
523
- backend: memoryBackend(),
524
- ttlSeconds: 86400,
525
- });
526
-
527
- class MyGovernance implements DecisioningPlatform {
528
- capabilities = {
529
- specialisms: ['governance-spend-authority', 'property-lists'] as const,
530
- config: {},
531
- };
532
-
533
- accounts: AccountStore = {
534
- resolve: async ref => ({
535
- id: 'account_id' in ref ? ref.account_id : 'gov_acc_1',
536
- operator: 'me',
537
- ctx_metadata: {},
538
- }),
539
- upsert: async () => ({ ok: true, items: [] }),
540
- list: async () => ({ items: [], nextCursor: null }),
541
- };
542
-
543
- campaignGovernance: CampaignGovernancePlatform = {
544
- syncPlans: async (req, ctx) => {
545
- for (const plan of req.plans) {
546
- await ctx.store.put('plan', plan.plan_id, plan);
547
- }
548
- return {
549
- plans: req.plans.map(p => ({
550
- plan_id: p.plan_id,
551
- status: 'active' as const,
552
- version: 1,
553
- })),
554
- };
555
- },
556
- checkGovernance: async (req, ctx) => {
557
- const plan = await ctx.store.get('plan', req.plan_id);
558
- // ... decision logic ...
559
- return {
560
- check_id: `chk_${randomUUID()}`,
561
- status: 'approved' as const,
562
- plan_id: req.plan_id,
563
- explanation: 'Within spending authority',
564
- };
565
- },
566
- // ... reportPlanOutcome, getPlanAuditLogs, etc.
567
- };
568
-
569
- propertyLists: PropertyListsPlatform = {
570
- listPropertyLists: async (req, ctx) => ({ property_lists: [] }),
571
- createPropertyList: async (req, ctx) => ({ /* ... */ }),
572
- updatePropertyList: async (req, ctx) => ({ /* ... */ }),
573
- deletePropertyList: async (req, ctx) => ({ /* ... */ }),
574
- };
575
- }
576
-
577
- const platform = new MyGovernance();
578
-
579
- serve(() =>
580
- createAdcpServerFromPlatform(platform, {
581
- name: 'Governance Agent',
582
- version: '1.0.0',
583
- idempotency,
584
- })
585
- );
586
- ```
58
+ - [`idempotency_key`](../cross-cutting.md#idempotency_key-is-required-on-every-mutating-call) on `sync_plans`, `sync_governance`, `report_plan_outcome`, `create_property_list` / `update_property_list` / `delete_property_list`, `create_collection_list` / `update_collection_list` / `delete_collection_list`, `create_content_standards` / `update_content_standards` / `calibrate_content`
59
+ - [Resolve-then-authorize](../cross-cutting.md#resolve-then-authorize--uniform-errors-for-not-found--not-yours) — byte-equivalent errors on `property_list_id` / `collection_list_id` / `plan_id` cross-tenant lookups
60
+ - [Account resolution](../cross-cutting.md#account-resolution-pick-a-security-preset) — `createTenantStore` for multi-tenant policy hubs
587
61
 
588
- **Decision logic for check_governance:**
62
+ One governance-specific rule on top:
589
63
 
590
- Route decisions based on the plan state and request parameters:
64
+ ### `comply_test_controller` is required
591
65
 
592
- - Compare request budget against plan's `budget.total`; enforce reallocation autonomy using `budget.reallocation_threshold` (denominated in `budget.currency`) or `budget.reallocation_unlimited: true` — exactly one must be set
593
- - If `reallocation_threshold` is set and a reallocation exceeds it → require human review / deny
594
- - If `plan.human_review_required: true` → action must escalate regardless of `mode` (advisory/audit cannot downgrade)
595
- - Auto-flip `plan.human_review_required: true` when resolved `policy_categories` include `fair_housing | fair_lending | fair_employment | pharmaceutical_advertising`, or when `policy_ids` include `eu_ai_act_annex_iii`
596
- - If `human_review_required: true` but the brand/brand-ref has no `data_subject_contestation` contact → emit a critical finding
597
- - Require a `human_override` artifact (reason ≥20 chars, approver email) on re-sync to downgrade `human_review_required: true → false`
598
- - If policy conditions match → approve with conditions
599
- - If `phase: 'delivery'` → check delivery_metrics for drift
66
+ Both `governance_spend_authority` and `property_lists` storyboards seed fixtures via `comply_test_controller.seed_plan` / `seed_property_list` before running the business-logic phases. Register via `createComplyController({ seed: { plan, property_list, collection_list, content_standards } })` and call `controller.register(server)` — same pattern as the seller adapter wires for media-buy seeding.
600
67
 
601
- ## Idempotency
68
+ Without the test controller, every business-logic step skips with `missing_test_controller` and the track "passes" vacuously — the grader treats vacuous green as fail. Wire it on day one.
602
69
 
603
- AdCP v3 requires an `idempotency_key` on every mutating request — for governance agents that's `create_property_list` / `update_property_list` / `delete_property_list`, `create_content_standards` / `update_content_standards`, `sync_plans`, and `report_plan_outcome` (`check_governance` and the various `get_*` / `list_*` tools are read-only and exempt). Pass `createIdempotencyStore` from `@adcp/sdk/server` to `createAdcpServerFromPlatform(platform, { idempotency })` and the framework handles missing-key rejection (`INVALID_REQUEST`), JCS-canonicalized payload hashing, `IDEMPOTENCY_CONFLICT` on same-key-different-payload (no payload leaked in the error), `IDEMPOTENCY_EXPIRED` past the TTL, `replayed: true` envelope injection on cache hits, and automatic declaration of `adcp.idempotency.replay_ttl_seconds` on `get_adcp_capabilities`. Only successful responses cache — errors re-execute on retry so a failed `sync_plans` or outcome report can be retried cleanly. Scoping is per-principal via `resolveSessionKey` (or override with `resolveIdempotencyPrincipal`) — typically the operator / tenant id.
70
+ ## Specialism deltas at a glance
604
71
 
605
- ```typescript
606
- import { createIdempotencyStore, memoryBackend } from '@adcp/sdk/server';
72
+ **`governance-spend-authority`** — `check_governance` evaluates the request's `binding` against the Plan's `budget.total`, `human_review_required`, and `custom_policies`. Returns one of `approved` / `conditions` / `denied`. The Plan model is the source of truth: read `sync_plans` / `get_plan` to materialize the spending authority, then check the inbound binding against it.
607
73
 
608
- const idempotency = createIdempotencyStore({
609
- backend: memoryBackend(), // or pgBackend(pool) for production
610
- ttlSeconds: 86400, // 3600–604800 per spec; throws if out of range
611
- });
74
+ **`governance-delivery-monitor`** `check_governance` with `phase: 'delivery'` + `delivery_metrics`. Compute drift vs Plan's `budget.reallocation_threshold`; return `BUDGET_DRIFT_EXCEEDED` findings when delivery exceeds the threshold.
612
75
 
613
- const server = createAdcpServerFromPlatform(platform, {
614
- name: '...', version: '...',
615
- idempotency,
616
- // MUST never return undefined — or every mutating request rejects as
617
- // SERVICE_UNAVAILABLE. A constant works for a demo; production uses
618
- // `(ctx) => ctx.account?.id` against the typed `Account<MyMeta>`.
619
- resolveSessionKey: () => 'default-principal',
620
- });
621
- ```
76
+ **`property-lists`** tool family `property_list_*` (`create`, `read`, `update`, `delete`, `list`). `validate_property_delivery` returns full `violations[]` (publisher property not in the inclusion list, or hit the exclusion list). Property identity is `{agent_url, id}` — buyers fetch lists by reference, not by inline copy.
622
77
 
623
- ## Protecting your agent
624
-
625
- **An AdCP agent that accepts unauthenticated requests is non-compliant** (see `security_baseline` in the universal storyboard bundle). Ask the operator: "API key, OAuth, or both?" — then wire one of these into `serve()`.
626
-
627
- ```typescript
628
- import { serve } from '@adcp/sdk';
629
- import { verifyApiKey, verifyBearer, anyOf } from '@adcp/sdk/server';
630
-
631
- // API key — simplest, good for B2B integrations
632
- serve(createAgent, {
633
- authenticate: verifyApiKey({
634
- verify: async token => {
635
- const row = await db.api_keys.findUnique({ where: { token } });
636
- return row ? { principal: row.account_id } : null;
637
- },
638
- }),
639
- });
640
-
641
- // OAuth — best when buyers authenticate as themselves
642
- const AGENT_URL = 'https://my-agent.example.com/mcp';
643
- serve(createAgent, {
644
- publicUrl: AGENT_URL, // canonical RFC 8707 audience — also served as `resource` in protected-resource metadata
645
- authenticate: verifyBearer({
646
- jwksUri: 'https://auth.example.com/.well-known/jwks.json',
647
- issuer: 'https://auth.example.com',
648
- audience: AGENT_URL, // MUST equal publicUrl
649
- }),
650
- protectedResource: { authorization_servers: ['https://auth.example.com'] },
651
- });
652
-
653
- // Both
654
- serve(createAgent, {
655
- publicUrl: AGENT_URL,
656
- authenticate: anyOf(verifyApiKey({ verify: lookupKey }), verifyBearer({ jwksUri, issuer, audience: AGENT_URL })),
657
- protectedResource: { authorization_servers: [issuer] },
658
- });
659
- ```
78
+ **`collection-lists`** program-level brand safety (shows, series, podcasts) identified by platform-independent IDs: **IMDb** (movies/TV), **Gracenote** (TV/audio metadata), **EIDR** (entertainment industry standard). Mirrors property-lists CRUD plus collection resolution.
660
79
 
661
- The framework produces RFC 6750-compliant `WWW-Authenticate: Bearer` 401s on failure, and serves `/.well-known/oauth-protected-resource<mountPath>` with `publicUrl` as the `resource` field so buyers get tokens bound to the right audience. The default JWT allowlist is asymmetric-only (RS*/ES*/PS\*/EdDSA) to prevent algorithm-confusion attacks.
80
+ **`content-standards`** `policies[]` is an array of `{ policy_id, enforcement, policy, policy_categories?, channels? }`. `validate_content_delivery` uses `records[].artifact` (not `creative_id`). Re-read policies per call so `standards_version_change` events don't serve stale policy.
662
81
 
663
- ## Validate Locally
82
+ **`measurement-verification`** v3.1 placeholder (empty `phases`). Pass universal + governance baseline only. Advertise the capability for discoverability.
664
83
 
665
- **Full validation checklist:** [docs/guides/VALIDATE-YOUR-AGENT.md](../../docs/guides/VALIDATE-YOUR-AGENT.md). Governance-specific commands:
84
+ ## Validate locally
666
85
 
667
86
  ```bash
668
- # Boot
669
- npx tsx agent.ts &
670
-
671
- # Happy paths — run the storyboards matching your claimed specialisms
672
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp \
673
- --storyboards governance_spend_authority,governance_spend_authority/denied,governance_delivery_monitor \
674
- --auth $TOKEN
675
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp \
676
- --storyboards property_lists,collection_lists,content_standards \
677
- --auth $TOKEN
678
-
679
- # Cross-cutting obligations
680
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp \
681
- --storyboards security_baseline,idempotency,schema_validation,error_compliance --auth $TOKEN
682
-
683
- # Rejection-surface fuzz — includes update_property_list / update_content_standards (Tier 3)
684
- npx @adcp/sdk@latest fuzz http://localhost:3001/mcp --auto-seed --auth-token $TOKEN
685
- ```
87
+ # Run the fork-matrix gate (tsc strict)
88
+ npm run compliance:fork-matrix -- --test-name-pattern="hello-seller-adapter-multi-tenant"
686
89
 
687
- Common failure decoder:
688
-
689
- - `authority_level` field present → 3.0 GA removed it; use `human_review_required: boolean` instead
690
- - `status: 'escalated'` on `check_governance` → enum is `approved` / `denied` / `conditions`
691
- - Missing `check_id` on `check_governance` response → required; generate a unique ID per check
692
- - `finding.code` / `finding.message` → schema requires `category_id`, `severity`, `explanation`
693
-
694
- **Keep iterating until all steps pass.** Can't bind ports? `npm run compliance:skill-matrix -- --filter governance` runs an isolated end-to-end test.
695
-
696
- ## Common Mistakes
697
-
698
- | Mistake | Fix |
699
- | ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
700
- | Manually registering `get_adcp_capabilities` | Framework auto-generates it from registered handlers — do not register it yourself |
701
- | Using `server.tool()` instead of domain groups | Use `governance: { syncPlans, checkGovernance, ... }` — framework wires schemas and response builders |
702
- | Using in-memory Maps for state | Use `ctx.store.put/get/patch/delete/list` — built-in state persistence |
703
- | `check_governance` missing `check_id` | Generate a unique ID per check — required field |
704
- | `check_governance` returns `decision` not `status` | Field is `status`, not `decision`. Values: `approved`, `denied`, `conditions` |
705
- | Conditions use `description` instead of `reason` | Condition schema requires `field` and `reason`, not `condition_id` and `description` |
706
- | Findings use `code`/`message` instead of proper fields | Finding schema requires `category_id`, `severity`, `explanation` |
707
- | `sync_plans` response missing `version` | Each plan needs `version: 1` (integer) — required field |
708
- | `delete_property_list` missing `deleted: true` | Boolean `deleted` field is required in response |
709
- | `create_property_list` missing `auth_token` | `auth_token` is required — generate a token string |
710
- | Dropping `context` from responses | Echo `args.context` back unchanged in every response — buyers use it for correlation |
711
-
712
- ## Storyboards
713
-
714
- | Storyboard | Tests |
715
- | -------------------------------- | ------------------------------------------------------------------ |
716
- | `campaign_governance_conditions` | Approved with conditions flow |
717
- | `campaign_governance_delivery` | Delivery monitoring with drift re-evaluation |
718
- | `campaign_governance_denied` | Denied — buy exceeds spending authority |
719
- | `property_lists` | Property list lifecycle: create, query, update, delete, validate |
720
- | `collection_lists` | Collection list lifecycle: create, query (resolve), update, delete |
721
- | `content_standards` | Content standards lifecycle: create, calibrate, validate |
722
-
723
- ## Specialism Details
724
-
725
- ### <a name="specialism-governance-spend-authority"></a>governance-spend-authority
726
-
727
- Storyboard category: `campaign_governance_*`. The agent holds a Plan and evaluates each binding against it.
728
-
729
- Minimal decision logic:
730
-
731
- ```typescript
732
- checkGovernance: async (params, ctx) => {
733
- const plan = await ctx.store.get('plan', params.plan_id);
734
- if (!plan) return adcpError('NOT_FOUND', { message: `Plan ${params.plan_id} not found` });
735
-
736
- const budget = params.binding.total_budget.amount;
737
-
738
- // 1. Human-review gate — GDPR Art 22 / EU AI Act.
739
- // Every action on a human_review_required plan must be escalated, regardless of budget.
740
- // Signal as `denied` + a critical-severity finding.
741
- // The buyer resolves review off-protocol and re-calls check_governance with a fresh governance_context.
742
- if (plan.human_review_required) {
743
- return {
744
- check_id: `chk_${Date.now()}`,
745
- status: 'denied' as const,
746
- plan_id: params.plan_id,
747
- explanation: 'Plan requires human review before this action can proceed',
748
- findings: [{
749
- category_id: 'HUMAN_REVIEW_REQUIRED',
750
- severity: 'critical',
751
- explanation: 'plan.human_review_required is true — resolve off-protocol and retry with a fresh governance_context',
752
- }],
753
- };
754
- }
755
-
756
- // 2. Budget ceiling — cannot exceed plan.budget.total.
757
- if (budget > plan.budget.total) {
758
- return { check_id: `chk_${Date.now()}`, status: 'denied' as const, plan_id: params.plan_id,
759
- explanation: `Budget ${budget} exceeds plan ceiling ${plan.budget.total}`,
760
- findings: [{ category_id: 'BUDGET_EXCEEDED', severity: 'critical',
761
- explanation: `Over plan ceiling by ${budget - plan.budget.total}` }],
762
- };
763
- }
764
-
765
- // 3. Custom policy matching — custom_policies is an array of structured objects
766
- const conditions = [];
767
- for (const policy of plan.custom_policies ?? []) {
768
- if (policy.policy.toLowerCase().includes('ctv') && hasCtv(params.binding)) {
769
- conditions.push({ field: 'reporting.frequency', reason: policy.policy, policy_id: policy.policy_id });
770
- }
771
- }
772
-
773
- return {
774
- check_id: `chk_${Date.now()}`,
775
- status: conditions.length ? 'conditions' as const : 'approved' as const, // 3-value enum, pick one
776
- plan_id: params.plan_id,
777
- explanation: conditions.length ? 'Approved with conditions' : 'Within spending authority',
778
- conditions,
779
- governance_context: `gov_ctx_${params.plan_id}_${Date.now()}`, // opaque string — buyer echoes back to create_media_buy
780
- };
781
- },
782
- ```
783
-
784
- `governance_context` is an opaque string your agent mints and the buyer echoes back. Use it to tie a specific approval to a specific `create_media_buy` call — sign it or tag it with the plan revision if you care about tamper-resistance.
785
-
786
- ### <a name="specialism-governance-delivery-monitor"></a>governance-delivery-monitor
787
-
788
- Storyboard: `governance_delivery_monitor`. Same `check_governance` tool, but the request carries `delivery_metrics` instead of a bare binding — that's the cue to run drift logic.
789
-
790
- ```typescript
791
- checkGovernance: async (params, ctx) => {
792
- if (params.phase === 'delivery' || params.delivery_metrics) {
793
- const plan = await ctx.store.get('plan', params.plan_id);
794
- const reallocationThreshold = plan.budget.reallocation_threshold; // absolute $, e.g. 8000
795
-
796
- // Check total-spend drift against the reallocation threshold
797
- const cumulative = params.delivery_metrics.cumulative_spend;
798
- const overage = cumulative - plan.budget.total;
799
- const exceeded = Math.abs(overage) > reallocationThreshold;
800
-
801
- // Also flag pacing mismatches that imply channel reallocation
802
- const driftedChannels = Object.entries(params.delivery_metrics.channel_distribution ?? {})
803
- .filter(([channel, percent]) => {
804
- const planAllocation = plan.channel_allocations?.[channel];
805
- return planAllocation != null && Math.abs(percent - planAllocation) > 10; // 10pp threshold
806
- });
807
-
808
- if (!exceeded && driftedChannels.length === 0) {
809
- return { check_id: `chk_${Date.now()}`, status: 'approved' as const, plan_id: params.plan_id,
810
- explanation: 'Delivery within reallocation threshold',
811
- governance_context: params.governance_context ?? `gov_ctx_${params.plan_id}_delivery_approved` };
812
- }
813
-
814
- return {
815
- check_id: `chk_${Date.now()}`,
816
- status: 'conditions' as const, // approved-with-reallocation — use the 'conditions' status, not 'approved'
817
- plan_id: params.plan_id,
818
- explanation: `Drift exceeded threshold: ${overage > 0 ? 'overage' : 'underage'} of ${Math.abs(overage)}`,
819
- conditions: driftedChannels.map(([channel, percent]) => ({
820
- field: `channel_distribution.${channel}`,
821
- reason: `Rebalance away from ${channel} — currently ${percent}%, plan targets ${plan.channel_allocations?.[channel] ?? 'unspecified'}%`,
822
- })),
823
- findings: [{ category_id: 'BUDGET_DRIFT_EXCEEDED', severity: 'warning',
824
- explanation: `Cumulative spend ${cumulative} outside reallocation threshold ±${reallocationThreshold}` }],
825
- };
826
- }
827
- // ... create-phase logic above
828
- },
829
-
830
- // Policy matching in create-phase checks — custom_policies is an array of objects, not strings:
831
- for (const policy of plan.custom_policies ?? []) {
832
- if (policy.policy.toLowerCase().includes('ctv') && hasCtv(params.binding)) {
833
- conditions.push({ field: 'reporting.frequency', reason: policy.policy });
834
- }
835
- }
836
- ```
837
-
838
- The `findings[].category_id` / `severity: 'info' | 'warning' | 'critical'` enum is the schema-canonical shape per [adcontextprotocol/adcp#2286](https://github.com/adcontextprotocol/adcp/issues/2286). Storyboard validations today only check `field_present: findings`, so either spelling passes — but use the schema shape.
839
-
840
- ### <a name="specialism-property-lists"></a>property-lists
841
-
842
- Storyboard: `property_lists`. Specialism and tool family share the same name. Your agent owns both inclusion and exclusion list semantics — track `list_type` on the stored list. Wrap identifiers with `selection_type: 'identifiers'`:
843
-
844
- ```typescript
845
- createPropertyList: async (params, ctx) => {
846
- const list_id = `plist_${Date.now()}`;
847
- const stored = {
848
- list_id,
849
- name: params.name,
850
- description: params.description,
851
- list_type: 'inclusion' as const, // caller-modeled — infer from context or add as ext
852
- base_properties: params.base_properties ?? [], // each entry: { selection_type: 'identifiers', identifiers: [{ type, value }] }
853
- property_count: countIdentifiers(params.base_properties),
854
- status: 'active' as const,
855
- };
856
- await ctx.store.put('property_list', list_id, stored);
857
- return {
858
- list: summarize(stored),
859
- auth_token: `tok_${list_id}`,
860
- };
861
- },
862
-
863
- // Shape of a base_properties entry (matches the storyboard sample):
864
- type BaseProperty = {
865
- selection_type: 'identifiers';
866
- identifiers: Array<{
867
- type: 'domain' | 'bundle_id' | 'app_store_url' | 'podcast_rss_feed' | 'property_rid';
868
- value: string;
869
- }>;
870
- };
871
- ```
872
-
873
- **`list_property_lists` / `list_collection_lists`** — destructure `ctx.store.list`. It returns `{ items, nextCursor? }`, never a bare array. Calling `.map` / `.filter` on the raw result throws `TypeError` and the dispatcher wraps it as `SERVICE_UNAVAILABLE`. Use the typed response helper so you can't accidentally ship a bare `[...]` at the top level (the storyboard runner flags that as shape drift):
874
-
875
- ```typescript
876
- import { listPropertyListsResponse } from '@adcp/sdk/server';
877
-
878
- listPropertyLists: async (params, ctx) => {
879
- const { items } = await ctx.store.list('property_list');
880
- return listPropertyListsResponse({
881
- lists: items.map(list => ({ list_id: list.list_id, name: list.name })),
882
- });
883
- },
884
- ```
885
-
886
- The same pattern applies to `list_collection_lists` (use `listCollectionListsResponse`) and `list_content_standards` (use `listContentStandardsResponse`). Both wrap the same `lists` / `standards` shape and guard against the bare-array drift at compile time.
887
-
888
- `validate_property_delivery` returns `violations[]` with `list_id`, `list_type`, `severity: 'critical'`, and an explanation per non-compliant record — see the response shape in the tool section above.
889
-
890
- The three mutating tools (`create_property_list`, `update_property_list`, `delete_property_list`) require `idempotency_key` per AdCP 3.0 GA — cache the response and return the same object on replay.
891
-
892
- ### <a name="specialism-collection-lists"></a>collection-lists
893
-
894
- Storyboard: `collection_lists`. Where `property-lists` curate surfaces (domains, app bundle IDs), `collection-lists` curate **content programs** (shows, series, podcasts, series arcs) identified by platform-independent IDs: IMDb (`tt0944947`), Gracenote, EIDR. Program-level brand safety — "keep my ads out of all episodes of [show]" cuts across every surface that carries that show.
895
-
896
- **Request shape** — `base_collections[]` wraps identifiers with a `selection_type`, and `filters` is an object (not an array):
897
-
898
- ```typescript
899
- createCollectionList: async (params, ctx) => {
900
- const list_id = `clist_${Date.now()}`;
901
- const stored = {
902
- list_id,
903
- name: params.name,
904
- description: params.description,
905
- base_collections: params.base_collections ?? [], // see shape below
906
- filters: params.filters ?? {}, // object — e.g. { kinds: ['series'] }
907
- collection_count: resolveCollectionCount(params.base_collections, params.filters),
908
- status: 'active' as const,
909
- };
910
- await ctx.store.put('collection_list', list_id, stored);
911
- return { list: summarize(stored), auth_token: `tok_${list_id}` };
912
- },
913
-
914
- // Shape of a base_collections entry:
915
- type BaseCollection = {
916
- selection_type: 'distribution_ids';
917
- identifiers: Array<{
918
- type: 'imdb_id' | 'gracenote_id' | 'eidr';
919
- value: string; // e.g. "tt9999901"
920
- }>;
921
- };
922
-
923
- // Shape of filters:
924
- type Filters = {
925
- kinds?: ('series' | 'movie' | 'podcast' | 'episode')[];
926
- // other filter families added in 3.1
927
- };
928
- ```
90
+ # Run your forked agent against the matching storyboard
91
+ adcp storyboard run http://127.0.0.1:3003/mcp governance_spend_authority \
92
+ --bearer "$ADCP_AUTH_TOKEN" --include-bundles --json
929
93
 
930
- **`get_collection_list`** with `resolve: true` returns the concrete `collections[]` (not `resolved_programs`) — the resolved list of program IDs after filters are applied. Sellers cache this at bid time.
931
-
932
- ```typescript
933
- {
934
- list: {
935
- list_id: string,
936
- name: string,
937
- collection_count: number,
938
- collections: Array<{ type, value }>, // resolved programs
939
- cache_valid_until: string, // ISO timestamp — sellers respect this TTL
940
- },
941
- }
94
+ # Property-lists track
95
+ adcp storyboard run http://127.0.0.1:3003/mcp property_lists \
96
+ --bearer "$ADCP_AUTH_TOKEN" --include-bundles --json
942
97
  ```
943
98
 
944
- No `validate_collection_delivery` tool exists yet (preview in 3.1). Delivery enforcement is a receiving-seller concern; the governance agent's job ends at publishing the resolved list with a `cache_valid_until`.
945
-
946
- ### <a name="specialism-content-standards"></a>content-standards
99
+ The fork-matrix gate is the three-gate contract from [`docs/guides/EXAMPLE-TEST-CONTRACT.md`](../../docs/guides/EXAMPLE-TEST-CONTRACT.md). The multi-tenant adapter currently runs the strict-tsc gate only (no governance / brand-rights mock-server today); storyboard-grader gates land alongside the next mock-server family.
947
100
 
948
- Storyboard: `content_standards`. Two load-bearing protocol shapes the baseline above does not cover:
101
+ For deeper validation: [`docs/guides/VALIDATE-YOUR-AGENT.md`](../../docs/guides/VALIDATE-YOUR-AGENT.md).
949
102
 
950
- 1. **`policies` is an array of structured entries**, not a prose string. Each entry carries its own `enforcement` level — don't parse severity from inline `(must)` / `(should)` markers; read it off the `enforcement` field:
103
+ ## Common shape gotchas
951
104
 
952
- ```typescript
953
- type Policy = {
954
- policy_id: string;
955
- enforcement: 'must' | 'should';
956
- policy: string; // prose description of the rule
957
- policy_categories?: string[]; // e.g. ['brand_safety', 'imagery_quality']
958
- channels?: string[]; // e.g. ['display'] — scoped enforcement
959
- };
960
-
961
- function applies(p: Policy, artifact: { channel: string }): boolean {
962
- return !p.channels || p.channels.includes(artifact.channel);
963
- }
964
- ```
965
-
966
- 2. **`validate_content_delivery` uses `records[].artifact`**, not `results[].creative_id`. See the tool section above for the full shape.
967
-
968
- **Re-read policies per call.** The `standards_version_change` phase issues an update, then re-calibrates the same artifact and expects the new verdict. A memoized calibrator that caches by artifact_id will fail that phase. Always fetch the latest policies from `ctx.store.get('content_standards', standards_id)` inside `calibrate_content` / `validate_content_delivery`.
969
-
970
- `calibrate_content` should return per-rule results, not just a top-level verdict:
971
-
972
- ```typescript
973
- calibrateContent: async (params, ctx) => ({
974
- verdict: 'fail' as const,
975
- confidence: 0.95,
976
- explanation: 'Content violates tobacco-free rule',
977
- rules: [
978
- { rule: 'No tobacco advertising', severity: 'must', passed: false,
979
- evidence: 'Detected cigarette imagery in primary asset',
980
- remediation: 'Remove cigarette imagery or select a compliant creative' },
981
- { rule: 'Weekly pacing reports required for CTV', severity: 'should', passed: true,
982
- evidence: 'Agent has reporting_capabilities frequencies: ["weekly"]', remediation: null },
983
- ],
984
- features: [],
985
- }),
986
- ```
105
+ `policies[]` is `{ policy_id, enforcement, policy, ... }` — a wrapped policy, not a bare string. `validate_content_delivery` keys on `records[].artifact`, not `creative_id`. Property identity is `{agent_url, id}` (a `PropertyId`), not a bare string. `check_governance` response uses `decision: 'approved' | 'conditions' | 'denied'` — not boolean. See [`../SHAPE-GOTCHAS.md`](../SHAPE-GOTCHAS.md).
987
106
 
988
- ## Reference
107
+ ## Migration notes
989
108
 
990
- - `storyboards/campaign_governance_conditions.yaml` conditional approval flow
991
- - `storyboards/campaign_governance_denied.yaml` — denial flow
992
- - `storyboards/property_lists.yaml` — property list lifecycle
993
- - `storyboards/collection_lists.yaml` — collection list lifecycle
994
- - `storyboards/content_standards.yaml` — content standards lifecycle
995
- - `docs/guides/BUILD-AN-AGENT.md` — SDK patterns
996
- - `docs/TYPE-SUMMARY.md` — curated type signatures
997
- - `docs/llms.txt` — full protocol reference
109
+ - 6.6 → 6.7: [`docs/migration-6.6-to-6.7.md`](../../docs/migration-6.6-to-6.7.md). Note: `inventory-lists` was renamed to `property-lists` in AdCP 3.0 GA (5.x → 5.2 migration).
110
+ - 4.x → 5.x: [`docs/migration-4.x-to-5.x.md`](../../docs/migration-4.x-to-5.x.md)