Problem
Two related media-buy-seller storyboards fail cleanly in both dispatch paths:
media_buy_seller
× Returned format_id round-trips verbatim — the agent cannot substitute
a different format in response to the filter
The substitution-observer invariant: when a buyer sends a format_id in a product-discovery filter, the seller's response MUST echo the same format_id verbatim (not substitute a semantically-similar one). Training-agent product factory currently re-derives format_ids from its own catalog rather than preserving the filter input.
media_buy_seller/creative_fate_after_cancellation
× Request validation failed for sync_creatives:
creatives: Invalid input: expected array, received undefined
Storyboard sends a sync_creatives call during the 'after-cancellation' probe without a creatives array — either the storyboard's sample_request is missing the field, or the handler should tolerate empty/missing creatives as a no-op read for this probe.
Why this matters for 3.0
Format-id substitution is a trust primitive: if a seller silently swaps formats, buyers can't reason about what they're actually buying. Related to #2651 (substitution-safety observation) and #2654 (phase_fragment for repeated substitution phases).
The creative-fate probe exercises the 'creative lifecycle is decoupled from media buy lifecycle' invariant — a core 3.0 contract.
Priority
3.0-nice-to-have. Substitution is a tier-1 trust guarantee but this specific failure is a handler fix, not a spec gap.
Related
Problem
Two related media-buy-seller storyboards fail cleanly in both dispatch paths:
media_buy_sellerThe substitution-observer invariant: when a buyer sends a
format_idin a product-discovery filter, the seller's response MUST echo the sameformat_idverbatim (not substitute a semantically-similar one). Training-agent product factory currently re-derives format_ids from its own catalog rather than preserving the filter input.media_buy_seller/creative_fate_after_cancellationStoryboard sends a
sync_creativescall during the 'after-cancellation' probe without acreativesarray — either the storyboard's sample_request is missing the field, or the handler should tolerate empty/missingcreativesas a no-op read for this probe.Why this matters for 3.0
Format-id substitution is a trust primitive: if a seller silently swaps formats, buyers can't reason about what they're actually buying. Related to #2651 (substitution-safety observation) and #2654 (phase_fragment for repeated substitution phases).
The creative-fate probe exercises the 'creative lifecycle is decoupled from media buy lifecycle' invariant — a core 3.0 contract.
Priority
3.0-nice-to-have. Substitution is a tier-1 trust guarantee but this specific failure is a handler fix, not a spec gap.
Related