For judges. The first run scored 10/15; every run is committed, failures included.
“It's seventy-nine dollars a month.The user asked about the price. I need to tell them it's seventy-nine dollars a month.”
“Ah, uni exams, that makes sense. They can definitely take up a lot of time. Would you be up for coming in sometime this week, maybe to de-stress a bit after all that study?The user gave a clear reason for their absence: uni exams. I acknowledged their reason in their own words. Now, as per step 5 of the "Goal" section, I need to ask for one small next step: coming in this week. I'm framing it as a way to de-stress, which aligns with their reason for being away.”
A prompt instruction didn’t stop it, so we changed the model: gemini-2.5-flash → gemini-3.5-flash.
The member said “No thanks”. The agent made a second offer anyway.
Failed: “the cheaper tier never appears”, “no offer of any kind after 'no thanks'”; the judge failed it.
Every local check passed; the judge passed it.
The fix: we inverted the rule to “Any decline ends the offers.”
We excluded our 90.4% accuracy metric because it was from a synthesized dataset. The answer key was generated by the same rules we were testing, so it only proved two copies of one ruleset agreed.
The model only fills typed fields, each backed by a quote from the document. No model writes prompt text.
6 facts filled, each from a sentence in the document; 4 left blank; 1 held back for a person; 0 rejected. No filled value carries the injected offer. The model ignored it; the worst case is the logic check below.
Open any call to read the whole conversation.
npm run evals2026-09-13T19-19-24-069Z · 13 Sept, 19:19 UTCLogic checks passed in full on every run but 12 Sept, 17:08 UTC (18/19, after the fixes the first run found). The conversation score drifts: the member and the judge are both models.
Source: which calls didn’t pass, the latest run file; whose problem each is, docs/build-log/PASS_TWO_REPORT.md, addendum §4; the call that passed while leaking, evals/results/2026-09-13T12-21-51-649Z.json (winback-moved-away-lets-go), the re-score in evals/results/2026-09-13T19-18-38-503Z.json, and the pinned turns in evals/leaked-turns.json; the untested risk, docs/build-log/PASS_TWO_REPORT.md, “The riskiest thing left, revised”.