Most tools hand you a score and ask you to trust it. We do the opposite. Our AI ranks companies 0–100 on relative health and quality today — and before any relationship is published, it has to pass a full out-of-sample validation battery. If it does not pass, we say FAIL or INSUFFICIENT_DATA and we withhold the part that did not hold up. Right now 0 cells have earned a VALIDATED label — and we show you exactly that.
Passed every gate out-of-sample. Decile rank is monotone, IC is positive and t-significant after Newey-West, PBO is low, and the Deflated Sharpe survives multiple-testing correction. Only here do we publish a relationship.
Tested honestly and did not clear the bar. We say so plainly and withhold the score relationship. A FAIL is information, not an embarrassment — it stops us from selling a result that is not there.
Not enough point-in-time history to run the full battery to significance. No verdict is asserted until the panel is deep enough. We never round INSUFFICIENT up to VALIDATED.
Measured against a survivorship-safe point-in-time lake that is not committed to this repository. Every statistic on this page comes from it, and the run is pinned by an evidence hash.
docs/build/validation/_D4_VERDICT_SUMMARY.json · verdicts[cell=equity/US]
The same frozen gate, re-executed at build time against the artifact this repository DOES carry — a membership/identity universe with no forward-return series. It fails closed rather than reuse the recorded numbers, which is why it reads INSUFFICIENT.
Every number on this page is read from a committed artifact rather than typed into it. These two carry the whole derivation with them: the artifact and pointer the value came from, the exact transformation applied to those bytes, a keyless route to the same file, and the provenance hash anchored in an append-only chain — so the figure cannot be quietly restated later without the surface saying so.
Mean cross-sectional IC — equity/US, recorded rank-validation run: 0.010236573658359088
docs/build/validation/_D4_VERDICT_SUMMARY.json at verdicts[cell=equity/US].battery.ic.meanIc
as-of 2026-09-04T04:18:20.056Z
Per rebalance cross-section: drop every row whose engine score, forward return or benchmark return is non-finite (dropped, never filled with a zero), form alpha = forwardReturn - benchmarkReturn, and take the Spearman IC as pearson(rank(score), rank(alpha)) with average-rank tie handling. A cross-section left below the breadth floor after those drops is skipped and counted, not padded. meanIc is the unweighted arithmetic mean of the resulting per-date IC series over the usable dates; no winsorization, no standardisation, no re-scaling, no sign flip.
Mean cross-sectional IC — equity/US, recorded rank-validation run
Source: SherpaQuant — own published record
curl -sS 'https://sherpaquant.ai/api/provenance/artifact?path=docs%2Fbuild%2Fvalidation%2F_D4_VERDICT_SUMMARY.json'
Per rebalance cross-section: drop every row whose engine score, forward return or benchmark return is non-finite (dropped, never filled with a zero), form alpha = forwardReturn - benchmarkReturn, and take the Spearman IC as pearson(rank(score), rank(alpha)) with average-rank tie handling. A cross-section left below the breadth floor after those drops is skipped and counted, not padded. meanIc is the unweighted arithmetic mean of the resulting per-date IC series over the usable dates; no winsorization, no standardisation, no re-scaling, no sign flip.
curl -sS 'https://sherpaquant.ai/api/provenance/artifact?path=docs/build/validation/_D4_VERDICT_SUMMARY.json' | python3 -c "import json,sys; d=json.load(sys.stdin)['artifact']; print([c for c in d['verdicts'] if c['cell']=='equity/US'][0]['battery']['ic']['meanIc'])"
Caveat: This reproduces the PUBLISHED FIGURE from the recorded measurement: you get the same artifact we read and can apply the same pointer. It does NOT re-run the measurement. The point-in-time panel behind it is assembled from licensed vendor data we may not republish, so an independent re-run needs your own licences — that half is stated, not hidden. The artifact also carries every gate this run FAILED, which is the point of publishing it.
anchored in the figure ledger ✓ seq 1 · 2026-09-04
provenance hash: 3a2a11c95acb1d674f01f65aa286178425543b6d5cef65f3bbbbaa4aa31540a7
This figure has been published 2 times; every prior value stays in the chain.
Mean cross-sectional IC — equity/EU, recorded rank-validation run
No figure is published for methodology.equity-eu.mean-ic, so there is nothing to reproduce. The recorded run measured no IC for equity/EU (verdict INSUFFICIENT_DATA); it names 9 blocker(s): no_survivorship_safe_forward_return_panel, pit_universe_eligible_for_direct_scoring_0, survivorship_coverage_missing_no_delisting_history, no_forward_return_series_in_artifact, no_historical_engine_score_panel, region_partition_unavailable_pending_pit_security_master, artifact_limitation: Direct eligibility fails closed for rows without joined delisting state., artifact_limitation: Direct eligibility fails closed or is downgraded when core FIGI/ISIN/CUSIP or MIC identifiers are missing., artifact_limitation: Local bridge universe remains current-membership only until a complete licensed PIT security master is joined..
figure: methodology.equity-eu.mean-ic · refused: VALUE_WITHHELD
| Gate | Frozen threshold | What it enforces |
|---|---|---|
| Deflated Sharpe probabilitystricter: min | ≥ 0.95 | Sharpe deflated for the number of trials searched must clear this probability — the anti-overfitting hardgate. Below it, no relationship is published. |
| PBO · probability of backtest overfittingstricter: max | ≤ 0.25 | Combinatorially-symmetric CV over S=16 blocks; a high PBO means the config likely overfit in-sample. |
| IC Newey-West t-statstricter: min | ≥ 3.0 | Cross-sectional IC must be significant after HAC autocorrelation correction — a raw t is not enough. |
| Mean cross-sectional ICstricter: min | > 0 | Spearman IC mean must be strictly positive (strict >, no epsilon fudge baked into the frozen value). |
| Decile monotonicitystricter: on | required · 0 adjacent violations | Adjacent-decile rank staircase must be monotone out-of-sample, with top−bottom alpha > 0. |
| Beat all baselines (B0–B3)stricter: on | required · ≥ 0.005 IC margin | The engine must strictly beat every evaluable Occam baseline rung by the IC margin — no credit for merely matching a trivial baseline. |
| Minimum observations (data floor)stricter: min | ≥ 24 dates · ≥ 1000 obs · ≥ 30/section | A credible NW-t and cross-sectional IC need enough rebalance dates and per-date breadth; below the floor the gate fails closed. |
| Factor family | Source families | Required sources |
|---|---|---|
| Valuelong · 3M · 6M · 12M | fundamentals, filings, prices | SEC EDGAR data.sec.govFinancial Modeling PrepEODHD |
| Quality and Profitabilitylong · 3M · 6M · 12M | fundamentals, filings | SEC EDGAR data.sec.govFinancial Modeling Prep |
| Investment, Issuance, and Accrualsboth · 6M · 12M | fundamentals, filings, corporate_actions | SEC EDGAR data.sec.govFinancial Modeling Prep |
| Momentum and Reversalboth · 1M · 3M · 6M · 12M | prices, factors | EODHDKenneth French Data Library |
| Low Risk, Volatility, and Tail Lossboth · 1M · 3M · 6M | prices, options | EODHDcboe-or-options-source· INACTIVE |
| Options and Dark Pool Positioningboth · 1M · 3M | options | Unusual Whales |
| Short, Borrow, and Squeeze Realismshort · 1M · 3M | short_interest, options, prices | finra-or-short-source· INACTIVEUnusual WhalesEODHD |
| Insider, Congress, and 13F Ownershipboth · 3M · 6M · 12M | ownership, filings | SEC EDGAR data.sec.govFinancial Modeling PrepUnusual Whales |
| Macro and Regime Contextcontext · 1M · 3M · 6M · 12M | macro, factors | Federal Reserve Economic DataKenneth French Data LibraryAQR Data LibraryRobert Shiller / Yale data |
| News, Sentiment, and Estimate Revisionsboth · 1M · 3M | sentiment, fundamentals | Financial Modeling Prepnews-source· INACTIVE |
The composite engine score was measured out-of-sample on a survivorship-safe point-in-time panel and recorded FAIL. Its mean cross-sectional Information Coefficient is 0.010236573658359088 — positive, but its Newey-West t of 2.0657680067616 sits below the frozen bar of ≥ 3, so the ordering is not distinguishable from noise. That is the efficient-market ceiling on liquid US large-caps, not a bug to patch — and it is why no score on this product is sold as a forecast.
Rank correlation between the score and the forward return, averaged across rebalance dates. Above zero means the ordering carries information; how far above zero is the whole question.
verdicts[cell=equity/US].battery.ic.meanIc
verdicts[cell=equity/US].battery.ic.icir
We never emit a directional trade instruction. Direction did not validate, so we do not sell it.
No calibrated "X% chance of outperformance." That number would imply a validated edge we do not have.
No "+8% to +14% expected" bands. Return calibration failed the gate.
No forward-looking score sold as a forecast. Our 0–100 is relative health today, not a prediction.
verdicts[cell=equity/US].data_used.totalObservations
verdicts[cell=equity/US].data_used.rebalanceDatesUsable
verdicts[cell=equity/US].data_used.rebalanceDatesAvailable
verdicts[cell=equity/US].data_used.survivorshipSafe
| Competitor | Category | The essential we match | The white-space gap we cover |
|---|---|---|---|
| BBloomberg · FactSet · LSEG | Institutional terminals | Cross-asset breadth, real-time data & news, portfolio analytics in one searchable surface | →We bring the rigor at a consumer price — a graded edge inside an IN_VALIDATION envelope, not a $32k black box |
| KKoyfin | Retail terminal-lite | Polished custom dashboards, 10-yr financials, screeners, macro | →We add an openly-validated AI edge on top of data-display — opinion you can audit |
| DDanelfin · Seeking Alpha | AI stock scoring | Explainable 1–10 / factor-grade scores with per-ticker subscores | →They market un-audited win-rates; we wrap every edge in IN_VALIDATION and publish the honest US-equity FAIL |
| SSimply Wall St | Visual fundamentals | The Snowflake radar — company-at-a-glance fundamentals | →Single-stock only; we fuse cross-asset + flow + smart-money under one validated lens |
| ffintwit.ai | Social sentiment + AI | Buy/sell signals + sentiment from hundreds of analysts, AI digests | →Advertises un-audited returns; we frame every signal inside the validation envelope |
| FFinviz | Mechanical screener | 70+ filter screener, real-time quotes, signature heatmap | →Purely mechanical filtering; we layer a graded, honest verdict over the screen |
| UUnusual Whales | Options flow | Real-time full-market options flow, dark-pool, heatmaps | →Single-lens raw firehose; we fuse flow into one cockpit alongside every other signal |
| WWhaleWisdom · Dataroma · Quiver | Smart-money / alt-data | 13F tracking, superinvestor holdings, congress/insider/alt-data dashboards | →Each is single-lens; we fuse smart-money + alt-data into one graded view |
| TTradingView | Charting | Gold-standard interactive charting, indicators, alerts | →Charting + social ideas; we build institutional cockpits around the chart |
| PPublic.com | Brokerage UX | Modern multi-asset brokerage app + light AI themes | →Execution + light AI; we add terminal-grade research and a validated edge |
The IN_VALIDATION envelope + a Methodology page showing 0 validated cells and the honest US-equity result. No competitor publishes this.
Retail investor, active trader, and UHNWI advisor served in one product — the market is otherwise persona-segmented.
A graded edge spanning asset classes and signal types, where every edge competitor is single-lens.
One surface collapses what serious users stitch from six vendors — no tab-hopping between flow, 13F, charting and scoring.
Terminal-grade density + AI-ALPHA fusion at a consumer subscription — the missing middle between $12–32k terminals and shallow retail apps.
Every battery run freezes its inputs and emits a 64-character evidence hash. The hash pins the data window, the config and the per-gate verdicts, so the same result can be reproduced and audited rather than taken on trust. Both hashes below are read from docs/build/validation/_D4_VERDICT_SUMMARY.json — neither is typed into this page.
Publishing only the survivors is what makes a track record look inevitable, so this is the other half of the file. Each entry states the hypothesis, the test that killed it, the window, the universe, the sample size, the config hash and the verdict — and every one of those values is read out of a committed artifact in this repository at the pointer printed beneath it. Nothing here is typed by hand. Where an artifact does not record a field we print INSUFFICIENT_DATA and say which artifact is silent, rather than borrowing a plausible value from a neighbouring run.
A return figure we measured, published, and then withdrew when the same cell was re-run on a clean holdout.
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].cagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].totalReturnPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].buyAndHoldCagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].beatsBuyAndHold
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].sharpeRatio
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].validationState
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].inSampleContaminated
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosStart
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosEnd
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBars
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosTrades
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].pbo
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].dsrProbability
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.start
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.end
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.tradingDays
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.minTradingDaysGate
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.universeSize
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.universeCoverage
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.benchmark
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.sharpe
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.note
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsRun
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsWithResult
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.validated
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.beatingBuyAndHold
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#commit
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#command
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#generatedAt
No return figure survives a clean holdout. The full-sample numbers are in-sample contaminated (parameters fitted on the first 70% of the reported window); the out-of-sample numbers rest on 0-5 trades over 83 bars.
src/lib/marketing/published-figures.ts#NO_PUBLISHABLE_RETURN.reason
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosCagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosTotalPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBuyAndHoldCagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBeatsBuyAndHold
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosSharpe
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].holdoutDegenerate
sources · reports/headline-candidates/2026-07-31T16-09-36-501Z.json · src/lib/marketing/published-figures.ts
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].ticker
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].strategy
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].pbo
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].dsrProbability
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].cagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBars
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosTrades
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosCagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBuyAndHoldCagrPct
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].inSampleContaminated
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.start
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.end
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.tradingDays
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.minTradingDaysGate
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.universeSize
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.universeCoverage
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.benchmark
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.sharpe
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.note
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsRun
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsWithResult
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.validated
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.beatingBuyAndHold
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#commit
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#command
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#generatedAt
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBeatsBuyAndHold
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED,oosBeatsBuyAndHold=true].ticker
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED,oosBeatsBuyAndHold=true].oosTrades
reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.medianCagrPct
sources · reports/headline-candidates/2026-07-31T16-09-36-501Z.json
The engine score itself, run against the frozen gate on the deep point-in-time panel.
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.meanIc
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.engineBeatsAll
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.marginOverBest
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.bestEvaluableIc
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.neweyWestT
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.icir
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.monotonic
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.adjacentViolations
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.topMinusBottomAlpha
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.pbo.pbo
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.dsr.deflatedSharpeProbability
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.dsr.trials
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.dateRange
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.source
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.survivorshipSafe
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.totalObservations
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.rebalanceDatesUsable
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.datesUsed
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.caveats
docs/build/validation/_D4_VERDICT_SUMMARY.json#configHash
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].evidence_hash
docs/build/validation/_D4_VERDICT_SUMMARY.json#generatedAt
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].verdict
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].failed_gates
sources · docs/build/validation/_D4_VERDICT_SUMMARY.json
Signal families with enough history to face the full battery — Information Coefficient, decile monotonicity, overfit probability, deflated Sharpe, and a baseline ladder.
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].pbo_configs
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].present_observations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.meanIc
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.neweyWestT
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.icir
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.decile.monotonic
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.decile.adjacentViolations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.pbo.pbo
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.dsr.deflatedSharpeProbability
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.baselines.engineBeatsAll
docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.1
docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.3
docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.6
docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.12
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.dateRange
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.source
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.survivorshipSafe
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source
docs/build/validation/D46_VALUE_IC_LARGECAP.json#symbols
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.totalObservations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.rebalanceDatesUsable
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.datesUsed
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.caveats
docs/build/validation/D46_VALUE_IC_LARGECAP.json#panelRows
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].evidence_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].verdict
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].failed_gates
sources · docs/build/validation/D46_VALUE_IC_LARGECAP.json · docs/build/validation/_D4_PER_FAMILY_SUMMARY.json
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].pbo_configs
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].present_observations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.meanIc
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.neweyWestT
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.icir
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.decile.monotonic
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.decile.adjacentViolations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.pbo.pbo
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.dsr.deflatedSharpeProbability
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.baselines.engineBeatsAll
docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.1
docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.3
docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.6
docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.12
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.dateRange
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.source
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.survivorshipSafe
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source
docs/build/validation/D46_13F_IC_LARGECAP.json#symbols
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.totalObservations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.rebalanceDatesUsable
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.datesUsed
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.caveats
docs/build/validation/D46_13F_IC_LARGECAP.json#rowsWithFlowFeature
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].evidence_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].verdict
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].failed_gates
sources · docs/build/validation/D46_13F_IC_LARGECAP.json · docs/build/validation/_D4_PER_FAMILY_SUMMARY.json
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].pbo_configs
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].present_observations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.meanIc
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.neweyWestT
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.icir
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.decile.monotonic
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.decile.adjacentViolations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.pbo.pbo
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.dsr.deflatedSharpeProbability
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.baselines.engineBeatsAll
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.1
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.3
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.6
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.12
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.dateRange
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.source
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.survivorshipSafe
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#symbolsWithEvents
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.totalObservations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.rebalanceDatesUsable
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.datesUsed
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.caveats
docs/build/validation/D46_ANALYST_IC_LARGECAP.json#gradeEvents
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].evidence_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].verdict
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].failed_gates
sources · docs/build/validation/D46_ANALYST_IC_LARGECAP.json · docs/build/validation/_D4_PER_FAMILY_SUMMARY.json
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].pbo_configs
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].present_observations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.meanIc
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.neweyWestT
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.icir
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.decile.monotonic
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.decile.adjacentViolations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.pbo.pbo
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.dsr.deflatedSharpeProbability
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.baselines.engineBeatsAll
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.1
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.3
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.6
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.12
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.dateRange
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.source
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.survivorshipSafe
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#symbolsWithTrades
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.totalObservations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.rebalanceDatesUsable
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.datesUsed
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.caveats
docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#tradeRows
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].evidence_hash
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].verdict
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].failed_gates
sources · docs/build/validation/D46_CONGRESS_IC_LARGECAP.json · docs/build/validation/_D4_PER_FAMILY_SUMMARY.json
Families whose feature construction was audited and abandoned. The verdict here is the audit’s own signed diagnosis, not a gate result; the disposition field says whether the family is being rebuilt or dropped from the cross-section entirely.
The evaluator (src/lib/signals/families/price_momentum.ts) classifies direction from short-horizon returns: bullish when return_21d_pct > +5% AND return_5d_pct > 0; bearish when return_21d_pct < -5% AND return_5d_pct < 0; neutral otherwise. Strength = clamp(|return_21d_pct*100| * 10, 0, 100). Confidence keys off |21d| >= 7.5%/5% with a 5d co-sign requirement. So the only directional inputs are a 21-trading-day (~1 month) total return and a 5-day total return; volatility_21d_pct is used only for risk_flags/warnings, not direction. PriceMomentumFeatures interface accepts {symbol, as_of, return_21d_pct, return_5d_pct, volatility_21d_pct}, horizon 1M, source fmp-rest. Manifest F7 confirms inputs return_21d_pct/return_5d_pct/volatility_21d_pct.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=price_momentum].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
The family is built on the WRONG portion of the return autocorrelation curve. Single-stock equity returns at the 1-day-to-1-month horizon exhibit SHORT-TERM REVERSAL (Jegadeesh 1990, Lehmann 1990), not continuation. A 21-day winner with a positive 5-day co-sign is, on average, a stock that has just run up and tends to give some back over the next month. Going long the highest 21-day returners (bullish) therefore loads on the reversal effect with the wrong sign, which is exactly what the diagnostic shows: price_momentum 1M IC = -0.005 and 3M = -0.007 (negative/near-zero where a real momentum factor should be positive), drifting only weakly positive at 6M/12M (+0.001/+0.006) as the formation window starts to overlap the genuine intermediate-momentum band. The 5-day co-sign requirement makes it WORSE: it explicitly selects recent 5-day strength, the horizon where reversal is strongest. The directly comparable evidence is decisive: the same panel's momentum_12_1 config scored +0.011 at the cross-sectional level versus this family's 21-day -0.005 — a ~+0.016 IC swing from using the correct formation window. The signal is genuinely cross-sectional (relative-strength ranking of names), so it should NOT be dropped from the rank; it just needs the right feature.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=price_momentum].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=price_momentum].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=price_momentum].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
Manifest F8 evaluator (src/lib/signals/families/mean_reversion_technicals.ts). Direction is a days-scale technical-reversal rule on inputs rsi_14 (14d), bollinger_pct_b (20d/2σ), return_5d_pct (5d), optional distance_from_vwap_20d_pct: bullish iff rsi_14 ≤ 30 AND bollinger_pct_b ≤ 0.05 AND return_5d_pct < 0; bearish mirrored (rsi ≥ 70, %B ≥ 0.95, ret5d > 0); else neutral. Strength = capStrength((30−rsi)·2.5 + (0.05−pctb)·100) on the firing side. Declared horizon 1W. historical-scorer.signedStrength() maps bullish→+strength, bearish→−strength, neutral→0, risk→null; that signed_strength is one component into conditionCrossSection (robust-z → percentile composite). IC is then measured at a MONTHLY rebalance (192 dates, 96k obs) against 1M/3M/6M/12M forward returns.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=mean_reversion_technicals].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
IC ≈ −0.001 at all horizons for two compounding reasons. (1) HORIZON MISMATCH (primary): every input is a days-scale short-term-reversal indicator (14d RSI, 20d %B, 5d return). Short-term reversal (Lehmann 1990, Jegadeesh 1990) is a 1-day-to-1-week phenomenon that fully decays within days; sampled at a monthly rebalance against 1M-12M forward returns, the edge has decayed to noise, so the rank carries no forward information → IC indistinguishable from 0. (2) SPARSE-FIRING COLLAPSE: the triple-cosign gate (deep-oversold AND through-band %B AND negative 5d) makes the vast majority of symbols neutral → signed_strength = 0. A near-constant column of zeros has near-zero MAD dispersion in conditionCrossSection, so the family adds essentially no cross-sectional ordering — it cannot help and only dilutes coverage. The sign convention itself is correct (reversal = contrarian; manifest 'expected sign −' is right); the problem is the carrier's horizon, not its sign. A separate config swapping in the established 12-1 momentum column (momentum_12_1, lookback 12m / skip 1m) scored +0.011 vs this family's days-scale −0.005, confirming the established-factor horizon is what works at monthly frequency.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=mean_reversion_technicals].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=mean_reversion_technicals].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=mean_reversion_technicals].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
Evaluator src/lib/signals/families/macro_cross_asset.ts (F11) computes a 3M macro-regime verdict from five inputs: yield_curve_10y2y_bps, credit_spread_hy_oas_bps, vix_level (required) and dxy_3m_change_pct, sector_relative_strength_3m_pct (optional). Direction: risk if VIX>=28 (signed_strength=null in the XS layer); bullish if curve>0 AND hyoas<400 AND sectorRs>=3 (strength = sectorRs*4 + (400-hyoas)/10, positive); bearish if curve<=-25 AND hyoas>=500 (negative strength); else neutral (0). Of the five inputs, FOUR (curve, hyoas, vix, dxy) are market-wide — identical for every symbol on a given as_of — so they contribute ZERO cross-sectional variance. The only symbol-varying input is sector_relative_strength_3m_pct, and even that is identical for all names in the same sector. signed_strength feeds conditionCrossSection (robust-z over the cross-section).
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=macro_cross_asset].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
The diagnostic IC is negative at every actionable horizon (1M -0.015, 3M -0.024, 6M -0.018; only 12M weakly +0.006) because this family is scored as a cross-sectional stock-selection factor when it is structurally a market-wide regime signal. On a single as_of, curve/hyoas/vix/dxy are constants across the panel, so they produce identical signed_strength for every symbol; after robust-z (median/MAD) those legs are degenerate (MAD~=0 -> z=0 for all) and carry no selection information. The ONLY surviving cross-sectional variance is the bullish gate's sectorRs*4 term: the family effectively long-tilts symbols whose sector has already outperformed SPY by >=3% over the trailing 3 months, with strength linear in that 3M sector lead. That is a 3M sector-relative-strength chase at a 1-3M holding horizon — precisely the window where short-horizon reversal / sector mean-reversion dominates, which is why the cross-sectional leg is anti-predictive (negative IC). The risk->null and neutral->0 branches also inject coverage/imputation artifacts into the composite. Net: a regime indicator masquerading as a ranker, with its one cross-sectional component pointed the wrong way for the horizon.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=macro_cross_asset].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=macro_cross_asset].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=macro_cross_asset].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
F4 evaluator (`src/lib/signals/families/insider_cluster.ts`) consumes three inputs built by `insider-window-features.ts`: `insider_buys_90d`, `insider_sells_90d`, `cluster_recency_days`. A "cluster" = >=3 distinct buy or sell Form-4 filings in a 90-day transaction-date window. direction = bullish if buys>=3 AND buys>sells; bearish if sells>=3 AND sells>buys; neutral if equal at threshold; null otherwise. strength = clamp(max(buys,sells) * 6 * (|buys-sells|/(buys+sells)) * recency_boost, 0,100). The historical scorer maps bullish→+strength, bearish→−strength (signedStrength, historical-scorer.ts L45-58). Raw P/S→buy/sell classification lives in insider-ingest.ts classifyInsiderDirection. Diagnostic IC on the survivorship-safe US large-cap panel: 1M −0.006 / 3M −0.001 / 6M −0.004 / 12M −0.016.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=insider_cluster].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
There is NO sign-inversion or windowing bug. I traced the full chain and every mechanical step is correct: (1) classifyInsiderDirection maps 'P*'→buy, 'S*'→sell, fallback A→buy/D→sell — correct polarity; (2) computeInsiderClusterFeatures is PIT-safe (filing_date<=asOf no-lookahead, transaction-date window, buy/sell counted on the right side, recency from latest filing) — no inversion; (3) signedStrength maps bullish→+strength — correct, so insider BUYING already produces a POSITIVE rank input. So the small negative IC is not a flipped sign; it is the genuine cross-sectional behavior of a RAW insider-cluster COUNT signal on a US LARGE-CAP universe. Two compounding reasons: (a) On large-caps the academic insider-purchase premium is near-zero — Cohen-Malloy-Pomorski (2012) and Lakonishok-Lee document the abnormal-return premium concentrates in small/mid-caps and decays with size; large-cap insider buys are dominated by routine, pre-scheduled, signed-up trades that carry no information. (b) The strength formula conflates "number of distinct filers" with "conviction" — in large-caps filer count is mechanically a function of board/officer headcount, not signal, so the rank is driven by an HQ-size artifact. The mildly negative 12M (−0.016) is consistent with the well-known result that insiders are weak contrarian/value-timers whose purchases cluster in recently-beaten-down large names that keep underperforming over a year. The signal is real-but-weak and currently UNREFINED, not broken.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=insider_cluster].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=insider_cluster].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=insider_cluster].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
The evaluator (`src/lib/signals/families/fundamentals_quality.ts`) emits a categorical direction + a `strength_0_100`, which `historical-scorer.ts::signedStrength()` maps to signed strength (bullish=+strength, bearish=−strength, neutral=0, risk=null). Direction is set by HARD-THRESHOLD GATES: bullish only when `roic_pct ≥ 12 AND fcf_yield_pct ≥ 4 AND no red flag`; bearish only when `(accruals_ratio ≥ 0.1 AND net_debt_to_ebitda ≥ 4)` or `(roic < 0 AND fcf_yield < 0)`; everything else neutral. Magnitude for non-neutral names is a quality+value CONFLUENCE composite `capStrength(roic_pct·2 + fcf_yield_pct·5)`. This is the value that enters the cross-sectional Spearman IC vs forward returns.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=fundamentals_quality].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
The observed IC is near-zero and unstable (1M+0.003 / 3M+0.005 / 6M+0.001 / 12M−0.004), and this is a feature-construction problem, not a sign error to flip. (1) SPARSE, TIED DISTRIBUTION: the conjunctive hard gates (`roic≥12 AND fcf≥4`; `accruals≥0.1 AND lev≥4`) leave the large majority of a US large-cap panel in `neutral → signed_strength = 0`. Spearman on a vector where most names tie at 0 has almost no discriminating power — the rank correlation is dominated by ties, so IC collapses toward 0 regardless of whether the underlying quality factor works. (2) NON-MONOTONE, MIXED-FACTOR MAGNITUDE: among non-zero names, strength is `roic·2 + fcf·5`, which blends a VALUE leg (FCF/EV yield) into what should be a clean QUALITY signal, and is only defined above the bullish floor, so it is not a monotone transform of underlying profitability across the whole cross-section. The cross-sectional robust-z in `cross-sectional.ts` cannot rescue a feature that is 0 for most names and a value/quality blend for the rest. The mild drift to −0.004 at 12M is consistent with the FCF/EV value leg's noise, not a tradable short. Tuning thresholds would be HARKing; the fix is to change the feature form.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=fundamentals_quality].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=fundamentals_quality].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=fundamentals_quality].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
The evaluator (`src/lib/signals/families/solvency_distress.ts`) computes the classic Altman (1968) 5-ratio Z-score continuously (Z = 1.2·wc + 1.4·re + 3.3·ebit + 0.6·mcl + 1.0·sales), but then DISCRETIZES it into a 3-zone direction/strength before it ever reaches the cross-sectional ranker: bearish (Z<1.81, strength=(1.81−Z)·55), risk (1.81≤Z<2.2, strength=(2.2−Z)·100), neutral (Z≥2.2, strength=0). The downstream `signedStrength()` in `historical-scorer.ts` then maps bearish→−strength, neutral→0, risk→NULL. Net: the variable actually fed to `conditionCrossSection`/IC is a CENSORED half-line — exactly 0 for every safe firm (Z≥2.2), a small negative tail for grey firms, and NULL for the entire 1.81–2.2 grey band (because risk→null is excluded/imputed). The continuous `altman_z` is computed and echoed in input_features but is never used for ranking.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=solvency_distress].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
The IC (+0.010/+0.009/+0.013/+0.015 1M/3M/6M/12M — consistently positive, rising with horizon) is CORRECTLY SIGNED and real: higher signed_strength (closer to 0 = safer) predicts higher forward return, i.e. distressed firms underperform — the textbook distress anomaly (Campbell-Hilscher-Szilagyi 2008, Dichev 1998), and its slow fundamental re-rating is exactly why IC rises monotonically to 12M. The signal is NOT broken and is NOT market-wide; it is genuinely cross-sectional. The reason IC is tiny rather than ~0.02–0.03 is information destruction by censoring: in a survivorship-safe US large-cap panel the large majority of names sit at Z≥2.2, so the ranked variable is a degenerate spike at 0 with only a thin negative tail carrying dispersion. The robust-z MAD in conditionCrossSection collapses most symbols to z=0; ~60%+ of the cross-sectional ordering (the entire safe-and-above region, where Altman-Z still discriminates between e.g. Z=2.5 and Z=6) is thrown away. Two compounding losses: (1) neutral→0 flattens all safe firms to one value; (2) risk→NULL deletes the grey band entirely from the composite. The distress premium is monotone in Z across the WHOLE range, so collapsing the upper range to a constant caps achievable IC.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=solvency_distress].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=solvency_distress].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=solvency_distress].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
File: src/lib/signals/families/volatility_regime_risk.ts. The evaluator classifies each name into one of {risk, bearish, bullish, neutral} from total realized vol (realized_vol_21d, annualized 21d, identical metric to price_momentum's volatility_21d_pct in price-features.ts), full-sample beta_spx, downside_beta_spx, max_drawdown_63d_pct, market-wide vix_level and vix_term_slope_pts. Direction (manifest §F9): risk = vix>=28 OR slope<=-1; bearish = (dbeta-beta)>=0.5 AND dd<=-20; bullish = rv<=0.18 AND beta<=1 AND vix<18 AND slope>0; else neutral. Strengths: risk vix*2+|min(slope,0)|*8; bearish (dbeta-beta)*60+|dd|; bullish (0.30-rv)*200; neutral reuses the risk stress gauge. The only thing actually ranked cross-sectionally is signedStrength() (src/lib/ai-alpha/pit-ingest/historical-scorer.ts:45): bullish->+strength, bearish->-strength, neutral->0, risk->null (whole-name dropped). IC is the Spearman of that signed strength vs forward return (horizon-ic.ts). Strongest family at +0.023 @ 3M.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=volatility_regime_risk].current_feature
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.1
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.3
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.6
docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.12
the construction audit and its IC diagnostic record no start or end date
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1
docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12
docs/build/validation/D45_HORIZON_IC.json#panelRows
neither the construction audit nor the horizon-IC diagnostic stamps a config hash
The +0.023 @ 3M IC is a genuine but heavily-diluted low-vol/BAB premium leaking through three structural defects, all caused by mixing a MARKET-WIDE regime gate into a CROSS-SECTIONAL ranker. (1) The only positive-side rank (bullish, the low-vol leg) is gated on slope>0 (VIX contango) and vix<18 — both market-wide constants on a given date. So on any backwarded or high-VIX month, ZERO names can be bullish; the calm-quality screen only fires market-wide, not per-name. (2) The risk gate (vix>=28 OR slope<=-1) maps signed_strength to null; because VIX is common to all names, on stress dates the ENTIRE cross-section goes null and the family contributes nothing on exactly the months where low-vol dispersion is largest. (3) On surviving months most names fall to neutral->0, so the ranking collapses onto the thin bullish tail (0.30-rv)*200 plus the bearish (dbeta-beta) tail — a real cross-sectional rv/downside-beta tilt, which is why IC stays positive (low-rv, low-downside-beta names outperform), but the binary thresholds (rv<=0.18, beta<=1, dd<=-20) discretize a continuous factor into a near-flat step function, throttling rank information. The factor signal is real; the wrapper discards most of it.
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=volatility_regime_risk].diagnosis
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=volatility_regime_risk].expected_ic_sign
docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=volatility_regime_risk].confidence
sources · docs/build/validation/D45_FAMILY_AUDIT.json · docs/build/validation/D45_HORIZON_IC.json
These cells are not in the library above and are not counted as failures. There was never enough point-in-time data to run the battery, so no hypothesis was tested and none was refuted. Filing an untested cell as a dead signal would be the same dishonesty as a cherry-picked win, pointing the other way.
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].verdict
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].data_used.totalObservations
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].data_used.rebalanceDatesAvailable
docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].missing_requirements
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].verdict
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].present_observations
docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].missing_requirements
docs/build/validation/D46_NEWS_IC_LARGECAP.json#coveredRows
docs/build/validation/D46_NEWS_IC_LARGECAP.json#sentimentWindow.from
Two disclosure blocks were moved here from the public landing on 2026-08-06 so the landing stays readable while the full method stays one click away: the AI-ALPHA screener’s metric canon with its honest caveats, and the calculation behind the subscription-stack cost comparison. Text is preserved faithfully; figures are as stated at relocation.
An AI-native, one-stop screen of top US large-caps. The AI-ALPHA score fuses seven weighted pillars — quality · value · growth · momentum · sentiment · analyst · flow — into one 0–100 best-of-breed rating (grade + verdict + confidence); its sub-scores are in the Analyst & Scores tab. The metric set is the elite money-manager + academic canon: Graham value (P/E, P/B, earnings & FCF yield), Buffett & Munger quality (ROIC, moat margins, Piotroski F, Altman Z), Lynch GARP (PEG), Greenblatt Magic Formula (earnings-yield + ROIC rank), Fama-French value, Novy-Marx gross profitability (GP/Assets), Jegadeesh-Titman 12-month momentum and analyst estimate-revision trend, Frazzini-Pedersen low-beta and Sharpe.
A deeper institutional edge layer — foregrounded on the Smart Money tab — adds the signals quant desks and elite compounders actually scan on: opportunistic insider cluster-buys (Cohen-Malloy-Pomorski — non-routine C-suite purchases, not the binary word), 13F best-ideas conviction (Anton-Cohen-Polk), borrow-fee & loan-utilisation shifts (Cohen-Diether-Malloy), and dollar-weighted Congressional buys; with earnings-surprise drift / SUE (Bernard-Thomas PEAD), net-payout / shareholder yield (Boudoukh et al; Pontiff-Woodgate), asset-growth / CMA capital-discipline (Cooper-Gulen-Schill), accruals earnings-quality (Sloan; Hirshleifer NOA) and the variance-risk-premium / IV-rank vol signal (Bollerslev-Tauchen-Zhou) threaded through the fundamentals, valuation, analyst and technical tabs.
Every figure is an illustrative sample · in validation · 0 validated cells — a research signal, not a buy/sell call or price target. Analyst rating, upside %, insider/13F/Congress activity, borrow-fee, dark-pool, options flow, GEX and short-squeeze are descriptive third-party vendor samples — not our call, not live. Honest caveats: the accruals edge has decayed since ~2003, the variance-risk-premium is a positioning signal (aggregate-level evidence, not a proven cross-sectional anomaly), and congressional-trade outperformance is contested (Eggers-Hainmueller found underperformance) — each is flagged, not oversold. Colour encodes the good/bad read (green favourable, red unfavourable, amber caution). Screening, not advice; past performance — real or backtested — does not predict future results.
One representative retail tool per distinct capability, like-tier. Every third-party price was web-verified against its vendor’s public pricing page on 2026-07-23; * marks approximate / secondary-sourced prices — verify.
Retail stack = $4,427.40/yr across 9 tools · like-tier.
Subscription saving = stack $4,427.40 − Elite $948 = −$3,479.40/yr (−79%). Total value = the saving. We no longer add a projected return: the figure that used to sit here was multiplied off a backtest that did not exist. Institutional ceiling (swap Koyfin→Bloomberg Terminal) ≈ $35,459.40/yr. Or Pro $348/yr → −$4,079.40/yr (−92%). SherpaQuant prices are sample / indicative.
Prices web-verified against each vendor’s public pricing page, 2026-07-23. AI-ALPHA figures are backtested, in validation and not risk-adjusted. SherpaQuant prices are sample / indicative. * approximate / secondary-sourced, verify.