Known failures

What went wrong, how it was found, and what changed. Everything below is taken from the repository's own notes and commits; each item names its source.

1. Every backtest could see that day's closing price

Decisions run at 12:00 UTC (8 a.m. in New York) and asked the price source for bars "up to now". The source stamps each daily bar at midnight New York, which is earlier than 12:00 UTC, so the decision day's own bar came back, including its close. The written backtesting plan required prior-day prices only; nothing checked it.

2. …and every backtest read that day's news before it happened

The news data carries dates, not times: 99.7% of the timestamps are exactly midnight UTC. The rule "published before the decision" therefore treated a headline dated the same day as already published, even when it was an after-the-close report. At 8 a.m. on Friday 2022-06-03 the sentiment analyst was reading a headline about Apple being the worst stock in the Dow that Friday.

3. Two fine-tuned adapters that did not beat a do-nothing guess

AdapterReported accuracyMajority-class baselineReading
QLoRA on Financial PhraseBank84.0%96.8%below baseline on this project's own headlines
Distilled from the GPT-4o-mini teacher90.9%90.9%exactly the baseline: it predicted HOLD on all 44 held-out rows

One database query explained both: across every backtest the teacher had produced 17 BUY, 3 SELL and 537 HOLD. Distilling a near-constant teacher yields a constant student. A rerun in October 2026 tracked in MLflow showed the PhraseBank adapter does learn its own dataset (91.3% on held-out PhraseBank against 59.3% for always-HOLD); the 84.0% that failed was the transfer to this project's headlines, and that test was not rerun.

Sources: PROJECT.md "Phase 04 — the fine-tuning work"; eval/mlflow/.

4. Other findings of the same kind

Sources: PROJECT.md "The ablation", "A flaw in the pre-registration itself", and the defects table.

What these have in common

None was visible to type checks, linting or re-reading. Each was found by checking a number that looked wrong against the data it came from, and each is now a test or a written practice. The full list is in the project record.