Where the Human Goes in the Loop
Your workflow writes a supplier contract and stops for the legal team. You wired the stop yourself: a message into a channel, a row in a table, a poll every thirty seconds until somebody sets the column to true. The first real review is not a yes. The lawyer has rewritten the indemnity clause and wants her head of department to see it before anything is signed. Your column holds a boolean. The question you asked was the right question. What is missing is that the pause is a piece of the workflow, and you built it out of parts that are not.
The stop is built into the yard
Picture a sheep yard on sorting day. The flock comes off the field into a funnel and down a narrow chute, single file, and at the end there is a hinged arm and three pens. None of that was improvised this morning. Somebody laid the yard out years ago and decided that the sorting happens here, at this point in the run, with these three ways out. When an animal reaches the arm, everything behind it holds. It is not sent back to the field to be brought in again. It stands where it is until the arm is set.
A human input node is that fixture, declared inside the graph rather than bolted onto the end of it. Execution arrives, and the runtime serializes the state, opens a review request carrying the text to be read and the fields the reviewer is allowed to change, and lets the process go. A worker picks the workflow up when the answer comes and follows the branch that the chosen action names. Approve carries the edited clause on to signature. Escalate sends the case to the manager and leaves the final action unexecuted. Reject is a path of its own, not a failure.
Which is the whole difference between an arm with three ways out and a comment box. The exits are structure, and somebody has to have drawn them.
Not every animal has to be held
How often to stop is a setting, whether or not you chose it. The usual policy has three positions: never ask, ask on every turn, or ask only when the run reaches a stopping condition — a case it cannot close, or a ceiling on how many turns it may take on its own. The middle position is the one nervous teams pick, and it cancels the reason for automating anything, because a person confirming every step is a person doing the work with waiting added. The first is the one confident teams pick, and it is wrong exactly where judgment lives: anything irreversible, anything that leaves the building.
The third is usually the honest answer. A support agent runs to three automatic replies; if the case is still open it asks the supervisor, who supplies the constraint nobody had written down, and the agent gets its turns back and closes the ticket. What happens to that counter is part of the design too. An intervention that does not reset it has bought you one more turn and a second interruption.
Nobody answering is a case as well, not an accident. An animal left standing in the chute is still somebody’s problem, and so is a task suspended for a week. That wants a timeout with an escalation and a cleanup attached to it, rather than one global clock that drops the suspended run and leaves its state somewhere nothing will read again.
The answer has to name the animal
None of this holds if the interruption is a sentence in a chat window. Two reviews are open, both replies say go ahead, and neither one says which. Treat the pause as a typed event on the session protocol and the identity travels with it: which thread, which turn, which request. The client can render it however it likes, a web form or a panel in the editor or a mail with the fields in it, and the turn stays suspended until a response carrying that identity comes back. That is state you can point at, not something remembered by whichever window happened to be open.
Which is also what makes the waiting survivable. The thread persists; the tab does not. Close the browser mid-review and nothing is lost, because the browser was never where the work lived, and reopening it rebuilds the timeline from the events, pause included.
A human in the loop is not an intention. It is a node, and it has to be built like one.