docs: mark Phase 5 complete in session handoff
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+22
-10
@@ -1,8 +1,8 @@
|
|||||||
# Solitaire Quest — Session Handoff
|
# Solitaire Quest — Session Handoff
|
||||||
|
|
||||||
> Last updated: 2026-04-23
|
> Last updated: 2026-04-24
|
||||||
> Branch: `master` — pushed to https://git.aleshym.co/funman300/Rusty_Solitare.git
|
> Branch: `master` — pushed to https://git.aleshym.co/funman300/Rusty_Solitare.git
|
||||||
> Test count: **130 passing** (68 core + 13 data + 49 engine), `cargo clippy --workspace -- -D warnings` clean
|
> Test count: **148 passing** (76 core + 19 data + 53 engine), `cargo clippy --workspace -- -D warnings` clean
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -86,20 +86,32 @@ All sub-phases (3A–3F) done. Plugins: `GamePlugin`, `TablePlugin`, `CardPlugin
|
|||||||
- Full-window overlay toggled with `S` — games played/won, win rate, streak, best score, fastest, avg
|
- Full-window overlay toggled with `S` — games played/won, win rate, streak, best score, fastest, avg
|
||||||
- `StatsPlugin::default()` for production, `StatsPlugin::headless()` for tests (no disk I/O)
|
- `StatsPlugin::default()` for production, `StatsPlugin::headless()` for tests (no disk I/O)
|
||||||
|
|
||||||
|
### Phase 5 — Achievements ✅ COMPLETE (14 of ~19)
|
||||||
|
|
||||||
|
- `solitaire_core::achievement` — `AchievementContext` + `AchievementDef` + `ALL_ACHIEVEMENTS` + `check_achievements`
|
||||||
|
- `solitaire_core::GameState.undo_count` — tracks whether undo was used (for `no_undo` / `speed_and_skill`)
|
||||||
|
- `solitaire_data::AchievementRecord` + atomic `achievements.json` persistence
|
||||||
|
- `AchievementPlugin` — on `GameWonEvent`, build context from `StatsResource` + `GameState` + `chrono::Local` hour, evaluate all conditions, persist newly-unlocked records, emit `AchievementUnlockedEvent(id)`
|
||||||
|
- `AnimationPlugin`'s toast resolves the event's ID to the achievement's name via `achievement_plugin::display_name_for`
|
||||||
|
- New `StatsUpdate` system set lets `AchievementPlugin` order itself after stats are incremented
|
||||||
|
- Deferred: `daily_devotee` (needs `PlayerProgress`), `comeback` (needs recycle counter), `zen_winner` (needs modes), `perfectionist` (needs max-score calc). Stubs can be added in later phases.
|
||||||
|
|
||||||
## What Is Next
|
## What Is Next
|
||||||
|
|
||||||
### Phase 5 — Achievements
|
### Phase 6 — Progression (XP, Levels, Daily Challenges, Modes)
|
||||||
|
|
||||||
- 20+ achievement definitions (`AchievementDef` in `solitaire_core`)
|
- `solitaire_data::PlayerProgress` (XP, level, daily challenge streak, unlocked card backs/backgrounds)
|
||||||
- `AchievementRecord` persistence in `solitaire_data`
|
- XP award on `GameWonEvent` — base + speed bonus + no-undo bonus
|
||||||
- `AchievementPlugin` in `solitaire_engine` — evaluates unlock conditions on `GameWonEvent` / `StateChangedEvent`, emits `AchievementUnlockedEvent`, persists, shows toast
|
- Level formula (from ARCHITECTURE.md §13)
|
||||||
- `AchievementUnlockedEvent` currently uses `String` placeholder in `events.rs` — replace with `AchievementRecord` when this phase starts
|
- Daily challenge seed generation + completion tracking
|
||||||
|
- Weekly goals (rotating set of mini-objectives)
|
||||||
|
- Time Attack / Challenge Mode / Zen Mode — unlocked at level 5
|
||||||
|
- After this lands, the `daily_devotee` achievement can be wired up
|
||||||
|
|
||||||
### Phases 6–8 (in order after Phase 5)
|
### Phases 7–8 (in order after Phase 6)
|
||||||
|
|
||||||
| Phase | Scope |
|
| Phase | Scope |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Phase 6 | XP/levels, daily challenges, weekly goals, special modes |
|
|
||||||
| Phase 7 | Audio (`kira`), polish, hints, onboarding, pause menu |
|
| Phase 7 | Audio (`kira`), polish, hints, onboarding, pause menu |
|
||||||
| Phase 8A–C | Local storage + `SyncProvider` + self-hosted Axum server + client |
|
| Phase 8A–C | Local storage + `SyncProvider` + self-hosted Axum server + client |
|
||||||
| Phase 8D | GPGS stub fully wired into settings UI |
|
| Phase 8D | GPGS stub fully wired into settings UI |
|
||||||
@@ -153,7 +165,7 @@ For Phase 3 onwards, write a new plan using the `superpowers:writing-plans` skil
|
|||||||
# Check everything compiles
|
# Check everything compiles
|
||||||
cargo check --workspace
|
cargo check --workspace
|
||||||
|
|
||||||
# Run all tests (130 tests, all should pass)
|
# Run all tests (148 tests, all should pass)
|
||||||
cargo test --workspace
|
cargo test --workspace
|
||||||
|
|
||||||
# Lint (must be zero warnings)
|
# Lint (must be zero warnings)
|
||||||
|
|||||||
Reference in New Issue
Block a user