77 Commits

Author SHA1 Message Date
1a1a10c9ea chore: complete v1.0 MVP milestone
Some checks failed
Build and Release to F-Droid / build-and-deploy (push) Has been cancelled
Archive roadmap and requirements to milestones/, evolve PROJECT.md
with validated requirements and decision outcomes, reorganize
ROADMAP.md with milestone grouping, create retrospective.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.0
2026-03-16 20:10:01 +01:00
36126acc18 chore(android): migrate build.gradle.kts to use Kotlin idioms for properties and improve readability 2026-03-16 19:51:53 +01:00
76192e22fa chore(release): improve Android SDK setup and toolchain verification in workflow 2026-03-16 19:42:04 +01:00
9c2ae12012 chore(release): add Android SDK setup steps to workflow 2026-03-16 19:36:09 +01:00
dcb2cd0afa chore(release): trust Flutter SDK directories in workflow to fix safe directory errors 2026-03-16 19:29:50 +01:00
c2570cdc01 chore(release): remove explicit Flutter version specification in workflow 2026-03-16 19:09:37 +01:00
3c2ad5c7c6 chore(release): add jq installation step in workflow for JSON parsing 2026-03-16 19:06:59 +01:00
f6272a39b4 chore(release): update workflow to use Docker runner instead of Ubuntu 2026-03-16 19:00:14 +01:00
170326dd85 Merge remote-tracking branch 'origin/Develop' into Develop
# Conflicts:
#	.gitea/workflows/release.yaml
2026-03-16 18:55:15 +01:00
74de67de59 fix(release): correct indentation in release workflow script 2026-03-16 18:54:39 +01:00
b0765795b8 Update .gitea/workflows/release.yaml 2026-03-16 17:53:13 +00:00
489c0d5c4f add manual trigger support to release workflow 2026-03-16 18:51:49 +01:00
967dc7d09a broaden release trigger from 'v*' to all tags in workflow config v1.0.2 2026-03-16 18:43:29 +01:00
998f2be87f docs(phase-2): complete context and implementation planning
- Documented comprehensive plan for Phase 2: Rooms and Tasks
- Includes feature scope, requirements, implementation decisions, UI/UX specifics, and scheduling logic
- Updated schema: added Room and Task tables with CRUD and recurrence support
- Added implementation details for room/task templates, cleanliness indicators, and overdue task handling
- Generated Drift schemas for database versioning (v1 → v2) with test coverage
v1.0.0 v1.0.1
2026-03-16 18:39:00 +01:00
88519f2de8 docs(phase-4): complete phase execution 2026-03-16 15:20:31 +01:00
126e1c3084 docs(04-03): complete Phase 4 verification gate plan
- dart analyze --fatal-infos: zero issues
- flutter test: 89/89 tests pass (72 original + 12 notification + 5 settings widget)
- NOTF-01 confirmed: NotificationService, DailyPlanDao queries, Android config, timezone init
- NOTF-02 confirmed: NotificationSettingsNotifier, SettingsScreen section, toggle, time picker
- Phase 4 (Notifications) fully complete — all 4 phases of v1.0 milestone done

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 15:14:14 +01:00
a3d3074a91 docs(04-02): complete notification settings UI plan 2026-03-16 15:09:52 +01:00
77de7cdbf3 feat(04-02): add widget tests for notification settings UI
- 5 tests for Benachrichtigungen section: header rendering, toggle OFF default,
  time picker visibility on/off with AnimatedSize, formatted time display
- Uses notificationSettingsProvider.overrideWithValue for test isolation
- Uses themeProvider.overrideWithValue to avoid SharedPreferences dependency
- UncontrolledProviderScope + ProviderContainer follows home_screen_test pattern
- All 89 tests pass (84 existing + 5 new)
2026-03-16 15:07:26 +01:00
0103ddebbb feat(04-02): wire notification settings UI, permission flow, scheduling, and tap navigation
- Convert SettingsScreen from ConsumerWidget to ConsumerStatefulWidget
- Add Benachrichtigungen section between Darstellung and Uber sections
- SwitchListTile with permission request on toggle ON (Android 13+)
- Toggle reverts to OFF on permission denial with SnackBar hint
- AnimatedSize progressive disclosure for time picker row when enabled
- _scheduleNotification() queries DailyPlanDao for task/overdue counts
- Skip notification scheduling when task count is 0
- Notification body includes overdue split when overdue > 0
- _onPickTime() shows Material 3 showTimePicker dialog then reschedules
- Wire router.go('/') in NotificationService._onTap for tap navigation
- Regenerate AppLocalizations with 7 new notification strings from Plan 01 ARB
2026-03-16 15:06:00 +01:00
903d80f63e docs(04-01): complete notification infrastructure plan
- Create 04-01-SUMMARY.md documenting notification service, settings notifier, and tests
- Update STATE.md: advance to Phase 4 Plan 1 complete, add 4 decisions, record metrics
- Update ROADMAP.md Phase 4 progress to 1/3 plans complete
- Mark NOTF-01 and NOTF-02 requirements as complete in REQUIREMENTS.md
2026-03-16 15:00:36 +01:00
4f72eac933 feat(04-01): NotificationSettingsNotifier with SharedPreferences persistence and full test suite
- Fix NotificationService API calls to use flutter_local_notifications v21 named parameters
- Expose nextInstanceOf as @visibleForTesting public method for unit testing
- Create NotificationSettingsNotifier with @Riverpod(keepAlive: true)
- NotificationSettings data class with enabled bool + TimeOfDay fields
- Persist notifications_enabled, notifications_hour, notifications_minute to SharedPreferences
- Sync default state in build(), async _load() overrides on hydration
- Update tests to use correct Riverpod 3 provider name (notificationSettingsProvider)
- Add makeContainer() helper to await initial _load() before asserting mutations
- All 84 tests pass (72 existing + 12 new notification tests)
2026-03-16 14:57:04 +01:00
0f6789becd test(04-01): add failing tests for NotificationSettingsNotifier and NotificationService
- Tests for default state (enabled=false, time=07:00)
- Tests for setEnabled persistence to SharedPreferences
- Tests for setTime persistence to SharedPreferences
- Tests for loading persisted values via _load()
- Tests for NotificationService singleton pattern
- Tests for nextInstanceOf timezone logic (future/past time)
2026-03-16 14:54:39 +01:00
878767138c feat(04-01): Android config, NotificationService, DAO queries, timezone init, ARB strings
- Add flutter_local_notifications ^21.0.0, timezone ^0.11.0, flutter_timezone ^1.0.8 to pubspec.yaml
- Set compileSdk=35, enable core library desugaring in build.gradle.kts
- Add POST_NOTIFICATIONS, RECEIVE_BOOT_COMPLETED permissions and boot receivers to AndroidManifest.xml
- Create NotificationService singleton with initialize, requestPermission, scheduleDailyNotification, cancelAll
- Add getOverdueAndTodayTaskCount and getOverdueTaskCount one-shot queries to DailyPlanDao
- Initialize timezone and NotificationService in main.dart before runApp
- Add 7 notification-related ARB strings to app_de.arb
- All 72 existing tests pass
2026-03-16 14:52:29 +01:00
abc56f032f docs(04): create phase plan 2026-03-16 14:43:37 +01:00
7a2da5f4b8 docs(phase-4): add validation strategy 2026-03-16 14:38:07 +01:00
0bd3cf7cb8 docs(phase-4): research notifications phase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 14:37:01 +01:00
6d73d5f2fc docs(state): record phase 4 context session 2026-03-16 14:26:24 +01:00
0848a3eb4a docs(04): capture phase context 2026-03-16 14:26:11 +01:00
fd491bf87f docs(phase-3): complete phase execution 2026-03-16 13:00:22 +01:00
8e7afd83e0 docs(03-03): complete Phase 3 verification gate plan
- Phase 3 verification gate passed: dart analyze clean, 72/72 tests
- All 7 requirements verified functional (PLAN-01-06, CLEAN-01)
- Updated STATE.md: Phase 3 complete, progress 100%
- Updated ROADMAP.md: Phase 3 marked complete with 3/3 plans

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:55:49 +01:00
e7e6ed4946 fix(03-03): resolve dart analyze warnings in test files
- Remove unused drift import in daily_plan_dao_test
- Fix unused local variable in tasks_dao_test
- Switch ProviderScope to UncontrolledProviderScope in home_screen_test
  and app_shell_test to resolve riverpod_lint scoped_providers warning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:51:39 +01:00
a9d6aa7a26 docs(03-02): complete daily plan UI plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:41:30 +01:00
444213ece1 feat(03-02): rewrite HomeScreen with daily plan UI, completion animation, empty states, and tests
- Complete HomeScreen rewrite: progress card, overdue/today/tomorrow sections
- Animated task completion with SizeTransition + SlideTransition on checkbox tap
- "All clear" celebration state when all tasks done, "no tasks" state for first-run
- Room name tags navigate to room task list via context.go
- 6 widget tests covering empty, all-clear, normal state, overdue, tomorrow sections
- Fixed app_shell_test to override dailyPlanProvider for new HomeScreen dependency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:39:04 +01:00
4e3a3ed3c2 feat(03-02): add DailyPlanTaskRow and ProgressCard widgets
- DailyPlanTaskRow: task name, tappable room tag, relative date (coral if overdue), optional checkbox, no row-tap
- ProgressCard: "X von Y erledigt" with LinearProgressIndicator

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:35:44 +01:00
67e55f2245 docs(03-01): complete daily plan data layer plan
- SUMMARY.md documenting DailyPlanDao, models, provider, localization keys
- STATE.md updated to Phase 3 Plan 1 complete (8/10 plans, 80%)
- ROADMAP.md progress updated for Phase 3
- Requirements PLAN-01, PLAN-02, PLAN-03, PLAN-05 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:33:42 +01:00
1c09a43995 feat(03-01): add daily plan provider with date categorization and localization keys
- dailyPlanProvider: manual StreamProvider.autoDispose with overdue/today/tomorrow partitioning
- Stable progress denominator: remaining overdue + remaining today + completedTodayCount
- 10 new German localization keys for daily plan sections, progress, empty states
- dart analyze clean, full test suite (66/66) passes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:30:58 +01:00
ad70eb7ff1 feat(03-01): implement DailyPlanDao with cross-room join query and completion count
- watchAllTasksWithRoomName: innerJoin tasks+rooms, sorted by nextDueDate asc
- watchCompletionsToday: customSelect with readsFrom for proper stream invalidation
- All 7 DAO unit tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:29:24 +01:00
74b3bd5543 test(03-01): add failing tests for DailyPlanDao cross-room query and completion count
- 7 failing tests for watchAllTasksWithRoomName and watchCompletionsToday
- DAO stub with UnimplementedError methods registered in AppDatabase
- TaskWithRoom and DailyPlanState model classes defined

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:28:21 +01:00
76eee6baa7 docs(03): create phase plan for daily plan and cleanliness 2026-03-16 12:21:59 +01:00
aedfa82248 docs(phase-3): add phase context 2026-03-16 12:16:16 +01:00
1d8ea07f8a docs(phase-3): add validation strategy 2026-03-16 12:15:52 +01:00
a8552538ec docs(phase-3): research daily plan and cleanliness domain 2026-03-16 12:14:47 +01:00
76cd98300d fix: use ValueKey<String> for reorderable grid and add status bar padding
flutter_reorderable_grid_view requires String keys, not int. Also
adds safe area top padding so the room grid doesn't overlap the
system status bar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:59:24 +01:00
98f42ccb9c docs(phase-2): complete phase execution 2026-03-15 22:29:38 +01:00
6ad42536e9 docs(02-05): complete Phase 2 verification gate plan
- Auto-approved verification checkpoint (59/59 tests, dart analyze clean)
- Phase 2 marked complete in ROADMAP.md (5/5 plans)
- STATE.md updated for Phase 3 readiness

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:24:45 +01:00
165d5fc60c docs(02-04): complete template selection flow plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:21:19 +01:00
03f531f896 feat(02-04): wire template selection flow into room creation
- After createRoom, detect room type via detectRoomType on room name
- Show TemplatePickerSheet if room type matches one of 14 known types
- Create tasks from selected templates with correct frequency, effort, and anchor day
- Navigate to new room after creation (with or without templates)
- Edit mode unchanged: no template prompt on room updates
- Custom rooms (no type match) skip template prompt entirely

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:18:33 +01:00
903567e735 feat(02-04): create template picker bottom sheet with German localization
- Add TemplatePickerSheet StatefulWidget with checklist UI for task templates
- Add showTemplatePickerSheet helper for modal display with DraggableScrollableSheet
- Add 4 German localization keys: templatePickerTitle, Skip, Add, Selected count
- All templates unchecked by default, confirm button only enabled with selection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:17:21 +01:00
08bacecf8a docs(02-03): complete task management UI plan
- Create 02-03-SUMMARY.md with task UI accomplishments and decisions
- Update STATE.md: plan 3/5 complete, 71% progress, task decisions
- Update ROADMAP.md: mark 02-02 and 02-03 complete, 3/5 in progress

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:12:54 +01:00
5a22b8114b docs(02-02): complete room UI plan summary and state updates
- Create 02-02-SUMMARY.md with task commits, deviations, and self-check
- Update STATE.md with position, decisions, metrics, and session info
- Update ROADMAP.md with plan progress

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:12:19 +01:00