mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 05:12:14 +00:00
`User.locale` is the only signal a cookie-blind path has. The nightly briefing warm, the Coach nudge, the reminder senders and the native aggregate all resolve from that column; the screen in front of the user resolves from the `healthlog-locale` cookie first, then the column, then Accept-Language. So a browser can read the whole app in German while the column says English, and while it does, nothing on screen looks wrong: the divergence surfaces as one generated paragraph in the wrong language inside an otherwise correct page. Keeping the two in step was a fire-and-forget PUT from a mount effect. A 401 on the paint before sign-in, an offline blip, a tab closed mid-flight — each loses the write, and the next mount repeats the same unchecked attempt rather than noticing the column is still wrong, so a stale column can stand for the life of the account. `getSession` now corrects the column when the request carries a valid locale cookie the column disagrees with. It is ordered by the request pipeline, needs nothing from the client, and is self-limiting: once the two agree the condition is false. Only a cookie counts, and a cookie is only ever written alongside a committed UI locale, so Accept-Language never stamps a guess onto a column that generated prose depends on. The mount PUT stays for the server-set cookie it gets in reply, which Safari's 7-day cap on script-written cookies makes worth having; it is no longer the mechanism. The obvious suspect was a first-paint race between two unordered writes. It is not that: the provider takes the locale the server already resolved and nothing on the mount path changes it, so the effect fires once with the right value. `locale-first-paint-single-write` pins both properties so a future mount-time flip has to face them.