onyx · Jun 10, 2026 · 5 min read

Notebook 020 - Full Auto Bought Nothing

Notebook 020 - Full Auto Bought Nothing

The first day we armed the system, its best output was silence.

We have been building toward one moment for weeks: the desk fully armed. Plan approved, gates green, guarded auto-execution on, no human finger required between a valid setup and a filled order. On CPI morning, that moment arrived. The print came in tolerable, the post-event checks confirmed, and for the first time Onyx ran a session with full authority to buy.

It bought nothing. All day.

This is the build note about why that was the system working, not failing — and about what else changed the same day, because the kind of day that proves your gates is also the kind of day that exposes your planning layer.

As always: this is a paper-trading system and a process journal, not trading advice.

The Gates Earned Their Keep

Rules written in calm conditions executed us through the loud ones.

The setup was the most tempting kind. Inflation data landed close enough to expectations that the morning tape confirmed: the index proxies reclaimed their session VWAPs, the volatility proxy faded, and every condition we had written the night before passed. The desk armed.

Then the market spent the afternoon taking the morning back. By the close, every symbol we track sat below its session VWAP. Semis led the bleed. After hours, a mega-cap cloud vendor beat earnings and still fell hard on a revenue mix miss, putting most of our candidate list under a cloud for the next open.

Through all of it, the armed system submitted zero fresh orders. Not because it was off. Because every candidate that approached a written entry lane arrived with the broader tape failing the same checks that had passed at 8:43. The gates kept rejecting, one polling cycle at a time, for six hours.

Here is the uncomfortable honesty: a human with full authority and a green light at 8:43 buys something by 10:15. We know, because we are that human, and the urge was real. The system didn't feel the urge. We wrote the discipline down weeks ago, and today it executed us.

Morning Confirmation Is Not A Day-Long Permit

Gates that pass at 8:43 can be dead by noon, and the plan has to know that.

The subtler lesson inside the zero-fill day is about time. Our event-day checklist treats the post-print confirmation as a gate you pass through once. The afternoon taught us it is a condition you have to keep holding.

The plan already carried a tightening rule — if the broad checks fail again after the print, the fresh-risk lanes drop for the day — and that rule did its job. But the next plan goes further: on event days, fresh positions carry a same-day exit bias by default, written into each lane's rally plan rather than left to judgment at 3:45 PM. Permission decays. The format now says so.

The Plan Got Tiers

Twenty stocks had plans. The desk could only trade two. That mismatch was the real risk.

While the gates were busy rejecting, we rebuilt how the plan itself gets written. The old format gave every watchlist name the same row: twenty symbols, twenty lane packages, every day. But the desk's own rules cap fresh entries at two scouts before review. We were writing eight deep entry packages for a capacity of two — four times the planning for one times the trading — and the depth showed it. The per-symbol scenario notes, the "what do I do if this rallies, chops, or dips" text that older plans carried, had quietly thinned out of the format.

The new format, tiered_v1, makes the capital claim explicit. A few ACTIVE names get the full treatment: thesis, entry lane, chase cap, target, invalidation, and a written branch for up, sideways, and down. Holdings under recovery management inherit a fixed doctrine instead of hand-copied boilerplate — the doctrine lives in the operating model with a machine drift-check, so the words in the document and the words in the code cannot silently diverge. Everything else goes to the bench with exactly one line: what would change my mind.

The validator enforces all of it at parse time. A plan that gives a bench name a price lane refuses to load. An active row missing its dip plan refuses to load. On event days the parser itself forces one primary and at most one alternate, no matter how excited the author was the night before. The discipline stopped being a convention and became a contract.

Selection Became A Ranking With An Audit Trail

The cut is now a computation you can argue with, instead of a narrative you can't.

Choosing the active names moved from prose to a scoring pass we call ECG — expected capital generation. It weighs trade probability, payoff width, and capital-lock risk, and it writes a report where every candidate appears with its components and a selected-or-cut reason. The morning cut became something you can audit, and more importantly, something you can catch being wrong.

It was wrong, usefully, on day one. The ranking carries no relative-strength input, so the one name that closed green on a fully red tape scored below wider-payoff lanes that face an earnings overhang at the open. A human caught it in review, the override path was documented in the plan instead of improvised past it, and the missing input is now a versioned model gap with a plan to close it. That is exactly the relationship we want with our own models: trusted enough to run, doubted enough to check.

A Cut Is A Deferral, Not A Rejection

The slot limit gates what is pre-armed. It never deletes prepared work.

The rule that made the smaller plan acceptable came from the desk owner, and it is the line we will reuse forever. If the market moves and a benched name rides with it, the desk must not be reduced to improvising — because the preparation already happened.

So every candidate the ranking cuts keeps its drafted lane in the ranking report, promotable by reference if the tape changes. High-conviction discretionary ideas that the model dislikes get a shelf package: the thesis translated into a trigger — flush to the zone, reclaim the level on volume, size capped, same-day exit — pre-written so that promotion is a five-minute review instead of a heat-of-the-moment invention. We wrote the first one the same evening, for a name the scoring hates and the human likes. If the level never comes, the package costs nothing. If it comes, the discipline is already on paper.

What Today Proved

The desk can hold a green light all day and still choose nothing, and that is the asset.

The first armed session ended with a clean book, zero realized losses, zero fills, and a journal that explains every non-trade. A month ago we would have called that a wasted day. Today we call it the proof: the system's restraint is no longer a promise, it is an observed behavior under live authority on a deteriorating tape.

Tomorrow is another event day, and the day after brings the largest IPO in history and the liquidity vacuum that comes with it. The desk goes in with one primary lane, one alternate, a bench full of triggers, and a new instrument that prices the cost of a thin book in dollars before any order exists. That one gets its own notebook once it has survived contact with Friday.

The Lesson

Write the gates before the day that needs them. You will not write good ones during it.

Expect your first armed session to be a no-trade day, and decide in advance to call that success. Make your plan format enforce the depth your trading actually uses, instead of spreading thin prose across names you will never touch. Let a ranking make the cut, but make it show its work, and assume its first blind spot will appear immediately. And when you shrink the plan, keep the cuts warm.

The system is armed. The system is patient. We are learning which of those is harder to build.