0048 — Asking Smith about a decision is a deferral, and the answer still lands on the raiser's row

The problem

Gera, 2026-10-08: "sometimes I have more like follow-ups — it'll tell me to do something but I don't know exactly how to do it, so I want to be able to start the conversation [with Agent Smith about that specific question]… whenever we are done with the verdict, the session that was asking should be able to see when we're done and then pick up."

A decision on /agents had two ways out: answer it, or pick a standing answer (I'm not sure — go find out, and since agentflow #313 Take it to the engineering bridge). Both are answers. Each one resolves the row and wakes the raiser. Gera had no way to say "not yet, let me talk this through first". The obvious build, a third standing option, would have been wrong for the same reason: the raiser would wake to a non-answer and the row would close.

Options considered

The decision

  1. Asking writes nothing. The control on an open decision (open, unsettled, waitingOnHuman) copies a paste-ready message and opens Gera's DM with the Agent Smith app. Gera pastes and sends it, and Smith acts on every human message in its own DM. The block stays open, and the raiser keeps waiting on the path it already has: blocked check, the 600s sweep, and the per-row Temporal driver.
  2. The message opens with the literal Decision <id>. Smith's prompt keys on it: the DM is Gera asking for help with one decision, not answering it.
  3. The answer lands on the raiser's row, never anywhere new. When Gera states a verdict, one of two things records it, and the raiser wakes through the existing answer path. There is no new polling.
    • Gera picks it on /agents himself.
    • Or Smith runs the line the message carries: blocked resolve <id> --sid <raiser-sid> [--qid <q>] --answered --choice '<their words>' --by <decider>, where <decider> is whoever sent the DM (any admin can use the control, so it is never assumed to be Gera). That is the argv Smith's own decision-block driver already uses. --sid is not optional, because blocked reads the row from the caller's ledger directory. --answered is not optional either, because resolve refuses without a reason.
  4. No marker in part 1. The page does not show "asked Smith". If a marker is wanted later, it needs its own field, never waiting_on.

Consequences