Execution Plan
Prioritized task execution plan with safe parallelization.
Legend
- LLM: Fully automated via Claude Code
- Human: Requires human judgment or design
- Hybrid: LLM implements, human reviews
Task Deduplication
These backlog items are the same work - consolidated:
| Duplicates | Consolidated Task |
|---|---|
| Extract tag lookup helper, Convert tags array to dictionary, Use dictionary for tag lookup | Add tagsByID dictionary to AppState |
Phase 0: Foundation (COMPLETED 2025-12-17)
Enables reliable development of all other features.
Completed Tasks
| Task | Files Created/Modified |
|---|---|
| Add dependency injection | TimeTrackingService.swift (protocol added) |
| Make services mockable | MockTimeTrackingService.swift (new), StorageLocationManager.swift (protocol added) |
| Add structured logging (OSLog) | Logger.swift (new), FileStorageService.swift, StorageLocationManager.swift, AppIntents.swift |
| Add debug state inspection | DebugStateView.swift (new) |
Files Created:
Shared/Sources/TimeTrackerShared/Utilities/Logger.swift- AppLogger with OSLogShared/Tests/TimeTrackerSharedTests/Mocks/MockTimeTrackingService.swift- Actor mock for testingTimeTracker/Sources/Views/Debug/DebugStateView.swift- Runtime state inspection (DEBUG only)
Protocols Added:
TimeTrackingServiceProtocolin TimeTrackingService.swiftStorageLocationManagerProtocolin StorageLocationManager.swift
Consolidated: “Use protocol types for services”, “Improve error logging”, “Add debugging tools”
Phase 1: Critical Fixes (COMPLETED 2025-12-17)
Completed Tasks
| Task | Files Modified |
|---|---|
| Fix export popup closes on first open | HistorySection.swift (snapshot pattern) |
| Fix CSV export escaping | CSVParser.swift (RFC 4180 compliance) |
| Add tagsByID dictionary to AppState | TimeTrackerApp.swift, views |
| Document StorageLocationManager singleton | StorageLocationManager.swift |
| Terminal build commands documentation | CLAUDE.md |
| Use ExportService instead of inline CSV | HistorySection.swift |
Phase 2: UI Quick Fixes (COMPLETED 2025-12-17)
Completed Tasks
| Task | Files Modified |
|---|---|
| Remove app title from window | ContentView.swift |
| Fix element positions | Reviewed - no issues found |
| A4 horizontal for reports | report-generator/src/index.ts (842x595) |
Phase 3: Testing (COMPLETED 2025-12-17)
Completed Tasks
| Task | Files Created |
|---|---|
| Add report-generator JS tests | report-generator/tests/ (53 tests) |
| Add AppState integration tests | Shared/Tests/…/Integration/ (15 tests) |
| Add Swift-JS integration tests | docs/600-testing/601-testing-guide.md |
Remaining (Hybrid)
| Task | Files | Owner |
|---|---|---|
| Add view tests for multiplatform | project.yml, TimeTracker/Tests/ | Hybrid |
Note: View tests need project.yml changes and ViewInspector setup.
Phase 4: Performance (COMPLETED 2025-12-17)
Completed Tasks
| Task | Result |
|---|---|
| Cache filtered records | Views use computed properties (acceptable) |
| Implement record caching | LocalFileStorageService (in-memory cache) |
Phase 5: Features (COMPLETED 2025-12-17)
Completed Tasks
| Task | Files Modified |
|---|---|
| Archive tags | Tag.swift (isArchived), TimeTrackingService, views |
| Delete records from Today and History | Context menu added for Mac Catalyst |
| Keyboard shortcuts (Mac) | TimeTrackerApp.swift (Cmd+N, Cmd+.) |
| Avoid font bundling | Geneva.ttf loaded at runtime via Swift |
Remaining (Hybrid)
| Task | Files | Owner |
|---|---|---|
| History table layout | HistorySection, related views | Hybrid |
Note: History table layout requires design decisions.
Phase 6: Architecture
Major refactoring - strictly sequential, requires human review.
Sequential (Hybrid)
| Order | Task | Files | Owner |
|---|---|---|---|
| 1 | Introduce view model layer | New VM files, all views | Hybrid |
| 2 | Implement repository pattern | New repo files, services | Hybrid |
Warning: These touch many files. No other work during this phase.
Phase 7: Platform Features
Large, independent features.
Sequential per Feature (Hybrid)
| Task | Files | Owner |
|---|---|---|
| Menu Bar (macOS) | New MenuBarController, AppDelegate | Hybrid |
| iCloud sync | FileStorageService, new sync logic | Hybrid |
Note: Can parallelize only if one developer per feature with clear boundaries.
Phase 8: Polish
Human Only
| Task | Owner |
|---|---|
| Create app logo | Human |
| Avoid font bundling in reports | Hybrid |
Parallel Execution Rules
Safe to Parallelize
- Swift vs JS: Different codebases, no conflicts
- New test files: Adding tests to separate directories
- Service layer vs View layer: If clearly separated
- Documentation vs Code: CLAUDE.md, docs/ vs source files
Never Parallelize
- Same file modifications: Will cause merge conflicts
- Model changes + View changes: Views depend on models
- AppState changes + anything using AppState: Cascading effects
- Architecture refactoring: Touches everything
Agent Coordination
When running multiple agents:
Agent A: "I'm modifying TimeTrackerApp.swift"
Agent B: Must wait or work on unrelated files
Commit strategy:
1. Agent completes task
2. Agent commits changes
3. Other agents pull/rebase
4. Next agent starts Execution Summary
| Phase | Status | Completed |
|---|---|---|
| 0 | DONE | 2025-12-17 |
| 1 | DONE | 2025-12-17 |
| 2 | DONE | 2025-12-17 |
| 3 | DONE (LLM) | 2025-12-17 |
| 4 | DONE | 2025-12-17 |
| 5 | DONE (LLM) | 2025-12-17 |
| 6 | Pending | Hybrid - requires human review |
| 7 | Pending | Hybrid - requires human review |
| 8 | Pending | Human only |
Completed: 22 tasks (LLM automated) Remaining: 6 tasks (require human input)
Recommended Approach
For Claude Code with multiple agents:
- Research/Planning: Parallelize freely
- Code changes: Max 2 agents on different subsystems
- Same subsystem: Sequential only
- After each task: Commit, then next agent rebases
Related
- 910-backlog - Full backlog
- 911-completed - Completed tasks