checkpoint!
This commit is contained in:
@@ -15,7 +15,7 @@ To serve as an expert-level utility for personal developer use on small projects
|
|||||||
- **Tier 2 (Tech Lead):** Technical oversight and track execution (`/conductor:implement`) using `gemini-2.5-flash`. Maintains persistent context throughout implementation.
|
- **Tier 2 (Tech Lead):** Technical oversight and track execution (`/conductor:implement`) using `gemini-2.5-flash`. Maintains persistent context throughout implementation.
|
||||||
- **Tier 3 (Worker):** Surgical code implementation and TDD using `gemini-2.5-flash` or `deepseek-v3`. Operates statelessly with tool access and dependency skeletons.
|
- **Tier 3 (Worker):** Surgical code implementation and TDD using `gemini-2.5-flash` or `deepseek-v3`. Operates statelessly with tool access and dependency skeletons.
|
||||||
- **Tier 4 (QA):** Error analysis and diagnostics using `gemini-2.5-flash` or `deepseek-v3`. Operates statelessly with tool access.
|
- **Tier 4 (QA):** Error analysis and diagnostics using `gemini-2.5-flash` or `deepseek-v3`. Operates statelessly with tool access.
|
||||||
- **MMA Delegation Engine:** Utilizes the `mma-exec` CLI and `mma.ps1` helper to route tasks, ensuring role-scoped context and detailed observability via timestamped sub-agent logs. Supports dynamic ticket creation and dependency resolution via an automated Dispatcher Loop.
|
- **MMA Delegation Engine:** Route tasks, ensuring role-scoped context and detailed observability via timestamped sub-agent logs. Supports dynamic ticket creation and dependency resolution via an automated Dispatcher Loop.
|
||||||
- **Track-Scoped State Management:** Segregates discussion history and task progress into per-track state files (e.g., `conductor/tracks/<track_id>/state.toml`). This prevents global context pollution and ensures the Tech Lead session is isolated to the specific track's objective.
|
- **Track-Scoped State Management:** Segregates discussion history and task progress into per-track state files (e.g., `conductor/tracks/<track_id>/state.toml`). This prevents global context pollution and ensures the Tech Lead session is isolated to the specific track's objective.
|
||||||
- **Native DAG Execution Engine:** Employs a Python-based Directed Acyclic Graph (DAG) engine to manage complex task dependencies, supporting automated topological sorting and robust cycle detection.
|
- **Native DAG Execution Engine:** Employs a Python-based Directed Acyclic Graph (DAG) engine to manage complex task dependencies, supporting automated topological sorting and robust cycle detection.
|
||||||
- **Programmable Execution State Machine:** Governing the transition between "Auto-Queue" (autonomous worker spawning) and "Step Mode" (explicit manual approval for each task transition).
|
- **Programmable Execution State Machine:** Governing the transition between "Auto-Queue" (autonomous worker spawning) and "Step Mode" (explicit manual approval for each task transition).
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
# MMA Data Architecture & DAG Engine
|
|
||||||
|
|
||||||
Restructures manual_slop state and execution into a per-track DAG model.
|
|
||||||
|
|
||||||
### Navigation
|
|
||||||
- [Specification](./spec.md)
|
|
||||||
- [Implementation Plan](./plan.md)
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "mma_data_architecture_dag_engine",
|
|
||||||
"title": "MMA Data Architecture & DAG Engine",
|
|
||||||
"status": "planned",
|
|
||||||
"created_at": "2026-02-27T19:20:00.000000"
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# Implementation Plan: MMA Data Architecture & DAG Engine
|
|
||||||
|
|
||||||
## Phase 1: Track-Scoped State Management
|
|
||||||
- [x] Task: Define the data schema for a Track (Metadata, Discussion History, Task List). [2efe80e]
|
|
||||||
- [x] Task: Update `project_manager.py` to create and read from `tracks/<track_id>/state.toml`. [e1a3712]
|
|
||||||
- [x] Task: Ensure Tier 2 (Tech Lead) history is securely scoped to the active track's state file. [b845b89]
|
|
||||||
|
|
||||||
## Phase 2: Python DAG Engine
|
|
||||||
- [x] Task: Create a `Task` class with `status` (Blocked, Ready, In Progress, Review, Done) and `depends_on` fields. [a3cfeff]
|
|
||||||
- [x] Task: Implement a topological sorting algorithm to resolve execution order. [f85ec9d]
|
|
||||||
- [x] Task: Write robust unit tests verifying cycle detection and dependency resolution. [f85ec9d]
|
|
||||||
|
|
||||||
## Phase 3: Execution State Machine
|
|
||||||
- [x] Task: Implement the core loop that evaluates the DAG and identifies "Ready" tasks. [154957f]
|
|
||||||
- [x] Task: Create configuration settings for "Auto-Queue" vs "Manual Step" execution modes. [154957f]
|
|
||||||
- [x] Task: Connect the state machine to the backend dispatcher, preparing it for GUI integration. [2429b7c]
|
|
||||||
|
|
||||||
## Phase: Review Fixes
|
|
||||||
- [x] Task: Apply review suggestions [6548ce6]
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# Track Specification: MMA Data Architecture & DAG Engine
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
Restructure how `manual_slop` stores and executes work. The current implementation relies on global state and linear execution, which does not support the complexity of multi-agent, task-based workflows. This track establishes a robust, data-oriented foundation using track-scoped state and a native Python Directed Acyclic Graph (DAG) engine.
|
|
||||||
|
|
||||||
## Goals
|
|
||||||
1. **Track-Scoped State:** Transition away from a single global `manual_slop_history.toml` to a per-track state structure (e.g., `tracks/<track_id>/state.toml`) to manage specific discussion history and context.
|
|
||||||
2. **Task DAG Engine:** Implement a topological sorter and DAG execution engine in Python to manage dependencies between tasks.
|
|
||||||
3. **Execution State Machine:** Build an internal state machine that governs whether the DAG auto-advances or waits for manual user intervention to spawn the next worker.
|
|
||||||
|
|
||||||
## Constraints
|
|
||||||
- Must integrate seamlessly with the existing project TOML structure.
|
|
||||||
- Avoid external complex dependencies (like Steve Yegge's Beads) for now; rely on standard Python libraries or lightweight custom implementations to ensure tight coupling with the DearPyGui stack.
|
|
||||||
|
|
||||||
## Context & Origins
|
|
||||||
This track was born from the "Human Verification" phase of the initial MMA Orchestrator prototype (`mma_orchestrator_integration_20260226`). We realized that while the backend API plumbing for the hierarchical MMA tiers (Tiers 1-4) was technically functional, the product lacked the necessary state management, UX visualization, and human-in-the-loop security gates to be usable.
|
|
||||||
|
|
||||||
**Key Takeaways from the Prototype Phase:**
|
|
||||||
- The Tier 2 (Tech Lead) needs its own track-scoped discussion history, rather than polluting the global project history.
|
|
||||||
- Tasks within a track require a DAG (Directed Acyclic Graph) engine to manage complex dependencies and blocking states.
|
|
||||||
- The GUI must visualize this DAG and stream the output of individual workers directly to their associated tasks.
|
|
||||||
- We must enforce tiered context subsetting so that Tier 3/4 workers don't receive the massive global context blob, and we need a pre-spawn approval modal so the user can intercept, review, and modify worker prompts/contexts before they execute.
|
|
||||||
|
|
||||||
**Instructions for the Implementing Agent:**
|
|
||||||
As you execute this track, ensure you maintain alignment with the other Phase 2 tracks. If you learn something that impacts the dependent tracks, please append a similar "Context Summary" to their `spec.md` files before concluding your run.
|
|
||||||
|
|
||||||
## Execution Order & Dependencies
|
|
||||||
This is a multi-track phase. To ensure architectural integrity, these tracks **MUST** be executed in the following strict order:
|
|
||||||
1. **[CURRENT] MMA Data Architecture & DAG Engine:** (Builds the state and execution foundation)
|
|
||||||
2. **Tiered Context Scoping & HITL Approval:** (Builds the security and context subsetting on top of the state)
|
|
||||||
3. **MMA Dashboard Visualization Overhaul:** (Builds the UI to visualize the state and subsets)
|
|
||||||
4. **Robust Live Simulation Verification:** (Builds the tests to verify the UI and state)
|
|
||||||
|
|
||||||
**Prerequisites for this track:** None. This must be executed FIRST.
|
|
||||||
@@ -78,8 +78,8 @@ Collapsed=0
|
|||||||
DockId=0x0000000F,2
|
DockId=0x0000000F,2
|
||||||
|
|
||||||
[Window][Theme]
|
[Window][Theme]
|
||||||
Pos=0,21
|
Pos=0,17
|
||||||
Size=639,824
|
Size=393,824
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,1
|
DockId=0x00000005,1
|
||||||
|
|
||||||
@@ -89,14 +89,14 @@ Size=900,700
|
|||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Diagnostics]
|
[Window][Diagnostics]
|
||||||
Pos=641,21
|
Pos=395,17
|
||||||
Size=1092,908
|
Size=734,545
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,0
|
DockId=0x00000010,0
|
||||||
|
|
||||||
[Window][Context Hub]
|
[Window][Context Hub]
|
||||||
Pos=0,21
|
Pos=0,17
|
||||||
Size=639,824
|
Size=393,824
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000005,0
|
DockId=0x00000005,0
|
||||||
|
|
||||||
@@ -107,26 +107,26 @@ Collapsed=0
|
|||||||
DockId=0x0000000D,0
|
DockId=0x0000000D,0
|
||||||
|
|
||||||
[Window][Discussion Hub]
|
[Window][Discussion Hub]
|
||||||
Pos=1735,21
|
Pos=1131,17
|
||||||
Size=783,1586
|
Size=549,1183
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000004,0
|
DockId=0x00000004,0
|
||||||
|
|
||||||
[Window][Operations Hub]
|
[Window][Operations Hub]
|
||||||
Pos=641,21
|
Pos=395,17
|
||||||
Size=1092,908
|
Size=734,545
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000010,1
|
DockId=0x00000010,1
|
||||||
|
|
||||||
[Window][Files & Media]
|
[Window][Files & Media]
|
||||||
Pos=0,847
|
Pos=0,843
|
||||||
Size=639,760
|
Size=393,357
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,1
|
DockId=0x00000006,1
|
||||||
|
|
||||||
[Window][AI Settings]
|
[Window][AI Settings]
|
||||||
Pos=0,847
|
Pos=0,843
|
||||||
Size=639,760
|
Size=393,357
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000006,0
|
DockId=0x00000006,0
|
||||||
|
|
||||||
@@ -136,14 +136,14 @@ Size=416,325
|
|||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][MMA Dashboard]
|
[Window][MMA Dashboard]
|
||||||
Pos=641,931
|
Pos=395,564
|
||||||
Size=1092,676
|
Size=734,636
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000011,0
|
DockId=0x00000011,0
|
||||||
|
|
||||||
[Window][Log Management]
|
[Window][Log Management]
|
||||||
Pos=1735,21
|
Pos=1131,17
|
||||||
Size=783,1586
|
Size=549,1183
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
DockId=0x00000004,1
|
DockId=0x00000004,1
|
||||||
|
|
||||||
@@ -167,20 +167,20 @@ Column 6 Weight=1.0079
|
|||||||
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
DockNode ID=0x00000008 Pos=3125,170 Size=593,1157 Split=Y
|
||||||
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
DockNode ID=0x00000009 Parent=0x00000008 SizeRef=1029,147 Selected=0x0469CA7A
|
||||||
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
DockNode ID=0x0000000A Parent=0x00000008 SizeRef=1029,145 Selected=0xDF822E02
|
||||||
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,21 Size=2518,1586 Split=Y
|
DockSpace ID=0xAFC85805 Window=0x079D3A04 Pos=0,17 Size=1680,1183 Split=Y
|
||||||
DockNode ID=0x0000000C Parent=0xAFC85805 SizeRef=1362,1041 Split=X Selected=0x5D11106F
|
DockNode ID=0x0000000C Parent=0xAFC85805 SizeRef=1362,1041 Split=X Selected=0x5D11106F
|
||||||
DockNode ID=0x00000003 Parent=0x0000000C SizeRef=1733,1183 Split=X
|
DockNode ID=0x00000003 Parent=0x0000000C SizeRef=1129,1183 Split=X
|
||||||
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=Y Selected=0xF4139CA2
|
DockNode ID=0x0000000B Parent=0x00000003 SizeRef=404,1186 Split=Y Selected=0xF4139CA2
|
||||||
DockNode ID=0x00000002 Parent=0x0000000B SizeRef=1029,1119 Split=X Selected=0xF4139CA2
|
DockNode ID=0x00000002 Parent=0x0000000B SizeRef=1029,1119 Split=X Selected=0xF4139CA2
|
||||||
DockNode ID=0x00000007 Parent=0x00000002 SizeRef=639,858 Split=Y Selected=0x8CA2375C
|
DockNode ID=0x00000007 Parent=0x00000002 SizeRef=393,858 Split=Y Selected=0x8CA2375C
|
||||||
DockNode ID=0x00000005 Parent=0x00000007 SizeRef=295,824 Selected=0xF4139CA2
|
DockNode ID=0x00000005 Parent=0x00000007 SizeRef=295,824 Selected=0xF4139CA2
|
||||||
DockNode ID=0x00000006 Parent=0x00000007 SizeRef=295,724 CentralNode=1 Selected=0x7BD57D6A
|
DockNode ID=0x00000006 Parent=0x00000007 SizeRef=295,724 CentralNode=1 Selected=0x7BD57D6A
|
||||||
DockNode ID=0x0000000E Parent=0x00000002 SizeRef=1092,858 Split=Y Selected=0x418C7449
|
DockNode ID=0x0000000E Parent=0x00000002 SizeRef=734,858 Split=Y Selected=0x418C7449
|
||||||
DockNode ID=0x00000010 Parent=0x0000000E SizeRef=868,887 Selected=0x418C7449
|
DockNode ID=0x00000010 Parent=0x0000000E SizeRef=868,545 Selected=0xB4CBF21A
|
||||||
DockNode ID=0x00000011 Parent=0x0000000E SizeRef=868,661 Selected=0x3AEC3498
|
DockNode ID=0x00000011 Parent=0x0000000E SizeRef=868,636 Selected=0x3AEC3498
|
||||||
DockNode ID=0x00000001 Parent=0x0000000B SizeRef=1029,775 Selected=0x8B4EBFA6
|
DockNode ID=0x00000001 Parent=0x0000000B SizeRef=1029,775 Selected=0x8B4EBFA6
|
||||||
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
DockNode ID=0x0000000D Parent=0x00000003 SizeRef=435,1186 Selected=0x363E93D6
|
||||||
DockNode ID=0x00000004 Parent=0x0000000C SizeRef=783,1183 Selected=0x6F2B5B04
|
DockNode ID=0x00000004 Parent=0x0000000C SizeRef=549,1183 Selected=0x6F2B5B04
|
||||||
DockNode ID=0x0000000F Parent=0xAFC85805 SizeRef=1362,451 Selected=0xDD6419BC
|
DockNode ID=0x0000000F Parent=0xAFC85805 SizeRef=1362,451 Selected=0xDD6419BC
|
||||||
|
|
||||||
;;;<<<Layout_655921752_Default>>>;;;
|
;;;<<<Layout_655921752_Default>>>;;;
|
||||||
|
|||||||
36
reproduce_issue.py
Normal file
36
reproduce_issue.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import pytest
|
||||||
|
from models import Ticket
|
||||||
|
from dag_engine import TrackDAG, ExecutionEngine
|
||||||
|
|
||||||
|
def test_auto_queue_and_step_mode():
|
||||||
|
t1 = Ticket(id="T1", description="Task 1", status="todo", assigned_to="worker")
|
||||||
|
t2 = Ticket(id="T2", description="Task 2", status="todo", assigned_to="worker", step_mode=True)
|
||||||
|
|
||||||
|
dag = TrackDAG([t1, t2])
|
||||||
|
# Expectation: ExecutionEngine takes auto_queue parameter
|
||||||
|
try:
|
||||||
|
engine = ExecutionEngine(dag, auto_queue=True)
|
||||||
|
except TypeError:
|
||||||
|
pytest.fail("ExecutionEngine does not accept auto_queue parameter")
|
||||||
|
|
||||||
|
# Tick 1: T1 should be 'in-progress' because auto_queue=True
|
||||||
|
# T2 should remain 'todo' because step_mode=True
|
||||||
|
engine.tick()
|
||||||
|
|
||||||
|
assert t1.status == "in_progress"
|
||||||
|
assert t2.status == "todo"
|
||||||
|
|
||||||
|
# Approve T2
|
||||||
|
try:
|
||||||
|
engine.approve_task("T2")
|
||||||
|
except AttributeError:
|
||||||
|
pytest.fail("ExecutionEngine does not have approve_task method")
|
||||||
|
|
||||||
|
assert t2.status == "in_progress"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
test_auto_queue_and_step_mode()
|
||||||
|
print("Test passed (unexpectedly)")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Test failed as expected: {e}")
|
||||||
@@ -18,7 +18,7 @@ history = [
|
|||||||
|
|
||||||
[discussions.AutoDisc]
|
[discussions.AutoDisc]
|
||||||
git_commit = ""
|
git_commit = ""
|
||||||
last_updated = "2026-02-27T19:23:11"
|
last_updated = "2026-02-27T19:27:19"
|
||||||
history = [
|
history = [
|
||||||
"@2026-02-27T19:08:37\nSystem:\n[PERFORMANCE ALERT] Frame time high: 62.2ms. Please consider optimizing recent changes or reducing load.",
|
"@2026-02-27T19:08:37\nSystem:\n[PERFORMANCE ALERT] Frame time high: 62.2ms. Please consider optimizing recent changes or reducing load.",
|
||||||
]
|
]
|
||||||
|
|||||||
0
verify_pm_changes.py
Normal file
0
verify_pm_changes.py
Normal file
Reference in New Issue
Block a user