feat(progression): Playthrough aggregate (slice 3)
no LoseLife (ADR-0005). SettleDeath / SettleCompletion defer to the Attempt's terminal outcome, so both are atomic and idempotent. SettleCompletion branches on HasCleared itself - a Replay cannot bank or move campaign position backwards (ADR-0003). Campaign value object holds authored level order; ReachableLevels is derived, replacing the stored UnlockedLevels. Coins.IsAtLeast driven out by cross-scope affordability. 29 tests. CONTEXT.md: Campaign, Settle.
This commit is contained in:
12
CONTEXT.md
12
CONTEXT.md
@@ -28,6 +28,12 @@ _Avoid_: Global state, meta, persistent data, account
|
||||
|
||||
### Operations
|
||||
|
||||
**Settle**:
|
||||
Resolving an ended Attempt against the Playthrough — Commit it on a First Clear, Discard it otherwise. Settling is
|
||||
the only way an Attempt affects a Playthrough, and it decides First Clear versus Replay itself rather than being
|
||||
told which one happened.
|
||||
_Avoid_: Apply, resolve, finalise
|
||||
|
||||
**Commit**:
|
||||
Applying an Attempt's ledger to the Playthrough. Only a First Clear commits — nothing else, ever.
|
||||
_Avoid_: Save, persist, flush, sync
|
||||
@@ -59,6 +65,12 @@ One playable stage, identified by a stable `LevelId` — never by position in a
|
||||
name. Ids must survive inserting and reordering levels, because Playthroughs and Best Times both reference them.
|
||||
_Avoid_: Stage, scene, level index
|
||||
|
||||
**Campaign**:
|
||||
The authored ordering of Levels that defines progression — which Level is first, and what follows a given one. One
|
||||
Campaign is shared by every Playthrough: it is authored data, not per-Playthrough state, and it carries no scene
|
||||
or presentation detail.
|
||||
_Avoid_: Level list, level order, world, chapter
|
||||
|
||||
**Cleared Levels**:
|
||||
The Levels a Playthrough has completed at least once. Gates both campaign progression and level select; whether a
|
||||
Level is reachable is computed from this, never stored alongside it.
|
||||
|
||||
Reference in New Issue
Block a user