100 lines
4.2 KiB
Markdown
100 lines
4.2 KiB
Markdown
# Tasks: Wave C-3 — enhanced leaderboard + persistence + replay + tournament
|
|
|
|
## 0. Pre-flight
|
|
|
|
- [x] `pwd && git worktree list && git status` in isolated worktree.
|
|
- [x] §0a Sync: fast-forward worktree to genesis tip; confirm Wave-B
|
|
matchmaking/performance available.
|
|
- [x] Read CLAUDE.md, openspec/AGENTS.md, existing src structure.
|
|
- [x] Read upstream reference under
|
|
`/mnt/s/web/suaveplan/packages/universal/game-server/src/enhanced/`.
|
|
|
|
## 1. Error registry
|
|
|
|
- [x] Append 22 codes to `GAME_SERVER_CODES` (`LEADERBOARD_*`,
|
|
`PERSISTENCE_*`, `REPLAY_*`, `TOURNAMENT_*`, `INVALID_BRACKET_*`).
|
|
- [x] Extend `game-server-error.test.ts` with assertions on each new code.
|
|
|
|
## 2. Leaderboard
|
|
|
|
- [x] `leaderboard-manager.types.ts` — `RankingMode`, `LeaderboardConfig`,
|
|
`ScoreSubmission`, `LeaderboardEntry`, `LeaderboardManagerConfig`,
|
|
`LeaderboardStats`, Zod schemas.
|
|
- [x] `leaderboard-manager.ts` — multi-board manager with score/wins/elo,
|
|
ascending/descending, ranks, eviction, OTel counters, injectable
|
|
`Clock`.
|
|
- [x] `leaderboard-manager.test.ts` — 100% coverage incl. error paths.
|
|
- [x] `leaderboard-manager.md` — six sections, ≥200 words.
|
|
- [x] `index.ts` barrel.
|
|
|
|
## 3. Persistence
|
|
|
|
- [x] `game-persistence.types.ts` — `SaveMetadata`, `Snapshot`,
|
|
`HistoryEntry`, `SaveRecord`, `SaveResult`, `LoadResult`,
|
|
`GamePersistenceConfig`, `PersistenceStats`, Zod schemas.
|
|
- [x] `game-persistence.ts` — save / load / delete / snapshot / restore
|
|
via injectable `StorageLike`; OTel counters + histogram; injectable
|
|
`Clock` + `IdGenerator`.
|
|
- [x] `game-persistence.test.ts` — 100% coverage incl. corrupt data,
|
|
failing storage, history trim.
|
|
- [x] `game-persistence.md` — six sections, ≥200 words.
|
|
- [x] `index.ts` barrel.
|
|
|
|
## 4. Replay recorder
|
|
|
|
- [x] `replay-recorder.types.ts` — `RecordingStatus`, `RecordedInput`,
|
|
`RecordedSnapshot`, `ReplayMetadata`, `ReplayData`,
|
|
`ReplayRecorderConfig`, `RecordingStats`, Zod schemas.
|
|
- [x] `replay-recorder.ts` — start / pause / resume / tick / record /
|
|
stop with monotonic sequence, auto-snapshot interval, paused-time
|
|
accounting; injectable `Clock` + `IdGenerator`; OTel counters.
|
|
- [x] `replay-recorder.test.ts` — 100% coverage incl. buffer overflow
|
|
and FSM rejections.
|
|
- [x] `replay-recorder.md` — six sections, ≥200 words.
|
|
- [x] `index.ts` barrel.
|
|
|
|
## 5. Replay player
|
|
|
|
- [x] `replay-player.types.ts` — `PlaybackStatus`, `PlaybackSpeed`,
|
|
`PlaybackPosition`, `ReplayPlayerConfig`, Zod schemas.
|
|
- [x] `replay-player.ts` — tick-driven player with step / seek / speed,
|
|
snapshot-aware backward step, loop, observer listeners; OTel
|
|
counters.
|
|
- [x] `replay-player.test.ts` — 100% coverage incl. unloaded paths,
|
|
unsupported version, end-of-replay.
|
|
- [x] `replay-player.md` — six sections, ≥200 words.
|
|
- [x] `index.ts` barrel.
|
|
|
|
## 6. Tournament
|
|
|
|
- [x] `tournament-manager.types.ts` — `BracketType`, `TournamentStatus`,
|
|
`MatchStatus`, `Participant`, `Match`, `Round`, `Standing`,
|
|
`Tournament`, `TournamentConfig`, Zod schemas.
|
|
- [x] `tournament-bracket.internal.ts` — pure bracket-builders
|
|
(`buildSingleElim`, `buildRoundRobin`, `shuffleWithRng`,
|
|
`padToPowerOfTwo`, `roundName`).
|
|
- [x] `tournament-standings.internal.ts` — pure standings helpers
|
|
(`applyStanding`, `markEliminated`, `findMatch`,
|
|
`markRoundCompleteIfDone`).
|
|
- [x] `tournament-manager.ts` — register / start / record / cancel with
|
|
bye propagation, seeded shuffle via injectable `Rng`, injectable
|
|
`Clock` + `IdGenerator`, OTel counter.
|
|
- [x] `tournament-manager.test.ts` — 100% coverage via the public surface.
|
|
- [x] `tournament-manager.md` + `tournament-bracket.internal.md` +
|
|
`tournament-standings.internal.md` — six sections each, ≥200 words.
|
|
- [x] `index.ts` barrel.
|
|
|
|
## 7. Package surface
|
|
|
|
- [x] Extend `package.json` `exports` with five new subpath blocks.
|
|
- [x] No edits to `src/index.ts` (orchestrator wave consolidates).
|
|
|
|
## 8. Verification
|
|
|
|
- [x] `bunx turbo lint typecheck test --filter=@suaveplan/game-server` green.
|
|
- [x] `bunx turbo test:coverage --filter=@suaveplan/game-server` at
|
|
100/100/100/100 on touched modules.
|
|
- [x] Zero `from 'vitest'` / `from 'bun:test'` under
|
|
`src/enhanced/`.
|
|
- [x] Zero `biome-ignore` / `TODO` / `FIXME` / `XXX` under `src/enhanced/`.
|