Skip to content

Cloud saves: pin tak 9b539d8 and turn cloudSaves on (RFC 0016) - #219

Merged
dmccoystephenson merged 1 commit into
mainfrom
feat/cloud-saves
Oct 4, 2026
Merged

dmccoystephenson merged 1 commit into
mainfrom
feat/cloud-saves

Conversation

@dmccoystephenson

Copy link
Copy Markdown
Member

FishE is added to arcade cloud saves (Stephenson-Software RFC 0016), following Night Ferry (Night-Ferry#5).

  • tak pinned at 9b539d8 (tak#24, /tak/cloud.js), on top of the tak#22/Installation Script (Linux) #23 save guard already pinned (1bac386).
  • cloudSaves: true in the page config. Nothing changes for a player until they sign in and press Turn on cloud backup in the Saves panel; until then no /v1/saves request is made. IndexedDB is still written first and the cloud is never in the save path.
  • Alias host (RFC 0016 Open Question 8, interim): cloud saves run only on fishe.play.danielstephenson.dev. tak's onArcadeHost() does not match the old fishe.danielstephenson.dev alias, so that page never loads cloud.js and its saves stay in that browser; moving them over is Download my saves there and Load saves from a file on the arcade host (an import, which never replaces a save). The page's tip line says where backup is available.
  • Pre-slot migration made safe. migrate_old_save_files used to move data/player.json (and its siblings) into slot_1 even when slot_1 already held a save, writing over it; test_migrate_old_save_files_slot1_exists asserted that overwrite. Once saves can arrive from another device, a store can hold both layouts, so the old save is now moved into the next free slot (the kit's get_next_available_slot rule: any slot holding a file is taken), and with all 99 slots taken nothing is moved. Three tests cover it; a mutation probe that restores the old behaviour fails all three.
  • The Dockerfile's tak pin is moved with requirements.txt.

Arcade-social only accepts uploads for games listed in the gateway's config/play/saves.yaml and, until the off-box backup exists, only from the owner's and the test account; that listing is a separate gateway PR.

Before this is merged (merging deploys to arcade), old-format saves are made on the live build in persistent browser profiles, on both the arcade host and the alias host, and are checked byte for byte after the deploy.

Tests: python -m pytest -q passes locally with tak 9b539d8.

🤖 Generated with Claude Code


drafted by Claude on behalf of Daniel Stephenson

…e migration

FishE joins Night Ferry under RFC 0016. A signed-in player can turn on
cloud backup from the Saves panel on fishe.play.danielstephenson.dev;
until then nothing changes and no /v1/saves request is made. The old
alias host never loads cloud.js, so its saves stay in that browser.

The pre-slot migration (data/*.json -> slot_1) wrote over slot_1 when
slot_1 already held a save, and a test asserted it. With cloud saves a
save set brought in from another device could hold both layouts, so the
old save now goes into the next free slot (the kit's rule) and an
existing slot is never written over; with all 99 slots taken nothing is
moved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dmccoystephenson
dmccoystephenson merged commit a2565a1 into main Oct 4, 2026
1 check passed
@dmccoystephenson
dmccoystephenson deleted the feat/cloud-saves branch October 4, 2026 20:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant