Execution — fw-10-virtual-list
Steps extracted from CONCEPTS.md. Read the concepts first; this file is the doing.
Record results in observation.md; tick checkpoints in verification.md.
2. Build order
Render 100,000 logical rows with a small DOM window.
- Fixed heights: viewport → visible index range → render window + overscan.
- Absolute positioning or transform offset for the window. Choose deliberately and justify it
from
bi-09. - Dynamic heights: measure rendered rows, cache measurements, correct the estimate.
- Scroll anchoring: keep the visually-anchored row stable when an above-viewport measurement changes.
- Fast scroll: what to show when you outrun measurement.
- Accessibility: what a screen reader sees when only 20 of 100,000 rows exist.
3. Failure Lab
- Measurement thrash. Measure every row every frame. Watch forced synchronous layout
(
bi-08). - Anchor drift. Skip scroll anchoring; watch content jump as heights resolve.
- Overscan zero. Blank rows on fast scroll — the app-level analogue of checkerboarding
(
bi-10). - DOM growth leak. Recycle rows incorrectly so the DOM grows; find it in a heap snapshot.
- Scroll handler on the main thread. Update the window in a
scrollhandler; measure the one-frame lag. Compare anIntersectionObserver/sentinel approach.