docs: remove auto-chaining, reframe around scheduling system

Auto-chaining was removed from the codebase. All docs now describe the
scheduling model: work_finish transitions labels, the heartbeat's tick
pass (which also fires immediately after every work_finish) detects
available work and fills free slots. Removed autoChain config references.

Files updated: README.md, README2.md, docs/TOOLS.md, ARCHITECTURE.md,
ROADMAP.md, MANAGEMENT.md, ONBOARDING.md, lib/templates.ts

https://claude.ai/code/session_01R3rGevPY748gP4uK2ggYag
This commit is contained in:
Claude
2026-02-11 04:20:25 +00:00
parent 261babdf61
commit 9d1e253f11
8 changed files with 44 additions and 61 deletions

View File

@@ -174,7 +174,7 @@ graph TB
WF -->|closes/reopens| GL
WF -->|reads/writes| PJ
WF -->|git pull| REPO
WF -->|auto-chain dispatch| CLI
WF -->|tick dispatch| CLI
WF -->|appends| AL
TCR -->|creates issue| GL
@@ -374,7 +374,7 @@ sequenceDiagram
participant PJ as projects.json
participant AL as audit.log
participant REPO as Git Repo
participant QA as QA Session (auto-chain)
participant QA as QA Session
DEV->>WF: work_finish({ role: "dev", result: "done", projectGroupId: "-123", summary: "Login page with OAuth" })
WF->>PJ: readProjects()
@@ -385,21 +385,16 @@ sequenceDiagram
WF->>GL: transitionLabel "Doing" → "To Test"
WF->>AL: append { event: "work_finish", role: "dev", result: "done" }
alt autoChain enabled
WF->>GL: transitionLabel "To Test" → "Testing"
WF->>QA: dispatchTask(role: "qa", level: "reviewer")
WF->>PJ: activateWorker(-123, qa)
WF-->>DEV: { announcement: "✅ DEV DONE #42", autoChain: { dispatched: true, role: "qa" } }
else autoChain disabled
WF-->>DEV: { announcement: "✅ DEV DONE #42", nextAction: "qa_pickup" }
end
WF->>WF: tick queue (fill free slots)
Note over WF: Scheduler sees "To Test" issue, QA slot free → dispatches QA
WF-->>DEV: { announcement: "✅ DEV DONE #42", tickPickups: [...] }
```
**Writes:**
- `Git repo`: pulled latest (has DEV's merged code)
- `projects.json`: dev.active=false, dev.issueId=null (sessions map preserved for reuse)
- `Issue Tracker`: label "Doing" → "To Test" (+ "To Test" → "Testing" if auto-chain)
- `audit.log`: 1 entry (work_finish) + optional auto-chain entries
- `Issue Tracker`: label "Doing" → "To Test"
- `audit.log`: 1 entry (work_finish) + tick entries if workers dispatched
### Phase 6: QA pickup
@@ -462,7 +457,7 @@ DEV Blocked: "Doing" → "To Do"
QA Blocked: "Testing" → "To Test"
```
Worker cannot complete (missing info, environment errors, etc.). Issue returns to queue for retry. No auto-chain — the task is available for the next heartbeat pickup.
Worker cannot complete (missing info, environment errors, etc.). Issue returns to queue for retry. The task is available for the next heartbeat pickup.
### Completion enforcement
@@ -517,7 +512,7 @@ Every piece of data and where it lives:
│ │
│ setup → agent creation + workspace + model config │
│ work_start → level + label + dispatch + role instr (e2e) │
│ work_finish → label + state + git pull + auto-chain
│ work_finish → label + state + git pull + tick queue
│ task_create → create issue in tracker │
│ task_update → manual label state change │
│ task_comment → add comment to issue │
@@ -588,7 +583,7 @@ graph LR
PR[Project registration]
SETUP[Agent + workspace setup]
SD[Session dispatch<br/>create + send via CLI]
AC[Auto-chaining<br/>DEV→QA, QA fail→DEV]
AC[Scheduling<br/>tick queue after work_finish]
RI[Role instructions<br/>loaded per project]
A[Audit logging]
Z[Zombie cleanup]

View File

@@ -29,9 +29,9 @@ Classical management theory — later formalized by Bernard Bass in his work on
DevClaw's task lifecycle is built on this. The orchestrator delegates a task via `work_start`, then steps away. It only re-engages in three scenarios:
1. **DEV completes work** → The task moves to QA automatically. No orchestrator involvement needed.
1. **DEV completes work** → The label moves to `To Test`. The scheduler dispatches QA on the next tick. No orchestrator involvement needed.
2. **QA passes** → The issue closes. Pipeline complete.
3. **QA fails** → The task cycles back to DEV with a fix request. The orchestrator may need to adjust the model level.
3. **QA fails** → The label moves to `To Improve`. The scheduler dispatches DEV on the next tick. The orchestrator may need to adjust the model level.
4. **QA refines** → The task enters a holding state that _requires human decision_. This is the explicit escalation boundary.
The "refine" state is the most interesting from a delegation perspective. It's a conscious architectural decision that says: some judgments should not be automated. When the QA agent determines that a task needs rethinking rather than just fixing, it escalates to the only actor who has the full business context — the human.

View File

@@ -244,7 +244,7 @@ Change which model powers each level in `openclaw.json` — see [Configuration](
| Developer assignment | Plugin | LLM-selected level by orchestrator, keyword heuristic fallback |
| State management | Plugin | Atomic read/write to `projects.json` |
| Session management | Plugin | Creates, reuses, and dispatches to sessions via CLI. Agent never touches session tools. |
| Task completion | Plugin (`work_finish`) | Workers self-report. Auto-chains if enabled. |
| Task completion | Plugin (`work_finish`) | Workers self-report. Scheduler dispatches next role. |
| Prompt instructions | Plugin (`work_start`) | Loaded from `projects/roles/<project>/<role>.md`, appended to task message |
| Audit logging | Plugin | Automatic NDJSON append per tool call |
| Zombie detection | Plugin | `health` checks active vs alive |

View File

@@ -30,7 +30,7 @@ Roles become a configurable list instead of a hardcoded pair. Each role defines:
}
```
The pipeline definition replaces the hardcoded `Doing → To Test → Testing → Done` flow. Labels and transitions are generated from the pipeline config. Auto-chaining follows the pipeline order.
The pipeline definition replaces the hardcoded `Doing → To Test → Testing → Done` flow. Labels and transitions are generated from the pipeline config. The scheduler follows the pipeline order when filling free slots.
### Open questions

View File

@@ -90,7 +90,7 @@ Complete a task with a result. Called by workers (DEV/QA sub-agent sessions) dir
6. Ticks queue to fill free worker slots
7. Writes audit log
**Auto-chaining** (when enabled on the project): `dev:done` dispatches QA automatically. `qa:fail` re-dispatches DEV using the previous level.
**Scheduling:** After completion, `work_finish` ticks the queue. The scheduler sees the new label (`To Test` or `To Improve`) and dispatches the next worker if a slot is free.
---