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.