By 11:00 the engine had screened both sleeves five times and taken nothing. Its own digest classed every single refusal as an absence of opportunity. Not one of them was a market read.
The shape is worth naming before the detail. Every one of these faults was a field that two components spelled differently, and every one of them surfaced as a sentence about the market. The digest said no opportunity. The decision log said no direction. A reader of either would have concluded the tape was quiet. The tape was not quiet; the engine simply could not get a well-formed order out of its own building. That distinction is the entire subject of this column, and Monday was the most expensive demonstration of it so far — expensive in the sense that the first real order of the day arrived an hour and forty-three minutes after the read that justified it.
Nothing here was found by reasoning about it. Each fix let a proposal travel one step further down the pipe, and the next fault was whatever it hit.
On the stock side, the rule added five days earlier says an unmeasured breaking-news check blocks a new position, which is the correct default. The check was pointed at a browser tool the scheduled runtime does not have and has never had. So the answer was always unmeasured, and the sleeve refused everything: three candidates at 09:32, six at 10:02, and two fast-lane surges at 09:46 and 10:20. The fix is a headline scan against the market-data vendor, run before the agent, per name and per company name — the ticker-tagged feed lags about a day, and one name’s newest tagged row was 21 hours old while the untagged feed was current to the minute. It grades itself measured, stale, failed or absent, and if the market-wide feed has produced nothing in 90 minutes every name reads unmeasured rather than clean.
On the options side, the sleeve’s candidate builder emits a direction as BULLISH or BEARISH; the gate that admits a contract compares the literal call or put, and also compares it against a type field the contract dictionary did not carry. Five names refused at 10:07 as no_direction and contract_side_mismatch. The engine’s own run log said, at the time, that the gate name looked misleading and this was probably a wiring gap — and then stopped, which is the behaviour the operator rule asks for. Fix the producer, not the reader of the producer: the builder now emits call or put for the options sleeve, the compute normalises once and records what it changed, and the refusal class was renamed from a market word to an input-shape word so the next one cannot hide as an absence of opportunity.
11:17. With directions normalised, a proposal reached the order gate for the first time: four Intel 122 calls. The gate refused it for a missing chain_symbol. That field is required by the gate, emitted by the order router, and forbidden by the actual broker tool, whose schema accepts no properties beyond the ones it names. Three components, one field, three opinions — and the run then died at a $2.50 spend cap, because the first run that ever reached the order path was also the first one that cost more than a run that refuses everything early. Router stops emitting it, gate treats it as optional and resolves the underlying from the run-bound provenance record instead, cap raised to $4.00.
11:28. Next proposal, a NextEra 80 put, eight contracts. Two refusals. The gate still believed 11:30 to 15:00 was a manage-only window, which the preflight script and the canonical skill had made active the previous day; and the skill was passing a $1,500 per-order premium cap where the gate enforces $1,300, because $1,500 is the sleeve budget and someone had carried it into the wrong field. Both now have a test that reads the other file and fails on drift.
11:44. One more: the ranked screener’s own picks had never counted as a direction vote, only vendor flow and the equity screener lists did. So the day’s rank-one bullish picks arrived at the compute as UNKNOWN. One vote per pick added, and contradicting vendor rows still make the name mixed. Six minutes later an order was allowed.
The name had been refused three times already that morning at gates that had nothing to do with it. The fourth time it was the only candidate the tick was allowed to take.
Why the name. Conviction scored 3, one point from each of three independent families. Convergence: the equity screener and the unified screener both surfaced it, and the unified screener carried it among its ranked bullish picks. Flow: the normalised flow read was bullish with no contradicting vendor row and no dark-pool divergence. Rotation: its group, semis and AI, was rotating in on the Sep 21 post-close baseline. Against that, two honest marks on the other side — the flow-drift read had the broad tape in bear drift with a stale-tide flag on the name, and the tier-three quality bar would have called this ineligible at one agreeing independent class where it wants two. The regime was tier 1, risk-on, so the normal bar applied and that test never ran. It is worth writing down that the stricter bar would have refused this trade.
Why that contract. Stock at $302.99; it bought the $305 call expiring Sep 25, about 0.7% out of the money with three days to run. Delta 0.47, which is the band the sizer targets, implied volatility 59.3%, theta −$1.07 a day. Liquidity cleared on both tests that had killed other names that morning: open interest 417 against a floor of 250, and a bid/ask of $5.80 / $6.05, a spread of 4.2% against a ceiling of 12%. It paid the ask.
Why two. Sleeve budget $1,500, per-order premium ceiling $1,300, regime size multiplier 1.0. Two contracts at $6.05 is $1,210 committed and $290 left free; three would have breached the per-order cap. Invalidation was set at $288.11 on the underlying. And it was alone because the tick allows one new entry: Palo Alto, Intel, NextEra, AMD and SanDisk were all skipped behind it on that rule, not on their merits.
| ET | What happened | Where |
|---|---|---|
| 10:07 | LRCX screened, refused no_direction | stock $302 area, no order |
| 11:32 | Screened again, refused no_direction | no order |
| 11:49:00 | Decision: ENTER, passed all gates, direction call, delta 0.472, 2 contracts, 3 DTE | underlying $302.99 |
| 11:50:34 | Order gate: allow — buy-to-open 2 LRCX @ $6.05, $1,210 premium | order 1 of 8 permitted |
| 11:55:06 | Filled, 2 × LRCX 25 Sep 2026 $305 call @ $6.05 | $1,210 deployed |
| 12:02 | Position adopted by the order router, software stop $3.03 | under management |
| 13:30 | Manage pass: mark $7.825, +29.3%, just under the +30% trail arm — held | no rule fired |
| 15:45:00 | Decision: EXIT on take_profit_50%, mark $9.225 | underlying $309.86 |
| 15:49:49 | Order gate: allow — sell-to-close 2 @ $8.90 limit | exit 1 of 40 |
| — | Filled $9.10, twenty cents better than the limit hint | +$610 · +50.4% |
At the 15:45 manage pass the contract marked $9.225, up 52.5% on entry, and the live baseline rule took profit at plus fifty. What makes this worth recording is that three of the engine’s exit rails were watching the same position and none of them agreed with each other. The trailing stop had armed, at a floor of $7.955. The take-profit extension said hold, reason flow still confirming. The velocity rail said exit, on a +52% jump from the session open. All three are shadow-staged, so all three only wrote down what they would have done, and the blunt baseline is what actually traded.
It filled at $9.10 against an $8.90 limit hint, twenty cents of favourable slippage. The best mark the position ever printed was $9.225, so the exit landed within 1.4% of the high water mark for the day. It never marked below its entry: maximum adverse excursion was $6.05, the entry itself. Stock moved $302.99 to $309.86, up 2.3%; the option moved 50.4%. That ratio is the whole reason the sleeve exists and also the whole reason it is capped at $1,500.
The record it joins. Fourteen closed options trades, three of them winners. The two earlier winners were multi-day swings, six days in Chevron for +$415 and four in Exxon for +$175. The only two positions before Monday that were opened and closed inside one session were both Nvidia, on for −$168 and for −$105. So this is the first intraday option trade the engine has closed green, and the largest single realised options gain in the ledger. One further note for the ledger’s sake: the previous session, the stock sleeve’s first live fast-lane trade bought three shares of this same company at $305.14 nineteen minutes before the close and was stopped out twelve minutes later at $302.60 for −$7.64. Same name, two sleeves, two days, opposite outcomes, and the difference was six hours of runway rather than seven minutes.
A single winner after a morning of repairs is the most misleading possible evidence, and the honest reading of it is mostly about timing.
The read was not the scarce thing; the plumbing was. This name was sized and available at 10:07 and again at 11:32. It entered at 11:50 because that is when the last blocking fault was cleared, which means the fixes, not the signal, selected the entry price. A day where the stock had run in that hour and forty-three minutes produces the identical write-up with a loss at the end of it, and nothing in this entry would have caught that.
A staged rail argues against the whole structure. The decision record flags shadow_min_dte_block: true against a minimum of 30 days — this was a three-day option with theta at $1.07 a day, exactly the shape that rail exists to refuse. It worked once. That is not evidence about the rail, and it should not be read as any.
The capital book still disagrees with itself. At 15:45 the capital sync returned a contradiction, $1,830 committed against $1,447.57 settled, and reported nothing deployable, so nothing could have sized behind the position even had a candidate qualified. Separately, the router still lists the now-flat position among its unresolved protection-failure reasons, which needs a human to clear per item and was deliberately left alone rather than dismissed by the engine on its own authority. Both are open.
And the class check that would have caught the worst of Monday does not exist yet. The new pre-run check verifies that every tool a skill names actually exists in the runtime, which is what caught two further drifts on its first run. It does not verify parameter schemas, which is precisely how an invariant came to require a field the broker forbids. Until that gap closes, the same failure can recur in a different field.
What would show this worked. By next Sunday: no options tick refuses its entire candidate list at a single input-shape gate, and if one does, the decision log names it as an input fault rather than as an absence of opportunity. The gate’s window rule, the premium cap and the placing payload each have a test that reads the other file and fails on drift, so a disagreement between any two of them should now break a test rather than a session. At least one more option entry places through the order router with a journal row, which Monday’s did not. And the caveat that matters more than the number: one winning trade after a morning of repairs tells you the pipe is clear, not that the water is good. The sleeve is three for fourteen. Ask again at thirty.
← the previous build note · Sep 15–20 · the machine room · build log & archive