docs: progression CONTEXT, ADRs 0001-0004, phase A plan
ignore .idea/ .superpowers/ bin/ obj/; drop 3 identical csproj backups
This commit is contained in:
15
docs/adr/0001-three-progression-scopes.md
Normal file
15
docs/adr/0001-three-progression-scopes.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Player progression has three scopes, not two
|
||||
|
||||
Progression state was two scopes — `PlayerState` (persisted) and `SessionState` (transient) — with achievements
|
||||
and best times leaking out as special cases: `PlayerState.Reset()` deliberately skipped `UnlockedAchievements`,
|
||||
and best times lived in the ghost replay files rather than the save. We split progression into **Attempt**,
|
||||
**Playthrough** and **Profile** (defined in `CONTEXT.md`), because introducing save slots makes the third scope
|
||||
mandatory rather than a preference: Steam achievements are per-account and cannot be un-earned, so a
|
||||
per-Playthrough achievement list would permanently contradict Steam the moment a second slot exists. Best times
|
||||
follow the same argument — a completionist's record is not something starting a new game should reset.
|
||||
|
||||
## Considered options
|
||||
|
||||
Keeping one persisted root with a hand-maintained list of fields that survive New Game. Rejected: that is exactly
|
||||
what the old `Reset()` did, and it had already drifted — achievements survived by omission rather than by design,
|
||||
and nothing would have caught the next missed field.
|
||||
Reference in New Issue
Block a user