Skip to content

spec(training-agent): recover storyboard CI floors after 5.8.1 bump (#2667)#2673

Merged
bokelley merged 1 commit into
mainfrom
bokelley/recover-storyboard-floors
Apr 21, 2026
Merged

spec(training-agent): recover storyboard CI floors after 5.8.1 bump (#2667)#2673
bokelley merged 1 commit into
mainfrom
bokelley/recover-storyboard-floors

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

Closes the regression from #2663 where the @adcp/client 5.6→5.8.1 bump dropped legacy storyboard CI from 35 → 27 clean and framework from 21/237 → 19/226. Fixing four training-agent fixture / handler issues recovers both paths past the pre-bump baseline:

  • legacy: 27 → 36 clean / 271 → 295 passing (pre-bump was 35 / 279)
  • framework: 19 → 21 clean / 226 → 241 passing (pre-bump was 21 / 237)

CI floors rebased to the recovery values.

Fixes

server/src/shared/formats.ts — creative format fixtures

Ripple-fixed about a dozen storyboards that call list_creative_formats (most of the creative, sales, and catalog-driven specialisms).

  • catalog_types: ['product']catalog_type: 'product' on sponsored_product and search_shopping. The current catalog-requirements.json schema uses the singular field — plural bypasses the catalog oneOf branch and fails the whole format.
  • dimensions.unit: 'in''inches' on print_full_page. The dimension-unit enum is {px, dp, inches, cm, mm, pt}.
  • asset_type: 'file''url' / 'audio' on print_full_page / radio_spot. The format.assets oneOf has no file branch. URL (with mime_types: ['application/pdf']) is the nearest spec-valid match for a PDF artwork reference; audio fits a radio spot directly.

server/src/training-agent/task-handlers.tshandleGetMediaBuys

get-media-buys-response.json now requires total_budget on every media_buys[] entry. Compute as sum(pkg.budget) across packages (all denominated in the media buy's currency per the core schema).

server/src/training-agent/property-handlers.tshandleValidatePropertyDelivery

validate-property-delivery-response.json is strict (additionalProperties: false) and validation-result.json is too.

  • Drop top-level compliant (not in allowlist; derivable from summary counts).
  • Move per-record violations[] into features[] using the closed enum: feature_id, status: 'failed', explanation.

.gitignore

Exclude /dist/compliance/assertions/ from the tracked /dist/compliance/ tree so tsc output from server/src/compliance/** doesn't leak into the published spec-tarball path.

CI evidence

legacy     → storyboards: 36/56 clean  |  steps: 295 passed | 35 failed | 52 skipped
framework  → storyboards: 21/56 clean  |  steps: 241 passed | 80 failed | 61 skipped

Both exceed the pre-5.8.1 floors without relying on lowered thresholds.

Remaining follow-ups (tracked in #2667)

Not fixed here — each is a discrete training-agent or storyboard issue rather than a schema-shape bug:

  • deterministic_testingUNKNOWN_SCENARIO / INVALID_PARAMS / NOT_FOUND / INVALID_TRANSITION error codes don't match what the test-controller expects under 5.8+ scenario vocabulary.
  • webhook_emission — payload shape, retry-replay, and 9421 signature verification all fail.
  • media_buy_governance_escalation — plan lookup misses and condition-in-approval mismatch.
  • governance_spend_authoritycpm_guaranteed pricing alias missing (seller returns a different pricing_option_id).
  • creative_ad_server — pricing_options in creative response, campaign_hero_video resolution, vendor_cost validation.
  • brand_rights/governance_denied, sales_broadcast_tv webhooks, media_buy_seller/creative_fate_after_cancellation sync_creatives shape, signed_requests verifier-order regression for vectors 015/017/020.
  • sales_retail_media, sales_social, sales_catalog_driven — catalog item count reporting.
  • media_buy_seller/measurement_terms_rejected — expected TERMS_REJECTED not emitted.
  • sales_non_guaranteed — package lookup miss on empty id.

Each of these is a 1-2 line handler fix; attacking one per follow-up PR is safer than batching.

Test plan

  • tsc --project server/tsconfig.json --noEmit — clean
  • npx vitest run server/tests/unit/training-agent.test.ts server/tests/unit/compliance-assertions.test.ts — 375 passing
  • Local server/tests/manual/run-storyboards.ts legacy + framework both exceed pre-bump baselines (captured above)

🤖 Generated with Claude Code

#2666 restored the training-agent responses that the @adcp/client 5.6→5.8.1
bump had broken (creative format fixtures, get_media_buys total_budget,
validate_property_delivery shape) but didn't bump the CI non-regression
floors. Raise the gate to the recovered baselines so future regressions
actually fail CI:

- legacy: 27→36 clean, 271→295 passing (pre-bump was 35/279)
- framework: 19→21 clean, 226→241 passing (pre-bump was 21/237)

Also:

- .gitignore: exclude /dist/compliance/assertions/ from the tracked
  /dist/compliance/ tree so tsc output from server/src/compliance/**
  (the assertion modules landed in #2663) doesn't collide with the
  published spec-tarball path.
- property-handlers.ts: comment explaining why violations[] was moved
  into the closed-shape features[] channel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bokelley bokelley force-pushed the bokelley/recover-storyboard-floors branch from fa0985d to 74c55f5 Compare April 21, 2026 19:21
@bokelley bokelley merged commit c3adda4 into main Apr 21, 2026
14 checks passed
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.

1 participant