mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-12 17:21:19 +08:00
- Implement tests for AssociationHighlight, DashboardToolbar, QueuePanel, SessionGroupTree, and TerminalDashboardPage to ensure proper functionality and state management. - Create tests for cliSessionStore, issueQueueIntegrationStore, queueExecutionStore, queueSchedulerStore, sessionManagerStore, and terminalGridStore to validate state resets and workspace scoping. - Mock necessary dependencies and state management hooks to isolate tests and ensure accurate behavior.
199 lines
7.1 KiB
Markdown
199 lines
7.1 KiB
Markdown
# Team PlanEx — Tasks Schema
|
|
|
|
## Task Metadata Registry
|
|
|
|
Team PlanEx uses a **message bus + state file** architecture instead of CSV. Tasks are tracked in `.msg/meta.json` with state updates via `team_msg`.
|
|
|
|
### Task State Fields
|
|
|
|
| Field | Type | Description | Example |
|
|
|-------|------|-------------|---------|
|
|
| `task_id` | string | Unique task identifier | `"PLAN-001"` |
|
|
| `issue_id` | string | Source issue identifier | `"ISS-20260308-001"` |
|
|
| `title` | string | Task title from solution | `"Implement OAuth2 provider"` |
|
|
| `role` | enum | Worker role: `planner`, `executor` | `"executor"` |
|
|
| `status` | enum | Task status: `pending`, `in_progress`, `completed`, `failed` | `"completed"` |
|
|
| `assigned_to` | string | Worker agent name | `"executor"` |
|
|
| `depends_on` | array | Dependency task IDs | `["PLAN-001"]` |
|
|
| `files` | array | Files to modify | `["src/auth/oauth.ts"]` |
|
|
| `convergence_criteria` | array | Success criteria | `["Tests pass", "No lint errors"]` |
|
|
| `started_at` | string | ISO timestamp | `"2026-03-08T10:00:00+08:00"` |
|
|
| `completed_at` | string | ISO timestamp | `"2026-03-08T10:15:00+08:00"` |
|
|
| `error` | string | Error message if failed | `""` |
|
|
|
|
---
|
|
|
|
## Message Bus Schema
|
|
|
|
### Message Types
|
|
|
|
| Type | From | To | Data Schema | Description |
|
|
|------|------|----|-----------|----|
|
|
| `plan_ready` | planner | coordinator | `{issue_id, solution_path, task_count}` | Planning complete |
|
|
| `impl_start` | executor | coordinator | `{task_id, issue_id}` | Implementation started |
|
|
| `impl_complete` | executor | coordinator | `{task_id, issue_id, files_modified[], commit_hash}` | Implementation complete |
|
|
| `impl_progress` | executor | coordinator | `{task_id, progress_pct, current_step}` | Progress update |
|
|
| `error` | any | coordinator | `{task_id, error_type, message}` | Error occurred |
|
|
| `state_update` | any | coordinator | `{role, state: {}}` | Role state update (auto-synced to meta.json) |
|
|
|
|
### Message Format (NDJSON)
|
|
|
|
```jsonl
|
|
{"id":"MSG-001","ts":"2026-03-08T10:00:00+08:00","from":"planner","to":"coordinator","type":"plan_ready","summary":"Planning complete for ISS-001","data":{"issue_id":"ISS-20260308-001","solution_path":"artifacts/solutions/ISS-20260308-001.json","task_count":3}}
|
|
{"id":"MSG-002","ts":"2026-03-08T10:05:00+08:00","from":"executor","to":"coordinator","type":"impl_start","summary":"Starting EXEC-001","data":{"task_id":"EXEC-001","issue_id":"ISS-20260308-001"}}
|
|
{"id":"MSG-003","ts":"2026-03-08T10:15:00+08:00","from":"executor","to":"coordinator","type":"impl_complete","summary":"Completed EXEC-001","data":{"task_id":"EXEC-001","issue_id":"ISS-20260308-001","files_modified":["src/auth/oauth.ts"],"commit_hash":"abc123"}}
|
|
```
|
|
|
|
---
|
|
|
|
## State File Schema (meta.json)
|
|
|
|
### Structure
|
|
|
|
```json
|
|
{
|
|
"session_id": "PEX-auth-system-20260308",
|
|
"pipeline_mode": "plan-execute",
|
|
"execution_method": "codex",
|
|
"status": "running",
|
|
"started_at": "2026-03-08T10:00:00+08:00",
|
|
"issues": {
|
|
"ISS-20260308-001": {
|
|
"status": "completed",
|
|
"solution_path": "artifacts/solutions/ISS-20260308-001.json",
|
|
"tasks": ["EXEC-001", "EXEC-002"],
|
|
"completed_at": "2026-03-08T10:30:00+08:00"
|
|
}
|
|
},
|
|
"tasks": {
|
|
"EXEC-001": {
|
|
"task_id": "EXEC-001",
|
|
"issue_id": "ISS-20260308-001",
|
|
"title": "Implement OAuth2 provider",
|
|
"role": "executor",
|
|
"status": "completed",
|
|
"assigned_to": "executor",
|
|
"depends_on": [],
|
|
"files": ["src/auth/oauth.ts"],
|
|
"convergence_criteria": ["Tests pass", "No lint errors"],
|
|
"started_at": "2026-03-08T10:05:00+08:00",
|
|
"completed_at": "2026-03-08T10:15:00+08:00",
|
|
"error": ""
|
|
}
|
|
},
|
|
"roles": {
|
|
"coordinator": {
|
|
"status": "active",
|
|
"current_phase": "execution",
|
|
"last_update": "2026-03-08T10:15:00+08:00"
|
|
},
|
|
"planner": {
|
|
"status": "idle",
|
|
"issues_planned": 5,
|
|
"last_update": "2026-03-08T10:10:00+08:00"
|
|
},
|
|
"executor": {
|
|
"status": "active",
|
|
"current_task": "EXEC-002",
|
|
"tasks_completed": 1,
|
|
"last_update": "2026-03-08T10:15:00+08:00"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Solution File Schema
|
|
|
|
Planner generates solution files in `artifacts/solutions/<issue-id>.json`:
|
|
|
|
```json
|
|
{
|
|
"issue_id": "ISS-20260308-001",
|
|
"title": "Implement OAuth2 authentication",
|
|
"approach": "Strategy pattern with provider abstraction",
|
|
"complexity": "Medium",
|
|
"tasks": [
|
|
{
|
|
"task_id": "EXEC-001",
|
|
"title": "Create OAuth2 provider interface",
|
|
"description": "Define provider interface with authorize/token/refresh methods",
|
|
"files": ["src/auth/providers/oauth-provider.ts"],
|
|
"depends_on": [],
|
|
"convergence_criteria": [
|
|
"Interface compiles without errors",
|
|
"Type definitions exported"
|
|
]
|
|
},
|
|
{
|
|
"task_id": "EXEC-002",
|
|
"title": "Implement Google OAuth2 provider",
|
|
"description": "Concrete implementation for Google OAuth2",
|
|
"files": ["src/auth/providers/google-oauth.ts"],
|
|
"depends_on": ["EXEC-001"],
|
|
"convergence_criteria": [
|
|
"Tests pass",
|
|
"Handles token refresh",
|
|
"Error handling complete"
|
|
]
|
|
}
|
|
],
|
|
"exploration_findings": {
|
|
"existing_patterns": ["Strategy pattern in payment module"],
|
|
"tech_stack": ["TypeScript", "Express", "Passport.js"],
|
|
"integration_points": ["User service", "Session store"]
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Execution Method Selection
|
|
|
|
Coordinator selects execution method based on issue complexity:
|
|
|
|
| Complexity | Method | Criteria |
|
|
|------------|--------|----------|
|
|
| Low | `gemini` | 1-2 files, simple logic, no architecture changes |
|
|
| Medium | `codex` | 3-5 files, moderate complexity, existing patterns |
|
|
| High | `codex` | 6+ files, complex logic, architecture changes |
|
|
|
|
Stored in `meta.json` → `execution_method` field.
|
|
|
|
---
|
|
|
|
## Validation Rules
|
|
|
|
| Rule | Check | Error |
|
|
|------|-------|-------|
|
|
| Unique task IDs | No duplicate `task_id` in meta.json | "Duplicate task ID: {task_id}" |
|
|
| Valid deps | All `depends_on` task IDs exist | "Unknown dependency: {dep_id}" |
|
|
| No self-deps | Task cannot depend on itself | "Self-dependency: {task_id}" |
|
|
| No circular deps | Dependency graph is acyclic | "Circular dependency detected" |
|
|
| Valid status | status ∈ {pending, in_progress, completed, failed} | "Invalid status: {status}" |
|
|
| Valid role | role ∈ {planner, executor} | "Invalid role: {role}" |
|
|
| Issue exists | issue_id exists in issues registry | "Unknown issue: {issue_id}" |
|
|
| Solution file exists | solution_path points to valid file | "Solution file not found: {path}" |
|
|
|
|
---
|
|
|
|
## Cross-Role Context Flow
|
|
|
|
| Source | Target | Mechanism |
|
|
|--------|--------|-----------|
|
|
| Planner solution | Executor | Read solution JSON from artifacts/solutions/ |
|
|
| Executor progress | Coordinator | Message bus (impl_progress, impl_complete) |
|
|
| Coordinator state | All workers | Read meta.json state field |
|
|
| Any role state update | meta.json | Auto-sync via team_msg type="state_update" |
|
|
|
|
---
|
|
|
|
## Discovery Types
|
|
|
|
Team PlanEx does not use discoveries.ndjson. All context is stored in:
|
|
- Solution files (planner output)
|
|
- Message bus (real-time communication)
|
|
- meta.json (persistent state)
|
|
- wisdom/ directory (cross-task knowledge)
|