hopefully done refining

This commit is contained in:
2026-03-06 16:14:31 -05:00
parent 88e27ae414
commit 1294104f7f
20 changed files with 1736 additions and 734 deletions

View File

@@ -1,32 +1,58 @@
# Implementation Plan: Manual Block/Unblock Control (manual_block_control_20260306)
## Phase 1: Block Mechanism
- [ ] Task: Initialize MMA Environment
- [ ] Task: Add manual block field
- WHERE: src/models.py
- WHAT: Add manual_block_reason to Ticket
- HOW: Optional[str]
- [ ] Task: Add block/unblock methods
- WHERE: src/models.py
- WHAT: mark_blocked, mark_unblocked
- HOW: Set/unset flag
> **Reference:** [Spec](./spec.md) | [Architecture Guide](../../../docs/guide_architecture.md)
## Phase 2: UI Controls
- [ ] Task: Add block button
- WHERE: src/gui_2.py
- WHAT: Block selected ticket
- HOW: Button with input
- [ ] Task: Add unblock button
- WHERE: src/gui_2.py
- WHAT: Remove block
- HOW: Button
## Phase 1: Add Manual Block Fields
Focus: Add manual_block flag to Ticket
## Phase 3: Visualization
- [ ] Task: Show block status
- WHERE: src/gui_2.py
- WHAT: Visual indicator for blocked
- HOW: Different color/icon
- [ ] Task 1.1: Initialize MMA Environment
- [ ] Task 1.2: Add manual_block field to Ticket
- WHERE: `src/models.py` `Ticket` dataclass
- WHAT: Add `manual_block: bool = False`
- HOW:
```python
manual_block: bool = False
```
## Phase 4: Verification
- [ ] Test block/unblock
- [ ] Conductor - Phase Verification
- [ ] Task 1.3: Add mark_manual_block method
- WHERE: `src/models.py` `Ticket`
- WHAT: Method to set manual block with reason
- HOW:
```python
def mark_manual_block(self, reason: str) -> None:
self.status = "blocked"
self.blocked_reason = f"[MANUAL] {reason}"
self.manual_block = True
```
## Phase 2: Block/Unblock UI
Focus: Add block buttons to ticket display
- [ ] Task 2.1: Add block button
- WHERE: `src/gui_2.py` ticket rendering
- WHAT: Button to block with reason input
- HOW: Modal with text input for reason
- [ ] Task 2.2: Add unblock button
- WHERE: `src/gui_2.py` ticket rendering
- WHAT: Button to clear manual block
- HOW:
```python
if ticket.manual_block and ticket.status == "blocked":
if imgui.button("Unblock"):
ticket.status = "todo"
ticket.blocked_reason = None
ticket.manual_block = False
```
## Phase 3: Cascade Integration
Focus: Trigger cascade on block/unblock
- [ ] Task 3.1: Call cascade_blocks after manual block
- WHERE: `src/gui_2.py` or `src/multi_agent_conductor.py`
- WHAT: Update downstream tickets
- HOW: `self.dag.cascade_blocks()`
## Phase 4: Testing
- [ ] Task 4.1: Write unit tests
- [ ] Task 4.2: Conductor - Phase Verification