Skip to content

fix(examples): close last 5 storyboard fixture-dependent failures (#319)#322

Merged
bokelley merged 1 commit intomainfrom
bokelley/storyboard-fixture-fixes
Apr 30, 2026
Merged

fix(examples): close last 5 storyboard fixture-dependent failures (#319)#322
bokelley merged 1 commit intomainfrom
bokelley/storyboard-fixture-fixes

Conversation

@bokelley
Copy link
Copy Markdown
Contributor

Summary

End-to-end against `npx @adcp/client adcp storyboard run` now reports `overall_status: passing` with 47/47 individual steps passing and `controller_detected: true` (up from 36/47 partial after #317).

Three fixes against `examples/seller_agent.py`:

  1. Add four runner-fixture products to `PRODUCTS` — `outdoor_display_q2`, `outdoor_video_q2`, `sports_preroll_q2`, `lifestyle_display_q2`. The `@adcp/client` storyboard YAMLs reference these by ID without an explicit `seed_product` setup step; the seller is expected to know them out of the box. Pricing option IDs (`cpm_standard`, `cpm_guaranteed`) match what the compliance YAMLs send.

  2. Validate `measurement_terms` in `create_media_buy` — reject with `TERMS_REJECTED` when `max_variance_percent < 5` or `measurement_window` is not in `("c3", "c7")`. Source-of-truth is the `measurement_terms_rejected.yaml` storyboard which probes with `c30 + 0%` (rejected path) then retries with `c7 + 10%` (accepted path).

  3. Persist `targeting_overlay` (and friends) on packages — both `create_media_buy` and `update_media_buy` now preserve `targeting_overlay`, `creative_assignments`, `creatives`, and `measurement_terms` on the persisted package state, then surface them on `get_media_buys`. Storyboard `inventory_list_targeting/verify_create_persisted` round-trips `property_list.list_id`; the swap variant exercises the update parity check.

Verification

```
overall_status: passing
total: 47 passed: 45 failed: 0 skipped: 2
controller_detected: True
```

`pytest tests/`: 1978 passed, 15 skipped (full suite).

Next

Once this lands, the storyboard CI job (#309, currently `continue-on-error: true`) is promotable to required. Filing that as a follow-up.

Closes #319

🤖 Generated with Claude Code

End-to-end against npx @adcp/client adcp storyboard run now reports
overall_status: passing with 47/47 individual steps passing and
controller_detected: true (was 36/47 partial after #317).

Three fixes against examples/seller_agent.py:

1. Add four runner-fixture products to PRODUCTS — outdoor_display_q2,
   outdoor_video_q2, sports_preroll_q2, lifestyle_display_q2. The
   @adcp/client storyboard YAMLs reference these by ID without an
   explicit seed_product setup step; the seller is expected to know
   them out of the box. Pricing option IDs (cpm_standard,
   cpm_guaranteed) match what the compliance YAMLs send.

2. Validate measurement_terms in create_media_buy — reject with
   TERMS_REJECTED when max_variance_percent < 5 or measurement_window
   is not in (c3, c7). Source-of-truth is the
   measurement_terms_rejected.yaml storyboard which probes with
   c30 + 0% (rejected path) then retries with c7 + 10% (accepted
   path). Acceptance threshold matches the runner's relaxed shape.

3. Persist targeting_overlay (and friends) on packages — both
   create_media_buy and update_media_buy now preserve
   targeting_overlay, creative_assignments, creatives, and
   measurement_terms on the persisted package state, then surface
   them on get_media_buys. Storyboard
   inventory_list_targeting/verify_create_persisted round-trips
   property_list.list_id; the swap variant exercises the update
   parity check.

Once this lands, the storyboard CI job (#309, currently
continue-on-error: true) is promotable to required.

Closes #319

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit d92cfb1 into main Apr 30, 2026
10 of 12 checks passed
@bokelley bokelley deleted the bokelley/storyboard-fixture-fixes branch April 30, 2026 14:21
bokelley added a commit that referenced this pull request Apr 30, 2026
Brings in main's recent work since the foundation branch forked:

- 046b15e / d92cfb1 — PR #321 + #322 storyboard fixes (the same
  fixes my earlier cherry-pick commit 597d00a brought in; main's
  version supersedes since it includes additional fixture-dependent
  failure closures from #322).
- 4de648e — SigningProvider Protocol (PR #283 / #323).
- d3e1a0f — seller_agent PRODUCTS schema regression test.
- ce4c5df — handler-authoring docs expansion (salesagent migration
  patterns).
- e37930a — release 4.2.0.
- ce7e9ab — seed_creative_format scenario + force_session_status.
- 9244d46 — comply_test_controller dict return fix.

Conflicts resolved:

- examples/seller_agent.py — accepted main's version. Main has the
  PR #321 + #322 fixes plus storyboard fixture products
  (outdoor_display_q2, outdoor_video_q2, sports_preroll_q2, etc.)
  added directly to the PRODUCTS list. Foundation's cherry-pick
  commit 597d00a brought in only PR #321; main has the more
  complete state.

- tests/test_seller_agent_storyboard.py — accepted main's version
  (same rationale: more comprehensive coverage from #321 + #322
  combined).

Merged state verified:
- mypy clean across src/adcp/decisioning/ (13 files)
- ruff clean across src/adcp/decisioning/
- Full suite: 2588 passed, 17 skipped, 1 xfailed (+30 from main's
  added tests)

Foundation PR #316 is now up-to-date with main and CI should clear
on the next run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Apr 30, 2026
Brings in main's recent work since the foundation branch forked:

- 046b15e / d92cfb1 — PR #321 + #322 storyboard fixes (the same
  fixes my earlier cherry-pick commit 597d00a brought in; main's
  version supersedes since it includes additional fixture-dependent
  failure closures from #322).
- 4de648e — SigningProvider Protocol (PR #283 / #323).
- d3e1a0f — seller_agent PRODUCTS schema regression test.
- ce4c5df — handler-authoring docs expansion.
- e37930a — release 4.2.0.
- ce7e9ab — seed_creative_format scenario + force_session_status.
- 9244d46 — comply_test_controller dict return fix.

Conflicts resolved by accepting main's version for
examples/seller_agent.py and tests/test_seller_agent_storyboard.py
— main has the PR #321 + #322 combined state, more complete than
the foundation's earlier cherry-pick.

Merged state: mypy clean, ruff clean, full suite 2588 passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

storyboard: 5 fixture-dependent failures (default product fixtures + measurement_terms + targeting_overlay persistence)

1 participant