Skip to content

Polish renderer teardown follow-ups#3718

Merged
justin808 merged 1 commit into
mainfrom
fix/3675-renderer-teardown-polish
Jun 7, 2026
Merged

Polish renderer teardown follow-ups#3718
justin808 merged 1 commit into
mainfrom
fix/3675-renderer-teardown-polish

Conversation

@justin808

@justin808 justin808 commented Jun 6, 2026

Copy link
Copy Markdown
Member

Summary

  • Clarify the Pro server-component renderer compatibility comment around DOM validation ordering.
  • Remove redundant wrapper-test cleanup and tighten teardown-race comments.
  • Make the Pro non-native thenable teardown rejection test flush via a timer tick, matching the OSS pattern.

Closes #3675.

Validation

  • gh issue view 3675 --json number,title,body,state,author,comments,url
  • Duplicate search: gh pr list --state all --search "3675 renderer teardown polish" --json number,title,state,url,headRefName
  • pnpm --filter react-on-rails exec jest tests/ClientRenderer.test.ts --runInBand
  • pnpm --filter react-on-rails-pro exec jest tests/ClientSideRenderer.test.ts tests/wrapServerComponentRenderer.client.test.jsx --runInBand
  • pnpm --filter react-on-rails type-check
  • pnpm --filter react-on-rails-pro type-check
  • git diff --check
  • script/ci-changes-detector origin/main fix/3675-renderer-teardown-polish
  • codex review --uncommitted: no actionable defects
  • Pre-commit hook: trailing-newlines, Prettier, ESLint passed (test files emitted ignored-file warnings only).
  • Pre-push hook: no Ruby/Markdown files to lint/check.

Labels

Labels: none. This is a small comment/test polish follow-up with no runtime behavior reordering.

@greptile-apps

greptile-apps Bot commented Jun 6, 2026

Copy link
Copy Markdown

Greptile Summary

This is a pure polish follow-up to PR #3663, addressing nine open review threads with comment rewrites, one redundant test-cleanup removal, and one test-timing robustness fix. No runtime behavior is changed.

  • rendererTeardown.ts / client.tsx: adds a module-level context comment and rewrites the compatibility TODO to name the actual deferred concern (DOM-node lookup/validation ordering) rather than referencing a past PR number.
  • wrapServerComponentRenderer.client.test.jsx: removes the redundant afterEach(cleanupWrappedRendererMocks)beforeEach already resets document.body.innerHTML, so the helper was a no-op.
  • ClientSideRenderer.test.ts: renames TestRendererTestComponent in the thenable rejection test for registry-key consistency, and replaces two sequential await Promise.resolve() microtask flushes with a single setTimeout(0) macrotask flush, matching the OSS pattern and making the assertion less sensitive to Promise-queue depth.

Confidence Score: 4/5

Safe to merge — all changes are confined to comments and test code, with no production logic altered.

The TestRenderer to TestComponent rename was applied to only the one test cited in the follow-up checklist; roughly nine other tests in the same file still declare TestRenderer while registering it under the TestComponent key, leaving the cosmetic inconsistency mostly intact.

packages/react-on-rails-pro/tests/ClientSideRenderer.test.ts — several remaining TestRenderer/TestComponent mismatches were not addressed.

Important Files Changed

Filename Overview
packages/react-on-rails-pro/tests/ClientSideRenderer.test.ts Renames TestRenderer → TestComponent in the thenable rejection test for registry-key consistency, and replaces two back-to-back Promise.resolve() microtask flushes with a single setTimeout(0) macrotask flush for more robust async settlement.
packages/react-on-rails-pro/tests/wrapServerComponentRenderer.client.test.jsx Removes the redundant cleanupWrappedRendererMocks helper and its afterEach hook (beforeEach already resets document.body.innerHTML); updates a test comment to explain the compatibility ordering more precisely.
packages/react-on-rails-pro/src/wrapServerComponentRenderer/client.tsx Comment-only change: clarifies that the deferred concern is DOM-node lookup/validation ordering and adds a TODO with an actionable guard condition for the future improvement.
packages/react-on-rails/src/rendererTeardown.ts Adds a module-level comment explaining why the shared isRendererTeardownResult guard lives in its own file (OSS/Pro reuse without coupling Pro to ClientRenderer internals).
packages/react-on-rails/tests/ClientRenderer.test.ts Comment-only change: rewrites the stale-async-renderer test description to make it clear that setupRailsContext() comes from beforeEach and the test's focus is teardown-race ordering.

Sequence Diagram

sequenceDiagram
    participant Test as Test (thenable rejection)
    participant Renderer as ClientSideRenderer
    participant Teardown as teardown fn (non-native thenable)
    participant Console as console.error

    Test->>Renderer: renderOrHydrateComponent(componentSpec)
    Renderer->>Teardown: registers renderer returns teardown
    Test->>Renderer: unmountAll()
    Renderer->>Teardown: calls teardown()
    Teardown-->>Renderer: returns non-native thenable
    Note over Renderer: Promise.resolve(thenable) calls onRejected synchronously
    Renderer->>Console: .catch() logs error
    Note over Test: await setTimeout(0) flushes all pending microtasks and macrotasks
    Test->>Console: expect(consoleErrorSpy).toHaveBeenCalledWith(...)
Loading

Comments Outside Diff (1)

  1. packages/react-on-rails-pro/tests/ClientSideRenderer.test.ts, line 444-449 (link)

    P2 Incomplete TestRendererTestComponent rename

    The rename was applied to the thenable rejection test (lines 410–415) but the very next test — "rejects with a render error when an async renderer rejects before returning a teardown" — still declares const TestRenderer while registering it as { TestComponent: TestRenderer } (line 449). The same mismatch also appears in roughly eight other tests further down in this file (lines 289/298, 322/327, 348/353, 372/377, 462/469, 487/492, 529/534, 589/596, 612/621). If the goal of the follow-up was to fully eliminate the copy-paste look, those sites need the same treatment.

Reviews (1): Last reviewed commit: "Polish renderer teardown follow-up tests" | Re-trigger Greptile

@claude

claude Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Code Review — PR #3718: Polish renderer teardown follow-ups

Overview

Small but well-scoped follow-up: comment clarifications, one redundant cleanup removal, and a test reliability fix aligning the Pro package with the established OSS pattern. All five files are touched for polish only; no runtime logic changes.

What's Good

setTimeout(resolve, 0) fix (ClientSideRenderer.test.ts)
The previous double-await Promise.resolve() was subtly brittle — non-native thenables routed through Promise.resolve(nonNativeThenable) can require more than two microtask ticks to settle depending on the JS engine version. Switching to a macrotask (setTimeout(resolve, 0)) guarantees all queued microtasks have drained before the assertion, matching the same reasoning already documented in OSS ClientRenderer.test.ts (line ~551). Correct fix.

Redundant afterEach removal (wrapServerComponentRenderer.client.test.jsx)
The deleted cleanupWrappedRendererMocks / afterEach pair only set document.body.innerHTML = '', which beforeEach already does. Removing it avoids double-reset and the dead helper function.

TestRendererTestComponent rename (ClientSideRenderer.test.ts)
The variable is registered under the key TestComponent, so the name now matches its registry identity. The shorthand { TestComponent } is a nice side-effect.

Comment in rendererTeardown.ts
The new doc comment explaining why the module is single-export and what cross-package contract it serves is genuinely useful — previously the only prose was the eslint-disable rationale.

Minor Observations

  • The updated comment in client.tsx adds a TODO gate (only with tests proving existing renderers cannot depend on this ordering). This is accurate, but worth ensuring issue Renderer teardown polish follow-ups from PR #3663 review #3675 or a follow-up ticket explicitly tracks this ordering-improvement debt so it does not go stale.
  • No fake-timer usage detected in ClientSideRenderer.test.ts, so the setTimeout approach is safe for this file.

Verdict

Clean polish PR with no correctness risks. The test fix is the most substantive change and it is correct. LGTM.

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size
react-on-rails/client bundled (gzip) 61.41 KB (0%)
react-on-rails/client bundled (gzip) (time) 61.41 KB (0%)
react-on-rails/client bundled (brotli) 52.63 KB (0%)
react-on-rails/client bundled (brotli) (time) 52.63 KB (0%)
react-on-rails-pro/client bundled (gzip) 62.55 KB (-0.03% 🔽)
react-on-rails-pro/client bundled (gzip) (time) 62.55 KB (-0.03% 🔽)
react-on-rails-pro/client bundled (brotli) 53.65 KB (-0.05% 🔽)
react-on-rails-pro/client bundled (brotli) (time) 53.65 KB (-0.05% 🔽)
registerServerComponent/client bundled (gzip) 71.89 KB (-0.02% 🔽)
registerServerComponent/client bundled (gzip) (time) 71.89 KB (-0.02% 🔽)
registerServerComponent/client bundled (brotli) 61.83 KB (-0.01% 🔽)
registerServerComponent/client bundled (brotli) (time) 61.83 KB (-0.01% 🔽)
wrapServerComponentRenderer/client bundled (gzip) 65.54 KB (-0.01% 🔽)
wrapServerComponentRenderer/client bundled (gzip) (time) 65.54 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) 56.23 KB (0%)
wrapServerComponentRenderer/client bundled (brotli) (time) 56.23 KB (0%)

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Pro Node Renderer Benchmark Summary

Benchmark RPS p50(ms) p90(ms) Status
Pro Node Renderer: simple_eval (non-RSC) 2207.58 ▲0.7% (2191.94) 4.13 ▼0.5% (4.15) 5.28 ▼26.0% (7.14) 200=66229
Pro Node Renderer: react_ssr (non-RSC) 2001.85 ▲4.2% (1921.32) 4.5 ▼4.9% (4.73) 5.92 ▼22.7% (7.66) 200=60060

▲/▼ non-zero change vs baseline · 0.0% exact/near-zero match · 🔴 significant regression · 🟢 significant improvement (tracked measures) · (n) = baseline

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Pro (shard 2/2) Benchmark Summary

Benchmark RPS p50(ms) p90(ms) Status
/empty: Pro 1268.96 ▲3.3% (1227.87) 4.74 ▼19.9% (5.91) 8.35 ▼7.2% (9.0) 200=38332
/ssr_shell_error: Pro 290.68 ▼11.5% (328.57) 20.04 ▼9.4% (22.11) 31.77 ▼10.5% (35.49) 200=8786
/ssr_sync_error: Pro 282.8 ▼13.1% (325.48) 20.56 ▼5.4% (21.74) 53.46 ▲44.1% (37.09) 200=8548
/rsc_component_error: Pro 329.01 ▲0.4% (327.66) 23.66 ▲5.3% (22.47) 38.23 ▲6.3% (35.96) 200=9942
/non_existing_stream_react_component: Pro 297.72 ▼11.2% (335.4) 19.5 ▼7.2% (21.02) 45.91 ▲32.7% (34.59) 200=8997
/server_side_redux_app_cached: Pro 368.43 ▲1.4% (363.22) 21.52 ▲4.1% (20.67) 33.46 ▲4.2% (32.11) 200=11131
/loadable: Pro 314.34 ▲5.2% (298.73) 25.26 ▲2.7% (24.59) 39.46 ▲8.6% (36.35) 200=9497
/apollo_graphql: Pro 126.34 ▼9.0% (138.79) 36.87 ▼27.9% (51.12) 59.14 ▼31.8% (86.72) 200=3847
/console_logs_in_async_server: Pro 2.58 ▼20.5% (3.24) 2118.97 ▼0.1% (2121.95) 2143.84 ▼1.9% (2184.29) 200=94
/stream_error_demo: Pro 283.48 ▼11.7% (321.12) 20.45 ▼6.7% (21.92) 41.93 ▲15.5% (36.29) 200=8569
/stream_async_components: Pro 321.74 ▼1.1% (325.44) 24.22 ▲7.1% (22.61) 36.37 ▼1.7% (37.01) 200=9726
/rsc_posts_page_over_http: Pro 325.86 ▲1.2% (321.92) 23.45 ▲4.1% (22.52) 36.12 ▲0.2% (36.06) 200=9850
/rsc_echo_props: Pro 224.02 ▼0.9% (225.97) 39.53 ▲18.3% (33.43) 52.0 ▲3.8% (50.1) 200=6768
/async_on_server_sync_on_client_client_render: Pro 344.51 ▼1.0% (348.02) 18.51 ▼11.2% (20.85) 31.29 ▼7.5% (33.82) 200=10413
/server_router_client_render: Pro 343.49 ▼0.4% (345.04) 22.54 ▲8.3% (20.82) 32.87 ▲2.7% (32.0) 200=10380
/unwrapped_rsc_route_stream_render: Pro 290.61 ▼12.9% (333.7) 19.72 ▼6.9% (21.17) 54.7 ▲48.7% (36.79) 200=8782
/async_render_function_returns_component: Pro 281.42 ▼14.2% (327.81) 20.56 ▼3.5% (21.3) 37.55 ▲7.1% (35.05) 200=8505
/native_metadata: Pro 343.49 ▲4.5% (328.83) 16.38 ▼26.5% (22.29) 30.89 ▼11.0% (34.71) 200=10382
/hybrid_metadata_streaming: Pro 333.39 ▲1.2% (329.52) 22.8 ▲3.5% (22.02) 35.15 ▼6.5% (37.58) 200=10076
/cache_demo: Pro 326.46 ▲1.4% (321.8) 23.71 ▲2.7% (23.08) 36.27 ▼5.1% (38.22) 200=9865
/client_side_hello_world_shared_store: Pro 350.62 ▲6.6% (328.89) 21.94 ▲0.4% (21.86) 35.48 ▲4.3% (34.02) 200=10596
/client_side_hello_world_shared_store_defer: Pro 345.19 ▲5.2% (328.17) 22.59 ▲1.9% (22.16) 35.2 ▲0.2% (35.12) 200=10428
/server_side_hello_world_shared_store_controller: Pro 284.12 ▲3.4% (274.86) 30.52 ▲15.3% (26.47) 40.4 ▼1.0% (40.8) 200=8584
/server_side_hello_world: Pro 334.78 ▲4.5% (320.27) 23.54 ▲5.3% (22.35) 37.23 ▲5.7% (35.23) 200=10116
/client_side_log_throw: Pro 370.87 ▲2.0% (363.58) 14.98 ▼25.7% (20.15) 28.09 ▼10.1% (31.23) 200=11281
/server_side_log_throw_plain_js: Pro 376.05 ▲2.1% (368.23) 23.39 ▲19.1% (19.64) 31.16 ▼0.4% (31.29) 200=11289
/server_side_log_throw_raise_invoker: Pro 417.85 ▲4.2% (400.85) 20.94 ▲21.4% (17.25) 28.19 ▲0.3% (28.12) 200=12543
/server_side_redux_app: Pro 337.59 ▲4.0% (324.57) 23.6 ▲5.6% (22.36) 36.56 ▲3.2% (35.44) 200=10201
/server_side_redux_app_cached: Pro 370.18 ▲1.9% (363.22) 21.53 ▲4.2% (20.67) 32.36 ▲0.8% (32.11) 200=11185
/render_js: Pro 383.45 ▲4.6% (366.51) 22.54 ▲13.4% (19.87) 31.26 ▼3.5% (32.39) 200=11585
/pure_component: Pro 355.47 ▲8.4% (327.82) 22.13 ▲0.2% (22.09) 35.02 ▼6.4% (37.42) 200=10739
/turbolinks_cache_disabled: Pro 366.65 ▲2.1% (359.04) 15.02 ▼25.0% (20.04) 28.92 ▼8.0% (31.44) 200=11083
/xhr_refresh: Pro 296.3 ▲7.7% (275.13) 26.69 ▲2.0% (26.16) 39.05 ▲0.6% (38.84) 200=8959
/broken_app: Pro 348.41 ▲3.0% (338.24) 22.76 ▲3.3% (22.03) 35.77 0.0% (35.75) 200=10528
/server_render_with_timeout: Pro 342.04 ▲2.0% (335.34) 23.15 ▲4.8% (22.09) 33.01 ▼2.3% (33.77) 200=10335

▲/▼ non-zero change vs baseline · 0.0% exact/near-zero match · 🔴 significant regression · 🟢 significant improvement (tracked measures) · (n) = baseline

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Core Benchmark Summary

Benchmark RPS p50(ms) p90(ms) Status
/: Core 2.87 ▲1.8% (2.82) 2058.8 ▼23.4% (2686.92) 2437.48 ▼31.1% (3538.13) 200=95
/client_side_hello_world: Core 708.6 ▲7.8% (657.45) 11.28 ▲21.8% (9.26) 19.88 ▼9.5% (21.96) 200=21404
/client_side_rescript_hello_world: Core 679.76 ▼0.1% (680.15) 4.34 ▼53.2% (9.26) 16.97 ▼19.8% (21.16) 200=20676
/client_side_hello_world_shared_store: Core 477.3 ▼25.3% (639.32) 9.79 ▲0.3% (9.76) 13.84 ▼38.8% (22.61) 200=14518
/client_side_hello_world_shared_store_controller: Core 484.45 ▼22.1% (621.53) 11.84 ▲20.4% (9.83) 18.43 ▼19.6% (22.93) 200=14637
/client_side_hello_world_shared_store_defer: Core 693.22 ▲8.9% (636.62) 9.26 ▼6.1% (9.86) 22.81 ▲4.5% (21.82) 200=20941
/server_side_hello_world_shared_store: Core 15.07 ▲24.7% (12.08) 551.92 ▼14.3% (644.1) 764.27 ▼7.2% (823.58) 200=462
/server_side_hello_world_shared_store_controller: Core 14.89 ▲22.2% (12.18) 571.88 ▼8.2% (623.05) 740.68 ▼10.8% (830.61) 200=457
/server_side_hello_world_shared_store_defer: Core 12.49 ▲3.2% (12.1) 471.58 ▼25.1% (629.62) 678.42 ▼19.8% (846.28) 200=385
/server_side_hello_world: Core 30.44 ▲24.3% (24.48) 278.37 ▼9.9% (308.98) 315.44 ▼18.4% (386.37) 200=928
/server_side_hello_world_hooks: Core 24.02 ▼2.1% (24.53) 251.18 ▼17.9% (306.13) 330.74 ▼14.7% (387.85) 200=730
/server_side_hello_world_props: Core 22.97 ▼6.0% (24.43) 270.83 ▼15.6% (320.7) 366.19 ▼5.2% (386.31) 200=699
/client_side_log_throw: Core 529.38 ▼19.0% (653.58) 8.79 ▼8.2% (9.57) 12.53 ▼37.0% (19.89) 200=16000
/server_side_log_throw: Core 24.7 ▲2.6% (24.06) 186.49 ▼43.0% (327.14) 259.05 ▼34.2% (393.41) 200=758
/server_side_log_throw_plain_js: Core 24.75 ▲1.5% (24.38) 237.7 ▼22.5% (306.8) 401.63 ▲3.1% (389.67) 200=753
/server_side_log_throw_raise: Core 30.37 ▲23.8% (24.54) 278.92 ▼9.3% (307.53) 317.73 ▼18.3% (389.09) 3xx=924
/server_side_log_throw_raise_invoker: Core 820.72 ▲6.1% (773.28) 7.95 ▼6.7% (8.52) 15.63 ▼4.3% (16.33) 200=24794
/server_side_hello_world_es5: Core 23.79 ▼0.3% (23.86) 251.47 ▼19.3% (311.77) 390.95 0.0% (390.76) 200=723
/server_side_redux_app: Core 29.24 ▲22.3% (23.92) 202.51 ▼37.5% (324.18) 319.22 ▼19.4% (395.84) 200=893
/server_side_hello_world_with_options: Core 30.53 ▲23.9% (24.64) 277.22 ▼11.5% (313.26) 314.88 ▼18.9% (388.29) 200=932
/server_side_redux_app_cached: Core 752.25 ▲17.5% (640.1) 11.37 ▲9.5% (10.38) 16.86 ▼9.0% (18.54) 200=22575
/client_side_manual_render: Core 720.09 ▲4.4% (689.45) 6.99 ▼24.6% (9.28) 15.47 ▼19.0% (19.09) 200=21901
/render_js: Core 25.3 ▼0.8% (25.5) 236.4 ▼21.3% (300.37) 306.76 ▼17.0% (369.79) 200=770
/react_router: Core 22.51 ▼2.2% (23.01) 266.76 ▼21.9% (341.57) 424.67 ▲4.1% (407.75) 200=685
/pure_component: Core 31.05 ▲24.9% (24.87) 274.53 ▼12.4% (313.44) 313.51 ▼19.7% (390.35) 200=944
/css_modules_images_fonts_example: Core 30.49 ▲27.5% (23.91) 279.39 ▼9.8% (309.8) 314.35 ▼19.5% (390.58) 200=930
/turbolinks_cache_disabled: Core 729.26 ▲10.1% (662.57) 7.09 ▼26.5% (9.65) 15.39 ▼17.9% (18.74) 200=22035
/rendered_html: Core 30.27 ▲25.1% (24.2) 198.25 ▼37.7% (318.05) 304.63 ▼21.5% (388.12) 200=925
/xhr_refresh: Core 15.5 ▲21.7% (12.74) 548.25 ▼8.4% (598.36) 692.18 ▼15.5% (819.16) 200=475
/react_helmet: Core 29.76 ▲22.5% (24.3) 284.7 ▼10.3% (317.39) 330.34 ▼16.6% (396.08) 200=906
/broken_app: Core 24.49 ▲1.7% (24.09) 241.02 ▼23.2% (313.9) 338.99 ▼12.7% (388.22) 200=747
/image_example: Core 21.36 ▼10.6% (23.89) 288.32 ▼9.6% (319.02) 382.7 ▼1.6% (388.96) 200=650
/turbo_frame_tag_hello_world: Core 519.07 ▼28.4% (724.8) 11.01 ▲25.7% (8.76) 21.63 ▲24.1% (17.43) 200=15682
/manual_render_test: Core 696.23 ▲5.0% (662.97) 8.9 ▼5.5% (9.41) 18.81 ▼2.3% (19.26) 200=21037

▲/▼ non-zero change vs baseline · 0.0% exact/near-zero match · 🔴 significant regression · 🟢 significant improvement (tracked measures) · (n) = baseline

@github-actions

github-actions Bot commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Pro (shard 1/2) Benchmark Summary

Benchmark RPS p50(ms) p90(ms) Status
/: Pro 190.11 ▲7.9% (176.23) 43.26 ▲2.9% (42.04) 61.18 ▼2.7% (62.85) 200=5747
/error_scenarios_hub: Pro 309.95 ▼11.7% (350.95) 18.42 ▼8.4% (20.1) 23.07 ▼26.6% (31.44) 200=9428
/ssr_async_error: Pro 347.16 ▲4.1% (333.39) 25.16 ▲20.3% (20.91) 35.4 ▲3.3% (34.28) 200=10489
/ssr_async_prop_error: Pro 344.22 ▲6.3% (323.82) 22.59 ▲1.7% (22.21) 36.99 ▲0.9% (36.67) 200=10402
/non_existing_react_component: Pro 362.12 ▲5.0% (345.01) 21.64 ▲5.7% (20.48) 34.7 ▼2.0% (35.41) 200=10942
/non_existing_rsc_payload: Pro 378.36 ▲4.9% (360.65) 20.49 ▲0.9% (20.3) 33.68 ▼3.6% (34.93) 200=11432
/cached_react_helmet: Pro 388.74 ▲6.0% (366.83) 20.12 ▲3.3% (19.49) 29.72 ▼2.5% (30.47) 200=11746
/cached_redux_component: Pro 409.02 ▲5.9% (386.19) 13.54 ▼30.2% (19.39) 26.5 ▼16.1% (31.59) 200=12440
/lazy_apollo_graphql: Pro 160.81 ▲7.2% (150.06) 45.21 ▼6.5% (48.37) 73.69 ▼8.8% (80.81) 200=4861
/redis_receiver: Pro 107.09 ▲23.1% (86.96) 63.13 ▼7.5% (68.22) 112.08 ▼23.8% (147.0) 200=3219,3xx=23
/stream_shell_error_demo: Pro 347.47 ▲5.8% (328.37) 22.41 ▲8.4% (20.68) 33.66 ▼2.3% (34.45) 200=10503
/test_incremental_rendering: Pro 346.3 ▲2.8% (336.84) 18.46 ▼13.3% (21.29) 30.61 ▼13.6% (35.44) 200=10466
/rsc_posts_page_over_redis: Pro 108.74 ▲4.4% (104.13) 71.26 ▲12.0% (63.62) 108.06 ▼1.8% (110.0) 200=3288
/async_on_server_sync_on_client: Pro 338.69 ▲7.4% (315.32) 23.08 ▲2.6% (22.5) 34.47 ▼14.5% (40.32) 200=10236
/server_router: Pro 355.1 ▲8.1% (328.49) 21.3 ▲0.6% (21.17) 33.51 ▼2.5% (34.38) 200=10733
/unwrapped_rsc_route_client_render: Pro 403.76 ▲8.0% (373.83) 18.55 ▼4.6% (19.44) 28.45 ▼4.7% (29.85) 200=12204
/async_render_function_returns_string: Pro 356.27 ▲5.4% (337.88) 21.89 ▲5.2% (20.81) 34.96 ▲1.4% (34.49) 200=10764
/async_components_demo: Pro 174.29 ▼13.5% (201.39) 28.83 ▼21.4% (36.66) 37.37 ▼27.4% (51.47) 200=5305
/stream_native_metadata: Pro 297.39 ▼11.1% (334.44) 19.47 ▼7.9% (21.13) 47.6 ▲36.6% (34.84) 200=8989
/rsc_native_metadata: Pro 335.26 ▲3.8% (323.05) 22.56 ▲0.1% (22.55) 35.55 ▼0.6% (35.76) 200=10133
/client_side_hello_world: Pro 354.96 ▼0.7% (357.64) 8.5 ▼57.1% (19.83) 18.8 ▼38.7% (30.68) 200=10817
/client_side_hello_world_shared_store_controller: Pro 298.87 ▼11.4% (337.48) 19.29 ▼9.0% (21.21) 42.62 ▲29.1% (33.02) 200=9031
/server_side_hello_world_shared_store: Pro 294.64 ▲3.7% (284.15) 27.39 ▲5.5% (25.97) 40.7 ▲3.9% (39.19) 200=8901
/server_side_hello_world_shared_store_defer: Pro 300.46 ▲5.1% (285.84) 26.67 ▲3.2% (25.83) 39.97 ▲5.2% (38.01) 200=9081
/server_side_hello_world_hooks: Pro 356.58 ▲3.4% (344.89) 20.67 ▼1.3% (20.94) 33.73 ▼5.1% (35.55) 200=10779
/server_side_log_throw: Pro 342.57 ▲0.3% (341.61) 22.82 ▲5.5% (21.62) 34.19 ▼1.2% (34.59) 200=10355
/server_side_log_throw_raise: Pro 677.34 ▲4.5% (648.05) 11.5 ▲1.4% (11.34) 17.24 ▼6.9% (18.51) 3xx=20463
/server_side_hello_world_es5: Pro 357.12 ▲5.9% (337.16) 21.81 ▲2.1% (21.36) 33.17 ▼5.1% (34.96) 200=10795
/server_side_hello_world_with_options: Pro 341.62 ▲3.3% (330.68) 25.79 ▲17.8% (21.89) 34.68 ▼0.1% (34.72) 200=10271
/client_side_manual_render: Pro 340.09 ▼6.5% (363.56) 14.01 ▼28.9% (19.71) 20.28 ▼33.4% (30.43) 200=10349
/react_router: Pro 419.37 ▲7.6% (389.76) 16.24 ▼8.9% (17.83) 32.2 ▲8.7% (29.62) 200=12681
/css_modules_images_fonts_example: Pro 362.66 ▲7.6% (336.99) 21.55 ▼0.8% (21.71) 34.72 ▲3.3% (33.6) 200=10958
/rendered_html: Pro 361.88 ▲6.5% (339.78) 21.85 ▲2.5% (21.31) 33.54 ▲1.4% (33.09) 200=10933
/react_helmet: Pro 355.97 ▲7.6% (330.95) 22.13 ▼1.1% (22.38) 35.73 ▲6.8% (33.44) 200=10755
/image_example: Pro 296.66 ▼9.2% (326.6) 19.56 ▼13.2% (22.52) 63.16 ▲80.6% (34.97) 200=8965
/posts_page: Pro 64.6 ▼88.6% (564.6) 88.46 ▲143.1% (36.4) 147.18 ▲185.4% (51.58) 200=1959

▲/▼ non-zero change vs baseline · 0.0% exact/near-zero match · 🔴 significant regression · 🟢 significant improvement (tracked measures) · (n) = baseline

@justin808

Copy link
Copy Markdown
Member Author

Current status: all visible checks are complete with no failures (39 success, 2 skipped), but the PR is still blocked by REVIEW_REQUIRED because it has no formal approving review yet. I will squash-merge once an approval lands and the merge state clears.

@justin808 justin808 merged commit ccc7609 into main Jun 7, 2026
41 checks passed
@justin808 justin808 deleted the fix/3675-renderer-teardown-polish branch June 7, 2026 05:55
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.

Renderer teardown polish follow-ups from PR #3663 review

1 participant