[🐞] Resumed out-of-order segment content cannot be walked or re-rendered from outside
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 22.1k
- Forks
- 1.4k
- Avg merge
- 1d 10h
- Merged PRs (30d)
- 52
Description
Which component is affected?
Qwik Runtime
Describe the bug
After resume, vnodes materialized for out-of-order segment content are parentless. vNodeLocate on an element inside a delivered segment returns a vnode with no parent and no slotParent, so any upward walk (context resolution, author resolution) dies at the segment boundary. Re-rendering a correctly resolved ancestor does not reconcile the segment content either: the region goes blank.
Observed while testing <ErrorBoundary> reset (PR #8745): with the boundary inside a <Suspense> under out-of-order streaming, a real-browser reset click resolves the author, marks it dirty, and the re-render produces an empty region. The same fixture recovers under in-order streaming. Verified this is not #8876: adding an in-author shell above the <Suspense> does not change the outcome, and the author's q:renderFn resolves.
Evidence (unit harness, chain walk up from a button inside delivered segment content):
- in-order: 14 hops, reaches
<html> - out-of-order: 1 hop,
parent: false,slotParent: false
Reproduction
Pinned (skipped) in packages/qwik/src/core/tests/error-boundary.spec.tsx: "out-of-order SSR resume: reset through a Suspense + Slot-projecting wrapper re-executes the children". The e2e reset-family routes (reset-wrapped, reset-reerror, reset-wrapped-key) pin outOfOrder: false for the same reason.
System Info
Qwik v2, build/v2 lineage (PR #8745 branch)
Additional Information
Any feature that walks up or re-renders across resumed segment content hits this; ErrorBoundary reset is the first to need it.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with packages/qwik/src/core/tests/error-boundary.spec.tsx and the pinned test "out-of-order SSR resume: reset through a Suspense + Slot-projecting wrapper re-executes the children". Compare the in-order and out-of-order chain walks, then check the reset-family e2e routes that pin outOfOrder: false. Done means resumed segment content can be walked to its ancestors and an ErrorBoundary reset re-renders the region instead of leaving it blank.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, web-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100