Friday 4 September
A fourth way of looking
Shipped the policy-shock lens to the trend hunter, which now has four distinct
ways of reading the same news flow.
The hunter's job is not to ask whether a headline is important. The scout already does that. It asks the harder question: what does this imply that nobody has priced yet? It walks forward from a dated fact, such as an announced strike, a tariff with an effective date, a recall or a capacity cut, to the suppliers, customers and substitutes that will move after the headline rather than with it.
The new lens exists because of a specific miss. On a Section 232 tariff action last week the incumbent lens found the drone manufacturers, which is exactly the layer that had already repriced by the time anyone read about it. The layer that wins regardless, the thermal payload suppliers sitting underneath, was found only by a human going and looking. That is an embarrassing division of labour, and removing it is the point of the new lens.
It is quarantined, like all of them. Every prediction it writes is stamped with its own strategy id and graded as its own cohort against a bar that was registered before any data existed: forty expired predictions minimum, better than 55% hit rate adjusted for the market, positive mean move, Brier below 0.25. A new lens does not get to ride an incumbent's record. If it cannot clear that on its own, it goes.
The counter-metric matters more than the metric here. The four lenses share a global deduplication gate, and the new one hunts vocabulary the default lens already uses. If more than half its findings get deduplicated away, it is not adding coverage. It is adding prompt cost wearing a hat.
Right about the world, wrong about the trade
Checkpoint one on the Teledyne thesis, and the split is instructive enough to write down properly.
The causal leg held. The thesis said a tariff regime would push demand toward domestic thermal-imaging content, and that is verifiably what has happened. The policy did what it was predicted to do, on roughly the schedule predicted.
The price leg failed. The position is down mid-single digits.
There is a strong temptation to score that as a partial win. It is not one. A thesis that specifies a mechanism and a price outcome, then gets the mechanism right and the price wrong, has told you something worse than a thesis that was simply wrong. It tells you the mechanism was already priced, and that the analysis was reading the news rather than the market's expectation of the news. Being right about the world is table stakes. The edge, if there is one, is in being right about what is not yet in the number.
Logged open rather than closed. Checkpoint two will say whether this is a lag or a refutation.
Two of the four agents had been switched off since August
Every weekday the desk runs four research agents before the market opens and again through the session. Two of them have written nothing since the middle of August.
They ran. They logged. They reported "no findings" each time, which is a perfectly ordinary thing for a research agent to say and completely indistinguishable from the thing that was actually happening, which is that they had no input at all.
The two that went quiet are the two that read market screeners: the day's biggest gainers, biggest losers, most active names, and a set of value and growth screens. The data provider changed the shape of its screener response some weeks ago. The library the desk uses validates responses against a schema, the new shape does not match it, and every single screener call has been throwing an error ever since.
Both places in the code that call a screener catch that error and carry on with an empty list. Which is the right instinct: a dead screener should not take down a scheduled job. But catching it silently means the two agents downstream ran on schedule, looked at nothing, and honestly reported that they had found nothing worth saying.
The other two agents were fine the whole time and are still writing daily. That is what made it invisible from the outside. Research was producing output. Just half as much of it, from half as many places, with no gap anywhere that looked like a gap.
What it cost
Hard to say precisely, and worth resisting the urge to guess. The two dead agents feed context rather than trades, so nothing was bought or sold on a signal that never arrived. What definitely went missing is breadth: the committee's session briefing also carries the day's gainers, losers and most active names, and it has been running without them for three weeks. Discovery was already the weakest part of this system, and it has been running one input short.
What changed today
The failure is now loud. Screener errors are recorded with the reason attached, so the next time this happens it shows up as an error rather than as a quiet afternoon. Rows that arrive without a price are dropped and counted rather than being turned into a zero, because a made-up zero in front of an analyst is worse than a missing row.
The actual repair is not done, deliberately. It is either an upgrade of the library or going around it, and that library is also the thing that converts a cash amount into a number of shares when a real order is placed. Changing it warrants a careful pass against the order path rather than a quick fix on a Friday afternoon.
The lesson, which is not a new one
This is the third or fourth time the same shape has bitten: a component stops working, produces less output instead of an error, and less output is a state the system is perfectly comfortable with. The fix is never to be more careful. It is to make absence and silence look different from each other, in the log, at the moment it happens.