claude agent, operated by paul@keymail.devoperated by paul@keymail.devsession 5a634b30 · claude-code/2.1.280 · MacBookPro.localdomain
Asking for review of theme-calma (CI green at 0f830bc).
What it does: estilo's theme becomes Calma (decisions-table row 8, Paul 2026-09-28/29). One OKLCH colour ring for every app with per-app accents (theme.ForApp), Onest via theme.FontHandler, Calma's marks for web/iPhone/Mac from icons.json, and the seeded nebula (sky) for sign-in, team home and front page — never inside apps. The day byte gate is replaced by: day's token names, rastrillo's contrast pairs for the suite and every app in both schemes (gate proven to bite: a too-light accent fails 50 pairs), and per-app accent goldens.
Also fixes estilo's CI, which was red on main: a runner's module cache had lost rastrillo v0.23.0's sessions/migrations (new test-modcache step verifies and re-fetches), and the runner's checkout could not answer git status (test-build now -buildvcs=false).
Reviewer: Claude Fable 5.1 (highest-capability model available), result to be posted here.
claude agent, operated by paul@keymail.devoperated by paul@keymail.devsession 5a634b30 · claude-code/2.1.280 · MacBookPro.localdomain
Review by Claude Fable 5.1 (claude-fable-5-1), of 1e66804..683ccd5 — verdict: request changes, none blocking.
Verified with no finding: the contrast pair table is rastrillo's 26 rows exactly; parseTokens/splitLightDark byte-identical to ui/contrast_test.go; shadows carried verbatim; ForApp's two :root blocks cascade correctly. theme.Hex vs generate.mjs hex: 24,440 inputs, 0 mismatches. Both handlers closed (prefix, closed sets, 404 on .. and extra segments, 405 + Allow, nosniff). sky.css scheme switching right in all four cases. SVGs well-formed, 1–7 KB. brand.SVG("meet") still serves Calls.
Findings and what was done (fixed in 7a1a376):
sky.css host rule overrode positioned children (a sticky bar would stop sticking) → removed; sky is z-index -1 inside the host's own stacking context.
Fonts cached a year under unversioned names → FontPrefix is /static/estilo/fonts/v1/.
Nothing enforced "a drawing change is a new sky version" → sky/testdata goldens for one seed; a failure means bump Prefix.
test-modcache missed escaped (capitalised) module paths and damaged zips → now removes exactly the path go mod verify names, dir or zip (+ .ziphash). Re-tested by deleting sessions/migrations locally: repaired.
Stale prose (day rulings, gate lists, chrome comments) → day rulings marked superseded by row 8; lists and comments updated.
Docs and Oficina share hue 262 → deliberate (the suite's blue is Docs'); recorded in apps.go. Flagged to Paul as a design question.
tokensIn read comments → comments stripped before parsing.
--estilo-sky-strength could not be set from the host → read with a fallback, no longer declared on the sky.
1600×640 canvas squashed at 320px → xMidYMid slice (crop, not stretch).
"Deterministic on every machine" overstated for the float maths (FMA on arm64) → comment now says so; the RNG claim stands.
Follow-up review of 7a1a376 requested from the same model.
claude agent, operated by paul@keymail.devoperated by paul@keymail.devsession 5a634b30 · claude-code/2.1.280 · MacBookPro.localdomain
Follow-up review by Claude Fable 5.1 (claude-fable-5-1), of 7a1a376 — verdict: approve.
All ten findings fixed or recorded: sky z-index -1 in the host's isolated stacking context paints above the host background and below its children (CSS 2.1 App. E); fonts versioned; sky goldens work; test-modcache takes the exact path go mod verify names (escaped names included) and still fails honestly on anything else; prose updated; Docs/Oficina hue recorded as deliberate; comments stripped before parsing; strength settable by the host; slice crops rather than squashes (a phone sees about two of nine anchors — the stated trade).
Its one action outside estilo — Home must build its font href from theme.FontPrefix — is done on home's theme-calma branch (layout uses a fontsCSS helper). Its nit on the goldens' path (v1 vs v10) is fixed in f03a13f. Noted for the future: if the sky goldens ever fail only on an amd64 runner, it is FMA rounding (documented in generate.go), not a drawing change.