# Misery Index v3 — frozen specification

**Specification fixed:** August 11, 2026, before v3 scores were calculated  
**Data cutoff:** completed 2025 NFL season, including Super Bowl LX  
**Coverage:** all 32 active NFL franchises  
**Update cadence:** once per completed season, never week to week

## Construct

Version 3 measures two related but different things and publishes both:

1. **Legacy Burden, 0–60** — what the franchise has made its supporters carry across its history.
2. **Current Suffering, 0–40** — how bad the last five completed seasons have actually been.

The headline Misery Index is their sum. This separation is the central correction. A historically tortured franchise can remain `Historic` on legacy while good present-day football lowers its headline score. A deep playoff run is always relief; it is never converted into extra misery merely because it ended short of a title.

The model measures franchise-level outcome drought. It does not claim to measure an individual fan's feelings, explanatory weirdness, market size, ownership conduct, or moral deservingness.

## Fixed parameters

| Parameter | Value |
|---|---:|
| Legacy / current weights | 60 / 40 |
| Championship half-life | 20 completed seasons |
| Pre–Super Bowl title weight | 0.5 |
| Full historical playoff-win relief | 0.5 wins per franchise-season |
| Recent window | 5 completed seasons |
| Recent half-life | 3 seasons |
| Postseason-berth relief in a recent season | 0.10 |
| Relief per postseason win in a recent season | 0.25 |
| Non-champion recent postseason relief cap | 0.85 |

Every value above is asserted, not estimated from the 32-team ranking. Sensitivity analysis must vary them after the baseline is produced; it must not use the observed Detroit rank to select the baseline.

## Legacy Burden, 0–60

### L1 — Championship legacy, 0–30

For every championship at or before cutoff season `y`:

`title_weight = 1.0` for a Super Bowl-era championship (1966 onward)  
`title_weight = 0.5` for an earlier NFL, AFL, or AAFC championship

`buffer_y = sum(title_weight × 2^(-(y - title_year) / 20))`  
`L1_y = 30 × (1 - min(buffer_y, 1))`

An old pre–Super Bowl championship remains real relief, but gives half the relief of an equally old Super Bowl-era championship. Multiple recent titles can maintain full relief; the component cannot become negative.

### L2 — Historical postseason scarcity, 0–15

`playoff_win_rate_y = cumulative_playoff_wins_y / seasons_played_y`  
`L2_y = 15 × (1 - min(playoff_win_rate_y / 0.5, 1))`

Losses do not enter this component. A postseason win can only reduce the burden.

### L3 — Sustained futility, 0–10

`losing_rate_y = cumulative_losing_seasons_y / seasons_played_y`  
`streak_fraction_y = min(longest_regular_season_losing_streak_y / 20, 1)`  
`L3_y = 10 × (0.6 × losing_rate_y + 0.4 × streak_fraction_y)`

A season is losing only when losses exceed wins. A tie ends a game losing streak. The 20-game anchor prevents one extreme streak from making the scale unbounded.

### L4 — Identity disruption, 0–5

`L4_y = 5 × min((4 × relocations_y + 2 × name_changes_y + 2 × suspended_seasons_y) / 10, 1)`

Relocation means a home-market change, not a local stadium move. Identity remains a small headline component because it is relevant to supporters but is not an on-field result.

## Current Suffering, 0–40

Let the current season have age zero, the previous season age one, and so on. The most recent five completed franchise-seasons are weighted by:

`recent_weight(age) = 2^(-age / 3)`

Available weights are normalized to sum to one. An expansion franchise with fewer than five completed seasons uses all available seasons.

### C1 — Recent regular-season suffering, 0–20

For each recent season:

`win_percentage = (wins + 0.5 × ties) / regular_season_games`

`weighted_win_percentage_y = weighted mean of the five season win percentages`  
`C1_y = 20 × (1 - weighted_win_percentage_y)`

An unbeaten window scores zero; a .500 window scores 10; a winless window scores 20. Replacing a loss with a win can only lower this component.

### C2 — Recent postseason non-closure, 0–20

For each recent season:

- no postseason appearance: `relief = 0`
- postseason appearance: `relief = min(0.85, 0.10 + 0.25 × postseason_wins)`
- league championship: `relief = 1.0`

`weighted_postseason_relief_y = weighted mean of the five season relief values`  
`C2_y = 20 × (1 - weighted_postseason_relief_y)`

This deliberately uses only postseason appearances, postseason wins, and championships. It does **not** use loss margin, conference-title losses, Super Bowl losses, or inferred playoff-round labels. A berth is modest relief, every win adds relief, and a championship is the maximum possible relief.

## Headline, tiers, and companion labels

`MISERY_y = L1_y + L2_y + L3_y + L4_y + C1_y + C2_y`

Ranks use unrounded scores. The Z-score at a cutoff is descriptive only and uses the 32-team population mean and population standard deviation.

| Headline /100 | Tier |
|---:|---|
| 0–19.999… | Untroubled |
| 20–39.999… | Ordinary |
| 40–59.999… | Afflicted |
| 60–79.999… | Severe |
| 80–100 | Historic |

The Legacy Burden receives the same labels after scaling its 0–60 score to a percentage of 60. Thus `Historic legacy` means at least 48/60 even when recent success puts the headline below 80.

Current Suffering uses descriptive state labels:

| Current /40 | State |
|---:|---|
| 0–7.999… | Calm |
| 8–15.999… | Stable |
| 16–23.999… | Strained |
| 24–31.999… | Severe |
| 32–40 | Crisis |

## Franchise continuity and time

1. Scores are computed only at completed-season cutoffs. They do not change after an ordinary regular-season week.
2. Expansion franchises begin with their first completed season.
3. Current franchise history follows the frozen franchise registry. Cleveland's history stays in Cleveland; Baltimore begins in 1996.
4. Wartime temporary mergers attach to both continuing constituent franchises, as declared in the evidence layer.
5. Suspended seasons are not played seasons; they enter only L4.
6. The recent window contains franchise-seasons, not empty calendar years.
7. A source correction creates a new data snapshot and a complete recomputation, never a hand-edited score.

## Predeclared behavioral checks

The implementation must fail if any of these properties fails:

1. Every component remains inside its published bound and the headline remains in 0–100.
2. At equal age, a pre–Super Bowl title gives less relief than a Super Bowl-era title.
3. Replacing a regular-season loss with a win cannot increase misery.
4. Adding a postseason win cannot increase misery.
5. Winning the championship gives more recent relief than any non-championship result.
6. Near-miss losses and inferred postseason stages have no path into the headline.
7. The current 32-team result uses exactly the completed 2021–2025 seasons for C1 and C2.
8. Every current result can be reproduced from the frozen evidence files without a network call.

## Required publication

The baseline publication must include:

- the complete 32-team ranking and six-component decomposition;
- annual franchise history through 2025;
- Detroit's year-by-year legacy/current split and tier crossings;
- one-parameter and joint sensitivity results;
- a comparison with v2 explaining material movement;
- the SHA-256 of this specification and the source manifest used for calculation;
- an independent arithmetic check outside the Python scoring implementation.

If the predeclared model produces an implausible result, that result must be preserved and diagnosed before any v3.1 change. It must not be silently tuned away.
