Skip to content

[Fizz] Continue reporting aborted task errors after a fatal abort#36575

Open
gnoff wants to merge 2 commits into
facebook:mainfrom
gnoff:jstory/abort-delayed-fatal
Open

[Fizz] Continue reporting aborted task errors after a fatal abort#36575
gnoff wants to merge 2 commits into
facebook:mainfrom
gnoff:jstory/abort-delayed-fatal

Conversation

@gnoff
Copy link
Copy Markdown
Collaborator

@gnoff gnoff commented May 29, 2026

Stacked on #36574

Normally, a fatal error transitions the request to CLOSED or CLOSING, which prevents later aborted root tasks from reporting their errors. Errors inside Suspense boundaries can still be reported, but other pending root tasks are hidden once the first one fatally errors.

That behavior is useful for a normal fatal render error, where subsequent work does not need to be processed. During an abort, however, the abort reason is already the source of failure for every unfinished task. Treating the first root task visited during abort cleanup as the only observable fatal error privileges arbitrary task ordering and hides useful information about the unfinished render.

Continue logging errors for pending tasks aborted after the request has already fatally errored, while still only failing the shell once.

Aborting is a gate you can only pass through once. A request that is already aborting, already completed, or already fatalled cannot be aborted a second time. Previously this was generally functionally true but you could contrive sequences where an onError would fire after a render fataled. This change makes it more explicit that this is not semantically correct by bailing out of abort if the request is in a status that cannot be aborted.
@meta-cla meta-cla Bot added the CLA Signed label May 29, 2026
@github-actions github-actions Bot added the React Core Team Opened by a member of the React Core Team label May 29, 2026
@react-sizebot
Copy link
Copy Markdown

react-sizebot commented May 29, 2026

Comparing: f0dfee3...b77cae8

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.js = 6.84 kB 6.84 kB +0.05% 1.88 kB 1.88 kB
oss-stable/react-dom/cjs/react-dom-client.production.js = 614.26 kB 614.17 kB = 108.57 kB 108.52 kB
oss-experimental/react-dom/cjs/react-dom.production.js = 6.84 kB 6.84 kB +0.11% 1.88 kB 1.88 kB
oss-experimental/react-dom/cjs/react-dom-client.production.js = 680.19 kB 680.11 kB = 119.51 kB 119.48 kB
facebook-www/ReactDOM-prod.classic.js = 700.61 kB 700.53 kB = 123.09 kB 123.05 kB
facebook-www/ReactDOM-prod.modern.js = 690.93 kB 690.84 kB = 121.48 kB 121.44 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-server/cjs/react-server.production.js = 150.25 kB 149.93 kB = 26.59 kB 26.43 kB
oss-stable-semver/react-server/cjs/react-server.production.js = 146.77 kB 146.45 kB = 25.81 kB 25.64 kB
oss-stable/react-server/cjs/react-server.production.js = 146.77 kB 146.45 kB = 25.81 kB 25.64 kB
oss-experimental/react-markup/cjs/react-markup.react-server.production.js = 361.78 kB 360.51 kB = 67.31 kB 66.83 kB
oss-experimental/react-markup/cjs/react-markup.react-server.development.js = 685.74 kB 683.27 kB = 121.73 kB 121.17 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 116.90 kB 115.96 kB = 22.71 kB 22.48 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 116.54 kB 115.61 kB = 22.62 kB 22.38 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 115.10 kB 114.17 kB = 22.35 kB 22.11 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.production.js = 115.10 kB 114.17 kB = 22.35 kB 22.11 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 114.75 kB 113.81 kB = 22.25 kB 22.02 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.production.js = 114.75 kB 113.81 kB = 22.25 kB 22.02 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 111.03 kB 110.09 kB = 21.70 kB 21.46 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 109.24 kB 108.30 kB = 21.34 kB 21.10 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.production.js = 109.24 kB 108.30 kB = 21.34 kB 21.10 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js = 130.43 kB 129.29 kB = 26.04 kB 25.69 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js = 130.42 kB 129.28 kB = 26.05 kB 25.70 kB
oss-experimental/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.production.js = 129.37 kB 128.23 kB = 25.83 kB 25.47 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js = 128.63 kB 127.50 kB = 25.68 kB 25.32 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.production.js = 128.63 kB 127.50 kB = 25.68 kB 25.32 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js = 128.62 kB 127.48 kB = 25.68 kB 25.33 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.production.js = 128.62 kB 127.48 kB = 25.68 kB 25.33 kB
oss-stable-semver/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.production.js = 127.57 kB 126.44 kB = 25.46 kB 25.09 kB
oss-stable/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.production.js = 127.57 kB 126.44 kB = 25.46 kB 25.09 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js = 123.50 kB 122.36 kB = 24.89 kB 24.52 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js = 121.71 kB 120.57 kB = 24.52 kB 24.16 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.production.js = 121.71 kB 120.57 kB = 24.52 kB 24.16 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js = 119.43 kB 118.30 kB = 24.32 kB 23.95 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js = 117.64 kB 116.50 kB = 23.94 kB 23.58 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.production.js = 117.64 kB 116.50 kB = 23.94 kB 23.58 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 122.46 kB 121.21 kB = 24.68 kB 24.33 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js = 122.46 kB 121.21 kB = 24.69 kB 24.34 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 120.66 kB 119.42 kB = 24.32 kB 23.96 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.production.js = 120.66 kB 119.42 kB = 24.32 kB 23.96 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js = 120.66 kB 119.42 kB = 24.33 kB 23.97 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.production.js = 120.66 kB 119.42 kB = 24.33 kB 23.97 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 115.52 kB 114.28 kB = 23.56 kB 23.19 kB
facebook-www/ReactFlightServer-prod.classic.js = 104.45 kB 103.32 kB = 21.32 kB 20.95 kB
facebook-www/ReactFlightServer-prod.modern.js = 104.45 kB 103.32 kB = 21.32 kB 20.95 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 113.73 kB 112.48 kB = 23.18 kB 22.80 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.production.js = 113.73 kB 112.48 kB = 23.18 kB 22.80 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 256.85 kB 253.87 kB = 46.13 kB 45.65 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 256.84 kB 253.86 kB = 46.13 kB 45.64 kB
oss-experimental/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js = 255.64 kB 252.66 kB = 45.81 kB 45.33 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 254.76 kB 251.78 kB = 45.70 kB 45.22 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.node.development.js = 254.76 kB 251.78 kB = 45.70 kB 45.22 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 254.75 kB 251.77 kB = 45.70 kB 45.21 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js = 254.75 kB 251.77 kB = 45.70 kB 45.21 kB
oss-stable-semver/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js = 253.55 kB 250.57 kB = 45.38 kB 44.90 kB
oss-stable/react-server-dom-unbundled/cjs/react-server-dom-unbundled-server.node.development.js = 253.55 kB 250.57 kB = 45.38 kB 44.90 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 249.12 kB 246.14 kB = 44.74 kB 44.25 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 247.03 kB 244.05 kB = 44.32 kB 43.82 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.node.development.js = 247.03 kB 244.05 kB = 44.32 kB 43.82 kB
oss-experimental/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 242.35 kB 239.37 kB = 44.10 kB 43.61 kB
oss-stable-semver/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 240.26 kB 237.28 kB = 43.67 kB 43.17 kB
oss-stable/react-server-dom-esm/cjs/react-server-dom-esm-server.node.development.js = 240.26 kB 237.28 kB = 43.67 kB 43.17 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 224.98 kB 222.00 kB = 40.51 kB 40.04 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 224.98 kB 222.00 kB = 40.52 kB 40.04 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 222.89 kB 219.91 kB = 40.09 kB 39.62 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.edge.development.js = 222.89 kB 219.91 kB = 40.09 kB 39.62 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 222.89 kB 219.91 kB = 40.09 kB 39.62 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.edge.development.js = 222.89 kB 219.91 kB = 40.09 kB 39.62 kB
oss-experimental/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 221.34 kB 218.36 kB = 40.03 kB 39.55 kB
oss-experimental/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 220.86 kB 217.88 kB = 39.92 kB 39.44 kB
oss-stable-semver/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 219.23 kB 216.25 kB = 39.61 kB 39.12 kB
oss-stable/react-server-dom-webpack/cjs/react-server-dom-webpack-server.browser.development.js = 219.23 kB 216.25 kB = 39.61 kB 39.12 kB
oss-stable-semver/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 218.76 kB 215.78 kB = 39.51 kB 39.01 kB
oss-stable/react-server-dom-turbopack/cjs/react-server-dom-turbopack-server.browser.development.js = 218.76 kB 215.78 kB = 39.51 kB 39.01 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 217.26 kB 214.28 kB = 39.21 kB 38.73 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 215.17 kB 212.19 kB = 38.78 kB 38.32 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.edge.development.js = 215.17 kB 212.19 kB = 38.78 kB 38.32 kB
oss-experimental/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 213.25 kB 210.27 kB = 38.60 kB 38.14 kB
oss-stable-semver/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 211.15 kB 208.17 kB = 38.19 kB 37.72 kB
oss-stable/react-server-dom-parcel/cjs/react-server-dom-parcel-server.browser.development.js = 211.15 kB 208.17 kB = 38.19 kB 37.72 kB
facebook-www/ReactFlightServer-dev.classic.js = 202.43 kB 199.45 kB = 36.64 kB 36.14 kB
facebook-www/ReactFlightServer-dev.modern.js = 202.43 kB 199.45 kB = 36.64 kB 36.14 kB
oss-experimental/react-server/cjs/react-server-flight.development.js = 150.86 kB 148.48 kB = 27.10 kB 26.69 kB
oss-stable-semver/react-server/cjs/react-server-flight.development.js = 148.77 kB 146.39 kB = 26.64 kB 26.23 kB
oss-stable/react-server/cjs/react-server-flight.development.js = 148.77 kB 146.39 kB = 26.64 kB 26.23 kB
oss-experimental/react-server/cjs/react-server-flight.production.js = 69.20 kB 68.05 kB = 13.86 kB 13.49 kB
oss-stable-semver/react-server/cjs/react-server-flight.production.js = 67.39 kB 66.24 kB = 13.45 kB 13.08 kB
oss-stable/react-server/cjs/react-server-flight.production.js = 67.39 kB 66.24 kB = 13.45 kB 13.08 kB

Generated by 🚫 dangerJS against b77cae8

Normally, a fatal error transitions the request to CLOSED or CLOSING, which prevents later aborted root tasks from reporting their errors. Errors inside Suspense boundaries can still be reported, but other pending root tasks are hidden once the first one fatally errors.

That behavior is useful for a normal fatal render error, where subsequent work does not need to be processed. During an abort, however, the abort reason is already the source of failure for every unfinished task. Treating the first root task visited during abort cleanup as the only observable fatal error privileges arbitrary task ordering and hides useful information about the unfinished render.

Continue logging errors for pending tasks aborted after the request has already fatally errored, while still only failing the shell once.
@gnoff gnoff force-pushed the jstory/abort-delayed-fatal branch from 4cee745 to b77cae8 Compare May 30, 2026 00:00
@gnoff gnoff requested review from eps1lon and unstubbable May 30, 2026 00:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed React Core Team Opened by a member of the React Core Team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants