Public evidence ledger · Evidence recorded · Live · as of

What the score has and has not shown

Every night Veridion scores stocks and freezes those scores. This page shows what the stocks did in the 30, 90 and 180 days after each score, with nothing changed after the fact.

This record measures completed forward windows for published Veridion Score classifications. It is not a trading strategy or a strategy backtest. Returns exclude transaction costs and slippage. Investment capacity has not been tested, and the published results have not been independently verified.

Read this first

Does the score sort returns? Not yet shown.

Highest qualified did best (-0.01%) and Lowest range did worst (-1.46%), but the classifications between them did not line up in score order. Registered test PREREG-001: Not distinguishable. The sample holds 2 independent 30-day periods and this test needs 12. The typical (median) 30-day return was negative in every classification: most stocks fell over this period whichever classification they held.

73,894 completed 30-day windows across the five classifications. Windows overlap, so that is fewer independent observations than the count suggests. 90-day results are published further down for Upper range, Middle range and Lower range; the other 2 classifications have not qualified yet. No 180-day cell has qualified yet. Every miss is published. Nothing on this page is edited after the fact.

The registered test

Not distinguishable. The sample holds 2 independent 30-day periods and this test needs 12.

The unit of independence is a 30-day period on the snapshot dates that carry completed 30-day windows in both Highest qualified and Lowest range: 26 such dates, 2026-07-21 to 2026-08-25, giving 2 periods. 12 are needed before any interval is computed; that threshold, the period rule and the statistic were fixed on 2026-09-23, before any spread was measured. A twelfth period's windows cannot complete before 2027-07-16; until then this verdict cannot change, whatever the cell means show.

PeriodStartsCommon datesHighest qualified rowsLowest range rowsHighest qualified minus Lowest range, 30-dayFive in score order
12026-07-21224159-3.05%no (ρ -0.2)
22026-08-20410998+1.84%no (ρ 0.5)

Each period is represented by its first date, so the spread is one day's Highest qualified mean minus that day's Lowest range mean. The registered excess-of-SPY spread is computed on the same date, where every row shares one benchmark return, so it equals the raw spread exactly; the registration fixes that design and a change to it is a new registration. Registration PREREG-001, recorded 2026-09-23 at docs/preregistration/PREREG-001-track-record-30d-comparison.md in the Veridion repository, sha256 f77fca8d81936359c1e7368a356acc3e7877c7d78559f4278093f95128579020. Computed on the publication of 2026-09-25T00:08:21.606Z.

Completed 30-day returns. N counts qualified completed ticker-snapshot rows, not independent observations; windows overlap. Each band's entry-date population is in the publication. As of . Publication and cell populations
ClassificationMeanMedianN
Highest qualified-0.01%-1.87%3,739
Upper range-1.03%-2.32%36,392
Middle range-0.22%-2.18%24,928
Lower range-0.31%-2.78%6,951
Lowest range-1.46%-4.85%1,884
The spread each mean above is drawn from, over the same qualified rows. P25 and P75 are the quartiles; the interquartile range is the distance between them. The top 1%, 5% and 10% columns are the share of the classification’s gross positive return carried by its largest rows — measured against gross upside, not the net sum, so none can exceed 100%; all three are withheld when no row in the classification is positive. A high share means a few rows carry the average. Read them together rather than one at a time: the three points describe the shape of that concentration, and the shape is not the same in every classification. They rise monotonically by construction, because a wider slice of the same rows cannot carry less of the same positive sum.
ClassificationP25P75IQRTop 1%Top 5%Top 10%
Highest qualified-8.05%+5.60%13.65%14.84%41.93%61.96%
Upper range-8.24%+3.92%12.16%19.41%48.72%68.18%
Middle range-9.45%+6.02%15.47%21.20%48.37%66.81%
Lower range-13.73%+8.82%22.55%17.89%44.35%63.92%
Lowest range-18.42%+10.85%29.27%19.05%43.84%62.47%
Entry-date populations

Returns are gross and unlevered, measured from the score date's close to the window's close, with no transaction costs, slippage, financing or taxes. They describe completed windows; they are not a backtest of any strategy and do not establish that any of it was capturable.

Methodology version 2.14, scoring rows since 2026-08-19. Methodology hash aa67742e729e19243e428439384a91dfc87d0ca53e6422a4e6cfbec935a19091, frozen 2026-09-24T00:35:35Z; the live rules matches the ledger entry for this version. Any change to a factor list, a weight, a publication minimum or the subset-weighting rule changes this hash and requires a new version.

Thirty-day means were previously published, found overstated by unadjusted corporate actions, corrected on September 7, 2026, and then withheld. They resume under the thirty-day primary horizon ruling re-confirmed September 13, 2026, on restatement-cadence and factor-mix grounds. The horizon was not chosen blind to those results; no preregistration is claimed. Read the original correction.

How those withheld rows split between the two tests

The withholding rule has only been measured through 2026-09-07; 37,521 completed windows end after that

The 122 withheld factor events, by ticker

TickerEventsDaysFactors
AMAT42026-06-05 to 2026-06-090.1, 9.1, 0.11, 10.37
AMD42026-06-05 to 2026-06-090.09, 9.36, 0.1, 9.98
AXP42026-06-05 to 2026-06-090.1, 9.95, 0.1, 9.89
GE42026-06-05 to 2026-06-090.1, 10.16, 0.1, 9.94
HD42026-06-05 to 2026-06-090.1, 9.99, 0.1, 9.99
CDLX22026-06-06 to 2026-06-080.12, 7.59
CREG22026-06-15 to 2026-07-2110.32, 0.18
FEMY22026-06-06 to 2026-06-080.06, 17.11
HUBC22026-06-06 to 2026-06-080.1, 7.44
ILLR22026-06-23 to 2026-06-256.08, 7.05
INLF22026-06-16 to 2026-07-030.15, 240.96
JEM22026-06-30 to 2026-07-135.38, 12.95
KIDZ22026-06-06 to 2026-06-080.1, 10.35
LGCL22026-08-18 to 2026-09-020.16, 101.36
MU22026-06-05 to 2026-06-060.1, 9.06
PLAG22026-08-12 to 2026-08-1310.27, 0.19
ABTC12026-07-0315.24
AEHL12026-08-1018.48
AEMD12026-08-045.16
AERT12026-06-118.94
AIFA12026-06-116.39
AIFU12026-06-1519.33
ALIT12026-07-0124.43
AMIX12026-06-2318.94
AMOD12026-06-1242.32
AMZE12026-07-148
APUS12026-07-248.72
ARTL12026-08-318.57
AVX12026-06-1213.04
BAOS12026-09-020.1
BIAF12026-08-2414.84
BIYA12026-07-245.09
BMGL12026-06-2212.01
BNRG12026-08-137.44
BOXL12026-06-226.16
BRCC12026-08-2411.13
BYAH12026-08-0611.86
BYND12026-08-1431.79
CANG12026-07-219.75
CCG12026-07-2126.38
CCHH12026-07-247.17
CGTL12026-07-0613.72
CIIT12026-07-2113.54
CLDI12026-07-3118.09
CLGN12026-09-049.89
CPHI12026-07-217.9
CPOP12026-07-247.59
CRIS12026-07-0317.05
CSAI12026-07-3126.72
CXAI12026-08-1848.61
CYCU12026-08-288.01
DBGI12026-07-2425.79
DFNS12026-07-31241.94
EDBL12026-07-1045.82
ELAB12026-08-2110.43
ENLV12026-07-0815.33
FEED12026-09-0112.01
FFAI12026-07-2487.53
FGL12026-09-01115.38
GAME12026-08-247.59
GCTK12026-09-0115.22
GDC12026-06-29237.68
GIBO12026-06-2925
GIPR12026-07-1011.79
GLMD12026-08-198.75
GMEX12026-07-0111.26
GMM12026-06-1047.99
GNPX12026-07-1516.66
GRML12026-08-2443.73
GRNQ12026-08-068.81
HAO12026-08-1424.15
HCWB12026-06-305.55
HCWC12026-09-0132.02
HKIT12026-07-0322.25
IMCC12026-08-2732.68
INHD12026-06-0836.23
IPW12026-08-079.68
JDZG12026-08-010.1
JUNS12026-08-0769.39
KAPA12026-09-016.96
KLAC12026-06-110.11
LABT12026-06-229.76
LEXX12026-08-0411.28
LGVN12026-09-029.78
LHSW12026-06-2218.75
LIMN12026-08-2248.65
LMFA12026-07-1022.56
MBAI12026-08-136.95
MBRX12026-08-010.18
MVIS12026-08-0415.31
MYSZ12026-08-138.78
NCT12026-09-040.09
NRDY12026-08-2115.06
NXL12026-09-0319.49
OMH12026-09-0329.44
ONFO12026-08-1051.25

The measurement that produced every row above, verbatim, so it can be re-run:

with px as (select symbol, snapshot_at::date as d, price, price / nullif(lag(price) over (partition by symbol order by snapshot_at),0) as f from score_snapshots where price is not null) select symbol as ticker, d as event_day, f as factor from px where f >= 5 or f <= 0.2 order by symbol, d

Run state: Live. Last successful publication: . The cells above are that publication; rows recorded after it are not in them. It is also the most recent run of any outcome (completed).

What the restatements removed

Cohort restatement Aug 24, 2026 · 9 rows withdrawn · 9 had already resolved

Aug 24, 2026: 9 cohort rows were withdrawn after instrument eligibility changed under methodology 2.4, 9 of which had already resolved (Middle range 9). The original registry rows remain recorded. Decision record

Cohort restatement Aug 24, 2026 · 973 rows withdrawn · 77 had already resolved

Aug 24, 2026: 973 cohort rows were withdrawn after instrument eligibility changed under methodology 2.13, 77 of which had already resolved (Lowest range 2, Middle range 15, Upper range 53, Lower range 7). The original registry rows remain recorded. Decision record

Cohort restatement Aug 24, 2026 · 148 rows withdrawn · none had resolved

Aug 24, 2026: 148 cohort rows were withdrawn after instrument eligibility changed under methodology 2.14, none of which had resolved. The original registry rows remain recorded. Decision record

Cohort restatement Aug 25, 2026 · 1,189 rows withdrawn · 228 had already resolved

Aug 25, 2026: 1,189 cohort rows were withdrawn after instrument eligibility changed under methodology 2.13, 228 of which had already resolved (Lowest range 10, Middle range 122, Upper range 45, Lower range 51). The original registry rows remain recorded. Decision record

Cohort restatement Aug 25, 2026 · 289 rows withdrawn · none had resolved

Aug 25, 2026: 289 cohort rows were withdrawn after instrument eligibility changed under methodology 2.14, none of which had resolved. The original registry rows remain recorded. Decision record

Cohort restatement Aug 29, 2026 · 6 rows withdrawn · none had resolved

Aug 29, 2026: 6 cohort rows were withdrawn after instrument eligibility changed under methodology 2.4, none of which had resolved. The original registry rows remain recorded. Decision record

Cohort restatement Sep 2, 2026 · 21 rows withdrawn · none had resolved

Sep 2, 2026: 21 cohort rows were withdrawn after instrument eligibility changed under methodology 2.14, none of which had resolved. The original registry rows remain recorded. Decision record

Cohort restatement Sep 11, 2026 · 8 rows withdrawn · none had resolved

Sep 11, 2026: 8 cohort rows were withdrawn after instrument eligibility changed under methodology 2.14, none of which had resolved. The original registry rows remain recorded. Decision record

Corrections

Classification correction Sep 7, 2026 · 600 rows, 55 tickers · scores moved

Sep 7, 2026: Every mean forward return published on this page was overstated, and the largest ones were overstated by a multiple. The cause: a small number of rows whose forward window spans a split or reverse split the price series was never adjusted for. HCWC closed at $0.2352 on 2026-08-28 and at $7.53 on 2026-09-01, a single-session factor of 32.02, and then traded $7.12, $6.99, $7.00. That is a change in share count, not a 4,598% return. Nobody held a position that multiplied 48 times in a month. Removing rows whose window spans such an event moves the highest-qualified 1M mean from +21.06% to +4.67%, on 14 affected rows out of 1,411 -- one percent of the sample carrying three quarters of the published figure. Upper range moves +7.61% to +3.37%, Middle +13.19% to +5.71%, Lower +30.03% to +10.29%, and Lowest +75.62% to +5.51%. Every classification moves down. An existing quarantine reason, forward_return_out_of_range, could not catch this: its ceiling is 9,999.99%, so a 4,598% return is inside the bound. That constant stops arithmetic overflow and was never going to stop a corporate action. The detector added with this correction reads our own stored price series and refuses any window containing a single-session price factor at or beyond 5x in either direction, which no continuous market produces. It takes no view on which corporate action occurred; it only declines to call the window a return. Six hundred admitted registry rows across 55 tickers contain such a window, 259 of them resolved. Seven of the 55 are mega-caps -- AMAT, AMD, AXP, GE, HD, KLAC, MU -- where a five-fold single session is not a split but a bad print in our own stored series, which is disqualifying on the same grounds and is its own open defect. The rule is stated rather than tuned, and it lowers every number it touches, including the one this page led with. This entry said, from 2026-09-07, that every mean forward return published on this page was overstated. That was measured for the 1M column and written about the whole page. Measured for the 3M column on 2026-09-08 with the same query at 90 days: Middle range +9.72% becomes +9.77% once its 24 discontinuity-spanning rows are removed, and Upper range +9.52% becomes +10.35% once its 9 are -- both understated, not overstated. Lower range +3.85% becomes +3.57%. Two of the eight published means moved the other way, so the sentence was broader than its evidence and is left as first written, earlier in this entry, so a reader can see it. The highest-qualified 3M cell has one row and is not published.

600 registered rows across 55 tickers (AEHL, AEMD, AMAT, AMD, APUS, ARTL, AXP, BIAF, BIYA, BNRG, BRCC, BYAH, BYND, CCHH, CLDI, CLGN, CPOP, CSAI, CXAI, CYCU, DBGI, ELAB, FEED, FFAI, FGL, GAME, GCTK, GE, GLMD, GRML, GRNQ, HAO, HCWC, HD, IMCC, IPW, JDZG, JUNS, KAPA, KLAC, LEXX, LGCL, LGVN, LIMN, MBAI, MBRX, MU, MVIS, MYSZ, NCT, NRDY, NXL, OMH, ONFO, PLAG) spanned a stored-price change of at least 5x in either direction inside a forward window, out of 91,319 admitted rows (0.66%). 259 of them have resolved and sit inside the published evidence set, against 30,691 resolved rows in total (0.84%): Highest qualified 14, Upper range 53, Middle range 101, Lower range 56, Lowest range 35. The scores on those rows moved. Those rows are not restated. The registry admits nothing retroactively, so they stand as recorded and the correction applies to rows scored from Sep 7, 2026 onward.

Permanent citation

Classification correction Sep 4, 2026 · 273 rows, 9 tickers · no published score moved

Sep 4, 2026: SEC SIC 6324 is "Hospital and Medical Service Plans". Veridion's SIC-to-sector crosswalk sent the whole 6000-6499 band to Financials, so nine managed-care insurers, UnitedHealth among them, carried Financials as their published sector. The crosswalk was corrected on 2026-09-03 and a deploy gate now fails any build in which a company's sector contradicts its SEC business code. What this did not change: the Veridion Score. Sector reaches the composite only by deciding whether a peer cohort may be used at all, and these rows were sector-sourced from SIC throughout, so that gate was open before the correction and after it. Valuation peers are selected by market-capitalisation tier rather than sector, and the hype peer cohort reads the curated universe, which already carried these issuers as Health Care. The scores on these rows are unchanged by the correction. The published sector was wrong, and that is what is corrected here. Nine issuers are affected, not the eight this entry first named: OSCR carries the same SEC code and was omitted from the first count. This entry also said, from 2026-09-04 to 2026-09-07, that none of the affected rows had resolved and that no forward return had landed on any registered row. Both were false when written. 106 of the affected rows had already resolved, inside a registry of 30,691 resolved rows -- the same total this page prints in its own header. The two figures were the only ones in this entry the published query never computed, so nobody could check them and nobody did. Every figure below is now produced by that query.

273 registered rows across 9 tickers (ALHC, CI, CLOV, CNC, ELV, HUM, MOH, OSCR, UNH) carried the wrong published sector, out of 91,319 admitted rows (0.30%). 106 of them have resolved and sit inside the published evidence set, against 30,691 resolved rows in total (0.35%): Highest qualified 22, Upper range 50, Middle range 31, Lower range 3. No published score moved: the correction changes the sector these rows are labelled with, not the number. Those rows are not restated. The registry admits nothing retroactively, so they stand as recorded and the correction applies to rows scored from Sep 4, 2026 onward.

Permanent citation

Evidence protocol

Recorded live. Never backfilled.

Open windows excluded

We publish only completed windows.

Universe coverage

Which names got scored, and which never did

The scores on this page are drawn from whatever the nightly sweep reached, and until 2026-09-19 that was not a representative sample. The sweep ordered the broad segment alphabetically, so the same tail of the alphabet went unscored every night: tickers beginning Q–Z were 4.08% to 4.32% of the names scored on the four nights before the change, against 17.89% of the names already carrying a score.

The broad segment is now ordered by a deterministic key of trading day and symbol (deterministic-per-trading-day), so a night's capacity covers a uniform sample and the uncovered remainder is a different set every night. The first full sweep under that order wrote 3,511 names between 2026-09-19T00:44:24Z and 2026-09-19T23:41:15Z, of which 17.94% began Q–Z — 0.05 percentage points from that share.

Capacity is unchanged and is a separate limit: the sweep persists roughly 3,000 to 3,200 names a night against 4,324 already scored, so on the order of 1,124 symbols still go unscored on any given night. What changed is which ones, and that they rotate. Figures computed before 2026-09-19 rest on the alphabetically truncated sample and are not restated here.

Read the comparison above carefully: 17.89% is the Q–Z share of names that had already been scored, and 4,324 is how many of those there were. Neither is a census. Both are counts of this sweep's own output, and both move when the sweep runs — that figure read 4,324, then 4,336, then 4,345 over seven hours of 2026-09-20, with no change in the market behind any of it.

The population the scoring rule actually admits is derived from a complete walk of the reference source before anything is scored, and it is independent of what the sweep reached. It is now recorded: 5,323 names for trading day 2026-09-24 — 344 curated core and fund names plus 4,979 from the reference walk — measured 2026-09-25T00:13:59.007+00:00. The walk is required to be complete, so a truncated one raises instead of returning a short list, and a partial walk cannot be stored as a census. Its own Q–Z share is 26.94%, which is the share a representative night should land on; the 17.89% above is the same quantity measured over prior output.

This does not retire the 3,316 qualified-universe denominator published in the screener coverage block. That number is a published figure and replacing it is a restatement, which needs its own dated decision taken against stored rows rather than against the first one to appear.

Measured 2026-09-20T14:45:00Z against production. Identified by write instant rather than trading day, because a Saturday run stamps the preceding trading day and mixes with the curated-list write. Reproduce with: select trading_day, count(distinct ticker), count(distinct ticker) filter (where left(upper(ticker),1) between 'Q' and 'Z') from score_snapshots group by trading_day.

Evaluated rows
Unique tickers
Snapshot dates
Sample window
Benchmark
How the benchmark is builtThe benchmark is split- and distribution-adjusted SPY. The score side is the raw stored price, never adjusted. Every excess return on this page compares one against the other.
Series and adjustment
SPY from adjusted_daily_market_aggregate, split- and distribution-adjusted and restated to its current adjustment state.
Exit rule
The current benchmark builder targets the snapshot date plus 30 calendar days, then takes the first available close on or after that date, no more than five calendar days later. Entry uses the last available close on or before the snapshot date.
Recomputation
(forward_close_30d / entry_close - 1) * 100, rounded to four decimal places, is compared with forward_return_30d on each resolved benchmark row supplied to this publication.
Source through (date precision). Publication timestamp . 31 of 31 resolved 30-day benchmark rows recompute exactly to four decimal places. 51 benchmark rows supplied to this publication.
Independent verification
Not published. The series is self-collected and has not been checked against a second source.

The two sides are not on the same adjustment basis. The benchmark above is adjusted. The score side is the raw stored capture price, frozen at the snapshot and never adjusted, because Veridion has no corporate-action feed. Every excess return on this page therefore compares an adjusted series against an unadjusted one, and the direction of that bias is not uniform. The size of it is bounded and published: after the factor rule withholds its pairs, the widest returns still inside the published cells run -97.89% to +8106.19%.

Classification monotonicity

Average forward return by score classification

30 days

90 days

180 days

Before you read the table

No classification was reordered, reweighted, or restated to improve this table.

Primary window: 30 days. Population: admitted ticker-snapshot observations with completed, qualified returns and date-matched SPY evidence; each cell carries its own N. Measured .

Thirty-day means were previously published, found overstated by unadjusted corporate actions, corrected on September 7, 2026, and then withheld. They resume under the thirty-day primary horizon ruling re-confirmed September 13, 2026, on restatement-cadence and factor-mix grounds. The horizon was not chosen blind to those results; no preregistration is claimed. Read the original correction.

Earlier means were corrected in the correction. This is the current qualified publication.

Classification
Highest qualified
Upper range
Middle range
Lower range
Lowest range

Returns are gross and unlevered, measured from the score date's close to the window's close, with no transaction costs, slippage, financing or taxes. They describe completed windows; they are not a backtest of any strategy and do not establish that any of it was capturable.

Score persistence

Highest-qualified classification by holding window

Thirty-day means were previously published, found overstated by unadjusted corporate actions, corrected on September 7, 2026, and then withheld. They resume under the thirty-day primary horizon ruling re-confirmed September 13, 2026, on restatement-cadence and factor-mix grounds. The horizon was not chosen blind to those results; no preregistration is claimed. Read the original correction.

Insufficient history
Insufficient history
Public evidence ledger

Recent evaluated hits and misses: 90 days

Completed highest-qualified 90-day windows, not the primary table's 30-day population. Up to four positive and four non-positive returns, ranked within each group by 90-day excess versus SPY (return when excess is unavailable), then listed newest first.

No publishable 90-day examples.

90-day sample below publication minimum.

First-example publication date unavailable.

Honesty panel

How to read this page

SPY adjustment follows the provider label; dividend adjustment has not been independently verified.

benchmark
dividends
risk free
weighting
independence
open windows
survivorship
null handling
point in time
transaction costs

Past performance does not guarantee future results · not investment advice. This is a measurement of historical score behavior, not a promise or transaction instruction.

Traceability
  • Full methodology: Veridion Score methodology.
Weekly Veridion brief

Rating changes, public disclosure activity, methodology notes, and product updates. One email per week. No advertising list resale.