diff --git a/SKILL.md b/SKILL.md index e439774..815dfad 100644 --- a/SKILL.md +++ b/SKILL.md @@ -8,15 +8,15 @@ It lives in the repo so changes are version-controlled alongside the code. Dispatch is a **pure shell script** — no model reasoning. ``` -Cron (agentTurn, toolsAllow: [exec, sessions_spawn]) +Cron (agentTurn, toolsAllow: [exec, sessions_spawn, read]) → runs dispatch script → reads output for SPAWN or HANDOFF lines → spawns worker if instructed Dispatch script (~/.openclaw/workspace/scripts/dev-loop-dispatch.sh) → pure bash, all decisions are curl API calls + branches - → exits after one SPAWN action per pass - → may emit multiple HANDOFFs in one pass + → exits after emitting one SPAWN line (at most one worker per run) + → emits HANDOFF for each qualifying PR (does not exit after HANDOFF) Workers (Opus, spawned by cron model) → receive precise task description @@ -34,7 +34,7 @@ The model **never** assesses project state or makes dispatch decisions. 3. **WIP mutex** — one active worker per repo; WIP label gates new issue pickup 4. **One SPAWN per run** — script emits at most one SPAWN line per execution 5. **set -euo pipefail** — any curl failure aborts immediately, no partial actions -6. **Workers reply NO_REPLY** — no announcements, no handoffs, no side effects +6. **Workers reply NO_REPLY** — no dispatch-level side effects (workers may push changes and manage labels as part of their task) ## Dispatch Rules (in order) @@ -42,6 +42,7 @@ The model **never** assesses project state or makes dispatch decisions. |------|-----------|--------| | 0 | WIP label > 1hr old | Remove stale WIP, continue | | 0b | WIP label ≤ 1hr old | Mark ACTIVE_WIP=1, continue (only gates Rule 10) | +| _(1)_ | _(reserved — intentionally unused)_ | — | | 2 | Any reviewer has REQUEST_CHANGES | SPAWN:findings | | 3 | PR not mergeable | SPAWN:rebase | | 4 | CI failure, no fix plan | SPAWN:ci-fix | @@ -99,6 +100,7 @@ Key fields: If no SPAWN line in output, reply NO_REPLY. See ~/.openclaw/workspace/skills/dev-loop/SKILL.md for full instructions. + (This repo's SKILL.md is deployed to that workspace path.) model: hai-anthropic/anthropic--claude-4.5-haiku toolsAllow: [exec, sessions_spawn, read] ``` diff --git a/docs/dev-loop-spec.md b/docs/dev-loop-spec.md index 9e56435..226b511 100644 --- a/docs/dev-loop-spec.md +++ b/docs/dev-loop-spec.md @@ -204,7 +204,7 @@ If all current: - Emit `HANDOFF:` - Continue evaluating remaining PRs (do NOT exit) -If already assigned to `aweiker`: skip. +If already assigned to `aweiker`: skip (assume handoff was already performed; continue to next PR without emitting another HANDOFF). ### Rule 11: New Issue Pickup @@ -219,7 +219,7 @@ Claim the issue (assign to bot user to prevent double-pick), then: ## 6. Safety Invariants -These are statically checked by `test/check-invariants.sh` and enforced in all changes: +These are statically checked by `~/.openclaw/workspace/scripts/test/check-invariants.sh` and enforced in all changes: | ID | Invariant | |----|-----------| @@ -268,7 +268,7 @@ Workers **always** remove the WIP label on completion and reply `NO_REPLY`. ## 9. Fixes for Issues #144 and #145 **Issue #144** (autonomous merge): -The dispatch script contains no merge API calls anywhere. The `scripts/test/check-invariants.sh` +The dispatch script contains no merge API calls anywhere. The `~/.openclaw/workspace/scripts/test/check-invariants.sh` invariant `S1` verifies this. Workers do not receive merge instructions. **Issue #145** (merged despite REQUEST_CHANGES):