Skip to content

Refuse re-entering a finished transaction; attribute the flush loop guard (#3140) - #3148

Closed
ryansolid wants to merge 1 commit into
fix/ambient-transaction-capturefrom
fix/dead-transition-stamps
Closed

ryansolid wants to merge 1 commit into
fix/ambient-transaction-capturefrom
fix/dead-transition-stamps

Conversation

@ryansolid

@ryansolid ryansolid commented Aug 31, 2026

Copy link
Copy Markdown
Member

Summary

Companion to #3143 (merged — @snowfluke's clear of _transition stamps at commit), completing #3140. Stacked on #3145.

Test plan

@changeset-bot

changeset-bot Bot commented Aug 31, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: fb08fe4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 11 packages
Name Type
@solidjs/signals Patch
test-integration Patch
@solidjs/web Patch
solid-js Patch
@solidjs/babel-plugin Patch
@solidjs/compiler Patch
@solidjs/html Patch
@solidjs/h Patch
@solidjs/universal Patch
@solidjs/element Patch
@solidjs/diagnostics Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

…uard (#3140)

Companion to #3143 (stamps cleared when pending values commit): a dead
_transition reference can still reach initTransition from outside the commit
path — merged _done forwarding chains, async settles racing completion — and
setSignal re-opens a node's stamped transaction before the value-equal bail,
so re-activating the corpse spun the drain loop (dev threw the loop guard,
production hung the tab). initTransition now refuses a transaction whose
chased _done chain ends in true, as a bare return: redirecting to a fresh
batch would re-arm the loop with a new identity each pass (measured by the
reporter).

The dev loop guard now reports what kept the loop alive — scheduled work vs
an active transition, done-state, queue counts, last staged node. The corpse
signature reads 'done=true, pending=0'. Dev-only, tree-shaken from prod.

White-box pins for both layers; one size budget ratcheted 26.1 -> 26.15 KB
(~25 B across this and #3141).

Co-authored-by: Cursor <cursoragent@cursor.com>
@ryansolid
ryansolid force-pushed the fix/dead-transition-stamps branch from 5971afb to fb08fe4 Compare August 31, 2026 07:56
@ryansolid
ryansolid force-pushed the fix/ambient-transaction-capture branch from 7b61904 to 0d3e2d1 Compare August 31, 2026 07:56
@ryansolid ryansolid changed the title Clear transaction stamps at commit and refuse re-entering a finished transaction (#3140) Refuse re-entering a finished transaction; attribute the flush loop guard (#3140) Aug 31, 2026
@ryansolid
ryansolid deleted the branch fix/ambient-transaction-capture August 31, 2026 09:40
@ryansolid ryansolid closed this Aug 31, 2026
@ryansolid

Copy link
Copy Markdown
Member Author

Landed directly on next as a cherry-pick (GitHub closed this PR instead of retargeting when its stacked base branch was deleted with #3145's merge). Content unchanged; signals suite green (1437 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