QwikDev / QwikDev/qwik

[🐞] Resumed out-of-order segment content cannot be walked or re-rendered from outside

Open
#8,884 0 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.