← BILAALRAJA.COM

How this was built

The universe, the point-in-time discipline, the metric definitions, and the defects I found along the way.

2,544 companies · data through 2026-08-20 · rebuilt 24 August 2026

What this is, and what it is not

It is a reconstruction, not the licensed index. Constituents are the top 3,000 US-listed companies by market capitalisation on the price date, rebuilt from SEC filings using Russell's own published rule. It is not a membership list, and where FTSE Russell's actual reconstitution differs, mine will differ with it.

Of 3,000 candidates, 2,544 carry enough filed data to compute a trailing twelve month figure. The remaining 456 are absent, not zero. That distinction matters: dropping them silently would bias every cross-sectional statistic on the page.

Point in time

Every figure is as filed, not as later restated. A company that revised its June quarter in October shows what it originally reported.

Metric definitions worth stating

Return on capital employed, not invested capital

ROCE uses equity plus debt. Subtracting cash to reach invested capital collapses the denominator on cash-rich balance sheets and produces returns in the thousands of percent, which is arithmetic rather than insight. Capital employed is guarded at a floor so a near-zero denominator cannot manufacture a ranking.

Banks do not report revenue

171 banks carry no revenue tag at all. They use net interest income plus non-interest income instead. Anyone screening the full market on a revenue multiple without handling this is quietly excluding an entire sector, and will not notice.

Winsorisation and sector-neutral ranking

Raw cross-sectional ranges are unusable. Percentiles are computed within sector so a utility is compared with utilities, and extreme values are clipped rather than dropped, so the company stays in the ranking without dominating it.

Sector is a filter, not a colour

Twelve categorical hues on three thousand overlapping points is not a design preference, it is a measurable failure. Run through a colourblind separation check, twelve hues score a worst all-pairs OKLab distance of 2.0 against a threshold of 8. Even four hues only pass with a carefully chosen set.

So the main chart is a neutral density cloud and one sector highlights at a time, which is always a two-category comparison and always separable. Comparing sectors is done with small multiples, which is the prescribed route when all-pairs separation fails.

Thirteen defects, and how they were found

Every one of these was caught by checking output against reality, not by reading code. None of them raised an error. That is the point worth taking from this section: a pipeline that runs cleanly and reports success can still be wrong in ways only a sanity check will surface.

  1. American depositary receipts valued at the ordinary share count

    One company appeared at a $555bn market capitalisation. The share count was ordinary shares; the price was per ADS. Fixed by cross-checking counts against an independent source and excluding on an ADR signature.

  2. Reverse splits left share counts unadjusted

    545 names carried pre-split counts against post-split prices. Fixed by applying a cumulative split factor from the period end forward.

  3. Multi-class filers were invisible

    Several of the largest companies in the market never became candidates, because their share counts are dimensioned by class and do not appear in the undimensioned cover-page data. Fixed by broadening the candidate pool to every tickered filer rather than trusting one tag.

  4. A truncated filing history deleted the banking sector

    The stored form list holds only the most recent filings. Testing "does this company file a 10-K" against it excluded frequent filers whose annual report had scrolled off the end. Fixed by removing the positive form test entirely.

  5. Ticker selection preferred baby bonds to common stock

    A utility resolved to its preferred note rather than its common line, valuing it at $3.3bn instead of $29.1bn. Fixed by preferring the ticker that carries a reported share count, which only common equity does.

  6. Cash flow read from the wrong accessor

    Operating cash flow resolved for 18 quarters where a different accessor found 71. Free cash flow coverage rose from 0.8% to 81.7% once corrected.

  7. Tag migration produced negative quarters

    A revenue standard change mid-history produced negative implied quarters when differencing cumulative figures. Now guarded: a negative quarter inside a TTM window invalidates the window rather than propagating.

  8. Log axes on raw percentiles

    A second-percentile value near 1e-9 stretched an axis across nine decades and compressed every real observation into a line. Found only by rendering the page and looking at it.

  9. A grouped operation silently misaligned

    A pandas grouped apply returned results in a different order than the frame it was assigned to, so a large-cap growth name scored 85.9 on a cheapness screen. Caught by a sanity anchor; fixed by ranking within group directly.

  10. Footnotes returned instead of commentary

    The first extraction scored 93% on a structural check while returning accounting footnotes for roughly a third of companies. Measured against a second version on identical companies, the rate of passages leading with results went from 42.8% to 65.0%.

  11. One filer's commentary collapsed to boilerplate

    A 171,000 character section reduced to 5,598 characters of front matter across that filer's entire history, because the heading anchor matched too early. Fixed with tiered anchors and a minimum-length test before accepting a narrower slice.

  12. Background work killed by a foreground timeout

    A polling loop hit a timeout, and the resulting signal took the whole process group with it, losing thousands of in-memory results. Fixed by detaching the session and checkpointing to disk.

  13. A stale tier file silently narrowed a queue

    A priority filter read tiering written by an earlier run and queued 5,874 items instead of 25,548. It completed successfully, which is what made it dangerous.

What it cannot tell you