Adovo

Applied AI

LangGraph async store can miss a numeric key it just wrote

Normalize memory keys at the boundary and read back through the same async path.

November 1, 2026

Agent memory failures are dangerous when they look like ordinary forgetfulness. A LangGraph issue reproduces an async batched store write with a numeric key followed by a miss when reading with the same numeric key. The narrow case is aput(namespace, 42) then aget(namespace, 42). It does not show that string-key stores or all persistence backends fail.

Identify the key contract

Inspect every call site that constructs a store namespace and key. LangGraph’s store guidance presents namespaces and item keys as deliberate identifiers. Define one canonical string representation for user, account or document IDs; do not let one caller pass an integer while another serializes it to text.

Test read-after-write symmetry

In staging, write and read with a string key, numeric key and a key with leading zeros. Compare async batched and direct store paths on the exact installed version. Verify the returned item ID, namespace and value, not merely that the write call completed. Keep customer identifiers out of test logs.

Contain missing-memory behavior

If the issue reproduces, normalize before both aput and aget and add a boundary test. If existing records were stored under mixed key forms, plan a careful read and migration strategy so a new normalization rule does not orphan them. Log a missing-memory signal separately from an empty but valid result.

Adovo’s view

Memory is an identity system before it is an AI feature. If two paths disagree on the key, a fluent response can conceal a broken retrieval contract. Make identity normalization explicit and observable.

Continue exploring

Applied AI

LangGraphPostgresStore

LangGraph PostgresStore short TTL expires after a read

Protect agent memory when a read refreshes a short PostgresStore TTL.

Read more

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
Explore applied AI services →