Read the drop list. The keep list is designed to look right, and it will.
That is the whole method, and I arrived at it by being wrong three times in one day on a filter over 45 sources.
Bug one: a title is not a sentence
Version one weighted every keyword equally, wherever it appeared.
| Title | Score | Verdict |
|---|---|---|
| How Included Health Built Federated Healthcare Agents with LangGraph | 2 | dropped |
| When Inbound Sells Itself | 3 | kept |
The first is enterprise agents in production, which is the center of what I write about. The second is a good post about demand generation I would not have opened. One point apart, in the wrong direction.
Fix: title matches count double, and the vocabulary splits into core terms that carry weight alone and supporting terms that only corroborate.
Bug two: no proper nouns
Version two scored "How to Use Codex for Work: My Complete System at OpenAI" at zero. No vocabulary match at all.
Because Codex was not in the list. Nor Claude Code, Cursor, LangGraph, or subagents. I had built the vocabulary out of concepts, which is what I think I write about, and left out every proper noun, which is what I actually name. My own posts have those tools in their titles.
Bug three: post count is not interest
A separate audit, meant to find companies I write about but do not follow, flagged GitHub as a gap. GitHub appears in 45 of my posts. It also flagged Loom, Mixpanel, and Weaviate.
All four wrong, all in the same way: they appear constantly because agent blueprints list them as data sources.
| Company | Posts | Mentions | Per post |
|---|---|---|---|
| Miro | 3 | 50 | 16.7 |
| Airtable | 8 | 100 | 12.5 |
| GitHub | 45 | 141 | 3.1 |
| Loom | 7 | 13 | 1.9 |
Density separates a subject from a tool.
What they have in common
None were logic errors. Every version ran correctly and produced a clean list of plausible titles.
They were proxy errors: a measurable stand-in for the real quantity, close enough to survive a glance, failing in a direction the output could not show. And they lasted because the output always looked fine, which is what a keep list does.
So the filter now prints a drop count per source and has a verbose mode listing every rejection with its score. Clean by default, inspectable on demand.
Two rules I would carry to any filter. Corrections go into the shared vocabulary rather than per-source special cases, so the thing stays tied to a definition something else validates. And the threshold gets written down as unprincipled while that is still obvious, before it calcifies into a number nobody questions. Mine is 4, tuned against one real week, and it will need revisiting.
The one thing to do this week: take any filter, ranking, or triage rule you run, in code or in your head, and look at what it threw away.