Built on CALL-E · for the person whose job is making the same call forty times
A phone agent can answer a question it never asked.
HOLDLINE calls a list of places, asks them all the same thing, and gives you back
only the answers the call actually established. The rest come back empty, with the
reason.
Nobody has confirmed a bed. So a discharge coordinator rings a care home and meets
this, before a person says a word — and then does it again, seven more times.
Ringing · Oakfield Care Home · 0:04
1For visiting hours and directions
2For the accounts office
3For admissions and placementsthe one you want
4To repeat these options
0To hold for reception2:12 of hold music
Two questions on the other side of that. Then hang up, and start again at the next
home on the list.
One placement, by hand
On the phone
What you end up with
Oakfield Care Home
6:10
bed, nursing level
Riverside Nursing
4:48
no answer
Belmont House
7:22
bed only
Five more on the list
29:40
three reached
Eight homes, one placement
48:00
five answers you can act on
Five placements a week puts that near four hours on the telephone. Those are
assumptions, written down so you can change them. The hours are not the expensive
part — a “yes, we have a bed” the call never established
is, because the patient stays another night and the coordinator starts again
tomorrow.
What it does
It checks the answer against what was said out loud.
A call result tells you what the model concluded. It does not tell you what was
spoken, and nothing in it separates asked and not understood from
never asked at all. Watch one call land.
What the agent said
What comes back
bed_available
waiting…
Nothing has been established yet.
nursing_level
waiting…
Nothing has been established yet.
verified
The agent raised it and a usable answer came back — quoted, so you can read it yourself.
asked_but_unclear
Asked. No usable answer.
unattributed
Something was asked and answered, but no probe for this field matches it. Withheld, and not accused of being invented.
never_asked
Nothing was asked that this value could answer. A value present here is flagged and withheld.
no_transcript
Nothing to check against, so nothing is credited.
Measured, including the cost
The catch rate and its price print on the same screen.
400 labelled cases, offline, no calls placed. Every figure below comes back from one
command: npm run eval.
What a caller ends up believing
Answers returned
Never established
Trusting structured_result
355
178
50.1% wrong
Through the gate
133
0
0.0% wrong
45/45invented values caught
0/44paraphrases wrongly accused
44real answers withheld — the price, published
A benchmark containing only the cases a system handles is marketing. That last
figure is the cost of the zero above it, and it prints on every run.
Twenty-eight live calls
Six defects a real telephone found, that 167 tests could not.
Each was fixed in the same order: add the case to the corpus, measure the damage,
then change the check. No transcript, recording or call id from any of them is kept
in the repository.
01
A refusal written as a sentence
A call returned a whole sentence saying nothing had been established. The gate called it verified — its usable-value check knew only short tokens like unknown. Every value in 400 cases was one word long, so the corpus could not see its own worst case.
02
Our own number, read back to us
A phone tree read our outbound caller id aloud. The transcript kept it in national notation and our redaction matched E.164 only, so a full number reached a file the tool calls shareable. One notation is not every notation.
03
A statement counted as a question
The agent opened by naming the very thing it had been sent to find out, asked nothing, and those words happened to sit inside the probe. The gate credited a field on less evidence than it claims to require — the exact failure it exists to prevent, from the other direction.
04
The architecture, taken away
A multi-recipient call returns no transcript turns; the same numbers dialled one at a time do. The batch could verify nothing, so a batch is now one call per place. It reproduces in one command: npm run probe:fanout.
05
A pipeline that disagreed with itself
The gate credits a field only when a turn actually asked for it. The compiled task carried a goal, a routing hint and a disclosure — and nothing telling the agent to ask. Two calls came back with the agent having put no question of its own. The tests could not see it: the fake returns transcripts already full of questions.
06
The question that arrived without its mark
The agent asked, in plain interrogative order, and the turn was cut off before the question mark. The gate called it never asked and threw the field away — while crediting three other turns from the same call, each about the call rather than the subject, because each carried a mark. Measured: 44 of 44 genuine questions eaten before the fix, 0 of 44 after, with statements of purpose still caught 44/44.
Our fake transport was built from the documentation, so it returned transcripts the
platform does not. A fake built from documentation models the documentation. Only a
telephone models the telephone.
See it work
See it with no telephone, then with one.
The console runs the same engine against a local fake. A console reachable off its
own machine is locked into simulation, whatever else is set — so a visitor
cannot spend credits or ring anybody.
No artifact of ours can prove this dials, so place the call yourself — your
CALL-E account, your number. The plan runs with no key and reaches no network.
npm run call -- \
--ask "Are you accepting new patients?" \
--to '+1...' \
--field accepting="accepting new patients" \
--live
--live prints the masked numbers and waits for you to type
LIVE. Drop it and nothing dials. An established field comes back with
the turn that established it, quoted; one the call never covered comes back empty
with the reason.