# Project Retrospective *A living document updated after each milestone. Lessons feed forward into future planning.* ## Milestone: v1.0 — MVP **Shipped:** 2026-03-16 **Phases:** 4 | **Plans:** 13 ### What Was Built - Complete room-based household chore app with auto-scheduling task management - Daily plan home screen with overdue/today/tomorrow sections and progress tracking - Bundled German task templates for 14 room types - Daily summary notifications with configurable time and Android permission handling - 89 tests covering DAOs, scheduling logic, providers, and widget behavior ### What Worked - Bottom-up phase structure (foundation -> data -> UI -> polish) kept each phase clean with minimal rework - TDD approach for providers and services caught several issues early (async race conditions, API mismatches) - Verification gates at the end of Phase 2, 3, and 4 confirmed all requirements before moving on - Calendar-anchored scheduling with anchor memory was designed right the first time — no rework needed - ARB localization from Phase 1 meant adding German strings was frictionless throughout ### What Was Inefficient - riverpod_generator InvalidTypeException with drift Task type required workaround (manual StreamProvider) in 3 separate plans — should have been caught in Phase 1 research - Some plan specifications referenced outdated API patterns (flutter_local_notifications positional parameters removed in v20+) — research needs to verify exact current API signatures - Phase 4 plan checkboxes in ROADMAP.md weren't updated to [x] by executor — minor bookkeeping gap ### Patterns Established - `@Riverpod(keepAlive: true)` AsyncNotifier with SharedPreferences for persistent settings (ThemeNotifier, NotificationSettingsNotifier) - Manual StreamProvider.family/autoDispose for drift type compatibility - DailyPlanDao innerJoin pattern for cross-table queries - ConsumerStatefulWidget for screens with async callbacks requiring `mounted` guards - Provider override pattern in widget tests for database isolation ### Key Lessons 1. Research phase should verify exact current package API signatures — breaking changes between major versions cause plan deviations 2. Drift + riverpod_generator type incompatibility is a known issue — plan for manual providers from the start when using drift 3. Verification gates add minimal time (~2 min) but catch integration issues — keep them for all phases 4. Progressive disclosure (AnimatedSize) is a clean pattern for conditional settings UI ### Cost Observations - Model mix: orchestrator on opus, researchers/planners/executors/checkers on sonnet - Total execution: ~1.3 hours for 13 plans across 4 phases - Notable: Verification gates averaged 2 min — very efficient for the confidence they provide --- ## Cross-Milestone Trends ### Process Evolution | Milestone | Phases | Plans | Key Change | |-----------|--------|-------|------------| | v1.0 | 4 | 13 | Initial project — established all patterns | ### Cumulative Quality | Milestone | Tests | Key Metric | |-----------|-------|------------| | v1.0 | 89 | dart analyze clean, 0 issues | ### Top Lessons (Verified Across Milestones) 1. (Single milestone — lessons above will be cross-validated as more milestones ship)