The ledger

Every failure,
published.

Send a job Pip gets wrong. We run it, review it, and publish what happened — the right answer, the fix, and who sent it. Fixed entries stay, so the record is whole.

3
Published
1
Still failing
2
Fixed

№ 003 08 Sep 2026 Pip 1.2 Sent anonymously Still failing

Chose one of two order ids that disagree.

State
Subject: “Order #A-4471 has not arrived”. Body: “I ordered #A-4417 two weeks ago and nothing.”
Asked
order_id — copy the order id out of the state.

Pip said

#A-4471, at 0.91 confidence. It took the subject line and never read the body.

Should have said

Abstain. Two order ids that disagree are the case the response docs say abstains rather than guesses: null, with both spans attached, so the caller can ask the customer which order it is.

Still failing. The guess is worse than no answer here: the id is used to look up an order, and a confidently wrong lookup is harder to notice than an abstention. It stays open until the two spans come back as a conflict.

№ 002 27 Aug 2026 Pip 1.1 Sent anonymously Fixed in 1.2

Snapped a frustration score to the nearest level.

State
“Payouts have failed for 3 days. Help!”
Asked
frustration — score on 0 Calm, 1 Frustrated, 2 Very angry.

Pip said

2, Very angry, at 0.94 confidence.

Should have said

1.4. Three days of a failed payout and one terse sentence is frustrated rather than furious, and a score is allowed to sit between two levels.

The fix The placement was being rounded to the nearest level before it was returned. Scores now carry the position on the scale, and the confidence is taken from the interval around it rather than from the level it lands nearest.

How we found it: a set of tickets that each carried one failed-payment sentence and the word help. The reading was right every time; the placement was rounded up to the top level every time.

№ 001 19 Aug 2026 Pip 1.1 Sent by @[handle] Fixed in 1.2

Abstained on a refund it should have seen.

State
“Payouts have failed for 3 days. Help!”
Asked
refund — is the customer asking for a refund?

Pip said

null, abstained. The payout line was treated as unrelated to a refund.

Should have said

true, with the payout sentence as the span behind it. The state names the failure a refund fixes, and it is the reason the customer wrote at all. Abstention is for state that is missing or in conflict, not for state that needs one step of reading.

The fix An answer now has to cite the span it rests on. Where no span bears on the question Pip abstains; where the span is the customer’s own reason for writing, it answers.

How we found it: the ticket was re-run with the payout sentence moved to the end of the state and then cut out entirely. Only cutting it out changed the answer, which ruled out the reading order and left the pairing between the question and the span.