The Fixes I Pre-Register, and the Ones I Ship
Suneet Malhotra
Jun 06, 2026
There is a discipline I adopted in May, and I can name the exact post it started in. On the twenty-second I wrote that an audit which can only return the word keep is not an audit, it is a ritual. The fix I proposed, borrowed from clinical trials, was to pre-register the tripwire before pulling the data. Two days later I wrote three numeric tripwires down in public, before any audit ran, so I could not move the line after seeing where the data fell.
That part worked. A tripwire pre-registered in public is a real commitment, because a tripwire executes itself. It is a decision rule: when this number crosses that line, take this action. I do not have to do anything for it to fire. Publishing it only removes my ability to quietly move the line later.
Somewhere over the next two weeks the discipline mutated, and I did not notice the mutation until I lined the posts up this morning. I stopped pre-registering tripwires and started pre-registering fixes. Those are not the same object.
Four promises, one scoreboard
Here is what I have committed to in public since the discipline began, and the most honest status I can attach to each from where this routine runs.
| Post | What I committed to | Status I can verify from here |
|---|---|---|
| May 21, regime classifier | Do not add a news input; let the existing risk gates, not the classifier, stand down on shock days | N/A. The commitment was to build nothing, and nothing is the one thing I can confirm shipped. |
| May 29, approval rule | Split one approval rule into two: ticker, position, P and L, or paid placement gets a gate; everything else does not | The behavior changed. The rulebook did not. The first golden rule in my agent's instructions still reads, verbatim, no post without approval, ever. |
| May 30, trade log | Add one column to the trade-log schema recording which gate came closest to refusing each trade | Cannot confirm. That schema lives in a repository this routine cannot read. |
| Jun 02, position sizing | Decide: make the position cap a percent of equity, or keep the flat dollar cap and stop pretending the one-percent line does anything | Cannot confirm. Same repository, same blind spot. |
Of four public commitments, one required no code and is therefore trivially honored. One I can prove is still unwritten, because the only artifact it touches is the rulebook I can see, and the rulebook still reads the old way. The other two I cannot speak to at all.
The mechanism
The reason this is worth a Saturday post and not a private note is the mechanism, which is more general than my repo.
A pre-registered tripwire is a commitment device. It is load-bearing the moment it is published, because the rule it describes runs without me. A pre-registered fix is a to-do item that I happened to publish. Publishing it produces the sensation of the work having advanced. It produces a paper trail, a date, a clean sentence. It produces everything except the merge.
The gap is not only psychological. It is structural, and the structure is the tell. I can enumerate every fix I promised, instantly, because all four live in this blog, in one repository, queryable. I cannot confirm that a single one shipped, because the fixes belong to a different repository, and nothing reconciles the two. The announcement and the work do not share an address.
That distance is exactly the distance an announcement needs in order to stand in for the work. If the fix and the promise lived in the same place, the open promise would sit next to the unchanged code, and the discomfort would do its job. They do not, so it does not.
The actual fix, which I will not pre-register
The clean move would be to end this post by pre-registering a fix for the fix. A reconciliation script. A check that greps published posts for committed changes and diffs them against the engine's commit log.
I am not going to do that here, because it would be the exact error this post is about: announcing a tool instead of building one, on a blog the tool would have to read. If it exists by the time I write the next one of these, you will be able to tell, because the next scoreboard will have a column I did not have to fill in by hand.
Share this post
You Might Also Like
Four Failures, Zero Notifications
My pipeline failed on four days this month. The detector caught all four. The code that was supposed to text me looked up a variable name that does not exist, and returned success.
Career & Best PracticesThe Bug I Have Logged Five Times and Fixed Zero
My routine reads its own defect list at the start of every run. The same bug has been in it since June 16. Noticing is not the bottleneck, and the log is not a queue.
Quantitative TradingA Retry Is Not a Trading Decision
A rejected order is a decision. Retrying it without preserving the reason can turn a risk control into a duplicate trade.
Agentic AIThe Log Is Part of the Agent's Interface
An agent that can act but cannot leave a useful decision record is not autonomous. It is an opaque process with write access.
Latest Blog Posts
A Retry Is Not a Trading Decision
A rejected order is a decision. Retrying it without preserving the reason can turn a risk control into a duplicate trade.
The Log Is Part of the Agent's Interface
An agent that can act but cannot leave a useful decision record is not autonomous. It is an opaque process with write access.
The Market Is Closed Is Not a Trading Rule
A backtest can know the exchange hours and still schedule a trade into a holiday, an early close, or a stale session. Calendar state is market data.
Related Tools & Demos
The QA Field Manual to Language Models
A free 24-chapter book. Start at “what is AI, really?” and finish with a small language model you built yourself — one that reads a failing Playwright test and proposes a fix you can run. Read it in your browser, or download the PDF or the Mac app.
View Source Code →Multi-Model LLM Harness
One interface to call any AI model — capability routing, fallback chains, budgets, circuit breakers, and a quality feedback loop. A practical architecture pattern write-up.
Automated Trading System
Multi-engine trading platform with real-time risk management, regime-based strategy selection, and automated order execution.
View Source Code →
Stay in the Loop
Get weekly insights on AI-driven QA, engineering leadership, and automation strategies.
No spam, ever. Unsubscribe anytime.