Files
HouseHoldKeaper/.planning/phases/03-daily-plan-and-cleanliness/03-VERIFICATION.md

15 KiB

phase, verified, status, score, human_verification
phase verified status score human_verification
03-daily-plan-and-cleanliness 2026-03-16T12:30:00Z human_needed 14/14 automated must-haves verified
test expected why_human
Launch app (`flutter run`) and verify the Home tab shows the daily plan, not a placeholder Progress card at top showing 'X von Y erledigt' with linear progress bar Visual layout and actual screen presentation cannot be verified programmatically
test expected why_human
If overdue tasks exist, verify the 'Uberfaellig' section header appears in warm coral color above those tasks Section header styled in Color(0xFFE07A5F), only visible when overdue tasks are present Color rendering requires visual inspection
test expected why_human
Tap a checkbox on an overdue or today task Task animates out (SizeTransition + SlideTransition, 300ms) and progress counter updates Animation behavior and timing must be observed at runtime
test expected why_human
Scroll down to the 'Demnaechst (N)' section and tap to expand it Section collapses by default; tomorrow tasks appear with no checkboxes after tap ExpansionTile interaction and read-only state of tomorrow tasks requires runtime verification
test expected why_human
Complete all overdue and today tasks Screen transitions to 'Alles erledigt! (star emoji)' celebration empty state Empty state transition requires actual task completion flow at runtime
test expected why_human
Tap the room name tag on a task row Navigates to that room's task list screen GoRouter navigation to '/rooms/:roomId' requires runtime verification
test expected why_human
Switch to Rooms tab and inspect room cards Each room card displays a thin coloured cleanliness bar at the bottom (green=clean, coral=dirty) CLEAN-01 visual indicator requires runtime inspection

Phase 3: Daily Plan and Cleanliness -- Verification Report

Phase Goal: Users can open the app and immediately see what needs doing today, act on tasks directly from the plan view, and see a room-level health indicator Verified: 2026-03-16T12:30:00Z Status: human_needed (all automated checks pass; 7 items need runtime confirmation) Re-verification: No -- initial verification


Goal Achievement

Observable Truths

# Truth Status Evidence
1 DailyPlanDao.watchAllTasksWithRoomName() returns tasks joined with room name, sorted by nextDueDate VERIFIED daily_plan_dao.dart L16-33: innerJoin on rooms.id, orderBy nextDueDate asc; 4 tests cover it
2 DailyPlanDao.watchCompletionsToday() returns count of completions recorded today VERIFIED daily_plan_dao.dart L37-51: customSelect COUNT(*) with readsFrom; 3 tests cover boundaries
3 dailyPlanProvider categorizes tasks into overdue, today, and tomorrow sections VERIFIED daily_plan_providers.dart L26-43: date-only partition into overdue/todayList/tomorrowList
4 Progress total = remaining overdue + remaining today + completedTodayCount (stable denominator) VERIFIED daily_plan_providers.dart L53: totalTodayCount: overdue.length + todayList.length + completedToday
5 Localization keys for daily plan sections and progress text exist in app_de.arb VERIFIED app_de.arb L72-91: all 10 keys present (dailyPlanProgress, SectionOverdue, SectionToday, SectionUpcoming, UpcomingCount, AllClearTitle, AllClearMessage, NoOverdue, NoTasks)
6 User sees progress card at top with 'X von Y erledigt' and linear progress bar VERIFIED progress_card.dart L31: l10n.dailyPlanProgress(completed, total); L39-44: LinearProgressIndicator; widget test confirms "2 von 3 erledigt" renders
7 User sees overdue tasks in highlighted section (warm coral) only when overdue tasks exist VERIFIED home_screen.dart L236-244: if (state.overdueTasks.isNotEmpty) + color: _overdueColor; widget test confirms section header appears
8 User sees today's tasks in a section below overdue VERIFIED home_screen.dart L246-265: always-rendered today section with DailyPlanTaskRow list
9 User sees tomorrow's tasks in collapsed 'Demnachst (N)' section that expands on tap VERIFIED home_screen.dart L313-328: ExpansionTile with initiallyExpanded: false; widget test confirms collapse state
10 User can check a checkbox on overdue/today task -- task animates out and increments progress VERIFIED* home_screen.dart L287-305: _completingTaskIds Set + _CompletingTaskRow with SizeTransition+SlideTransition; _onTaskCompleted calls taskActionsProvider.notifier.completeTask(); *animation requires human confirmation
11 When no tasks due, user sees 'Alles erledigt!' empty state VERIFIED home_screen.dart L72-77, L138-177; widget test confirms "Alles erledigt!" text and celebration icon
12 Room name tag on each task row navigates to room's task list on tap VERIFIED daily_plan_task_row.dart L62: context.go('/rooms/${taskWithRoom.roomId}') on GestureDetector; *runtime navigation needs human check
13 Task rows have NO row-tap navigation -- only checkbox and room tag are interactive VERIFIED daily_plan_task_row.dart L46-92: ListTile has no onTap or onLongPress; confirmed by code inspection
14 CLEAN-01: Room cards display cleanliness indicator from Phase 2 VERIFIED room_card.dart L79-85: LinearProgressIndicator with cleanlinessRatio, lerped green-to-coral color

Score: 14/14 truths verified (automated). 7 of these require human runtime confirmation for full confidence.


Required Artifacts

Artifact Expected Lines Status Details
lib/features/home/data/daily_plan_dao.dart Cross-room join query and today's completion count 52 VERIFIED innerJoin + customSelect; exports DailyPlanDao, TaskWithRoom
lib/features/home/domain/daily_plan_models.dart DailyPlanState data class for categorized data 31 VERIFIED TaskWithRoom and DailyPlanState with all required fields
lib/features/home/presentation/daily_plan_providers.dart Riverpod provider combining task and completion stream 56 VERIFIED Manual StreamProvider.autoDispose with asyncMap
lib/features/home/presentation/home_screen.dart Complete daily plan screen replacing placeholder 389 VERIFIED ConsumerStatefulWidget, all 4 states implemented
lib/features/home/presentation/daily_plan_task_row.dart Task row with room name tag, optional checkbox 94 VERIFIED StatelessWidget, GestureDetector for room tag, no row-tap
lib/features/home/presentation/progress_card.dart Progress banner card with linear progress bar 51 VERIFIED Card + LinearProgressIndicator, localized text
test/features/home/data/daily_plan_dao_test.dart Unit tests for DAO (min 80 lines) 166 VERIFIED 7 tests covering all specified behaviors
test/features/home/presentation/home_screen_test.dart Widget tests for empty state, sections (min 40 lines) 253 VERIFIED 6 widget tests covering all state branches

From To Via Status Details
daily_plan_dao.dart database.dart @DriftAccessor registration VERIFIED database.dart L48: daos: [RoomsDao, TasksDao, DailyPlanDao]
daily_plan_providers.dart daily_plan_dao.dart db.dailyPlanDao.watchAllTasksWithRoomName() VERIFIED daily_plan_providers.dart L14: exact call present
home_screen.dart daily_plan_providers.dart ref.watch(dailyPlanProvider) VERIFIED home_screen.dart L42: ref.watch(dailyPlanProvider)
home_screen.dart task_providers.dart ref.read(taskActionsProvider.notifier).completeTask() VERIFIED home_screen.dart L35: exact call present
daily_plan_task_row.dart go_router context.go('/rooms/$roomId') on room tag tap VERIFIED daily_plan_task_row.dart L62: context.go('/rooms/${taskWithRoom.roomId}')

Requirements Coverage

Requirement Source Plan Description Status Evidence
PLAN-01 03-01, 03-03 User sees all tasks due today (grouped by room via inline tag) SATISFIED home_screen.dart today section; room name tag on each DailyPlanTaskRow
PLAN-02 03-01, 03-03 Overdue tasks appear in separate highlighted section at top SATISFIED home_screen.dart L236-244: conditional overdue section with coral header
PLAN-03 03-01, 03-03 User can preview upcoming tasks (tomorrow) SATISFIED home_screen.dart L308-328: collapsed ExpansionTile for tomorrow tasks
PLAN-04 03-02, 03-03 User can complete tasks via checkbox directly from daily plan view SATISFIED home_screen.dart L31-36: onTaskCompleted calls taskActionsProvider; animation implemented
PLAN-05 03-01, 03-03 User sees progress indicator showing completed vs total tasks SATISFIED progress_card.dart: "X von Y erledigt" + LinearProgressIndicator
PLAN-06 03-02, 03-03 "All clear" empty state when no tasks due SATISFIED home_screen.dart L72-77, L138-177: two all-clear states implemented
CLEAN-01 03-02, 03-03 Room cards display cleanliness indicator (Phase 2 carry-over) SATISFIED room_card.dart L79-85: LinearProgressIndicator with cleanlinessRatio

All 7 requirement IDs from plans are accounted for. No orphaned requirements found.


Anti-Patterns Found

File Line Pattern Severity Impact
home_screen.dart 18 Comment mentioning "placeholder" -- describes what was replaced Info None -- documentation comment only, no code issue

No blockers or warnings found. The single info item is a comment accurately describing the replacement of a prior placeholder.


Human Verification Required

The following 7 items require the app to be running. All automated checks (72/72 tests pass, dart analyze clean) support that the code is correct; these confirm the live user experience.

1. Daily plan renders on Home tab

Test: Run flutter run. Switch to the Home tab. Expected: Progress card ("X von Y erledigt" + progress bar) is the first thing visible, followed by task sections. Why human: Visual layout and actual screen rendering cannot be verified programmatically.

2. Overdue section styling (PLAN-02)

Test: Ensure at least one task is overdue (nextDueDate in the past). Open the Home tab. Expected: An "Uberfaellig" section header appears in warm coral color (0xFFE07A5F) above those tasks. Why human: Color rendering and conditional section visibility require visual inspection.

3. Checkbox completion and animation (PLAN-04)

Test: Tap the checkbox on an overdue or today task. Expected: The task row slides right and collapses in height over ~300ms, then disappears. Progress counter increments. Why human: Animation timing and visual smoothness must be observed at runtime.

4. Tomorrow section collapse/expand (PLAN-03)

Test: Scroll to the "Demnaechst (N)" section. Observe it is collapsed. Tap it. Expected: Section expands showing tomorrow's tasks with room name tags but NO checkboxes. Why human: ExpansionTile interaction and the read-only state of tomorrow tasks require runtime observation.

5. All-clear empty state (PLAN-06)

Test: Complete all overdue and today tasks via checkboxes. Expected: Screen transitions to the "Alles erledigt! (star emoji)" celebration state with the celebration icon. Why human: Requires a complete task-completion flow with real data; state transition must be visually confirmed.

6. Room name tag navigation

Test: Tap the room name tag (small pill label) on any task row in the daily plan. Expected: App navigates to that room's task list screen (/rooms/:roomId). Why human: GoRouter navigation with the correct roomId requires runtime verification.

7. Cleanliness indicator on room cards (CLEAN-01)

Test: Switch to the Rooms tab and inspect room cards. Expected: Each room card has a thin bar at the bottom, coloured from coral (dirty) to sage green (clean) based on the ratio of overdue tasks. Why human: Visual indicator colour, rendering, and dynamic response to task state require live inspection.


Summary

Phase 3 automated verification passes completely:

  • All 14 must-have truths verified against actual code (not summary claims)
  • All 8 artifacts exist, are substantive (ranging 31-389 lines), and are wired
  • All 5 key links verified in the actual files
  • All 7 requirement IDs (PLAN-01 through PLAN-06, CLEAN-01) satisfied with code evidence
  • 72/72 tests pass; dart analyze reports zero issues
  • No TODO/FIXME/stub anti-patterns in production code

Status is human_needed because the user experience goals (visual layout, animation feel, navigation flow, colour rendering) can only be fully confirmed by running the app. The code structure gives high confidence all 7 runtime items will pass.


Verified: 2026-03-16T12:30:00Z Verifier: Claude (gsd-verifier)