One line: once documents are landing in Supabase, the job is no longer “more pipeline.” The job is answers with receipts — or an honest miss.

We hit a familiar private-AI wall: intake worked. The corpus started filling. Full-text search existed. Daily ingest was wired. And still the useful question was not “what graph should we build?” It was:

How do we get good conclusions out?

This post documents that pivot for a Bob-owned Supabase research library used by a private research assistant (Roxy). No credentials, no client content, no schema dump — just the product lesson and the multi-model advice we collected before spending another week on structure.

What “good data in” looked like

Operational snapshot as of August 11, 2026 (agent-reported, not a fresh independent probe in this writeup):

LayerState
HostBob-owned Supabase Pro · schema v1 · FTS previously smoked
Corpus28 full-text research newsletters from a real mail path
Ingest discipline105 attempts · 28 inserted · 56 deduped · 21 empty skips
AutomationDaily library ingest scheduled; separate human HTML digest also exists
Still openBob-felt proof of cited answers + honest “not in library” misses

That is a real library start. It is also a trap: empty shelves force honesty; half-full shelves invite architecture hobbies.

The wrong next move

We already had a thoughtful design for relationship extraction and a citation-backed knowledge layer: entities, aliases, proposed edges, evidence rows, temporal validity, access tiers, acceptance tests. Relational-first Postgres. No premature Neo4j. Sensible long-term engineering.

James rejected it as the near-term product axis. Correctly.

A knowledge graph is a way to organize evidence later. It is not how Bob first feels the librarian working. Building edges before cited answers is structure cosplay.

The right product definition

Four frontier/local-ish reviewers agreed on the reframe (Opus 5, Gemini 3.1 Pro Preview, Kimi K2.6, DeepSeek V4 Pro):

Missing product = answers with receipts — on demand first, on a schedule later.

A trusted “conclusion” for research work is not Roxy’s opinion. It is:

verbatim claim
+ who said it
+ when
+ link / citation into the library
…or: “not in your library”

That collapses a false gate. “Prove cite + honest-miss” is not a checkbox before conclusions work. It is the minimum conclusions product.

Interaction preference locked for this library: ask (pull). Bob asks. Roxy answers from the corpus. Push digests are optional after pull feels trustworthy.

Ranked ways to get value out

# Surface Why it earns its keep Risk
1 Cited Q&A (quote-or-refuse) Matches “ask.” Lowest build cost. Highest trust test: click the citation. Medium if synthesis is loose; low if quotes are hard
2 Weekly sourced digest Habit surface. Every bullet linked. Bob feels the library without querying. Low if bullets stay claim-linked
3 Flat claim ledger Table of verbatim claims + author + date + doc. Backbone for everything fancier. Low if claims stay literal
4 Contradiction report “Author A said X; Author B said not-X.” High signal for competing research feeds. Medium if forced; low once ledger exists
5 Topic coverage map Honesty instrument: what the shelf covers and ignores. Low
6 Watchlist alerts Only after Bob names entities/topics worth watching. Medium noise

What reviewers agreed to never build next

Precompute vs ask-time

The cheap split that kept surviving review:

WhenStore / doDo not
At ingest Source metadata, short summary, 3–7 verbatim claim sentences, flat entity mentions Opinions, edges-as-truth, investment takes
At ask-time Retrieve, rank, assemble citations, refuse when absent Silently promote query-time guesses into the permanent store
Shape rule: never store synthesized text in the same shape as source text. Bob must be able to tell a quote from a paraphrase.

A two-session shape (still a plan)

  1. Session 1 — ask. Bob asks a few real questions against the live corpus. Success is not “the model sounded smart.” Success is: he clicks a citation and the quote is exactly right — or the miss is honest.
  2. Session 2 — optional push. Only after pull works: backfill a claim ledger and try one Monday digest where every bullet has a receipt. Success is Bob using an item unprompted, not another green infrastructure check.

Where the graph work goes

Not in the trash. Parked. Relationship mapping remains a later layer over durable claims and mentions — after cited answers are boringly trustworthy. Postgres stays the store. Recursive SQL is enough for a long time. A separate graph database is a measured-need decision, not a brand decision.

Open questions we did not fake-resolve

Practical takeaway

If your Supabase research library is filling and you feel no value:

  1. Stop expanding the ontology.
  2. Make the assistant answer from the shelf with hard citations.
  3. Make refusal a feature.
  4. Only then precompute verbatim claims so digests and disagreements become cheap.
  5. Treat graphs, sentiment, and “AI conclusions” as late privileges earned by receipts.

Data in is plumbing. Value out is a librarian who can show you the page — or admit the page is not there.