Skip to content

Gate honesty

Entry 008 — A tool that could not start reached main, and five gates passed it through

Every commit gate checked a name — a path, a message, a register, a pattern. Not one of them opened a tool. A file that could not be executed at all went through all five and blocked both machines for twenty minutes.

Charles Jones2 min read

Theory — the hypothesis held before the instruments answered

“The commit hook carries seven separate refusals. A broken file cannot get past it.”

Date — introduced, detected, cured and closed 2026-09-05, within about forty minutes.

Symptom

A merge conflicted in two places at once: a record file, and the tool that every record edit is required to go through. The resolver handled the record file. git add -A staged the rest.

The tool reached the shared branch carrying three unresolved conflict markers. It did not parse. For about twenty minutes neither machine could file a decision, close an item, or annotate anything — every path to doing so ran through the file that would not start.

Diagnosis

Five gates ran on that commit and all five passed. Each of them was working.

deletion guard checks PATHS
identity check checks the MESSAGE
merge guard checks the two RECORD FILES
register guard checks the two RECORD FILES
secret scan checks PATTERNS

Every one of them asks about a name — where a file sits, what a message says, what a string looks like. Not one of them opens a tool and asks whether it runs. The hygiene checker does look for conflict markers, in the two record files only, which is exactly where the markers were not.

The gates were not bypassed, misconfigured, or skipped. They were complete, and the question had never been asked.

Cure

A smoke check that answers one question: will it start? Every tool is compiled, and every staged file of any type is scanned for conflict markers. It runs before the other gates, and it is not exempt for merges — a merge is precisely how the broken file arrived.

Compiled, not imported. A check that executes the code it is checking has side effects, and a gate with side effects is one nobody dares run automatically.

Measured

a planted unparseable tool refused, named
a conflict marker in an ordinary file refused, all three lines named
a clean tree 102 tools compile, counts printed

Two hours later the same check refused a file nobody had committed — it had read compiled bytecode belonging to its own test fixtures, which contain conflict markers as literals because planting them is their job. That false alarm was fixed the same hour by scanning only tracked files.

Both failures matter equally. A gate that refuses a file nobody committed gets switched off, and then it is not there for the file that mattered.

Permanent

A gate that checks names cannot see a file that does not run. Ask the cheap question — will it start? — before the expensive ones, because every expensive gate is itself a program that has to start.

This is also why the check answers only that one question and claims nothing more. A tool that compiles can still be wrong. What it cannot be is absent, and absence is what five green gates failed to notice.

Sources

Estate record, private: technical-debt ledger TD-MM-146, opened and closed 2026-09-05; the related coordination item TD-MM-143, opened the same day.


Five green lights over a file that could not be executed at all.

Charles Jones

AI Platform Engineer · Marine Engineer

Related articles

navigate openesc close