@adcp/sdk 6.9.0 → 6.11.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.
- package/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts +17 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
- package/dist/lib/server/decisioning/async-outcome.js +23 -18
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
- package/dist/lib/server/decisioning/context.d.ts +8 -2
- package/dist/lib/server/decisioning/context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/test-controller.d.ts +2 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +6 -11
- package/dist/lib/server/test-controller.js.map +1 -1
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/comply-controller.d.ts +2 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js.map +1 -1
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
id: media_buy_seller/delivery_reporting
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller returns valid delivery reporting"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that get_media_buy_delivery returns schema-compliant delivery data after simulated delivery via the test controller."
|
|
6
|
+
track: reporting
|
|
7
|
+
required_tools:
|
|
8
|
+
- get_products
|
|
9
|
+
- create_media_buy
|
|
10
|
+
- get_media_buy_delivery
|
|
11
|
+
- comply_test_controller
|
|
12
|
+
|
|
13
|
+
narrative: |
|
|
14
|
+
Delivery reporting is how buyers know if their campaign is working. The seller must
|
|
15
|
+
return schema-compliant delivery data from get_media_buy_delivery with per-package
|
|
16
|
+
metrics (impressions, spend, pacing).
|
|
17
|
+
|
|
18
|
+
This scenario creates a media buy, injects delivery data via the test controller's
|
|
19
|
+
simulate_delivery scenario, then calls get_media_buy_delivery and validates the
|
|
20
|
+
response against the schema. Without this test, sellers can return arbitrary formats
|
|
21
|
+
and still pass certification.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: media_buy_seller
|
|
25
|
+
capabilities:
|
|
26
|
+
- sells_media
|
|
27
|
+
examples:
|
|
28
|
+
- "Any media buy seller"
|
|
29
|
+
|
|
30
|
+
caller:
|
|
31
|
+
role: buyer_agent
|
|
32
|
+
example: "Pinnacle Agency (buyer)"
|
|
33
|
+
|
|
34
|
+
prerequisites:
|
|
35
|
+
description: |
|
|
36
|
+
The seller must implement comply_test_controller with the simulate_delivery
|
|
37
|
+
scenario. This allows the test harness to inject delivery metrics into a
|
|
38
|
+
media buy so get_media_buy_delivery has data to return.
|
|
39
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
+
controller_seeding: true
|
|
41
|
+
|
|
42
|
+
fixtures:
|
|
43
|
+
products:
|
|
44
|
+
- product_id: "outdoor_display_q2"
|
|
45
|
+
delivery_type: "guaranteed"
|
|
46
|
+
channels: ["display"]
|
|
47
|
+
format_ids:
|
|
48
|
+
- id: "display_300x250"
|
|
49
|
+
- product_id: "outdoor_video_q2"
|
|
50
|
+
delivery_type: "guaranteed"
|
|
51
|
+
channels: ["video"]
|
|
52
|
+
format_ids:
|
|
53
|
+
- id: "video_15s"
|
|
54
|
+
pricing_options:
|
|
55
|
+
- product_id: "outdoor_display_q2"
|
|
56
|
+
pricing_option_id: "cpm_standard"
|
|
57
|
+
pricing_model: "cpm"
|
|
58
|
+
currency: "USD"
|
|
59
|
+
fixed_price: 8.0
|
|
60
|
+
- product_id: "outdoor_video_q2"
|
|
61
|
+
pricing_option_id: "cpm_standard"
|
|
62
|
+
pricing_model: "cpm"
|
|
63
|
+
currency: "USD"
|
|
64
|
+
fixed_price: 12.0
|
|
65
|
+
|
|
66
|
+
phases:
|
|
67
|
+
- id: setup
|
|
68
|
+
title: "Create a media buy for delivery testing"
|
|
69
|
+
steps:
|
|
70
|
+
- id: sync_accounts
|
|
71
|
+
title: "Establish account"
|
|
72
|
+
task: sync_accounts
|
|
73
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
74
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
75
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
76
|
+
stateful: true
|
|
77
|
+
expected: |
|
|
78
|
+
Return the account with account_id and status active.
|
|
79
|
+
sample_request:
|
|
80
|
+
accounts:
|
|
81
|
+
- brand:
|
|
82
|
+
domain: "acmeoutdoor.example"
|
|
83
|
+
operator: "pinnacle-agency.example"
|
|
84
|
+
billing: "operator"
|
|
85
|
+
payment_terms: "net_30"
|
|
86
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_sync_accounts"
|
|
87
|
+
validations:
|
|
88
|
+
- check: response_schema
|
|
89
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
90
|
+
- check: field_present
|
|
91
|
+
path: "accounts[0].account_id"
|
|
92
|
+
description: "Account has a platform-assigned ID"
|
|
93
|
+
|
|
94
|
+
- id: get_products_brief
|
|
95
|
+
title: "Discover products"
|
|
96
|
+
task: get_products
|
|
97
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
98
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
99
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
100
|
+
comply_scenario: full_sales_flow
|
|
101
|
+
stateful: false
|
|
102
|
+
expected: |
|
|
103
|
+
Return products matching the brief.
|
|
104
|
+
sample_request:
|
|
105
|
+
buying_mode: "brief"
|
|
106
|
+
brief: "Display and video inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
|
|
107
|
+
account:
|
|
108
|
+
brand:
|
|
109
|
+
domain: "acmeoutdoor.example"
|
|
110
|
+
operator: "pinnacle-agency.example"
|
|
111
|
+
validations:
|
|
112
|
+
- check: response_schema
|
|
113
|
+
description: "Response matches get-products-response.json schema"
|
|
114
|
+
- check: field_present
|
|
115
|
+
path: "products"
|
|
116
|
+
description: "Response contains products"
|
|
117
|
+
|
|
118
|
+
- id: create_media_buy
|
|
119
|
+
title: "Create media buy"
|
|
120
|
+
task: create_media_buy
|
|
121
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
122
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
123
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
124
|
+
comply_scenario: create_media_buy
|
|
125
|
+
stateful: true
|
|
126
|
+
expected: |
|
|
127
|
+
Create the media buy. We need a media_buy_id to simulate delivery against.
|
|
128
|
+
sample_request:
|
|
129
|
+
brand:
|
|
130
|
+
domain: "acmeoutdoor.example"
|
|
131
|
+
account:
|
|
132
|
+
brand:
|
|
133
|
+
domain: "acmeoutdoor.example"
|
|
134
|
+
operator: "pinnacle-agency.example"
|
|
135
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
136
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
137
|
+
packages:
|
|
138
|
+
- product_id: "outdoor_display_q2"
|
|
139
|
+
budget: 15000
|
|
140
|
+
pricing_option_id: "cpm_standard"
|
|
141
|
+
- product_id: "outdoor_video_q2"
|
|
142
|
+
budget: 10000
|
|
143
|
+
pricing_option_id: "cpm_standard"
|
|
144
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_create_media_buy"
|
|
145
|
+
validations:
|
|
146
|
+
- check: response_schema
|
|
147
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
148
|
+
|
|
149
|
+
- id: simulate_and_verify
|
|
150
|
+
title: "Simulate delivery and validate reporting"
|
|
151
|
+
narrative: |
|
|
152
|
+
Inject delivery metrics via the test controller, then call get_media_buy_delivery
|
|
153
|
+
and validate the response format. This is the core test — does the seller return
|
|
154
|
+
schema-compliant delivery data with per-package metrics?
|
|
155
|
+
|
|
156
|
+
steps:
|
|
157
|
+
- id: simulate_delivery
|
|
158
|
+
title: "Inject simulated delivery metrics"
|
|
159
|
+
task: comply_test_controller
|
|
160
|
+
requires_tool: comply_test_controller
|
|
161
|
+
stateful: true
|
|
162
|
+
expected: |
|
|
163
|
+
The test controller acknowledges the simulated delivery data.
|
|
164
|
+
sample_request:
|
|
165
|
+
scenario: "simulate_delivery"
|
|
166
|
+
params:
|
|
167
|
+
media_buy_id: "$context.media_buy_id"
|
|
168
|
+
impressions: 5000
|
|
169
|
+
clicks: 150
|
|
170
|
+
reported_spend:
|
|
171
|
+
amount: 250.00
|
|
172
|
+
currency: "USD"
|
|
173
|
+
validations:
|
|
174
|
+
- check: field_value
|
|
175
|
+
path: "success"
|
|
176
|
+
allowed_values: [true]
|
|
177
|
+
description: "Delivery simulation succeeds"
|
|
178
|
+
|
|
179
|
+
- id: get_delivery
|
|
180
|
+
title: "Get delivery report and validate schema"
|
|
181
|
+
task: get_media_buy_delivery
|
|
182
|
+
schema_ref: "media-buy/get-media-buy-delivery-request.json"
|
|
183
|
+
response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
|
|
184
|
+
doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
|
|
185
|
+
comply_scenario: reporting_flow
|
|
186
|
+
stateful: true
|
|
187
|
+
expected: |
|
|
188
|
+
Return delivery metrics reflecting the simulated data:
|
|
189
|
+
- media_buy_deliveries array with at least one entry
|
|
190
|
+
- Per-package breakdown with impressions, spend
|
|
191
|
+
- Response matches the get-media-buy-delivery-response.json schema
|
|
192
|
+
sample_request:
|
|
193
|
+
account:
|
|
194
|
+
brand:
|
|
195
|
+
domain: "acmeoutdoor.example"
|
|
196
|
+
operator: "pinnacle-agency.example"
|
|
197
|
+
media_buy_ids:
|
|
198
|
+
- "$context.media_buy_id"
|
|
199
|
+
include_package_daily_breakdown: true
|
|
200
|
+
validations:
|
|
201
|
+
- check: response_schema
|
|
202
|
+
description: "Response matches get-media-buy-delivery-response.json schema"
|
|
203
|
+
- check: field_present
|
|
204
|
+
path: "media_buy_deliveries"
|
|
205
|
+
description: "Response contains delivery data"
|
package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
id: media_buy_seller/governance_approved
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller creates buy when governance approves"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that the seller creates a media buy when governance approves the transaction."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
This is a multi-agent test. The test harness sets up a permissive governance plan on
|
|
14
|
+
a governance agent with a $100K budget, then registers that agent with the seller.
|
|
15
|
+
The buyer creates a $25K buy which falls within limits.
|
|
16
|
+
|
|
17
|
+
When the seller calls check_governance during create_media_buy, the governance agent
|
|
18
|
+
approves. The seller must confirm the buy normally.
|
|
19
|
+
|
|
20
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
21
|
+
Override with --governance-agent-url to use a custom governance agent.
|
|
22
|
+
|
|
23
|
+
agent:
|
|
24
|
+
interaction_model: media_buy_seller
|
|
25
|
+
capabilities:
|
|
26
|
+
- sells_media
|
|
27
|
+
- governance_aware
|
|
28
|
+
examples:
|
|
29
|
+
- "Any media buy seller with governance support"
|
|
30
|
+
|
|
31
|
+
caller:
|
|
32
|
+
role: buyer_agent
|
|
33
|
+
example: "Pinnacle Agency (buyer)"
|
|
34
|
+
|
|
35
|
+
prerequisites:
|
|
36
|
+
description: |
|
|
37
|
+
A governance agent that supports sync_plans and check_governance.
|
|
38
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
39
|
+
controller_seeding: true
|
|
40
|
+
|
|
41
|
+
fixtures:
|
|
42
|
+
products:
|
|
43
|
+
- product_id: "outdoor_display_q2"
|
|
44
|
+
delivery_type: "guaranteed"
|
|
45
|
+
channels: ["display"]
|
|
46
|
+
format_ids:
|
|
47
|
+
- id: "display_300x250"
|
|
48
|
+
- product_id: "outdoor_video_q2"
|
|
49
|
+
delivery_type: "guaranteed"
|
|
50
|
+
channels: ["video"]
|
|
51
|
+
format_ids:
|
|
52
|
+
- id: "video_15s"
|
|
53
|
+
pricing_options:
|
|
54
|
+
- product_id: "outdoor_display_q2"
|
|
55
|
+
pricing_option_id: "cpm_standard"
|
|
56
|
+
pricing_model: "cpm"
|
|
57
|
+
currency: "USD"
|
|
58
|
+
fixed_price: 8.0
|
|
59
|
+
- product_id: "outdoor_video_q2"
|
|
60
|
+
pricing_option_id: "cpm_standard"
|
|
61
|
+
pricing_model: "cpm"
|
|
62
|
+
currency: "USD"
|
|
63
|
+
fixed_price: 12.0
|
|
64
|
+
|
|
65
|
+
phases:
|
|
66
|
+
- id: governance_plan_setup
|
|
67
|
+
title: "Set up permissive governance plan"
|
|
68
|
+
narrative: |
|
|
69
|
+
Create a governance plan on the governance agent with a high budget ($100K).
|
|
70
|
+
The subsequent $25K buy will fall within these limits and should be approved.
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- id: sync_plans
|
|
74
|
+
title: "Create permissive governance plan"
|
|
75
|
+
task: sync_plans
|
|
76
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
77
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
78
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
79
|
+
stateful: true
|
|
80
|
+
expected: |
|
|
81
|
+
The governance agent acknowledges the plan with a plan_id.
|
|
82
|
+
sample_request:
|
|
83
|
+
idempotency_key: "comply-gov-approved-sync-plans-v1"
|
|
84
|
+
plans:
|
|
85
|
+
- plan_id: "comply-gov-approved-plan"
|
|
86
|
+
brand:
|
|
87
|
+
domain: "acmeoutdoor.example"
|
|
88
|
+
objectives: "Q2 outdoor lifestyle campaign — display and video"
|
|
89
|
+
budget:
|
|
90
|
+
total: 100000
|
|
91
|
+
currency: "USD"
|
|
92
|
+
reallocation_threshold: 100000
|
|
93
|
+
flight:
|
|
94
|
+
start: "2026-04-01T00:00:00Z"
|
|
95
|
+
end: "2026-06-30T23:59:59Z"
|
|
96
|
+
countries: ["US", "CA"]
|
|
97
|
+
validations:
|
|
98
|
+
- check: response_schema
|
|
99
|
+
description: "Response matches sync-plans-response.json schema"
|
|
100
|
+
|
|
101
|
+
- id: seller_setup
|
|
102
|
+
title: "Account and governance registration on seller"
|
|
103
|
+
steps:
|
|
104
|
+
- id: sync_accounts
|
|
105
|
+
title: "Establish account with seller"
|
|
106
|
+
task: sync_accounts
|
|
107
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
108
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
109
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
110
|
+
stateful: true
|
|
111
|
+
expected: |
|
|
112
|
+
Return the account with account_id and status active.
|
|
113
|
+
sample_request:
|
|
114
|
+
accounts:
|
|
115
|
+
- brand:
|
|
116
|
+
domain: "acmeoutdoor.example"
|
|
117
|
+
operator: "pinnacle-agency.example"
|
|
118
|
+
billing: "operator"
|
|
119
|
+
payment_terms: "net_30"
|
|
120
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_seller_setup_sync_accounts"
|
|
121
|
+
validations:
|
|
122
|
+
- check: response_schema
|
|
123
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
124
|
+
- check: field_present
|
|
125
|
+
path: "accounts[0].account_id"
|
|
126
|
+
description: "Account has a platform-assigned ID"
|
|
127
|
+
|
|
128
|
+
- id: sync_governance
|
|
129
|
+
title: "Register governance agent with seller"
|
|
130
|
+
task: sync_governance
|
|
131
|
+
schema_ref: "account/sync-governance-request.json"
|
|
132
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
133
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
134
|
+
stateful: true
|
|
135
|
+
expected: |
|
|
136
|
+
Acknowledge the governance agent registration.
|
|
137
|
+
sample_request:
|
|
138
|
+
accounts:
|
|
139
|
+
- account:
|
|
140
|
+
brand:
|
|
141
|
+
domain: "acmeoutdoor.example"
|
|
142
|
+
operator: "pinnacle-agency.example"
|
|
143
|
+
governance_agents:
|
|
144
|
+
- url: "$context.governance_agent_url"
|
|
145
|
+
authentication:
|
|
146
|
+
schemes: ["Bearer"]
|
|
147
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
148
|
+
categories: ["budget_authority", "brand_policy"]
|
|
149
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_seller_setup_sync_governance"
|
|
150
|
+
validations:
|
|
151
|
+
- check: response_schema
|
|
152
|
+
description: "Response matches sync-governance-response.json schema"
|
|
153
|
+
|
|
154
|
+
- id: buy_approved
|
|
155
|
+
title: "Create buy within governance limits"
|
|
156
|
+
steps:
|
|
157
|
+
- id: get_products_brief
|
|
158
|
+
title: "Discover products"
|
|
159
|
+
task: get_products
|
|
160
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
161
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
162
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
163
|
+
comply_scenario: full_sales_flow
|
|
164
|
+
stateful: false
|
|
165
|
+
expected: |
|
|
166
|
+
Return products matching the brief.
|
|
167
|
+
sample_request:
|
|
168
|
+
buying_mode: "brief"
|
|
169
|
+
brief: "Display and video inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
|
|
170
|
+
account:
|
|
171
|
+
brand:
|
|
172
|
+
domain: "acmeoutdoor.example"
|
|
173
|
+
operator: "pinnacle-agency.example"
|
|
174
|
+
validations:
|
|
175
|
+
- check: response_schema
|
|
176
|
+
description: "Response matches get-products-response.json schema"
|
|
177
|
+
- check: field_present
|
|
178
|
+
path: "products"
|
|
179
|
+
description: "Response contains products"
|
|
180
|
+
|
|
181
|
+
- id: create_media_buy
|
|
182
|
+
title: "Create buy (governance approves)"
|
|
183
|
+
task: create_media_buy
|
|
184
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
185
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
186
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
187
|
+
comply_scenario: create_media_buy
|
|
188
|
+
stateful: true
|
|
189
|
+
expected: |
|
|
190
|
+
The buy succeeds — governance approved because the $25K buy is within
|
|
191
|
+
the plan's $100K budget.
|
|
192
|
+
sample_request:
|
|
193
|
+
brand:
|
|
194
|
+
domain: "acmeoutdoor.example"
|
|
195
|
+
account:
|
|
196
|
+
brand:
|
|
197
|
+
domain: "acmeoutdoor.example"
|
|
198
|
+
operator: "pinnacle-agency.example"
|
|
199
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
200
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
201
|
+
packages:
|
|
202
|
+
- product_id: "outdoor_display_q2"
|
|
203
|
+
budget: 15000
|
|
204
|
+
pricing_option_id: "cpm_standard"
|
|
205
|
+
- product_id: "outdoor_video_q2"
|
|
206
|
+
budget: 10000
|
|
207
|
+
pricing_option_id: "cpm_standard"
|
|
208
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_buy_approved_create_media_buy"
|
|
209
|
+
validations:
|
|
210
|
+
- check: response_schema
|
|
211
|
+
description: "Response matches create-media-buy-response.json schema"
|
package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
id: media_buy_seller/governance_conditions
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller attaches conditions when governance approves with conditions"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that the seller attaches governance conditions to the buy when governance approves with conditions."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
This is a multi-agent test. The test harness sets up a governance plan on a governance
|
|
14
|
+
agent with custom policies that trigger conditions (e.g., "CTV buys require weekly
|
|
15
|
+
delivery reporting"). The buyer creates a CTV buy within budget but matching a policy.
|
|
16
|
+
|
|
17
|
+
When the seller calls check_governance, the governance agent approves with conditions.
|
|
18
|
+
The seller must create the buy and include the governance conditions and context token
|
|
19
|
+
in its response.
|
|
20
|
+
|
|
21
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
22
|
+
Override with --governance-agent-url to use a custom governance agent.
|
|
23
|
+
|
|
24
|
+
agent:
|
|
25
|
+
interaction_model: media_buy_seller
|
|
26
|
+
capabilities:
|
|
27
|
+
- sells_media
|
|
28
|
+
- governance_aware
|
|
29
|
+
examples:
|
|
30
|
+
- "Any media buy seller with governance support"
|
|
31
|
+
|
|
32
|
+
caller:
|
|
33
|
+
role: buyer_agent
|
|
34
|
+
example: "Pinnacle Agency (buyer)"
|
|
35
|
+
|
|
36
|
+
prerequisites:
|
|
37
|
+
description: |
|
|
38
|
+
A governance agent that supports sync_plans and check_governance.
|
|
39
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
+
|
|
41
|
+
phases:
|
|
42
|
+
- id: governance_plan_setup
|
|
43
|
+
title: "Set up conditional governance plan"
|
|
44
|
+
narrative: |
|
|
45
|
+
Create a governance plan on the governance agent with custom policies that
|
|
46
|
+
trigger conditions. The plan has sufficient budget but policies that require
|
|
47
|
+
conditions on CTV buys.
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- id: sync_plans
|
|
51
|
+
title: "Create conditional governance plan"
|
|
52
|
+
task: sync_plans
|
|
53
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
54
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
55
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
56
|
+
stateful: true
|
|
57
|
+
expected: |
|
|
58
|
+
The governance agent acknowledges the plan with a plan_id.
|
|
59
|
+
sample_request:
|
|
60
|
+
idempotency_key: "comply-gov-conditions-sync-plans-v1"
|
|
61
|
+
plans:
|
|
62
|
+
- plan_id: "comply-gov-conditions-plan"
|
|
63
|
+
brand:
|
|
64
|
+
domain: "acmeoutdoor.example"
|
|
65
|
+
objectives: "Q2 CTV campaign with reporting requirements"
|
|
66
|
+
budget:
|
|
67
|
+
total: 100000
|
|
68
|
+
currency: "USD"
|
|
69
|
+
reallocation_threshold: 100000
|
|
70
|
+
flight:
|
|
71
|
+
start: "2026-04-01T00:00:00Z"
|
|
72
|
+
end: "2026-06-30T23:59:59Z"
|
|
73
|
+
countries: ["US", "CA"]
|
|
74
|
+
custom_policies:
|
|
75
|
+
- policy_id: "ctv_weekly_reporting"
|
|
76
|
+
enforcement: "must"
|
|
77
|
+
policy: "CTV buys require weekly delivery reporting."
|
|
78
|
+
- policy_id: "ugc_brand_safety"
|
|
79
|
+
enforcement: "must"
|
|
80
|
+
policy: "UGC placements require brand safety review before activation."
|
|
81
|
+
validations:
|
|
82
|
+
- check: response_schema
|
|
83
|
+
description: "Response matches sync-plans-response.json schema"
|
|
84
|
+
|
|
85
|
+
- id: seller_setup
|
|
86
|
+
title: "Account and governance registration on seller"
|
|
87
|
+
steps:
|
|
88
|
+
- id: sync_accounts
|
|
89
|
+
title: "Establish account with seller"
|
|
90
|
+
task: sync_accounts
|
|
91
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
92
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
93
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
94
|
+
stateful: true
|
|
95
|
+
expected: |
|
|
96
|
+
Return the account with account_id and status active.
|
|
97
|
+
sample_request:
|
|
98
|
+
accounts:
|
|
99
|
+
- brand:
|
|
100
|
+
domain: "acmeoutdoor.example"
|
|
101
|
+
operator: "pinnacle-agency.example"
|
|
102
|
+
billing: "operator"
|
|
103
|
+
payment_terms: "net_30"
|
|
104
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_accounts"
|
|
105
|
+
validations:
|
|
106
|
+
- check: response_schema
|
|
107
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
108
|
+
- check: field_present
|
|
109
|
+
path: "accounts[0].account_id"
|
|
110
|
+
description: "Account has a platform-assigned ID"
|
|
111
|
+
|
|
112
|
+
- id: sync_governance
|
|
113
|
+
title: "Register governance agent with seller"
|
|
114
|
+
task: sync_governance
|
|
115
|
+
schema_ref: "account/sync-governance-request.json"
|
|
116
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
117
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
118
|
+
stateful: true
|
|
119
|
+
expected: |
|
|
120
|
+
Acknowledge the governance agent registration.
|
|
121
|
+
sample_request:
|
|
122
|
+
accounts:
|
|
123
|
+
- account:
|
|
124
|
+
brand:
|
|
125
|
+
domain: "acmeoutdoor.example"
|
|
126
|
+
operator: "pinnacle-agency.example"
|
|
127
|
+
governance_agents:
|
|
128
|
+
- url: "$context.governance_agent_url"
|
|
129
|
+
authentication:
|
|
130
|
+
schemes: ["Bearer"]
|
|
131
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
132
|
+
categories: ["budget_authority", "brand_policy"]
|
|
133
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_governance"
|
|
134
|
+
validations:
|
|
135
|
+
- check: response_schema
|
|
136
|
+
description: "Response matches sync-governance-response.json schema"
|
|
137
|
+
|
|
138
|
+
- id: buy_with_conditions
|
|
139
|
+
title: "Create CTV buy triggering governance conditions"
|
|
140
|
+
steps:
|
|
141
|
+
- id: get_products_brief
|
|
142
|
+
title: "Discover CTV products"
|
|
143
|
+
task: get_products
|
|
144
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
145
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
146
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
147
|
+
comply_scenario: full_sales_flow
|
|
148
|
+
stateful: false
|
|
149
|
+
expected: |
|
|
150
|
+
Return CTV/video products matching the brief.
|
|
151
|
+
sample_request:
|
|
152
|
+
buying_mode: "brief"
|
|
153
|
+
brief: "CTV and connected TV inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
|
|
154
|
+
account:
|
|
155
|
+
brand:
|
|
156
|
+
domain: "acmeoutdoor.example"
|
|
157
|
+
operator: "pinnacle-agency.example"
|
|
158
|
+
validations:
|
|
159
|
+
- check: response_schema
|
|
160
|
+
description: "Response matches get-products-response.json schema"
|
|
161
|
+
- check: field_present
|
|
162
|
+
path: "products"
|
|
163
|
+
description: "Response contains products"
|
|
164
|
+
|
|
165
|
+
- id: create_media_buy_conditions
|
|
166
|
+
title: "Create CTV buy (governance approves with conditions)"
|
|
167
|
+
task: create_media_buy
|
|
168
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
169
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
170
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
171
|
+
comply_scenario: create_media_buy
|
|
172
|
+
stateful: true
|
|
173
|
+
expected: |
|
|
174
|
+
The buy succeeds with governance conditions attached:
|
|
175
|
+
- media_buy_id: present
|
|
176
|
+
- status: active or pending_creatives
|
|
177
|
+
- governance_context: token from the governance agent
|
|
178
|
+
- conditions visible to the buyer
|
|
179
|
+
sample_request:
|
|
180
|
+
brand:
|
|
181
|
+
domain: "acmeoutdoor.example"
|
|
182
|
+
account:
|
|
183
|
+
brand:
|
|
184
|
+
domain: "acmeoutdoor.example"
|
|
185
|
+
operator: "pinnacle-agency.example"
|
|
186
|
+
sandbox: true
|
|
187
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
188
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
189
|
+
packages:
|
|
190
|
+
- product_id: "outdoor_ctv_q2"
|
|
191
|
+
budget: 25000
|
|
192
|
+
pricing_option_id: "cpm_standard"
|
|
193
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_buy_with_conditions_create_media_buy_conditions"
|
|
194
|
+
validations:
|
|
195
|
+
- check: response_schema
|
|
196
|
+
description: "Response matches create-media-buy-response.json schema"
|