Merge develop -> main: full session (KC-51 through KC-71) #28
Reference in New Issue
Block a user
No description provided.
Delete Branch "develop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Merging the accumulated develop branch to main to trigger the release pipeline and test the newly-completed TestFlight upload step (KC-71).
Includes: analytics system completion, workout completion flow redesign, habit reminders, recurring-task fixes, TickTick-style task row redesign, Watch/HealthKit streak sync fix, every-N recurrence support, and CI/CD TestFlight automation.
- Workout streak now honors the weekly goal ('reach your goal every week'): counts workout days across consecutive kept weeks, so rest days and a skipped day within goal no longer reset it to 1 (KC: profile showed streak 1 with 5 workouts that week). - Task 7-day bars / 'this week' now count recurring occurrences (completedOccurrences), fixing permanently-empty bars alongside a nonzero done rate. - New task day-streak stat on the profile Tasks card. - New ActivityHistoryView: 90-day day-by-day archive of completed tasks (times, repeat markers), workout logs (sets/volume), missed/made-up days. - StreakLogicTests: 8 unit tests; algorithm additionally verified via standalone harness (7/7 scenarios incl. the skipped-Thursday case). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Real bug: todayTasks excludes timed tasks whose time has passed ('belongs in overdue'), but overdueTasks deliberately excludes ALL recurring tasks (it feeds postpone/postponeAllOverdue, which mutate dueDate by id -- for a recurring task that's the recurrence anchor, not just today's occurrence; including them there would let Postpone All corrupt the whole series). Recurring tasks fell into the gap between the two rules and vanished from the Today tab entirely once their time passed, while Calendar's day view (no time-of-day gating) kept showing them fine. Fix: todayTasks only excludes past-time NON-recurring tasks. Recurring occurrences always stay in Today, matching Calendar, without ever touching the overdue/postpone path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Build error: Color(r:g:b:) is a private extension scoped to DesignTokens.swift (only UIColor's sibling init is also private, both file-scoped by design). KC-55/56 called it directly from SettingsView.swift and OnboardingView.swift for the coffee icon color -- invisible there, so the compiler fell back to unrelated overloads ('Cannot convert Int to Color', 'Extra argument b'). Added AppColors.coffeeBrown (defined where the private init is visible), replacing both inline Color(r:g:b:) call sites -- matches how every other color in the app is centralized and accessible everywhere. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>The custom-slot row just said 'Coffee' -- identical-looking to the card's own 'Coffee reminders' title, with no affordance signaling it's an editable, user-nameable 5th slot (distinct from the 4 fixed Morning/Midday/Afternoon/ Evening ones). Added a small pencil + 'YOUR OWN REMINDER' label above the field; changed the default from pre-filled 'Coffee' to empty so the placeholder ('Name it, e.g. "Second coffee"') actually does its job. NotificationManager falls back to 'Coffee' for the notification text only if the user never typed a name. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>