- Shipped
- September 6, 2026 at 2:52 PM UTC
- Author
- Kamo
- Commit
- edb43f9
The dropdown was a temporary control for the initial review of the eighteen scenes and it has served its purpose. The query parameter stays — it is the only way to look at a scene on a day that is not its own, and seventeen of the eighteen are unreachable at any given moment without it. Gone: HolidayPicker.tsx, HolidayPickerControl.tsx, the `.holiday-picker*` block in holidays.css, and its line in Footer.tsx. `HOLIDAY_COPY.name` went with it — it existed only to label the dropdown's options — so the copy table is now title, message and glyph. `writeOverride` is module-private and the change event is gone with it: nothing on the page can set an override any more, only the URL a page is opened with, and a `?holiday=` link arrives as a navigation that remounts the layer anyway. AND A REAL BUG IN THE ESCAPE HATCH, found while restoring this `?holiday=auto` did not work. `parse()` returned `null` for BOTH "auto" and "no parameter present", and the caller's guard was `if (parsed !== null)` — so the clear case fell straight through to the stored value and returned it. The one documented way to release a browser that had been pinned to a scene silently did nothing, and since the override persists to localStorage precisely so a shared link survives a navigation, anyone who followed one was stuck until they cleared site data. `Request` now keeps `absent`, `clear` and `set` distinct, and the clear case REMOVES the stored key rather than merely returning null for one page view. A garbage value (`?holiday=xmas`) is treated as absent rather than as a clear, so a typo shows whatever was already in force instead of silently wiping it. That bug is also the honest answer to "couldn't I just use the url param to fix it?" — you should have been able to, and you could not. An earlier version of this change removed override.ts entirely and justified a storage cleanup by claiming a stranded reader would have no way out. That reasoning was wrong twice over: with override.ts deleted nothing reads the key at all, so nothing could be stranded; and with it kept, the parameter is the way out. The cleanup went with the bad reasoning.