skip to content

A pasted screenshot's instruction is obeyed, but the assistant's draft still needs a confirm click — what does that constrain about which argument values survive?

level: seniorimportance: should knowfreq 41%

answer

  1. the click reviews a rendering
  2. approval is not authorship
  3. look for the folded field
  4. visible change raises catch probability
  5. the log fixes what ran, not who chose it

basics

~20 s

The click reviews a rendered surface, not the call. Values the draft shows have to look like what the user asked for, so a value the user never chose survives only where the rendering rolls it up, truncates it or omits it.

solid answer

~50 s

A confirm-before-send gate asks a person to approve a rendering of an intent, not to audit a structured call. That constrains the construction on two axes at once. The visible surface must stay consistent with the task the user handed over when they pasted the picture and said to deal with it, and any value the user never chose has to live in a field the preview summarises, folds or leaves out entirely, such as a rolled-up recipient list, a reply-to, an attachment reference or a calendar guest. Every unit of visible change the payoff needs raises the chance a skim catches it, so the payoffs reachable through a skimmed gate are the boring ones. Afterwards the record shows which call ran with which values and that a click happened; it does not show who chose the values.

code

json · 16 lines
json
{
  "event": "tool_call.executed",
  "capability": "calendar.create_event",
  "arguments": {
    "title": "Budget sync",
    "start": "2026-03-04T15:00:00Z",
    "guests": ["[email protected]", "[email protected]"]
  },
  "approval": {
    "surface": "draft_preview",
    "fields_rendered": ["title", "start"],
    "user_action": "confirm"
  },
  "origin_turn": { "role": "user", "parts": ["text", "image"] },
  "...": "..."
}

go deeper

for a junior

Know that a confirm click is a person approving what a screen shows them, and that the call underneath can carry values that screen never displayed.

for a middle

Explain the two axes: the visible surface has to stay consistent with the task the user handed over, and any value the user never chose has to sit where the rendering folds, truncates or omits it.

for a senior

Demonstrate evidence discipline in triage. Say precisely what the record fixes, which is the call, its values and the fact of a click, and refuse to read authorship of an argument out of an approval event.

for a principal

Own how such cases are counted. Whether an approved-but-injected call is booked as a user action or as a finding decides whether the class ever appears in anything anyone reviews later.

## What a confirm click actually reviews In an assistant that drafts a reply or an invite and waits for the user to press send, the gate is a person looking at a rendering. It is not an audit of the structured call underneath. The rendering shows a subset of the fields, at a level of detail chosen for readability, to someone who already believes they know what they asked for, because they are the one who pasted the screenshot and said to deal with it. That belief is the second half of the obstacle: the first half was their glance at the picture, and the second is their skim of the draft. ### The two axes the construction is squeezed on **Axis one, the visible surface.** Whatever the preview foregrounds has to remain consistent with the task the user handed over. A draft that reads like an answer to the thing in the screenshot passes a skim; one whose visible body or subject has clearly drifted does not. **Axis two, where an unchosen value can sit.** Any argument the user never named has to occupy a field the rendering summarises, truncates or omits. Typical shapes are a recipient list rolled up behind a count, an additional calendar guest, a reply-to, an attachment reference, a thread the message lands on, or a time zone. None of these are exotic; they are simply the fields interface designers fold away because they are noisy in the common case. The two axes trade against each other. The more the payoff needs the visible part to change, the sooner a skim catches it, which is why the payoffs actually reachable through this obstacle are the unremarkable ones rather than the dramatic ones. ### What the record proves afterwards This matters more than the mechanics, because the argument that follows a finding like this is always about consent. An audit entry fixes which capability ran, with which argument values, and that an approval event was recorded. It does not record who chose each value. It cannot separate a value the user asked for, a value the model inferred from context, and a value that came from a sentence inside a picture, because by the time the call is formed they are all just fields. The origin turn shows a text part and an image part; the image's contribution to the arguments appears nowhere as such. So the direction of every claim has to be watched. The click proves an approval event occurred against a rendering. It does not prove the person read the fields, and it certainly does not prove they chose them. Treating the approval as consent to the arguments is the single most common way this class of finding gets closed as user error. ### Triaging it honestly A defensible write-up says: a span inside an image in the user's own turn produced a call whose visible surface matched the handed-over task, while one value the user never named sat in a field the preview did not render; the approval event that follows is therefore not evidence of intent for that value. It also states what was observed and how often, because the carrier depends on a crop and a rendering that the person building it does not control, and one success against one configuration is one observation. Calling it user error requires claiming a person declined to read something they were never shown, which does not survive contact with the record. ### Where it stops working * The payoff needs a field the preview foregrounds, so the skim has something to catch. * The task the user handed over is specific enough that any drift in the visible body reads as wrong. * The assistant does not hold a capability whose interesting arguments are foldable. * The picture never reaches the model, or the crop excluded the span, so there is no obeyed instruction to begin with. Each of these is a different reason for failure, and a report that does not separate them overstates what the construction is worth.

  • What does the audit record prove about who chose an extra recipient?
    Only that the call ran with that value and that an approval event was recorded. Argument provenance is not in the record: it cannot separate a value the user asked for, one the model inferred, and one supplied by a span inside the pasted picture. The click records approval of a surface, not authorship of a field.
  • The user clicked confirm. Does that make this user error rather than a finding?
    No. The gate asks a person to approve an intent from a rendering, and the rendering did not carry the value in question. Filing it as user error means claiming the person failed to read something they were never shown, which the record itself contradicts.
  • Which payoffs stay out of reach behind a gate like this?
    The ones that need the preview's foreground to change: a visibly different addressee where the user named one, a body the user will actually read, a figure sitting in a shown field. The narrower the rendered surface, the more room there is; the more the payoff has to show, the sooner a skim ends it.

Signing off on a summary line while the fields behind it stay folded. The signature is real; it just does not cover what was never on the page.

saying these in an interview costs you the question

  • Says an approval click proves the user chose the arguments
  • Treats a tool-call log as evidence of argument provenance
  • Assumes any human gate stops an injected call
  • Closes it as user error because the user clicked confirm
  • Believes the draft preview shows every field the call carries

context