b6cc9000c34eea2fa074451acda84365425e2b81
- checksum.ts: crc32hex (8-char lowercase hex of CRC-32, signed->unsigned via >>>0) + canonicalJSON (recursive object-key sort, arrays preserved) per Pitfall 3 - envelope.ts: wrap/unwrap with SaveCorruptError on checksum mismatch + Zod SaveEnvelopeSchema accepting nonnegative schemaVersion (allows synthetic v0) - migrations.ts: forward-only registry with migrations[1] producing the v1 shape from CONTEXT D-04 (garden.tiles, plants, harvestedFragmentIds, lastTickAt, settings); throws on negative or future-version inputs Removes src/save/.gitkeep firewall marker (real source files now live here). Tests: 21/21 pass (npx vitest run src/save/checksum.test.ts src/save/envelope.test.ts src/save/migrations.test.ts). TypeScript-strict; no 'any' in production code (CLAUDE.md).
Description
No description provided
Languages
TypeScript
91.2%
JavaScript
6.7%
Ink
1.8%
CSS
0.2%
HTML
0.1%