Skip to content

fix: storyboard floor drift — v6 sync_event_sources/log_event + negative-path markers + asap-timing IO gate#4715

Merged
bokelley merged 2 commits into
mainfrom
bokelley/husky-floor-drift
May 18, 2026
Merged

fix: storyboard floor drift — v6 sync_event_sources/log_event + negative-path markers + asap-timing IO gate#4715
bokelley merged 2 commits into
mainfrom
bokelley/husky-floor-drift

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

Main was running at the exact 69-clean floor for /sales with 4 storyboards real-failing — any flake on media_buy_seller/audience_buy_flow's phantom-rejection step dropped it below floor. Three independent fixes:

  • v6 TrainingSalesPlatform was missing syncEventSources + logEvent. SDK framework only advertises platform methods that exist, so sync_event_sources / log_event steps in event_dedup_flow and performance_buy_flow were silently skipped — leaving downstream create_media_buy steps rejected as "not registered." Wired both through to the v5 handlers with brand_domain threaded from ctx.account.ctx_metadata (same pattern as existing syncAudiences).
  • expect_error: true missing on phantom-rejection steps in audience_buy_flow and performance_buy_flow. Both submit a create_media_buy with an intentionally-unregistered id and assert the rejection's error.field; the SDK runner needs the marker to invert pass/fail. Added expect_error: true + negative_path: payload_well_formed, mirroring invalid_transitions.
  • proposal_finalize_asap_timing rejected with IO_REQUIRED. Scenario claimed io_acceptance was "intentionally omitted because requires_signature is false on this proposal" — but the training agent's seeded proposal carries requires_signature: true. Added context_outputs for io_id extraction and included io_acceptance on the asap create step. Discriminating assertion is the asap start_time form, not the IO gate.

After fixes, /sales lifts from 69→73 clean (350 passing). Floors bumped with +1 clean buffer:

Tenant Old New Observed
signals 70:111 74:111 75
sales 69:315 72:340 73
governance 69:151 73:151 74
creative 69:169 73:169 74
creative-builder 66:146 70:146 71
brand 69:96 73:96 74

Reviewed by code-reviewer (safe to merge, no blockers) and ad-tech-protocol-expert (spec-conformant, preserves grading intent).

Known-failing follow-ups (not in this PR)

Test plan

  • bash scripts/run-storyboards-matrix.sh — all 6 tenants pass new floors
  • tsc --noEmit -p server/tsconfig.json clean
  • Pre-commit (unit tests + typecheck) green at push time
  • Pre-push storyboard matrix green at push time

🤖 Generated with Claude Code

bokelley and others added 2 commits May 18, 2026 04:19
…t, fix negative-path markers, re-baseline floors

Main was at 69-clean for /sales with 4 storyboards real-failing. Three independent fixes:

- v6 TrainingSalesPlatform was missing syncEventSources + logEvent; SDK only
  advertises platform methods that exist, so sync_event_sources steps were
  silently skipped and downstream create_media_buy rejected as "not registered"
  in event_dedup_flow + performance_buy_flow. Threaded brand_domain through
  same as syncAudiences.
- Phantom-rejection steps in audience_buy_flow and performance_buy_flow lacked
  expect_error: true + negative_path markers (mirroring invalid_transitions).
- proposal_finalize_asap_timing rejected with IO_REQUIRED because TA seeds
  proposals with requires_signature: true; added context_outputs to extract
  io_id and included io_acceptance on the asap create step, keeping the IO
  gate satisfied so start_time form is what's tested.

Floors lifted with +1 clean buffer for flake tolerance.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…l catalog

Drift test caught it. Adding the methods to v6-sales-platform.ts in the prior
commit advertises them via tools/list; the static catalog used by the drift
check needs to mirror that advertisement.

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.

1 participant