Skip to content

fix(marko-virtual): consolidate Marko e2e into one in-package app, fix test - #1243

Merged
piecyk merged 3 commits into
TanStack:mainfrom
piecyk:damian/fix/marko-e2e-setup
Jul 28, 2026
Merged

fix(marko-virtual): consolidate Marko e2e into one in-package app, fix test#1243
piecyk merged 3 commits into
TanStack:mainfrom
piecyk:damian/fix/marko-e2e-setup

Conversation

@piecyk

@piecyk piecyk commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Problem

The Marko example e2e suites fail with Timed out waiting 120000ms from config.webServer, which hides the real error. Two defects, both reproduced:

1. test:e2e had no build ordering. nx.json defined dependsOn: ["^build"] for test:eslint, test:lib, test:types and build — but had no test:e2e entry at all. pnpm test:pr runs test:e2e and build as unordered peers, and the examples depend on @tanstack/marko-virtual, whose marko.json points at ./dist/tags — a build output. When e2e wins the race, the Marko compiler dies loading the taglib:

ENOENT: no such file or directory, scandir '.../packages/marko-virtual/dist/tags'
  at scanTagsDir (...) ([.../packages/marko-virtual/marko.json])

Every page 500s, and Playwright reports only the webServer timeout. With the package built first, 19/19 suites passed — so the tests were fine, the ordering wasn't.

2. The tags build silently emitted nothing. tsBuildInfoFile pointed inside dist — which nx caches as a build output and the files field publishes to npm — and @marko/type-check hardcodes incremental: true. A dist carrying that file but not dist/tags makes every later build a no-op: exit 0, nothing emitted, nx build reporting success while the package's tag entry point stays missing. This is how a tree gets into the state defect 1 then trips over.

Change

One in-package app at packages/marko-virtual/e2e/app (the former option-gates app, promoted), with one Playwright config, one server and one port — replacing 19 example-local suites, 19 dev servers, 19 ports and 19 copies of the config. Same shape react-virtual uses. Vite aliases resolve the adapter and core to source, so the suite needs no build at all; verified with both dist directories wiped.

One deliberate departure from react-virtual: the example fixtures import the example page rather than copying it —

import Page from "../../../../../../../examples/marko/fixed/src/routes/+page.marko"
<Page/>

so the shipped examples remain what the suite covers, and a fixture can't drift from the example it tests. (examples/react/* currently has no e2e coverage at all; this keeps Marko's.) Examples become plain examples: no e2e/, no playwright.config.ts, no @playwright/test.

All 82 tests preserved — 71 example + 11 option gates.

Production build, and two mis-tiered tests

The suite now serves a production build instead of the dev server, matching react-virtual and the usual convention for library repos (framework repos like Vite, Next.js and SvelteKit test both modes because their dev pipeline is the product). Every route is compiled up front, so no test pays a cold Marko compile mid-assertion, and the suite exercises the production SSR/resume path.

Two tests were asserting dev-only behavior. Neither was dropped:

  • debug gate asserted a console.info that core compiles out under process.env.NODE_ENV !== 'production' — the wrong tier twice over, since a console assertion needs no browser. The log proof moved to tests/options.test.ts (jsdom, where the branch is live); the browser gate now asserts the option doesn't disturb rendering.
  • ssr-slice no-JS test asserted the placeholder is hidden, which is only true in dev. In production it stays visible, so the test was documenting behavior users never see. Re-derived against production.

A real flake

The chat specs captured a scroll baseline immediately after a programmatic jump, while the virtualizer was still compensating the offset from fresh measurements (~102px drift) — so "this append did not move the view" raced the settle. Added a scroll-settle wait to both chat specs. Same compensation path as a5417b4. Six consecutive clean runs afterwards.

Also in here

  • react + angular: trace: 'retain-on-failure'; react's port moved off vite's default 5173 (with reuseExistingServer, a stray dev server elsewhere in the tree made the suite pass against the wrong app) plus --strictPort; ../../node_modules/.bin/playwright replaced with a bare playwright (resolves via pnpm's script PATH).
  • .marko-run/routes.d.ts untracked and gitignored — it's generated by marko-run dev|build, and marko-type-check passes without it, including for the API-route examples.

Verification

check result
marko e2e 82 passed, 6 consecutive runs (~44s each, was 19 servers)
react e2e 33 passed
angular e2e 13 passed
test:types, test:knip 29 projects
test:lib 67 passed
build, test:build, test:eslint, test:sherif, test:docs pass

The e2e suite was also run with packages/marko-virtual/dist and packages/virtual-core/dist deleted, to confirm the no-build property holds.

Notes for review

  • CI has no artifact-upload step, so the traces this enables are discarded on CI unless one is added to pr.yml. Happy to include it here if wanted.
  • Left alone deliberately: the examples' marko.json tags-dir still reaches into the package src, so an example copied out of the monorepo (pkg-pr-new publishes ./examples/*/* as templates) won't compile. That's a separate bug from the e2e setup.

🤖 Generated with Claude Code

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm run test:pr.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Summary by CodeRabbit

  • New Features
    • Consolidated the Marko virtualizer browser end-to-end suite into a shared runner spanning examples and scenarios.
    • Added dedicated e2e pages for virtualization options, scroll behavior, measurement, SSR, and windowing.
    • Improved chat “Latest” so the view stays pinned during streamed updates.
  • Bug Fixes
    • Fixed builds so generated distribution tags are always produced reliably for consumers.
  • Chores
    • Removed per-example Playwright setup and documentation from Marko examples, centralizing execution with better failure tracing.
    • Enabled caching for e2e runs in the workspace runner and tightened Playwright server/test configuration in related packages.

@piecyk
piecyk requested a review from a team as a code owner July 28, 2026 12:49
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cdea5c11-9577-4a70-a898-3effd731fdc6

📥 Commits

Reviewing files that changed from the base of the PR and between 815f91b and d18dab0.

📒 Files selected for processing (3)
  • examples/marko/chat-pretext/src/routes/+page.marko
  • packages/marko-virtual/e2e/app/e2e/chat-pretext.spec.ts
  • packages/marko-virtual/e2e/app/e2e/chat.spec.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/marko-virtual/e2e/app/e2e/chat-pretext.spec.ts
  • packages/marko-virtual/e2e/app/e2e/chat.spec.ts

📝 Walkthrough

Walkthrough

The PR consolidates Marko E2E coverage into one shared Playwright app, routes tests to dedicated example fixtures, removes per-example E2E configuration, adds incremental-build cleanup, updates related Nx and tracing configuration, and improves chat latest-message pinning.

Changes

Marko E2E consolidation

Layer / File(s) Summary
Shared E2E app and route fixtures
packages/marko-virtual/e2e/app/*
Adds shared production-preview wiring, source aliases, example wrappers, option-gate pages, and route configuration.
Route-specific browser validation
packages/marko-virtual/e2e/app/e2e/*
Targets dedicated example routes, stabilizes chat scroll assertions, and validates debug and SSR behavior.
Per-example E2E removal
examples/marko/*/package.json, examples/marko/*/tsconfig.json
Removes per-example Playwright scripts and dependencies and excludes E2E inputs from TypeScript projects.
Build and test tooling
packages/marko-virtual/package.json, nx.json, packages/*/playwright.config.ts, .gitignore
Cleans incremental build state, configures E2E caching and outputs, retains failure traces, and ignores generated artifacts.
Chat pinning
examples/marko/chat-pretext/src/routes/+page.marko
Reapplies scrollToEnd() while content grows after initial or toolbar-triggered latest-message pinning.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Playwright
  participant MarkoE2EApp
  participant ExampleFixture
  participant Virtualizer
  Playwright->>MarkoE2EApp: start build and preview
  Playwright->>MarkoE2EApp: navigate to dedicated route
  MarkoE2EApp->>ExampleFixture: render route fixture
  ExampleFixture->>Virtualizer: configure and render virtualized content
  Virtualizer-->>Playwright: expose positioned items and state
Loading

Possibly related PRs

Suggested reviewers: defunkt-dev

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: consolidating Marko e2e into one in-package app and fixing related test issues.
Description check ✅ Passed The description is thorough and includes the required checklist and release-impact information, even if it uses different section headings.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@nx-cloud

nx-cloud Bot commented Jul 28, 2026

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit d18dab0

Command Status Duration Result
nx affected --targets=test:sherif,test:knip,tes... ✅ Succeeded 3m 59s View ↗
nx run-many --target=build --exclude=examples/** ✅ Succeeded 22s View ↗

☁️ Nx Cloud last updated this comment at 2026-07-28 14:16:23 UTC

@pkg-pr-new

pkg-pr-new Bot commented Jul 28, 2026

Copy link
Copy Markdown
More templates

@tanstack/angular-virtual

npm i https://pkg.pr.new/@tanstack/angular-virtual@1243

@tanstack/lit-virtual

npm i https://pkg.pr.new/@tanstack/lit-virtual@1243

@tanstack/marko-virtual

npm i https://pkg.pr.new/@tanstack/marko-virtual@1243

@tanstack/react-virtual

npm i https://pkg.pr.new/@tanstack/react-virtual@1243

@tanstack/solid-virtual

npm i https://pkg.pr.new/@tanstack/solid-virtual@1243

@tanstack/svelte-virtual

npm i https://pkg.pr.new/@tanstack/svelte-virtual@1243

@tanstack/virtual-core

npm i https://pkg.pr.new/@tanstack/virtual-core@1243

@tanstack/vue-virtual

npm i https://pkg.pr.new/@tanstack/vue-virtual@1243

commit: d18dab0

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/marko-virtual/e2e/app/e2e/chat.spec.ts`:
- Around line 52-74: Require multiple consecutive unchanged scrollTop samples in
both waitForScrollSettled helpers, in
packages/marko-virtual/e2e/app/e2e/chat.spec.ts lines 52-74 and
packages/marko-virtual/e2e/app/e2e/chat-pretext.spec.ts lines 52-74. Track the
stable-sample count and resolve only after the shared stability threshold is
reached, preserving the existing polling and timeout behavior.

In `@packages/react-virtual/playwright.config.ts`:
- Around line 3-8: Update the Playwright webServer configuration to disable
reuseExistingServer, or require an app-specific health check before reusing an
existing server; ensure the local test flow does not skip vite preview merely
because port 5273 responds and cannot silently target an unrelated application.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: b0fcd085-be93-44aa-9c3f-2c5adc03745e

📥 Commits

Reviewing files that changed from the base of the PR and between 1323692 and 3be13d1.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (149)
  • .changeset/marko-e2e-consolidation.md
  • .gitignore
  • examples/marko/chat-pretext/.marko-run/routes.d.ts
  • examples/marko/chat-pretext/e2e/README.md
  • examples/marko/chat-pretext/package.json
  • examples/marko/chat-pretext/playwright.config.ts
  • examples/marko/chat-pretext/tsconfig.json
  • examples/marko/chat/.marko-run/routes.d.ts
  • examples/marko/chat/e2e/README.md
  • examples/marko/chat/package.json
  • examples/marko/chat/playwright.config.ts
  • examples/marko/chat/tsconfig.json
  • examples/marko/dynamic/.marko-run/routes.d.ts
  • examples/marko/dynamic/package.json
  • examples/marko/dynamic/playwright.config.ts
  • examples/marko/dynamic/tsconfig.json
  • examples/marko/fixed/.marko-run/routes.d.ts
  • examples/marko/fixed/package.json
  • examples/marko/fixed/playwright.config.ts
  • examples/marko/fixed/tsconfig.json
  • examples/marko/grid/.marko-run/routes.d.ts
  • examples/marko/grid/package.json
  • examples/marko/grid/playwright.config.ts
  • examples/marko/grid/tsconfig.json
  • examples/marko/infinite-scroll/.marko-run/routes.d.ts
  • examples/marko/infinite-scroll/package.json
  • examples/marko/infinite-scroll/playwright.config.ts
  • examples/marko/infinite-scroll/tsconfig.json
  • examples/marko/padding/.marko-run/routes.d.ts
  • examples/marko/padding/package.json
  • examples/marko/padding/playwright.config.ts
  • examples/marko/padding/tsconfig.json
  • examples/marko/pretext/.marko-run/routes.d.ts
  • examples/marko/pretext/package.json
  • examples/marko/pretext/playwright.config.ts
  • examples/marko/pretext/tsconfig.json
  • examples/marko/scroll-padding/.marko-run/routes.d.ts
  • examples/marko/scroll-padding/package.json
  • examples/marko/scroll-padding/playwright.config.ts
  • examples/marko/scroll-padding/tsconfig.json
  • examples/marko/smooth-scroll/.marko-run/routes.d.ts
  • examples/marko/smooth-scroll/package.json
  • examples/marko/smooth-scroll/playwright.config.ts
  • examples/marko/smooth-scroll/tsconfig.json
  • examples/marko/ssr-fetch/.marko-run/routes.d.ts
  • examples/marko/ssr-fetch/package.json
  • examples/marko/ssr-fetch/playwright.config.ts
  • examples/marko/ssr-fetch/tsconfig.json
  • examples/marko/ssr-restore/.marko-run/routes.d.ts
  • examples/marko/ssr-restore/package.json
  • examples/marko/ssr-restore/playwright.config.ts
  • examples/marko/ssr-restore/tsconfig.json
  • examples/marko/ssr-slice/.marko-run/routes.d.ts
  • examples/marko/ssr-slice/package.json
  • examples/marko/ssr-slice/playwright.config.ts
  • examples/marko/ssr-slice/tsconfig.json
  • examples/marko/ssr/.marko-run/routes.d.ts
  • examples/marko/ssr/package.json
  • examples/marko/ssr/playwright.config.ts
  • examples/marko/ssr/tsconfig.json
  • examples/marko/sticky/.marko-run/routes.d.ts
  • examples/marko/sticky/package.json
  • examples/marko/sticky/playwright.config.ts
  • examples/marko/sticky/tsconfig.json
  • examples/marko/table/.marko-run/routes.d.ts
  • examples/marko/table/package.json
  • examples/marko/table/playwright.config.ts
  • examples/marko/table/tsconfig.json
  • examples/marko/variable/.marko-run/routes.d.ts
  • examples/marko/variable/package.json
  • examples/marko/variable/playwright.config.ts
  • examples/marko/variable/tsconfig.json
  • examples/marko/window-ssr-slice/.marko-run/routes.d.ts
  • examples/marko/window-ssr-slice/package.json
  • examples/marko/window-ssr-slice/playwright.config.ts
  • examples/marko/window-ssr-slice/tsconfig.json
  • examples/marko/window/.marko-run/routes.d.ts
  • examples/marko/window/package.json
  • examples/marko/window/playwright.config.ts
  • examples/marko/window/tsconfig.json
  • nx.json
  • packages/angular-virtual/package.json
  • packages/angular-virtual/playwright.config.ts
  • packages/marko-virtual/e2e/app/README.md
  • packages/marko-virtual/e2e/app/e2e/chat-pretext.spec.ts
  • packages/marko-virtual/e2e/app/e2e/chat.spec.ts
  • packages/marko-virtual/e2e/app/e2e/dynamic.spec.ts
  • packages/marko-virtual/e2e/app/e2e/fixed.spec.ts
  • packages/marko-virtual/e2e/app/e2e/grid.spec.ts
  • packages/marko-virtual/e2e/app/e2e/infinite-scroll.spec.ts
  • packages/marko-virtual/e2e/app/e2e/option-gates.spec.ts
  • packages/marko-virtual/e2e/app/e2e/padding.spec.ts
  • packages/marko-virtual/e2e/app/e2e/pretext.spec.ts
  • packages/marko-virtual/e2e/app/e2e/scroll-padding.spec.ts
  • packages/marko-virtual/e2e/app/e2e/smooth-scroll.spec.ts
  • packages/marko-virtual/e2e/app/e2e/ssr-fetch.spec.ts
  • packages/marko-virtual/e2e/app/e2e/ssr-restore.spec.ts
  • packages/marko-virtual/e2e/app/e2e/ssr-slice.spec.ts
  • packages/marko-virtual/e2e/app/e2e/ssr.spec.ts
  • packages/marko-virtual/e2e/app/e2e/sticky.spec.ts
  • packages/marko-virtual/e2e/app/e2e/table.spec.ts
  • packages/marko-virtual/e2e/app/e2e/variable.spec.ts
  • packages/marko-virtual/e2e/app/e2e/window-ssr-slice.spec.ts
  • packages/marko-virtual/e2e/app/e2e/window.spec.ts
  • packages/marko-virtual/e2e/app/marko.json
  • packages/marko-virtual/e2e/app/package.json
  • packages/marko-virtual/e2e/app/playwright.config.ts
  • packages/marko-virtual/e2e/app/src/routes/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/api/reply/+handler.ts
  • packages/marko-virtual/e2e/app/src/routes/cached/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/chat-pretext/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/chat/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/debug/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/dynamic/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/enabled/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/fixed/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/grid/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/infinite-scroll/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/lanes-mode/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/measure-element/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/padding/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/pretext/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/rtl/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/scroll-events/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/scroll-margin/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/scroll-padding/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/smooth-scroll/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/ssr-fetch/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/ssr-restore/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/ssr-slice/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/ssr/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/sticky/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/table/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/variable/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/window-example/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/window-horizontal/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/window-initial-offset/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/window-ssr-slice/+page.marko
  • packages/marko-virtual/e2e/app/src/routes/window/+page.marko
  • packages/marko-virtual/e2e/app/tsconfig.json
  • packages/marko-virtual/e2e/app/vite.config.ts
  • packages/marko-virtual/e2e/option-gates/.marko-run/routes.d.ts
  • packages/marko-virtual/e2e/option-gates/README.md
  • packages/marko-virtual/e2e/option-gates/playwright.config.ts
  • packages/marko-virtual/e2e/option-gates/vite.config.ts
  • packages/marko-virtual/package.json
  • packages/marko-virtual/tests/options.test.ts
  • packages/react-virtual/package.json
  • packages/react-virtual/playwright.config.ts
💤 Files with no reviewable changes (82)
  • examples/marko/infinite-scroll/playwright.config.ts
  • examples/marko/dynamic/playwright.config.ts
  • examples/marko/dynamic/.marko-run/routes.d.ts
  • examples/marko/chat/e2e/README.md
  • examples/marko/pretext/playwright.config.ts
  • examples/marko/ssr-fetch/playwright.config.ts
  • examples/marko/pretext/package.json
  • examples/marko/ssr-fetch/tsconfig.json
  • packages/marko-virtual/e2e/option-gates/vite.config.ts
  • examples/marko/ssr/tsconfig.json
  • packages/marko-virtual/e2e/option-gates/README.md
  • examples/marko/window/playwright.config.ts
  • examples/marko/grid/playwright.config.ts
  • examples/marko/chat-pretext/playwright.config.ts
  • examples/marko/chat-pretext/.marko-run/routes.d.ts
  • examples/marko/fixed/playwright.config.ts
  • examples/marko/chat/tsconfig.json
  • examples/marko/ssr-slice/.marko-run/routes.d.ts
  • examples/marko/sticky/.marko-run/routes.d.ts
  • examples/marko/padding/.marko-run/routes.d.ts
  • examples/marko/table/playwright.config.ts
  • examples/marko/padding/tsconfig.json
  • examples/marko/scroll-padding/playwright.config.ts
  • examples/marko/sticky/tsconfig.json
  • examples/marko/padding/playwright.config.ts
  • examples/marko/infinite-scroll/.marko-run/routes.d.ts
  • examples/marko/window-ssr-slice/package.json
  • examples/marko/window-ssr-slice/tsconfig.json
  • examples/marko/window-ssr-slice/playwright.config.ts
  • examples/marko/table/.marko-run/routes.d.ts
  • examples/marko/chat/playwright.config.ts
  • examples/marko/smooth-scroll/tsconfig.json
  • examples/marko/variable/tsconfig.json
  • examples/marko/scroll-padding/tsconfig.json
  • examples/marko/window-ssr-slice/.marko-run/routes.d.ts
  • examples/marko/chat-pretext/e2e/README.md
  • examples/marko/variable/.marko-run/routes.d.ts
  • examples/marko/ssr-fetch/.marko-run/routes.d.ts
  • examples/marko/smooth-scroll/package.json
  • examples/marko/ssr-restore/tsconfig.json
  • examples/marko/ssr/.marko-run/routes.d.ts
  • examples/marko/ssr-slice/playwright.config.ts
  • examples/marko/ssr-restore/playwright.config.ts
  • examples/marko/chat/package.json
  • examples/marko/pretext/tsconfig.json
  • examples/marko/window/package.json
  • examples/marko/variable/playwright.config.ts
  • packages/marko-virtual/e2e/option-gates/playwright.config.ts
  • examples/marko/ssr-restore/package.json
  • examples/marko/sticky/package.json
  • examples/marko/fixed/.marko-run/routes.d.ts
  • examples/marko/pretext/.marko-run/routes.d.ts
  • examples/marko/ssr/playwright.config.ts
  • examples/marko/chat-pretext/package.json
  • examples/marko/ssr/package.json
  • examples/marko/ssr-slice/package.json
  • examples/marko/grid/tsconfig.json
  • examples/marko/window/tsconfig.json
  • examples/marko/table/package.json
  • examples/marko/fixed/tsconfig.json
  • examples/marko/table/tsconfig.json
  • examples/marko/chat/.marko-run/routes.d.ts
  • examples/marko/ssr-restore/.marko-run/routes.d.ts
  • examples/marko/smooth-scroll/.marko-run/routes.d.ts
  • examples/marko/ssr-fetch/package.json
  • examples/marko/infinite-scroll/tsconfig.json
  • examples/marko/smooth-scroll/playwright.config.ts
  • examples/marko/scroll-padding/.marko-run/routes.d.ts
  • examples/marko/window/.marko-run/routes.d.ts
  • examples/marko/ssr-slice/tsconfig.json
  • examples/marko/variable/package.json
  • examples/marko/sticky/playwright.config.ts
  • examples/marko/scroll-padding/package.json
  • examples/marko/padding/package.json
  • examples/marko/fixed/package.json
  • examples/marko/infinite-scroll/package.json
  • examples/marko/grid/.marko-run/routes.d.ts
  • examples/marko/chat-pretext/tsconfig.json
  • examples/marko/dynamic/tsconfig.json
  • packages/marko-virtual/e2e/option-gates/.marko-run/routes.d.ts
  • examples/marko/dynamic/package.json
  • examples/marko/grid/package.json

Comment thread packages/marko-virtual/e2e/app/e2e/chat.spec.ts
Comment thread packages/react-virtual/playwright.config.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@examples/marko/chat-pretext/src/routes/`+page.marko:
- Around line 195-204: Update the pinPending handling around the visible
state.pinPending branch so it is cleared only after history loading has
completed; when atEnd is reached while prependHistory is still in flight, retain
pinPending and continue issuing v.scrollToEnd() until the delayed prepend/update
finishes, while preserving the existing convergence behavior afterward.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ba4f64c-5318-4723-84ac-97745ac4deab

📥 Commits

Reviewing files that changed from the base of the PR and between 3be13d1 and 815f91b.

📒 Files selected for processing (1)
  • examples/marko/chat-pretext/src/routes/+page.marko

Comment thread examples/marko/chat-pretext/src/routes/+page.marko
@piecyk
piecyk merged commit b4a76ca into TanStack:main Jul 28, 2026
10 checks passed
@github-actions github-actions Bot mentioned this pull request Jul 28, 2026
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.

2 participants