3.2 KiB
3.2 KiB
Track Specification: Track Progress Visualization (track_progress_viz_20260306)
Overview
Progress bars and percentage completion for active tracks and tickets. Better visualization of DAG execution state.
Current State Audit
Already Implemented (DO NOT re-implement)
Track Model (src/models.py)
Trackdataclass: Hastickets: list[Ticket]fieldTicket.status: "todo" | "in_progress" | "completed" | "blocked"
Track Listing (src/project_manager.py)
get_all_tracks(): Returns list of track metadata with progress- Progress calculation exists: Counts completed vs total tickets
DAG Engine (src/dag_engine.py)
TrackDAG: Manages ticket dependency graph- Status tracking via
update_task_status()
Gaps to Fill (This Track's Scope)
- No visual progress bar in GUI
- No percentage completion display
- No ETA estimation
- No ticket breakdown display
Architectural Constraints
Accurate State
- Progress MUST reflect actual ticket status
- Count completed, in_progress, blocked, todo separately
Efficient Updates
- Status changes trigger immediate UI update
- No polling - event-driven via MMA state updates
Architecture Reference
Key Integration Points
| File | Lines | Purpose |
|---|---|---|
src/gui_2.py |
2650-2750 | MMA Dashboard - add progress display |
src/project_manager.py |
289-320 | get_all_tracks() - progress data |
src/dag_engine.py |
50-80 | Status tracking |
Progress Calculation
def calculate_progress(tickets: list[Ticket]) -> dict:
total = len(tickets)
completed = sum(1 for t in tickets if t.status == "completed")
in_progress = sum(1 for t in tickets if t.status == "in_progress")
blocked = sum(1 for t in tickets if t.status == "blocked")
todo = sum(1 for t in tickets if t.status == "todo")
percentage = (completed / total * 100) if total > 0 else 0
return {
"total": total, "completed": completed, "in_progress": in_progress,
"blocked": blocked, "todo": todo, "percentage": percentage
}
Functional Requirements
FR1: Progress Bar
- Visual progress bar using
imgui.progress_bar() - Show 0-100% completion
- Color based on progress (red < 25%, yellow < 75%, green >= 75%)
FR2: Percentage Text
- Display "X% complete" below bar
- Show "X/Y tickets completed"
FR3: Ticket Breakdown
- Show counts: completed, in_progress, blocked, todo
- Use colored indicators per status
FR4: ETA Estimation
- Track average time per completed ticket
- Estimate remaining time:
avg_time * remaining_tickets - Display as "ETA: ~Xm"
Non-Functional Requirements
| Requirement | Constraint |
|---|---|
| Update Latency | <100ms after status change |
| Memory | <100 bytes for ETA state |
Testing Requirements
Unit Tests
- Test progress calculation accuracy
- Test ETA estimation logic
Integration Tests
- Complete tickets, verify progress updates
- Verify ETA recalculates
Out of Scope
- Historical progress tracking
- Progress export
- Multi-track comparison
Acceptance Criteria
- Progress bar renders correctly
- Percentage accurate (X/Y completed)
- Ticket breakdown displayed
- ETA estimation works
- Updates on ticket status change
- 1-space indentation maintained