We investigated the tanstack-solid-start-e2e-serialization-adapters:test:e2e timeout on the "SSR serialization adapters โบ stream" test and found no code change is required. The PR diff doesn't touch any of the SSR streaming/serialization code paths (packages/router-core/src/ssr/serializer/*) that this test exercises โ the changes are limited to Zod import style, router-plugin's code-splitting schema, and a patch-level seroval bump. Re-running the task with the code unchanged produced a clean pass (5/5, including "stream"), confirming this was a transient timing flake rather than a regression introduced by this PR.
Self-Healing CI
No source changes were made because the evidence pointed away from a deterministic, code-caused failure:
The failing test, "SSR serialization adapters โบ stream", times out waiting for a value that is only produced by a deferred/streamed promise (
Suspense+Await, resolved after a 1ssetTimeout). The sibling "data-only" and "nested" tests, which serialize the samecar/fooadapters through the initial (non-streamed) payload, both passed โ isolating the problem to the streaming path specifically, not to the serialization adapters themselves.The PR's actual content (Zod import-style changes, router-plugin code-splitting schema compilation, Rspack metadata-skip logic, and a
seroval^1.6.2โ^1.6.7bump) does not touch any of the files that implement SSR streaming (packages/router-core/src/ssr/serializer/RawStream*.ts,ssr-server.ts,client.ts, etc.). There is no line in the diff that plausibly explains a hang in promise-stream delivery.Re-running the exact task against the unmodified worktree produced a full pass, including the previously timed-out "stream" test, in about 9 seconds โ well under the 30s timeout that had been hit. A genuine regression would be expected to reproduce deterministically; it did not.
The task's flakiness rate (3.6%) is low but non-zero, consistent with an occasional slow render/hydration cycle rather than a hard break.
Given all of this, introducing a code change here (e.g. touching the seroval version or the streaming serializer) would not be justified by any concrete evidence, and could mask the real, unrelated cause of the original CI failure. The safer and correct action was to leave the code as-is and flag the failure as transient.