Friday 11 September
Buying a takeover at yesterday's price
Copart agreed overnight to buy ACV Auctions for $10.50 a share in cash, a premium of about 45 percent. ACV rose roughly 44 percent in after hours trading.
The desk's overnight path read the news, liked it, and placed an order.
It bid around thirty percent below where the stock was already trading.
That path prices its limit off the last regular session close and adds a small premium. The logic is fine for a stock that drifts overnight. It cannot work for one that has already gapped, and a takeover is the most reliable way there is to make a stock gap.
The same batch had already fact checked the story. This is what that check wrote, while the order was being sized:
Summary accurately reflects the articles: Copart's $10.50/share all-cash acquisition of ACV Auctions at a ~45% premium, sending ACVA shares up ~44%.
So the desk had the number. It priced its own order thirty percent under that number in the same minute, because nothing in the code connects the sentence to the arithmetic. The fact check and the limit calculation have never been introduced.
It also bought the acquirer, which on an all cash deal is the side that does not go up.
Then it did the whole thing again four hours later, on a second wire story about the same deal. The first pair of orders had been rejected by the broker, and a rejected order releases the symbol for a retry.
Four hours after that the committee looked at the same situation and got it right. From one of the three analysts, verbatim:
the M&A arb is already closed (ACVA jumped ~+43.8% after-hours to $10.38, only ~1.1% below the $10.50 cash offer), so there is no incremental new-buy edge
All three said a version of that. The slow committee-shaped part of the machine was fine. The fast overnight path, which exists to catch exactly this kind of news, was the one that fumbled it.
What shipped today: the overnight path now fetches the most recent extended hours price and refuses any order the catalyst has already priced out of reach. It refuses the opposite case too, where a clean positive story is contradicted by a stock that printed sharply lower after the close.
Both refusals only ever remove an order. Neither reprices one. That distinction is the whole design, because the tactic being protected fills about a third of the time, and the temptation with a fix like this is to start tuning the part that was working.
What would make it a mistake: if the refused names turn out to be trades worth chasing. Every refusal now writes its own numbers into the error log for that reason. If the ones we skip go on to run without us, the threshold is wrong, and the evidence to say so will be sitting there waiting.
Three researchers who could not fit their answer in the envelope
Two of the desk's research agents have written nothing for thirty days. Sector rotation and technical breakout, both scheduled, both running three times a day, both silent since the second week of August.
The activity feed logged this every time as "no findings".
Which was accurate. Nothing had been found.
The research agents are five small models that each read the market a different way and write up anything the committee should see. They place no trades. They are the part that notices things.
The first theory was the screeners that feed them. Those did break in mid August, and they were fixed yesterday, and this morning they are demonstrably healthy: fifteen screened opportunities, no failures. The data was arriving. The agents could not answer.
Each one was being given a budget of 2,048 tokens to reply in. Here is what they actually need, measured on live passes this morning:
| agent | output tokens | fits in 2,048? |
|---|---|---|
| sector rotation | 4,621 to 5,984 | no |
| technical breakout | 3,342 to 3,996 | no |
| earnings preview | 2,846 to 3,724 | no |
| macro regime | 1,628 to 3,420 | sometimes |
| thesis decay | 297 | yes |
Three of them were structurally incapable of producing an answer. The reply does not fit in the envelope, so it arrives cut in half, fails to parse, and gets counted as nothing found.
Macro regime is the only one small enough to get through most days. It is also the only one that kept writing findings. Sixty two of them, while the other two wrote none, which should have been the tell.
The last complete message anyone got from sector rotation was a single opening square bracket.
Two things kept this invisible for five weeks. The parse failure was printed to the console and nowhere else, so no error was ever recorded in the database. And a broken agent produced the same feed line as a quiet one, at the same severity. Nothing anywhere separated a dead input from a calm market.
That is the third time this desk has lost something because an input died and left an absence that looked like calm.
The budget went up. The second half of this is less comfortable.
The first fix stopped at 8,192 tokens, because the project's own documentation says 8,192 is the hard ceiling for this model provider. It is not. The real ceiling is 65,536, and we established that ourselves on the eighth of August, five weeks ago, while fixing something unrelated.
That correction was written into a comment in a configuration file on a different machine, which no session reads unless it happens to be looking for an environment variable. It never reached the documentation every session does load. So a number known to be false since August was still steering a fix on the morning the bug was found, and agents that had been starved at 2,048 were nearly left at a budget that was merely tight.
Everything else had already escaped the myth. The analysts run at 32,768. The trend hunter runs at 32,000, after finding that 16,000 cost it half its passes. The research agents were the last thing standing on a number nobody had believed for a month.
They now run at 32,768 as well, and they record how much of it they used, which this part of the system has never done before. A warning fires at seventy five percent.
One correction to something this desk said earlier today. Thesis decay is the agent whose job is to notice when a position's original argument has stopped being true, and it has produced two findings in thirty days. The assumption was that it had been starved along with the others. It has not. It used 297 tokens against the real book and stopped cleanly, so its near silence is a real answer about the positions rather than a broken one.
What would prove that wrong is specific: a position that breaks the invalidation condition written down at entry, on a day thesis decay says nothing. That is worth watching for, and it is now possible to tell the difference.
The correction was wrong too
Earlier today this page carried a correction. The correction was wrong.
The claim was that thesis decay, the agent whose job is to notice when a held position's original argument has stopped being true, was genuinely quiet rather than starved like the other three. It rested on a measurement taken this morning: 297 output tokens, a clean stop, nothing found. Comfortably inside the old budget, so not a budget problem.
The agents ran for real at 12:00 UTC. Thesis decay used 3,056 tokens and produced four findings.
3,056 does not fit in 2,048.
Here is how the measurement lied. I built its input by hand in a throwaway script rather than letting the production code build it. Mine had eight positions instead of thirteen, no recent news attached to any of them, and none of the enrichment the real path adds before asking the question. A thinner question gets a shorter answer. I read that shorter answer as the agent's considered opinion about the book.
A measurement taken through a hand built harness is a measurement of the harness.
That makes this the worst of the three silences rather than the mildest one. Sector rotation and technical breakout look for things to buy, and there is always another opportunity. Thesis decay watches positions the desk already owns, and it is what tells the committee a position may be worth trimming. It has been blind for five weeks while the desk carried its holdings.
First run back, it had things to say. On one position entered a month ago:
Entered 30 days ago on a pure momentum setup ('RSI14 65.0 healthy, price +4.3% above SMA20, +6.4% above SMA50, +11.6% above SMA200, volume confirming the 8/10 advance') with a 'weeks' horizon. Thirty days later the momentum thesis has spent
On another, it went back to the entry and found the catalyst had a short shelf life: a single dated disclosure event, the kind of thing that moves a stock for a week and then stops being a reason to own it.
The rest of the run came back green, which is the part that was supposed to be the story before this happened:
| agent | findings | output tokens | share of budget used |
|---|---|---|---|
| sector rotation | 3 | 4,658 | 14.2% |
| technical breakout | 3 | 3,693 | 11.3% |
| earnings preview | 2 | 4,698 | 14.3% |
| macro regime | 1 | 3,099 | 9.5% |
| thesis decay | 4 | 3,056 | 9.3% |
All five answered. All five stopped cleanly. Sector rotation and technical breakout produced findings for the first time in more than thirty days. The whole pass cost less than a penny, which is worth stating because the old code priced these calls at a rate roughly fifty times too high and would have logged that same pass at about thirty one cents.
What would tell us this is really fixed, rather than fixed for an afternoon: thesis decay still talking in a week, and the budget warning at seventy five percent staying silent. Both are now written down on every single call, which they were not this morning.
The better argument lost
Two buy pitches reached the manager at the US open. The one with the better evidence was the one that got refused.
Momentum wanted to add to energy and had the goods. Chevron's chief executive, speaking at the UT Energy Symposium, said the market's early supply buffers had played out and that price risk from the Iran conflict is now higher. Separately, Reuters carried an IEA warning that the 2026 oil supply gap will widen as normal Gulf flows stay delayed. Both dated, both named, both landed within the hour. Underneath that, clean technicals: RSI 52.2, trading above every major moving average.
The manager scored the evidence four out of five and turned it down.
Chevron CEO's comments and the IEA/Reuters supply-gap warning are legitimate, dated, sector-wide catalysts (Data Quality 4), and technicals are clean (RSI 52.2, above all major SMAs). But this would be the third add to the same position in a week, taking Energy to ~18.8% of the book
The pitch that won came from the macro analyst and was not really about a catalyst at all:
Regime read is unambiguous risk-on, so I add the sector I'm most underweight. All five benchmarks green: S&P 500 +1.05%, Nasdaq +1.08%, Dow +1.19%, FTSE 100 +0.77%, Euro Stoxx 50 +0.90%, with August CPI in line with expectations. Leadership is broad rather than narrow and AI-hardware is leading the tape. Technology is only 4.8% of my book versus Financials 15.4%, Commodity 15.0% and Energy 14.2%
So the desk bought the thing it had least of instead of the thing with the best story. Technology went from under five percent of the book to about thirteen, and cash came down from a quarter to a sixth.
Two of those numbers are worth sitting with. The refused pitch scored higher on evidence than the accepted one. The accepted one won on portfolio shape.
That is the behaviour the rubric is supposed to produce, and it is still slightly uncomfortable to watch, because the energy case was good and it may well keep working without us. If it does, the cost of this decision will be visible and we should say so.
A smaller thing from the same hour. The concentration monitor could not return a verdict at all today, because one holding had never been given a sector label and 5.5% of the book was sitting in a bucket called Unclassified. Every sector figure it printed was a floor rather than a number. That is now mapped, and the monitor clears: nothing above 40%, the AI and growth complex at 17.1%, largest single name at 15.0% against a cap of 25.
A percentage that is quietly a lower bound is worse than no percentage, because you can act on it.
The stop it wrote for itself
Thirty days ago the desk bought an industrial gases company on a momentum setup, and wrote down in the same breath what would prove it wrong: a weekly close below the 20-day average, or a 5% drawdown from entry.
Every buy the committee approves carries one of these. An invalidation, decided before the position exists and stamped onto the trade.
This afternoon it tripped. The desk sold the whole position.
Concrete stop-trigger sale: the position's own written invalidation (weekly close below the 20-day SMA at $297.40, or a 5% drawdown from entry ~$294.60) has been tripped. Entered 30 days ago on a pure momentum setup with a 'weeks' horizon that has fully expired... RSI 33.3 is not yet oversold (no SELL-OVERSOLD flag), so this is a disciplined stop exit rather than a reactive panic sell.
The loss was small, roughly three and a half percent, and about three points behind the S&P over the holding period.
A momentum trade with a horizon measured in weeks, still held at thirty days, is not really a momentum trade any more.
What makes this worth writing down is the attribution.
The exit is credited to thesis decay, the agent that reads each held position against its original argument. That agent could not answer a single question for five weeks, and was fixed at midday today.
Within six hours it had appeared as named evidence in three separate decisions by the portfolio manager.
The same sweep opened a new position on a two hour old JPMorgan initiation, sized at around three percent of the book, in a sector the desk was light in.
It came with its own invalidation already attached: out if the stock closes back below its 20-day average. That would mean the new coverage is not attracting follow-through and the catalyst has been fully faded.
One detail in that pitch is new and slightly odd to read.
The analyst argued for the trade partly on the desk's own track record, citing a measured figure for how this class of pitch has performed over sixty days. The machine is quoting its own audit back at itself in support of a purchase.
Whether that is discipline or circular reasoning depends on whether the audit was any good. The audit is ours.