Adovo

Applied AI

A retried LangGraph subgraph may use an earlier human answer

Protect human-in-the-loop agent flows when a retry asks again but resumes with a stale value.

October 29, 2026

A graph asks a person for an amount, calls a service, and retries after a transient failure. The retry asks again; the person answers 7, but the final result still carries the earlier answer 5. That is the behavior in a specific LangGraph subgraph reproduction on 1.2.18. A system that only checks whether the run completed could record a decision the user did not just approve.

Keep each answer tied to its attempt

Persist an attempt identifier, prompt, answer, and checkpoint/run identifier in the business record. Before acting on the answer, compare the value in final graph state with the latest answer accepted by the user for that attempt. If they disagree, stop and surface a recoverable error. Do not silently assume the latest prompt means the latest value won. This is particularly important when a tool call can charge, delete, approve, or update customer data.

Exercise the failure then resume path

The issue uses interrupt, RetryPolicy, a compiled child graph, and a service that fails once. Reproduce with the versions and checkpoint configuration in your environment. Assert both that the second prompt appears and that the final state contains the second response. The LangGraph interrupt guide explains the normal resume mechanism; test the retry interaction separately because the reported problem sits at that boundary.

Design the safe fallback

If the exact pattern reproduces, route the affected operation to a manual review or a simpler flow whose answer binding you have verified. Avoid papering over the mismatch by retrying repeatedly: that may create more prompts and more ambiguous state. Track the upstream issue and retest after any runtime change. A support ticket should include the smallest graph, the two answers, and the resulting state, without exposing real customer input.

Adovo’s view

Human approval has value only when the system uses the answer the human gave. In a retried workflow, link every prompt to one attempt and verify that the committed state belongs to it. A completed run with the wrong answer is a failed control.

Continue exploring

Applied AI

LangGraphAgent Workflows

A deferred LangGraph join can run before all branches finish

A deferred join is not a substitute for proving branch completion. Reproduce scheduling behavior and make aggregation safe to rerun.

Read more

Applied AI

LangGraphStreaming

A LangGraph stream can finish while its final summary is unread

Verify final transformer output when consuming LangGraph v3 streams through interleave instead of assuming an empty iterator means completion.

Read more

Applied AI

LangGraphAI Agents

A resumed agent returns the subgraph’s previous result

A LangGraph subgraph can reuse an earlier result after a static breakpoint in a reported configuration. Prove checkpoint boundaries with a two-pass test.

Read more
Explore applied AI services →