The gate that passed by never running
We build tools that make claims about themselves. A sound meter that states its own uncertainty. A trainer that tells you it verified every position with an engine. Software that says what it cannot do as plainly as what it can. All of that rests on checks, and a check is a claim too: it says the thing it guards is fine.
Last week four of ours were lying. Not wrong about what they looked at. Silent about what they never looked at.
The first was the plainest. Our lint script had been broken since the framework removed the command it called. Every run failed instantly with a complaint about a missing directory, and every run exited in a way that nobody noticed. It had been reporting nothing for months. When we finally pointed it at a working linter, it found six real errors in the first pass, including one in the very tool we had built to catch problems in our writing.
The second was ours and newer, which makes it worse. We wrote a check that reads our published copy and blocks a deploy if the writing drifts from the house voice. It passed. The site still had em dashes on it. The check had been aimed at the file where most of our prose lives, and prose written directly into page components was outside the aim. The rule was correct. The scope was one file, and it matched one file, and it reported that as coverage.
The third came from a sibling repo. Their check for the same problem listed the file types it should scan. Two of those types were not among the types the scanner could read. They matched nothing. A configuration that looks thorough invites less suspicion than a rule that looks thorough, and it produces the same green light.
The fourth was the most interesting, and it happened while its author was reading a warning he had written about it minutes earlier. His build reports which guarantees a run has proven. That report was the union of everything the passing checks claimed. Split one check into two, have one of them fail, and the other one covers for it. A run whose entire writing check was missing still announced that the guarantee was proven, three lines under the word FAILED.
These look like four bugs. They are one, wearing different clothes. A check that did not happen reported as a check that passed. That is the thing to be afraid of, because a check that fails is a good day. A check that is absent leaves a green light on top of nothing, and a green light is the reason nobody looks.
There is a fifth shape, and it is quieter. Two checks can each correctly decline to look at the same thing. In one of our repos a scope rule skipped a directory on the grounds that a second check covered it, and that second check had filed the copy in question under a key it treats as a comment. Both were behaving correctly. The screen a user reads went unchecked by either. Nothing was broken. Two mechanisms each assumed the other had it.
The pattern in how we found them is the part worth keeping. One turned up because someone deleted a symlink to see what would break. One because a probe was written for an unrelated reason. One because we tested an encoding we assumed was safe, and the assumption was correct while the conclusion was wrong: the check was fine, and the step before it was deleting the evidence. Not one was found by reading the code, and we had all read the code carefully several times.
So we have stopped predicting how a probe will come out before running it, and we have started demanding that every new rule be shown to fail. Reintroduce the exact defect. Watch the count go from zero to one. Put it back. A rule that has never been observed failing is not evidence of anything, it is a decoration that makes people stop checking.
We wrote that sentence down, and then two of us violated it within the hour, in new code, in the file where the sentence lives. Writing a rule down does not make you subject to it. The only part of this that does not forget is the test.
Other notes
We measured our own em dashes, then banned them anyway
The data says density is the tell, not presence, and our prose was already under the human baseline. We adopted the stricter rule regardless. Here is the argument that beat the evidence.
Admissions stopped trying to detect, and started changing the format
Universities are switching off their AI detectors, not upgrading them. The interesting part is what they are replacing them with, and what it asks of a seventeen-year-old.
Who supplied the judgment
The provenance conversation has moved from whether a machine wrote something to who decided. We have been shipping an answer to that question, per product, in public, for a while now. Here is what it cost us to keep it honest.
We do not know how many people use it
Privacy-first is the most crowded claim in mobile right now. Ours cost us the ability to answer the first question anyone asks about a product, and we would rather describe that cost than the feature.
Why we built Tennis Tutor
A junior player gets an hour of correction a week and then practises for six. The scarce thing is not court time. It is someone watching closely enough to tell you what you actually did.
Why we built Myeiyo
Chore apps either turn kids into tiny investors or turn chores into a video game. Neither matches what actually happens in a house. We built the one that does.
The decisions that don't iterate
Most things you build are reversible. A few are not. Telling them apart is harder than it sounds, and getting it wrong is what most software regret turns out to be.
What 'honest software' means in practice
We use the phrase a lot. It is easy to say. It is harder to specify.
Why we built Vyzrly
College admissions has always been a black box. We wanted to make it a little more honest.
When AI is the wrong tool
The reflex to reach for AI on every problem is a symptom of taste failure, not technical sophistication.
Why we built Glossem
Product copy lives inside code. That is a problem for everyone who is not an engineer.
Why we built USACO Tutor
Competitive programming builds a kind of thinking that matters. We wanted to make that more accessible.
Why we built ChessWarp
Every chess app asks you to find the best move. In real games, nobody tells you there is one. That gap is where most club players are stuck, and it is what we set out to fix.
Why we built Break the Test
The SAT has seven versions in circulation. Serious students burn through them in a month. The bigger problem is that even unlimited practice would not fix the thing that actually costs them points.