"They all retrieve text. That is the single most expensive sentence you can believe about them."
Three Things That All "Retrieve Text"
By the end of this build, three separate retrieval surfaces existed in the same family, and every instinct screamed to merge them:
- The brain's own memory — embeddings over a personal vault and conversation history, used to load the right context into an assistant's system prompt and recall past exchanges.
- The live co-writing path — embeddings over the notes you are working in right now, feeding model completions while you write.
- The corpus engine — deterministic, citable retrieval over a decade of finished, historical writing.
All three take a query and return relevant text. Surely one of them could serve all three jobs?
They're Different Shapes, Not Different Sizes
Look past the interface and the differences are structural. The memory and co-writing paths are judgment-shaped: a model is in the loop by design, they're scoped to a conversation or an active document, and their whole purpose is to feed a language model. The corpus engine is engine-shaped: no model in the path, scoped to a permanent archive, and its purpose is citable results that outlive any conversation. Different lifetimes, different scopes, opposite stances on whether a model belongs inside. Merging them isn't consolidation — it's forcing one to wear the other's constraints.
What Merging Would Actually Cost
Trace it concretely. Fold the corpus engine into the memory system and the engine inherits conversation scoping and a model dependency — goodbye to search that works with the brain down. Fold the co-writing path into the corpus engine and live notes must be permanently ingested and content-addressed just to autocomplete a sentence you're still writing. Each merge takes a surface that was correct for its job and breaks it to fit a neighbor's assumptions. The similarity was always superficial; the constraints were never compatible.
The Boundary Is Written Down, Deliberately
Because this instinct recurs — someone will always propose "why don't we just unify all the retrieval?" — the boundary lives in a table in the architecture doc, not in anyone's head. Which surface owns which corpus, does which job, has which constraints. The table exists specifically so that the next person to have the unify idea reads why it was rejected before spending a month on it. Writing down why you didn't merge is as valuable as documenting what you built.