Background
Surfaced after #3996 lands the storyboard fixture fix from #3990 onto 3.0.x.
Before the fix, the `create_media_buy` step in `sales_guaranteed/index.yaml` used `context_outputs[0].path: "media_buy_id"`, which resolved against the immediate A2A submitted-arm response — a step that fails earlier with `capture_path_not_resolvable`, masking everything downstream.
After the fix (`task_completion.media_buy_id`), the runner correctly polls `tasks/get` for the terminal artifact, the call actually executes against the test agent, and we hit the next bug: the test agent's product catalog doesn't carry `sports_preroll_q2_guaranteed` or `primetime_30s_mf`. Both storyboard dispatch modes fail identically:
```
× create_media_buy: PRODUCT_NOT_FOUND: Package 0: Product not found: sports_preroll_q2_guaranteed
× create_media_buy: PRODUCT_NOT_FOUND: Package 0: Product not found: primetime_30s_mf
```
On `main`, the equivalent storyboard run on PR #3990 passes — so the seeding works there. Something diverged between `main`'s and 3.0.x's training-agent fixture loading or the `controller_seeding` pathway.
What this issue tracks
Investigate why the `fixtures.products` block in `static/compliance/source/specialisms/sales-guaranteed/index.yaml` (which lists both `sports_preroll_q2_guaranteed` and the one referenced via `primetime_30s_mf` in `requires_scenarios`) doesn't reach the training agent's product catalog on 3.0.x storyboard runs. Likely candidates:
- 3.0.x's `server/src/training-agent/` fixture loader has drifted from the storyboard-schema's `fixtures.products` shape `main` uses.
- The `controller_seeding: true` pathway in the test-kit changed between branches.
- The test-kit `test-kits/acme-outdoor.yaml` has different product wiring on 3.0.x.
Once seeding works, `sales_guaranteed` should pass on 3.0.x's storyboard CI the same way it does on `main`.
Refs
Note on 3.0.x storyboard CI baseline
This is one of 11 storyboards currently failing on 3.0.x's storyboard CI. PR #3893 was admin-merged with the same 11-fail baseline two days ago, so the failures predate this issue — `sales_guaranteed` is the one whose failure mode #3996 changes (capture-path → product-not-found). The other 10 are pre-existing baseline drift on 3.0.x and merit a separate sweep / threshold ratchet.
🤖 Generated with Claude Code
Background
Surfaced after #3996 lands the storyboard fixture fix from #3990 onto 3.0.x.
Before the fix, the `create_media_buy` step in `sales_guaranteed/index.yaml` used `context_outputs[0].path: "media_buy_id"`, which resolved against the immediate A2A submitted-arm response — a step that fails earlier with `capture_path_not_resolvable`, masking everything downstream.
After the fix (`task_completion.media_buy_id`), the runner correctly polls `tasks/get` for the terminal artifact, the call actually executes against the test agent, and we hit the next bug: the test agent's product catalog doesn't carry `sports_preroll_q2_guaranteed` or `primetime_30s_mf`. Both storyboard dispatch modes fail identically:
```
× create_media_buy: PRODUCT_NOT_FOUND: Package 0: Product not found: sports_preroll_q2_guaranteed
× create_media_buy: PRODUCT_NOT_FOUND: Package 0: Product not found: primetime_30s_mf
```
On `main`, the equivalent storyboard run on PR #3990 passes — so the seeding works there. Something diverged between `main`'s and 3.0.x's training-agent fixture loading or the `controller_seeding` pathway.
What this issue tracks
Investigate why the `fixtures.products` block in `static/compliance/source/specialisms/sales-guaranteed/index.yaml` (which lists both `sports_preroll_q2_guaranteed` and the one referenced via `primetime_30s_mf` in `requires_scenarios`) doesn't reach the training agent's product catalog on 3.0.x storyboard runs. Likely candidates:
Once seeding works, `sales_guaranteed` should pass on 3.0.x's storyboard CI the same way it does on `main`.
Refs
Note on 3.0.x storyboard CI baseline
This is one of 11 storyboards currently failing on 3.0.x's storyboard CI. PR #3893 was admin-merged with the same 11-fail baseline two days ago, so the failures predate this issue — `sales_guaranteed` is the one whose failure mode #3996 changes (capture-path → product-not-found). The other 10 are pre-existing baseline drift on 3.0.x and merit a separate sweep / threshold ratchet.
🤖 Generated with Claude Code