A Second Check, Always
Essay · September 2, 2026 · 10 min read
One model doing the work and an independent mechanism checking it is the single most reliable pattern I know for production AI. Here is how to build it.
Long-form essays, shorter posts, and quicknotes. Everything is in the archive andsearchable. New essays go out byRSS.
Essay · September 2, 2026 · 10 min read
One model doing the work and an independent mechanism checking it is the single most reliable pattern I know for production AI. Here is how to build it.
Essay · September 2, 2026 · 12 min read
Why the most important design decision in a production AI system is deciding when the model is not allowed to answer, and how to engineer that refusal.
July 30, 2026 · 6 min read
Reading the Kimi K3 technical report from the seat of someone who builds agentic systems that have to run on Monday morning: the decisions were made by kernels, caches, and harnesses, not loss curves.
May 9, 2026 · 3 min read
Anthropic's agent templates for regulated industries matter less for the customer logos than for the orchestration topology underneath: lazy-loaded skills, governed connectors, and isolated subagents.
April 22, 2026 · 7 min read
An honest read of Moonshot's Kimi K2.6 from someone building production agentic systems: why the open weights matter more than the leaderboard, and where it still falls short.
June 19, 2025 · 4 min read
What two controversial papers, The Illusion of Thinking and its rebuttal, taught us about measuring machine reasoning: many AI failures are benchmark design failures.
March 20, 2024 · 1 min read
When to keep humans in the loop and when to ship fully autonomous agentic systems.
March 15, 2024 · 1 min read
Common ways RAG systems fail in week 2, and how to avoid them with evaluation and observability.
When matching a bank transaction to an open invoice, no single signal is reliable on its own. Vector similarity on the description catches paraphrases but is fooled by boilerplate. Semantic matching handles meaning but not identifiers. Counterparty identity is precise when present and useless when the payer name is truncated or misspelled.
The fix that held up in production was to run all three as separate ranked lists and fuse them with Reciprocal Rank Fusion: each candidate scores the sum of one over its rank in each list, plus a smoothing constant. A candidate that ranks well everywhere wins. A candidate that ranks first in one method and nowhere in the others does not, which is exactly the behavior you want when the methods fail differently.
Two practical notes. Normalize currencies before you rank, or cross-currency payments will never fuse. And treat disagreement between the lists as a confidence signal in its own right: when the fused top result is not clearly ahead, route the match to a human instead of guessing.