The Cure for the Intern Who Never Says "I Don't Know"
You have met this person. Every answer lands with total conviction, right or catastrophically wrong, delivered at the same volume. An auto-tagger works exactly the same way. It is wrong precisely as often as it is overconfident, and it will never once warn you which mode it is in.
A "smart watch band" is genuinely both electronics and apparel. Forcing a confident guess there is not intelligence, it is a coin flip wearing a suit. So taggate does the one thing the intern never does. It admits when it is not sure and passes that item to a human.
It scores confidence as the margin between the top category and the runner-up, not just whether it found a match at all, and anything below the line goes to a person instead of getting silently mislabeled.
Built to Know Its Own Limits
TypeScript, zero runtime dependencies.
• Margin confidence: winning a category 1-to-0 with no competition is not the same as squeaking it 5-to-4, and the score knows the difference. A contested item cannot slip through on one lucky keyword.
• The gate: clears the threshold, auto-tag it. Falls short, hand it to a pluggable reviewer.
• Bring your own brain: the keyword tagger swaps for a real LLM behind the same interface, and the gating logic does not change.
• Bring your own human: the test reviewer swaps for a Slack approval or a ticket queue in production.
The One Decision That Mattered
The whole thing hinges on rejecting the naive signal. Early versions treated any keyword hit as confidence, so a product with one accidental match for the wrong category got auto-tagged with a straight face. Scoring the gap between first and second place, not the raw strength of first place, is the entire reason the ambiguous cases get caught.
And I refused to benchmark it on an easy catalog. 12 products, 4 of them deliberately ambiguous, because a test that never challenges the gate proves nothing about the gate.
The Number
Auto-tag everything and you hit 75%, getting the ambiguous quarter wrong at full confidence every time. Let the gate escalate the hard 42% to a human and it reaches 100%.
8 tests green across Node 18, 20, and 22, plus a typecheck and build that catch dead code before it ever ships.