Finding
stock-detail-auditor audit on cron run #69 (commit 27361047, 2026-05-28) flagged NVR as a false-positive valuation_output_anomalous case:
stocks/NVR.json:
current_price: $6,098
eps_diluted: $458.86
net_income: $1,237M
shares_outstanding: 2.70M
pe_ratio_ttm: 13.3
risk_flags: [] # NO actual data corruption signal
valuation_warnings: ["valuation_output_anomalous"]
fair_price.median: null
fair_price.methods: [all 6 methods blocked, reason = "valuation_output_anomalous"]
NVR has legitimately high per-share earnings ($458 EPS) and stock price ($6,098) — it's a low-share-count homebuilder, not a XBRL parse error or units bug.
Root cause
compute/valuation/ensemble.py::_has_corrupt_input (called from Site-2 at _data_quality_corrupt_result) fires when ANY of the 6 valuation methods produces an output > FAIR_PRICE_DATA_QUALITY_CEILING (compute/config.py:128):
FAIR_PRICE_DATA_QUALITY_CEILING: Final[float] = 10000.0
For NVR:
multiples_pe = sector_PE × EPS = 22× × $458.86 = ~$10,094
- Exceeds $10,000 ceiling by < 1%
- ALL 6 methods then blocked with
reason: valuation_output_anomalous
fair_price.median = null → /stock/NVR renders empty fair price section
Why the ceiling is too low
The $10K ceiling was originally designed to catch upstream ingestion bugs (e.g., shares_outstanding returned in millions instead of full units, producing per-share metrics 10⁶× too high). It assumed no legitimate per-share fair-value estimate would exceed $10K.
That assumption breaks for genuinely low-share-count tickers:
- NVR (~2.7M shares, $6,098 price) — already over $10K when sector PE applied
- BRK-B (~2.2B shares but Berkshire's Class A BRK-A at $700K+ would be 70× over) — though BRK-A isn't in S&P 500 universe
- Any future low-share-count growth stock entering the S&P 500
The current ceiling fires on outputs that exceed $10K, not on inputs that are clearly corrupt. A $458 EPS isn't a corruption signature — but the multiplied output trips the guard.
Recommended fix paths (methodology-scientist verdict required)
Option A: Raise the ceiling to $50K (lazy fix)
FAIR_PRICE_DATA_QUALITY_CEILING: Final[float] = 50000.0
Covers NVR + a 5× safety margin against the next legitimate high-priced ticker. The ceiling remains as a coarse upstream-bug catch.
Option B: Make it relative to current_price (semantic fix)
FAIR_PRICE_DATA_QUALITY_CEILING_RATIO: Final[float] = 5.0 # output / current_price
# Fires if fair_price > 5× current_price, regardless of absolute level
This is the original "$10K vs typical $50-500 price" intent expressed as a ratio. NVR's $10,094 / $6,098 = 1.66× is well within a 5× ratio. APP's $34 against $568 = 0.06× — but the existing extreme-method bands already catch that case.
Option C: Split into input vs output ceilings (most rigorous)
- Input ceiling on
revenue / shares, book_value / shares (catches the millions-vs-full-units bug at the source)
- Output ceiling removed (let
extreme_*_estimate annotates do their job)
- Site-2 emission becomes input-derived only — Site-1 already covers this
Acceptance criteria (any fix)
Impact (display-only, not a scoring regression)
- ✅ Composite scores / rankings UNAFFECTED — NVR composite score = 55.78, rank computed correctly (no veto)
- ✅ Rule 16 invariant UNAFFECTED
- ❌
/stock/NVR UI displays empty fair price — users see no Fair Price card content, no MoS estimate
- ❌
extreme_estimate_majority annotate also fires (5 of 6 methods triggered the per-method extreme guard before Site-2 fired) — so even if Site-2 ceiling is fixed, NVR may still show all-method-extreme warnings
Spawn target
methodology-scientist (opus) — academic verdict on Option A vs B vs C. Cite Damodaran 2019 Investment Valuation 3rd ed. on appropriate fair-value upper bounds + Huber 1981 §1.4 on robust estimators (the per-method extreme bands are already doing the Huber breakdown protection — Site-2 doesn't need to repeat it).
References
cc related: issue #130 (Q3 2026-08-19 cohort audit — could fold NVR ceiling decision in)
Finding
stock-detail-auditoraudit on cron run #69 (commit27361047, 2026-05-28) flagged NVR as a false-positivevaluation_output_anomalouscase:NVR has legitimately high per-share earnings ($458 EPS) and stock price ($6,098) — it's a low-share-count homebuilder, not a XBRL parse error or units bug.
Root cause
compute/valuation/ensemble.py::_has_corrupt_input(called from Site-2 at_data_quality_corrupt_result) fires when ANY of the 6 valuation methods produces an output >FAIR_PRICE_DATA_QUALITY_CEILING(compute/config.py:128):For NVR:
multiples_pe = sector_PE × EPS = 22× × $458.86 = ~$10,094reason: valuation_output_anomalousfair_price.median = null→/stock/NVRrenders empty fair price sectionWhy the ceiling is too low
The $10K ceiling was originally designed to catch upstream ingestion bugs (e.g.,
shares_outstandingreturned in millions instead of full units, producing per-share metrics 10⁶× too high). It assumed no legitimate per-share fair-value estimate would exceed $10K.That assumption breaks for genuinely low-share-count tickers:
The current ceiling fires on outputs that exceed $10K, not on inputs that are clearly corrupt. A $458 EPS isn't a corruption signature — but the multiplied output trips the guard.
Recommended fix paths (methodology-scientist verdict required)
Option A: Raise the ceiling to
$50K(lazy fix)Covers NVR + a 5× safety margin against the next legitimate high-priced ticker. The ceiling remains as a coarse upstream-bug catch.
Option B: Make it relative to current_price (semantic fix)
This is the original "$10K vs typical $50-500 price" intent expressed as a ratio. NVR's $10,094 / $6,098 = 1.66× is well within a 5× ratio. APP's $34 against $568 = 0.06× — but the existing extreme-method bands already catch that case.
Option C: Split into input vs output ceilings (most rigorous)
revenue / shares,book_value / shares(catches the millions-vs-full-units bug at the source)extreme_*_estimateannotates do their job)Acceptance criteria (any fix)
/stock/NVRfair_price.medianis non-null for NVRmethodology-scientistMode B verdict approves the chosen path against Damodaran 2019 + Penman 2013 principlesImpact (display-only, not a scoring regression)
/stock/NVRUI displays empty fair price — users see no Fair Price card content, no MoS estimateextreme_estimate_majorityannotate also fires (5 of 6 methods triggered the per-method extreme guard before Site-2 fired) — so even if Site-2 ceiling is fixed, NVR may still show all-method-extreme warningsSpawn target
methodology-scientist(opus) — academic verdict on Option A vs B vs C. Cite Damodaran 2019 Investment Valuation 3rd ed. on appropriate fair-value upper bounds + Huber 1981 §1.4 on robust estimators (the per-method extreme bands are already doing the Huber breakdown protection — Site-2 doesn't need to repeat it).References
e6013bae, 2026-05-26) — renamed Site-2 emission tovaluation_output_anomalous(the rename is correct; the threshold is the issue)compute/valuation/ensemble.py::_has_corrupt_input/_data_quality_corrupt_resultcompute/config.py:128—FAIR_PRICE_DATA_QUALITY_CEILINGstocks/NVR.jsonon cron docs(skill): frontend-design-system — capture chip / badge / palette rules #69 — the empirical casestock-detail-auditoron cron docs(skill): frontend-design-system — capture chip / badge / palette rules #69 (commit27361047, 2026-05-28)cc related: issue #130 (Q3 2026-08-19 cohort audit — could fold NVR ceiling decision in)