The most useful reports aren't the ones asking for new features: they're the ones where someone expected something to work a certain way, and it didn't. This one was a few lines long. A user had given the same tag to two notes, expecting to see them connected, and nothing showed up in the graph.
The instinctive reaction would have been to explain how it works: links come from meaning, tags are something else, they're a filter. Technically correct. But if a reasonable person expects one behavior and the product does another, the mistake is almost always the product's.
What was really happening
The Connections graph looked only at semantic similarity: each note was compared with the others by meaning, and the closest ones were joined by a line. A system that works very well — it's the same idea as search by meaning — but it had a big blind spot: tags weren't part of the calculation.
Which produced the most frustrating situation possible: two notes tagged "podcast" by the same person, with the exact same intent, stayed far apart in the graph because they were about different topics. The user had declared a kinship and the system had ignored it.
A tag is a declaration, not a label
The whole shift in perspective is right here. When you mark two notes the same way you're not describing their content: you're saying "to me, these two things go together". It's valuable information precisely because no algorithm can work it out. Semantic similarity knows what resembles what; only you know what belongs with what.
So from today, two notes that share a tag are connected in the graph — and the two kinds stay distinguishable at a glance: the connections you declared have a solid line, the ones the AI found a dashed line. It's not a cosmetic detail: knowing who decided what is what lets you trust what you're seeing.
Two technical decisions worth making
Tag connections have no threshold. Semantic ones have to pass a minimum level of similarity, otherwise the graph turns into an unreadable web. Tag ones don't: they're explicit, so they always count, whatever density you set the view to. If you said so, it's not my place to second-guess it.
There is a cap, though. A tag used on fifty notes would generate thousands of lines and an unwatchable graph — the classic case where a "correct" feature makes the product worse. So each note connects to the most recent ones that share the tag, and no further. Better a readable, slightly incomplete graph than a perfect but useless cloud.
What we won't do: manual links
It's worth saying where we stop, too. This change does not introduce Obsidian-style manual note-to-note links, and that's not an oversight: people who need them already find them in tools built for that.
The reason is that manual links ask you, every time you write, to remember everything you've already written. That's exactly the work we wanted to free you from. Tags are different in nature: they group things without forcing you to remember. You assign one while the idea is in your head, and the system finds the connection to your past notes.
Why we're telling this story
Because it's how we'd like the product to grow. Not from a planning meeting, but from someone who actually uses the app, expects something sensible, doesn't find it and takes the trouble to write to me.
If you ever catch yourself thinking "but this should work differently" — write to me. The best reports all look like this one: they don't ask for a feature, they describe a broken expectation. And those can be fixed.
