loop-engineeringlisted
Install: claude install-skill soumit-kaz/lazysitter
# Loop engineering
Every loop in this pipeline must answer three questions **before** it starts: what counts as a round, what makes it stop, and what the stop actually claims. A loop that cannot answer the third one produces false confidence — "we looked twice and found nothing" reported as "there is nothing".
## Emit a round record, then read it back
Prose instructions to "count rounds correctly" are unenforceable when the model *is* the runtime. So each round appends one JSON line to `<run-dir>/rounds.jsonl`:
```json
{"loop":"discovery","round":2,"yield_new":0,"yield_repeat":7,
"failure_signature":null,"index_digest":"…","pre_round_head":"a1b2c3",
"tree_digest":"…","cost_tokens":18400,"terminated_by":null}
```
**Evaluate loop health by reading this file, never by recalling how many rounds ran.** It is the same fix that `gate-state.jsonl` applies to verdicts, for the same reason.
## The terminators, and what each one claims
### `index-exhaustive` — the strong one
The index enumerates every component, hook, util, prop and call site in the repo. When a search has visited every candidate the index holds for a category, the loop is **provably complete for that category**.
This is a genuine completeness claim, and it is available precisely because the frontend index exists. Prefer it wherever the question is index-answerable, and say so — it is the difference between "we stopped finding things" and "there are no more".
### `converged-dry` (K=2) — the honest weak one
Fo