Thirty-One Signals, Six Bets · part 1 of 10
The prompt was a newspaper story: a private investor running money through several LLM agents, each with a name and a personality. The obvious first move is to build the agents. We built the measuring apparatus first, because the interesting failure mode of this idea is not that the agents lose money — it is that a badly-built backtest will say they made money.
Everything below rests on five properties of the harness. Each exists because its absence produces a specific, well-documented lie.
A strategy is handed a MarketView pinned to one date. It holds no reference to the underlying series and exposes exactly five members: close, history, ret, symbols, today. Reading tomorrow is not something to remember not to do; there is no method that returns it. A test asserts the entire public surface, so adding one would break the build.
A backtest that gates differently from production is testing something other than what will run. The same pure function evaluate(proposal, context, limits, universe) judges every order in replay and in the paper account. The replay engine satisfies the gate's paper-account check with an account id of DU-REPLAY rather than by branching around it.
Accepted orders enter a pending list and are only touched on the next iteration. Unfilled day orders expire, matching the tif="DAY" the broker actually sends.
Both universes were assembled from memory in 2026 and are therefore stacked with survivors. The benchmark is not an index — it is equal-weighting the same names, which carries exactly the same bias. A strategy that cannot beat equal-weighting its own universe is not being helped by survivorship; it is worse than not choosing. The size of the problem is visible: equal-weighting the hand-picked large caps beat SPY by 150 points, and the small caps beat IWM by 226.
Quoted half-spreads were sampled from the live feed across both universes. Cost sensitivity is computed by holding the realised order sequence fixed and recharging it, never by re-running the strategy — re-running changes one fill, which changes every later position, and the resulting rows are not comparable. The anchoring is verified: the reference assumption reproduces the realised return to within 0.04 points (+367.94% against +367.90%).