Skip to main content
IndexFair Research · class M

How often does the published four-block formula actually run?

Among 213 published overall cells in the frozen snapshot, 21.1% run a renormalised subset rather than the full published A+B+C+M weight set. Counting a cohort-median imputation as absent rather than present, that share is 62.4%.

What this study cannot tell you

  • Block-C substance gap. Effective weights here call effectiveBlockWeights(present) without a Block-C substance fraction. Live composition may further scale Block C when scorable substance is incomplete; this census does not measure that gap.
  • Imputed presence. Raw presence treats a non-null block score as present. Measured presence demotes C/M when c_status / m_status is IMPUTED_COHORT_MEDIAN. Display fill is not the same as measurement. A block whose status is NULL counts as measured rather than demoted, so the measured share published here is the generous reading of our own coverage: the true share of cells not resting on four measured blocks is at least this high, never lower. It is not a count of imputations — a cell whose Block M is simply absent carries no cohort median and still counts here.
  • What is new here. That the composite renormalises over the blocks present, and that Block C and Block M can be filled from a cohort median, were already disclosed on the methodology and brand pages. This study adds no mechanism — it is the first count of how often each path actually runs. Read it as a coverage census, not as a disclosure.
  • Live-upsert / asOf. The package is a point-in-time scan stamped by asOf. Live upserts after that stamp are outside the artefact.
  • Headline vs published populations. This package records population: published, so every share on this page has a denominator of 213 published overall cells. The other population is materially larger — 675 overall cells exist against 213 that clear the publication filter — and it yields a very different share, because unpublished cells are unpublished largely for having too few blocks. Shares across the two filters are not interchangeable, and quoting one against the other's denominator is the single easiest way to misreport this study.
  • Cell-vs-brand. Counts are overall brand_scores cells (brand × vertical × geo), not distinct brands. A brand can contribute multiple cells.
  • First-party exemption. This study reads IndexFair's own score tables and discloses the instrument (effectiveBlockWeights + SQL). It does not redistribute encumbered third-party review corpora.

Method

Effective weights are derived only from effectiveBlockWeights in packages/scoring/src/blockWeights.ts — no hand-maintained weight table. The published formula for this study is presence A+B+C+M; any other presence vector is counted as renormalised. Verbatim instrument source (build-time extract):

export function effectiveBlockWeights(
  present: BlockPresenceFlags,
  substance?: BlockSubstanceFractions,
): {
  A: number;
  B: number;
  C: number;
  M: number;
}

Verbatim SQL used for the headline scan (committed as query.sql):

SELECT
  bs.brand_id AS "brandId",
  bs.block_a_score::float8 AS "blockAScore",
  bs.block_b_score::float8 AS "blockBScore",
  bs.block_c_score::float8 AS "blockCScore",
  bs.block_m_score::float8 AS "blockMScore",
  bs.c_status AS "cStatus",
  bs.m_status AS "mStatus",
  bs.score_mode AS "scoreMode",
  bs.floor_clamped AS "floorClamped",
  v.code AS "verticalCode",
  c.code AS "countryCode",
  bs.methodology_version AS "methodologyVersion",
  bs.publishable AS "publishable",
  bs.confidence_label AS "confidenceLabel",
  bs.score::float8 AS "score",
  (
    bs.aspect_id IS NULL
    AND bs.confidence_label <> 'insufficient'
    AND bs.publishable = true
    AND bs.score IS NOT NULL
    AND EXISTS (
      SELECT 1
      FROM brand_jurisdictions bj
      WHERE bj.brand_id = bs.brand_id
        AND bj.vertical_id = bs.vertical_id
        AND (
          bs.country_id IS NULL
          OR bj.country_id = bs.country_id
        )
        AND bj.status = 'active'
        AND bj.lifecycle_status = 'active'
        AND bj.legal_status = 'licensed'
        AND bj.display_mode IN ('in_rating', 'info_only')
    )
  ) AS "isPublished"
FROM brand_scores bs
INNER JOIN verticals v ON v.id = bs.vertical_id
LEFT JOIN countries c ON c.id = bs.country_id
WHERE bs.aspect_id IS NULL

Frozen package path in this repository: docs/research/renormalisation-census-2026/ (manifest digests, CSV buckets, README environment stamp). Regenerated by apps/workers/scripts/generate-renormalisation-census.ts. The per-file sha256 digests, byte lengths, scan instant and generator digest are printed at /verify/renormalisation-census-2026, together with the offline command that re-checks them without a database, a network or any credential.

Findings

All shares below are taken over 213 published overall cells. Raw-presence renormalised share: 21.1%. Measured-presence renormalised share: 62.4%. Methodology version observed: 5.1.0. asOf: 2026-07-28T19:30:27.531Z.

score_mode distribution

KeyCells
absolute84
ruler129

c_status distribution

KeyCells
IMPUTED_COHORT_MEDIAN65
MEASURED130
null18

m_status distribution

KeyCells
IMPUTED_COHORT_MEDIAN68
MEASURED105
NOT_APPLICABLE2
null38

Presence census — raw

Presencescore_modeVerticalGeoCellswAwBwCwM
A+BabsolutecasinoBR10.4670.53300
A+BabsolutecasinoPT10.4670.53300
A+B+CabsolutebettingAU90.3500.4000.2500
A+B+CabsolutebettingCA50.3500.4000.2500
A+B+CabsolutebettingDE50.3500.4000.2500
A+B+CabsolutebettingES70.3500.4000.2500
A+B+CabsolutebettingNL30.3500.4000.2500
A+B+CabsolutebettingPT10.3500.4000.2500
A+B+CabsolutecasinoBR20.3500.4000.2500
A+B+CabsoluteexchangeGB10.3500.4000.2500
A+B+CabsoluteexchangeUS10.3500.4000.2500
A+B+CrulercasinoGB20.3500.4000.2500
A+B+C+MabsolutebettingUS90.2450.2800.1750.300
A+B+C+MabsolutecasinoCA40.2450.2800.1750.300
A+B+C+MabsolutecasinoES80.2450.2800.1750.300
A+B+C+MabsolutecasinoNL80.2450.2800.1750.300
A+B+C+MabsolutecasinoPT10.2450.2800.1750.300
A+B+C+MabsoluteexchangeGB60.2450.2800.1750.300
A+B+C+MabsoluteexchangeUS50.2450.2800.1750.300
A+B+C+MrulerbettingGB400.2450.2800.1750.300
A+B+C+MrulercasinoDE180.2450.2800.1750.300
A+B+C+MrulercasinoGB500.2450.2800.1750.300
A+B+C+MrulercasinoUS190.2450.2800.1750.300
A+B+MabsolutecasinoCA10.2970.33900.364
A+B+MabsoluteexchangeGB10.2970.33900.364
A+B+MabsoluteexchangeUS10.2970.33900.364
B+CabsolutebettingCA200.6150.3850
B+C+MabsolutecasinoCA200.3710.2320.397

Presence census — measured

Presencescore_modeVerticalGeoCellswAwBwCwM
A+BabsolutebettingAU40.4670.53300
A+BabsolutebettingCA10.4670.53300
A+BabsolutebettingUS10.4670.53300
A+BabsolutecasinoBR10.4670.53300
A+BabsolutecasinoCA10.4670.53300
A+BabsolutecasinoES20.4670.53300
A+BabsolutecasinoNL30.4670.53300
A+BabsolutecasinoPT10.4670.53300
A+BrulerbettingGB100.4670.53300
A+BrulercasinoDE70.4670.53300
A+BrulercasinoGB140.4670.53300
A+BrulercasinoUS20.4670.53300
A+B+CabsolutebettingAU50.3500.4000.2500
A+B+CabsolutebettingCA40.3500.4000.2500
A+B+CabsolutebettingDE50.3500.4000.2500
A+B+CabsolutebettingES70.3500.4000.2500
A+B+CabsolutebettingNL30.3500.4000.2500
A+B+CabsolutebettingPT10.3500.4000.2500
A+B+CabsolutebettingUS20.3500.4000.2500
A+B+CabsolutecasinoBR20.3500.4000.2500
A+B+CabsolutecasinoCA10.3500.4000.2500
A+B+CabsolutecasinoES20.3500.4000.2500
A+B+CabsolutecasinoNL30.3500.4000.2500
A+B+CabsoluteexchangeGB10.3500.4000.2500
A+B+CabsoluteexchangeUS10.3500.4000.2500
A+B+CrulerbettingGB60.3500.4000.2500
A+B+CrulercasinoDE60.3500.4000.2500
A+B+CrulercasinoGB40.3500.4000.2500
A+B+CrulercasinoUS60.3500.4000.2500
A+B+C+MabsolutebettingUS60.2450.2800.1750.300
A+B+C+MabsolutecasinoCA30.2450.2800.1750.300
A+B+C+MabsolutecasinoES30.2450.2800.1750.300
A+B+C+MabsolutecasinoNL20.2450.2800.1750.300
A+B+C+MabsolutecasinoPT10.2450.2800.1750.300
A+B+C+MabsoluteexchangeGB60.2450.2800.1750.300
A+B+C+MabsoluteexchangeUS50.2450.2800.1750.300
A+B+C+MrulerbettingGB210.2450.2800.1750.300
A+B+C+MrulercasinoGB250.2450.2800.1750.300
A+B+C+MrulercasinoUS80.2450.2800.1750.300
A+B+MabsolutecasinoES10.2970.33900.364
A+B+MabsoluteexchangeGB10.2970.33900.364
A+B+MabsoluteexchangeUS10.2970.33900.364
A+B+MrulerbettingGB30.2970.33900.364
A+B+MrulercasinoDE50.2970.33900.364
A+B+MrulercasinoGB90.2970.33900.364
A+B+MrulercasinoUS30.2970.33900.364
B+CabsolutebettingCA200.6150.3850
B+C+MabsolutecasinoCA200.3710.2320.397

Denominators

  • Headline cell count: 675
  • Published cell count: 213
  • Distinct brand count (package stamp; brand ids never written into buckets): 112
  • Floor-clamped cells: 3
  • Population filter: published
  • Environment: production

Corrections

Factual corrections to this study (method, denominators, or a reproduced share that disagrees with the frozen package) are free and open to everyone. Contact /privacy/contact. Corrections do not change scoring formulas; they correct the research artefact.

Why won't you show us the data? This page publishes derived cell counts and the method that produced them. It does not ship per-brand rows, UUIDs, or encumbered review corpora. The reproducible package in docs/research/renormalisation-census-2026/ is brand-free by construction; production regeneration stays read-only against IndexFair's own score tables.