# Maintainer verification — external financial review, 2026-09-09

Companion to `research/2026-09-09_external_financial_review.md` (committed
verbatim, unedited). Same treatment the 2026-09-05 design review got: every
finding re-derived against the repo before anything was acted on, because that
review's ranking changed once its claims were measured.

Verified 2026-09-10 by the owner-side interactive session at `562cb7a`.
**Nothing here disputes the review's conclusion, which is correct and which
this project's own records already reached.** What follows is the arithmetic.

## Summary

| finding | severity claimed | verdict | note |
|---|---|---|---|
| F1 README advertises retired numbers | critical | **CONFIRMED** (prose) / evidence misattributed | the cited test line is an unrelated `ops/` check — but no test read the root README at all |
| F2 Kelly vs vol-target, "a constant is deciding" | high | **MECHANISM REAL, HEADLINE FALSE** | the cap has never bound: 20 sessions, max scalar 2.688 vs 3.0, at-cap count **0** |
| F3 book below minimum viable size | high | **RIGHT QUESTION, NUMBERS WRONG ~2x** | one figure is a weight read as a share count |
| F4 OK verdict at live Sharpe -1.33 | medium-high | **CONFIRMED** | with one qualification the review omits |
| F5 benchmark is SPY, should be a momentum proxy | medium | **CONFIRMED** | the most valuable forward item |

## F1 — confirmed in substance, wrong in citation

Confirmed exactly: `README.md:41` read *"CPCV PBO 50%, mean OOS Sharpe 0.624,
IS-OOS correlation +0.02, 15/15 positive OOS paths"*, and its last commit was
**2026-05-25 19:00**, five days before the 05-30 leak fix that made those
numbers harsher.

**Misattributed evidence.** The review cites
`tests/test_docs_consistency.py:500` as explicitly exempting `README.md` from
coverage. That line is `infra = {"ROUTINES.md", "README.md"}` inside
`test_every_audit_procedure_is_registered`, which globs `ops/*.md` and excludes
a directory doc — `ops/README.md`, which **does not exist**. It has nothing to
do with the root README.

The conclusion survives the correction and is arguably worse than stated:
`grep` for any test reading the root README returns **nothing**. It was not
exempted from a guard; there was no guard.

**Acted on** (this PR): README rewritten to the current figures with the
timing-luck spread and the forward evidence beside them, plus two pins —
`test_readme_does_not_quote_retired_validation_figures` and
`test_readme_validation_numbers_agree_with_claude_md`. Negative control run and
shown: both fail against the old text, pass against the new.

## F2 — the mechanism is real; the load-bearing sentence is not

Live snapshot values are as quoted (`gross_leverage` 0.2943, `vol_scalar`
2.6883, `max_leverage` 3.0, which `config/settings.yaml:179` confirms "caps the
vol-target scalar only").

The review's escalation — *"this is not a cap that occasionally binds, it is the
binding constraint in the current regime"* — does not survive measurement.
Across the last 20 sessions of `data/processed/portfolio_snapshots.jsonl`:

```
vol_scalar  min 2.33   max 2.688   at-cap (>=2.999): 0
```

The cap has **never bound**. Sizing is being set by the two risk models as
designed. The scalar sits at ~90% of ceiling, so the concern is well-aimed at a
condition one quiet regime away — but it is a forecast, not an observation, and
the finding is written as an observation.

The review's *other* F2 argument needs no cap at all and is the durable one:
half-Kelly requires an edge estimate you believe; at DSR 0.611 the edge is
statistically indistinguishable from zero; sizing on that estimate and then
levering it 2.7x compounds estimator noise rather than managing risk. Filed as
FIN-1 on that argument, not on the cap.

## F3 — right question, wrong numbers

The only target-weights artifact in the repository is
`results/weights_history.parquet`, whose latest rebalance is **2026-03-02** —
the frozen research snapshot, six months stale against the live book.
Multiplying those weights by today's live equity mixes a research artifact with
a live account. Doing exactly that, at $13,740:

| review | measured |
|---|---|
| median position $61.65 | **$95.90** |
| smallest MRNA $1.82 | **SATS $26.67** (MRNA is not in the book) |
| 26% of positions under $20 | **0%** |
| 48% under $50 | 24% |
| 70% under $100 | 54% |

The SNDK example — *"SNDK at $4.14 (0.0026 shares at $1,566/share)"* — reads a
**portfolio weight as a share count**. `thales inspect holdings` prints a weight
column summing to 0.4728; SNDK's 0.002584 is $35.50, not $4.14.

So "roughly a quarter of the book is pure cost with no capacity to contribute"
is not supported: nothing is under $20. What does survive: a ~$96 median
position on a $13.7k account is thin, 54% sit under $100, and the live book
does hold **67 positions against a 50-name target** (independently verified
before this review was read; it is the parity-pinned deviation where the engine
caps weighted turnover and live caps name churn, `daily.py:785`).

The review's *recommendation* survives its numbers intact and is worth doing:
`capacity.py` studies the ceiling and nothing studies the floor. Filed as FIN-2
with instructions to re-derive from the live book.

## F4 — confirmed, with a qualification the review omits

The ledger reads exactly as quoted: `INSUFFICIENT_DATA n=56` on 09-01, `OK
n=61` on 09-09, live Sharpe -1.70 -> -1.33. Nothing about the evidence
improved; the sample crossed an integer and the label changed.

Omitted: no machine reads that OK as a pass. The go-live gate evaluates a
separate criterion, `forward_sharpe_lower`, which **fails** (95% lower -5.456 <
0). The false-reassurance risk is to a human skimming a verdict word, not to
the gate. That lowers the severity but not the fix, and the review's timing
point is sharper than its finding: make the change **before** December, so it
is never a change made while looking at the result. Filed as FIN-3.

## F5 — confirmed, and the item with the most value per unit of effort

`MTUM` appears nowhere in the repository except one 2026-05-29 AFK transcript.
`benchmark: "SPY"` at `config/settings.yaml:117` and `:303`. No gate anywhere
requires beating a momentum proxy; the SHIP gate is Sharpe, PBO, IS-OOS
correlation and survivorship-free confirmation.

The framing is correct and uncomfortable: the project could clear every gate it
has written and still be strictly dominated by a one-line ETF purchase, and
nothing in the harness would say so. Filed as FIN-4.

## One rhetorical slip

The review calls IS-OOS correlation -0.281 *"anti-predictive ... the textbook
signature of a search that has fit noise"*, then concedes two sentences later
that the C2 null calibration measured no-skill books at median |corr| **0.443**.
Those do not sit together: at -0.281 this book is **less** extreme than a random
one, so the figure is consistent with no skill rather than evidence of
noise-fitting. The review has it right in the concession and wrong in the
rhetoric — which is the exact error the C2 memo was written to prevent, and
worth naming because a future reader will quote the sentence, not the caveat.

## Pattern worth recording

Three of five findings carry a citation or arithmetic error (F1's test line,
F2's cap claim, F3's dollar figures), while every prose judgement in the review
is sound and the two conclusions that matter most — the front door, and the
missing factor benchmark — are correct and were not visible from inside. Read
future external reviews the same way this one was read: **the reasoning is the
product; verify every number before acting on it.**
