TODO Inventory

This document catalogs all TODO comments in the codebase, organized by category and priority for planning future development work.

Summary

CategoryCountPriority
KMP Migration Blockers8High
Future Features6Medium
Implementation Gaps7Medium
Test Infrastructure8Low
Navigation/UI5Low
Documentation TODOs8Low

KMP Migration Blockers

These TODOs block further Kotlin Multiplatform migration work.

BowSetupRepository Migration

Files affected:

  • shared/data/src/commonMain/kotlin/com/archeryapprentice/data/repositories/RoundRepository.kt
// TODO: Add bow setup cleanup when BowSetupRepository migrates to shared
// TODO: Fetch bow setup when BowSetupRepository migrates to shared
// TODO: Validate bow setup when BowSetupRepository migrates to shared
val bowSetup: Any?,  // TODO: Type as BowSetupWithEquipment when equipment migrates to shared

Context: RoundRepository in shared KMP module cannot fully function until BowSetupRepository is migrated. Currently uses Any? type for bow setup data.

OfflineScoreQueue Migration

Files affected:

  • app/src/main/java/com/archeryapprentice/data/dao/OfflineScoreQueueDao.kt
  • app/src/main/java/com/archeryapprentice/data/repository/OfflineScoreQueueManager.kt
// TODO: Re-enable when OfflineScoreQueueEntry is migrated to shared:database
// TODO: Re-enable when OfflineScoreQueueEntry is migrated to shared:domain

Context: Offline score queue functionality is disabled pending KMP migration of the queue entry data model.

Future Features

Team Mode

Files affected:

  • docs/scoring_data_model.md
  • app/src/main/java/com/archeryapprentice/ui/roundScoring/RoundDetailsScreen.kt
  • app/src/main/java/com/archeryapprentice/ui/roundScoring/RoundViewModel.kt
  • docs/ios-guides/screens/06-ROUND-DETAILS-GUIDE.md
const val TEAM_MODE: Boolean = false // TODO: Flip to true when shipping
val subject = analyticsDelegate.resolveMuSubject(round, null) // TODO: feed Settings when team mode is added
// TODO: Load aggregate stats when all participants are complete
// TODO: Team mode support

Context: Team scoring mode is scaffolded but not yet enabled. Feature flag exists but is set to false.

Accessories Support

Files affected:

  • app/src/main/java/com/archeryapprentice/domain/repository/BowSetupRepository.kt
// TODO: Add accessories when implemented
accessories = emptyList() // TODO: Add when accessories are implemented

Context: Equipment system supports accessories in the data model, but UI is not yet implemented.

Bow Type Derivation

Files affected:

  • app/src/main/java/com/archeryapprentice/domain/services/RoundPublishingService.kt
bowType = null, // TODO: Future enhancement - derive from equipment data

Context: Published rounds could include bow type (recurve, compound, etc.) derived from the user’s equipment setup.

Implementation Gaps

iOS Services Needing Real Implementations

Files affected:

  • iosApp/ArcheryApprentice/ArcheryApprentice/ArcheryApprenticeApp.swift
verificationService: PreviewVerificationService(), // TODO: Replace with real service

Context: Verification deep link handler uses preview service. Needs real Firebase-backed implementation.

iOS ViewModel TODOs

Files affected:

  • iosApp/ArcheryApprentice/ArcheryApprentice/ViewModels/RoundCreationViewModel.swift
// TODO: Integrate actual RoundRepository when database is set up
// TODO: Repository not yet integrated - return mock ID for now
distanceUnit: "meters", // TODO: Support user preference

Context: Round creation on iOS uses mock data. Needs KMP repository integration.

Tournament Settings

Files affected:

  • iosApp/ArcheryApprentice/ArcheryApprentice/ViewModels/TournamentScoringViewModel.swift
// TODO: Load these from TournamentSettings.adminSettings when settings loading is implemented

Context: Tournament scoring uses hardcoded settings instead of loading from Firestore.

Android Tournament Features

Files affected:

  • app/src/main/java/com/archeryapprentice/data/repository/impl/OfflineTournamentRepository.kt
// TODO: Store in local database - would need to create TournamentScoreDao
// TODO: Implement local score storage and observation
// TODO: Implement local tournament round storage
// TODO: Implement local tournament round retrieval
// TODO: Implement local tournament round status updates
// TODO: Implement local tournament round deletion

Context: Offline tournament functionality stubs. Would enable offline-first tournament scoring.

Score Conflict Resolution

Files affected:

  • app/src/main/java/com/archeryapprentice/domain/services/ScoreConflictResolutionService.kt
  • app/src/main/java/com/archeryapprentice/ui/roundScoring/LiveScoringViewModel.kt
localVersion = 1, // TODO: Add version tracking to local EndScore
// TODO: Apply resolved score to local session if needed

Context: Version tracking for conflict resolution is hardcoded. Needs proper implementation for multi-device sync.

Test Infrastructure

iOS Test Gaps

Files affected:

  • iosApp/ArcheryApprentice/ArcheryApprentice/Views/RoundListView.swift
// TODO: Add preview with mock repository

Android Test Gaps

Files affected:

  • app/src/test/java/com/archeryapprentice/ui/roundScoring/ActiveScoringScreenTest.kt
  • app/src/test/java/com/archeryapprentice/ui/roundScoring/RoundViewModelTeamScaffoldingTest.kt
  • app/src/test/java/com/archeryapprentice/data/repository/impl/OfflineTournamentRepositoryTest.kt
// TODO: Add tests for current ActiveScoringScreen implementation
// TODO: Create actual RoundViewModel instance for testing (3 occurrences)
// TODO: Fix this test - temporarily disabled due to mocking complexity

Alternative Testing Approaches

Files affected:

  • app/build.gradle.kts
// TODO: Investigate alternative testing approaches (native Android instrumented tests)

Equipment Navigation

Files affected:

  • app/src/main/java/com/archeryapprentice/ui/equipment/navigation/DetailEquipmentNavGraph.kt
  • iosApp/ArcheryApprentice/ArcheryApprentice/Views/Equipment/IndividualEquipmentPerformanceView.swift
  • app/src/main/java/com/archeryapprentice/ui/equipment/components/IndividualEquipmentPerformanceTab.kt
// TODO: Add other detail screens as we create them
// TODO: Navigate to rounds filtered by this equipment
// TODO: Navigate to filtered rounds list

Context: Equipment detail screens need navigation to filtered round history.

Tournament Navigation

Files affected:

  • app/src/main/java/com/archeryapprentice/ui/tournament/navigation/TournamentNavGraph.kt
// TODO: Navigate to tournament lobby when implemented
// TODO: Implement TournamentLobbyScreen in future phase

Round Management Navigation

Files affected:

  • app/src/main/java/com/archeryapprentice/ui/roundScoring/HistoricalRoundsScreen.kt
  • app/src/main/java/com/archeryapprentice/ui/roundScoring/RoundScoringEntryScreen.kt
// TODO: RoundManagementViewModel doesn't handle session management (3 occurrences)
// TODO: Navigate to template management screen

Settings/Cleanup

Data Cleanup Features

Files affected:

  • iosApp/ArcheryApprentice/ArcheryApprentice/Screens/SettingsTabView.swift
// TODO: Phase 5f+ - Add comprehensive data cleanup:
// - Clear all local rounds
// - Clear published rounds from Firestore
// - Clear leaderboard entries
// - Factory reset option

Context: Settings screen needs data management options for user privacy and testing.

Equipment Analytics

Files affected:

  • docs/ios-guides/screens/10-EQUIPMENT-ANALYTICS-GUIDE.md
  • app/src/main/java/com/archeryapprentice/ui/equipment/viewModels/componentViewModels/BowSetupViewModel.kt
  • app/src/main/java/com/archeryapprentice/ui/equipment/components/IndividualEquipmentPerformanceTab.kt
// TODO: Implement JSON export
// TODO: Replace with real repository-driven stats
// TODO: Add drift calculation
// TODO: Replace with actual daily breakdown query
// TODO: Implement proper DAO queries for individual equipment stats
bestScore = 0, // TODO: Calculate from rounds
rounds = 1, // TODO: Aggregate properly

Context: Equipment analytics features are partially implemented with placeholder calculations.

Logging/Debugging

Files affected:

  • shared/data/src/commonMain/kotlin/com/archeryapprentice/data/datasource/GitLiveFirebaseDataSource.kt
// TODO: Replace with platform-appropriate logging (Logcat/OSLog) in production

Context: Debug logging needs platform-specific implementation for production builds.

Priorities

High Priority (Blocking Other Work)

  1. BowSetupRepository KMP migration
  2. OfflineScoreQueue KMP migration

Medium Priority (Feature Gaps)

  1. iOS verification service real implementation
  2. Round creation KMP integration on iOS
  3. Tournament settings loading
  4. Offline tournament support

Low Priority (Improvements)

  1. Team mode enablement
  2. Equipment accessories UI
  3. Test coverage improvements
  4. Navigation enhancements

Tracking Updates

When addressing a TODO:

  1. Remove the TODO comment
  2. Update this inventory document
  3. Note the resolution in the PR description

Last updated: December 2025