4.3 KiB
4.3 KiB
Implementation Plan: Manual Ticket Queue Management (ticket_queue_mgmt_20260306)
Reference: Spec | Architecture Guide
Phase 1: Priority Field
Focus: Add priority to Ticket model
-
Task 1.1: Initialize MMA Environment
- Run
activate_skill mma-orchestratorbefore starting
- Run
-
Task 1.2: Add priority field to Ticket (
035c74e)- WHERE:
src/models.pyTicketdataclass - WHAT: Add
priority: str = "medium"field - HOW:
@dataclass class Ticket: # ... existing fields ... priority: str = "medium" # "high" | "medium" | "low" - CODE STYLE: 1-space indentation
- WHERE:
-
Task 1.3: Update Ticket serialization (
035c74e)- WHERE:
src/models.pyTicket.to_dict()andfrom_dict() - WHAT: Include priority in serialization
- HOW: Add
priorityto dict conversion
- WHERE:
Phase 2: Priority UI
Focus: Add priority dropdown to ticket display
-
Task 2.1: Add priority dropdown
- WHERE:
src/gui_2.pyticket rendering - WHAT: Dropdown for priority selection
- HOW:
priorities = ["high", "medium", "low"] current_idx = priorities.index(ticket.priority) if ticket.priority in priorities else 1 if imgui.begin_combo("Priority", priorities[current_idx]): for i, p in enumerate(priorities): if imgui.selectable(p, i == current_idx): ticket.priority = p imgui.end_combo()
- WHERE:
-
Task 2.2: Add color coding
- WHERE:
src/gui_2.pyticket rendering - WHAT: Color-code priority display
- HOW:
priority_colors = {"high": vec4(255, 100, 100, 255), "medium": vec4(255, 200, 100, 255), "low": vec4(150, 150, 150, 255)} imgui.text_colored(priority_colors.get(ticket.priority, vec4(200, 200, 200, 255)), f"[{ticket.priority.upper()}]")
- WHERE:
Phase 3: Multi-Select
Focus: Enable ticket selection for bulk operations
-
Task 3.1: Add selection state
- WHERE:
src/gui_2.pyorsrc/app_controller.py - WHAT: Track selected ticket IDs
- HOW:
self._selected_tickets: set[str] = set()
- WHERE:
-
Task 3.2: Add checkbox per ticket
- WHERE:
src/gui_2.pyticket list rendering - WHAT: Checkbox for selection
- HOW:
selected = ticket.id in self._selected_tickets if imgui.checkbox(f"##select_{ticket.id}", selected): if selected: self._selected_tickets.discard(ticket.id) else: self._selected_tickets.add(ticket.id) imgui.same_line()
- WHERE:
-
Task 3.3: Add select all/none buttons
- WHERE:
src/gui_2.pyticket list header - WHAT: Buttons to select/deselect all
- HOW:
if imgui.button("Select All"): self._selected_tickets = {t.id for t in self.track.tickets} imgui.same_line() if imgui.button("Select None"): self._selected_tickets.clear()
- WHERE:
Phase 4: Bulk Actions
Focus: Execute bulk operations on selected tickets
- Task 4.1: Add bulk action buttons
- WHERE:
src/gui_2.pyticket list area - WHAT: Execute, Skip, Block buttons
- HOW:
if imgui.button("Bulk Execute"): for tid in self._selected_tickets: self.engine.approve_task(tid) imgui.same_line() if imgui.button("Bulk Skip"): for tid in self._selected_tickets: self.engine.update_task_status(tid, "completed") imgui.same_line() if imgui.button("Bulk Block"): for tid in self._selected_tickets: self.engine.update_task_status(tid, "blocked")
- WHERE:
Phase 5: Drag-Drop (Optional)
Focus: Allow ticket reordering
- Task 5.1: Implement drag-drop reordering
- WHERE:
src/gui_2.pyticket list - WHAT: Drag tickets to reorder
- HOW: Use imgui drag-drop API
- SAFETY: Validate DAG after reorder (no dependency violations)
- WHERE:
Phase 6: Testing
Focus: Verify all functionality
-
Task 6.1: Write unit tests
- WHERE:
tests/test_ticket_queue.py(new file) - WHAT: Test priority serialization, bulk operations
- HOW: Create mock tickets, verify state changes
- WHERE:
-
Task 6.2: Conductor - Phase Verification
- Run:
uv run pytest tests/test_ticket_queue.py -v - Manual: Verify UI controls work
- Run: