@adcp/sdk 7.11.0 → 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/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/testing/storyboard/default-invariants.js +23 -0
- 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/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
id: read_tool_idempotency
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
introduced_in: "3.1"
|
|
4
|
+
title: "Read-tool idempotency_key tolerance"
|
|
5
|
+
category: idempotency
|
|
6
|
+
summary: "Validates that read-only AdCP tasks accept the 3.1 every-request idempotency_key envelope without strict wrapper rejection."
|
|
7
|
+
track: core
|
|
8
|
+
required_tools: [] # protocol-level baseline; read-tool probes gate themselves per step
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
AdCP 3.1 extends the `idempotency_key` request envelope from mutating
|
|
12
|
+
operations to every task request, including read-only tools. Sellers MUST
|
|
13
|
+
tolerate the field on reads in 3.1. Tool wrappers must pass it through their
|
|
14
|
+
envelope normalization layer instead of rejecting it as an unknown
|
|
15
|
+
task-specific input.
|
|
16
|
+
|
|
17
|
+
This storyboard focuses on the 3.1 read-side contract. It sends
|
|
18
|
+
`idempotency_key`, `context`, and `ext` on representative read tools and
|
|
19
|
+
verifies that the agent still returns schema-valid responses with context
|
|
20
|
+
echo intact. The existing `idempotency` storyboard continues to cover
|
|
21
|
+
mutating replay semantics, conflict detection, TTL declaration, and
|
|
22
|
+
`replayed: true`.
|
|
23
|
+
|
|
24
|
+
The final phase intentionally omits `idempotency_key` on a read request.
|
|
25
|
+
During the 3.1 grace window, sellers SHOULD reject this omission but MAY
|
|
26
|
+
accept it for compatibility; therefore the probe is documented here as a
|
|
27
|
+
future 3.2 switch point rather than a hard failure. The 3.2 storyboard cut
|
|
28
|
+
should flip that probe to a required rejection.
|
|
29
|
+
|
|
30
|
+
agent:
|
|
31
|
+
interaction_model: "*" # applies to every agent regardless of protocol or specialism
|
|
32
|
+
examples:
|
|
33
|
+
- "Any AdCP agent that exposes read-only tools"
|
|
34
|
+
|
|
35
|
+
caller:
|
|
36
|
+
role: buyer_agent
|
|
37
|
+
example: "Compliance test harness"
|
|
38
|
+
|
|
39
|
+
prerequisites:
|
|
40
|
+
description: |
|
|
41
|
+
No special seed state is required. Tool-specific read probes are skipped
|
|
42
|
+
when the agent does not advertise the corresponding tool.
|
|
43
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
44
|
+
|
|
45
|
+
phases:
|
|
46
|
+
- id: read_requests_accept_idempotency_key
|
|
47
|
+
title: "Read requests accept idempotency_key"
|
|
48
|
+
narrative: |
|
|
49
|
+
Send representative read requests with the full 3.1 request envelope:
|
|
50
|
+
`idempotency_key`, `context`, and `ext`. Passing these probes confirms
|
|
51
|
+
that task wrappers do not treat read request schemas as closed
|
|
52
|
+
task-specific payloads.
|
|
53
|
+
|
|
54
|
+
steps:
|
|
55
|
+
- id: get_capabilities_with_idempotency_key
|
|
56
|
+
title: "Capabilities read accepts idempotency_key"
|
|
57
|
+
narrative: |
|
|
58
|
+
`get_adcp_capabilities` is the protocol-level read that every agent
|
|
59
|
+
exposes. The request carries a caller-minted `idempotency_key` plus
|
|
60
|
+
`context` and `ext`. The agent must accept the envelope and return a
|
|
61
|
+
normal capabilities response.
|
|
62
|
+
task: get_adcp_capabilities
|
|
63
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
64
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
65
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
66
|
+
comply_scenario: read_tool_idempotency
|
|
67
|
+
stateful: false
|
|
68
|
+
expected: |
|
|
69
|
+
Return capabilities normally. The read wrapper MUST tolerate the
|
|
70
|
+
3.1 every-request envelope fields and echo context unchanged.
|
|
71
|
+
|
|
72
|
+
sample_request:
|
|
73
|
+
idempotency_key: "$generate:uuid_v4#read_tools_3_1_capabilities"
|
|
74
|
+
context:
|
|
75
|
+
correlation_id: "read_tool_idempotency--get_capabilities_with_key"
|
|
76
|
+
ext:
|
|
77
|
+
adcp:
|
|
78
|
+
storyboard: "read_tool_idempotency"
|
|
79
|
+
probe: "capabilities"
|
|
80
|
+
validations:
|
|
81
|
+
- check: response_schema
|
|
82
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
83
|
+
- check: field_present
|
|
84
|
+
path: "supported_protocols"
|
|
85
|
+
description: "Agent declares supported protocols"
|
|
86
|
+
- check: field_present
|
|
87
|
+
path: "context"
|
|
88
|
+
description: "Response echoes back the context object"
|
|
89
|
+
- check: field_value
|
|
90
|
+
path: "context.correlation_id"
|
|
91
|
+
value: "read_tool_idempotency--get_capabilities_with_key"
|
|
92
|
+
description: "Context correlation_id returned unchanged"
|
|
93
|
+
|
|
94
|
+
- id: get_products_with_idempotency_key
|
|
95
|
+
title: "Product discovery read accepts idempotency_key"
|
|
96
|
+
narrative: |
|
|
97
|
+
`get_products` is the canonical media-buy read. Sellers that expose
|
|
98
|
+
it must accept the 3.1 every-request envelope even though the field is
|
|
99
|
+
not part of the task-specific product-discovery payload.
|
|
100
|
+
task: get_products
|
|
101
|
+
requires_tool: get_products
|
|
102
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
103
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
104
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
105
|
+
comply_scenario: read_tool_idempotency
|
|
106
|
+
stateful: false
|
|
107
|
+
expected: |
|
|
108
|
+
Return product discovery results normally. The presence of
|
|
109
|
+
`idempotency_key` and `ext` must not trigger strict request-wrapper
|
|
110
|
+
validation failure.
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
idempotency_key: "$generate:uuid_v4#read_tools_3_1_get_products"
|
|
114
|
+
buying_mode: "brief"
|
|
115
|
+
brief: "Show available advertising products for an outdoor lifestyle campaign."
|
|
116
|
+
account:
|
|
117
|
+
brand:
|
|
118
|
+
domain: "acmeoutdoor.example"
|
|
119
|
+
operator: "pinnacle-agency.example"
|
|
120
|
+
context:
|
|
121
|
+
correlation_id: "read_tool_idempotency--get_products_with_key"
|
|
122
|
+
ext:
|
|
123
|
+
adcp:
|
|
124
|
+
storyboard: "read_tool_idempotency"
|
|
125
|
+
probe: "get_products"
|
|
126
|
+
validations:
|
|
127
|
+
- check: response_schema
|
|
128
|
+
description: "Response matches get-products-response.json schema"
|
|
129
|
+
- check: field_present
|
|
130
|
+
path: "products"
|
|
131
|
+
description: "Response contains a products array"
|
|
132
|
+
- check: field_present
|
|
133
|
+
path: "context"
|
|
134
|
+
description: "Response echoes back the context object"
|
|
135
|
+
- check: field_value
|
|
136
|
+
path: "context.correlation_id"
|
|
137
|
+
value: "read_tool_idempotency--get_products_with_key"
|
|
138
|
+
description: "Context correlation_id returned unchanged"
|
|
139
|
+
|
|
140
|
+
- id: list_accounts_with_idempotency_key
|
|
141
|
+
title: "Account listing read accepts idempotency_key"
|
|
142
|
+
narrative: |
|
|
143
|
+
`list_accounts` is a read-only account discovery surface. The 3.1
|
|
144
|
+
request envelope applies here too; account wrappers must not reject
|
|
145
|
+
`idempotency_key`, `context`, or `ext` as unknown fields.
|
|
146
|
+
task: list_accounts
|
|
147
|
+
requires_tool: list_accounts
|
|
148
|
+
schema_ref: "account/list-accounts-request.json"
|
|
149
|
+
response_schema_ref: "account/list-accounts-response.json"
|
|
150
|
+
doc_ref: "/accounts/task-reference/list_accounts"
|
|
151
|
+
comply_scenario: read_tool_idempotency
|
|
152
|
+
stateful: false
|
|
153
|
+
expected: |
|
|
154
|
+
Return account discovery results normally with a schema-valid
|
|
155
|
+
accounts array and unchanged context echo.
|
|
156
|
+
|
|
157
|
+
sample_request:
|
|
158
|
+
idempotency_key: "$generate:uuid_v4#read_tools_3_1_list_accounts"
|
|
159
|
+
sandbox: true
|
|
160
|
+
pagination:
|
|
161
|
+
max_results: 10
|
|
162
|
+
context:
|
|
163
|
+
correlation_id: "read_tool_idempotency--list_accounts_with_key"
|
|
164
|
+
ext:
|
|
165
|
+
adcp:
|
|
166
|
+
storyboard: "read_tool_idempotency"
|
|
167
|
+
probe: "list_accounts"
|
|
168
|
+
validations:
|
|
169
|
+
- check: response_schema
|
|
170
|
+
description: "Response matches list-accounts-response.json schema"
|
|
171
|
+
- check: field_present
|
|
172
|
+
path: "accounts"
|
|
173
|
+
description: "Response contains an accounts array"
|
|
174
|
+
- check: field_present
|
|
175
|
+
path: "context"
|
|
176
|
+
description: "Response echoes back the context object"
|
|
177
|
+
- check: field_value
|
|
178
|
+
path: "context.correlation_id"
|
|
179
|
+
value: "read_tool_idempotency--list_accounts_with_key"
|
|
180
|
+
description: "Context correlation_id returned unchanged"
|
|
181
|
+
|
|
182
|
+
- id: list_creative_formats_with_idempotency_key
|
|
183
|
+
title: "Creative format discovery read accepts idempotency_key"
|
|
184
|
+
narrative: |
|
|
185
|
+
`list_creative_formats` is the common creative discovery read used by
|
|
186
|
+
both media-buy and creative agents. The wrapper must accept the 3.1
|
|
187
|
+
envelope without rejecting the read request before it reaches the
|
|
188
|
+
handler.
|
|
189
|
+
task: list_creative_formats
|
|
190
|
+
requires_tool: list_creative_formats
|
|
191
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
192
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
193
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
194
|
+
comply_scenario: read_tool_idempotency
|
|
195
|
+
stateful: false
|
|
196
|
+
expected: |
|
|
197
|
+
Return creative formats normally. The presence of `idempotency_key`,
|
|
198
|
+
`context`, and `ext` must not trigger wrapper validation failure.
|
|
199
|
+
|
|
200
|
+
sample_request:
|
|
201
|
+
idempotency_key: "$generate:uuid_v4#read_tools_3_1_list_formats"
|
|
202
|
+
type: "display"
|
|
203
|
+
pagination:
|
|
204
|
+
max_results: 10
|
|
205
|
+
context:
|
|
206
|
+
correlation_id: "read_tool_idempotency--list_formats_with_key"
|
|
207
|
+
ext:
|
|
208
|
+
adcp:
|
|
209
|
+
storyboard: "read_tool_idempotency"
|
|
210
|
+
probe: "list_creative_formats"
|
|
211
|
+
validations:
|
|
212
|
+
- check: response_schema
|
|
213
|
+
description: "Response matches list-creative-formats-response.json schema"
|
|
214
|
+
- check: field_present
|
|
215
|
+
path: "formats"
|
|
216
|
+
description: "Response contains a formats array"
|
|
217
|
+
- check: field_present
|
|
218
|
+
path: "context"
|
|
219
|
+
description: "Response echoes back the context object"
|
|
220
|
+
- check: field_value
|
|
221
|
+
path: "context.correlation_id"
|
|
222
|
+
value: "read_tool_idempotency--list_formats_with_key"
|
|
223
|
+
description: "Context correlation_id returned unchanged"
|
|
224
|
+
|
|
225
|
+
- id: list_creatives_with_idempotency_key
|
|
226
|
+
title: "Creative library read accepts idempotency_key"
|
|
227
|
+
narrative: |
|
|
228
|
+
`list_creatives` covers the creative-library read path. Agents that
|
|
229
|
+
expose it must accept 3.1 envelope fields on the request even when the
|
|
230
|
+
task-specific filters are otherwise empty.
|
|
231
|
+
task: list_creatives
|
|
232
|
+
requires_tool: list_creatives
|
|
233
|
+
schema_ref: "creative/list-creatives-request.json"
|
|
234
|
+
response_schema_ref: "creative/list-creatives-response.json"
|
|
235
|
+
doc_ref: "/creative/task-reference/list_creatives"
|
|
236
|
+
comply_scenario: read_tool_idempotency
|
|
237
|
+
stateful: false
|
|
238
|
+
expected: |
|
|
239
|
+
Return creative library results normally with a schema-valid
|
|
240
|
+
response and unchanged context echo.
|
|
241
|
+
|
|
242
|
+
sample_request:
|
|
243
|
+
idempotency_key: "$generate:uuid_v4#read_tools_3_1_list_creatives"
|
|
244
|
+
account:
|
|
245
|
+
brand:
|
|
246
|
+
domain: "acmeoutdoor.example"
|
|
247
|
+
operator: "pinnacle-agency.example"
|
|
248
|
+
include_snapshot: false
|
|
249
|
+
pagination:
|
|
250
|
+
max_results: 10
|
|
251
|
+
context:
|
|
252
|
+
correlation_id: "read_tool_idempotency--list_creatives_with_key"
|
|
253
|
+
ext:
|
|
254
|
+
adcp:
|
|
255
|
+
storyboard: "read_tool_idempotency"
|
|
256
|
+
probe: "list_creatives"
|
|
257
|
+
validations:
|
|
258
|
+
- check: response_schema
|
|
259
|
+
description: "Response matches list-creatives-response.json schema"
|
|
260
|
+
- check: field_present
|
|
261
|
+
path: "creatives"
|
|
262
|
+
description: "Response contains a creatives array"
|
|
263
|
+
- check: field_present
|
|
264
|
+
path: "context"
|
|
265
|
+
description: "Response echoes back the context object"
|
|
266
|
+
- check: field_value
|
|
267
|
+
path: "context.correlation_id"
|
|
268
|
+
value: "read_tool_idempotency--list_creatives_with_key"
|
|
269
|
+
description: "Context correlation_id returned unchanged"
|
|
270
|
+
|
|
271
|
+
- id: omitted_key_grace_accept_path
|
|
272
|
+
title: "3.1 omitted-key grace window — accept path"
|
|
273
|
+
narrative: |
|
|
274
|
+
Exercise the intentional omission vector on a read request. 3.1 sellers
|
|
275
|
+
SHOULD reject omitted `idempotency_key` values on reads but MAY continue
|
|
276
|
+
to accept them during the migration window. Passing this path records the
|
|
277
|
+
compatibility behavior without failing 3.1 acceptance; the peer reject
|
|
278
|
+
path below records the recommended behavior.
|
|
279
|
+
optional: true
|
|
280
|
+
branch_set:
|
|
281
|
+
id: omitted_key_grace_handled
|
|
282
|
+
semantics: any_of
|
|
283
|
+
|
|
284
|
+
steps:
|
|
285
|
+
- id: get_capabilities_without_idempotency_key_3_1_accept
|
|
286
|
+
title: "Capabilities read without idempotency_key may still succeed in 3.1"
|
|
287
|
+
narrative: |
|
|
288
|
+
The request intentionally omits `idempotency_key` and sets
|
|
289
|
+
`omit_idempotency_key: true` so future runners that auto-inject keys
|
|
290
|
+
for all tasks preserve the missing-key vector. Some 3.1 sellers may
|
|
291
|
+
still accept this request during migration.
|
|
292
|
+
task: get_adcp_capabilities
|
|
293
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
294
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
295
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
296
|
+
comply_scenario: read_tool_idempotency
|
|
297
|
+
omit_idempotency_key: true
|
|
298
|
+
stateful: false
|
|
299
|
+
contributes: true
|
|
300
|
+
expected: |
|
|
301
|
+
3.1 grace-window accept behavior: a seller MAY accept this request
|
|
302
|
+
and return capabilities normally, but SHOULD prepare to reject omitted
|
|
303
|
+
`idempotency_key` on read tools. The 3.2 compliance cut should remove
|
|
304
|
+
this accept branch.
|
|
305
|
+
|
|
306
|
+
sample_request:
|
|
307
|
+
context:
|
|
308
|
+
correlation_id: "read_tool_idempotency--capabilities_omitted_key_grace"
|
|
309
|
+
ext:
|
|
310
|
+
adcp:
|
|
311
|
+
storyboard: "read_tool_idempotency"
|
|
312
|
+
probe: "omitted_key_grace"
|
|
313
|
+
validations:
|
|
314
|
+
- check: response_schema
|
|
315
|
+
description: "Response matches get-adcp-capabilities-response.json schema during the 3.1 omitted-key grace window"
|
|
316
|
+
- check: field_present
|
|
317
|
+
path: "context"
|
|
318
|
+
description: "Response echoes back the context object"
|
|
319
|
+
- check: field_value
|
|
320
|
+
path: "context.correlation_id"
|
|
321
|
+
value: "read_tool_idempotency--capabilities_omitted_key_grace"
|
|
322
|
+
description: "Context correlation_id returned unchanged"
|
|
323
|
+
|
|
324
|
+
- id: omitted_key_grace_reject_path
|
|
325
|
+
title: "3.1 omitted-key grace window — reject path"
|
|
326
|
+
narrative: |
|
|
327
|
+
Exercise the recommended 3.1 behavior for a read request that omits
|
|
328
|
+
`idempotency_key`: reject the request with `INVALID_REQUEST`. Passing
|
|
329
|
+
this path contributes the same branch-set flag as the accept path above,
|
|
330
|
+
so either behavior is conformant during the 3.1 migration window.
|
|
331
|
+
optional: true
|
|
332
|
+
branch_set:
|
|
333
|
+
id: omitted_key_grace_handled
|
|
334
|
+
semantics: any_of
|
|
335
|
+
|
|
336
|
+
steps:
|
|
337
|
+
- id: get_capabilities_without_idempotency_key_3_1_reject
|
|
338
|
+
title: "Capabilities read without idempotency_key may reject in 3.1"
|
|
339
|
+
narrative: |
|
|
340
|
+
The request intentionally omits `idempotency_key` and sets
|
|
341
|
+
`omit_idempotency_key: true`. In 3.1, sellers that already enforce
|
|
342
|
+
the every-request envelope should reject this with `INVALID_REQUEST`.
|
|
343
|
+
In 3.2 this becomes the only conformant branch.
|
|
344
|
+
task: get_adcp_capabilities
|
|
345
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
346
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
347
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
348
|
+
comply_scenario: read_tool_idempotency
|
|
349
|
+
omit_idempotency_key: true
|
|
350
|
+
expect_error: true
|
|
351
|
+
negative_path: payload_well_formed
|
|
352
|
+
stateful: false
|
|
353
|
+
contributes: true
|
|
354
|
+
expected: |
|
|
355
|
+
3.1 grace-window reject behavior: reject the read request with:
|
|
356
|
+
- Error code: INVALID_REQUEST
|
|
357
|
+
- Message indicating idempotency_key is required
|
|
358
|
+
|
|
359
|
+
sample_request:
|
|
360
|
+
context:
|
|
361
|
+
correlation_id: "read_tool_idempotency--capabilities_omitted_key_grace"
|
|
362
|
+
ext:
|
|
363
|
+
adcp:
|
|
364
|
+
storyboard: "read_tool_idempotency"
|
|
365
|
+
probe: "omitted_key_grace"
|
|
366
|
+
validations:
|
|
367
|
+
- check: error_code
|
|
368
|
+
value: "INVALID_REQUEST"
|
|
369
|
+
description: "Missing idempotency_key rejected with INVALID_REQUEST"
|
|
370
|
+
- check: field_present
|
|
371
|
+
path: "context"
|
|
372
|
+
description: "Response echoes back the context object"
|
|
373
|
+
- check: field_value
|
|
374
|
+
path: "context.correlation_id"
|
|
375
|
+
value: "read_tool_idempotency--capabilities_omitted_key_grace"
|
|
376
|
+
description: "Context correlation_id returned unchanged"
|
|
377
|
+
|
|
378
|
+
- id: omitted_key_grace_assertion
|
|
379
|
+
title: "3.1 omitted-key grace window — require handled outcome"
|
|
380
|
+
narrative: |
|
|
381
|
+
Synthetic assertion over the two optional omitted-key branches. In 3.1,
|
|
382
|
+
either success-path compatibility or recommended `INVALID_REQUEST`
|
|
383
|
+
rejection satisfies the migration window. A transport failure, unrelated
|
|
384
|
+
error, or schema-invalid success satisfies neither branch and is
|
|
385
|
+
non-conformant. The 3.2 storyboard cut should collapse this to the
|
|
386
|
+
rejection branch only.
|
|
387
|
+
|
|
388
|
+
steps:
|
|
389
|
+
- id: assert_omitted_key_grace_handled
|
|
390
|
+
title: "Require omitted_key_grace_handled from either path"
|
|
391
|
+
narrative: |
|
|
392
|
+
At least one omitted-key branch must pass: the 3.1 compatibility
|
|
393
|
+
accept path or the 3.1 recommended reject path.
|
|
394
|
+
task: assert_contribution
|
|
395
|
+
comply_scenario: read_tool_idempotency
|
|
396
|
+
stateful: false
|
|
397
|
+
expected: |
|
|
398
|
+
At least one of omitted_key_grace_accept_path or
|
|
399
|
+
omitted_key_grace_reject_path contributed
|
|
400
|
+
`omitted_key_grace_handled`.
|
|
401
|
+
|
|
402
|
+
validations:
|
|
403
|
+
- check: any_of
|
|
404
|
+
allowed_values: ["omitted_key_grace_handled"]
|
|
405
|
+
description: "Agent must either accept the omitted-key read during the 3.1 grace window or reject it with INVALID_REQUEST."
|