Almost nothing, in dollars. A great deal, in switches. This is the week the freeze came off the stock sleeve — and the week that proved the freeze had been hiding something other than losses.
A put bought Aug 27 at $2.44 — one contract, $244 at risk — sold Aug 31 at $2.56 for +$12.00. Being scrupulous about what that is: it is a scratch, it is 0.05R against a 1R unit of $244, and the broker's own record on the sell order names the account holder as the placing party, against the Aug 28 Intel exit on the same sleeve which names the engine. No options run fired at all on Aug 31 — no decision file was written, no position file was saved, and the two safety-monitor fires that day both returned no verdict. So there is no rule to credit. I closed it because I was looking at it. The logic worth extracting is the one the trade refuses to supply. The position touched $3.05 on Aug 27, a +25% mark within hours of being opened, and came back to $2.56 four sessions later: about $49 of open profit handed back on a $244 position, closed by a person on a Monday afternoon rather than by a rule at the moment the rule would have fired. That is the sleeve's whole problem in one contract — the upper tail is governed by whoever happens to be watching — and it is the same finding the stock ledger has been carrying since July, arriving this time on the options side.
There is no realised dollar loss to report, so the loss is the one the ledger cannot show. Across five trading sessions the engine produced no gradeable evidence at all, and the cause was different every single day. Aug 31: the stock run's input producer did not execute — no run, no log. Sep 1: neither sleeve wrote a decision record. Sep 2: five stock runs fired and all five were rehearsals, held all session under a risk halt. Sep 3: three runs blocked on the entry freeze, two reported no opportunity, and screening finished end-to-end on only two of five — yet the 15:47 ET run built an eight-name universe with four survivors (Nvidia +2.00%, Dell +4.54%, gold +1.91%, Vistra +0.41%) and then skipped the calculation on the freeze, which refutes "there was nothing to trade" for at least that session. Sep 4: both morning runs were manage-only with screening never completed and zero candidates received; the week's first production screen did not run until 15:51 ET. One of five sessions persisted a decision log. And the counterfactual ledger — the record of what a blocked trade would have done, which is the only argument any gate in this engine will ever have — writes nothing on rehearsal or frozen runs either, so its last graded day is still Aug 27. The Sep 2 runs killed candidates on the scalp gate; those kills were never captured. Every gate statistic quoted in this column is now five sessions stale, and none of it may be treated as current.
The root cause of the blackout is a design decision, not a bug. The decision log and the counterfactual ledger are both written on the trading path — so a run that is frozen, halted or rehearsing exits before either write happens. That was invisible while the engine traded, because trading runs wrote records. Freeze it for a fortnight and the consequence surfaces: the freeze does not pause trading, it pauses learning, and a fortnight of it leaves every threshold in the playbook resting on a sample that stopped growing in August. The fix is not a gate change. It is to persist the decision record on every run — rehearsal, freeze, halt and manage-only included — and to record counterfactual rows on those runs too, since they are counterfactual by construction and cost nothing to book. Both are written up and both are cheap; neither touches a threshold, a size or a stop.
The second diagnosis is the one that governs what happens when the record restarts. Sorting the seventeen graded stock trades: five wins averaging +0.726R against eleven losses averaging −1.431R — a realised payoff of 0.51 to 1, against a design that assumed 3 to 1. At 3:1 the engine needs to be right 25% of the time; at 0.51:1 it needs 66%, and it is running 31%. Both ends leak. Not one trade in seventeen has ever touched its profit target — only Palo Alto on Aug 5 (+1.96R) exited on a profit rule at all; the other four wins were closed by the clock, flattened at the bell or squared up as stale. And nine of eleven losses printed at or past −1.0R, four past −1.5R, so the stop leaks about 0.43R beyond where it was drawn. The upper tail is set by a clock and the lower tail by slippage, and neither is the entry gate everyone keeps proposing to loosen. Which is why the standing recommendation to ease that gate was withdrawn this week rather than carried: its supporting number, +0.88R on seventeen near-misses, is priced at the 3:1 payoff this engine has never produced. Re-scored at 0.51:1, the same seventeen are roughly break-even. No gate bucket in the playbook clears the 66% bar — not one, best is 56%. So the fix is ordered: govern the upper tail with a profit rule instead of a clock — arm the trailing exit at about +0.5R rather than +1.0R, or take part of the position off at +0.75R — and leave every entry gate exactly where it is until the payoff ratio moves.
Three things it logged. One — it retracted a standing finding rather than extending it. Since mid-July the grader had held that the eased entry-quality gate was blocking money: seventeen near-miss trades that would have been right 53% of the time at an average of +0.88R. This week it noticed the unit that number is denominated in. Counterfactuals are scored at the designed 3-to-1 payoff, where being right 25% of the time breaks even; the engine's realised payoff is 0.51 to 1, where breakeven is 66%. At 53% those seventeen are break-even to negative, not +0.88R — so the recommendation was withdrawn and gate-loosening is frozen outright until some bucket clears 66% on at least ten fresh observations. A grader that only ever finds new reasons to trade more is not grading. This one deleted its own best argument for trading more, and it did it by checking the denominator rather than the number. Two — the protection gap it predicted last week reproduced on the very first live order. A written finding from the prior review said a fill landing between runs can sit unprotected because nothing re-checks it until the next run. On Sep 4 the engine placed its canary share at 12:39 ET. The protective order was live at the broker from the start — this is worth being exact about, because it is the difference between an unprotected position and an unverifiable one — but it was not recorded against the position in the engine's own book until 11:05 PT, about an hour and a half later, when the first live safety-monitor fire flagged the lot as untracked. For that window the engine held a position it could not prove was covered, which is the state every reconciliation check exists to make impossible. The prediction was correct, the window was real, and the run that placed the order was not what caught it — the half-hourly monitor was. Three — the confidence penalties did not move, and that is the honest reading. Five categories still carry a one-point markdown: the swing profile (14 trades), chips and AI (5), cybersecurity (6), its most common signal stack (7), and trading in a risk-off tape (17). Nothing closed, so nothing updated. A grader whose numbers move in a week with no closed trades would be a grader inventing evidence.
One — instrument before trading, not after. The decision record and the counterfactual ledger move off the trading path and onto every run, whatever its mode. This is the week's primary change and it is deliberately boring: it alters no gate, no threshold, no size, no stop. It only makes the engine keep writing when it is not trading, which is precisely when this month proved it stops. Two — the unprotected-fill check moves to the top. Instead of running after an order is placed, the "does every position have a live stop recorded against it" check runs at the start of every trading run and every safety-monitor fire, and raises an alert on any position without one. Friday supplied the argument for this at the cost of an hour and a half of unverifiable coverage on one share of Ford; the next such gap will not be on a $14 stock bought as a test. Three — the live window runs to its own written rules. Four trading sessions, Sep 8 through Sep 11 — Monday is a holiday — one new position per run, one whole share, $600 maximum, nothing carried overnight, names chosen by the screener rather than by me, and the confidence adjustments held neutral so the record it produces is not tilted by the record it is trying to replace. It rolls back on a written trigger rather than a feeling: any single realised loss at the full entry size, or more than $60 of cumulative realised loss across the window. Four — options stay frozen, and the reason is still tenor and structure. Thirteen trades sort cleanly on how long the option had left when it was bought: under 29 days is 0 wins in 6, averaging −0.47R; 29 days or more is 2 wins in 5, averaging −0.09R. And eight of nine losses died on a thesis rule rather than on decay, which is the tell that the instrument, not the read, is doing the damage — a single long option pays for volatility twice and bleeds daily while a swing idea takes weeks to be right. The two-leg structure that fixes both has now been named in five consecutive logs and remains unbuilt because the order path can only place one leg. It is not in this plan as an intention again. It is in the plan as the thing that must exist before the options switch is touched. How we'll know it worked next Sunday: (a) a decision record exists for all four sessions, not one; (b) at least one production decision bundle replays to an exact match; (c) the counterfactual ledger carries rows dated after Aug 27; (d) no position is found without a recorded stop at any monitor fire; and (e) the live window has either produced a graded signal trade or been rolled back on its own written trigger — and if it produced neither, that is a failure of the window, not a quiet week, and it will be written up as one.
Wednesday through Saturday was the heaviest build stretch this log has recorded: a ranking model that had quietly stopped responding to evidence, the last three gates on the trading engine closed in a single day, a contract layer put underneath the semiconductor pipeline, and a gate that stops a job before the model reads anything at all.
The private-company model ranks roughly twenty security firms by how likely each is to be acquired. A new grading check asked a question nobody had asked before — how much does this list change from week to week? — and the answer was almost not at all: agreement between consecutive weekly rankings averaged 0.994 out of 1, with four pairs at exactly 1.000. One company held the identical probability, 0.761, for eight consecutive weekly runs. Two separate defects. The first is that the model's largest input was being maintained as a ratchet rather than a rate: across fourteen runs it moved up twelve times and down once, while the sector's actual deal count halved (42 in February to 21 in July). One category sat pinned at 0.95 for all fourteen runs through the busiest consolidation stretch on record. A number that can only rise is not measuring anything. The second is simpler and worse: five of thirteen run-pairs changed nothing on any company — the block was being copied forward instead of recomputed. The rate is now derived from the deal data by formula, with a term that lets it fall, and a guard refuses to write the run at all unless something moved, the numbers match the formula, and the series is not up-only across a six-run lookback. Tested against known-bad output, it correctly fails both. Two things worth saying against my own week. The first build of the fix read two summary fields as if they were months, inflating the divisor and inverting the correction — it would have pushed every category up, the exact opposite of the defect. It was caught before shipping, by running it. And the historical files were not retro-corrected: they are the evidence for the diagnosis, and rewriting them to look right would destroy the only proof the diagnosis is true.
Six gates stand between this engine and live entries, each defined by written criteria that a checking script either confirms or does not — the rule being that a gate is a computed fact, not an assertion, and no script may flip its own gate. Three had been closed for a week. Friday closed the rest. Gate D required a rehearsal placing real orders under per-drill approval, which is why it had sat open: it cannot be passed by reasoning about it. Gate E required a canary — one real share, placed by the engine, protected, watched. Both closed on Sep 4. Between the 07:09 PT readiness check and the arming, the test suite went from 490 to 529 passing, and 18 of the 30 test files in that suite were written or rewritten across these four days. Every mechanical check read green; what remained was four steps a person had to take. Then the interesting part. The assisting session prepared the arming procedure and was refused by the safety layer at the arming edits themselves — the classifier that fences the order path stopped it from touching the switch, the flags file and the backups. It stopped, wrote the six steps out as copy-paste blocks with a rollback as step seven, and handed them over. I ran them at 10:35 PT. That is the shape this was always supposed to have — the written procedure says a human adds the live flag by hand and watches it — but it is worth noticing that the shape was produced by a wall, not by good intentions. The scope is a document, signed and dated, that says which sleeve, how many names, what size, which windows, for how long, and what rolls it back. Options are excluded from it explicitly, on the grounds that their order path has never been exercised on a real run.
The semiconductor research pipeline runs in numbered layers, each consuming the one before. They had no shared definition of what they were passing each other — the layers agreed because they had been written by the same hand in the same fortnight, which is not agreement, it is coincidence with a short shelf life. It broke twice this month: a nightly stage that silently collapsed several separate searches into one, and a credit read that came back empty because a nightly summary only ever covers that night and was being read as if it covered the entity. Saturday put a written contract underneath all of it — one schema shared by four layers, one resolver that picks the right input for a given date rather than trusting the index (which lags a night), a credit calculation that is computed by a single tool and fails the run if the prompt's copy disagrees with it, and a check that must exit clean before the final synthesis is allowed to publish a number. There is also a register for challenges the pipeline raises against itself, so a disagreement between layers becomes a logged item rather than whichever layer ran last. On the newsletter side, the figure work stopped being copy-pasted per page and became a module: flow, waterfall, stacked and trend charts, plus a generator that builds an income-statement flow diagram straight from a filing's own line items. Thirty-one existing deep dives were backfilled with one, including a caption correction on the TSMC page where the figure said "net income" and the filing says attributable to the parent. Also Saturday, and less pleasant: a scheduled digest posted to a chat channel with local file paths in it, because error output had been folded into the message body. The poster now strips paths and records the message identifier, so a bad post can be edited or deleted rather than lived with.
The construction monthly was registered to run on "the first Monday" and its own description said so. The scheduling syntax does not work that way: when both a day-of-month range and a weekday are given, it fires on either, not both — so a job meaning "the first Monday" ran every day from the 2nd to the 8th and every Monday, seven to nine times a month. On Aug 31 it republished the monthly piece against an evidence base that had not changed, because the layers underneath it only refresh on Sundays. All 127 registered jobs were swept on Sep 4; this was the only one affected. The fix is the part worth recording. The obvious repair — a fixed day, and clearer wording in the job description telling it not to publish twice — is half a fix, because prose asking for restraint is something a model reasons about and can reason around. What went in instead is a small script that runs ahead of the job and prints one of three verdicts from three deterministic checks: proceed, skip, or stop. It halts the run before the model has read a single instruction. It returned skip on Sep 2, Sep 3 and Sep 4, correctly and silently, which is exactly the week it was built for. A gate that returns a verdict before reasoning starts is not the same object as an instruction asking for the same outcome, and this operation now has four of them: the entry freeze, the order-path classifier, the pipeline contract check, and this.
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.
The price is still going up and that is no longer the interesting part. Samsung is reported to be seeking as much as 20% on average DRAM selling prices in third-quarter negotiations, and both Korean makers describe HBM, DRAM and NAND capacity as essentially sold out for 2026. What changed is the paper underneath it. Samsung and SK Hynix are moving off long-term fixed-price supply agreements onto shorter contracts with post-settlement pricing — the price is adjusted after delivery — and SK Hynix has reportedly removed the ceilings from its long-term agreements outright, while Micron has kept both floors and ceilings tied to committed volume. That is a structural read, not a sentiment one: a supplier only deletes its price ceiling when it expects the spot market to keep clearing above it, and a buyer only accepts post-delivery pricing when it has no alternative source. The two positions are the same forecast written from opposite sides of the table. It also changes what a "settlement" means — the number this column's May call was built on is becoming a number that does not exist until after the quarter it prices.
Two weeks ago this column retired the "the whole group is being de-rated" thesis and replaced it with dispersion: the tape rewards the accelerating name and punishes the decelerating one. Half of that got falsified on the first test. Palo Alto grew revenue 34% to $3.41B and added roughly $1B of next-generation security recurring revenue in a single quarter, taking that line to $9.1B, up 63% — then fell 5.2% on the print and 9.3% the next session, −10.3% on the week. Zscaler grew 25% and fell 7.8%. The sector index was down 4.0% and 17 of 19 tracked names finished lower. The acceleration was there and it was sold anyway; the reasons this pipeline's own weekly digest recorded were valuation, interest rates, and a free-cash-flow margin forecast below what analysts wanted — not the business. What the tape is actually sorting on is not growth rate, it is what AI does to the moat. Three AI labs shipped security-specific models within five days of each other, and this pipeline's own ranking inverted the same week once it started scoring companies by whether AI feeds their business or copies it: agreement with last week's order is negative. Identity names fell to the bottom, data-security and vulnerability names rose.
The second-quarter prints are in and the demand side is not ambiguous. Comfort Systems reported backlog of $14.1B, up 73% year on year. EMCOR reported a record $21.4B at June 30, up 30% year on year and 5% sequentially, on revenue of $5.15B (+19.8%) and adjusted earnings of $9.06 a share (+35%). Sterling grew revenue 90% to $1.17B with adjusted earnings up 116%. The constraint being reported is not demand and not financing — it is people. Combined backlog across those three has risen roughly sixfold since 2016 against about 30% growth in US electrical, plumbing and HVAC employment over the same period. That gap is the whole forecast: a backlog is a promise to supply labour on a date, and one growing twenty times faster than the labour pool converts into revenue on a schedule the labour pool sets. Which is also why this column's own working-capital call on these names is the one that most needed grading, and did not get it.
And the newsletter, on itself: this section was drafted saying the scorecard had three calls open, none resolved, two of them past their own deadline — and that the record would be graded before the next issue or the promise was decoration. It was graded before this edition shipped. All three are now resolved: one hit, two misses, a resolved hit rate of 33%, published at tkal.news/calls with the arithmetic attached. The hit is the Dell margin call — the test was non-GAAP gross margin at or above 18% with no new trailing low, and the Sept 1 print delivered 21.1% against 18.7% a year earlier. It is graded a hit and it was right for a reason the call did not give: gross margin rose because the AI share of revenue fell about 190bps, not because operating leverage absorbed a rising AI mix. That is in the resolution text, because a hit you cannot explain is not evidence of a method. Both misses are worse than they look. The construction call needed two of four contractors to stretch collections by more than five days; computed from the Q2 balance sheets, MasTec came in at −3.1 days, EMCOR +1.3, Comfort Systems −5.1, Sterling +1.6. Zero of four, two of them compressing. The construction pipeline reached the same verdict independently and retired the instrument: the strain in this cycle is labour productivity, and it surfaced as a $337M execution charge at AECOM, not in anyone's receivables. The DRAM call was wrong in the opposite direction and by the widest margin available — it predicted the Q2 settlement would print below the guidance band on a phantom-demand unwind, and Q2 contract prices rose roughly 60% quarter on quarter instead. And the last thing to own is the clock. The DRAM call was graded 53 days after its horizon and the construction call 6; both were gradeable the whole time. A falsifier you publish and then do not check on schedule is not a falsifier, it is a decoration with a date on it — which is the same failure this edition spent Section I documenting in the trading engine, arriving in the part of the operation that is supposed to be holding it to account.