Commit Graph

119 Commits

Author SHA1 Message Date
0ea79e0853 docs(phase-07): complete phase execution
All checks were successful
Build and Release to F-Droid / build-and-deploy (push) Successful in 10m29s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.1
2026-03-16 22:43:41 +01:00
772034cba1 docs(07-02): complete sort dropdown UI plan
- 07-02-SUMMARY.md: SortDropdown widget wired into HomeScreen and TaskListScreen AppBars
- STATE.md: updated metrics, decisions, session record
- ROADMAP.md: Phase 7 complete (2/2 plans done)
2026-03-16 22:40:39 +01:00
a3e4d0224b feat(07-02): add sort dropdown tests to HomeScreen and fix AppShell test regression
- Add sortPreferenceProvider override to _buildApp test helper
- Add 'HomeScreen sort dropdown' test group: verifies PopupMenuButton<TaskSortOption> and AppBar title
- Fix app_shell_test: expect findsWidgets for 'Übersicht' since AppBar title now also shows it
- 115 tests pass total (113 existing + 2 new)
2026-03-16 22:39:18 +01:00
e5eccb74e5 feat(07-02): build SortDropdown widget and integrate into HomeScreen and TaskListScreen
- Create SortDropdown ConsumerWidget using PopupMenuButton<TaskSortOption>
- Displays current sort label with sort icon in AppBar actions
- Check mark shown on active option via Opacity widget
- Add Scaffold with AppBar (title: Übersicht, actions: SortDropdown) to HomeScreen
- Add SortDropdown before edit/delete IconButtons in TaskListScreen AppBar
2026-03-16 22:37:18 +01:00
9398193c1e docs(07-01): complete task sort domain and provider plan 2026-03-16 22:35:01 +01:00
3697e4efc4 feat(07-01): integrate sort logic into calendarDayProvider and tasksInRoomProvider
- calendarDayProvider watches sortPreferenceProvider and sorts dayTasks
- overdueTasks intentionally unsorted (pinned at top per design decision)
- tasksInRoomProvider watches sortPreferenceProvider and sorts via stream.map
- _sortTasks helper (TaskWithRoom) and _sortTasksRaw helper (Task) both support:
  - alphabetical: case-insensitive A-Z by name
  - interval: by intervalType.index ascending, intervalDays as tiebreaker
  - effort: by effortLevel.index ascending (low→medium→high)
- All 113 tests pass, analyze clean
2026-03-16 22:33:34 +01:00
13c7d623ba feat(07-01): create TaskSortOption enum, SortPreferenceNotifier, and localization strings
- TaskSortOption enum with alphabetical, interval, effort values
- SortPreferenceNotifier persists sort preference to SharedPreferences
- Follows ThemeNotifier pattern: sync default (alphabetical), async load
- Generated sort_preference_notifier.g.dart via build_runner
- Added sortAlphabetical/sortInterval/sortEffort/sortLabel to app_de.arb
- Regenerated app_localizations.dart and app_localizations_de.dart
2026-03-16 22:32:06 +01:00
a9f298350e test(07-01): add failing tests for SortPreferenceNotifier
- Tests cover default state (alphabetical)
- Tests cover setSortOption state update
- Tests cover SharedPreferences persistence
- Tests cover persisted value loaded on restart
- Tests cover unknown persisted value fallback
2026-03-16 22:30:05 +01:00
a44f2b80b5 fix(07): remove invalid -x flag from Task 1 verify command 2026-03-16 22:26:50 +01:00
27f18d4f39 docs(07-task-sorting): create phase plan 2026-03-16 22:23:24 +01:00
a94d41b7f7 docs(state): record phase 7 context session 2026-03-16 22:14:31 +01:00
99358ed704 docs(07): capture phase context 2026-03-16 22:14:13 +01:00
2a4b14cb43 chore(release): improve F-Droid release workflow for repo persistence
- Download entire `fdroid/` directory from Hetzner to retain older APKs, repo keystore, and config.yml.
- Add steps to ensure repo signing key and icons during initialization.
- Adjust SCP upload to include the entire `fdroid/` directory for better state continuity.
2026-03-16 22:13:32 +01:00
7a2c1b81de docs(phase-06): complete phase execution 2026-03-16 22:02:03 +01:00
7344933278 docs(06-01): complete task history plan
- Create 06-01-SUMMARY.md with full execution documentation
- Update STATE.md: Phase 6 Plan 1 complete, decisions recorded
- Update ROADMAP.md: Phase 6 marked complete (1/1 plans)
- Mark HIST-01 and HIST-02 requirements complete
2026-03-16 21:59:00 +01:00
9f902ff2c7 feat(06-01): build task history sheet, wire into TaskFormScreen, add CalendarTaskRow navigation
- Create task_history_sheet.dart: showTaskHistorySheet() modal bottom sheet
- Sheet uses StreamBuilder on watchCompletionsForTask, shows dates in dd.MM.yyyy + HH:mm format
- Empty state: Icons.history + 'Noch nie erledigt' message
- Count summary shown above list when completions exist
- Add Verlauf ListTile to TaskFormScreen (edit mode only) opening history sheet
- Add onTap to CalendarTaskRow navigating to /rooms/:roomId/tasks/:taskId
- All 106 tests pass, zero analyze issues
2026-03-16 21:57:11 +01:00
ceae7d7d61 feat(06-01): add watchCompletionsForTask DAO method and history localization strings
- Add watchCompletionsForTask(taskId) to TasksDao: Stream<List<TaskCompletion>> sorted newest first
- Regenerate tasks_dao.g.dart with build_runner
- Add taskHistoryTitle, taskHistoryEmpty, taskHistoryCount to app_de.arb
- Regenerate app_localizations.dart and app_localizations_de.dart
- All 5 new DAO tests pass, zero analyze issues
2026-03-16 21:55:44 +01:00
2687f5e31e test(06-01): add failing tests for watchCompletionsForTask DAO method
- Tests cover empty state, single completion, multiple completions in reverse order
- Tests cover task isolation (different taskIds do not cross-contaminate)
- Tests cover stream reactivity (new completion triggers emission)
2026-03-16 21:53:21 +01:00
97eaa6dacc chore(release): enhance upload script with SFTP mkdir pre-checks and SCP improvements 2026-03-16 21:51:31 +01:00
03ebaac5a8 docs(06-task-history): create phase plan 2026-03-16 21:50:11 +01:00
dec15204de docs(state): record phase 6 context session 2026-03-16 21:46:23 +01:00
adb46d847e docs(06): capture phase context 2026-03-16 21:46:15 +01:00
b674497003 docs(phase-05): complete phase execution 2026-03-16 21:42:44 +01:00
7536f2f759 chore(release): switch to SCP-only upload, remove rsync dependency 2026-03-16 21:38:37 +01:00
27b1a80f29 docs(05-02): complete calendar strip UI plan
- 05-02-SUMMARY.md: calendar strip UI widgets delivered, 1 auto-fix (test migration)
- STATE.md: Phase 5 complete, 2/2 plans done, decisions recorded
- ROADMAP.md: Phase 5 marked complete (2/2 plans)
- REQUIREMENTS.md: CAL-01, CAL-03, CAL-04 marked complete
2026-03-16 21:38:06 +01:00
88ef248a33 feat(05-02): replace HomeScreen with calendar composition and floating Today button
- Rewrite HomeScreen as ConsumerStatefulWidget composing CalendarStrip + CalendarDayList
- CalendarStripController wires floating Today button to scroll-strip-to-today animation
- FloatingActionButton.extended shows "Heute" + Icons.today only when today is out of viewport
- Old overdue/today/tomorrow stacked plan sections and ProgressCard fully removed
2026-03-16 21:35:54 +01:00
f718ee8483 feat(05-02): build CalendarStrip, CalendarTaskRow, CalendarDayList widgets
- Add totalTaskCount field to CalendarDayState to distinguish first-run from celebration
- Add getTaskCount() to CalendarDao (SELECT COUNT from tasks)
- CalendarStrip: 181-day horizontal scroll with German abbreviations, today highlighting, month boundary labels, scroll-to-today controller
- CalendarTaskRow: task name + room tag chip + checkbox, no relative date, isOverdue coral styling
- CalendarDayList: loading/error/first-run-empty/empty-day/celebration/has-tasks states, overdue section (today only), slide-out completion animation
- Update home_screen_test.dart and app_shell_test.dart to test new calendar providers instead of dailyPlanProvider
2026-03-16 21:35:35 +01:00
01de2d0f9c docs(05-01): complete calendar data layer plan — CalendarDao, providers, l10n
- 05-01-SUMMARY.md: execution results with deviations, decisions, self-check
- STATE.md: current position updated to Plan 01 complete, 3 new decisions
- ROADMAP.md: Phase 5 in progress (1/2 plans complete)
- REQUIREMENTS.md: CAL-02 and CAL-05 marked complete
2026-03-16 21:26:28 +01:00
588f215078 chore(release): improve upload script with retries, directory check, and fallback to scp 2026-03-16 21:25:00 +01:00
68ba7c65ce feat(05-01): add CalendarDayState model, Riverpod providers, and l10n strings
- CalendarDayState: selectedDate, dayTasks, overdueTasks fields with isEmpty helper
- selectedDateProvider: NotifierProvider with SelectedDateNotifier, defaults to today
- calendarDayProvider: StreamProvider.autoDispose, overdue only when viewing today
- Add calendarTodayButton l10n string ("Heute") to ARB and generated dart files
2026-03-16 21:24:07 +01:00
c666f9a1c6 feat(05-01): implement CalendarDao with date-parameterized task queries
- CalendarDao.watchTasksForDate: returns tasks due on a specific calendar day, sorted by name
- CalendarDao.watchOverdueTasks: returns tasks due strictly before reference date, sorted by due date
- Registered CalendarDao in AppDatabase @DriftDatabase annotation
- Generated calendar_dao.g.dart and updated database.g.dart
2026-03-16 21:21:07 +01:00
f5c4b4928f test(05-01): add failing tests for CalendarDao
- watchTasksForDate: empty list, date filter, multi-room, alpha sort, no overdue carry-over
- watchOverdueTasks: empty list, before-date filter, excludes reference date, sorted by date
2026-03-16 21:19:55 +01:00
31d4ef879b docs(05-calendar-strip): create phase plan 2026-03-16 21:14:59 +01:00
fe7ba21061 chore(release): add rsync to release workflow dependencies 2026-03-16 20:58:25 +01:00
90ff66223c docs: create milestone v1.1 roadmap (3 phases) 2026-03-16 20:54:40 +01:00
b7a243603c docs: define milestone v1.1 requirements 2026-03-16 20:50:20 +01:00
fa26d6b301 chore(release): install fdroidserver via pip for compatibility with modern Flutter/AGP APKs 2026-03-16 20:45:09 +01:00
6bb1bc35d7 docs: start milestone v1.1 Calendar & Polish 2026-03-16 20:44:51 +01:00
ead085ad26 fix(android): move MainActivity to correct package to fix ClassNotFoundException
The namespace/applicationId is `de.jeanlucmakiola.household_keeper` but
MainActivity was in the old `com.jlmak.household_keeper` package, causing
a crash on launch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 20:39:08 +01:00
74a801c6f2 chore(release): enhance release workflow to safely handle APK naming with ref-based fallback 2026-03-16 20:30:40 +01:00
0059095e38 chore(release): make sudo usage optional in release workflow setup steps 2026-03-16 20:14:31 +01:00
8c72403c85 chore: archive v1.0 phase directories to milestones/
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 20:12:01 +01:00
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