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

  1. Confirm every baseline episode reached processed=True before the fetch step — edges appear asynchronously after node extraction.
  2. Enlarge BASELINE_EPISODES or make the fixture text richer in named entities and relationships so extraction yields >2 nodes and >2 edges.
  3. 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

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


AI-assisted analysis of 666ghj/MiroFish@b5b53acc57 (2026-08-14). Data as JSON: /api/errors/5f81bae23268df94. Report an issue: GitHub.