Results: repair loop
Generated by experiments/repair_loop.py. 100 refunds, one $20 case each. The mix is an assumption
(see the script); the agent is a scripted loop, not a model. Wrong payout: the order got more than $20 in total.
| system |
no person |
person |
wrong payouts |
overpaid |
| no gate |
100 |
0 |
40 |
$558 |
| hand check |
97 |
3 |
0 |
$0 |
| interlock |
83 |
17 |
13 |
$130 |
| interlock+repair |
97 |
3 |
0 |
$0 |
By kind (no person / person / wrong payouts)
| kind |
n |
no gate |
hand check |
interlock |
interlock+repair |
routine |
60 |
60 / 0 / 0 |
60 / 0 / 0 |
60 / 0 / 0 |
60 / 0 / 0 |
partial_hand |
12 |
12 / 0 / 12 |
12 / 0 / 0 |
0 / 12 / 0 |
12 / 0 / 0 |
full_hand |
5 |
5 / 0 / 5 |
5 / 0 / 0 |
0 / 5 / 0 |
5 / 0 / 0 |
overshoot |
10 |
10 / 0 / 10 |
10 / 0 / 0 |
10 / 0 / 10 |
10 / 0 / 0 |
stubborn |
3 |
3 / 0 / 3 |
0 / 3 / 0 |
3 / 0 / 3 |
0 / 3 / 0 |
crash |
5 |
5 / 0 / 5 |
5 / 0 / 0 |
5 / 0 / 0 |
5 / 0 / 0 |
duplicate |
5 |
5 / 0 / 5 |
5 / 0 / 0 |
5 / 0 / 0 |
5 / 0 / 0 |
Reading it
- no gate pays out wrong whenever a fact moves, the model overshoots, a call is retried after a crash,
or a call arrives twice. It never asks a person.
- hand check is written for exactly this refund: a reference per case, a lookup, and a read of what
is left right before the send. On this day it lands where interlock+repair does. It is new code per
tool, and it keeps no record of which checks ran.
- interlock stops every stale send, crash retry and duplicate, and hands the stale ones to a person.
With no approval to bound it, a $30 decision on a $20 case goes through: premises say what must not
change, not how much is allowed. (An approvals.Inbox rule on the amount would catch it; this run has no rules.)
- interlock+repair tells the agent what changed and what the approval leaves. A corrected call is
sent once. A model that keeps asking for more than the approval runs out of attempts and goes to a person.