Research review / frameworks

Framework Watch: An Approval Step That Took Longer Than 15 Seconds Broke Workflow Resume

ADK Python fixed a resume bug on November 3: when a workflow resumed after a human approved a step, and that step then worked for more than 15 seconds, its parallel siblings failed with a replay error. ADK Java 1.14.0, released November 2, adds pause and resume for workflows, but its changelog lists a transfer_to_agent restriction that was reverted before release.

By Sandeep Belgavi · Published 2026-11-03

This week's two ADK changes are about the same moment in an agent workflow: resuming after a person answers.

ADK Python: the replay barrier assumed a fast rerun

A commit merged on November 3, 2026 (pull request #7908) fixes a bug the PR describes like this: "A workflow that resumes after an interrupt fails with Replay divergence detected when the interrupted node, once answered, takes longer than 15 seconds to run again. Approving a step and then making a model call or a deploy in that step is enough to hit it." The reproduction has an approval node that does 16 seconds of work once approved, a report node running in parallel, and a join that waits for both. After approval, the run failed with WorkflowInvariantError: Replay divergence detected: Timed out waiting for sequence key 'report@1' to be unblocked.

The cause is in how resume works. On resume, ADK replays nodes that already finished, in their recorded order, rather than running them again. The interrupted node got a place in that order from its interrupt event, ahead of report, and kept it until its rerun finished. Each replayed sibling waits at a barrier whose default timeout_sec is 15.0 in _replay_sequence_barrier.py, so a rerun longer than 15 seconds timed out every sibling recorded after the interrupt. The fix, in the PR's words: a rerun node whose place "came only from its interrupt now releases that position before it reruns". The rerun produces its result live, so it has nothing to keep in order. Nodes that already have a recorded result, including nested workflows, keep their place. A new test, test_slow_resumed_node_does_not_block_replayed_sibling, covers both resumable and non-resumable apps. The fix is on main and not yet in a tagged release.

ADK Java 1.14.0: pause and resume arrive, one restriction does not

ADK Java 1.14.0, released November 2, adds features in the same area: "pause a workflow for user input", "resume a paused workflow from its session events", "rebuild a workflow's node progress from session events", and a fix to "replay branches and shared runs on resume". It also adds bidirectional conversion between ADK and Spring AI, two Spring Boot chat samples, and ports of the DebugLoggingPlugin and SaveFilesAsArtifactsPlugin from ADK Python.

Read the changelog to the end. Under Bug Fixes it lists "restrict turn-based transfer_to_agent to declared targets" and "restrict live transfer_to_agent to the agent, its sub-agents, parent, and peers". Both also appear under Reverts. The commits show the turn-based restriction landed on October 21 and the live one on October 23, and both were reverted on October 23 with the message "Rolled back due to a breakage." So 1.14.0 does not restrict where a model can transfer control, even though the Bug Fixes list suggests it does. The TransferRejectedException class that the change introduced was removed with the revert.

What remains uncertain. The ADK Python PR does not say how many users hit the timeout, and the 15-second figure is a default that applications may have changed. The revert message does not say what broke or when the transfer restriction will return. We have not run either release.

Analysis: Human approval steps are where long work usually starts: once someone says yes, the agent calls a model, runs a deploy or issues a refund. Any timeout written with replay in mind can fire during that work. At Belgavi's Book Store, Dinky could test the refund workflow by approving a step whose action is deliberately slow, say 30 seconds, while a parallel branch has already finished, and check that the resumed run completes. Teams on ADK Java should not count on the transfer restriction: if a returns agent must never hand a conversation to the payments agent, enforce that in the agent's own instructions and tools, and add a test that fails when a transfer reaches an undeclared target.

Sources and evidence

ADK Python (PR #7908, merged November 3) stops a resumed node whose rerun takes longer than the 15-second default replay barrier from failing its already-finished parallel siblings with a replay-divergence error. ADK Java 1.14.0 (November 2) adds workflow pause and resume from session events and Spring AI conversion, but both transfer_to_agent restrictions listed under its bug fixes were reverted on October 23, so transfers are not restricted in this release.

Views are my own and do not represent any employer, past or present.