Skip to content

Graph traversal filters superseded nodes; the graph is demoted until edges exist

Status: accepted (2026-07-06), implementation pending

graph_traverse.sql had no status predicate, and the only automatically created edges are supersedes edges — so graph expansion in build_context (include_graph=True default) could only reach superseded ancestors and injected them into prompts unlabeled, reintroducing exactly the stale facts supersession hides. Decision: (a) traversal excludes superseded nodes unless the caller opts in, and opted-in superseded nodes are labeled in rendered context; (b) include_graph defaults to False and the relation APIs are treated as experimental until a real producer creates semantic edges (candidates: linking facts extracted from the same exchange, chunk siblings in record_long_input). Rejected alternative: wiring auto-edge creation immediately — it adds write-path cost and a new correctness surface to make a feature non-dead, instead of designing edge production deliberately.