Skip to content

Non-seeding storyboard steps can inherit a previous scenario's seeded fixtures — the isolation fix in #5247/#5310 only covers seeding calls #7574

Description

@austinwiltshire

Summary

#5247 (fixed by #5310) established that comply_test_controller seeding calls should be bucketed per-storyboard via a context.correlation_id prefix, since a shared long-running agent otherwise accumulates seeded state across storyboards. That fix works — but only for storyboards that have their own seeding phase. A storyboard whose discovery step is stateful: false and seeds nothing itself has no signal that a new scenario has started, and can silently read whatever a different, earlier storyboard's seeding phase left behind.

Concrete repro

  • Reference seller agent (a demo ADCP seller built on adcp-client-python), pinned @adcp/sdk@9.7.0.
  • A full storyboard run executes available_actions / product_signal_targeting first, each seeding its own fixed-price product via seed_product/seed_pricing_option under its own correlation_id prefix.
  • media_buy_seller/inline_creatives_without_sync's get_products_canonical_format step (stateful: false, no seeding phase of its own) runs later, filtering is_fixed_price: true.
  • products[0] in its response is a fixture left over from an earlier storyboard's seeding phase — not the product this scenario itself expects — because nothing reset the shared products catalog before this read.

Root cause

The correlation_id-prefix convention from #5247's Fix 2 is only consulted at seeding call sites in every reference we could find. Non-seeding graded task calls (get_products, etc.) already carry context.correlation_id with the identical {scenario}--{step} convention — confirmed directly in the pinned 3.1.1 storyboard payloads — but the runner never gives implementations an explicit, unconditional boundary signal to act on.

Proposed fix

Have the runner call an explicit reset_state scenario unconditionally before every storyboard — seeding phase or not — the way #5247's own "Fix 1" originally proposed. This removes the isolation gap at the source rather than depending on every implementation independently noticing and correctly bucketing correlation_id on calls beyond seeding.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingclaude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.compliance-suitepriority:P0Immediate priority: user/revenue/security/reliability bug to work now

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions