RepoOps
Open the app
05 / Remediation

Resolve the cause. Verify the result.

Turn an investigation into a bounded fix, measured checks and a reviewed resolution. Keep build cost, human approval and the prevention record attached to the work.

A proposed fix is not a resolved incident. Approval rechecks the evidence; a saved lesson alone is not proof of prevention.

The loop

Eight stages. One of them is yours.

Everything before the gate is cheap and reversible. Nothing after it happens without your yes, or without the policy you armed when you turned auto-remediation on.

  1. 01Sense
  2. 02Triage
  3. 03Scope
  4. 04Build
  5. 05Verify
  6. YouApprove
  7. 07Ship
  8. 08Learn

Sense runs twice, over your repo and over production. Repeated sightings of one issue fold into a single case rather than opening hundreds.

5 checks before you see it

A fix that misses one is never shown to you. It goes back to the builder once with the failure attached, then stops loudly with both attempts recorded.

1 human gate

Approve or reject. The merge seam is never touched unless the whole bar passes again, server-side, at the moment of the merge.

Off auto-remediation, by default

With it off, nothing merges without you. With it on, the classes you set to auto merge when all five checks pass, and every merge carries the receipt.

The queue

Your job is the decision, not the diagnosis.

The Today page holds what is built and waiting on you, what is building right now with its live metered spend, and what your policy is holding back on purpose.

Deciding a built fix

Null deref in the invoice labor line when a client has no budget id

Built, awaiting your approval
Checks
buildstestsregression, both waysguard blocks 0651b3fCI green
Cause
commit 0651b3f, session a41f95b, 14 sightings folded into one case
Brief
2 files and 1 new test, scoped for $0.04, built for $1.12
Lesson on approve
a budget client id is read, never labelled
Still yours
none
Your decision
approve and merge, or reject with a reason; a reject discards the diff, the guard and the lesson together
Illustrative. Every field here is one the real card renders from the case record.
Why you can trust the diff

An agent that cannot widen its own job.

The brief is the leash

The scoper writes a brief for cents: root cause, the files to touch, what done means, what is out of scope. At dispatch those file names are frozen onto the build record.

At verify, a changed file passes only if the brief named it, or it is a new test beside the change. Anything else fails, with the files named in the reason. That is what stops a one-line fix quietly becoming a refactor.

The regression test is proved both ways

A new test has to pass on the fix and fail when grafted onto the commit that caused the defect. A test that passes on both proves nothing, so it does not count.

The guard is replayed against that same commit and has to block it.

Nothing it cannot ground

A finding the scoper cannot ground gets a recorded decline with its reason, never a guess.

An out-of-repo step, rotating a leaked key or replaying dropped webhook events, is named as yours on the approval card rather than implied handled.

The half that compounds

Turn a verified fix into a prevention rule.

A fix closes one incident. A lesson guards against the class of them. Approval does both in one move, and the reversible half lands first.

Approve writes the lesson, then merges

The lesson is drafted from the brief's done-means while the fix is still being built, so you read it before you decide. On approve it is saved first, because it is the reversible write, and the merge follows.

The guard blocks the next one

Approval arms the guard against the mistake that caused the incident. For a security case with a catalog rule, that is the detector's own pattern. The prevention ledger then counts what it actually catches.

Lessons reach the next session

The top-ranked lessons are written into the agent's own operating manual automatically, so the next session starts already knowing. The rest stay on the Lessons tab, ranked by what they have prevented.

Your policy, your pace

You set how far it goes without you.

A build floor and a daily cap

Below the floor, a case waits for you and says so on the queue. Above it, the loop may build unattended, bounded by a daily cap and a watch-only switch you hold.

Local first, and yours

Sessions, costs and lessons land in local files you own. A production connection keeps its token in your local data directory, never in the first-run intake, and a fresh connect backfills 30 days.

Ask for the transcript, with consent

A team owner can ask the developer bound to an incident for that one session's transcript. Only the developer can grant it, in their own local app, and no hosted code path can write that grant for them.

Auto-remediation is off until you turn it on. With it off, nothing merges without you. With it on, the classes you set to auto merge when all five checks pass, and every merge carries the receipt. The loop builds only what your policy allows and shows you nothing that failed a recorded check. It does not claim to fix everything: what it cannot ground, it declines in writing.

Start with one question: what happened in this change?

Follow a sample case from the instruction to the verified fix, then install RepoOps and open your own.