The review queue went from ten suggestions to three. That's the payoff. The setup is a special kind of embarrassment, the kind where you turn out to be your own worst screenshot.
Margin reads everything you put into your workspace: notes, tasks, boards, whiteboards. In the background it proposes connections, ideas that belong together, the thread between the note you wrote in March and the task you made yesterday. It's the part of the product meant to feel like the app understands you.
Last week I opened my own queue and found ten suggestions waiting. Eight of them looked like this:
card ↔ card — Your '💧 Before Sleep' cards both describe your nightly water routine.
I keep a weekly meal-plan board. Seven days, each with the same six cards: Pre-Breakfast, Breakfast, Snack, Lunch, Dinner, Before Sleep. The engine had compared Tuesday's dinner card with Thursday's dinner card, two near-identical blocks of text, and proudly announced a discovery. It did this six times. One of them twice.
The math wasn't wrong. That's the uncomfortable part.
Why the math was right and the product was wrong
Every item in your workspace gets an embedding, a numerical fingerprint of its meaning. Close meanings land close together, and the engine hunts for pairs that sit close but aren't linked yet.
Two copies of the same dinner card (🍛 Dinner, chicken and roti and raita) are, mathematically, about as related as two strings of text can be. The engine did exactly what we built it to do.
Recurrence is not discovery. You already know Tuesday's dinner resembles Thursday's; you built the board. Surfacing that as insight is a friend telling you, with real excitement, that your Monday alarm and your Tuesday alarm go off around the same time. A knowledge system earns trust by being worth listening to, which is a steeper bar than being right.
The write-up that reframed it
Around the same time, the engineers at Cerebras published a long account of the internal knowledge base they'd built for their own company: a system fielding fifteen thousand employee questions a day across Slack, wikis, and code. Different scale, same disease. Messy, repetitive, scattered human information that has to be found and joined up.
Three of their findings hit us where we lived.
Don't feed raw text to the math. Embedding raw Slack transcripts performed badly for them, because short filler messages sat deceptively close to real questions and near-identical text produced near-identical fingerprints whether or not anything new was being said. Their fix was to have a language model distill each thread into a small structured card first, what was asked, what was resolved, what systems were involved, and embed that. Accuracy jumped. Our meal-card fiasco was the same failure wearing different clothes.
Never trust a single search method. Their retrieval runs four signals at once: exact-text matching for literal strings, embeddings for paraphrase, rare-word weighting so "sounds good, thanks!" stops outranking substance, and age decay so stale answers lose the tie-breaks. A fusion step rewards results that several methods rank highly on their own. Consensus beats any one opinion.
And cap the loudmouths. After merging, they limit how much any single document can contribute to one answer, so a dense source never gets to monopolize the room.
What we changed
The quick fixes shipped the same day:
- Two items of the same type whose titles normalize to the same string (emoji stripped, dates stripped) are now read as one recurring routine and never offered as a connection. A meal plan is a rhythm, not a revelation.
- A given pair of titles produces one suggestion, once, within a run and across runs. The duplicate row can't crawl back.
- No single item can flood the queue. A dense cluster gets a couple of seats at the table, never the whole table.
- The queue stopped saying "card ↔ card." That label told you nothing, and it quietly hid the fact that the engine was pairing identically-titled cards. Every row now leads with the real names of the two things it wants to join. Honest interfaces debug themselves; if we'd shown the titles from day one, we'd have caught this months sooner.
Then the deeper work, straight from the distillation finding. Margin now reads each substantial item once and writes its own compact understanding of it, a short summary, its topics, the people and projects it touches, and that is what gets fingerprinted instead of the raw text. Recall got the multi-signal treatment too, with exact-text search running beside the semantic search, fused so consensus wins and freshness breaks ties. The final reasoning pass that approves each connection now throws out pairs that are two instances of one routine, and favors links that bridge: a note to a task, an idea to a project, a thought to a person. Trivial content, the two-word cards and the empty checklists, doesn't get fingerprinted at all. The library turns junk away at the door.
Three rows
Same workspace, same data, rebuilt engine. The noise was simply gone.
Two of the three survivors were connections that had always been legitimate. The third I'd never seen: two differently-named items from opposite corners of the workspace that I had genuinely never thought to put together, both titles sitting right there in the row, one line underneath telling me why.
Ten rows I had to triage became three rows I wanted to read.