Engineering ⏱️ 5 min read

Verify passed code it never read

TL;DR

🔎 The setup: We pointed Godmode+ at its own source and told it to audit verify, the step that is supposed to prove your code works before the AI says “done.”

👻 The scary find: Verify stamped PASS on brand-new files it never opened. A new file with a glaring error could pass, because it was invisible to the check.

🚨 The twist: It also lied the other way. On Windows, every TypeScript file threw a false red X, because the checker crashed and the crash was read as “broken.”

⚖️ The rule: A verify step must never lie in either direction. Fail what is broken, pass what is clean, and when it cannot check, say so.

The fix: Godmode+ 2.7.2 closes 4 bugs, re-tested 56 / 56, shipped live.

Verify is the part of Godmode+ that proves your code actually works before it lets the AI call a task done. It is the gap between I wrote the code and I watched the code run.

This week we pointed Godmode+ at its own source and told it to audit that very step. It found real bugs in its own verify phase, and the worst one let it pass code it never read.

🔎 What a verify step actually does

In plain terms, verify is a read-through plus a test-drive. It opens the files a task changed, gives them a quick read-through that catches broken code before you run it, and where it can, actually runs the thing to watch it behave.

That job has exactly two ways to fail. It must shout when something is genuinely broken, and it must never fake a pass when it simply could not check.

Verify is a read-through and a test-drive. It has one job and two ways to fail it: never miss a real break, and never fake a pass. When it genuinely cannot check a file, the honest answer is “skip, and here is why,” not a guessed PASS or FAIL.
AN HONEST VERIFY 1 · OPEN THE FILE 2 · READ / RUN IT 3 · WATCH WHAT HAPPENS PASS clean + looked FAIL broke + looked SKIP could not check three honest answers · zero guesses

🪞 We aimed it at its own code

We audit code for a living, so we gave Godmode+ the same treatment we give client work: point it at itself and try to make it lie. Skipping the proving step is the AI's favourite shortcut, which we wrote about in why Claude Code skips the tests.

This was worse. Here the step ran and still lied. It found four real bugs in its own verify phase.

👻

01 · Passed unread files

Verify only checked files git already knew about, so a brand-new file could pass without ever being opened.

🚨

02 · False alarms on Windows

Its TypeScript check crashed on Windows, and the silent crash was reported as broken code on every file.

🔀

03 · Two runs collided

It tracked the current run in one global slot, so running two projects at once let the second overwrite the first.

📌

04 · Old notes blocked forever

Its scan flagged every leftover TODO already in your project, so a big codebase could never come back clean.

👻 The scary one: it passed a file it never opened

To decide what to check, verify asked git which files had changed. That question only returns files git already tracks, the ones you have committed or edited before.

A brand-new file you just created is invisible to that question. So verify would happily stamp PASS on a new file with a glaring syntax error, because it never opened it to look.

[ v2.7.1 · WHAT VERIFY READ ] files git already tracked: login.js → opened, read, PASS signup.js (brand-new) ! syntax error on line 3 verify never opened it PASS FALSE PASS stamped on a file it never read [ v2.7.2 · WHAT IT READS NOW ] edited + staged + brand-new: login.js → opened, PASS signup.js → opened ! syntax error on line 3 → caught FAIL the broken new file FAILS, like it should
The fix makes verify union three lists: the files you edited, the files you staged, and the brand-new ones. Nothing you touched escapes the read-through.

This is the headline bug, and it is the exact shape of a lie. Not a wrong answer, an answer given without looking.

🚨 It lied the other way, too

The same phase had the opposite bug. Its TypeScript check launched the checker in a way Windows refuses, so the checker crashed before it read a single line.

That silent crash got reported as “your code is broken.” Every TypeScript file threw a red X even when the code was perfect, a false alarm dressed up as a finding.

Do

Run the checker the way the project installed it. If a checker is missing, skip that file and state the reason out loud, so nobody mistakes silence for a verdict.

Don't

Read a crashed checker as a failing test. A tool that could not start has told you nothing, not that your code is broken.

So one step could lie in both directions at once: a false pass on the file it skipped, and a false fail on the file it could not run.

⚖️ The one rule: never lie in either direction

Both bugs break the same rule. A verdict you can trust has to fail what is broken and pass what is clean, and when it genuinely cannot check, it has to say so out loud instead of guessing.

Picture a factory inspector who stamps PASS on boxes he never opened, while also rejecting perfectly good boxes because his barcode scanner is unplugged and he reads the blank screen as “defective.” A good inspector opens every box, and when his scanner is broken he writes “could not check this one.” He never guesses PASS or FAIL.

Version 2.7.2 makes that rule real. The TypeScript check now runs through your project's own installed compiler, the JavaScript check runs the code checker directly, and if a checker is not installed at all, verify skips that file with a stated reason instead of inventing a pass or a fail.

Here is that gate as a toy. Flip between the old and new verify, and click any file to break it or clean it. We have written before about forcing an honest verdict out of an AI in the verification run; this is the same fight, one layer down.

click a file to flip it between clean and broken:

    The old column lies in both directions. The new column fails what is broken, passes what is clean, and when it cannot check a file, it says skip and tells you why.

    🐛 The two quieter bugs

    The audit turned up two more that never made headlines but would ruin your afternoon. The first was two runs clobbering each other.

    Godmode+ tracked “the current run” in one global spot, so running it in two projects at once let the second silently overwrite the first's progress. Now each project directory tracks its own run, and it keeps the 50 newest.

    The second was old TODOs blocking forever. Its completeness scan flagged every leftover note already in your codebase, so a big existing project could never come back clean. Now the scan takes a snapshot at the start and only flags new notes you introduce during the task.

    BugThe lie it toldFixed in 2.7.2
    Passed unread filesFalse PASS: a broken new file stamped cleanVerify unions edited, staged, and brand-new files
    TypeScript on WindowsFalse FAIL: a silent crash read as broken codeRuns through the project's own compiler; JavaScript runs the checker directly
    Two runs at onceSilent data loss: the second run overwrote the firstEach project directory tracks its own run (keeps the 50 newest)
    Leftover TODOsPermanent block: old notes could never come back cleanSnapshots at the start; only new notes you add can block

    📦 What shipped in 2.7.2

    A receipt, not a brag. Every bug was reproduced by hand, fixed, and re-tested before the version number moved.

    🧪 reproduce the bug on a scratch project by hand

    🔧 fix the verify phase

    ✅ re-run the fix → tests 56 / 56 green

    📦 ship Godmode+ 2.7.2 live
    MetricValue
    ToolGodmode+, auditing its own runner
    Version2.7.1 → 2.7.2 (bug-fix release)
    Bugs reproduced & fixed4 (plus smaller cleanups)
    Files changed19 (+495 / -138 lines)
    Biggest changethe verify phase (+245 lines)
    Tests after the fix56 / 56 passing
    Verdictshipped live

    A verdict is only worth having if it refuses to lie in your favour. That is the whole point of a verify step: it fails what is broken, passes what is clean, and when it cannot check, it says so. This is the sister fix to the audit of our free skill, same rule, one tier up: prove it live, fix it, prove the fix.

    Run the verify that refuses to lie

    Godmode+ 2.7.2 reads every file you touched, checks through your own tools, and skips with a reason when it cannot, so done means done.

    Get Godmode+ Read the sister audit