fix: storyboard floor drift — v6 sync_event_sources/log_event + negative-path markers + asap-timing IO gate#4715
Merged
Merged
Conversation
…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>
This was referenced May 18, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Main was running at the exact 69-clean floor for
/saleswith 4 storyboards real-failing — any flake onmedia_buy_seller/audience_buy_flow's phantom-rejection step dropped it below floor. Three independent fixes:TrainingSalesPlatformwas missingsyncEventSources+logEvent. SDK framework only advertises platform methods that exist, sosync_event_sources/log_eventsteps inevent_dedup_flowandperformance_buy_flowwere silently skipped — leaving downstreamcreate_media_buysteps rejected as "not registered." Wired both through to the v5 handlers with brand_domain threaded fromctx.account.ctx_metadata(same pattern as existingsyncAudiences).expect_error: truemissing on phantom-rejection steps inaudience_buy_flowandperformance_buy_flow. Both submit acreate_media_buywith an intentionally-unregistered id and assert the rejection'serror.field; the SDK runner needs the marker to invert pass/fail. Addedexpect_error: true+negative_path: payload_well_formed, mirroringinvalid_transitions.proposal_finalize_asap_timingrejected withIO_REQUIRED. Scenario claimedio_acceptancewas "intentionally omitted because requires_signature is false on this proposal" — but the training agent's seeded proposal carriesrequires_signature: true. Addedcontext_outputsforio_idextraction and includedio_acceptanceon the asap create step. Discriminating assertion is the asapstart_timeform, not the IO gate.After fixes,
/saleslifts from 69→73 clean (350 passing). Floors bumped with +1 clean buffer: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)
dependency_impairment+dependency_impairment_cardinality(feat: 3.1.0 follow-ups — impairment_propagation, swap recovery, cardinality #4685/docs+compliance: terminal-buy carve-out (#4635) + dependency-impairment storyboard (#2860) #4677): need full impairment tracking in TA — creative-status transitions don't propagate tomedia_buy.impairments[], swap-assignment doesn't clear stale entries. Feature work.signed_requests-strict-required/strict-forbidden: SDK grader'scovers_content_digest: 'either'permissiveness rule doesn't account for vectors that are structurally incompatible with arequired-mode (orforbidden-mode) verifier. SDK-side fix or expandedskipVectorslist.Test plan
bash scripts/run-storyboards-matrix.sh— all 6 tenants pass new floorstsc --noEmit -p server/tsconfig.jsonclean🤖 Generated with Claude Code