commit 8e78a76aaa2e94c1965f0a972c63a3171a13a7e8
parent af992bdc9c20dd37767e70413a20035d553b405c
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 9 Oct 2026 21:11:08 -0400
plans: release 22's fix round — the sticky switch, each first-run failure's cause and fix, final counts
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
1 file changed, 28 insertions(+), 0 deletions(-)
diff --git a/plans/release-22.md b/plans/release-22.md
@@ -219,6 +219,34 @@ would render 100+ small slides — not measured). (3) The keyboard-arrival heuri
overview mounted (a keydown anywhere counts). (4) `report.json`'s change summary (revision history) does not name a
slide-field edit ("Other edits"). (5) slides.html's light base only (no dark variant), as report.html.
+#### Fix round, as it went
+
+Branch `r19/shapes-fix`, off `acda58f9`. The specs' first run (export report suite 42/45, umtool article specs
+18/21) and the operator's ruling of 2026-10-09: **the view switch is sticky** — Article | Slides | Overview stays in
+reach while the article scrolls, on desktop and phones, on the export site and in umtool. On the export site the
+switch leaves the report's `<header>` for a strip right after it (`[data-report-views]`, `sticky top-14` under the
+site header, within the article's box; frosted like the site header, no label); in umtool it sticks to the top of
+the reading column (`[data-article-views]`). Every anchor lands below the bars (`[&_[id]]:scroll-mt-32` on the
+export article, `scroll-mt-16` on umtool's blocks and claims). The failures:
+
+- `overview.spec.ts:15` and `slides.spec.ts:39` (the switch in the header scrolled away; a click scrolled to the
+ top, so the head was the place) — fixed by the sticky switch. Under it a second cause showed: the part being read
+ was the last place above the top third, so a jump to a section with a short lead (`#bridge`) and a switch opened
+ its first claim. The line is now the top of the reading area — where a jump lands a place (its
+ `scroll-margin-top`) plus 32 px — in both readers. Then `overview.spec.ts` pressed Enter before ArrowRight's focus
+ move (next frame) had landed; it now waits for the card's focus, as after every other key.
+- `overview.spec.ts:68` (phone) — passes as fixed in `acda58f9`.
+- `article-slides.spec.ts:30` and `:62` — umtool's `ArticleShapes` never rewrote a slides URL naming a place to the
+ slide's hash; it now does, replacing the entry, as `ReportReader` does.
+- `article-evidence.spec.ts:51` — not a regression (the walk is unchanged in release 22): the trace shows `j`
+ pressed ~30 ms before the walk hydrated. The spec repeats the press until the walk moves (safe: `j` at the last
+ citation stays there).
+
+Specs: `slides.spec.ts` asserts the switch in the viewport and the claim below it after the jump to `#claim-3`;
+`article-slides.spec.ts` the same after Esc lands on a section; `reports.test.ts` holds the switch after
+`</header>`, sticky. Export `CHANGELOG.md` one bullet. **Final: export report suite 45/45, umtool article specs
+21/21**, `pnpm --filter export test` 118/118, tsc clean (common, export, umtool).
+
## Rollout
Rebuild and deploy each site with reports (the slides view is in the bundle, and `reports prepare` re-exports to