Review request: move Calendar's rastrillo imports off the frozen path. Paul approved this on 2026-09-30. Polish audit r3 SUMMARY, item 1. Sheets did the same in #44 (oficina/sheets, main a5c17ab); this follows its recipe, with Calendar's differences called out.
Why. Calendar imported github.com/carlosframework/rastrillo, which stops at v0.23.0, so it never received tokens.css's iOS zoom-on-tap fix. On iOS, every text field in Calendar zoomed the page on its first tap.
Pin. amadan.net/rastrillo/rastrillo at 29e4491 (v0.26.0+8). home/connect already required it, so the build has one amadan rastrillo, not two. Rastrillo main (v0.27's CSP, the time-layout change, migrate.Fn) is left for its own branch. estilo is pinned at main 530cb93, which includes the bar title's touch fix (4fc9be3).
Commits
- d7ac53b: TestNoZoomOnTap (browser tag, run by
make browser). Red on purpose: against origin/main every text control was 13.3 to 14px under a coarse pointer. That covered the door, quick add (opened), the event form and its date comboboxes, reminders, settings, import, the booking-page form and the stranger's booking form. make vet now also vets -tags browser. - edfa3ba: the move. - Every import is rewritten. The CLI is a go.mod
tool, and make migration-check runs go tool rastrillo. make release stamps amadan.net/rastrillo/rastrillo.BuildVersion. - One old-path import stays: native.go's presessions, because rastrillo/native's server still takes the old *sessions.Sessions. TestNoPreMoveRastrillo forbids every other one. TestNeverSessionsUserID now watches both paths. - go tool rastrillo doctor --fix re-copied tokens.css and datetime.js. select.js was already current. - Calendar's differences from Sheets. Calendar does use select.js and datetime.js (the event form, settings' zone), so both stay. static/calendar.js is Calendar's own script (it scrolls to the working day), not rastrillo's. Rastrillo v0.26 vendors a month-grid overlay under the same name, so calendar.js is recorded in vendoredIsMine and doctor leaves it alone. Without the overlay, the date button opens the browser's own picker, as it did on v0.23. Adopting the overlay would mean renaming ours first; that is not in this branch. - rastrillo.js was already estilo's split shim, written by scripts/writeestilo and pinned by TestBusyFilesAreEstilos. Doctor leaves it alone (vendoredIsMine), and the served shim's hash is unchanged before and after. The old combined shim never loads beside busy.js. - Credits are regenerated. - 3de83ef: nativeexchangetest.go covers the bridge in all three ways the app reads a session: local with no Home, local with Home configured, and a Home sign-in. - Exchange: 202 before approval, 404 for a wrong verifier, a new token under the app's cookie name, the same person, and no second exchange. - Expiry and revocation hold on both sides. - Red by mutation: an http origin fails the Home-configured shapes, and sessions minted already expired fail all three. Putting viewer.go back on the old path fails the guard. Output: polish-audit/r3/scripts/migrate-calendar-native-red.txt.
- c974f55: the quick-add box (
[cal-quick-text], font: inherit under a selector heavier than tokens.css's bare textarea) stayed 14px. It now gets max(1rem, 1em) under (pointer: coarse). The red output from after the move is in migrate-calendar-zoom-red.txt. - 570e90c + f46ede6: a regression the upgrade caused, fixed. v0.26's form-foot draws its buttons at
lg. On the stranger's booking form, "Hold this time" and "Pick another time" no longer fit side by side, and the row squeezed them: 2-line labels at 390, and up to 3 lines at 320 (2 before). TestFormFootOnANarrowScreen is red first (migrate-calendar-formfoot-red.txt). The row now wraps ([cal-book-details] > div:has(> button[type="submit"]), because calendar.css may name no rst- selector), and the second button takes its own row.
What the upgrade changes for Calendar
- Touch: text controls are 16px under
(pointer: coarse), and interactive elements get touch-action: manipulation. - Buttons: form-foot and confirm-form buttons are
lg, about 10px taller. This affects the event, settings, import and booking-page forms and the booker's form. - datetime.js (+480 lines): natural-language completion ("5j" offers 5 January/June/July), a clock list on time-only fields, and
aria-haspopup="listbox" on the date button. With no calendar overlay, the button falls back to the native picker, as before. - Partials: native
<meter>/<progress>, rst-input="primary" and the stat band are new. Calendar uses none of them. - Server side: mail honours its context (a 30s fallback when it has no deadline) and sends a Date header, and
auth.Config.SubjectFor is new (unset here). The migrations agree.
Evidence
make ci is green. The known scheduler flake (TestTheTickExpiresHoldsAndWakesForThem) failed once and passed five reruns.make browser is green: the Playwright gates plus OnTap and OnANarrowScreen.- Old database: the old build seeded a DB (5 sealed events, settings, a published booking page) with a real DEK and instance key. On that DB the new release binary migrated nothing (9 skipped). The old session cookie still answered 200, sealed titles and the booking page decrypted, and
/api/version = v0.1.0-32-gf46ede6. make release (linux/arm64) stamps the same. - Screenshots are in
polish-audit/r3/shots/migrate-calendar-{before,after}[-touch]-*.png, at 1440, 390 and 320. They cover the door (sent, error, signed-out), day, week, month and agenda, quick add opened, the event form, page and edit, a date combobox open, settings, calendars, share, import, booking pages and the new-page form, the public booking page, day and details, credits, 404, the account menu, and the busy button. - With a mouse, the only differences are the lg buttons, the datetime aria attribute and the booker's wrapped row. - On touch, small text controls went from 78 to 0, and no page overflows. - Shared chrome check (r2-calendar-check.config.mjs): 786 ok, 0 FAIL. The config's event-form selector became
rst-btn~="primary", because the button is now primary lg.
Not in this branch: moving rastrillo/native's server, rastrillo main, rastrillo's calendar overlay. Two pre-existing issues were seen and left alone: the quick-add panel runs about 15px past the right edge at 390, and TestBrowserWalk (not in any gate) fails at its first sign-in.