Skip to content

e2e: each section starts with Stripe's events going out - #793

Merged
futurepaul merged 1 commit into
masterfrom
claude/e2e-section-releases-stripe
Oct 31, 2026
Merged

futurepaul merged 1 commit into
masterfrom
claude/e2e-section-releases-stripe

Conversation

@futurepaul

Copy link
Copy Markdown
Collaborator

Flake: after billing-page stops early with window.__held.release is not a function, trials fails 7 checks of its own. That happened in queue runs 41151869271 (#741) and 41151870056 (#738), and in #779's 41153845292.

Cause (test): billing-page holds the Stripe fake's webhooks (s.stripe.hold_events(true), billing.rs:1723) for its held return and releases them at :1739. When the section stops between those two lines, the hold stays. trials runs next on the same fake, so its Checkouts never send their webhooks, and every check that waits on a seat fails.

billing-page's own early stop is the module stall. In all three runs, the /settings?pack= page's shell.js imports stopped partway, so the shell never made the held POST. That's a separate fix, being root-caused now.

Fix: each section starts by releasing any Stripe events a section before it left held (Suite::section). On the hosted lane, where there's no fake, nothing happens. No check, wait or limit changes.

Proof: locally, cargo xtask e2e --only billing-page,trials, with billing-page forced to stop right after its hold_events(true):

  • without this change: billing-page's forced failure, then trials' same 7 failures as CI (35 passed, 8 failed);
  • with it: the forced failure only, and trials passes in full (42 passed, 1 failed).

Unforced, billing-page passes 49/0 locally.

🤖 Generated with Claude Code

billing-page holds the Stripe fake's webhooks for its held return. When
it stops early (a module stall on that page, three times in an hour), the
hold stays, and trials, next on the same fake, gets no Checkout webhook:
seven failures of its own that aren't its. Each section now releases any
events a section before it left held.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@alexlwn123 alexlwn123 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pass at 1a41058949ead555c5c04b6a7882ce9dfd36afe0.

The section boundary now clears the Stripe hold and delivers queued events through the existing fake helper, preventing an early billing-page failure from suppressing subsequent trials webhooks. I traced the sequential lane runner, every hold/release site, and the local/hosted/rehearsal fake guards; skipped sections and dry runs remain untouched. The small shared reset is appropriate for this purpose, with no blocking regression found.

Validation: source review and git diff --check HEAD^ HEAD passed. CI check and all four e2e shards are still running; I did not rerun the browser e2e or independently reproduce the fault injection reported in the PR. The external engineering-style document referenced by AGENTS.md is unavailable at its configured path.

@futurepaul
futurepaul added this pull request to the merge queue Oct 31, 2026
Merged via the queue into master with commit ad80e32 Oct 31, 2026
12 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.

2 participants