# FIN-2 — capacity.py studies the ceiling and nothing studies the FLOOR: no gate says how small an account may be before the traded book stops being the validated book

status: open · raised 2026-09-10 (external financial review F3, numbers re-derived — the review's own figures were wrong, see `research/2026-09-09_financial_review_verification.md`) · class: execution fidelity · judgement: **YES** · effort ~0.5 pd · horizon: binds today at $13.7k; binds harder at the December 25% deployment

---

**Plain-language summary.** A 50-name book on a small account produces
positions too small to matter. They cannot move the P&L, but they still pay a
spread every time they are touched. Somewhere below a certain account size the
strategy being validated and the strategy being traded stop being the same
object — which is exactly the failure `execution-fidelity-gap` exists to
prevent, arriving through a different door. The repository has a study of the
capacity CEILING (`backtest/capacity.py`: at what AUM does flat-10bps break)
and no study of the floor.

## Ground truth — measured, and NOT as the review reported it

Target weights from `results/weights_history.parquet` (latest rebalance
**2026-03-02** — note this is the frozen research snapshot, six months stale
against the live book; the review multiplied it by live equity, which mixes a
research artifact with a live account), at $13,740:

- 50 names, gross 0.4728, **median position $95.90**
- smallest **SATS $26.67**; nothing below $20
- 24% under $50, 54% under $100

The review's figures (median $61.65, "MRNA $1.82", 26% under $20) do not
reproduce, and its SNDK example read a portfolio weight as a share count. Its
conclusion that "roughly a quarter of the book is pure cost" is **not
supported**. What is real: a ~$96 median position against a ~47.3 bps TCA
median is a meaningful cost fraction, and the live book carries **67 positions
against a 50-name target**.

## Fix shape (propose-only)

Compute the floor properly — from the LIVE book, not stale research weights —
and pin it as a pre-registered gate of the form *no sleeve trades a target book
whose median position is below $X*, with X derived from the measured spread
cost at which a position's expected contribution is dominated by its round
trip. Then either fund to clear it or cut the name count until it clears.

## Test design + negative control

A fixture book whose median position sits below the floor must fail the gate;
one just above must pass. **Negative control:** widen the floor to zero and
assert the failing fixture stops failing.

## Kill criterion (pre-registered)

If the measured floor lands below the current account equity, the gate is built
anyway (it costs little and binds later, at the December deployment) but the
row records that it was not binding when written — a gate that never fires is
worth having only if its threshold was set before anyone looked.

## Prior art

`backtest/capacity.py` (ceiling only); memory/execution-fidelity-gap (the class
of failure); the 2026-06-09 audit's min-notional finding (the same failure from
the opposite direction — positions too small to OPEN).
