@adcp/sdk 7.10.2 → 7.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compliance/cache/3.1.0-rc.2/domains/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/domains/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/domains/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/domains/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/index.json +356 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/index.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/distributed_brand_resolution.yaml +415 -0
- package/compliance/cache/3.1.0-rc.2/protocols/brand/scenarios/single_side_trust_extension.yaml +454 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/index.yaml +339 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/billing_out_of_band.yaml +153 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/canonical_supported_formats.yaml +212 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +389 -0
- package/compliance/cache/3.1.0-rc.2/protocols/creative/scenarios/native_in_feed.yaml +543 -0
- package/compliance/cache/3.1.0-rc.2/protocols/governance/index.yaml +682 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/index.yaml +789 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/audience_buy_flow.yaml +380 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/available_actions.yaml +565 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/billing_finality_delivery.yaml +354 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/canonical_formats.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/clicks_buy_flow.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +344 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/create_media_buy_async.yaml +234 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +419 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/creative_reception.yaml +247 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/delivery_reporting.yaml +357 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment.yaml +633 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +800 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/event_dedup_flow.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +309 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_approved.yaml +214 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_conditions.yaml +199 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/governance_denied_recovery.yaml +252 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/invalid_transitions.yaml +289 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_no_match.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/inventory_list_targeting.yaml +276 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_accountability.yaml +244 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +203 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +113 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +292 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +500 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow.yaml +428 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +470 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/product_signal_targeting.yaml +373 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize.yaml +399 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +264 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +257 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_audit_observation.yaml +333 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_enforcement.yaml +517 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/reach_buy_flow.yaml +823 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +360 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +293 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +576 -0
- package/compliance/cache/3.1.0-rc.2/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.1.0-rc.2/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.1.0-rc.2/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/audience-sync/index.yaml +313 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/brand-rights/scenarios/governance_denied.yaml +226 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-ad-server/index.yaml +409 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/generative-seller.yaml +807 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-generative/index.yaml +758 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/creative-template/index.yaml +510 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/index.yaml +143 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-broadcast-tv/index.yaml +738 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-catalog-driven/index.yaml +840 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-guaranteed/index.yaml +601 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-non-guaranteed/index.yaml +546 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-proposal-mode/index.yaml +586 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sales-social/index.yaml +919 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/index.yaml +424 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-marketplace/scenarios/governance_denied.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/signal-owned/index.yaml +317 -0
- package/compliance/cache/3.1.0-rc.2/specialisms/sponsored-intelligence/index.yaml +59 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor-live.yaml +78 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/acme-outdoor.yaml +223 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/billing-gate-runner.yaml +115 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/distributed-brand-runner.yaml +281 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/parallel-dispatch-runner.yaml +196 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/rate-limit-trip-runner.yaml +172 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/single-side-trust-runner.yaml +294 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/substitution-observer-runner.yaml +688 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/README.md +220 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.1.0-rc.2/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.1.0-rc.2/universal/billing-gate-dispatch.yaml +450 -0
- package/compliance/cache/3.1.0-rc.2/universal/canonical-format-validate-input.yaml +640 -0
- package/compliance/cache/3.1.0-rc.2/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.1.0-rc.2/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.1.0-rc.2/universal/comply-controller-mode-gate.yaml +141 -0
- package/compliance/cache/3.1.0-rc.2/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.1.0-rc.2/universal/deterministic-testing.yaml +1430 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance-signals.yaml +377 -0
- package/compliance/cache/3.1.0-rc.2/universal/error-compliance.yaml +528 -0
- package/compliance/cache/3.1.0-rc.2/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.1.0-rc.2/universal/get-signals-pagination-integrity.yaml +210 -0
- package/compliance/cache/3.1.0-rc.2/universal/idempotency.yaml +861 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-event-scope.yaml +119 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-lifecycle.yaml +337 -0
- package/compliance/cache/3.1.0-rc.2/universal/notification-config-rejections.yaml +107 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-creative-formats.yaml +265 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity-list-accounts.yaml +245 -0
- package/compliance/cache/3.1.0-rc.2/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.1.0-rc.2/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.1.0-rc.2/universal/read-tool-idempotency.yaml +405 -0
- package/compliance/cache/3.1.0-rc.2/universal/runner-output-contract.yaml +1285 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation-signals.yaml +181 -0
- package/compliance/cache/3.1.0-rc.2/universal/schema-validation.yaml +548 -0
- package/compliance/cache/3.1.0-rc.2/universal/security.yaml +539 -0
- package/compliance/cache/3.1.0-rc.2/universal/signed-requests.yaml +217 -0
- package/compliance/cache/3.1.0-rc.2/universal/stale-response-advisory.yaml +295 -0
- package/compliance/cache/3.1.0-rc.2/universal/storyboard-schema.yaml +2194 -0
- package/compliance/cache/3.1.0-rc.2/universal/v3-envelope-integrity.yaml +117 -0
- package/compliance/cache/3.1.0-rc.2/universal/version-negotiation.yaml +130 -0
- package/compliance/cache/3.1.0-rc.2/universal/webhook-emission.yaml +411 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-bulk-webhooks.yaml +82 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-product-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-products.yaml +151 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signal-webhooks.yaml +83 -0
- package/compliance/cache/3.1.0-rc.2/universal/wholesale-feed-signals.yaml +149 -0
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +9 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +30 -1
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +84 -21
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/testing/storyboard/types.d.ts +21 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/types.js.map +1 -1
- package/dist/lib/testing/types.d.ts +9 -0
- package/dist/lib/testing/types.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +6707 -12040
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +1 -1
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/utils/signal-id-builders.d.ts +19 -0
- package/dist/lib/utils/signal-id-builders.d.ts.map +1 -1
- package/dist/lib/utils/signal-id-builders.js +30 -0
- package/dist/lib/utils/signal-id-builders.js.map +1 -1
- package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
- package/dist/lib/utils/tool-request-schemas.js +3 -0
- package/dist/lib/utils/tool-request-schemas.js.map +1 -1
- package/dist/lib/v2/projection/constants.d.ts +28 -0
- package/dist/lib/v2/projection/constants.d.ts.map +1 -0
- package/dist/lib/v2/projection/constants.js +31 -0
- package/dist/lib/v2/projection/constants.js.map +1 -0
- package/dist/lib/v2/projection/registry.d.ts.map +1 -1
- package/dist/lib/v2/projection/registry.js +9 -4
- package/dist/lib/v2/projection/registry.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
- package/skills/SHAPE-GOTCHAS.md +5 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
id: governance_aware_seller/governance_multi_agent_rejected
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller rejects sync_governance with more than one governance agent"
|
|
4
|
+
category: governance_aware_seller
|
|
5
|
+
summary: "Verifies that any seller required to implement sync_governance rejects a request carrying more than one governance_agents entry, enforcing the maxItems: 1 constraint."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
PR #3015 constrained governance_agents to maxItems: 1 — one governance agent
|
|
12
|
+
per account, mirroring the singular governance_context on the protocol envelope.
|
|
13
|
+
The sync_governance task doc states that sellers MUST reject registrations
|
|
14
|
+
carrying more than one agent entry and surface a clear error pointing at the
|
|
15
|
+
one-agent-per-account invariant.
|
|
16
|
+
|
|
17
|
+
A seller that silently accepts a two-agent payload (persisting only the first
|
|
18
|
+
entry, or all entries) passes every happy-path governance scenario without ever
|
|
19
|
+
enforcing this constraint. This scenario closes that gap: it submits a
|
|
20
|
+
sync_governance request with two governance_agents entries and expects the seller
|
|
21
|
+
to respond with INVALID_REQUEST.
|
|
22
|
+
|
|
23
|
+
No governance agent is needed — only the seller's request-schema validation is
|
|
24
|
+
under test. The test is intentionally narrow: account setup followed by a
|
|
25
|
+
single schema-violating sync_governance call.
|
|
26
|
+
|
|
27
|
+
agent:
|
|
28
|
+
interaction_model: media_buy_seller
|
|
29
|
+
capabilities:
|
|
30
|
+
- sells_media
|
|
31
|
+
examples:
|
|
32
|
+
- "Any media buy seller that validates sync_governance request schema"
|
|
33
|
+
|
|
34
|
+
caller:
|
|
35
|
+
role: buyer_agent
|
|
36
|
+
example: "Pinnacle Agency (buyer)"
|
|
37
|
+
|
|
38
|
+
prerequisites:
|
|
39
|
+
description: |
|
|
40
|
+
A seller that supports sync_governance and validates the governance_agents
|
|
41
|
+
maxItems: 1 constraint on receipt. The scenario does not require a live
|
|
42
|
+
governance agent — only the seller is under test.
|
|
43
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
44
|
+
|
|
45
|
+
phases:
|
|
46
|
+
- id: account_setup
|
|
47
|
+
title: "Establish account with seller"
|
|
48
|
+
steps:
|
|
49
|
+
- id: sync_accounts
|
|
50
|
+
title: "Create account"
|
|
51
|
+
task: sync_accounts
|
|
52
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
53
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
54
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
55
|
+
stateful: true
|
|
56
|
+
expected: |
|
|
57
|
+
Seller returns the account with account_id and status active.
|
|
58
|
+
sample_request:
|
|
59
|
+
accounts:
|
|
60
|
+
- brand:
|
|
61
|
+
domain: "acmeoutdoor.example"
|
|
62
|
+
operator: "pinnacle-agency.example"
|
|
63
|
+
billing: "operator"
|
|
64
|
+
payment_terms: "net_30"
|
|
65
|
+
idempotency_key: "$generate:uuid_v4#governance_aware_seller_multi_agent_rejected_account_setup_sync_accounts"
|
|
66
|
+
validations:
|
|
67
|
+
- check: response_schema
|
|
68
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
69
|
+
- check: field_present
|
|
70
|
+
path: "accounts[0].account_id"
|
|
71
|
+
description: "Account has a platform-assigned ID"
|
|
72
|
+
|
|
73
|
+
- id: multi_agent_rejected
|
|
74
|
+
title: "sync_governance with two agents — rejected"
|
|
75
|
+
steps:
|
|
76
|
+
- id: sync_governance_two_agents
|
|
77
|
+
title: "Submit two governance_agents entries (violates maxItems: 1)"
|
|
78
|
+
task: sync_governance
|
|
79
|
+
schema_ref: "account/sync-governance-request.json"
|
|
80
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
81
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
82
|
+
expect_error: true
|
|
83
|
+
negative_path: schema_invalid
|
|
84
|
+
stateful: true
|
|
85
|
+
expected: |
|
|
86
|
+
Seller rejects the request because governance_agents contains two entries,
|
|
87
|
+
violating the maxItems: 1 constraint. Returns INVALID_REQUEST with a
|
|
88
|
+
message indicating the one-agent-per-account invariant was violated.
|
|
89
|
+
sample_request:
|
|
90
|
+
accounts:
|
|
91
|
+
- account:
|
|
92
|
+
brand:
|
|
93
|
+
domain: "acmeoutdoor.example"
|
|
94
|
+
operator: "pinnacle-agency.example"
|
|
95
|
+
governance_agents:
|
|
96
|
+
- url: "https://governance.pinnacle-agency.example"
|
|
97
|
+
authentication:
|
|
98
|
+
schemes: ["Bearer"]
|
|
99
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
100
|
+
- url: "https://secondary-governance.pinnacle-agency.example"
|
|
101
|
+
authentication:
|
|
102
|
+
schemes: ["Bearer"]
|
|
103
|
+
credentials: "gov-token-yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
|
|
104
|
+
idempotency_key: "$generate:uuid_v4#governance_aware_seller_multi_agent_rejected_sync_governance_two_agents"
|
|
105
|
+
context:
|
|
106
|
+
correlation_id: "governance_aware_seller--multi_agent_rejected--sync_governance"
|
|
107
|
+
validations:
|
|
108
|
+
- check: error_code
|
|
109
|
+
allowed_values: ["INVALID_REQUEST", "VALIDATION_ERROR"]
|
|
110
|
+
description: "Seller rejects two-agent payload at the request-shape layer — governance_agents maxItems: 1 violated. Returns a top-level error envelope (errors[]) rather than per-account failure status; schema-shape violations are not per-account business failures. INVALID_REQUEST or VALIDATION_ERROR are both compliant."
|
|
111
|
+
- check: field_present
|
|
112
|
+
path: "context"
|
|
113
|
+
description: "Response echoes back the context object on errors"
|
|
114
|
+
- check: field_value
|
|
115
|
+
path: "context.correlation_id"
|
|
116
|
+
value: "governance_aware_seller--multi_agent_rejected--sync_governance"
|
|
117
|
+
description: "Context correlation_id echoed verbatim on error response"
|
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
id: governance_delivery_monitor
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Campaign governance — delivery monitoring with drift detection"
|
|
4
|
+
protocol: governance
|
|
5
|
+
category: governance_delivery_monitor
|
|
6
|
+
summary: "Governance agent monitors delivery, detects budget drift past thresholds, and triggers re-evaluation."
|
|
7
|
+
track: campaign_governance
|
|
8
|
+
required_tools:
|
|
9
|
+
- check_governance
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2639): mid-flight drift can return a denial
|
|
12
|
+
# re-evaluation. The assertion gates any post-denial mutation on the
|
|
13
|
+
# affected plan, catching sellers that ignore a mid-campaign denial and
|
|
14
|
+
# keep delivering / committing new spend.
|
|
15
|
+
# Cross-step assertion (adcp#2664): status.monotonic rejects media_buy
|
|
16
|
+
# status transitions observed across steps that aren't on the spec
|
|
17
|
+
# lifecycle graph — paused → active → paused is fine,
|
|
18
|
+
# active → pending_creatives fails.
|
|
19
|
+
invariants:
|
|
20
|
+
- governance.denial_blocks_mutation
|
|
21
|
+
- status.monotonic
|
|
22
|
+
|
|
23
|
+
narrative: |
|
|
24
|
+
After a media buy is confirmed with governance approval, the governance agent monitors
|
|
25
|
+
delivery. When spend drifts past a reallocation threshold — for example, one line item
|
|
26
|
+
is overspending while another is underspending — the governance agent triggers a delivery
|
|
27
|
+
phase re-evaluation.
|
|
28
|
+
|
|
29
|
+
This storyboard covers the delivery monitoring governance flow: initial approval,
|
|
30
|
+
delivery metrics showing drift, governance re-check triggered by drift, and either
|
|
31
|
+
re-approval with adjusted conditions or a pause recommendation.
|
|
32
|
+
|
|
33
|
+
agent:
|
|
34
|
+
interaction_model: media_buy_seller
|
|
35
|
+
capabilities:
|
|
36
|
+
- sells_media
|
|
37
|
+
- governance_aware
|
|
38
|
+
examples:
|
|
39
|
+
- "Publisher platform with governance and delivery reporting"
|
|
40
|
+
- "Retail media network with pacing data"
|
|
41
|
+
|
|
42
|
+
caller:
|
|
43
|
+
role: buyer_agent
|
|
44
|
+
example: "Pinnacle Agency (buyer)"
|
|
45
|
+
|
|
46
|
+
prerequisites:
|
|
47
|
+
description: |
|
|
48
|
+
The caller needs a brand identity, operator credentials, a governance agent URL,
|
|
49
|
+
and an active media buy with delivery data. The governance plan defines a
|
|
50
|
+
reallocation threshold that triggers re-evaluation.
|
|
51
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
52
|
+
controller_seeding: true
|
|
53
|
+
|
|
54
|
+
fixtures:
|
|
55
|
+
products:
|
|
56
|
+
- product_id: "outdoor_display_q2"
|
|
57
|
+
delivery_type: "guaranteed"
|
|
58
|
+
channels: ["display"]
|
|
59
|
+
format_ids:
|
|
60
|
+
- id: "display_300x250"
|
|
61
|
+
- product_id: "outdoor_video_q2"
|
|
62
|
+
delivery_type: "guaranteed"
|
|
63
|
+
channels: ["video"]
|
|
64
|
+
format_ids:
|
|
65
|
+
- id: "video_15s"
|
|
66
|
+
pricing_options:
|
|
67
|
+
- product_id: "outdoor_display_q2"
|
|
68
|
+
pricing_option_id: "cpm_standard"
|
|
69
|
+
pricing_model: "cpm"
|
|
70
|
+
currency: "USD"
|
|
71
|
+
fixed_price: 8.0
|
|
72
|
+
- product_id: "outdoor_video_q2"
|
|
73
|
+
pricing_option_id: "cpm_standard"
|
|
74
|
+
pricing_model: "cpm"
|
|
75
|
+
currency: "USD"
|
|
76
|
+
fixed_price: 12.0
|
|
77
|
+
plans:
|
|
78
|
+
- plan_id: "gov_acme_delivery_monitor"
|
|
79
|
+
brand:
|
|
80
|
+
domain: "acmeoutdoor.example"
|
|
81
|
+
objectives: "Delivery-phase governance with drift detection and rebalancing"
|
|
82
|
+
budget:
|
|
83
|
+
total: 40000
|
|
84
|
+
currency: "USD"
|
|
85
|
+
reallocation_threshold: 8000
|
|
86
|
+
flight:
|
|
87
|
+
start: "2027-01-01T00:00:00Z"
|
|
88
|
+
end: "2027-12-31T23:59:59Z"
|
|
89
|
+
countries: ["US"]
|
|
90
|
+
custom_policies:
|
|
91
|
+
- policy_id: "drift_reevaluation"
|
|
92
|
+
enforcement: "must"
|
|
93
|
+
policy: "Re-evaluate governance if any line item drifts more than 20% from plan."
|
|
94
|
+
media_buys:
|
|
95
|
+
- media_buy_id: "mb_acme_q2_2026"
|
|
96
|
+
status: "active"
|
|
97
|
+
budget:
|
|
98
|
+
total: 40000
|
|
99
|
+
currency: "USD"
|
|
100
|
+
flight:
|
|
101
|
+
start: "2026-04-01T00:00:00Z"
|
|
102
|
+
end: "2026-06-30T23:59:59Z"
|
|
103
|
+
|
|
104
|
+
phases:
|
|
105
|
+
- id: capability_discovery
|
|
106
|
+
title: "Capability discovery"
|
|
107
|
+
narrative: |
|
|
108
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before sending briefs or creating buys.
|
|
109
|
+
|
|
110
|
+
steps:
|
|
111
|
+
- id: get_capabilities
|
|
112
|
+
title: "Check agent capabilities"
|
|
113
|
+
narrative: |
|
|
114
|
+
Verify that the agent declares the expected protocol support before
|
|
115
|
+
proceeding with domain-specific operations.
|
|
116
|
+
task: get_adcp_capabilities
|
|
117
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
118
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
119
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
120
|
+
comply_scenario: capability_discovery
|
|
121
|
+
stateful: false
|
|
122
|
+
expected: |
|
|
123
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
124
|
+
sample_request:
|
|
125
|
+
context:
|
|
126
|
+
correlation_id: "governance_delivery_monitor--get_capabilities"
|
|
127
|
+
validations:
|
|
128
|
+
- check: response_schema
|
|
129
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
130
|
+
- check: field_present
|
|
131
|
+
path: "supported_protocols"
|
|
132
|
+
description: "Agent declares supported protocols"
|
|
133
|
+
|
|
134
|
+
- check: field_present
|
|
135
|
+
path: "context"
|
|
136
|
+
description: "Response echoes back the context object"
|
|
137
|
+
- check: field_value
|
|
138
|
+
path: "context.correlation_id"
|
|
139
|
+
value: "governance_delivery_monitor--get_capabilities"
|
|
140
|
+
description: "Context correlation_id returned unchanged"
|
|
141
|
+
- id: plan_registration
|
|
142
|
+
title: "Register governance plan with delivery monitoring"
|
|
143
|
+
narrative: |
|
|
144
|
+
The buyer registers a governance plan that includes delivery monitoring thresholds.
|
|
145
|
+
When spend drift exceeds the reallocation threshold, the governance agent triggers
|
|
146
|
+
a delivery-phase re-evaluation.
|
|
147
|
+
|
|
148
|
+
steps:
|
|
149
|
+
- id: sync_plans
|
|
150
|
+
title: "Register a governance plan with reallocation threshold"
|
|
151
|
+
narrative: |
|
|
152
|
+
The buyer's governance agent registers a plan with full spending authority and
|
|
153
|
+
a 20% reallocation threshold. If any line item's spend drifts more than 20%
|
|
154
|
+
from the planned budget allocation, the governance agent re-evaluates.
|
|
155
|
+
task: sync_plans
|
|
156
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
157
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
158
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
159
|
+
comply_scenario: governance_delivery_monitor
|
|
160
|
+
stateful: true
|
|
161
|
+
expected: |
|
|
162
|
+
Acknowledge the governance plan:
|
|
163
|
+
- plan_id: identifier for this governance plan
|
|
164
|
+
- budget.reallocation_threshold: amount above which reallocation requires re-evaluation
|
|
165
|
+
|
|
166
|
+
sample_request:
|
|
167
|
+
idempotency_key: "$generate:uuid_v4#gov-delivery-monitor-sync"
|
|
168
|
+
plans:
|
|
169
|
+
- plan_id: "gov_acme_delivery_monitor"
|
|
170
|
+
brand:
|
|
171
|
+
domain: "acmeoutdoor.example"
|
|
172
|
+
objectives: "Delivery-phase governance with drift detection and rebalancing"
|
|
173
|
+
budget:
|
|
174
|
+
total: 40000
|
|
175
|
+
currency: "USD"
|
|
176
|
+
reallocation_threshold: 8000
|
|
177
|
+
flight:
|
|
178
|
+
start: "2027-01-01T00:00:00Z"
|
|
179
|
+
end: "2027-12-31T23:59:59Z"
|
|
180
|
+
countries: ["US"]
|
|
181
|
+
custom_policies:
|
|
182
|
+
- policy_id: "drift_reevaluation"
|
|
183
|
+
enforcement: "must"
|
|
184
|
+
policy: "Re-evaluate governance if any line item drifts more than 20% from plan."
|
|
185
|
+
|
|
186
|
+
context:
|
|
187
|
+
correlation_id: "governance_delivery_monitor--sync_plans"
|
|
188
|
+
context_outputs:
|
|
189
|
+
- name: plan_id
|
|
190
|
+
path: 'plans[0].plan_id'
|
|
191
|
+
validations:
|
|
192
|
+
- check: response_schema
|
|
193
|
+
description: "Response matches sync-plans-response.json schema"
|
|
194
|
+
|
|
195
|
+
- check: field_present
|
|
196
|
+
path: "context"
|
|
197
|
+
description: "Response echoes back the context object"
|
|
198
|
+
- check: field_value
|
|
199
|
+
path: "context.correlation_id"
|
|
200
|
+
value: "governance_delivery_monitor--sync_plans"
|
|
201
|
+
description: "Context correlation_id returned unchanged"
|
|
202
|
+
- check: field_present
|
|
203
|
+
path: "plans[0].plan_id"
|
|
204
|
+
description: "Governance agent assigns plan_id — must be echoed in check_governance"
|
|
205
|
+
- id: initial_approval
|
|
206
|
+
title: "Initial governance check — approved"
|
|
207
|
+
narrative: |
|
|
208
|
+
The buyer proposes a media buy within authority. The governance agent approves
|
|
209
|
+
the buy with the delivery monitoring conditions active.
|
|
210
|
+
|
|
211
|
+
steps:
|
|
212
|
+
- id: check_governance_approved
|
|
213
|
+
title: "Pre-buy governance check (approved)"
|
|
214
|
+
narrative: |
|
|
215
|
+
The buyer calls check_governance with a media buy within authority. The governance
|
|
216
|
+
agent approves and notes that delivery monitoring is active with the 20% drift
|
|
217
|
+
threshold.
|
|
218
|
+
task: check_governance
|
|
219
|
+
schema_ref: "governance/check-governance-request.json"
|
|
220
|
+
response_schema_ref: "governance/check-governance-response.json"
|
|
221
|
+
doc_ref: "/governance/campaign/tasks/check_governance"
|
|
222
|
+
comply_scenario: governance_delivery_monitor
|
|
223
|
+
stateful: true
|
|
224
|
+
expected: |
|
|
225
|
+
Return an approved governance decision:
|
|
226
|
+
- decision: approved
|
|
227
|
+
- governance_context: token for the media buy
|
|
228
|
+
- monitoring: delivery phase governance is active
|
|
229
|
+
|
|
230
|
+
sample_request:
|
|
231
|
+
plan_id: "$context.plan_id"
|
|
232
|
+
caller: "https://pinnacle-agency.example"
|
|
233
|
+
tool: "create_media_buy"
|
|
234
|
+
payload:
|
|
235
|
+
account:
|
|
236
|
+
brand:
|
|
237
|
+
domain: "acmeoutdoor.example"
|
|
238
|
+
operator: "pinnacle-agency.example"
|
|
239
|
+
total_budget: 40000
|
|
240
|
+
packages:
|
|
241
|
+
- product_id: "sports_ctv_q2"
|
|
242
|
+
budget: 20000
|
|
243
|
+
- product_id: "outdoor_video_q2"
|
|
244
|
+
budget: 20000
|
|
245
|
+
|
|
246
|
+
context:
|
|
247
|
+
correlation_id: "governance_delivery_monitor--check_governance_approved"
|
|
248
|
+
validations:
|
|
249
|
+
- check: response_schema
|
|
250
|
+
description: "Response matches check-governance-response.json schema"
|
|
251
|
+
- check: field_present
|
|
252
|
+
path: "verdict"
|
|
253
|
+
description: "Response contains a governance verdict"
|
|
254
|
+
|
|
255
|
+
- check: field_present
|
|
256
|
+
path: "context"
|
|
257
|
+
description: "Response echoes back the context object"
|
|
258
|
+
- check: field_value
|
|
259
|
+
path: "context.correlation_id"
|
|
260
|
+
value: "governance_delivery_monitor--check_governance_approved"
|
|
261
|
+
description: "Context correlation_id returned unchanged"
|
|
262
|
+
- id: create_buy
|
|
263
|
+
title: "Create media buy under governance approval"
|
|
264
|
+
narrative: |
|
|
265
|
+
With governance approved, the buyer creates the media buy. The seller confirms
|
|
266
|
+
and returns a media_buy_id the buyer will use to pull delivery metrics as the
|
|
267
|
+
campaign runs.
|
|
268
|
+
|
|
269
|
+
steps:
|
|
270
|
+
- id: create_media_buy
|
|
271
|
+
title: "Create a media buy"
|
|
272
|
+
narrative: |
|
|
273
|
+
The buyer creates the media buy with the governance_context from the approved
|
|
274
|
+
check. The seller confirms and returns a media_buy_id that subsequent delivery
|
|
275
|
+
monitoring steps reference.
|
|
276
|
+
task: create_media_buy
|
|
277
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
278
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
279
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
280
|
+
comply_scenario: governance_delivery_monitor
|
|
281
|
+
stateful: true
|
|
282
|
+
expected: |
|
|
283
|
+
Confirm the media buy:
|
|
284
|
+
- media_buy_id: platform-assigned identifier
|
|
285
|
+
- status: active
|
|
286
|
+
- packages: confirmed line items
|
|
287
|
+
|
|
288
|
+
sample_request:
|
|
289
|
+
account:
|
|
290
|
+
brand:
|
|
291
|
+
domain: "acmeoutdoor.example"
|
|
292
|
+
operator: "pinnacle-agency.example"
|
|
293
|
+
brand:
|
|
294
|
+
domain: "acmeoutdoor.example"
|
|
295
|
+
governance_context: "gov_ctx_acme_delivery_approved"
|
|
296
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
297
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
298
|
+
packages:
|
|
299
|
+
- product_id: "sports_ctv_q2"
|
|
300
|
+
budget: 20000
|
|
301
|
+
pricing_option_id: "cpm_guaranteed"
|
|
302
|
+
- product_id: "outdoor_video_q2"
|
|
303
|
+
budget: 20000
|
|
304
|
+
pricing_option_id: "cpm_standard"
|
|
305
|
+
|
|
306
|
+
idempotency_key: "$generate:uuid_v4#governance_delivery_monitor_create_buy_create_media_buy"
|
|
307
|
+
context:
|
|
308
|
+
correlation_id: "governance_delivery_monitor--create_media_buy"
|
|
309
|
+
context_outputs:
|
|
310
|
+
- name: media_buy_id
|
|
311
|
+
path: "media_buy_id"
|
|
312
|
+
validations:
|
|
313
|
+
- check: response_schema
|
|
314
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
315
|
+
- check: field_present
|
|
316
|
+
path: "media_buy_id"
|
|
317
|
+
description: "Response contains a media_buy_id for delivery monitoring"
|
|
318
|
+
|
|
319
|
+
- check: field_present
|
|
320
|
+
path: "context"
|
|
321
|
+
description: "Response echoes back the context object"
|
|
322
|
+
- check: field_value
|
|
323
|
+
path: "context.correlation_id"
|
|
324
|
+
value: "governance_delivery_monitor--create_media_buy"
|
|
325
|
+
description: "Context correlation_id returned unchanged"
|
|
326
|
+
- id: delivery_monitoring
|
|
327
|
+
title: "Delivery metrics show budget drift"
|
|
328
|
+
narrative: |
|
|
329
|
+
The campaign is running. The buyer checks delivery and finds that one line item
|
|
330
|
+
is overspending while the other is underspending. The CTV line item has consumed
|
|
331
|
+
70% of its budget at the halfway point while the video line item is at 30%.
|
|
332
|
+
|
|
333
|
+
steps:
|
|
334
|
+
- id: get_delivery
|
|
335
|
+
title: "Check delivery metrics"
|
|
336
|
+
narrative: |
|
|
337
|
+
The buyer requests delivery data and finds budget drift. One line item is
|
|
338
|
+
significantly overpacing while the other is underpacing.
|
|
339
|
+
task: get_media_buy_delivery
|
|
340
|
+
schema_ref: "media-buy/get-media-buy-delivery-request.json"
|
|
341
|
+
response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
|
|
342
|
+
doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
|
|
343
|
+
comply_scenario: governance_delivery_monitor
|
|
344
|
+
stateful: true
|
|
345
|
+
expected: |
|
|
346
|
+
Return delivery metrics showing drift:
|
|
347
|
+
- Per-package delivery with impressions, spend, and pacing
|
|
348
|
+
- One package overpacing (>60% spend at 50% flight)
|
|
349
|
+
- One package underpacing (<40% spend at 50% flight)
|
|
350
|
+
|
|
351
|
+
sample_request:
|
|
352
|
+
account:
|
|
353
|
+
brand:
|
|
354
|
+
domain: "acmeoutdoor.example"
|
|
355
|
+
operator: "pinnacle-agency.example"
|
|
356
|
+
media_buy_ids:
|
|
357
|
+
- "$context.media_buy_id"
|
|
358
|
+
include_package_daily_breakdown: true
|
|
359
|
+
|
|
360
|
+
context:
|
|
361
|
+
correlation_id: "governance_delivery_monitor--get_delivery"
|
|
362
|
+
validations:
|
|
363
|
+
- check: response_schema
|
|
364
|
+
description: "Response matches get-media-buy-delivery-response.json schema"
|
|
365
|
+
- check: field_present
|
|
366
|
+
path: "media_buy_deliveries"
|
|
367
|
+
description: "Response contains media buy delivery data"
|
|
368
|
+
|
|
369
|
+
- check: field_present
|
|
370
|
+
path: "context"
|
|
371
|
+
description: "Response echoes back the context object"
|
|
372
|
+
- check: field_value
|
|
373
|
+
path: "context.correlation_id"
|
|
374
|
+
value: "governance_delivery_monitor--get_delivery"
|
|
375
|
+
description: "Context correlation_id returned unchanged"
|
|
376
|
+
- id: drift_recheck
|
|
377
|
+
title: "Governance re-check — drift detected"
|
|
378
|
+
narrative: |
|
|
379
|
+
The buyer's governance agent detects that budget drift has exceeded the 20%
|
|
380
|
+
reallocation threshold. It triggers a delivery-phase governance check with the
|
|
381
|
+
current delivery data as evidence. The governance agent re-evaluates and returns
|
|
382
|
+
a decision — either re-approved with updated conditions or a recommendation to
|
|
383
|
+
pause and rebalance.
|
|
384
|
+
|
|
385
|
+
steps:
|
|
386
|
+
- id: check_governance_drift
|
|
387
|
+
title: "Delivery-phase governance re-check (drift exceeded)"
|
|
388
|
+
narrative: |
|
|
389
|
+
The buyer calls check_governance with phase: delivery and attaches
|
|
390
|
+
the current delivery metrics as evidence. The governance agent evaluates the
|
|
391
|
+
drift against the reallocation threshold and returns a decision.
|
|
392
|
+
task: check_governance
|
|
393
|
+
schema_ref: "governance/check-governance-request.json"
|
|
394
|
+
response_schema_ref: "governance/check-governance-response.json"
|
|
395
|
+
doc_ref: "/governance/campaign/tasks/check_governance"
|
|
396
|
+
comply_scenario: governance_delivery_monitor
|
|
397
|
+
stateful: true
|
|
398
|
+
expected: |
|
|
399
|
+
Return a governance decision about the delivery drift:
|
|
400
|
+
- decision: approved (with rebalancing conditions) or denied (pause recommended)
|
|
401
|
+
- findings: warning-severity findings noting the drift amounts
|
|
402
|
+
- severity: warning
|
|
403
|
+
- category_id: BUDGET_DRIFT_EXCEEDED
|
|
404
|
+
- explanation: explains which line items drifted and by how much
|
|
405
|
+
- conditions: if approved, conditions for rebalancing (e.g., "Reallocate $5K from CTV to video")
|
|
406
|
+
|
|
407
|
+
sample_request:
|
|
408
|
+
plan_id: "$context.plan_id"
|
|
409
|
+
caller: "https://pinnacle-agency.example"
|
|
410
|
+
phase: "delivery"
|
|
411
|
+
governance_context: "gov_ctx_acme_delivery_approved"
|
|
412
|
+
delivery_metrics:
|
|
413
|
+
reporting_period:
|
|
414
|
+
start: "2026-05-01T00:00:00Z"
|
|
415
|
+
end: "2026-05-15T00:00:00Z"
|
|
416
|
+
spend: 20000
|
|
417
|
+
cumulative_spend: 20000
|
|
418
|
+
channel_distribution:
|
|
419
|
+
ctv: 70
|
|
420
|
+
video: 30
|
|
421
|
+
pacing: "ahead"
|
|
422
|
+
|
|
423
|
+
context:
|
|
424
|
+
correlation_id: "governance_delivery_monitor--check_governance_drift"
|
|
425
|
+
validations:
|
|
426
|
+
- check: response_schema
|
|
427
|
+
description: "Response matches check-governance-response.json schema"
|
|
428
|
+
- check: field_present
|
|
429
|
+
path: "verdict"
|
|
430
|
+
description: "Response contains a governance verdict"
|
|
431
|
+
- check: field_present
|
|
432
|
+
path: "findings"
|
|
433
|
+
description: "Response contains findings about the drift"
|
|
434
|
+
|
|
435
|
+
- check: field_present
|
|
436
|
+
path: "context"
|
|
437
|
+
description: "Response echoes back the context object"
|
|
438
|
+
- check: field_value
|
|
439
|
+
path: "context.correlation_id"
|
|
440
|
+
value: "governance_delivery_monitor--check_governance_drift"
|
|
441
|
+
description: "Context correlation_id returned unchanged"
|