How do you test a relevance filter you just built?

THE SHORT ANSWER

Read what it threw away, not what it kept. A filter's keep list is selected to look correct and always does, because it is a list of plausible items; the errors are in the discard pile. My own filter over 45 sources was wrong three times before it was right: version one dropped 'How Included Health Built Federated Healthcare Agents with LangGraph' at a score of 2 while keeping 'When Inbound Sells Itself' at 3, because it weighted a title the same as a summary. Version two scored a post about Codex at zero, because the vocabulary was built from concepts and held no proper nouns. A related audit flagged GitHub as a coverage gap because it counted posts rather than mentions per post. All three were proxy errors, and none were visible in the output.

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.

TitleScoreVerdict
How Included Health Built Federated Healthcare Agents with LangGraph2dropped
When Inbound Sells Itself3kept

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.

CompanyPostsMentionsPer post
Miro35016.7
Airtable810012.5
GitHub451413.1
Loom7131.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.

THE LONG VERSION

RELATED ANSWERS

Last reviewed 2026-09-20 · 3 min read