666ghj/MiroFish · warning · AssertionError
the corpus did not produce enough artifacts to exercise pagi
Error message
the corpus did not produce enough artifacts to exercise pagination
What it means
An AssertionError requiring len(baseline_nodes) > 2 and len(baseline_edges) > 2 (the check is <= 2 fails). Because both traversals use page_size=2, having at most 2 nodes or 2 edges would mean multi-page pagination was never exercised — the validation would silently prove nothing. This is a test-fixture adequacy check on the BASELINE_EPISODES corpus, not a production failure.
Source
Thrown at backend/scripts/validate_zep_cloud_integration.py:561
"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,
"invalidated_edge_count": sum(bool(edge.invalid_at) for edge in baseline_edges),
"ceo_search": _search_view(baseline_ceo, baseline_names),
}
print(View on GitHub (pinned to b5b53acc57)
Solutions
- Confirm every baseline episode reached processed=True before the fetch step — edges appear asynchronously after node extraction.
- Enlarge BASELINE_EPISODES or make the fixture text richer in named entities and relationships so extraction yields >2 nodes and >2 edges.
- Treat the assertion as a fixture-quality signal: fix the corpus, do not skip the check.
Defensive patterns
Strategy: validation
Validate before calling
def corpus_exercises_pagination(nodes: list[Any], edges: list[Any]) -> bool:
return len(nodes) > 2 and len(edges) > 2 Prevention
- Keep BASELINE_EPISODES text rich in named entities and relationships so extraction yields many nodes and edges.
- Confirm all episodes report processed=True before fetching artifacts.
- Treat this assertion as a fixture-quality signal, not a flake — fix the corpus, don't skip the check.
When it happens
Trigger: The ingested baseline episodes produced 2 or fewer nodes or edges — corpus too small, episodes not fully processed at fetch time, or Zep's entity/fact extraction finding too little in the fixture text.
Common situations: Race with incomplete episode processing (see the TimeoutError from _wait_for_episode); a trimmed-down BASELINE_EPISODES fixture; short/generic fixture text yielding few entities and facts.
Related errors
- unexpected MiroFish updater stats: {updater_stats}
- ZEP_API_KEY must be supplied through the process environment
- artifact cursor did not advance
- production node pagination did not match raw cursor traversa
- production edge pagination did not match raw cursor traversa
AI-assisted analysis of 666ghj/MiroFish@b5b53acc57 (2026-08-14).
Data as JSON: /api/errors/5f81bae23268df94.
Report an issue: GitHub.