# Bug Fix Plan **Created:** 2026-01-14 **Approach:** Batch by feature area, regression tests for each fix **Total Bugs:** 12 --- ## Batch 1: Sharing & Achievements (4 bugs) **Files to modify:** - `SportsTime/Export/Sharing/AchievementCardGenerator.swift` - `SportsTime/Features/Progress/Views/AchievementsListView.swift` - `SportsTime/Export/Sharing/ShareService.swift` | Bug | Description | Root Cause Hypothesis | Fix Approach | |-----|-------------|----------------------|--------------| | **1.1** | Achievement text not wrapping, being cut off | Missing `.lineLimit(nil)` or fixed frame width | Add proper text wrapping constraints to `AchievementCard` | | **1.2** | Remove username on share | Username hardcoded in share card render | Remove username field from `AchievementCardGenerator` output | | **1.3** | "More" button on share doesn't do anything | Button has no action handler | Implement or remove the "More" button | | **1.4** | Achievements share says "2,026" instead of "2026" | Number formatting with thousands separator | Fix year formatting to not use locale grouping | **Tests to add:** - `test_AchievementCard_TextWrapsCorrectly_LongAchievementNames` - `test_ShareCard_DoesNotIncludeUsername` - `test_YearFormatting_NoThousandsSeparator` --- ## Batch 2: Polls (4 bugs) **Files to modify:** - `SportsTime/Features/Polls/ViewModels/PollDetailViewModel.swift` - `SportsTime/Features/Polls/Views/PollsListView.swift` - `SportsTime/Core/Services/PollService.swift` | Bug | Description | Root Cause Hypothesis | Fix Approach | |-----|-------------|----------------------|--------------| | **2.1** | Poll not found when tapping created poll | Share code case mismatch or CloudKit sync delay | Verify case handling; add local cache lookup before CloudKit | | **2.2** | Poll refreshes every time screen appears | Missing cache, always fetching from CloudKit | Add local state caching, only fetch on pull-to-refresh | | **2.3** | Creator cannot delete their poll | Deletion permission check failing or UI missing | Verify `notPollOwner` check; add delete button for owner | | **2.4** | Trip details not showing in poll | Poll options not loading trip data | Check if trip reference is being dereferenced correctly | **Tests to add:** - `test_Poll_FoundByShareCode_CaseInsensitive` - `test_PollsList_UsesLocalCache_NotRefreshOnAppear` - `test_PollOwner_CanDeleteOwnPoll` - `test_Poll_ShowsTripDetails_WhenLinked` --- ## Batch 3: Schedule & Games (3 bugs) **Files to modify:** - `SportsTime/Features/Schedule/Views/ScheduleListView.swift` - `SportsTime/Features/Schedule/ViewModels/ScheduleViewModel.swift` - `SportsTime/Features/Home/Views/Variants/Classic/HomeContent_Classic.swift` - Possibly: Data layer if timezone issue | Bug | Description | Root Cause Hypothesis | Fix Approach | |-----|-------------|----------------------|--------------| | **3.1** | Games showing at 7 AM (incorrect time) | Timezone conversion issue (UTC displayed as local) | Investigate game time storage; fix timezone handling | | **3.2** | Today's games not highlighted | `isToday` cache not reactive or comparison bug | Check date comparison logic; ensure proper calendar usage | | **3.3** | Featured trip shows NBA+NHL but only has NHL game | Filter logic bug in `SuggestedTripsGenerator` | Fix sport filtering when generating featured trips | **Tests to add:** - `test_GameTime_DisplaysInLocalTimezone` - `test_ScheduleList_HighlightsTodaysGames` - `test_FeaturedTrip_OnlyShowsSportsWithGames` --- ## Batch 4: Home Screen (1 bug) **Files to modify:** - `SportsTime/Features/Home/Views/Variants/Classic/HomeContent_Classic.swift` - Possibly all 18+ design variants in `Features/Home/Views/Variants/` | Bug | Description | Root Cause Hypothesis | Fix Approach | |-----|-------------|----------------------|--------------| | **4.1** | Remove Home Screen quick start | Feature no longer wanted | Remove `quickActions` section from all home variants | **Tests to add:** - `test_HomeScreen_NoQuickStartSection` **Note:** Need to check all 18+ design variants. May need to grep for `quickActions` or `SportSelectorGrid` across all variant files. --- ## Batch 5: Trips View (1 bug) **Files to modify:** - `SportsTime/Features/Trip/Views/TripCreationView.swift` (or wherever pace selector lives) - Possibly: A filter view in trips list | Bug | Description | Root Cause Hypothesis | Fix Approach | |-----|-------------|----------------------|--------------| | **5.1** | Pace capsule animation looks off when selecting packed/moderate/relaxed | Animation timing or layout issue with selection state | Investigate capsule animation; fix transition | **Note from exploration:** The pace selector UI may be in a trips filtering view (line 1521 shows `TripPaceFilter`), not trip creation. Need to locate the exact view with the animation bug. **Tests to add:** - UI test: `test_PaceSelector_AnimatesSmoothlOnSelection` --- ## Execution Order 1. **Batch 1 (Sharing)** - Most visible to users, affects social features 2. **Batch 2 (Polls)** - Existing functionality broke, needs regression fix 3. **Batch 3 (Schedule)** - Core app functionality 4. **Batch 4 (Home)** - Simple removal 5. **Batch 5 (Trips)** - Minor UI polish --- ## Investigation Needed Before Fixes | Item | Question | How to Investigate | |------|----------|-------------------| | 7 AM games | Is this timezone or bad data? | Check a specific game's stored `dateTime` vs expected local time | | Poll not found | Is it case sensitivity or sync timing? | Test with uppercase/lowercase share codes; check CloudKit logs | | More button | What should it do, or should it be removed? | Ask user for intended behavior | | Quick start | Remove from all 18 variants or just Classic? | Confirm scope with user | --- ## Decisions Made | Question | Decision | |----------|----------| | "More" button on share | **Remove it** - button serves no purpose | | Quick start removal | **All 18+ variants** - for consistency | | Poll trip details | **Full summary** - cities, games, dates, duration |