3.1 KiB
3.1 KiB
Track Specification: Manual Ticket Queue Management (ticket_queue_mgmt_20260306)
Overview
Allow user to manually reorder, prioritize, or requeue tickets in the DAG. Add drag-drop reordering, priority tags, and bulk selection for execute/skip/block operations.
Current State Audit
Already Implemented (DO NOT re-implement)
Ticket Model (src/models.py)
Ticketdataclass: Hasstatus,depends_on, but nopriorityfieldmark_blocked(reason): Sets status to blocked with reasonmark_complete(): Sets status to completed
DAG Engine (src/dag_engine.py)
TrackDAG: Manages ticket dependency graphget_ready_tasks(): Returns tasks with satisfied dependenciesupdate_task_status(): Updates ticket statushas_cycle(): Validates DAG
Gaps to Fill (This Track's Scope)
- No
priorityfield on Ticket - No drag-drop reordering in GUI
- No multi-select for bulk operations
- No bulk execute/skip/block actions
Architectural Constraints
DAG Validity
- Reordering MUST NOT violate dependencies
- Cannot move ticket before its dependencies
depends_onrelationships preserved
Atomic Operations
- Bulk operations apply to all selected tickets atomically
- Partial failure rolls back all changes
Architecture Reference
Key Integration Points
| File | Lines | Purpose |
|---|---|---|
src/models.py |
30-50 | Ticket - add priority field |
src/gui_2.py |
2650-2750 | Ticket display - add drag-drop |
src/dag_engine.py |
50-80 | Status updates |
Proposed Ticket Enhancement
@dataclass
class Ticket:
# ... existing fields ...
priority: str = "medium" # "high" | "medium" | "low"
Functional Requirements
FR1: Priority Field
- Add
priority: str = "medium"to Ticket dataclass - Values: "high", "medium", "low"
- Persist in track state
FR2: Priority UI
- Dropdown or button group per ticket
- Color-coded: high=red, medium=yellow, low=gray
- Save to state on change
FR3: Drag-Drop Reordering
- Drag ticket to reorder in list
- Drop validates DAG (no dependency violation)
- Show error if invalid position
FR4: Multi-Select
- Checkbox per ticket for selection
- Select all / deselect all buttons
- Track selected ticket IDs
FR5: Bulk Actions
- Execute: Mark all selected as ready
- Skip: Mark all selected as completed
- Block: Mark all selected as blocked
Non-Functional Requirements
| Requirement | Constraint |
|---|---|
| Response Time | <100ms for drag-drop validation |
| Persistence | Priority saved to state.toml |
Testing Requirements
Unit Tests
- Test priority field serialization
- Test DAG validation on reorder
Integration Tests
- Drag-drop tickets, verify order changes
- Bulk block tickets, verify all blocked
Out of Scope
- Automatic priority assignment
- Priority-based auto-scheduling
- Cross-track ticket movement
Acceptance Criteria
- Priority field added to Ticket
- Priority dropdown works in UI
- Drag-drop reordering functional
- DAG validity enforced on drop
- Multi-select with checkboxes
- Bulk execute/skip/block works
- 1-space indentation maintained