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.