Skip to content

Commit 12285bf

Browse files
bokelleyclaude
andcommitted
fix(examples/multi_platform_seller): switch idempotency to unsupported
The new boot-time validator (validate_idempotency_wiring) caught the multi-platform-seller example advertising IdempotencySupported(supported=True) on both child platforms and the PlatformRouter union without any @IdempotencyStore.wrap applied. That's the silent-lie configuration the validator exists to catch — switch the mocks to IdempotencyUnsupported to honestly reflect what they implement. Real adopters with in-memory dedup keep supported=True and wrap their mutating handlers; this example doesn't model that surface. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b9d683e commit 12285bf

3 files changed

Lines changed: 20 additions & 6 deletions

File tree

examples/multi_platform_seller/src/app.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
from adcp.decisioning.capabilities import Account as CapabilitiesAccount
4242
from adcp.decisioning.capabilities import (
4343
Adcp,
44-
IdempotencySupported,
44+
IdempotencyUnsupported,
4545
MediaBuy,
4646
SupportedProtocol,
4747
)
@@ -76,7 +76,11 @@ def build_router() -> PlatformRouter:
7676
specialisms=["sales-guaranteed", "sales-non-guaranteed"],
7777
adcp=Adcp(
7878
major_versions=[3],
79-
idempotency=IdempotencySupported(supported=True, replay_ttl_seconds=86400),
79+
# Router union over two mock platforms — neither wires
80+
# in-memory dedup, so the union honestly advertises
81+
# unsupported. Real adopters wrap mutating handlers with
82+
# @IdempotencyStore.wrap and declare supported=True.
83+
idempotency=IdempotencyUnsupported(supported=False),
8084
),
8185
account=CapabilitiesAccount(supported_billing=["operator"]),
8286
media_buy=MediaBuy(supported_pricing_models=["cpm"]),

examples/multi_platform_seller/src/mock_guaranteed.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from adcp.decisioning.capabilities import Account as CapabilitiesAccount
3131
from adcp.decisioning.capabilities import (
3232
Adcp,
33-
IdempotencySupported,
33+
IdempotencyUnsupported,
3434
MediaBuy,
3535
SupportedProtocol,
3636
)
@@ -131,7 +131,12 @@ class MockGuaranteedPlatform(DecisioningPlatform, SalesPlatform):
131131
specialisms=["sales-guaranteed"],
132132
adcp=Adcp(
133133
major_versions=[3],
134-
idempotency=IdempotencySupported(supported=True, replay_ttl_seconds=86400),
134+
# Mock platform: no in-memory dedup wired. Honest declaration
135+
# over a silent-lie supported=True (the SDK's boot-time
136+
# validator at adcp.decisioning.validate_idempotency catches
137+
# the latter). Real adopters wrap mutating handlers with
138+
# @IdempotencyStore.wrap and declare supported=True.
139+
idempotency=IdempotencyUnsupported(supported=False),
135140
),
136141
account=CapabilitiesAccount(supported_billing=["operator"]),
137142
media_buy=MediaBuy(supported_pricing_models=["cpm"]),

examples/multi_platform_seller/src/mock_non_guaranteed.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from adcp.decisioning.capabilities import Account as CapabilitiesAccount
3333
from adcp.decisioning.capabilities import (
3434
Adcp,
35-
IdempotencySupported,
35+
IdempotencyUnsupported,
3636
MediaBuy,
3737
SupportedProtocol,
3838
)
@@ -118,7 +118,12 @@ class MockNonGuaranteedPlatform(DecisioningPlatform, SalesPlatform):
118118
specialisms=["sales-non-guaranteed"],
119119
adcp=Adcp(
120120
major_versions=[3],
121-
idempotency=IdempotencySupported(supported=True, replay_ttl_seconds=86400),
121+
# Mock platform: no in-memory dedup wired. Honest declaration
122+
# over a silent-lie supported=True (the SDK's boot-time
123+
# validator at adcp.decisioning.validate_idempotency catches
124+
# the latter). Real adopters wrap mutating handlers with
125+
# @IdempotencyStore.wrap and declare supported=True.
126+
idempotency=IdempotencyUnsupported(supported=False),
122127
),
123128
account=CapabilitiesAccount(supported_billing=["operator"]),
124129
media_buy=MediaBuy(supported_pricing_models=["cpm"]),

0 commit comments

Comments
 (0)