Skip to content

v0.3.0

Choose a tag to compare

@jperdior jperdior released this 06 Sep 10:46
· 38 commits to main since this release
a1f07a3

A stop keeps the phase

A session refused for the usage limit, killed, or exited without a sentinel leaves its half-built phase uncommitted in the worktree. The loop now records which session it launched before launching it and a re-run continues that session with claude --resume in the worktree it left. A transcript that is gone falls back to a fresh session told the tree holds a predecessor's work. Only the done path reclaims a worktree the loop created; exits 4 and 5 keep it and say so.

  • Builds where it is driven from. From a linked worktree already on the unit's branch, the loop builds in that tree: no second worktree, no checkout, no reclaim. Its state hangs off the main checkout's .loop/state; loop.env is read from the driver first and the main checkout second.
  • One loop per unit, several per repository. The lock is lock/<branch>/, liveness matches the recorded snapshot path, and git worktree add is serialised on a config lock.
  • Named, killable session containers under the sandbox, with a cid the teardown kills by; the container sees the common git directory and the unit's own directory only.
  • A resumed closing step does not repeat the earlier ones.
  • /ship: gate 1 is your spoken OK on the spec in the worktree. No spec PR.

A phase names the host skills it builds through

Each phase's ### Phase N section carries a - **Skills:** line naming the host's own skills the phase must use — its scaffolds, test runners, linters — resolved by /spec-writing from the host's skill index (the router table in the root AGENTS.md, else the descriptions under .claude/skills/). parse-ledger.sh --skills "Phase N" reads it, the loop hands the names to the session as a Skills: prompt line and lists them in --dry-run, /implement-spec invokes them before writing, and /pre-implement-spec fails a name that resolves to nothing.

Upgrade

Re-run install.sh in the host. State moves to .loop/state/units/<branch>/; a pre-0.3 repository-wide lock/pid is respected while alive and swept when dead.

PRs #4, #5, #6.