# Autonomous Loop Protocol 8-phase specification executed each iteration. Complete phases in order — no skipping. --- ## Phase 0: Precondition Checks (first iteration only) Run once before the loop starts. Abort with clear error if any check fails. 1. Confirm current directory is a git repository (`git rev-parse --git-dir`) 2. Confirm working tree is clean (`git status --porcelain` → empty output) 3. Confirm current HEAD is on a named branch (not detached) 4. Check no stale lock files (`loop-results.tsv.lock`) 5. Resolve scope glob — confirm at least one file matches 6. Dry-run verify command — confirm it exits 0 and outputs a number 7. Dry-run guard command (if set) — confirm it exits 0 8. Record **baseline metric** as iteration 0 in `loop-results.tsv` --- ## Phase 1: Review Read context before every iteration — do not skip even if "nothing changed". ```bash git log --oneline -20 # recent history git diff HEAD~1 # last change detail cat loop-results.tsv # full results so far ``` Extract patterns: - Which file types / functions yielded improvements? - Which changes were consistently discarded? - Is the metric trending, plateauing, or oscillating? --- ## Phase 2: Ideate Pick **ONE** focused change. Rules: - **Exploit** patterns from successful iterations - **Avoid** repeating failed patterns (same file + same approach) - **Atomicity test:** describe the change in one sentence. If the sentence contains "and", split into two iterations. - Prefer high-leverage targets (files with low coverage, large bundle contributors, most lint errors) - When stuck (3+ consecutive discards on same area), pivot to a different file or technique --- ## Phase 3: Modify - Edit files within `Scope` only - **Never** modify files referenced by the `Guard` command - Ensure syntax is valid after edit (run `tsc --noEmit` or equivalent linter for the language) - Keep changes minimal — one logical unit --- ## Phase 4: Commit Commit **before** running verification. Git is the undo mechanism, not a post-hoc save. ```bash git add git commit -m "loop(iter-N): " ``` Convention: `loop(iter-N):` prefix enables log filtering later. --- ## Phase 5: Verify Run the configured verify command. Extract the numeric result. ```bash RESULT=$(eval "$VERIFY_CMD") DELTA=$(echo "$RESULT - $PREV_METRIC" | bc) ``` ### Crash Recovery | Outcome | Meaning | Action | |---------|---------|--------| | Exit 0, number printed | Success | Proceed to Phase 5.5 / 6 | | Exit 0, no number | Bad command | Log `error:no-number`, revert, fix verify cmd | | Exit non-zero | Verify crash | Log `error:verify-crash`, revert, treat as discard | | Timeout (>30s) | Too slow | Log `error:timeout`, abort loop, surface to user | --- ## Phase 5.5: Guard (optional — skip if no Guard configured) Run guard command after verify. ```bash eval "$GUARD_CMD" GUARD_EXIT=$? ``` | Guard Exit | Action | |------------|--------| | 0 (pass) | Proceed to Phase 6 | | Non-zero (fail) | Revert commit, rework change (max 2 rework attempts), then discard | If rework attempts exhausted: log as discarded with reason `guard-fail`, proceed to Phase 7. --- ## Phase 6: Decide ### Decision Matrix | Metric Direction | Delta vs Min-Delta | Guard | Decision | |------------------|--------------------|-------|----------| | higher is better | delta ≥ Min-Delta | pass | **KEEP** | | higher is better | delta < Min-Delta | pass | **DISCARD** (no progress) | | lower is better | delta ≤ -Min-Delta | pass | **KEEP** | | lower is better | delta > -Min-Delta | pass | **DISCARD** (no progress) | | any | any | fail | **DISCARD** (guard fail) | | any | verify crash | n/a | **DISCARD** (error) | ### Keep - Update `PREV_METRIC` to current result - Reset consecutive-discard counter to 0 ### Discard ```bash git revert HEAD --no-edit # preferred: preserves history # fallback only if revert conflicts: # git reset --hard HEAD~1 ``` - Increment consecutive-discard counter --- ## Phase 7: Log Append one TSV line to `loop-results.tsv`: ``` {iter}\t{ISO8601_timestamp}\t{metric}\t{delta:+.2f}\t{kept:yes/no}\t{description} ``` Example: ``` 3 2026-03-27T14:02:11 84.7 +2.3 yes add branch coverage to tokenizer edge cases 4 2026-03-27T14:03:45 84.7 +0.0 no extract shared assertion helper ``` --- ## Phase 8: Repeat or Stop Continue if ALL conditions met: - Iteration count < configured max - Consecutive discards < 10 - User has not interrupted (check for `loop-stop` file or Ctrl-C signal) ### Stuck Detection | Consecutive Discards | Action | |----------------------|--------| | 5 | Analyze `loop-results.tsv` for patterns → shift strategy (different scope area, different technique) | | 10 | **STOP** — surface findings to user, recommend manual intervention | ### Final Report When loop ends (limit reached, stuck, or interrupted): ``` Loop complete: N iterations, K kept, best metric: X (baseline: Y, delta: +Z) Kept changes: [list commit hashes and descriptions] Discarded: [count] iterations Recommendation: [continue / diminishing returns / target met] ``` --- ## Anti-Patterns | Anti-Pattern | Why It Fails | Correct Approach | |--------------|--------------|------------------| | Multiple changes per iteration | Cannot attribute metric change to specific edit | One atomic change only | | Verify before commit | No rollback point if verify crashes mid-run | Always commit first | | Editing guard-scope files | Guard becomes meaningless if you edit what it checks | Guard files are read-only | | `git reset` instead of `git revert` | Destroys history, breaks pattern analysis | Use `git revert` | | Skipping Phase 1 review | Repeats failed patterns, wastes iterations | Always read log + diff | | Ignoring `Min-Delta` | Micro-improvements cause noise, no real progress | Set meaningful threshold |