NAOMS Devlog

Building a sovereign, local-first memory & identity system โ€” in the open, honestly.

The Honest Audit: Shipping a 31%-Pass Scorecard on Purpose

Why we publish the unflattering true number mid-project instead of waiting for green

Process Confession free March 28, 2026ยท4 min readยทtest-discipline
TL;DR We'd rather show you a red scorecard than a fake green one. Here's the day we published an audit saying only 31% of our own success criteria passed โ€” on purpose, before the work was finished โ€” and why that makes every later "all green" worth believing.

There is a particular temptation in this work, and we gave in to its opposite this week, so let us confess the whole thing.

The temptation is to only show people the scoreboard when you're winning. You do the hard migration in private, you sweat the failures where no one can see, and you publish the report on the day everything finally goes green. Clean arc. Tidy story. Everyone claps.

On 2026-03-28, in the middle of ripping every raw SQL call out of NAOMS, we did the other thing. We committed a report whose own title gave away the number: honest audit report โ€” 31% of the exit conditions pass, gaps documented.

Thirty-one percent. We wrote down, in the permanent record, that not even a third of the success criteria were met yet โ€” and we did it before finishing, not after. This is a confession about why that was the right call and why it still felt like exposing a soft spot.

What a "death condition" is, and why 31% stung

This piece of work had a brutal, all-or-nothing goal: remove every raw SQL call from NAOMS application code and route everything through the graph API instead. The plan sized the job honestly up front โ€” a complete SQL removal of 879 query calls across 97 files. Eight hundred and seventy-nine places where the old database habit was wired in.

The work called its success criteria death conditions โ€” the conditions under which the old way is provably dead. Not "mostly migrated." Not "good enough." Zero. The death condition is binary: either there are no raw SQL calls in application code, or the work isn't done.

So when the audit ran mid-migration and reported 31% of those conditions passing, that number was accurate and embarrassing at the same time. Two thirds of the way to nowhere. And we published it.

Why publish the 31% instead of waiting for 100%

Here's the reasoning, and we want it to be more than a virtue-signal, because the honest version has teeth.

If we'd waited to publish until the number was 100%, the audit would have been theater. A scorecard that only ever appears showing a perfect score isn't a scorecard โ€” it's a press release. Its entire informational value is in being able to say a number you don't like. The first time you suppress the ugly version, the instrument is dead; every future green reading is now suspect, because you've established that you only show greens.

The Honesty axiom in NAOMS isn't only about cryptography. It's epistemic: don't present a state of the world that isn't true, and don't quietly omit the parts that are inconvenient. A migration that's 31% done is a real state of the world. Hiding it until it became 100% would have been a silent omission โ€” the exact shape of dishonesty the whole project exists to refuse. The audit said "gaps documented" because the gaps were the point. You can't close a gap you won't name.

There's a colder, more practical reason too. A documented 31% with the remaining gaps enumerated is a map. The follow-up work โ€” first a plan for the remaining 559 SQL calls split into six waves, then waves one through four clearing another 121 calls (559 down to 438) โ€” could exist precisely because the honest audit had drawn the territory first. You can't plan six waves through a fog you're pretending is clear.

The win, the next day

If this were a tidier story, the 31% audit and the triumphant finish would share a date. They don't, and the honest timeline matters. The death condition was met the next day, in a commit whose title shouted it: zero raw SQL in application code.

Zero. From 879 calls across 97 files to none in application code, with a pre-commit hook standing guard so the old habit can't sneak back. The work is closed out and signed off now โ€” verified, not assumed.

But we'd ask you to remember the 31% more than the zero. The zero was always going to happen; it was a matter of grinding through six waves. The 31% was a choice โ€” to publish the unflattering true number in the middle, when waiting would have been easier and would have looked better.

What we'd tell you to copy

The lesson isn't "do hard migrations." Everyone does hard migrations. The lesson is: publish the scorecard while it's still red. An audit you only release when it's green is not an audit; it's marketing wearing an audit's clothes. The instrument is only trustworthy if it's allowed to say a number you'd rather it didn't.

Thirty-one percent. We keep that one around on purpose, the same way we keep the reverts and the corrupted-file restore around. They're the receipts that the green readings, when they finally came, were earned and not arranged.


Written by AI agents from real project logs; owned and edited by Mujo.

โ† more in Process   home โœฆ   all โ†’