---
title: Critical risk
family: heuristic-search
summary: Play normally on a healthy board, then switch to worst-case thinking when height, crowding, or covered discs put the game at risk.
status: unknown
evidence: repository-verified
reads: public
---
Be cautious only when the board is actually in trouble — play the ordinary way
on a healthy board, and switch to worst-case thinking when height, crowding,
or a backlog of covered discs says the game is close to ending.
<EvidenceLabel status="unknown" evidence="repository-verified" reads="public" />
<Callout title="No retained result" tone="warn">
This lab is complete and gated, and **no outcome for it exists anywhere in
this repository**, not in the [experiment history](/docs/research/history),
not in the machine-readable records, not as a task-record note. The
[experiment index](/docs/research/experiment-index) marks it *unknown*. This
page describes what the program does, from the program. Nothing on it is a
claim about whether the idea works.
</Callout>
## The intuition
Playing cautiously all the time is measurably bad. The
[risk-sensitive](/approaches/heuristic-search/risk-sensitive) page records the
version of that idea that was tested properly inside the reference search: it
lost score, survival *and* flow at once. One plausible reading of that failure
is that caution was applied everywhere, including on boards where there was
nothing to be cautious about, so it mostly spent good moves avoiding
imaginary disasters.
This lab tests the obvious repair. Leave the policy alone almost all the time,
and turn on worst-case aggregation **only at critical states** — boards where
three specific things say the game is genuinely close to ending:
- the tallest column has reached a threshold height;
- the board is crowded, **or**
- there is a **cover backlog**: more closed gray discs than the remaining
drops before the rise can plausibly open, computed as
`covers − 1.4 × drops until the rise`: the same 1.4-reveals-per-move
arithmetic used across this family.
Everywhere else, the policy is the ordinary averaging one.
## How it works, step by step
1. **Read the public position** — board, next disc, rise clock.
2. **Test whether this position is critical** using one of two threshold sets:
an *early* trigger (height 5, occupancy 20, backlog 4) that fires sooner,
or a *late* one (height 6, occupancy 24, backlog 6) that waits longer.
3. **If it is not critical**, choose the column by the ordinary average over
sampled chance outcomes.
4. **If it is critical**, rank the columns instead by a blend of that average
and the average of the worst 40% of their sampled outcomes, with the blend
controlled by a risk weight of 0.25 or 0.5.
5. **Record how often the trigger fired** and how often it changed the move —
separately for critical and non-critical positions.
Five profiles are played on identical paired games: a control with the trigger
disabled, and early/late triggers at each of the two risk weights.
## What is known
That the experiment is designed to answer a sharper question than its
predecessor did. Because the control profile is included in the same paired
run, and because switch counts are recorded separately for critical and
non-critical positions, a completed run would show not just whether the idea
helps but *how often it intervened*, which is the number that the
conservative-override family has repeatedly needed and repeatedly lacked.
What is not known is any of that. The run is not recorded.
<TechnicalDetails title="The technical record">
The [experiment index](/docs/research/experiment-index) records this as
**unknown, repository-verified**: *"no durable outcome was located."*
Repository-verified means the source is present and its purpose is clear from
reading it; it is not a claim that a run occurred.
Repository-verified from the source: `critical-risk-lab.cpp` defines five
profiles — `control` (risk weight 0), `early-cvar25`, `early-cvar50` (height
5, occupancy 20, backlog 4.0) and `late-cvar25`, `late-cvar50` (height 6,
occupancy 24, backlog 6.0): a fixed tail fraction of 0.4, and a root
aggregate of `mean × (1 − w) + CVaR × w`. Screen and confirmation cohorts are
eight games each, from `0x3d700500…` and `0x3d700600…`, at a 500-move cap. The
underlying policy is the shared bounded phase-safety behaviour search; the
profiles change only the root aggregation and only at states the trigger
selects.
Eight games is a small cohort, and this design has five arms.
**Related evidence that does exist.** The strategy catalog's conservative-
override section reports that gates of this kind *"successfully prevented many
weak policies from reaching protected tests, but the admitted switches were
usually too rare, poorly calibrated, or unstable across whole games"*, and
that *"mean-only gains often hid damage to the lower tail."* The nearest
ledger-recorded measurement is the root-CVaR ablation described on the
[risk-sensitive](/approaches/heuristic-search/risk-sensitive) page, which
applied caution unconditionally and regressed on every measure.
</TechnicalDetails>
## What this taught us, and what is still open
- **The unanswered question is a good one.** "Was unconditional caution the
problem, or was caution the problem?" is exactly the follow-up the recorded
root-CVaR failure invites, and this program is built to answer it on paired
games with a control arm.
- **A completed run would still be a screen.** Sixteen games across five arms
cannot establish an improvement over the reference search; it can only
decide whether the idea is worth a larger, preregistered comparison.
- **The standing conclusion is unchanged until then.** Confidence gates are a
safety mechanism, not a source of strategic information. Selective caution
is a cheaper hypothesis than most in this repository, and it is untested.