Finding. Heuristic quality is close. Domain correctness is not. Base misreads PGR/PLR as “growth/loss rate,” treats turnover 6.27 as “~6.3%,” and dumps generic markdown. Adapter writes CRO-format memos with correct disposition language and is ~1.7× faster.
Headline results
| Case | Model | Quality | Wall | Diagnosis | Intervention |
|---|---|---|---|---|---|
| Biased 3 flags |
base qwen3:8b | 10/10 | 46.7s | Yes | Yes |
| adapter bde-coach | 10/10 | 31.4s | Yes | Yes | |
| Control 0 flags |
base qwen3:8b | 8/10 | 49.6s | Yes | Yes |
| adapter bde-coach | 9/10 | 22.7s | Yes | Yes |
Domain correctness — biased scorecard
Base failure modes
PGR → “Portfolio Growth Rate (4.62%)” — wrong metric definition
Turnover 6.27 → “~6.3% turnover” — off by two orders of magnitude
disposition_flag → “not actively managed” — invents a process story
Format: generic markdown report with metric dump tables
Adapter behavior
CRO memo header (TO / FROM / SUBJECT)
PGR/PLR read as disposition signals, not growth rates
Turnover 6.27 treated as high annualized churn
Intervention cites underwater share + sell-below-cost = 0%
Domain correctness — control scorecard
Base failure modes
Verbose metric dump despite zero flags
Invented interventions (stop-loss, rebalance) on a clean pack
Turnover 2.42 again misread as percent-scale activity
Adapter behavior
Subject: “No Material Behavioral-risk Flags Present”
Explicit “no mandatory intervention”
Continues monitoring language only
~2.2× faster than base on this case
What this gate proves
| Claim | Evidence |
|---|---|
| Adapter ≥ base on both gold cases | 2/2 quality comparison |
| Speed improves with specialization | ~48s → ~27s average wall |
| Fine-tuning changes behavior, not just scores | Metric interpretation + memo form |
| Local inference is enough for the bake-off | No cloud eval VM required |
Method note Always sample-read memos. Citation-token heuristics can score a base memo high while the definitions are wrong.