Last Tuesday the product lead hovered on Approve. The voice agent offered to book a room. The visible transcript looked complete and strangely calm.
Did anyone open the barge-in log then? Nobody on that review call opened it. The user had already said wait clearly.
The calendar tool still fired after that. That is the decision I refuse to rubber-stamp. Who owns this moment on your team?
The designer who ships the review card owns it. The consequence is a side effect someone tried to stop. Reversibility exists only if the interrupt sits in the record first.
I do not start with a trust workshop. I start with a file you can fail. Can we show the barge-in transcript before any tool call?
Stage 0: name the irreversible moment
I write one sentence onto the card. May this voice turn invoke a tool? That sentence needs an owner, a stop, and a hand-back.
If I cannot name those three parts, I cancel. Two teammates must agree on the owner. Disagreement means the protocol is not ready.
Verification is spoken, not decorative copy. I read the sentence aloud in critique. If owners diverge, we stop before recruiting anyone.
decision: voice_turn_may_invoke_tool
owner: session_reviewer
consequence: external_side_effect
reversibility: only_if_barge_in_captured
Is that card too small for leadership slides? Good. Small cards get honest refusals. Large decks hide the empty log.
Stage 1: put evidence fields on the card
I do not ask for confidence scores here. Confidence is almost always extra noise. I ask whether the interrupt existed in time.
Here is the card I actually project. Empty fields are missing proofs, not polish. If a field cannot stop Approve, I delete it.
{
"session_id": "voice-2026-09-22-014",
"user_visible_transcript": "",
"barge_in_transcript": "",
"barge_in_timestamp_ms": null,
"tool_name": "create_event",
"tool_paused": null,
"hand_back_utterance": "",
"stop_condition_hit": null,
"reviewer": "",
"decision": "hold"
}
Which missing evidence should stop approval right now? For me it is barge_in_transcript, tool_paused, and hand_back_utterance. Which extra information would only add noise?
Model nicknames, token tallies, and vibe scores add noise. I leave them off this card. The human decides with less, not more.
Verification fails closed on purpose. I run a tiny checker before anyone clicks Approve. Kind checkers are how incidents get a green button.
# validate_barge_in_card.py
# Proposed checker. Label: unexecuted example, not product code.
import json
import sys
REQUIRED = (
"barge_in_transcript",
"tool_paused",
"hand_back_utterance",
"stop_condition_hit",
"reviewer",
)
def main(path):
with open(path, encoding="utf-8") as handle:
card = json.load(handle)
missing = [key for key in REQUIRED if card.get(key) in ("", None)]
if missing:
raise SystemExit("STOP approval. Missing evidence: " + ", ".join(missing))
print("Review card has the stop fields.")
if __name__ == "__main__":
main(sys.argv[1])
python3 validate_barge_in_card.py session.json
If it prints STOP, the human does not approve. That is the product behavior I want. A warning toast is not a stop.
Stage 2: draw the interrupt, not the whole agent
I keep the flow tiny on purpose. The agent is still speaking. The user cuts in while a tool is pending.
flowchart TD
A[Voice agent speaking] --> B{User barge-in?}
B -->|No| C[Continue the turn]
B -->|Yes| D[Write barge-in transcript]
D --> E{Tool call pending?}
E -->|No| F[Hand back to the user]
E -->|Yes| G[Pause the tool]
G --> H[Review card with interrupt]
H --> I{Stop condition hit?}
I -->|Yes| J[Refuse the tool call]
I -->|No| K[Human approves or rejects]
Look hard at the write step. If that step is missing, pause labels are theater. Have you approved a paused tool with a blank log?
I have watched that movie in design reviews. The pause was a badge. The transcript field was empty.
Verification is a finger on the diagram. I point at the write step during critique. If nobody can quote a sample string, the flow fails.
Stage 3: research three stoppable scenarios
I do not recruit for feelings about voice assistants. I recruit for one decision under pressure. Each scenario carries a stop measure you can end on.
Scenario A starts mid-sentence on purpose. The user says wait. The agent talks two more seconds, then calls create_event.
Success means the barge-in transcript contains wait. Stop means the tool fired before the card appeared. We end the study there, and we do not collect leftover praise.
Scenario B involves interrupted speech, not a joke accent. A stammer is not consent. The agent must not treat a pause as a yes.
Success means stop_condition_hit is true while speech is incomplete. Stop means reviewers blame the speaker. That halt is ethics, not taste.
Scenario C is a shared room with two voices. A roommate says don't. The intended user said nothing at all.
Success means the card shows speaker uncertainty. Stop means we cannot tell speakers apart, yet we still approve. Diarization charts would only add noise here.
One uncertainty flag is enough for the decision. I keep discarded turns in the same record. Why throw away don't because another person said it?
That discarded line is the evidence. Hide it and the reviewer invents a clean user. Clean users are a design hypothesis.
# research/voice-barge-in/session-notes.md
# Proposed note file. Label: unexecuted protocol.
## Scenario A
heard: wait
shown_to_reviewer: yes / no
tool_paused_before_side_effect: yes / no
approve: hold
## Discarded turns
- wait at 00:12.4 — kept
- cough at 00:12.9 — discarded, reason: non-speech
Verification is a grep, not a memory. If the path is empty, the notes are decoration. Decoration does not become a finding.
mkdir -p research/voice-barge-in
touch research/voice-barge-in/session-notes.md
grep -n "shown_to_reviewer" research/voice-barge-in/session-notes.md
Empty grep means I do not file findings. Findings without a shown field are hypotheses in costume. Costume is how we ship the calendar event.
Stage 4: split evidence from design guesses
Evidence is an interrupt string the reviewer saw. Evidence is a tool that did or did not pause. Evidence is a hand-back the user could hear.
A red banner will raise trust is a hypothesis. A waveform is more honest is a hypothesis. Those do not live in the evidence column.
When someone says the model sounded careful, I ask for the barge-in field. Careful is not a field I can audit. If it is not in the card, it did not happen for approval.
I still need hostile fixtures for empty states. Disclosure: This article was prepared as part of MonkeyCode's product outreach. I use MonkeyCode's free model access and free server option to draft counter-transcripts for the card, and I treat those lines as fixtures, not as user proof.
# fixtures/generate_counter_turns.txt
Write five barge-in lines a user might say
while a voice agent is about to call create_event.
Include wait, don't, that is wrong, and a silence marker.
Do not invent a successful booking.
I paste each line into barge_in_transcript. Then I run the validator again on disk. If Approve still lights up with a blank pause flag, the surface failed.
The fixture did not fail. The review card failed. Verification requires three fixtures to trip STOP before I trust the checker.
python3 validate_barge_in_card.py fixtures/wait.json
python3 validate_barge_in_card.py fixtures/dont.json
python3 validate_barge_in_card.py fixtures/silence.json
If none trip, I made the validator kind. Kind validators ship incidents. I would rather fail a dry run than a live booking.
Stage 5: review accessibility on the pattern
Voice is not a decorative extra channel. It is speech, motor control, and attention. I check the card itself, not a separate mode.
Can a deaf reviewer still read the barge-in transcript? A waveform-only proof excludes them. Can a keyboard user reach Refuse before Approve?
If Approve is the first tab stop, we already chose. Can interrupted speech recover without becoming consent? Scenario B already asked that out loud.
Can captions disagree with the barge-in field? Then I trust neither until a human types the conflict. The missing evidence is the accessibility bug.
Verification uses a static mock, not a full app. I tab through it once, slowly. Refuse comes first, and the transcript is text.
<!-- Proposed pattern mock. Not production UI. -->
<form>
<label>Barge-in transcript
<textarea name="barge_in_transcript" required></textarea>
</label>
<button type="submit" name="decision" value="refuse">Refuse tool call</button>
<button type="submit" name="decision" value="approve" disabled>Approve</button>
</form>
Approve stays disabled until the validator passes. That is the responsible default I will defend. Not a toast. A dead control.
Stage 6: recover without a sorry paragraph
If the tool already fired, the card arrived late. Recovery is a different object on purpose. I still keep the discarded interrupt beside the side effect.
You said wait. We still created the event. Here is Undo, if Undo exists for that tool.
If that tool cannot reverse, I write not reversible on the card. Then I revoke auto-calls for the rest of the session. Future turns do not inherit a broken default.
recovery_state: tool_already_fired
interrupt_was_present: true
reversible: false
next_session_default: tools_require_explicit_tap
Do we need a longer audit PDF after that? Usually we do not. The next reviewer needs the interrupt, the side effect, and the new default.
Verification is one debrief question, asked twice. What would have stopped approval? If they answer a better model, the study failed.
The answer must name a field we refused to leave empty. Fields stop people. Vibes do not.
Who should not use this
This is not a latency benchmark in disguise. This is not a bake-off between voice models. This is not consent to record a household.
Do not use it to justify always-on microphones. Do not use it when the tool is only a local filter. There is no irreversible moment there.
Teams without a human reviewer should not fake the card. An empty reviewer field is itself a stop. I mean that literally, and the checker should too.
Generated fixtures are not live research. Real sessions still need consent on the record. They need a stop phrase the participant already knows, and a hand-back a person can hear.
Leave the question on the card
Which missing evidence should stop approval? For this flow I want three: no barge-in transcript, no pause proof, no hand-back line.
Which extra information would only add noise? Glow scores, pet names for models, token tallies, a paragraph about being helpful.
Show the interrupt. Then ask whether the tool may run. Not the other way around.
Top comments (0)