- Status: completed
- Goal: Make Website canvas scrolling responsive by removing avoidable DOM and input work from the Web presentation path, while preserving text selection and accessibility.
- Non-goals: replacing the canvas renderer with browser-native scrolling, changing Website content/interaction design, or weakening semantic accessibility.
- The selectable-text layer reuses spans rather than replacing the full DOM layer on each frame.
- A wheel event over selectable text reaches the canvas once, without an injected pointer-move event.
- The semantic DOM reconciler avoids writes for unchanged geometry, attributes, values, and focus state.
- Website showcase thumbnails are WebP assets sized for their rendered cards, with source generation and tests updated.
- Focused Web/backend tests, Website tests/build, and browser smoke pass.
| Area | Owner |
|---|---|
| Text-selection DOM reconciliation and wheel forwarding | moui/render/webgpu_adapter/runtime.js |
| Semantic DOM reconciliation | moui/backend/web/semantics_dom.js |
| Screenshot asset generation and Website asset mapping | scripts/gen-website-showcase-assets.mjs, website/app |
| Product enablement of selectable text | website/web_wasm |
- Add testable, incremental reconciliation for selectable text and remove the redundant synthetic pointer move from wheel forwarding.
- Add property-level semantic DOM reconciliation so scroll frames do not rewrite unchanged DOM state.
- Generate resized WebP showcase thumbnails and update asset/source tests.
- Run focused package, Website, generation, and browser smoke checks; record before/after DOM counts.
| Date | Note |
|---|---|
| 2026-07-18 | Plan created after profiling showed full selectable-text replacement, full semantic DOM writes, and redundant wheel forwarding. |
| 2026-07-18 | Incremental selection/semantic reconciliation, WebP previews, package checks, and browser verification completed. |