From 262cac5849a192c4d912983b9799f03ca6f07798 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 25 Feb 2026 10:43:21 +0100 Subject: [PATCH] docs(decisions): add D-085 per-game save dirs, Q-029 save file format D-085: per-game save directory structure with F5/F6 quicksave/quickload. Q-029: open question tracking long-term save file format design. Co-Authored-By: Claude Opus 4.6 --- decisions/README.md | 4 ++-- decisions/architecture.md | 17 ++++++++++++++++- decisions/questions.md | 16 +++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/decisions/README.md b/decisions/README.md index fa69fe58a..43bef34cd 100644 --- a/decisions/README.md +++ b/decisions/README.md @@ -10,12 +10,12 @@ Cross-domain decisions live in one file with cross-reference notes in related fi | File | Domain | Decisions | |------|--------|-----------| -| [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073 | +| [architecture.md](architecture.md) | Technical foundation | D-008, D-009, D-010, D-012, D-020, D-026, D-030, D-031, D-041, D-042, D-054, D-055, D-066, D-068, D-073, D-085 | | [perception.md](perception.md) | Player observation | D-011, D-015, D-016, D-017, D-018, D-019, D-033, D-035, D-043, D-044, D-045, D-046, D-047, D-048, D-049, D-052, D-056, D-057, D-058, D-059, D-060, D-061, D-067, D-069, D-070, D-071, D-072, D-076, D-077, D-078 | | [content.md](content.md) | NPC, dialogue, templates | D-023, D-024, D-025, D-028, D-029, D-032, D-034, D-035, D-036, D-037, D-050, D-062, D-063, D-064, D-074, D-075, D-084 | | [scope.md](scope.md) | Game concept, prototype | D-001, D-003, D-005, D-006, D-007, D-013, D-014, D-027, D-038, D-039, D-051, D-053, D-065 | | [process.md](process.md) | Team, workflow | D-004, D-021, D-022, D-040 | -| [questions.md](questions.md) | Open questions | Q-001 through Q-028 | +| [questions.md](questions.md) | Open questions | Q-001 through Q-029 | | [rejected.md](rejected.md) | Rejected alternatives | R-001 through R-010 | ## Querying Decisions diff --git a/decisions/architecture.md b/decisions/architecture.md index 99add8d4a..27d3d2754 100644 --- a/decisions/architecture.md +++ b/decisions/architecture.md @@ -210,4 +210,19 @@ Technical foundation decisions that constrain implementation: engine, client-ser --- -*16 decisions. Last updated: 2026-02-16* +### D-085: Per-game save directory structure +- **Date:** 2026-02-25 +- **Decision:** Every new game creates a dedicated directory under the user save path. All saves for that game (manual, quicksave, autosave) live inside the game's directory. Directory name includes a human-readable game identifier and creation timestamp. +- **Rationale:** Natively groups saves by game without requiring a database or index file. Players can browse, back up, or delete game saves at the filesystem level. Avoids a flat save folder where 50+ files from different games are interleaved. +- **Structure:** `user://saves//` where `` is `-` (e.g., `20260225-143022-a7b3f1/`). Inside: `quicksave.sav`, `autosave.sav`, `manual_001.sav`, etc. +- **Constraints:** + - Game directory created on "New Game" — even before the first save, so the path exists for quicksave/autosave. + - F5 = quicksave (overwrites `quicksave.sav` in the active game dir). + - F6 = quickload (loads `quicksave.sav` from the active game dir). + - Loading screen lists game directories sorted by last-modified, shows most recent save per game. +- **Raised by:** Team Leader (Jeroen) +- **Dissent:** None + +--- + +*17 decisions. Last updated: 2026-02-25* diff --git a/decisions/questions.md b/decisions/questions.md index b6f50ea63..72962c50d 100644 --- a/decisions/questions.md +++ b/decisions/questions.md @@ -168,6 +168,20 @@ Tracked questions awaiting discussion or resolution. - **Assigned to:** Gestalt, Tyre - **Source:** Sprint 16 PR #59 review discussion (2026-02-23) +### Q-029: Save file format design +- **Status:** Open +- **Question:** What should the long-term save file format look like? Key considerations: + 1. **Versioning and migration:** How do saves survive across game versions? Schema evolution strategy (field additions, renames, removals). Should saves embed a version number and run migrations on load? + 2. **Compression:** Raw MessagePack vs compressed (zstd, lz4)? Tradeoff between save/load speed and file size. SaveStateV1 is already MessagePack — does that carry forward? + 3. **Integrity:** Checksums or signatures to detect corruption? CRC32 header? + 4. **Metadata header:** Should the file have a readable header (game version, save date, play time, character name) that the loading screen can read without deserializing the full save? + 5. **Determinism:** D-010 requires deterministic simulation. Can saves capture enough state to resume deterministically, or is approximate resume acceptable? + 6. **Modding:** Should the format be documented for mod authors? Does it need extension points? + 7. **Cloud sync:** Any considerations for Steam Cloud or similar? File size limits? +- **Context:** Sprint 19 implements a quick-and-dirty save format (D-085 per-game directories, MessagePack serialization from SaveStateV1). This question tracks the thorough design pass for production quality. +- **Assigned to:** Tyre, Dudley +- **Source:** Team Leader directive (Sprint 19 planning) + --- -*28 questions (7 resolved, 1 partially resolved, 20 open). Last updated: 2026-02-25 (Q-028 resolved → D-084)* +*29 questions (7 resolved, 1 partially resolved, 21 open). Last updated: 2026-02-25 (Q-029 added)*