Context
This is a sanitized methodology retrospective from a real 10-round RLCR session (rounds 0-9, exited via the stagnation circuit breaker). No project-identifying details are included; everything is described generically. The full analysis was produced by the loop's own exit-time methodology-analysis phase.
What worked well (keep it): the find-fix core is sound. The reviewer re-ran tests and inspected the working tree every round instead of trusting summaries, catching multiple genuine defect classes — an empty-input crash, a silent shape-broadcast producing plausible-but-wrong results, a double-applied scaling factor across a module boundary, an incorrect distributed reduction under the production aggregation mode, and a caller/callee signature mismatch — plus several overstated summaries. The automated test suite grew ~6x across the session and no accepted fix was ever reopened. Plan-to-execution alignment was tight (drift audits repeatedly found no forgotten/untracked work).
Why it still tripped the circuit breaker: three process mismatches compounded, none of them "implementers idle":
- Cadence mismatch (central). The stop-triggered review fires on every session stop, but the orchestrator delegates implementation to background agents, and non-trivial implementation naturally spans several stops (dispatch → wait → partial → wait → done). Honest, explicitly-labeled interim summaries at intermediate stops were scored as stagnation because the committed tree hadn't moved between adjacent stops. The orchestrator ended up inventing an ad-hoc "don't report until settled and committed" discipline that fights the harness (it forces holding the session open across long background work).
- External-gate blind spot. Several plan tasks — including the critical path — required a human-approved external execution step the loop is forbidden to launch autonomously. The loop has no way to park such tasks, so every one of the ten reviews re-flagged the same blocker, and the stagnation detector counted a permanent structural dependency as failed progress.
- Completion-bar conflict. The human-approved plan encoded explicit completion levels (with sign-off on phased deferrals), while the reviewer mandate forbids accepting any deferral. The reviewer reactivated the plan-sanctioned deferrals every round and re-litigated the same scope question ten times; "judged scope" oscillated even though executed scope was stable and on-plan.
Secondary friction: two un-actionable notes (an immutable tracker structure that was internally inconsistent but which reviewer rules forbid editing; a review sandbox that cannot run distributed tests) were re-derived verbatim in every review; and reviews re-stated the full gap set each round, burying the round-over-round delta.
Suggested improvements (pattern → fix)
- Settled vs in-flight rounds; gate review on settlement. Give the loop a first-class in-flight round state: when a summary self-declares interim AND a delegated background task is still running, either defer the review until the task reports completion, or record a no-op checkpoint that does not feed the stagnation counter. Measure stagnation across settled rounds only. (Directly fixes the false trip observed here.)
- A PARKED / blocked-on-external-gate task state, distinct from active and deferred: excluded from actionable-gap and stagnation math, surfaced once as a single "awaiting external action X" line, auto-un-parked when the precondition is recorded satisfied. Let the loop pause/complete cleanly with parked work outstanding, handing it back as an explicit checklist.
- Reachability partition at loop start. Split plan tasks into in-loop-completable vs externally gated; drive the loop to exhaust the reachable set, then stop and escalate the gated set. A circuit-breaker firing on gated-only remainder should yield a "handoff" outcome, not "stagnation/failure".
- Parameterize the reviewer's completion bar by the plan's approved phase. If a plan encodes completion levels with human sign-off, the loop should target the currently-approved level and report higher-level items as "out-of-current-phase (approved)", not "unjustified deferral". Reconcile the "no deferrals" mandate with plan phasing once, at loop-config time.
- One-time owner-action queue for structural findings. Route un-actionable structural/config findings (e.g. an inconsistent immutable tracker, a sandbox capability gap) to a queue that is raised once, escalated to the human, then suppressed ("known, escalated") from subsequent reviews. Resolve environment capability gaps at setup time or designate an external-evidence protocol once.
- Delta-first reviews; no scored summaries for in-flight rounds. Lead each review with what changed since the last settled round (newly opened/closed findings), keep the full audit as an appendix. Skip soliciting summaries for in-flight rounds entirely — thin interim summaries were the raw material for the false stagnation signal.
Environment note
Loop version: humanize 1.16.0 plugin, RLCR via start-rlcr-loop, reviewer on a Codex-class model with repo access. Happy to provide further sanitized details if useful.
Context
This is a sanitized methodology retrospective from a real 10-round RLCR session (rounds 0-9, exited via the stagnation circuit breaker). No project-identifying details are included; everything is described generically. The full analysis was produced by the loop's own exit-time methodology-analysis phase.
What worked well (keep it): the find-fix core is sound. The reviewer re-ran tests and inspected the working tree every round instead of trusting summaries, catching multiple genuine defect classes — an empty-input crash, a silent shape-broadcast producing plausible-but-wrong results, a double-applied scaling factor across a module boundary, an incorrect distributed reduction under the production aggregation mode, and a caller/callee signature mismatch — plus several overstated summaries. The automated test suite grew ~6x across the session and no accepted fix was ever reopened. Plan-to-execution alignment was tight (drift audits repeatedly found no forgotten/untracked work).
Why it still tripped the circuit breaker: three process mismatches compounded, none of them "implementers idle":
Secondary friction: two un-actionable notes (an immutable tracker structure that was internally inconsistent but which reviewer rules forbid editing; a review sandbox that cannot run distributed tests) were re-derived verbatim in every review; and reviews re-stated the full gap set each round, burying the round-over-round delta.
Suggested improvements (pattern → fix)
Environment note
Loop version: humanize 1.16.0 plugin, RLCR via start-rlcr-loop, reviewer on a Codex-class model with repo access. Happy to provide further sanitized details if useful.