Split The code is public; the app answers only to the crew.
A snapshot records the map it was played on: `Saved` gains `map`, validated like every other field #163
Check · Review · Land · Live done — Landed and live in production.
`Saved` now carries `map: MapName`, written by `snapshot()` from `world.map.name` (never from settings) and validated by `parseSaved` with the same reject-on-anything-else discipline as every other field — wrong type, unknown name, or missing key all yield `null`.
shipped merged
Sign in to join this conversation.
new above
offline
Savednow carriesmap: MapName, written bysnapshot()fromworld.map.name(never from settings) and validated byparseSavedwith the same reject-on-anything-else discipline as every other field — wrong type, unknown name, or missing key all yieldnull.A snapshot written before this lands has no
mapkey, soparseSavednow refuses it and the menu simply offers no resume — a deliberate one-match cost, not an oversight.saved.test.tsgains: the round-trip test now carriesde_cinderend-to-end, plus a dedicated test assertingnullfor"de_nonsense", formap: 7, and for a snapshot missing themapkey entirely.bun run check(tsc --noEmit && bun test) is clean: 693 pass, 0 fail.world.tsis untouched —restoreWorldstill takes itsmapparameter, as the issue specifies. Branched frommainatb15300e, one file's worth of change (saved.ts+ its test), nothing stacked.Closes #160