chore: complete v1.1 milestone
Archive v1.1 Calendar & Polish milestone artifacts (roadmap, requirements, phase directories) to milestones/. Evolve PROJECT.md with validated requirements and new key decisions. Update RETROSPECTIVE.md with v1.1 section and cross-milestone trends. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,50 @@
|
||||
|
||||
---
|
||||
|
||||
## Milestone: v1.1 — Calendar & Polish
|
||||
|
||||
**Shipped:** 2026-03-16
|
||||
**Phases:** 3 | **Plans:** 5
|
||||
|
||||
### What Was Built
|
||||
- Horizontal 181-day calendar strip replacing the stacked daily plan HomeScreen
|
||||
- CalendarDao with date-parameterized reactive Drift streams for day tasks and overdue tasks
|
||||
- Task completion history bottom sheet with per-task reverse-chronological log
|
||||
- Alphabetical, interval, and effort sort options with SharedPreferences persistence
|
||||
- SortDropdown widget in both HomeScreen and TaskListScreen AppBars
|
||||
|
||||
### What Worked
|
||||
- Phase dependency ordering (5 → 6+7 parallel-capable) meant calendar strip was stable before building features on top
|
||||
- TDD red-green cycle continued smoothly — every plan had failing tests before implementation
|
||||
- Auto-advance mode enabled rapid phase chaining with minimal manual intervention
|
||||
- Existing patterns from v1.0 (DAO, provider, widget test) were reused directly — no new patterns invented unnecessarily
|
||||
- CalendarStripController (VoidCallback holder) was simpler than GlobalKey approach — good architecture call
|
||||
|
||||
### What Was Inefficient
|
||||
- StateProvider removal in Riverpod 3.x was discovered during execution rather than research — same category of issue as v1.0's riverpod_generator problem
|
||||
- ROADMAP.md plan checkboxes still not auto-checked by executor (same bookkeeping gap as v1.0)
|
||||
- Phase 5 plan split (data layer + UI) could have been a single plan given the small scope — overhead of 2 separate plans wasn't justified for ~13 min total
|
||||
|
||||
### Patterns Established
|
||||
- CalendarStripController: VoidCallback holder for parent-to-child imperative scroll communication
|
||||
- CalendarDayList state machine: first-run → celebration → emptyDay → hasTasks (5 states)
|
||||
- In-memory sort via stream.map after DB stream emit — sort preference changes without re-querying
|
||||
- SortPreferenceNotifier: sync default + async _loadPersisted() — matches ThemeNotifier pattern
|
||||
- Nested Scaffold pattern for per-tab AppBars in StatefulShellRoute.indexedStack
|
||||
|
||||
### Key Lessons
|
||||
1. Riverpod API surface changes (StateProvider removal) should be caught during phase research, not during execution — pattern repeats from v1.0
|
||||
2. Plans under ~5 min execution can be merged into a single plan to reduce orchestration overhead
|
||||
3. In-memory sort is the right approach when sort criteria don't affect DB queries — avoids re-streaming
|
||||
4. Bottom sheets for one-shot modals (history) don't need dedicated Riverpod providers — ref.read() in ConsumerWidget is sufficient
|
||||
|
||||
### Cost Observations
|
||||
- Model mix: orchestrator on opus, executors/checkers on sonnet
|
||||
- Total execution: ~26 min for 5 plans across 3 phases
|
||||
- Notable: Each plan averaged ~5 min — significantly faster than v1.0's ~6 min average due to established patterns
|
||||
|
||||
---
|
||||
|
||||
## Cross-Milestone Trends
|
||||
|
||||
### Process Evolution
|
||||
@@ -53,13 +97,17 @@
|
||||
| Milestone | Phases | Plans | Key Change |
|
||||
|-----------|--------|-------|------------|
|
||||
| v1.0 | 4 | 13 | Initial project — established all patterns |
|
||||
| v1.1 | 3 | 5 | Reused v1.0 patterns — faster execution, auto-advance mode |
|
||||
|
||||
### Cumulative Quality
|
||||
|
||||
| Milestone | Tests | Key Metric |
|
||||
|-----------|-------|------------|
|
||||
| v1.0 | 89 | dart analyze clean, 0 issues |
|
||||
| Milestone | Tests | LOC (lib) | Key Metric |
|
||||
|-----------|-------|-----------|------------|
|
||||
| v1.0 | 89 | 7,773 | dart analyze clean, 0 issues |
|
||||
| v1.1 | 108 | 9,051 | dart analyze clean, 0 issues |
|
||||
|
||||
### Top Lessons (Verified Across Milestones)
|
||||
|
||||
1. (Single milestone — lessons above will be cross-validated as more milestones ship)
|
||||
1. **Research must verify current package API signatures** — v1.0 hit riverpod_generator type incompatibility, v1.1 hit StateProvider removal. Same root cause: outdated API assumptions in plans.
|
||||
2. **Established patterns compound** — v1.1 plans averaged ~5 min vs v1.0's ~6 min. Reusing DAO, provider, and test patterns eliminated design decisions.
|
||||
3. **Verification gates are cheap insurance** — Consistently ~2 min per phase, caught regressions in both milestones.
|
||||
|
||||
Reference in New Issue
Block a user