From 305c262ff1ee0eab29803cda12bc2d90efd03ca4 Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Fri, 30 Oct 2026 21:26:15 +0100 Subject: [PATCH] docs: record motion plan deviations Co-Authored-By: Claude Opus 5.5 --- docs/superpowers/plans/2026-10-30-v11-motion.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/superpowers/plans/2026-10-30-v11-motion.md b/docs/superpowers/plans/2026-10-30-v11-motion.md index 968068c..84808b0 100644 --- a/docs/superpowers/plans/2026-10-30-v11-motion.md +++ b/docs/superpowers/plans/2026-10-30-v11-motion.md @@ -207,3 +207,11 @@ - [ ] Run it against the dev server on port 3491 (with `STC_DATA_DIR=/tmp/stc-v11-motion`). Look at every frame. - [ ] Run `bun test`, `bun run typecheck`, and the PG run. Check that `bun.lock` and the `package.json` dependencies are unchanged. - [ ] Write the report to `/home/user/STCourses/.superpowers/sdd/2026-10-30-stcourses/v11-motion-report.md`. Commit `chore: motion frame capture script`. + +## Deviations found during execution + +- **`flushSync` on route changes became `v7_startTransition`.** With `flushSync`, the first visit to a lazily loaded route captured an empty page, so the sidebar dropped out and popped back in. Router updates now run in a React transition: the current page stays up until the new route has rendered, then the view transition captures it. +- **`::view-transition { pointer-events: none }` has no effect.** Chrome sends pointer input to the document element while a transition runs. Instead, each transition is kept to the old page's 120 ms fade, and the root group's default 250 ms morph is turned off. Keyboard input is unaffected. +- **`*` does not match `::details-content`.** The reduced-motion block has a separate `*::details-content` rule. +- **Chrome lists no `::details-content` animations in `getAnimations()` and sends no transition events for them.** The fold tests sample the computed height instead. +- **Pre-existing bug: pdf.js 6 documents have no `destroy()`.** Leaving a lesson whose deck had loaded crashed the app. Fixed by destroying the loading task instead.