fix: multiple bug fixes and improvements
- Fix suggested trips showing wrong sports for cross-country trips - Remove quick start sections from home variants (Classic, Spotify) - Remove dead quickActions code from HomeView - Fix pace capsule animation in TripCreationView - Add text wrapping to achievement descriptions - Improve poll parsing with better error handling - Various sharing system improvements Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
134
docs/BUG_FIX_PLAN.md
Normal file
134
docs/BUG_FIX_PLAN.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# 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 |
|
||||
Reference in New Issue
Block a user