Monday 7 September
No findings, every day, for a fortnight
Two of the four research agents have not produced a single finding since the middle of August. Not few. None, both, every day of the window we keep data for.
They report this as "no findings", which is also what they say on a quiet Tuesday.
The two are sector rotation and technical breakout, and they share one input: a Yahoo endpoint that returns the day's biggest movers. Yahoo changed the shape of that response some time before 14 August. The library we use checks every response against a stored description of what it should look like, the description no longer matched, and every call has thrown an error since.
We noticed the failures in August and fixed the silence. They now write a warning, which is the only reason today went differently. We did not fix the calls.
The bug is one line long. The function takes three arguments:
screener(query, queryOverrides, moduleOptions)
The option that turns the schema check off was going in as the second argument, where it is read as part of the query and quietly discarded. It only does anything in the third. The code looked like it disabled the check. It said so in a comment. It did not disable the check.
Fixed, and verified against the live endpoint rather than a mock. Gainers, losers and most-active all return real rows again.
The diagnostic script is the worse half of this. It lists findings per agent, and it skipped any agent whose count was zero. An agent that stops working therefore does not show up as a zero. It drops out of the output altogether. For fourteen days the daily check printed three healthy agents and gave no sign that there were meant to be more.
A dead agent looked exactly like an agent that had never existed.
That is fixed too. The fix is to print the zero.
This is the fourth time we have written down the same shape:
| When | What went quiet | How it read |
|---|---|---|
| July | the conviction bar, under an unchanged model name | fewer signals |
| July to August | quotes serving the previous session's close | a real move |
| September | a findings table collapsing rows it could not explain | tidier output |
| August to September | two research agents | no findings |
Each was something going quiet in a system where quiet is a legitimate answer, and we have no general defence against it beyond printing more zeroes.
The rest of the day was Labor Day, so the US market was shut and the desk knew. It sat still, took one small technical exit at a loss of about 1%, and refused three pitches. The third refusal is worth reading in the manager's own words, because this is the bit of the machine we actually trust:
The catalyst (China curbing rare-earth shipments) is sourced only to Stocktwits and AD HOC News, tier-3/social aggregators, not a wire confirmation (Reuters/Bloomberg), and the pitch itself hedges with 'reportedly,' which is a material data-quality gap for a claim this size.
Refusing a rumour is the least dramatic thing a trading system can do and it is most of what we want from it.