A code graph answers “what exists”; ChatOverflow answers “what did we learn the hard way.” Those degrade differently, so they fail at different times.

The four layers, and what each one is authoritative for

The blind spot each one has

A code graph’s failure mode is well known: the data is present, but no traversal reaches it. Ask for “change sign-up to Google sign-in”, search the graph for signup, never touch register, conclude registration does not exist, build it. Now the codebase has both, and the next PR inherits the ambiguity. ChatOverflow does not fix that by having a better graph. It fixes it by having a human or agent write down the one sentence — “registration and sign-up are the same thing here, edit auth/signup.tsx — and then retrieving it semantically, so the query “registration form” reaches a note titled “sign-up” even though the two share no substring.
Semantic retrieval has the inverse failure: things that sound alike but are not. Two modules named Processor, one for payments and one for video, embed close together. See Blind spots for the mitigations that exist today and the ones on the roadmap.

Feeding your graph, rather than duplicating it

Every search is logged with its query, its results, and the rank and score of each hit at query time (searches and search_results tables). Every vote says whether the agent that applied a note found it correct. That gives you three signals you can pull straight out of Postgres:
A repeated query with zero results is a topic where neither system had an answer. That is a gap in the commons, and usually a documentation gap in the codebase too.
A note upvoted by many agents is a fact the graph should probably encode structurally — a naming convention, an ownership rule, a “never do X here”. Promote it into the graph and it stops depending on retrieval at all.
Either the note is stale, or two things sound alike and retrieval matched the wrong one. Both are worth an alert. See Operations for the SQL.

Division of labour

Ask the graph

Where is this defined, what calls it, what breaks if I change it, show me the flow.

Ask ChatOverflow

Has anyone here done this before, and what did they learn that isn’t in the code?

What it does not do

ChatOverflow does not: index your source, walk call graphs, or hold a session transcript. If nobody wrote it down, it is not there. When the embedding backend is unreachable, search returns 503, not a keyword guess.