Five sessions, twenty-six runs, not one order. A week with no trades is the easiest week to write nothing about and the hardest one to be honest about, because the only numbers available are counterfactual — and a counterfactual is exactly the kind of number a system grades itself generously on.
There is no winning trade, so the thing to grade is the best decision, and Monday is it. The engine screened five names it wanted — XLE, META, GOOGL, COIN and ALLE — and the scalp gate refused all five. The gate asks for one of two things before it will let a same-day trade through: a recent surge in trading volume of at least 1.3× the name's own baseline, paired with buying in the options tape; or a specific kind of dip it is built to buy. Monday offered neither on any of the five. Every one of those refusals is recorded as a shadow — a trade the engine wanted, priced as if it had been taken, and graded the next day on real bars. Monday's five graded at −1.00R, +1.00R, −0.07R, −1.00R and −1.00R — three names running straight to a full stop, one scratch, one ambiguous winner. Day net: −2.07R. On a sleeve whose average loss is −1.29R and whose average win is +0.726R, that is roughly three good trades of damage that never happened.
The honest counterweight, which belongs in the same block: across the whole week the counterfactual runs the other way. Thirteen shadows graded — 4 wins, 5 losses, 3 ambiguous, 1 scratch — for a net of +1.42R, an average of +0.109R. Sitting out cost about a trade and a half on paper, and all of it came from one day: Wednesday, Sep 16, where six shadows netted +2.99R. So: Monday the gate earned its keep, Wednesday it did not, and the week as a whole is a small loss for doing nothing. That is a narrower verdict than "the gate is costing money," and the narrower one is the true one.
Wednesday the screen produced six names and the scalp gate refused all six. Graded on Thursday's bars: VRT +1.51R, SMH +1.50R, TLN +1.50R, CRWD +0.48R, PANW −1.00R, S −1.00R. Net +2.99R, and three clean first-touch clears of the profit target. On this sleeve's own scale that is the single most expensive decision of the week, and it cost nothing, which is exactly why it is easy to leave unwritten.
What makes it a finding rather than a bad day is where the winners sit. The gate's volume-surge reading is a number it computes per name. Of the thirteen shadows graded this week, ten carried a measured reading — every one of them between 0.09 and 0.77, far under the 1.3 floor, with no confirming options flow — and those ten grade 1 win, 5 losses, 1 scratch, 3 ambiguous, average −0.31R. The other three carried no reading at all: the metric was unavailable rather than low, the gate blocked on the absence, and those three are 3 wins, 0 losses, average +1.50R. They are LITE, VRT and SMH. So the entire positive contribution of the week's counterfactual came from the branch where the gate fired blind. Where it was actually measuring something, it was right, and the names it turned away lost money.
Two things keep this from being an instruction to loosen anything. First, n = 3. Second, and worse, the reading is not a field in the ledger — it survives only inside the text of the gate's own refusal message, recoverable by pattern-matching a sentence. A split this system cannot query is a split it cannot track, and the lifetime bucket still reads 37 shadows, would-have-won 0.38, average −0.06R, against a live break-even of 0.640. The verdict does not move. The instrumentation gap is the actual loss here, and it is the one that will still be true next week if nothing is built.
Every run writes one accounting row explaining why no trade happened, and it picks from a fixed list of reasons. Six of this week's twenty-six rows recorded zero fresh candidates while all thirteen of the engine's input feeds read stale or missing — the screener, the options tape, the flow read, the rotation map, the strategy map, every one of them — and all six were filed as no opportunity, with the count of input-producer failures set to zero and the internal consistency check passing. The label says the market offered nothing. What happened is that nothing was offered to the engine.
The cause is one line of logic: the reason code is resolved from whichever gate rejected the last surviving candidate, and never consults the freshness block sitting in the same row. So a starved run and a calm tape produce identical records, and the instrumentation built in August to tell those two apart cannot, because the check it passes only confirms that the counts add up. A system that reports zero and a system that reports why it has nothing to report are different objects, and this column has now written that sentence about three different components in four weeks. Separately and in the same family: Wednesday's final options run exited with an error code and an empty error message, and Friday's equity runs carried EMA_STATE_UNKNOWN because the regime file still held Wednesday's session — the producer that writes it is the one scheduled job in the fleet whose most recent run is a failure.
Start with the number that governs every other number in this column. The sleeve is designed around a 3 : 1 payoff — take profit at +3R on a swing, +1.5R on a scalp, against a stop drawn at −1R. What it actually realises, over twenty trades, is 0.563 : 1: five wins averaging +0.726R against fourteen losses averaging −1.290R. At that payoff the engine has to be right 64% of the time to break even. It is right 26.3% of the time.
That single ratio inverts the entire "which gate is costing us money" argument, and it is why the counterfactual sections above end in "no loosening case exists" rather than in a parameter change. Ranked by how often a blocked trade would have won: budget 0.60 over 10, quality 0.53 over 17, scalp 0.38 over 37, entries-blocked 0.30 over 12, other 0.27 over 40, technical veto 0.17 over 7, unsettled cash 0.00 over 4. Not one of them clears 0.640. Every gate in this engine is blocking trades that, taken at this engine's realised exit quality, lose money. Opening any of them makes the ledger worse, and the shadow ledger's cheerful average R is not an argument to the contrary — it grades those trades at the designed 3 : 1, which is a payoff this engine has never once achieved.
Now the mechanism, because the ratio is a symptom. Of twenty trades, exactly one has ever exited on a profit rule — Palo Alto on Aug 5, +1.96R, on a trailing break of the volume-weighted average price. The other four winners were closed by the clock: the end-of-day flatten, firing at whatever the position happened to be worth. No trade in twenty has ever touched its profit target. So the take-profit level is not an exit rule, it is decoration, and the two rules that actually govern this sleeve are the stop and the bell. Meanwhile the loss side is not being held either: 10 of 14 losses printed at or past −1.0R, and four past −1.5R — GOOGL −3.76, META −2.47, NVDA −1.86, AMD −1.75. A stop that is crossed rather than honoured is not a stop; it is a note about where someone hoped to get out. The upper tail is set by a clock and the lower tail is unbounded, which is the whole of the 0.56.
The fix is three specific things, and none of them is "trade less." One — arm a trailing exit at +0.5R. As soon as a position is half a unit of risk ahead, the stop follows it up. That alone converts the four time-flattened winners from whatever-the-bell-said into something with a floor, and it is the single change most likely to move 0.726 upward. It has now been carried in this column for three weeks unshipped, and it stays first until a trade in this ledger exits on a profit rule. Two — the stop has to live at the broker. Four losses past −1.5R on a sleeve that evaluates its stop when a scheduled run happens to look is not bad luck; it is a design that leaves the position unguarded between runs. A resting order at the venue is worth more than a better threshold. Three — the options sleeve does not get capital back until the two-leg structure exists. A single bought option pays for volatility twice and bleeds every day it is slowly right; nine of its ten losses died on a premium stop or an invalidation rather than on decay, which says the instrument is doing the damage rather than the read. That structure has been named in seven consecutive logs and remains unbuilt because the order path can only place one leg. Until it is built, $1,050 sitting idle against a sleeve that is −$2,168.20 over 13 trades is an allocation, not an accident.
Last Sunday this column published five tests and said what next Sunday should read. Here is that list, graded first, because a plan that never gets marked is a wish.
Last week's tests, marked. (a) The options schedule — PARTIAL. The file was rewritten on Sep 17, later than the Sep 13 bar. But its last run of the day fires at 15:45 ET, not the 15:49 that was written down; what actually sits past the 15:48 flatten cutoff is the separate end-of-day pass at 15:50 ET. The fault is covered. The number promised is not the number shipped, and saying otherwise would be the easiest lie in this column. (b) An options decision record on three of five sessions — MISS, by one. The sleeve ran in rehearsal mode Monday through Thursday morning, writing nothing, and flipped to live recording at the 15:45 ET run on Thursday Sep 17. Two sessions of record out of five. (c) A placed count beside created — MISS. The field does not exist in any of this week's twenty-six accounting rows. (d) An engine fill writing its own position row — UNTESTED, third week running. There were no fills to test it with. (e) Nothing carried overnight through an eligibility failure — PASS, and vacuously: nothing was carried because nothing was opened.
Now the lesson the week itself taught, which is bigger than any of those. Seventeen of twenty-six runs sat under an engine-wide block whose leading reason was a single daily reading of where two index funds sit against their long moving averages. That reading was taken once, in the morning, and the rule as written could only be released by the next morning's reading — so one weak 6am print bought a whole session of no trading, and on this sleeve that is most of a week. The asymmetry is the defect: engaging took one observation, releasing took twenty-four hours. On Friday Sep 18 an intraday version shipped — the same reading taken every thirty minutes through the session, confirmed only when three consecutive reads agree, and wired as a release leg only. It can lift a halt mid-session; it cannot create one. The three-read filter is not decoration: over the first five sessions of shadow measurement the raw reading flipped eight times, the confirmed version twice, and it would have released on Sep 17 at 07:57 PT while the daily file held its halt through the close. Its first scheduled run is Monday. This week is the first week the halt can end before the day does.
Two smaller things it logged. The confidence markdowns did not move, because nothing closed: five categories still carry a one-point penalty — the swing profile over 14 trades, chips and AI over 5, cyber over 6, the most common signal stack over 7, and trading in a risk-off tape over 20. And the counterfactual scorecard that tallies whether sitting out was the right call has not advanced for a third consecutive run: it still reads 17 days saved against 9 days cost with a last entry of Aug 24, while the ledger behind it has reached 127 graded observations. The cause is a missing flag on the day record, and the direction of the error is known — both skipped days whose value can be computed, Sep 15 at +0.5R and Sep 16 at +2.99R, would have scored as days sitting out cost money. A tally that is stale in a known direction is worse than no tally, and every argument resting on it this week has been written as a lower bound.
One — the accounting row reads freshness before it picks a reason. Zero fresh candidates off an entirely stale input set is an input-producer failure and must be filed as one. This is a precedence change, not a new measurement: every fact needed is already in the row. Until it lands, six of this week's runs are indistinguishable in the record from six quiet afternoons, and every downstream tally that counts no-trade days inherits the error. Two — the volume-surge reading becomes a field. Written to the shadow row at decision time, rather than embedded in the text of a refusal message and recovered by pattern-matching. Without it the split this column just found — measured branch −0.31R over 10, blind branch +1.50R over 3 — cannot be tracked to the point where it is either actionable or dismissed, and it deserves to be dismissed if the next five blind-branch grades fail to average above +0.64. Three — the trailing exit at +0.5R, and the stop moves to the broker. Both are named in the diagnosis above; both target the 0.563 directly rather than arguing about which gate to open. The engine does not need more trades. It needs the trades it takes to end somewhere other than at the bell or past the stop. Four — the intraday release leg gets its first real week, and the test is not whether it works but whether it ever fires: it can only act on a day that starts halted and improves.
How we'll know it worked next Sunday: (a) no accounting row in the week reports no opportunity while its own freshness block is entirely stale — and if one does, it is filed as an input failure and named here; (b) the volume-surge reading appears as a field in at least one shadow row; (c) a halt engaged on a morning reading is released intraday at least once, with the release timestamped before the close — or, if no such day occurs, this column says so rather than claiming the leg passed; (d) the counterfactual day tally advances past its Aug 24 entry and absorbs Sep 15 and Sep 16; and (e) if any trade closes at all, it closes on a rule and not on a clock. Another flat week is not a pass on any of these except (e), and (e) would only be excused, not passed.
Two changes, both on the last two days of the week, and both about the same thing: a decision that could only be revisited on a schedule now gets revisited while the day is still running.
The regime reading that halted this engine for most of the week is computed from where two large index funds sit against their moving averages, and it was taken once a day. Asked on Sep 15 whether it should run more often, the answer was to measure first rather than change it — so a shadow job was built that took the reading every thirty minutes and wrote down what it would have said, without touching anything. Five sessions later the measurement was unambiguous: the raw half-hourly reading flipped eight times, a version requiring three consecutive agreeing reads flipped twice, and on Sep 17 the confirmed version would have released the halt at 07:57 PT while the daily file held it to the close. On Sep 18 it went live — as a release leg only. It can lift a halt mid-session and it can stop a lifted halt from re-engaging on the same stale daily reading; it cannot halt anything, which is deliberate, because the fault being fixed was too much stopping and not too little. Rolling it back needs no code change: unload the job and the governor reads the file as stale and falls back to the daily number on its own. Separately, on Sep 17 the options sleeve came out of rehearsal mode and began writing a decision record for every run — the fault this column documented on the stock side a month ago, closed on the other half, four runs late to make last week's bar. Since this edition was written, both learning-loop graders turned out to carry record-keeping faults of their own, and those have their own note. The full build note →
The newsletter's demand-and-credit read on semiconductors, cyber, and construction — this week's headline, and the dated checkpoint that would confirm it or crack it.
Last week's question was whether the deceleration in memory pricing stays quarantined in the lanes nobody is fighting over. Going into Micron's fiscal fourth quarter, the forecast set says it does — and says it loudly. Third-quarter contract increases were guided at 13–18% quarter on quarter against second-quarter gains near 60%; the fourth-quarter PC forecast sits at 3–8%, revised up from 0–5%, while the mobile read narrows further on weak end demand and elevated customer inventory; and the server lane is the one still carrying a double-digit step, on preferential supply allocation that is the direct cause of the consumer lanes decelerating. That is not a market cooling. It is one market being fed and the others being rationed, and they are being reported as one number. The sell-side commentary this week ran the same way in the other direction — one house looking for blended prices up 5–10% in the November quarter and the upcycle running another five quarters. Meanwhile the tape disagreed with all of it: chip names sold off from Sep 14 on an AI-risk rotation that had nothing to do with memory supply, which is a reminder that the pricing argument and the ownership argument are settled in different rooms.
Three weeks ago this column replaced "the whole group is being de-rated" with dispersion: the argument that demand is real and the market is separating who captures it from who does not. This week the group moved as a group. In the week to Sep 18, CrowdStrike rose roughly 15%, SailPoint roughly 15%, Palo Alto about 10% and Okta about 9% — four names, four different business models, one direction and a narrow spread. The driver was not a print and not a contract: it was a rotation out of AI hardware and into security after public warnings from two of the most prominent people in the field, which is to say the group was re-rated on a story about somebody else's risk. A thesis that says these names should separate has to count a week in which they did not, and this one counts against it. The honest reading is that dispersion is a claim about fundamentals resolving over quarters and this was a flow week, but that defence has a cost: it means the thesis cannot be tested on any week the tape is being driven by rotation, and rotation has driven three of the last six. The structural note underneath, for anyone tracking the coverage list: CyberArk no longer trades separately — Palo Alto's acquisition closed — so the group has one fewer independent instrument to disperse with.
The replacement instrument — labour productivity rather than customer payment behaviour — kept getting corroborated this week from the demand side rather than the contractor side. The backlogs are not the question: MasTec at a record $21.4B, up 30% year on year, with full-year guidance raised to $18.2B of revenue; Comfort Systems at a record backlog with more than 74% of revenue now coming from new construction; EMCOR guiding to $20.0–20.5B. Every one of those is a promise to supply crews on a date. What is scarce is the crew. Electricians account for roughly half a data centre's construction budget; the trade needs something on the order of 300,000 more of them against roughly 20,000 retiring a year, and one hyperscaler's president has named the shortage publicly as the largest single obstacle to its US build-out, with electricians flown in from beyond 75 miles to keep sites moving. Behind that sits the constraint nobody can hire around: utility interconnection queues running four to seven years in the markets where most announced capacity is actually sited. Record backlog and a four-year queue are the same sentence read from two ends.
And the newsletter, on itself: last Sunday this paragraph said that next Sunday it should read four claims, one open, and a grade on DDR4. It reads three claims, one hit, two misses, zero open — unchanged, for a second week. The Sept 7 call whose resolver date has now passed was never written into the scorecard, and Issue №017 on published another one — "Bits Or Nothing," on whether data-centre component revenue up 182% carried any bits, resolving on the Q3 supplier inventory print by Oct 31 — and that one is not in the ledger either. So the count is now two consecutive issues whose headline call reached readers and did not reach the record. This is the same fault Section I spent the week documenting in the trading engine, wearing the newsletter's clothes: the system can say what it decided and cannot say what it did. The difference is that the trading engine's version of the bug is being fixed with instrumentation, and this one has been fixed with an intention twice. The publishing step writes the claim into the scorecard file as part of shipping the issue, or the issue does not ship — and if that sentence appears here a third time without the file changing, the right conclusion is not that the fix is hard but that nobody is holding this half of the operation to the standard it holds the other half to. Next Sunday: five claims, two open, and a resolution written for the Sept 7 call — or an admission that it was abandoned.