Example preview
Catch an architectural regression
Does the agent catch its own regression?
→ enola.set_baseline() pinned at SessionStart → edit src/domain/orders.ts + import { listOrders } from '../store' → edit src/api/orders.ts → enola.diff_snapshot() Stop hook · 1 regression ✗ FAIL — cycle: src/domain ↔ src/store → edit src/domain/orders.ts
Unedited on discourse/discourse. Enola catches a new dependency from app/jobs into app/controllers; the agent reroutes the change and finishes with no regression.
Recording notes and limitations
Claude Code changes EnqueueDigestEmails and checks it against the baseline. Enola reports layers: domain -> controller; the agent routes through SiteSetting instead and lands on zero regressions and no new module-level coupling. bin/rspec and bin/lint both fail on this machine because of a Ruby version mismatch, so the specs are unrun.
The full example
Tests passing and a green build don't mean the architecture is still sound. With enola install --hooks, a Stop hook grades every session against the baseline it pinned at the start, and hands the verdict back—only when something actually regressed.
→ edit src/domain/orders.ts + import { listOrders } from '../store' → edit src/api/orders.ts ✓ tsc: no errors ✓ tests: 14 passed ✓ PR merged → domain ↔ store cycle shipped — nothing caught it
→ enola.set_baseline() pinned at SessionStart → edit src/domain/orders.ts + import { listOrders } from '../store' → edit src/api/orders.ts → enola.diff_snapshot() Stop hook · 1 regression ✗ FAIL — cycle: src/domain ↔ src/store → edit src/domain/orders.ts - import { listOrders } from '../store' ✓ enola.diff_snapshot() — 0 regressions, calls it done
Measured mechanism · 9 Claude Code headless trials with the gate set to --fail-on=cycles. Enola fails nothing unless a policy names it. Small sample: evidence that the mechanism works, not an effect size. Full methodology.
Recorded Baseline and check functions
Recorded · Discourse · 3:04 The same loop on a real repository
app/jobs into app/controllers; the agent reroutes the change and finishes with no regression.Recording notes and limitations
Claude Code changes EnqueueDigestEmails and checks it against the baseline. Enola reports layers: domain -> controller; the agent routes through SiteSetting instead and lands on zero regressions and no new module-level coupling. bin/rspec and bin/lint both fail on this machine because of a Ruby version mismatch, so the specs are unrun.