Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .changeset/storyboard-uuid-aliased-idempotency-keys.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"adcontextprotocol": patch
---

fix(compliance): UUID-aliased idempotency_keys across remaining storyboard scenarios

Extends the [#4218](https://github.com/adcontextprotocol/adcp/pull/4218) precedent (`measurement_terms_rejected`) to the rest of the suite. 15 storyboard steps across 9 scenarios still shipped hardcoded `idempotency_key` literals on state-mutating tasks (`create_media_buy`, `sync_creatives`, `sync_plans`, `update_media_buy`). The runner shifts dynamic `start_time` substitutions forward to keep buys future-dated, so against a long-running seller deployment those static keys collide cross-run with the same key + a different canonical body, arming the spec-mandated `IDEMPOTENCY_CONFLICT` (or, when the seller's emit shape changed between runs, replaying a now-spec-non-compliant cached payload — the production failure mode that surfaced this).

Switch every remaining literal to `$generate:uuid_v4#<scenario>_<step>` so each storyboard run mints fresh keys and never collides with stale cached state. Affected scenarios: `creative_fate_after_cancellation` (5), `governance_approved`, `governance_conditions`, `governance_denied`, `governance_denied_recovery` (3), `invalid_transitions`, `inventory_list_no_match`, `inventory_list_targeting`, `pending_creatives_to_start`.

Closes #4230.
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "creative-fate-setup-create-buy-v1"
idempotency_key: "$generate:uuid_v4#creative_fate_after_cancellation_create_buy"
start_time: "2026-09-01T00:00:00Z"
end_time: "2026-09-30T23:59:59Z"
packages:
Expand Down Expand Up @@ -175,7 +175,7 @@ phases:
assignments:
- creative_id: "acme_reuse_banner_001"
package_id: "$context.package_id"
idempotency_key: "creative-fate-setup-sync-v1"
idempotency_key: "$generate:uuid_v4#creative_fate_after_cancellation_sync_creative_with_assignment"
context:
correlation_id: "creative_fate--sync_creative_with_assignment"
context_outputs:
Expand Down Expand Up @@ -257,7 +257,7 @@ phases:
media_buy_id: "$context.media_buy_id"
canceled: true
cancellation_reason: "Creative-fate scenario: releasing assignment to verify library persistence."
idempotency_key: "creative-fate-cancel-v1"
idempotency_key: "$generate:uuid_v4#creative_fate_after_cancellation_update_media_buy_canceled"
context:
correlation_id: "creative_fate--update_media_buy_canceled"
validations:
Expand Down Expand Up @@ -340,7 +340,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "creative-fate-second-buy-v1"
idempotency_key: "$generate:uuid_v4#creative_fate_after_cancellation_create_second_buy"
start_time: "2026-10-01T00:00:00Z"
end_time: "2026-10-31T23:59:59Z"
packages:
Expand Down Expand Up @@ -406,7 +406,7 @@ phases:
assignments:
- creative_id: "acme_reuse_banner_001"
package_id: "$context.second_package_id"
idempotency_key: "creative-fate-reassign-v1"
idempotency_key: "$generate:uuid_v4#creative_fate_after_cancellation_reassign_creative"
context:
correlation_id: "creative_fate--reassign_creative"
validations:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ phases:
expected: |
The governance agent acknowledges the plan with a plan_id.
sample_request:
idempotency_key: "comply-gov-approved-sync-plans-v1"
idempotency_key: "$generate:uuid_v4#governance_approved_sync_plans"
plans:
- plan_id: "comply-gov-approved-plan"
brand:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ phases:
expected: |
The governance agent acknowledges the plan with a plan_id.
sample_request:
idempotency_key: "comply-gov-conditions-sync-plans-v1"
idempotency_key: "$generate:uuid_v4#governance_conditions_sync_plans"
plans:
- plan_id: "comply-gov-conditions-plan"
brand:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ phases:
expected: |
The governance agent acknowledges the plan with a plan_id.
sample_request:
idempotency_key: "comply-gov-denied-sync-plans-v1"
idempotency_key: "$generate:uuid_v4#governance_denied_sync_plans"
plans:
- plan_id: "comply-gov-denied-plan"
brand:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ phases:
expected: |
The governance agent acknowledges the plan.
sample_request:
idempotency_key: "comply-gov-recovery-sync-plans-v1"
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_sync_plans"
plans:
- plan_id: "comply-gov-recovery-plan"
brand:
Expand Down Expand Up @@ -184,7 +184,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "gov-recovery-initial-denied-v1"
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_denied"
start_time: "2026-04-01T00:00:00Z"
end_time: "2026-06-30T23:59:59Z"
packages:
Expand Down Expand Up @@ -229,7 +229,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "gov-recovery-retry-approved-v1"
idempotency_key: "$generate:uuid_v4#governance_denied_recovery_create_media_buy_retry"
start_time: "2026-04-01T00:00:00Z"
end_time: "2026-06-30T23:59:59Z"
packages:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "invalid-transitions-setup-v1"
idempotency_key: "$generate:uuid_v4#invalid_transitions_create_buy"
start_time: "2026-08-01T00:00:00Z"
end_time: "2026-08-31T23:59:59Z"
packages:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "inventory-list-no-match-v1"
idempotency_key: "$generate:uuid_v4#inventory_list_no_match_create_buy"
start_time: "2026-07-01T00:00:00Z"
end_time: "2026-09-30T23:59:59Z"
packages:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ phases:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
sandbox: true
idempotency_key: "inventory-list-targeting-create-v1"
idempotency_key: "$generate:uuid_v4#inventory_list_targeting_create_buy"
start_time: "2026-07-01T00:00:00Z"
end_time: "2026-09-30T23:59:59Z"
packages:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ phases:
brand:
domain: "acmeoutdoor.example"
operator: "pinnacle-agency.example"
idempotency_key: "pending-creatives-transition-v1"
idempotency_key: "$generate:uuid_v4#pending_creatives_to_start_create_buy_no_creatives"
start_time: "2026-08-01T00:00:00Z"
end_time: "2026-08-31T23:59:59Z"
packages:
Expand Down
Loading