---
title: Where the points actually come from
family: lifetime-objective
summary: Attributes every point to its source and shows that Hardcore score mostly measures survival time.
status: completed
evidence: reproduced
reads: diagnostic
---
Before trying to score more, this work simply asked where the points already
come from, and the answer turned out to be that **a Drop7 Hardcore score is
survival time wearing a different unit**.
<EvidenceLabel status="completed" evidence="reproduced" reads="diagnostic" />
This is not a policy. It is a measuring instrument: it plays the existing
reference policy, unmodified, and counts things while it plays.
## The intuition
There are three ways to earn points in this game mode, and they are wildly
unequal in size.
<div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(180px, 1fr))", gap: 12, margin: "1rem 0" }}>
<Stat label="surviving one row rise" value="17,000" hint="happens every five drops, automatically, as long as you are alive" />
<Stat label="emptying the whole board" value="70,000" hint="never once achieved in 64 games of the reference policy" />
<Stat label="a spectacular five-deep chain" value="2,737" hint="seven discs clearing across five waves — worth 0.16 of one row rise" />
</div>
Chains are what a human player experiences as *playing well*. The scoreboard
barely notices them. Staying alive one more [rise](/learn/glossary) is worth
more than almost any chain you can build, and the rises arrive on a clock you do
not control. So the question "how do I score a million points?" collapses into
"how do I stay alive roughly three times longer?"
## How the measurement works
1. **Input.** Nothing new. The program includes the frozen reference searches —
the depth-3 and depth-4 [fair expectimax](/learn/concepts/chance-vs-choice)
policies, as a library and calls them unchanged.
2. **Instrumentation.** A wrapper around the game loop tags every point earned
as one of three sources: the flat bonus for surviving a row rise, the
70,000-point bonus for emptying the board, and the points paid for each wave
of a chain.
3. **A self-check on every game.** The three sources must add up to the engine's
own score exactly. The run aborts if they ever do not.
4. **Weak controls.** Three deliberately bad policies — always the centre
column, a random legal column, and always the shortest column — play the same
games, so the value of searching can be separated from the value of merely
being alive.
5. **Output.** Per-game records: score, moves, rises, board clears, the three
point sources, how many numbered discs were cleared and how many gray discs
were revealed per move.
## What it found
Over 64 fresh games of the reference policy, **score and lifetime were
essentially the same variable**: the correlation between a game's final score
and the number of moves it lasted was 0.9995. Row-rise bonuses supplied 94.29%
of all points; chains supplied 5.71%; emptying the board supplied nothing at
all, because it never happened.
The second half of the finding is an arithmetic constraint rather than a
measurement. Every five-move cycle puts 12 new discs onto a 49-cell board: the 5
you drop, plus the 7 that arrive underneath on the rise. To survive
indefinitely, a policy must therefore average **2.400 numbered clears and 1.400
gray-disc reveals per move**. The reference policy sustains 1.973 and 1.090 — a
deficit of roughly 18% and 22%. It is not dying of bad tactics; it is running a
slow, structural shortfall, and the games that last longest are exactly the ones
that come closest to closing it.
<div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(160px, 1fr))", gap: 12, margin: "1rem 0" }}>
<Stat label="score vs. lifetime" value="r = 0.9995" hint="64 games, development tier" />
<Stat label="share of points from row rises" value="94.29%" hint="chains 5.71%, board clears 0.00%" />
<Stat label="mean lifetime" value="94.06 moves" hint="a one-million mean needs roughly 294" />
<Stat label="clears per move" value="1.973" hint="indefinite survival requires 2.400" />
</div>
<TechnicalDetails title="The technical record">
Source: [`finding-01-score-is-survival`](/docs/exploratory/finding-01-score-is-survival),
status exploratory, **evidence tier `development`**, reproduced in this checkout
on 2026-08-20. Cohort: 64 games of unmodified fair depth-4 on the exploratory
development lease `SEEDLEASE-A51D`, seeds `0xa51d0000`–`0xa51d003f`, 2,000-move
cap, 0 censored games, 0 score-identity violations.
| Metric | Value |
| --- | ---: |
| Mean score | 321,991.7 |
| Median / Q25 | 266,282 / 188,701 |
| Min / max score | 104,731 / 1,017,234 |
| Score standard deviation | 187,502 |
| Mean moves | 94.06 |
| Points per move | 3,423.2 |
| Rises per game | 17.86 |
| Board clears per game | 0.000 |
| Numbered clears per move | 1.973 |
| Covered reveals per move | 1.090 |
This is a *fresh-seed* run, not a replay: it independently lands near the
ledger-recorded fair depth-4 figure of **308,295.578 points at 90.031 moves over
64 games** ([research status](/docs/research/status)), which is recorded there as
a detailed-ledger number on a broader reference cohort.
Lifetime quartiles, same 64 games:
| Group | Mean moves | Mean score | Clears/move | Reveals/move |
| --- | ---: | ---: | ---: | ---: |
| Shortest 16 | 44.7 | 138,762 | 1.471 | 0.732 |
| Second 16 | 70.0 | 232,515 | 1.812 | 0.975 |
| Third 16 | 99.5 | 341,310 | 1.989 | 1.099 |
| Longest 16 | 162.1 | 575,380 | 2.147 | 1.216 |
| **Steady-state requirement** | **unbounded** | | **2.400** | **1.400** |
Weak-policy controls on the same 64 seeds: centre-first 57,233 points / 21.64
moves; random legal 80,778 / 28.44; lowest column 100,050 / 33.28; fair depth-4
321,992 / 94.06. Searching buys about 3.2 times the lifetime of random legal
play; the target needs a further 3.1 times on top of that.
Correlations over whole games: clears per move against moves r = 0.804; reveals
per move against moves r = 0.770; score against moves r = 0.9995.
**Limitations as recorded.** 64 games on one exploratory lease, with a score
standard deviation 58% of the mean, so the mean is known to roughly ±46,000 at
one standard error. The flow-balance requirement is necessary for indefinite
survival, not sufficient: a policy can meet it and still stack one column into
the ceiling. The zero-board-clear observation says nothing about whether a
clear-seeking policy could change the economics; that question was later probed
with a clairvoyant solver in the [scenario](/approaches/lifetime-objective/scenario)
work. All figures describe this repository's simulator, including the two
rise-boundary scoring discrepancies recorded in
[`audit-01-engine-fidelity`](/docs/exploratory/audit-01-engine-fidelity).
</TechnicalDetails>
## What this taught us, and what is still open
The useful consequence is a change of target. The repository's own
[research status](/docs/research/status) had described "roughly 2.4 numbered
clears and 1.4 reveals per move" as an empirical region associated with long
games, with a warning that they were diagnostic targets rather than proven
thresholds. They are neither empirical nor approximate: they are 12 divided by 5
and 7 divided by 5, the exact disc-conservation requirement of the five-move
rise cadence on a 49-cell board.
It also gives learning experiments a better label to predict. Raw score is a
heavy-tailed variable quantised in 17,000-point steps, with one number per
game. Remaining lifetime is the same quantity without the tail or the
quantisation, and per-move clear and reveal counts give one labelled observation
per move instead of one per game. That reasoning is what the
[survival-hazard evaluator](/approaches/lifetime-objective/afterstate-net) was
built on.
And it bounds what search alone can do. Rises come every five moves, so a
four-move look-ahead sees at most one rise boundary and cannot observe a flow
deficit accumulating across the forty-odd cycles that separate a 94-move game
from a 294-move one. The deficit is a slow variable, and a fast search is the
wrong instrument for it.
Still open: whether a policy that deliberately hunts board clears could change
the arithmetic. At 70,000 points a clear is worth 20.6 moves of survival, so one
clear per 20 moves would double the points-per-move rate. Nothing here measured
whether that is reachable.