Gradle jobs now run on the dedicated gradle runner (one at a time, 8g
cap) instead of the shared docker label, which let two Gradle builds run
in parallel and run the VPS out of memory. Cheap gate, lint and deploy
trigger jobs move to the light runner.
Phase 11 removed checkbox-disable restrictions so users can complete
tasks on any day. Updated test to expect enabled checkboxes instead
of disabled ones.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add isPrePopulated parameter to CalendarTaskRow (default false, backward compat)
- Wrap ListTile in Opacity(0.55) when isPrePopulated to indicate upcoming tasks
- Render 'Demnächst' section in CalendarDayList with muted section header
- Update _buildAnimatedTaskRow to accept and forward isPrePopulated flag
- Update _CompletingTaskRow to accept isPrePopulated (always false during animation)
- Update celebration check to include prePopulatedTasks.isEmpty condition
- Update _completingTaskIds cleanup to also check prePopulatedTasks
- Add watchAllActiveRecurringTasks() and watchAllActiveRecurringTasksInRoom() to CalendarDao
- Add watchCompletionsInRange() for period-completion filtering
- Extend CalendarDayState with prePopulatedTasks field (default empty, backward compat)
- Update isEmpty getter to include prePopulatedTasks.isEmpty
- Add _isInCurrentIntervalWindow() and _calculatePreviousDueDate() helpers
- Rewrite calendarDayProvider and roomCalendarDayProvider with pre-population logic
- Fix _subtractMonths() year-boundary bug using total-month arithmetic
- Add 9 new DAO tests for watchAllActiveRecurringTasks, watchAllActiveRecurringTasksInRoom, watchCompletionsInRange
- When completing on due date: use original due date as base (preserves rhythm)
- When completing on different day: use today as base (per D-02)
- Replace todayDateOnly with todayStart used for both base calculation and catch-up
- Update doc comment to reflect new behavior
- Test: completeTask on due date preserves rhythm (weekly task)
- Test: completeTask before due date recalculates from today
- Test: completeTask daily task on non-due day recalculates from today
- Test: completeTask monthly task early preserves anchor day
- Delete daily_plan_providers.dart (orphaned since Phase 5 calendar strip)
- Delete daily_plan_task_row.dart (orphaned since Phase 5 calendar strip)
- Delete progress_card.dart (orphaned since Phase 5 calendar strip)
- Remove DailyPlanState class from daily_plan_models.dart (only used by deleted files)
- Preserve TaskWithRoom class (still used by calendar system)
- Red FilledButton.icon with error color below history section (edit mode only)
- _onDelete shows AlertDialog with taskDeleteConfirmTitle/Message l10n strings
- Confirm calls smartDeleteTask and pops back to room task list
- Cancel dismisses dialog with no action
- Button disabled while _isLoading
- All 144 tests pass, dart analyze clean
- Add isActive BoolColumn (default true) to Tasks table
- Bump schema version from 2 to 3 with addColumn migration
- Filter watchTasksInRoom to isActive=true only
- Filter getOverdueTaskCount to isActive=true only
- Add softDeleteTask(taskId) - sets isActive=false without removing data
- Add getCompletionCount(taskId) - counts TaskCompletions for a task
- Tests for softDeleteTask sets isActive=false without removing from DB
- Tests for getCompletionCount with 0 and N completions
- Tests for watchTasksInRoom excludes inactive tasks
- Tests for getOverdueTaskCount excludes inactive tasks
- Test for hard deleteTask still removes task and completions
The stable Flutter SDK on the CI runner does not include
the `dart pub audit` subcommand. Trivy scan still covers
dependency security.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
subosito/flutter-action@v2 requires jq to parse action inputs.
The ci job in both workflows was missing the install step.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 512x512 app icon to F-Droid metadata for en-US and de-DE locales.
Add CI pipeline with static analysis, tests, security audit, and debug build.
Add security gate in release workflow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ci.yaml triggered on branch pushes and PRs with flutter analyze,
flutter test, dart pub audit, Trivy scan, and debug APK build. Gate the
release workflow behind a CI job so release builds only proceed after
all checks pass.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>