Add save slots to the player
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- typescript
Research direction
Start with apps/web/src/services/saves.ts, apps/web/src/logic/saves.ts, apps/web/src/services/storage.ts and apps/web/src/game/session.ts; read section 5 of docs/architecture.md for the save model. Trace autosave and storage behavior, then identify how the existing replay flow handles older pack versions. Done means the listed slot, migration, offline, conflict, warning and end-to-end acceptance criteria pass.
Written by the indexing model from the issue text.
Description
Context
The player keeps one autosave per pack, and New game overwrites it. Players want to try alternatives, keep a save before the finale, or share a device. The save format lexvm-save/1 already contains everything; slots are a host feature with no format change.
Scope
- Keep the autosave; add up to five manual slots per pack: Save to slot and Load from slot in the game menu. The meta commands
saveandloadopen the slot sheet (today they export and import a file). - Slot list: editable label, room name, score, turn and time saved.
- New game no longer touches manual slots.
- Export and import per slot with the existing
.lexsave.jsonfiles. - Loading a slot from an older pack version uses the existing replay flow.
- Storage migration: existing v0.1 autosaves stay readable.
- Deleting an imported pack deletes its slots after confirmation.
- Slots follow the two-tab rule of the autosave: a tab never silently overwrites a slot that another tab has written since.
Acceptance criteria
- A v0.1 autosave loads after the upgrade (migration test).
- Save to slot, play on, load slot restores state, log and revealed hints.
- Slots survive reloads and work offline.
- An end-to-end test covers save, continue and load.
- With storage unavailable, slots work for the session and the existing warning is shown.
References
- apps/web/src/services/saves.ts
- apps/web/src/logic/saves.ts
- apps/web/src/services/storage.ts
- apps/web/src/game/session.ts
- docs/architecture.md (section 5, Saves)
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 28m
- Merged PRs (30d)
- 2
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from nullthrone/lexvm
-
area: web good first issue priority: low type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
nullthrone/lexvm#49 ·
-
area: infra good first issue priority: low type: chore
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
nullthrone/lexvm#41 ·
-
area: engine good first issue priority: low type: feature
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
nullthrone/lexvm#27 ·
-
area: web priority: low type: research
Difficulty 5/5 Over a week Newbie friendliness 35/100
nullthrone/lexvm#63 ·
-
area: infra area: web priority: medium type: chore
Difficulty 5/5 Over a week Newbie friendliness 38/100
nullthrone/lexvm#62 ·
All issues in nullthrone/lexvm
Similar issues
-
type: bug
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
Maintainers usually reply within 1 day
-
0️⃣ phase/new
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
Difficulty 1/5 Under an hour Newbie friendliness 70/100
microsoft/playwright#43640 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100