Status: Accepted · Date: 2026 (Sprint 4)
Solve-screen load failures needed exhaustively-switchable error types. Freezed unions work but add codegen weight for types that carry little data.
SolveLoadError and its subtypes (PuzzleNotFoundError,
SolveSessionLoadError) are hand-written plain sealed classes in
solve/domain/models/solve_errors.dart. Presentation switches exhaustively:
switch (e) { PuzzleNotFoundError() => ..., ... }. The same pattern was later
reused for SyncState.
CONVENTIONS.md).