Q3: Ghost (ideas)

· Zi Wang · 2 min read

  1. Research searches the internet. Nothing searches me. I have 153 posts and 19 captures, and the system can't cite a word of them.

The ResearchRetrieval interface is already swappable—that seam exists for exactly this. Add pgvector, embed the revisions, post bodies, and artifact payloads, then register an internal backend behind the same interface. Everything downstream holds: internal sources get real /@handle/post/slug URLs, and citation validation, anti-fabrication checks, and server-generated IDs keep working untouched.

The payoff is large. Reflect stops re-deriving what I concluded in March. Debate can quote my old positions back at me. Research can tell the difference between new to the world and new to me.

  1. Let artifacts become inputs, and the graph turns on.

When a Debate resolves, it should emit edges: this capture contradicts that one, this reflection supersedes an earlier assumption, this conclusion supports another claim. Every edge carries a required explanation.

Once the edges exist, "What have I changed my mind about?" and "Which assumption do I keep making?" stop being feelings and become queries.

That's not another feature. It's a different product.

  1. Keep the edit signal I'm already generating.

Capture-generated posts are drafts, and drafts get edited. The gap between what the model wrote and what I kept is a clean usefulness signal—no ratings, no thumbs, no extra prompt.

Phase 2 starts producing that gap the moment drafts land in Studio. If I don't record the edits, I throw it away. human_corrections = 0 today only because the workflow hasn't fired yet—which is exactly why now is the time to instrument it. Evaluation data takes months to pool. Start now, even if I don't touch it for six.

  1. Choose the model before I spend.

Today: one model, one attempt, no fallback. That's the right call for spending safety and I won't weaken it.

But depth should vary. A grocery-list note and a decision I've agonized over get identical treatment right now. I wouldn't add a fallback chain—I'd classify the source before beginAttempt, still inside the free pre-spend region, and pick the tier there. Still one attempt. Just one chosen well. Every at-most-once invariant survives.