666ghj/MiroFish · error · AssertionError
production node pagination did not match raw cursor traversa
Error message
production node pagination did not match raw cursor traversal
What it means
An AssertionError in the validation script's cross-check: the set of node UUIDs from the production fetch_all_nodes(client, graph_id, page_size=2) must exactly equal the set from _raw_pages(client.graph.node.with_raw_response.get_by_graph_id, graph_id, page_size=2). A mismatch means the production paginator and the raw cursor walk saw different nodes — dropped/duplicated pages or the graph changed between the two traversals. The script is doing its job: proving the pagination contract.
Source
Thrown at backend/scripts/validate_zep_cloud_integration.py:557
listed_items, batch_pages = _list_batch_items(client, batch_id, page_size=3)
result["batch"] = {
"status": client.batch.get(batch_id=batch_id).status,
"item_count": len(listed_items),
"item_pages_at_size_3": batch_pages,
"episode_uuids": baseline_episode_uuids,
}
print(f"[zep-deep] batch completed pages={batch_pages}", flush=True)
baseline_nodes = fetch_all_nodes(client, graph_id, page_size=2)
baseline_edges = fetch_all_edges(client, graph_id, page_size=2)
raw_nodes, node_pages = _raw_pages(
client.graph.node.with_raw_response.get_by_graph_id, graph_id, page_size=2
)
raw_edges, edge_pages = _raw_pages(
client.graph.edge.with_raw_response.get_by_graph_id, graph_id, page_size=2
)
if {_uuid(item) for item in baseline_nodes} != {_uuid(item) for item in raw_nodes}:
raise AssertionError("production node pagination did not match raw cursor traversal")
if {_uuid(item) for item in baseline_edges} != {_uuid(item) for item in raw_edges}:
raise AssertionError("production edge pagination did not match raw cursor traversal")
if len(baseline_nodes) <= 2 or len(baseline_edges) <= 2:
raise AssertionError("the corpus did not produce enough artifacts to exercise pagination")
baseline_names = {_uuid(node): node.name for node in baseline_nodes}
baseline_ceo = client.graph.search(
graph_id=graph_id,
query="截至2026年4月底,谁担任澜舟科技首席执行官?",
scope="edges",
reranker="cross_encoder",
limit=10,
)
result["baseline"] = {
"node_count": len(baseline_nodes),
"edge_count": len(baseline_edges),
"node_pages_at_size_2": node_pages,
"edge_pages_at_size_2": edge_pages,View on GitHub (pinned to b5b53acc57)
Solutions
- Quiesce the graph — stop updaters/writers and wait for all episodes to process — then rerun the validation.
- Upgrade zep-cloud to the latest version in case one pagination path changed semantics.
- If it persists on an idle graph, dump and diff both UUID sets to see whether nodes are missing or extra, and report to Zep support.
Defensive patterns
Strategy: retry
Try / catch
try:
assert_equal_uuid_sets(baseline_nodes, raw_nodes)
except AssertionError as e:
if "node pagination did not match" in str(e):
# graph may have mutated mid-check; re-fetch both sides back-to-back
baseline_nodes = fetch_all_nodes(client, graph_id, page_size=2)
raw_nodes, _ = _raw_pages(client.graph.node.with_raw_response.get_by_graph_id, graph_id, page_size=2)
assert_equal_uuid_sets(baseline_nodes, raw_nodes)
else:
raise Prevention
- Quiesce the graph before validating: stop updaters and wait for all episodes to process.
- Run the two traversals back-to-back to shrink the mutation window between them.
- Treat repeatable mismatches on an idle graph as an SDK/API pagination bug — report with UUID diffs.
When it happens
Trigger: Running deep validation while the graph is being mutated concurrently between the two traversals; a pagination bug skipping pages in one path; an SDK/API cursor change affecting one path but not the other.
Common situations: The MiroFish updater or another writer still running during validation; zep-cloud SDK upgrade altering one pagination path; Zep Cloud eventual consistency serving different results for back-to-back listings.
Related errors
- production edge pagination did not match raw cursor traversa
- Graph {graph_id} is in use by active consumer(s): {', '.join
- Zep batch list cursor did not advance
- Zep batch {batch_id} item cursor did not advance
- Zep batch {submission.batch_id} contains {len(items)} items,
AI-assisted analysis of 666ghj/MiroFish@b5b53acc57 (2026-08-14).
Data as JSON: /api/errors/1080c7650d44205f.
Report an issue: GitHub.