Methodology & validation
Methodology & validation0 validated cellsrun recorded 2026-09-04T04:18:20.056Z

Validated, or honestly labelled — never a naked score.

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.

A score you can trace beats a score you have to trust · descriptive screening, not advice
0Validated cells
Three terminal verdicts — plus an explicit IN_VALIDATION running statusa false VALIDATED is the single worst outcome
VALIDATED

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.

FAIL

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.

INSUFFICIENT_DATA

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.

IN_VALIDATION is a running status, not a fourth verdict — the cell is still under test and no terminal verdict has been asserted yet.
We would rather show a FAIL than a flattering number we cannot defend. The verdict is the product.
Verdict matrix · asset cell × signal familyrun recorded 2026-09-04T04:18:20.056Z
VALIDATEDFAILINSUFFICIENTIN_VALIDATION
Cell · recorded runCell mean ICValue / quality factorInstitutional 13F flowAnalyst revisionsSentiment / newsCongressional flow
US Equityequity/US · recorded D4 run
0.010236573658359088
Measured on a survivorship-safe point-in-time panel and recorded FAIL. Each column is that family’s own battery verdict, not a copy of the cell’s.
EU Equityequity/EU · recorded D4 run
not measurable
No per-family battery ran: the cell itself is INSUFFICIENT_DATA with 9 named blocker(s).
Never measured, never refuted. A cell with no panel is not a failed cell, and this page will not render it as one.
APAC equitiesAPAC · not targeted
no run
The rank-validation gate targets US and EU equities today; no verdict row exists for this region.
Listed so the absence is visible. No battery has been run, so no verdict — terminal or running — is asserted.
Emerging marketsEM · not targeted
no run
The rank-validation gate targets US and EU equities today; no verdict row exists for this region.
Listed so the absence is visible. No battery has been run, so no verdict — terminal or running — is asserted.
Global / cross-assetGLOBAL · not targeted
no run
The rank-validation gate targets US and EU equities today; no verdict row exists for this region.
Listed so the absence is visible. No battery has been run, so no verdict — terminal or running — is asserted.
every cell and column read from docs/build/validation/_D4_VERDICT_SUMMARY.json and docs/build/validation/_D4_PER_FAMILY_SUMMARY.json·0 cells currently VALIDATED
Two runs, reconciled — what you can reproduce from this repothey disagree, and that is the disclosure
Recorded run · equity/USFAIL

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]

Re-run here · equity/USINSUFFICIENT

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.

  • no_survivorship_safe_forward_return_panel
  • pit_universe_artifact_unreadable_read_failed
Neither verdict is VALIDATED, so nothing changes about what we publish. What changes is what you can check: the recorded run is auditable by hash; the re-run is reproducible by anyone who clones this repo.
Reproduce this figure — the artifact, the transform, the anchorone of these two has no chain, and says so

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.

Reproduce this — no account, no API key

Mean cross-sectional IC — equity/US, recorded rank-validation run: 0.010236573658359088

1 — where this number came from

docs/build/validation/_D4_VERDICT_SUMMARY.json at verdicts[cell=equity/US].battery.ic.meanIc

as-of 2026-09-04T04:18:20.056Z

2 — what was done to it

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.

3 — get there yourself
Reproduce this — no account, no API key

Mean cross-sectional IC — equity/US, recorded rank-validation run

Source: SherpaQuant — own published record

1 — fetch the public bytes
  1. Download the committed verdict artifact this figure is read from (no account, no key)
    curl -sS 'https://sherpaquant.ai/api/provenance/artifact?path=docs%2Fbuild%2Fvalidation%2F_D4_VERDICT_SUMMARY.json'
2 — apply exactly this transform

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.

3 — or run the one-liner
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.

4 — and it cannot be restated quietly

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.

Reproduce this — no chain to show

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

Recompute the chain yourself with an implementation that does not import ours: node scripts/ops/figure-ledger.mjs --verify.
The frozen gate · every threshold a cell must clearRANK_VALIDATION_GATE_CONFIG · stricter-only
cited live from the one frozen SSOT object in code — no page-local threshold exists
GateFrozen thresholdWhat it enforces
Deflated Sharpe probabilitystricter: min≥ 0.95Sharpe 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.25Combinatorially-symmetric CV over S=16 blocks; a high PBO means the config likely overfit in-sample.
IC Newey-West t-statstricter: min≥ 3.0Cross-sectional IC must be significant after HAC autocorrelation correction — a raw t is not enough.
Mean cross-sectional ICstricter: min> 0Spearman IC mean must be strictly positive (strict >, no epsilon fudge baked into the frozen value).
Decile monotonicitystricter: onrequired · 0 adjacent violationsAdjacent-decile rank staircase must be monotone out-of-sample, with top−bottom alpha > 0.
Beat all baselines (B0–B3)stricter: onrequired · ≥ 0.005 IC marginThe 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/sectionA credible NW-t and cross-sectional IC need enough rebalance dates and per-date breadth; below the floor the gate fails closed.
Thresholds may only ever move stricter assertStricterOnly throws if any field loosens, so a marginal cell can never be pushed across the line between runs.
Input factors · cited to their data sources10 factor families · 21 sources
every factor traces to a licensed source — INACTIVE sources shown, never hidden
Factor familySource familiesRequired sources
Valuelong · 3M · 6M · 12Mfundamentals, filings, pricesSEC EDGAR data.sec.govFinancial Modeling PrepEODHD
Quality and Profitabilitylong · 3M · 6M · 12Mfundamentals, filingsSEC EDGAR data.sec.govFinancial Modeling Prep
Investment, Issuance, and Accrualsboth · 6M · 12Mfundamentals, filings, corporate_actionsSEC EDGAR data.sec.govFinancial Modeling Prep
Momentum and Reversalboth · 1M · 3M · 6M · 12Mprices, factorsEODHDKenneth French Data Library
Low Risk, Volatility, and Tail Lossboth · 1M · 3M · 6Mprices, optionsEODHDcboe-or-options-source· INACTIVE
Options and Dark Pool Positioningboth · 1M · 3MoptionsUnusual Whales
Short, Borrow, and Squeeze Realismshort · 1M · 3Mshort_interest, options, pricesfinra-or-short-source· INACTIVEUnusual WhalesEODHD
Insider, Congress, and 13F Ownershipboth · 3M · 6M · 12Mownership, filingsSEC EDGAR data.sec.govFinancial Modeling PrepUnusual Whales
Macro and Regime Contextcontext · 1M · 3M · 6M · 12Mmacro, factorsFederal Reserve Economic DataKenneth French Data LibraryAQR Data LibraryRobert Shiller / Yale data
News, Sentiment, and Estimate Revisionsboth · 1M · 3Msentiment, fundamentalsFinancial Modeling Prepnews-source· INACTIVE
INACTIVE / non-contributing sources — stated honestlyTiingo NewsINACTIVE: News API is a paid add-on the current key is not entitled to (HTTP 403); the local tiingo_news.json snapshot is honest-empty (0 rows) and contributes no evidence until the add-on is licensed.
Each source carries its licenseNote and point-in-time rule in the registry — hover any chip to read the license posture; an unmapped placeholder id is shown, never silently matched.
The honest delta · what improved vs what is still limitedrun recorded 2026-09-04T04:18:20.056Z
WHAT IMPROVED
  • 10 input factor families wired into the engine, each cited to 11 named data sources.
  • The 7-gate frozen battery is pinned to the SSOT config — DSR, PBO, NW-t, monotonicity, baselines and the data floor all cited live, stricter-only.
STILL LIMITED
  • 0 of 2 targeted cells are VALIDATED — the in-repo membership-only PIT artifact cannot clear the battery yet.
  • Named SSOT blockers (why excluded / PIT-shallow families do not validate):no_survivorship_safe_forward_return_panelpit_universe_artifact_unreadable_read_failed
The delta is read from the live rank-validation SSOT, not asserted — when a cell clears the frozen battery this count moves on its own, never by editing this page.
The honest result · equity/USFAIL

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.

Mean cross-sectional IC0.010236573658359088vs > 0

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

ICIR (mean IC ÷ its own volatility)0.15514775216020982mean IC divided by its own volatility across rebalance dates

verdicts[cell=equity/US].battery.ic.icir

We report the result because hiding it would be the dishonest move — and we print the pointer so you can check it in docs/build/validation/_D4_VERDICT_SUMMARY.json.
Where each market cell standslive count
FAIL
0
INSUFFICIENT
2
NOT YET RUN
3
VALIDATED
0
2 cells targeted by the gate · 3 regions not targeted yet · 0 have earned VALIDATED · we will not round up
What we withhold — and why that is the productnamed only to state we do NOT publish them
Buy / sell callsWITHHELD

We never emit a directional trade instruction. Direction did not validate, so we do not sell it.

We show instead: health / quality / screening rank instead
Probability of beating the marketWITHHELD

No calibrated "X% chance of outperformance." That number would imply a validated edge we do not have.

We show instead: evidence + signal-agreement, plainly labelled
Calibrated return rangesWITHHELD

No "+8% to +14% expected" bands. Return calibration failed the gate.

We show instead: descriptive factor evidence + as-of provenance
Predictive scoresWITHHELD

No forward-looking score sold as a forecast. Our 0–100 is relative health today, not a prediction.

We show instead: transparent cross-sectional health composite
Withholding what did not validate is not a gap — it is the integrity that separates this from a black-box score vendor.
Point-in-time integrity · survivorshippanel provenance recorded with the run · source pit_lake
Point-in-time observations729,046vs ≥ 1000

verdicts[cell=equity/US].data_used.totalObservations

Usable rebalance dates199vs ≥ 24

verdicts[cell=equity/US].data_used.rebalanceDatesUsable

Rebalance dates available199every available cross-section was usable

verdicts[cell=equity/US].data_used.rebalanceDatesAvailable

Survivorship-safe panelyesdelisted names stay in the panel; the gate refuses a panel that drops them

verdicts[cell=equity/US].data_used.survivorshipSafe

Panel window2010-01-02 → 2026-07-02
Rows the run dropped — reported by the artifact, never imputed
  • dropped_11559_observations_null_engine_score
  • dropped_110_observations_null_forward_return
Live vendor overlays are current, not point-in-time by design — labelled as live-overlay, never mixed into the panel a verdict is measured on.
Signal families · deep-history vs live-overlay13 families are declared in the engine design · the recorded per-family battery measured 5 of them
DEEP-HISTORYpoint-in-time, survivorship-clean
F1Fundamentals / Quality
F4Insider
F7Momentum
F8Mean-Reversion
F9Vol-Regime
F11Macro
Solvency
LIVE-OVERLAYcurrent, not point-in-time · filings lag
F2Analyst & Revisions
F3Smart-Money / 13F
F5Options & Vol
F6Dark-Pool
F10Sentiment / News
F12Flow / Positioning
Each signal carries a method-tag, an as-of timestamp, and a source/evidence link — so any score can be traced to the data that produced it.
How we compare · capability maptransparency, not a leaderboard
capability comparison only — no “beats”, no un-audited returns
CompetitorCategoryThe essential we matchThe white-space gap we cover
BBloomberg · FactSet · LSEGInstitutional terminalsCross-asset breadth, real-time data & news, portfolio analytics in one searchable surfaceWe bring the rigor at a consumer price — a graded edge inside an IN_VALIDATION envelope, not a $32k black box
KKoyfinRetail terminal-litePolished custom dashboards, 10-yr financials, screeners, macroWe add an openly-validated AI edge on top of data-display — opinion you can audit
DDanelfin · Seeking AlphaAI stock scoringExplainable 1–10 / factor-grade scores with per-ticker subscoresThey market un-audited win-rates; we wrap every edge in IN_VALIDATION and publish the honest US-equity FAIL
SSimply Wall StVisual fundamentalsThe Snowflake radar — company-at-a-glance fundamentalsSingle-stock only; we fuse cross-asset + flow + smart-money under one validated lens
ffintwit.aiSocial sentiment + AIBuy/sell signals + sentiment from hundreds of analysts, AI digestsAdvertises un-audited returns; we frame every signal inside the validation envelope
FFinvizMechanical screener70+ filter screener, real-time quotes, signature heatmapPurely mechanical filtering; we layer a graded, honest verdict over the screen
UUnusual WhalesOptions flowReal-time full-market options flow, dark-pool, heatmapsSingle-lens raw firehose; we fuse flow into one cockpit alongside every other signal
WWhaleWisdom · Dataroma · QuiverSmart-money / alt-data13F tracking, superinvestor holdings, congress/insider/alt-data dashboardsEach is single-lens; we fuse smart-money + alt-data into one graded view
TTradingViewChartingGold-standard interactive charting, indicators, alertsCharting + social ideas; we build institutional cockpits around the chart
PPublic.comBrokerage UXModern multi-asset brokerage app + light AI themesExecution + light AI; we add terminal-grade research and a validated edge
Five white-space themes we uniquely own
1Honesty-as-brand

The IN_VALIDATION envelope + a Methodology page showing 0 validated cells and the honest US-equity result. No competitor publishes this.

2Three-persona breadth

Retail investor, active trader, and UHNWI advisor served in one product — the market is otherwise persona-segmented.

3AI-ALPHA across asset classes

A graded edge spanning asset classes and signal types, where every edge competitor is single-lens.

4One fused cockpit

One surface collapses what serious users stitch from six vendors — no tab-hopping between flow, 13F, charting and scoring.

5Terminal density at a consumer price

Terminal-grade density + AI-ALPHA fusion at a consumer subscription — the missing middle between $12–32k terminals and shallow retail apps.

The differentiator is transparency: the same Methodology page that publishes our honest result is the comparison — no rival ships an honesty envelope.
Evidence hash · per-cell verdictequity/US · FAILrun recorded 2026-09-04T04:18:20.056Z

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.

Evidence hash · this cell
0b3ff879a059ec1d65775639971a66334c8d90848f7526f1a0487c1303ccc443
Frozen gate-config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207
SherpaQuant gives AI-generated research and decision-support — not investment advice. 0 validated cells · equity/US recorded FAIL in docs/build/validation/_D4_VERDICT_SUMMARY.json · equity/EU INSUFFICIENT_DATA · scores are relative health, not predictions · zero order submission.
The refuted-signal library

The signals we tried and abandoned.

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.

14
refuted entries
10
committed artifacts cited
272
values resolved from a pointer
14
fields the artifacts do not record
Publishable-return candidate2 entries

A return figure we measured, published, and then withdrew when the same cell was re-run on a clean holdout.

GOOGL · momentum — the headline that was withdrawn2 artifacts
Hypothesis
full-sample CAGR
95.63305056569456

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].cagrPct

full-sample total return
108.14798307000004

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].totalReturnPct

buy-and-hold CAGR
88.77273967132942

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].buyAndHoldCagrPct

beats buy-and-hold in sample
true

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].beatsBuyAndHold

full-sample Sharpe
3.492618495591922

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].sharpeRatio

gate state
VALIDATED

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].validationState

Test
parameters fitted inside the reported window
true

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].inSampleContaminated

holdout start
2026-03-13

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosStart

holdout end
2026-07-13

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosEnd

holdout bars
83

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBars

holdout trades
3

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosTrades

PBO
0.1388888888888889

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].pbo

deflated-Sharpe probability
0.9999954236956063

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].dsrProbability

Window
first bar
2025-06-09

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.start

last bar
2026-07-13

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.end

trading days
274

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.tradingDays

minimum-history gate
252

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.minTradingDaysGate

Universe
names tested
30

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.universeSize

coverage
30 US large caps

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.universeCoverage

benchmark
SPY

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.benchmark

benchmark Sharpe in window
1.7201478840868325

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.sharpe

regime caveat
Long-run SPY Sharpe is roughly 0.4-0.5. A materially higher benchmark Sharpe here means the measurement window was an unusually strong, low-volatility market; strategy Sharpes measured in it are inflated by regime and are NOT evidence of a durable edge.

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.note

n
cells run
240

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsRun

cells with a result
240

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsWithResult

cells clearing both gates
10

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.validated

cells beating buy-and-hold in sample
87

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.beatingBuyAndHold

Config hash
producing commit
37fe1651914ad25aaf7583eedbfca30f783e1e83

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#commit

reproduction command
node src/scripts/headline-candidates.mjs

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#command

generated at
2026-07-31T16:09:36.501Z

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#generatedAt

Verdict
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

holdout CAGR
26.957181723953827

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosCagrPct

holdout total return
8.298732529999937

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosTotalPct

holdout buy-and-hold CAGR
58.44395034377079

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBuyAndHoldCagrPct

beats buy-and-hold out of sample
false

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosBeatsBuyAndHold

holdout Sharpe
0.8641667180032715

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[ticker=GOOGL,strategy=momentum].oosSharpe

holdout degenerate
false

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

The surviving cohort — every cell that cleared both gates1 artifact
Hypothesis
survivor tickers
AAPL, DIA, GOOGL, GOOGL, HD, JNJ, JPM, LLY, NVDA, TSLA

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].ticker

survivor strategies
volume_spike, rsi_reversal, sma_crossover, momentum, volatility_breakout, volatility_breakout, mean_reversion, rsi_reversal, mean_reversion, mean_reversion

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].strategy

survivor PBO
0.03968253968253968, 0.16666666666666666, 0.21428571428571427, 0.1388888888888889, 0.15476190476190477, 0.05555555555555555, 0.03571428571428571, 0.0873015873015873, 0.047619047619047616, 0.07142857142857142

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].pbo

survivor deflated-Sharpe probability
0.9880609077639084, 0.9579352608406979, 0.9992293965279876, 0.9999954236956063, 0.9909013940598418, 0.9999999999875664, 0.9972872390237906, 0.9835806221354497, 0.9773607242705968, 0.9976844577149966

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].dsrProbability

survivor full-sample CAGR
28.69126621138356, 17.7843539857232, 75.02445126407838, 95.63305056569456, 26.750313724029915, 50.376866747683735, 14.703073307511927, 51.52388782017798, 39.821614195287715, 59.08801751314401

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].cagrPct

Test
holdout bars per survivor
83, 83, 83, 83, 83, 83, 83, 83, 83, 83

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBars

holdout trades per survivor
2, 1, 1, 3, 3, 5, 0, 0, 2, 2

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosTrades

survivor holdout CAGR
56.90295771013141, 30.348159299169165, 25.39326874039496, 26.957181723953827, 40.876053643207875, 38.62720153780235, 0, 0, 23.201171218812444, 44.17871926420496

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosCagrPct

survivor holdout buy-and-hold CAGR
103.87818513112835, 42.08399500069184, 58.44395034377079, 58.44395034377079, -1.6859287945358625, 21.524534615735313, 64.2401492192376, 72.50765119645885, 43.85838332734249, 2.749258474173577

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBuyAndHoldCagrPct

full-sample figure contaminated
true, true, true, true, true, true, true, true, true, true

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].inSampleContaminated

Window
first bar
2025-06-09

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.start

last bar
2026-07-13

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.end

trading days
274

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.window.tradingDays

minimum-history gate
252

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.minTradingDaysGate

Universe
names tested
30

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.universeSize

coverage
30 US large caps

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.universeCoverage

benchmark
SPY

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.benchmark

benchmark Sharpe in window
1.7201478840868325

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.sharpe

regime caveat
Long-run SPY Sharpe is roughly 0.4-0.5. A materially higher benchmark Sharpe here means the measurement window was an unusually strong, low-volatility market; strategy Sharpes measured in it are inflated by regime and are NOT evidence of a durable edge.

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#source.regime.note

n
cells run
240

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsRun

cells with a result
240

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.cellsWithResult

cells clearing both gates
10

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.validated

cells beating buy-and-hold in sample
87

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#counts.beatingBuyAndHold

Config hash
producing commit
37fe1651914ad25aaf7583eedbfca30f783e1e83

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#commit

reproduction command
node src/scripts/headline-candidates.mjs

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#command

generated at
2026-07-31T16:09:36.501Z

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#generatedAt

Verdict
beats buy-and-hold out of sample
false, false, false, false, true, true, false, false, false, true

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED].oosBeatsBuyAndHold

tickers still ahead out of sample
HD, JNJ, TSLA

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED,oosBeatsBuyAndHold=true].ticker

their holdout trade counts
3, 5, 2

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#cells[validationState=VALIDATED,oosBeatsBuyAndHold=true].oosTrades

median cell CAGR across the sweep
8.942667914373903

reports/headline-candidates/2026-07-31T16-09-36-501Z.json#candidates.medianCagrPct

sources · reports/headline-candidates/2026-07-31T16-09-36-501Z.json

Composite engine score1 entry

The engine score itself, run against the frozen gate on the deep point-in-time panel.

equity/USFAIL1 artifact
Hypothesis
mean cross-sectional IC
0.010236573658359088

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.meanIc

beats every baseline
true

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.engineBeatsAll

IC margin over the best baseline
0.010210682831977196

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.marginOverBest

best baseline IC
0.00002589082638189266

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.baselines.bestEvaluableIc

Test
Newey-West t
2.0657680067616

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.neweyWestT

ICIR
0.15514775216020982

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.icir

deciles monotone
false

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.monotonic

adjacent-decile violations
3

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.adjacentViolations

top-minus-bottom alpha
0.005578939960014118

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.decile.topMinusBottomAlpha

PBO
0.3062937062937063

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.pbo.pbo

deflated-Sharpe probability
0.9931838279835314

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.dsr.deflatedSharpeProbability

trials the Sharpe was deflated by
6

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.dsr.trials

Window
panel date range
2010-01-02, 2026-07-02

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.dateRange

Universe
panel
pit_lake

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.source

survivorship-safe
true

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.survivorshipSafe

n
observations
729046

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.totalObservations

usable rebalance dates
199

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.rebalanceDatesUsable

dates entering the IC
199

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].battery.ic.datesUsed

dropped rows
dropped_11559_observations_null_engine_score, dropped_110_observations_null_forward_return

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].data_used.caveats

Config hash
frozen gate config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207

docs/build/validation/_D4_VERDICT_SUMMARY.json#configHash

evidence hash
0b3ff879a059ec1d65775639971a66334c8d90848f7526f1a0487c1303ccc443

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].evidence_hash

generated at
2026-09-04T04:18:20.056Z

docs/build/validation/_D4_VERDICT_SUMMARY.json#generatedAt

Verdict
verdict
FAIL

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].verdict

gates failed
cross_sectional_ic, decile_monotonicity, pbo_cscv

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/US].failed_gates

sources · docs/build/validation/_D4_VERDICT_SUMMARY.json

Signal family · full battery4 entries

Signal families with enough history to face the full battery — Information Coefficient, decile monotonicity, overfit probability, deflated Sharpe, and a baseline ladder.

value_factorFAIL2 artifacts
Hypothesis
configs entered into the overfit test
family_signed_strength, B0_random

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].pbo_configs

rows carrying this family signal
697788

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].present_observations

run note
Read-only live run. Frozen gate reused per family. PIT_OPS_BROAD NOT triggered.

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note

Test
mean cross-sectional IC
-0.0045362268208070265

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.meanIc

Newey-West t
-0.6081036998699323

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.neweyWestT

ICIR
-0.04425901939349208

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.icir

deciles monotone
false

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.decile.monotonic

adjacent-decile violations
4

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.decile.adjacentViolations

PBO
0.5885003885003885

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.pbo.pbo

deflated-Sharpe probability
0.9999966366867717

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.dsr.deflatedSharpeProbability

beats every baseline
false

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.baselines.engineBeatsAll

large-cap probe IC · horizon 1
-0.004995871484713503

docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.1

large-cap probe IC · horizon 3
-0.009803632201792976

docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.3

large-cap probe IC · horizon 6
-0.013261392750451682

docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.6

large-cap probe IC · horizon 12
-0.016463319437165013

docs/build/validation/D46_VALUE_IC_LARGECAP.json#valueIc.12

Window
panel date range
2010-01-02, 2025-12-02

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.dateRange

Universe
panel
pit_lake

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.source

survivorship-safe
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.survivorshipSafe

runner
ops-runner.d46-broad.v1

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source

symbols in the large-cap probe
808

docs/build/validation/D46_VALUE_IC_LARGECAP.json#symbols

n
observations
697683

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.totalObservations

usable rebalance dates
192

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.rebalanceDatesUsable

dates entering the IC
192

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].battery.ic.datesUsed

dropped rows
dropped_16051_observations_null_engine_score, dropped_105_observations_null_forward_return

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].data_used.caveats

rows in the large-cap probe
96627

docs/build/validation/D46_VALUE_IC_LARGECAP.json#panelRows

Config hash
frozen gate config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash

evidence hash
0c0b3f5fdc78594de1f81f17e470d85af7e052b33f87614956093df92d733e81

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].evidence_hash

generated at
2026-07-05T19:55:11.007Z

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt

Verdict
verdict
FAIL

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=value_factor].verdict

gates failed
cross_sectional_ic, decile_monotonicity, pbo_cscv, baseline_ladder

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

institutional_flowFAIL2 artifacts
Hypothesis
configs entered into the overfit test
family_signed_strength, B0_random

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].pbo_configs

rows carrying this family signal
523536

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].present_observations

run note
Read-only live run. Frozen gate reused per family. PIT_OPS_BROAD NOT triggered.

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note

Test
mean cross-sectional IC
0.01640772746568576

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.meanIc

Newey-West t
2.9164558675960084

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.neweyWestT

ICIR
0.2525026050147487

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.icir

deciles monotone
false

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.decile.monotonic

adjacent-decile violations
5

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.decile.adjacentViolations

PBO
0.0004662004662004662

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.pbo.pbo

deflated-Sharpe probability
0.0000065128327688124266

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.dsr.deflatedSharpeProbability

beats every baseline
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.baselines.engineBeatsAll

large-cap probe IC · horizon 1
0.0017731157957983936

docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.1

large-cap probe IC · horizon 3
0.009639742422992262

docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.3

large-cap probe IC · horizon 6
0.012194154876933351

docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.6

large-cap probe IC · horizon 12
-0.0033612362658248813

docs/build/validation/D46_13F_IC_LARGECAP.json#flowIcByHorizon.12

Window
panel date range
2013-12-02, 2025-12-02

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.dateRange

Universe
panel
pit_lake

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.source

survivorship-safe
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.survivorshipSafe

runner
ops-runner.d46-broad.v1

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source

symbols in the large-cap probe
808

docs/build/validation/D46_13F_IC_LARGECAP.json#symbols

n
observations
523451

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.totalObservations

usable rebalance dates
145

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.rebalanceDatesUsable

dates entering the IC
145

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].battery.ic.datesUsed

dropped rows
dropped_190303_observations_null_engine_score, dropped_105_observations_null_forward_return

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].data_used.caveats

rows in the large-cap probe
72321

docs/build/validation/D46_13F_IC_LARGECAP.json#rowsWithFlowFeature

Config hash
frozen gate config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash

evidence hash
47b24abe28742afbe2210f0c6100df81c23bb0f69dfd12a2033b718752d56f47

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].evidence_hash

generated at
2026-07-05T19:55:11.007Z

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt

Verdict
verdict
FAIL

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=institutional_flow].verdict

gates failed
cross_sectional_ic, decile_monotonicity, deflated_sharpe

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

analyst_revisionsFAIL2 artifacts
Hypothesis
configs entered into the overfit test
family_signed_strength, B0_random

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].pbo_configs

rows carrying this family signal
283216

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].present_observations

run note
Read-only live run. Frozen gate reused per family. PIT_OPS_BROAD NOT triggered.

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note

Test
mean cross-sectional IC
0.00840780588816284

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.meanIc

Newey-West t
2.9535419175956465

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.neweyWestT

ICIR
0.22560035124145703

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.icir

deciles monotone
false

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.decile.monotonic

adjacent-decile violations
3

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.decile.adjacentViolations

PBO
0

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.pbo.pbo

deflated-Sharpe probability
0.7430484177292473

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.dsr.deflatedSharpeProbability

beats every baseline
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.baselines.engineBeatsAll

large-cap probe IC · horizon 1
0.0018197191005526665

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.1

large-cap probe IC · horizon 3
-0.0009963034882348627

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.3

large-cap probe IC · horizon 6
0.004006432362175805

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.6

large-cap probe IC · horizon 12
-0.005237560954469823

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#analystRevisionIc.12

Window
panel date range
2012-02-02, 2025-12-02

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.dateRange

Universe
panel
pit_lake

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.source

survivorship-safe
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.survivorshipSafe

runner
ops-runner.d46-broad.v1

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source

symbols in the large-cap probe
657

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#symbolsWithEvents

n
observations
283200

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.totalObservations

usable rebalance dates
166

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.rebalanceDatesUsable

dates entering the IC
166

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].battery.ic.datesUsed

dropped rows
dropped_430623_observations_null_engine_score, dropped_105_observations_null_forward_return

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].data_used.caveats

rows in the large-cap probe
209373

docs/build/validation/D46_ANALYST_IC_LARGECAP.json#gradeEvents

Config hash
frozen gate config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash

evidence hash
2c59762c20abd15fa12819c73ee88e9a87a73c6a86040ec42feb292b0f23fa62

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].evidence_hash

generated at
2026-07-05T19:55:11.007Z

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt

Verdict
verdict
FAIL

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=analyst_revisions].verdict

gates failed
cross_sectional_ic, decile_monotonicity, deflated_sharpe

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

congressional_flowFAIL2 artifacts
Hypothesis
configs entered into the overfit test
family_signed_strength, B0_random

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].pbo_configs

rows carrying this family signal
60491

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].present_observations

run note
Read-only live run. Frozen gate reused per family. PIT_OPS_BROAD NOT triggered.

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#note

Test
mean cross-sectional IC
0.005015981861040355

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.meanIc

Newey-West t
0.9438660833364702

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.neweyWestT

ICIR
0.0825269101670035

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.icir

deciles monotone
false

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.decile.monotonic

adjacent-decile violations
4

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.decile.adjacentViolations

PBO
0.13473193473193473

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.pbo.pbo

deflated-Sharpe probability
1.7024347248595362e-7

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.dsr.deflatedSharpeProbability

beats every baseline
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.baselines.engineBeatsAll

large-cap probe IC · horizon 1
0.00928464524681071

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.1

large-cap probe IC · horizon 3
0.007367294698725803

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.3

large-cap probe IC · horizon 6
0.007169158273936487

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.6

large-cap probe IC · horizon 12
-0.0025153337371534093

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#congressIc.12

Window
panel date range
2014-02-02, 2025-12-02

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.dateRange

Universe
panel
pit_lake

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.source

survivorship-safe
true

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.survivorshipSafe

runner
ops-runner.d46-broad.v1

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#panel_source

symbols in the large-cap probe
703

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#symbolsWithTrades

n
observations
60482

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.totalObservations

usable rebalance dates
143

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.rebalanceDatesUsable

dates entering the IC
143

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].battery.ic.datesUsed

dropped rows
dropped_653348_observations_null_engine_score, dropped_105_observations_null_forward_return

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].data_used.caveats

rows in the large-cap probe
68590

docs/build/validation/D46_CONGRESS_IC_LARGECAP.json#tradeRows

Config hash
frozen gate config hash
8631c046ce39ccb8a566ccb00006b23f390dc1050f0b90d79a13560211304207

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#config_hash

evidence hash
9f7c43504b1854e17f7f1c53d9552e772607dfe5d497f9635e472d62a0e8143f

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].evidence_hash

generated at
2026-07-05T19:55:11.007Z

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#generatedAt

Verdict
verdict
FAIL

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=congressional_flow].verdict

gates failed
cross_sectional_ic, decile_monotonicity, deflated_sharpe

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

Signal construction audit7 entries

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.

price_momentum2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
-0.004605855162626571

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.1

measured IC · horizon 3
-0.006796764181782555

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.3

measured IC · horizon 6
0.001151921721600751

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.6

measured IC · horizon 12
0.005471087718200898

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.price_momentum.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
positive

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=price_momentum].expected_ic_sign

audit confidence
high

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

mean_reversion_technicals2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
-0.001285348396010591

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.1

measured IC · horizon 3
-0.0012570319663887572

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.3

measured IC · horizon 6
-0.0033248443795562766

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.6

measured IC · horizon 12
-0.0007526983061241669

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.mean_reversion_technicals.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
drop_from_cross_section

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=mean_reversion_technicals].expected_ic_sign

audit confidence
high

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

macro_cross_asset2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
-0.014706382857738079

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.1

measured IC · horizon 3
-0.02382671397766902

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.3

measured IC · horizon 6
-0.017996242315529713

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.6

measured IC · horizon 12
0.00633103041590688

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.macro_cross_asset.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
drop_from_cross_section

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=macro_cross_asset].expected_ic_sign

audit confidence
high

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

insider_cluster2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
-0.005460358797702406

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.1

measured IC · horizon 3
-0.0009626736068011231

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.3

measured IC · horizon 6
-0.004068043217942704

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.6

measured IC · horizon 12
-0.015847610810902094

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.insider_cluster.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
positive

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=insider_cluster].expected_ic_sign

audit confidence
medium

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

fundamentals_quality2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
0.0033700331424101897

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.1

measured IC · horizon 3
0.00502873648757238

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.3

measured IC · horizon 6
0.001379864039258825

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.6

measured IC · horizon 12
-0.004012436691814797

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.fundamentals_quality.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
positive

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=fundamentals_quality].expected_ic_sign

audit confidence
medium

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

solvency_distress2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
0.009927986418612518

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.1

measured IC · horizon 3
0.00939928985699901

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.3

measured IC · horizon 6
0.012678962514076545

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.6

measured IC · horizon 12
0.01504299036768163

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.solvency_distress.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
positive

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=solvency_distress].expected_ic_sign

audit confidence
high

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

volatility_regime_risk2 INSUFFICIENT_DATA2 artifacts
Hypothesis
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

Test
measured IC · horizon 1
0.008352171911978904

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.1

measured IC · horizon 3
0.023101480193500182

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.3

measured IC · horizon 6
0.013119916047259064

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.6

measured IC · horizon 12
0.021219725786211317

docs/build/validation/D45_HORIZON_IC.json#familyIcByHorizon.volatility_regime_risk.12

Window
INSUFFICIENT_DATA

the construction audit and its IC diagnostic record no start or end date

Universe
mean names per cross-section · horizon 1
502.4947916666667

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.1

mean names per cross-section · horizon 12
484.4696132596685

docs/build/validation/D45_HORIZON_IC.json#breadthByHorizon.12

n
panel rows
96627

docs/build/validation/D45_HORIZON_IC.json#panelRows

Config hash
INSUFFICIENT_DATA

neither the construction audit nor the horizon-IC diagnostic stamps a config hash

Verdict
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

disposition
positive

docs/build/validation/D45_FAMILY_AUDIT.json#audits[family=volatility_regime_risk].expected_ic_sign

audit confidence
high

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

Never refuted — never measurable

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.

equity/EUINSUFFICIENT_DATA
verdict
INSUFFICIENT_DATA

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].verdict

observations
0

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].data_used.totalObservations

rebalance dates available
0

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].data_used.rebalanceDatesAvailable

named blockers
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.

docs/build/validation/_D4_VERDICT_SUMMARY.json#verdicts[cell=equity/EU].missing_requirements

sentiment_newsINSUFFICIENT_DATA
verdict
INSUFFICIENT_DATA

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].verdict

rows carrying the family signal
0

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].present_observations

named blockers
survivorship_unsafe_panel, insufficient_rebalance_dates_0_of_24, insufficient_total_observations_0_of_1000, family_signed_strength_absent_all_rows_sentiment_news

docs/build/validation/_D4_PER_FAMILY_SUMMARY.json#families[family=sentiment_news].missing_requirements

rows covered in the separate large-cap probe
27680

docs/build/validation/D46_NEWS_IC_LARGECAP.json#coveredRows

probe sentiment history from
2009-11-28

docs/build/validation/D46_NEWS_IC_LARGECAP.json#sentimentWindow.from

Landing fine print — relocated disclosure

The fine print behind the landing page.

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.

AI-ALPHA screener — metric canon, academic sources & honest caveatsrelocated from the landing screener footer

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.

Subscription-stack comparison — how this is calculatedrelocated from the landing value section
What’s included — the stack

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.

  • Koyfin PremiumTerminal · dashboards · screening$948/yr *koyfin.com · $79/mo ×12
  • Danelfin ProAI stock scoring & picking$624/yr *danelfin.com
  • TipRanks PremiumAnalyst consensus & Smart Score$360/yrtipranks.com
  • Seeking Alpha PremiumQuant grades & research$299/yrseekingalpha.com
  • Unusual WhalesOptions · dark-pool · congress flow$448/yrunusualwhales.com
  • WhaleWisdom Pro13F · smart-money$500/yrwhalewisdom.com
  • Stocktwits EdgeFinTwit social sentiment$229.50/yrstocktwits.com
  • TradingView PremiumCharts & technicals$719.40/yr *tradingview.com · $59.95/mo ×12
  • Finviz EliteScreener$299.50/yrfinviz.com

Retail stack = $4,427.40/yr across 9 tools · like-tier.

How the numbers combine

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.

What’s excluded *
  • Returns are backtested and in validation — an illustrative sample, not a live managed-account record.
  • Not risk-adjusted and not adjusted for the risk-free rate — no Sharpe, drawdown or beta shown here.
  • Excludes taxes, commissions, spread, slippage and market impact; benefits from hindsight.
  • Alpha is not guaranteed; past performance — real or backtested — does not predict future results.
  • CHF is an approximate FX; the tool list is representative, not exhaustive.

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.