Repository navigation
webkit: the Scale showcase grid renders zero cells #338
Description
Activity
Two corrections to the "why nobody noticed" section above — the gap is wider than a skipped job.
It is not just that the lane was skipped: the PR lane cannot see this failure at all. The preview smoke runs 50 tests; the production smoke runs 100. The preview job runs chromium only, so a webkit-only break passes every PR gate and then fails after the merge, on production.
Evidence, same commit range:
- Unblock CI, and put the hero's selection summary back on the drawn grid #336's preview smoke:
Running 50 tests using 2 workers→50 passed - main @ d9d9358 production smoke: webkit
showcase: scale grid virtualizesfails on the initial attempt and both retries
It also is not the only webkit failure. That same production run fails
smoke.spec.ts:225 cockpit: filter, edit (guardrail + success), and select+copy under streamingon webkit, three attempts, withlocator.click: Test timeout of 30000ms exceeded. Worth checking whether both have one cause before fixing either.So there are arguably two issues here: the webkit breakage itself, and a preview gate that structurally cannot catch webkit regressions before they reach production.
- Unblock CI, and put the hero's selection summary back on the drawn grid #336's preview smoke:
Cross-linking: #335 tracks the second webkit failure in the same production smoke run —
cockpit: filter, edit (guardrail + success), and select+copy under streaming(smoke.spec.ts:225). Both fail together,2 failed / 96 passed, every main run since #321.Data point for the 'why nobody noticed' section, since it changes the picture slightly: on main the deploy lane was mostly not skipped.
testfailed on exactly one of the six runs I checked (8461c8d0); the other five failed onDeploy → Vercel (production)itself, which means the production smoke ran and reported these two failures each time. So they've been continuously visible on main rather than hidden by a skipped lane.The preview-vs-production project split you recorded is still the reason they escaped PR review — that part holds, and it's the more useful half of the finding.
Production smoke is green on main at
76095113—100 passed (3.3m), webkit included, after #340. Theshowcase: scale gridfailure tracked here no longer reproduces on prod.Leaving the close to you in case the zero-cells diagnosis here points at something you still want to fix on the product side rather than the test side — the green only proves the smoke passes now, not which of the two it was. Closed #335 (the cockpit half) against the same evidence.
Fixed in #343 (merged), and it was a real product regression rather than the environment difference this issue assumed.
Cause:
renderer-dom's row-layout controller builds in slices, scheduling each continuation from inside the previous one, and its fallback usedsetTimeout(task, 0)— nested zero-delay timers, which browsers clamp to ~4ms. Safari ships noscheduler.postTask, so it always took that path.Mount to first painted cell, 2,500 × 500:
first cell timer hops Chromium 13 ms 0 WebKit 263 ms 25 Chromium with postTaskdeleted176–190 ms — WebKit at dcc8c3e7(pre-#321)8–12 ms — The third row is what rules out "WebKit is just slower": same engine, same build, stalled only by which primitive it yields through. The fourth dates it to #321.
The fallback now prefers an unclamped
MessageChannel, the same ladder the row model's cooperative transition already used. WebKit paints in ~15 ms.The gate gap is closed too. The preview smoke ran chromium only (50 tests vs production's 100); it now runs the same
smokescript as production. Confirmed on #343:Running 100 tests, all passing against a live preview deployment.mainis green end to end, production smoke included — the first time since #321.
apps/website/e2e/smoke.spec.ts:508— "showcase: scale grid virtualizes; column layout resizes + resets" — fails on webkit at the assertion that the grid rendered any cells at all:Chromium passes. The section mounts itself lazily via an SSR-safe
useInViewIntersectionObserver, so a webkit-specific observer/mount timing difference is the first place to look; the test doesscrollIntoViewIfNeeded()and waits for both the grid role anddata-pretable-hydratedbefore counting, and the counter's model total (1,250,000) asserts fine just above — so the section is present and hydrated while its body is empty.Pre-existing, not from #336: reproduced on that branch's base with both of its changed files reverted, against a fresh production build.
Why nobody noticed: the Smoke test → Vercel preview job only runs after the deploy jobs, which are skipped whenever the
testjob fails — andtesthas been red onmainsince #321 (fixed in #336). The whole website e2e lane has not run onmainfor several commits.Reproduce: