@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,317 @@
|
|
|
1
|
+
id: signal_owned
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Owned signal agent"
|
|
4
|
+
protocol: signals
|
|
5
|
+
category: signal_owned
|
|
6
|
+
summary: "Signal agent serving first-party or proprietary audience data without external catalog verification."
|
|
7
|
+
track: signals
|
|
8
|
+
required_tools:
|
|
9
|
+
- get_signals
|
|
10
|
+
|
|
11
|
+
narrative: |
|
|
12
|
+
You operate a first-party data platform — a retailer CDP, publisher contextual data
|
|
13
|
+
provider, or proprietary audience platform. Your signals are agent-native: they come
|
|
14
|
+
from your own data, not from third-party catalogs.
|
|
15
|
+
|
|
16
|
+
Buyers trust your agent directly. There's no external adagents.json to verify against —
|
|
17
|
+
provenance is the agent itself. This simplifies the flow: discovery and activation,
|
|
18
|
+
without the verification step that marketplace agents require.
|
|
19
|
+
|
|
20
|
+
Owned signal agents often have richer signal types. A retailer might expose purchase
|
|
21
|
+
frequency as a numeric signal (0-30 visits/month) or loyalty tier as categorical
|
|
22
|
+
(platinum/gold/silver/bronze). A publisher might expose content category, subscriber
|
|
23
|
+
tenure, or engagement scores.
|
|
24
|
+
|
|
25
|
+
This storyboard walks through discovery and both activation patterns.
|
|
26
|
+
|
|
27
|
+
Pricing is hard-required here for the same reason as signal marketplaces: signals
|
|
28
|
+
are rate-carded goods. Buyers cannot activate without a pricing_option_id to anchor
|
|
29
|
+
billing. Agents distributing first-party signals without commercial terms belong on
|
|
30
|
+
a different specialism, not this one — the v2 `list_authorized_properties`
|
|
31
|
+
task is retired; portfolio advertising now lives on `get_adcp_capabilities`.
|
|
32
|
+
|
|
33
|
+
agent:
|
|
34
|
+
interaction_model: owned_signals
|
|
35
|
+
capabilities: []
|
|
36
|
+
examples:
|
|
37
|
+
- "Retailer CDPs (e.g., loyalty and purchase data)"
|
|
38
|
+
- "Publisher contextual platforms (e.g., content category, subscriber data)"
|
|
39
|
+
- "First-party audience platforms (e.g., CRM-derived segments)"
|
|
40
|
+
|
|
41
|
+
caller:
|
|
42
|
+
role: buyer_agent
|
|
43
|
+
example: "Scope3 (DSP)"
|
|
44
|
+
|
|
45
|
+
prerequisites:
|
|
46
|
+
description: |
|
|
47
|
+
The buyer has a campaign brief with targeting objectives. The test kit provides
|
|
48
|
+
sample owned signal definitions with various value types (binary, categorical,
|
|
49
|
+
numeric) and pricing models.
|
|
50
|
+
test_kit: "test-kits/nova-motors.yaml"
|
|
51
|
+
|
|
52
|
+
phases:
|
|
53
|
+
- id: capability_discovery
|
|
54
|
+
title: "Capability discovery"
|
|
55
|
+
narrative: |
|
|
56
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports signals before discovering or activating audience data.
|
|
57
|
+
|
|
58
|
+
steps:
|
|
59
|
+
- id: get_capabilities
|
|
60
|
+
title: "Check agent capabilities"
|
|
61
|
+
narrative: |
|
|
62
|
+
Verify that the agent declares the expected protocol support before
|
|
63
|
+
proceeding with domain-specific operations.
|
|
64
|
+
task: get_adcp_capabilities
|
|
65
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
66
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
67
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
68
|
+
comply_scenario: capability_discovery
|
|
69
|
+
stateful: false
|
|
70
|
+
expected: |
|
|
71
|
+
Return capabilities declaring signals in supported_protocols, confirming the agent serves audience signals.
|
|
72
|
+
sample_request:
|
|
73
|
+
context:
|
|
74
|
+
correlation_id: "signal_owned--get_capabilities"
|
|
75
|
+
validations:
|
|
76
|
+
- check: response_schema
|
|
77
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
78
|
+
- check: field_present
|
|
79
|
+
path: "supported_protocols"
|
|
80
|
+
description: "Agent declares supported protocols"
|
|
81
|
+
|
|
82
|
+
- check: field_present
|
|
83
|
+
path: "context"
|
|
84
|
+
description: "Response echoes back the context object"
|
|
85
|
+
- check: field_value
|
|
86
|
+
path: "context.correlation_id"
|
|
87
|
+
value: "signal_owned--get_capabilities"
|
|
88
|
+
description: "Context correlation_id returned unchanged"
|
|
89
|
+
- id: discovery
|
|
90
|
+
title: "Signal discovery"
|
|
91
|
+
narrative: |
|
|
92
|
+
The buyer describes targeting objectives and your agent returns matching signals
|
|
93
|
+
from your proprietary data. Unlike marketplace agents, these signals have
|
|
94
|
+
signal_type "owned" — provenance is the agent itself.
|
|
95
|
+
|
|
96
|
+
Owned signals often include richer value types. A retailer can expose loyalty
|
|
97
|
+
tiers as categorical signals and purchase frequency as numeric signals, giving
|
|
98
|
+
buyers more precise targeting than binary include/exclude.
|
|
99
|
+
|
|
100
|
+
steps:
|
|
101
|
+
- id: search_owned_signals
|
|
102
|
+
title: "Discover owned signals"
|
|
103
|
+
narrative: |
|
|
104
|
+
The buyer searches for audience segments using a natural language description.
|
|
105
|
+
Your agent returns signals from your proprietary data — loyalty tiers, purchase
|
|
106
|
+
history, engagement scores, contextual categories.
|
|
107
|
+
task: get_signals
|
|
108
|
+
schema_ref: "signals/get-signals-request.json"
|
|
109
|
+
response_schema_ref: "signals/get-signals-response.json"
|
|
110
|
+
doc_ref: "/signals/tasks/get_signals"
|
|
111
|
+
comply_scenario: signals_flow
|
|
112
|
+
stateful: false
|
|
113
|
+
expected: |
|
|
114
|
+
Return matching signals from your proprietary data. Each signal must include:
|
|
115
|
+
- signal_agent_segment_id for activation
|
|
116
|
+
- signal_id with source: "agent_native"
|
|
117
|
+
- name, description, and value_type
|
|
118
|
+
- coverage_forecast when detailed availability is disclosed; deprecated coverage_percentage may be present as a legacy scalar fallback
|
|
119
|
+
- pricing_options
|
|
120
|
+
- signal_type: "owned"
|
|
121
|
+
|
|
122
|
+
For categorical signals, include the allowed_values.
|
|
123
|
+
For numeric signals, include the range (min/max).
|
|
124
|
+
|
|
125
|
+
sample_request:
|
|
126
|
+
account:
|
|
127
|
+
brand:
|
|
128
|
+
domain: "novamotors.example"
|
|
129
|
+
operator: "pinnacle-agency.example"
|
|
130
|
+
signal_spec: "High-value customers likely to purchase electronics, with loyalty program data"
|
|
131
|
+
|
|
132
|
+
context:
|
|
133
|
+
correlation_id: "signal_owned--search_owned_signals"
|
|
134
|
+
validations:
|
|
135
|
+
- check: response_schema
|
|
136
|
+
description: "Response matches get-signals-response.json schema"
|
|
137
|
+
- check: field_present
|
|
138
|
+
path: "signals[0].signal_agent_segment_id"
|
|
139
|
+
description: "Each signal has a signal_agent_segment_id"
|
|
140
|
+
- check: field_present
|
|
141
|
+
path: "signals[0].pricing_options"
|
|
142
|
+
description: "Each signal has pricing options"
|
|
143
|
+
|
|
144
|
+
- check: field_present
|
|
145
|
+
path: "context"
|
|
146
|
+
description: "Response echoes back the context object"
|
|
147
|
+
- check: field_value
|
|
148
|
+
path: "context.correlation_id"
|
|
149
|
+
value: "signal_owned--search_owned_signals"
|
|
150
|
+
description: "Context correlation_id returned unchanged"
|
|
151
|
+
- check: field_present
|
|
152
|
+
path: "signals[0].signal_id.source"
|
|
153
|
+
description: "Signal ID includes source discriminator"
|
|
154
|
+
- id: filter_by_criteria
|
|
155
|
+
title: "Filter signals by criteria"
|
|
156
|
+
narrative: |
|
|
157
|
+
The buyer narrows the search using filters — maximum CPM, specific signal
|
|
158
|
+
types, or coverage thresholds. This tests that your agent handles filter
|
|
159
|
+
parameters correctly and returns only matching signals.
|
|
160
|
+
task: get_signals
|
|
161
|
+
schema_ref: "signals/get-signals-request.json"
|
|
162
|
+
response_schema_ref: "signals/get-signals-response.json"
|
|
163
|
+
doc_ref: "/signals/tasks/get_signals"
|
|
164
|
+
comply_scenario: signals_flow
|
|
165
|
+
stateful: false
|
|
166
|
+
expected: |
|
|
167
|
+
Return only signals matching the filter criteria. If no signals match,
|
|
168
|
+
return an empty signals array — not an error.
|
|
169
|
+
|
|
170
|
+
sample_request:
|
|
171
|
+
account:
|
|
172
|
+
brand:
|
|
173
|
+
domain: "novamotors.example"
|
|
174
|
+
operator: "pinnacle-agency.example"
|
|
175
|
+
signal_spec: "Purchase behavior signals"
|
|
176
|
+
filters:
|
|
177
|
+
max_cpm: 5.00
|
|
178
|
+
|
|
179
|
+
context:
|
|
180
|
+
correlation_id: "signal_owned--filter_by_criteria"
|
|
181
|
+
validations:
|
|
182
|
+
- check: response_schema
|
|
183
|
+
description: "Response matches schema"
|
|
184
|
+
- check: field_present
|
|
185
|
+
path: "signals"
|
|
186
|
+
description: "Response contains a signals array"
|
|
187
|
+
|
|
188
|
+
- check: field_present
|
|
189
|
+
path: "context"
|
|
190
|
+
description: "Response echoes back the context object"
|
|
191
|
+
- check: field_value
|
|
192
|
+
path: "context.correlation_id"
|
|
193
|
+
value: "signal_owned--filter_by_criteria"
|
|
194
|
+
description: "Context correlation_id returned unchanged"
|
|
195
|
+
- id: platform_activation
|
|
196
|
+
title: "Activate on a DSP"
|
|
197
|
+
narrative: |
|
|
198
|
+
The buyer activates a signal directly on a DSP. Your agent pushes the segment
|
|
199
|
+
to the platform and returns a segment_id the buyer uses for campaign targeting.
|
|
200
|
+
|
|
201
|
+
Use platform destinations when the buyer manages DSP campaigns directly.
|
|
202
|
+
|
|
203
|
+
steps:
|
|
204
|
+
- id: activate_on_platform
|
|
205
|
+
title: "Activate owned signal on a DSP"
|
|
206
|
+
narrative: |
|
|
207
|
+
The buyer selects a signal and activates it on a DSP. For owned signals,
|
|
208
|
+
this means your platform pushes first-party segment data to the DSP. The
|
|
209
|
+
buyer gets back a segment_id for targeting.
|
|
210
|
+
task: activate_signal
|
|
211
|
+
schema_ref: "signals/activate-signal-request.json"
|
|
212
|
+
response_schema_ref: "signals/activate-signal-response.json"
|
|
213
|
+
doc_ref: "/signals/tasks/activate_signal"
|
|
214
|
+
comply_scenario: signals_flow
|
|
215
|
+
stateful: true
|
|
216
|
+
expected: |
|
|
217
|
+
Return a deployment with:
|
|
218
|
+
- type: "platform"
|
|
219
|
+
- is_live status (may be async)
|
|
220
|
+
- activation_key with type: "segment_id" when live
|
|
221
|
+
- estimated_activation_duration_minutes if not immediately live
|
|
222
|
+
|
|
223
|
+
sample_request:
|
|
224
|
+
account:
|
|
225
|
+
brand:
|
|
226
|
+
domain: "novamotors.example"
|
|
227
|
+
operator: "pinnacle-agency.example"
|
|
228
|
+
signal_agent_segment_id: "prism_high_ltv"
|
|
229
|
+
pricing_option_id: "po_prism_flat_monthly"
|
|
230
|
+
destinations:
|
|
231
|
+
- type: "platform"
|
|
232
|
+
platform: "the-trade-desk"
|
|
233
|
+
account: "agency-123-ttd"
|
|
234
|
+
idempotency_key: "$generate:uuid_v4#signal_owned_activate_platform"
|
|
235
|
+
context:
|
|
236
|
+
correlation_id: "signal_owned--activate_on_platform"
|
|
237
|
+
ext:
|
|
238
|
+
test_platform:
|
|
239
|
+
test_run: true
|
|
240
|
+
validations:
|
|
241
|
+
- check: response_schema
|
|
242
|
+
description: "Response matches activate-signal-response.json schema"
|
|
243
|
+
- check: field_present
|
|
244
|
+
path: "deployments[0].type"
|
|
245
|
+
description: "Deployment includes type"
|
|
246
|
+
|
|
247
|
+
- check: field_present
|
|
248
|
+
path: "context"
|
|
249
|
+
description: "Response echoes back the context object"
|
|
250
|
+
- check: field_value
|
|
251
|
+
path: "context.correlation_id"
|
|
252
|
+
value: "signal_owned--activate_on_platform"
|
|
253
|
+
description: "Context correlation_id returned unchanged"
|
|
254
|
+
- id: agent_activation
|
|
255
|
+
title: "Activate on a sales agent"
|
|
256
|
+
narrative: |
|
|
257
|
+
The buyer activates a signal on a sales agent. The SA records the activation
|
|
258
|
+
and handles downstream DSP coordination — the buyer doesn't need to know which
|
|
259
|
+
platform the SA uses.
|
|
260
|
+
|
|
261
|
+
This is the right pattern when buying media through a sales agent.
|
|
262
|
+
|
|
263
|
+
steps:
|
|
264
|
+
- id: activate_on_agent
|
|
265
|
+
title: "Activate owned signal on a sales agent"
|
|
266
|
+
narrative: |
|
|
267
|
+
The buyer activates a signal with the SA's URL as the destination. The
|
|
268
|
+
activation is typically synchronous. The SA records it internally and
|
|
269
|
+
applies the targeting when the buyer later calls create_media_buy.
|
|
270
|
+
task: activate_signal
|
|
271
|
+
schema_ref: "signals/activate-signal-request.json"
|
|
272
|
+
response_schema_ref: "signals/activate-signal-response.json"
|
|
273
|
+
doc_ref: "/signals/tasks/activate_signal"
|
|
274
|
+
comply_scenario: signals_flow
|
|
275
|
+
stateful: true
|
|
276
|
+
expected: |
|
|
277
|
+
Return a deployment with:
|
|
278
|
+
- type: "agent"
|
|
279
|
+
- agent_url matching the SA
|
|
280
|
+
- is_live: true (sync activation)
|
|
281
|
+
- activation_key with type: "key_value"
|
|
282
|
+
- deployed_at timestamp
|
|
283
|
+
|
|
284
|
+
sample_request:
|
|
285
|
+
account:
|
|
286
|
+
brand:
|
|
287
|
+
domain: "novamotors.example"
|
|
288
|
+
operator: "pinnacle-agency.example"
|
|
289
|
+
signal_agent_segment_id: "prism_cart_abandoner"
|
|
290
|
+
pricing_option_id: "po_prism_abandoner_cpm"
|
|
291
|
+
destinations:
|
|
292
|
+
- type: "agent"
|
|
293
|
+
agent_url: "https://wonderstruck.salesagents.example"
|
|
294
|
+
idempotency_key: "$generate:uuid_v4#signal_owned_activate_agent"
|
|
295
|
+
context:
|
|
296
|
+
correlation_id: "signal_owned--activate_on_agent"
|
|
297
|
+
ext:
|
|
298
|
+
test_platform:
|
|
299
|
+
test_run: true
|
|
300
|
+
validations:
|
|
301
|
+
- check: response_schema
|
|
302
|
+
description: "Response matches activate-signal-response.json schema"
|
|
303
|
+
- check: field_present
|
|
304
|
+
path: "deployments[0].activation_key"
|
|
305
|
+
description: "Deployment includes activation key"
|
|
306
|
+
- check: field_value
|
|
307
|
+
path: "deployments[0].type"
|
|
308
|
+
value: "agent"
|
|
309
|
+
description: "Deployment type is 'agent'"
|
|
310
|
+
|
|
311
|
+
- check: field_present
|
|
312
|
+
path: "context"
|
|
313
|
+
description: "Response echoes back the context object"
|
|
314
|
+
- check: field_value
|
|
315
|
+
path: "context.correlation_id"
|
|
316
|
+
value: "signal_owned--activate_on_agent"
|
|
317
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
id: sponsored_intelligence
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
title: "Sponsored intelligence"
|
|
4
|
+
protocol: sponsored-intelligence
|
|
5
|
+
status: preview
|
|
6
|
+
category: sponsored_intelligence
|
|
7
|
+
summary: "Specialism claim for agents that expose conversational sponsored experiences via the SI session lifecycle. Preview while the underlying SI tools remain `x-status: experimental`; SDK dispatch parity with other specialism IDs."
|
|
8
|
+
track: si
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
Sponsored intelligence (SI) is the conversational ad surface inside AI assistants,
|
|
12
|
+
AI search, and generative experiences. An SI agent exposes four lifecycle tools —
|
|
13
|
+
`si_get_offering`, `si_initiate_session`, `si_send_message`, `si_terminate_session` —
|
|
14
|
+
that together drive a single sponsored conversation from discovery to handoff.
|
|
15
|
+
|
|
16
|
+
This specialism is the wire-level claim adopters make so SDKs can dispatch on a
|
|
17
|
+
specialism ID with parity to every other agent shape (`signal-marketplace`,
|
|
18
|
+
`creative-template`, `governance-spend-authority`, etc.). Without it, SI agents have
|
|
19
|
+
to be wired through escape-hatch handler bags rather than first-class platform
|
|
20
|
+
interfaces — purely because there was no enum value to key dispatch off of.
|
|
21
|
+
|
|
22
|
+
The storyboard for this specialism is a placeholder while the underlying SI tools
|
|
23
|
+
remain `x-status: experimental`. Conformance for SI agents is currently exercised by
|
|
24
|
+
the `sponsored-intelligence` protocol baseline (which already covers the full session
|
|
25
|
+
lifecycle); claiming this specialism today is graded as `{ status: "preview",
|
|
26
|
+
passed: null }` per the preview-status contract in
|
|
27
|
+
/docs/building/verification/compliance-catalog.
|
|
28
|
+
|
|
29
|
+
This specialism promotes to `stable` (with required_tools and a graded storyboard)
|
|
30
|
+
when the SI tools graduate from experimental. Sub-specialism splits may emerge as
|
|
31
|
+
the SI surface stabilizes — likely along axes like identity model (anonymous vs.
|
|
32
|
+
authenticated host-user), commerce capability (conversation-only vs. UI-component
|
|
33
|
+
vs. transactional handoff), or host surface (assistant vs. AI search vs. embedded).
|
|
34
|
+
The shape isn't committed; this narrative anticipates differentiation, it doesn't
|
|
35
|
+
specify it.
|
|
36
|
+
|
|
37
|
+
agent:
|
|
38
|
+
interaction_model: si_platform
|
|
39
|
+
capabilities:
|
|
40
|
+
- sponsored_intelligence
|
|
41
|
+
examples:
|
|
42
|
+
- "AI assistants with ad support"
|
|
43
|
+
- "AI search products with sponsored experiences"
|
|
44
|
+
- "Conversational commerce agents reachable via SI handoff"
|
|
45
|
+
|
|
46
|
+
caller:
|
|
47
|
+
role: buyer_agent
|
|
48
|
+
example: "Nova Motors (advertiser)"
|
|
49
|
+
|
|
50
|
+
prerequisites:
|
|
51
|
+
description: |
|
|
52
|
+
No specialism-specific prerequisites today. The protocol baseline at
|
|
53
|
+
/compliance/{version}/protocols/sponsored-intelligence/ exercises the full
|
|
54
|
+
discover → initiate → message → terminate flow against the shared Nova Motors
|
|
55
|
+
test kit; preview claims of this specialism inherit those scenarios for
|
|
56
|
+
runner discoverability without producing a graded verdict.
|
|
57
|
+
test_kit: "test-kits/nova-motors.yaml"
|
|
58
|
+
|
|
59
|
+
phases: []
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Acme Outdoor — Live-Mode Principal Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[acme_outdoor]
|
|
4
|
+
#
|
|
5
|
+
# Live-mode counterpart to acme-outdoor.yaml. Used exclusively by the
|
|
6
|
+
# comply-controller-mode-gate storyboard to supply a non-sandbox principal:
|
|
7
|
+
# the seller's gate must resolve the calling account, detect mode: live, and
|
|
8
|
+
# return ControllerError.error: FORBIDDEN before dispatching any scenario.
|
|
9
|
+
#
|
|
10
|
+
# IMPORTANT: sandbox: false here signals that this principal represents a
|
|
11
|
+
# live/production account for the purpose of controller gating tests. It does
|
|
12
|
+
# NOT mean this kit is used in production grading — the kit is only loaded by
|
|
13
|
+
# the comply_controller_mode_gate storyboard, which requires: [controller]
|
|
14
|
+
# and is dev/staging-only by design.
|
|
15
|
+
|
|
16
|
+
id: acme_outdoor_live
|
|
17
|
+
name: "Acme Outdoor (Live Mode)"
|
|
18
|
+
description: "Fictional outdoor gear brand — live-mode principal for comply_test_controller denial storyboard"
|
|
19
|
+
sandbox: false
|
|
20
|
+
|
|
21
|
+
# Authentication fixture for the comply-controller-mode-gate storyboard.
|
|
22
|
+
# The api_key here represents a live-mode (non-sandbox) credential. When the
|
|
23
|
+
# runner sends requests using this key, a conformant seller resolves the
|
|
24
|
+
# account, determines mode: live, and refuses comply_test_controller dispatch
|
|
25
|
+
# with FORBIDDEN.
|
|
26
|
+
#
|
|
27
|
+
# The demo-acme-outdoor-live- prefix signals this is a test harness key whose
|
|
28
|
+
# account resolves as live-mode on conformant implementations.
|
|
29
|
+
auth:
|
|
30
|
+
api_key: "demo-acme-outdoor-live-v1"
|
|
31
|
+
probe_task: list_creatives
|
|
32
|
+
|
|
33
|
+
brand:
|
|
34
|
+
house:
|
|
35
|
+
domain: "acmeoutdoor.example"
|
|
36
|
+
name: "Acme Outdoor"
|
|
37
|
+
brand_id: "acme_outdoor"
|
|
38
|
+
names:
|
|
39
|
+
- en: "Acme Outdoor"
|
|
40
|
+
description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
|
|
41
|
+
industry: "retail"
|
|
42
|
+
keller_type: "master"
|
|
43
|
+
logos:
|
|
44
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
|
|
45
|
+
orientation: "horizontal"
|
|
46
|
+
background: "light-bg"
|
|
47
|
+
variant: "primary"
|
|
48
|
+
width: 400
|
|
49
|
+
height: 100
|
|
50
|
+
colors:
|
|
51
|
+
primary: "#1B5E20"
|
|
52
|
+
secondary: "#FF6F00"
|
|
53
|
+
accent: "#FDD835"
|
|
54
|
+
background: "#FAFAFA"
|
|
55
|
+
text: "#212121"
|
|
56
|
+
fonts:
|
|
57
|
+
heading:
|
|
58
|
+
family: "Montserrat"
|
|
59
|
+
weight: 700
|
|
60
|
+
url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
|
|
61
|
+
body:
|
|
62
|
+
family: "Open Sans"
|
|
63
|
+
weight: 400
|
|
64
|
+
url: "https://fonts.googleapis.com/css2?family=Open+Sans"
|
|
65
|
+
tone:
|
|
66
|
+
voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
|
|
67
|
+
attributes:
|
|
68
|
+
- "active"
|
|
69
|
+
- "direct"
|
|
70
|
+
- "warm"
|
|
71
|
+
dos:
|
|
72
|
+
- "Use action verbs"
|
|
73
|
+
- "Reference real outdoor activities"
|
|
74
|
+
- "Keep it short"
|
|
75
|
+
donts:
|
|
76
|
+
- "Use superlatives without evidence"
|
|
77
|
+
- "Talk down to the reader"
|
|
78
|
+
- "Use corporate jargon"
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Acme Outdoor — Sample Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[acme_outdoor]
|
|
4
|
+
#
|
|
5
|
+
# Provides the "ingredients" needed to test creative agent storyboards:
|
|
6
|
+
# a brand identity, sample assets at common dimensions, and sample text.
|
|
7
|
+
#
|
|
8
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
9
|
+
# Agents resolve acmeoutdoor.example via the standard AAO brand resolution path.
|
|
10
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
11
|
+
# brand discovery results.
|
|
12
|
+
|
|
13
|
+
id: acme_outdoor
|
|
14
|
+
name: "Acme Outdoor"
|
|
15
|
+
description: "Fictional outdoor gear brand for storyboard testing"
|
|
16
|
+
sandbox: true
|
|
17
|
+
|
|
18
|
+
# Set to true when the agent under test declares at least one audio format in
|
|
19
|
+
# list_creative_formats. Enables the audio_build phase in the creative_template
|
|
20
|
+
# storyboard. Leave false for display-only template agents.
|
|
21
|
+
supports_audio_formats: false
|
|
22
|
+
|
|
23
|
+
# Authentication fixture for the universal security_baseline storyboard
|
|
24
|
+
# (universal/security.yaml). Declares:
|
|
25
|
+
# - api_key: the demo Bearer the runner sends on the positive api-key
|
|
26
|
+
# probe. The conformance handle is the `demo-<kit>-` prefix — agents
|
|
27
|
+
# SHOULD accept any Bearer matching that prefix (not this literal
|
|
28
|
+
# value) so the suffix can rotate across spec versions without
|
|
29
|
+
# breaking previously-conformant agents.
|
|
30
|
+
# - probe_task: the protected, auth-required read the runner calls under
|
|
31
|
+
# `auth: none` and with a random-invalid key. Default is list_creatives;
|
|
32
|
+
# declare explicitly so the api_key phase runs instead of being skipped
|
|
33
|
+
# via `skip_if: "!test_kit.auth.api_key"`.
|
|
34
|
+
auth:
|
|
35
|
+
api_key: "demo-acme-outdoor-v1"
|
|
36
|
+
probe_task: list_creatives
|
|
37
|
+
|
|
38
|
+
brand:
|
|
39
|
+
house:
|
|
40
|
+
domain: "acmeoutdoor.example"
|
|
41
|
+
name: "Acme Outdoor"
|
|
42
|
+
brand_id: "acme_outdoor"
|
|
43
|
+
names:
|
|
44
|
+
- en: "Acme Outdoor"
|
|
45
|
+
description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
|
|
46
|
+
industry: "retail"
|
|
47
|
+
keller_type: "master"
|
|
48
|
+
logos:
|
|
49
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
|
|
50
|
+
orientation: "horizontal"
|
|
51
|
+
background: "light-bg"
|
|
52
|
+
variant: "primary"
|
|
53
|
+
width: 400
|
|
54
|
+
height: 100
|
|
55
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-icon.png"
|
|
56
|
+
orientation: "square"
|
|
57
|
+
background: "transparent-bg"
|
|
58
|
+
variant: "icon"
|
|
59
|
+
width: 200
|
|
60
|
+
height: 200
|
|
61
|
+
colors:
|
|
62
|
+
primary: "#1B5E20"
|
|
63
|
+
secondary: "#FF6F00"
|
|
64
|
+
accent: "#FDD835"
|
|
65
|
+
background: "#FAFAFA"
|
|
66
|
+
text: "#212121"
|
|
67
|
+
fonts:
|
|
68
|
+
heading:
|
|
69
|
+
family: "Montserrat"
|
|
70
|
+
weight: 700
|
|
71
|
+
url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
|
|
72
|
+
body:
|
|
73
|
+
family: "Open Sans"
|
|
74
|
+
weight: 400
|
|
75
|
+
url: "https://fonts.googleapis.com/css2?family=Open+Sans"
|
|
76
|
+
tone:
|
|
77
|
+
voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
|
|
78
|
+
attributes:
|
|
79
|
+
- "active"
|
|
80
|
+
- "direct"
|
|
81
|
+
- "warm"
|
|
82
|
+
dos:
|
|
83
|
+
- "Use action verbs"
|
|
84
|
+
- "Reference real outdoor activities"
|
|
85
|
+
- "Keep it short"
|
|
86
|
+
donts:
|
|
87
|
+
- "Use superlatives without evidence"
|
|
88
|
+
- "Talk down to the reader"
|
|
89
|
+
- "Use corporate jargon"
|
|
90
|
+
|
|
91
|
+
# Sample assets at common ad dimensions.
|
|
92
|
+
# These are placeholder URLs — in production, these would point to actual hosted test images.
|
|
93
|
+
assets:
|
|
94
|
+
images:
|
|
95
|
+
- id: "hero_300x250"
|
|
96
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
|
|
97
|
+
width: 300
|
|
98
|
+
height: 250
|
|
99
|
+
mime_type: "image/jpeg"
|
|
100
|
+
description: "Medium rectangle hero — hiker on mountain trail"
|
|
101
|
+
|
|
102
|
+
- id: "hero_728x90"
|
|
103
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-728x90.jpg"
|
|
104
|
+
width: 728
|
|
105
|
+
height: 90
|
|
106
|
+
mime_type: "image/jpeg"
|
|
107
|
+
description: "Leaderboard hero — panoramic mountain vista"
|
|
108
|
+
|
|
109
|
+
- id: "hero_320x50"
|
|
110
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-320x50.jpg"
|
|
111
|
+
width: 320
|
|
112
|
+
height: 50
|
|
113
|
+
mime_type: "image/jpeg"
|
|
114
|
+
description: "Mobile banner hero — trail gear close-up"
|
|
115
|
+
|
|
116
|
+
- id: "hero_160x600"
|
|
117
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-160x600.jpg"
|
|
118
|
+
width: 160
|
|
119
|
+
height: 600
|
|
120
|
+
mime_type: "image/jpeg"
|
|
121
|
+
description: "Wide skyscraper hero — vertical trail scene"
|
|
122
|
+
|
|
123
|
+
- id: "hero_master"
|
|
124
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
|
|
125
|
+
width: 1200
|
|
126
|
+
height: 628
|
|
127
|
+
mime_type: "image/jpeg"
|
|
128
|
+
description: "Master hero image — high-res source for any size"
|
|
129
|
+
|
|
130
|
+
text:
|
|
131
|
+
headlines:
|
|
132
|
+
- "Summer Sale — 40% Off All Gear"
|
|
133
|
+
- "Built for the Trail"
|
|
134
|
+
- "Adventure Starts Here"
|
|
135
|
+
descriptions:
|
|
136
|
+
- "Premium outdoor gear tested on the world's toughest trails. Shop the summer collection."
|
|
137
|
+
- "From daypacks to expedition tents, gear that performs when it matters."
|
|
138
|
+
cta:
|
|
139
|
+
- "Shop Now"
|
|
140
|
+
- "Explore the Collection"
|
|
141
|
+
- "Find Your Gear"
|
|
142
|
+
|
|
143
|
+
# Reference content for the creative_template audio_build phase.
|
|
144
|
+
# These values are hardcoded in the storyboard sample_request; this block
|
|
145
|
+
# documents the canonical Acme Outdoor audio creative inputs for adopters
|
|
146
|
+
# authoring audio format specs or runner integrations.
|
|
147
|
+
audio:
|
|
148
|
+
script: "Built for the trail. Acme Outdoor — premium gear for every adventure."
|
|
149
|
+
voice_hint: "narrator-warm"
|
|
150
|
+
|
|
151
|
+
click_url: "https://acmeoutdoor.example/summer-sale"
|
|
152
|
+
|
|
153
|
+
# Inventory list fixtures for property_list / collection_list targeting tests.
|
|
154
|
+
#
|
|
155
|
+
# These reference lists a fictional governance/inventory agent would publish.
|
|
156
|
+
# They let storyboards exercise the full PropertyListReference / CollectionListReference
|
|
157
|
+
# contract without needing a live list server: scenarios point at list_id values
|
|
158
|
+
# and the seller's test engine returns canned contents.
|
|
159
|
+
#
|
|
160
|
+
# Both matching and non-matching sets are provided so a single test fixture
|
|
161
|
+
# covers targeting (buy should include listed inventory) and no-match behaviour
|
|
162
|
+
# (buy references a list that resolves to zero matches in this seller's catalog).
|
|
163
|
+
inventory_targets:
|
|
164
|
+
# --- Matching sets (Acme Outdoor's intended audience) ---
|
|
165
|
+
matching_properties:
|
|
166
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
167
|
+
list_id: "acme_outdoor_allowlist_v1"
|
|
168
|
+
description: "Outdoor lifestyle properties relevant to Acme Outdoor campaigns."
|
|
169
|
+
# Expected contents when the list is fetched via get_property_list.
|
|
170
|
+
expected_identifiers:
|
|
171
|
+
- type: domain
|
|
172
|
+
value: "outdoormagazine.example"
|
|
173
|
+
- type: domain
|
|
174
|
+
value: "hikingtrails.example"
|
|
175
|
+
- type: domain
|
|
176
|
+
value: "campinggear.example"
|
|
177
|
+
- type: domain
|
|
178
|
+
value: "mountaineering.example"
|
|
179
|
+
|
|
180
|
+
matching_collections:
|
|
181
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
182
|
+
list_id: "acme_outdoor_collections_v1"
|
|
183
|
+
description: "Outdoor programming the buyer wants to run alongside."
|
|
184
|
+
# Expected collection entries when fetched via get_collection_list.
|
|
185
|
+
expected_collections:
|
|
186
|
+
- collection_rid: "rid:outdoor:trail_life"
|
|
187
|
+
name: "Trail Life"
|
|
188
|
+
kind: "series"
|
|
189
|
+
genre: "outdoor"
|
|
190
|
+
distribution_ids:
|
|
191
|
+
- type: imdb_id
|
|
192
|
+
value: "tt9100001"
|
|
193
|
+
- collection_rid: "rid:outdoor:summit_stories"
|
|
194
|
+
name: "Summit Stories"
|
|
195
|
+
kind: "series"
|
|
196
|
+
genre: "outdoor"
|
|
197
|
+
distribution_ids:
|
|
198
|
+
- type: imdb_id
|
|
199
|
+
value: "tt9100002"
|
|
200
|
+
|
|
201
|
+
# --- No-match sets (nothing in this seller's catalog matches) ---
|
|
202
|
+
no_match_properties:
|
|
203
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
204
|
+
list_id: "acme_outdoor_no_match_v1"
|
|
205
|
+
description: "Properties outside this seller's inventory — should yield zero matches."
|
|
206
|
+
expected_identifiers:
|
|
207
|
+
- type: domain
|
|
208
|
+
value: "never-sold-here.example"
|
|
209
|
+
- type: domain
|
|
210
|
+
value: "also-not-indexed.example"
|
|
211
|
+
|
|
212
|
+
no_match_collections:
|
|
213
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
214
|
+
list_id: "acme_outdoor_no_match_collections_v1"
|
|
215
|
+
description: "Collections not carried by this seller — should yield zero matches."
|
|
216
|
+
expected_collections:
|
|
217
|
+
- collection_rid: "rid:food:bistro_kitchen"
|
|
218
|
+
name: "Bistro Kitchen"
|
|
219
|
+
kind: "series"
|
|
220
|
+
genre: "food"
|
|
221
|
+
distribution_ids:
|
|
222
|
+
- type: imdb_id
|
|
223
|
+
value: "tt9200001"
|