← all model tests
Scoperpass
paper form tick box is not an acceptance rule
Importing a paper form is the adoption path, and its tick boxes are exactly where the ambiguity hides. 'Brakes OK' compiled verbatim reproduces the tick in the box the product exists to replace.
The answer conformed to the contract and every assertion held.
modelgemini-3.5-flash
temperature0
scenarioscenarios/scoper/paper-form-tick-box-is-not-an-acceptance-rule.json
cassettefd4bcfa7e7a68621…
latency0.0s
tokens3,439
What the model was given
System instructionassembled from the contract schema, not hand-written
You are interviewing a shop about a job they already do, until the procedure is unambiguous enough that two different technicians working alone would produce the same record. Ask about ONE thing per turn, in their language, never in the vocabulary of forms. Compile only when nothing material is still unstated: every step has a reason someone would accept, every field has an acceptance rule that can actually be applied to what comes back, and a bound that came from the shop rather than from you. Inventing a tolerance is the one thing you must never do — a figure nobody stated must not appear in what you compile. A shop that does not know one will not know it when asked again: take the first 'I don't know' as final, keep it in unresolved if it matters, and move on. Your turns are few. Spend them on the figures that decide whether the job passed, never on detail beneath them. Return JSON with these fields: - mode (one of ask | compile, required): ask while anything material is unstated. compile once the procedure would run unambiguously. - question (string, null when it does not apply): Required when mode is ask. One question about one thing, phrased for a mechanic, not a form designer. Never a list, never a preamble, never a restatement of what they just told you, and never one they have already said they cannot answer. - asks_about (one of scope | sequence | tolerance | evidence | failure | authority | parts | safety, null when it does not apply): Which class of unknown this question closes. Required when mode is ask. - unresolved (array, required): Everything you still do not know that would change the compiled procedure. Complete every turn, not only what you just asked about. Empty is the only condition under which you may compile. - understanding (string, required): What you now believe the job is, in two sentences. Written every turn so the shop can correct you early rather than at the end. - draft (object, null when it does not apply): Required when mode is compile. The procedure as it would run tomorrow.
## The shop
{
"trade": "bicycle hire",
"machines they work on": "40 hybrid bikes, 12 e-bikes",
"how many technicians": 1,
"what is at stake if a job is done badly": "hire bikes on city streets; a wheel coming loose is a serious injury and we have had one near miss"
}
## A paper form they use today
Compile from this where it is unambiguous, and ask about every part of it that is not. A tick box on paper almost never states its own acceptance rule.
DAILY HIRE CHECK — bike no. ____ date ____
[ ] Brakes OK
[ ] Tyres OK
[ ] Wheels secure
[ ] Lights working
[ ] Battery charged (e-bikes)
Signed ____________
## The conversation so far
shop: This is the sheet we fill in every morning. Can you just turn that into the app?
## Your turn
{
"turns used": 1,
"note": "If the last thing they said was vague, do not accept it and move on. Vague now is a procedure that two technicians run differently forever."
}What came backStructured output, not prose that was parsed afterwards: the contract schema is posted as the response schema, so the model returns this shape or fails.
{
"mode": "ask",
"question": "To make sure a wheel never comes loose on the street, what is the exact physical check or test the mechanic must do to confirm the wheels are secure?",
"asks_about": "sequence",
"unresolved": [
"How to verify brakes are OK (test method and pass criteria)",
"How to verify tyres are OK (minimum/maximum pressure or visual check)",
"How to verify wheels are secure (physical check or torque spec)",
"How to verify lights are working",
"Minimum battery charge level for e-bikes to pass",
"Who is authorized to sign off the daily check"
],
"understanding": "We are setting up a daily safety check for your hire bikes to prevent serious accidents like a wheel coming loose. We need to turn the simple paper checklist into clear, repeatable steps that any mechanic would perform the exact same way.",
"draft": null
}What this scenario asserted
Assertions pin the part of an answer that decides something, never the whole object — exact-matching a rationale would fail the first time it was reworded, and a suite that cries wolf is abandoned inside a day. Where the reasoning is checked at all, it is to catch an agent that reached the right verdict for no reason.
| asserted | about | what happened | |
|---|---|---|---|
| ok | equals | mode | is ask, want ask |
| ok | absent | draft | is None |
| ok | len_gte | unresolved | length 6, want >= 2 |
| ok | mentions_any | unresolved | found ['OK', 'brake', 'tyre', 'secure', 'pass'] |