The W = 12 pairing is now measured the way a ~0.001 claim has to be: every
integer W from 8 to 15, 32 replicates, and paired_streams so the whole grid runs
on common random numbers (_base_key excludes both uncle_window_anchor and
window_absorption, so a replicate draws one stake vector, one graph and one
lottery for every cell). The earlier unpaired sweep reported +0.0008 against a
standard error of 0.0009 — it could not resolve its own headline.
Paired against today's recipe (uncle-anchored, W = 10):
parent W=10 -0.0056 +- 0.0005 t = -10.4
parent W=11 -0.0024 +- 0.0005 t = -4.5
parent W=12 +0.00004 +- 0.00050 t = 0.1 <- parity
parent W=14 +0.0016 +- 0.0004 t = 3.5
W = 12 is the smallest window reaching parity, and the parity is exact rather
than marginal: W = 11, one interval short, is still resolvably worse. p_ref
agrees at the same window (0.938 vs 0.939) instead of lagging to W = 15 as the
unpaired edition had it. Also states what the sweep makes visible: widening
today's uncle-anchored rule buys +0.0018 on its own, so W = 12 makes the swap
cost-neutral against the CURRENT recipe rather than optimal in absolute terms.
CORRECTIONS to the previous commit, which measured contamination on the wrong
RNG stream. The engine draws stake from seedseq_for(config).spawn(...)[0]; I
used rng_for(config), the root. Both are valid stake draws, neither is the same
vector. Redone properly:
- The capstone draw was NOT contaminated: 0 of 8 replicates over 1.25x its
label, worst 0.369 against 0.30, no majority. My "2 of 8, one a 61%
majority" was wrong and is withdrawn from §8.4 and §9.
- The finding that survives is sharper: on that same mild overshoot the spec's
rule moved 0.001 and the parent-anchored variant moved 0.016. A rule leaning
harder on the reference window is far more sensitive to an oversized
suppressing coalition.
- Genuinely contaminated: §6.12's 12-replicate W sweep (2 majorities, worst
0.720) and §6.8's selfish margin at a=0.3 and a=0.4 (2 and 1 majorities).
§6.5's variants and §6.8's a=0.2 arm are clean; §8.3 item 20 narrowed to the
one sweep that still needs re-running.
- The general severity is worse than first stated, not better: at the report's
geometry a nominal 0.3 realised a majority in 12% of replicates.
Two more defects found on the way:
- stake_for(config) added, because scripts used rng_for and the engine uses
the spawned child — so every script that rebuilt a tree was analysing a
different network than the trajectory it was compared against. All scripts
and tests now use it.
- A coalition member could receive a private block BEFORE its parent: the
arrival was clamped against the PRODUCER's view of the parent and applied to
the whole coalition, so a member still awaiting a public parent got the child
first. Now clamped per member. Caught by the existing arrival-order test once
the stake derivation was corrected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ -815,19 +815,26 @@ The floor rises by one to two block-intervals, which is what the ~one-block-inte
**The uncle cap rule is unchanged.** Sizing `U` is the other half of the recipe, and it is not affected: the smallest cap reaching the 0.98 bar is identical under both anchors at every load tested (`configs/window-uncles-anchor.yaml`, `W` = 10 held slack) — `U` = 1 at `ρ` = 0.27 and 0.47, `U` = 2 at 0.87, and neither anchor clears at `ρ` = 1.27, which is past the operating point the recipe permits anyway. `U = ⌈ρ⌉ + 1` therefore carries over verbatim. At that recommended cap the residual cost is small and stays inside the design regime: `−0.003` at `ρ` = 0.47 and 0.87, growing to `−0.009` only at `ρ` = 1.27. The anchor's cost lives in the window, not in the cap.
**`W = 12` restores it — measured, not inferred.** The pairing this section recommends was first argued from the shape of the mechanism; sweeping the window under the adversary that exposed the cost settles it (`configs/pref-window-anchor.yaml`, the capstone's geometry, 30 % suppression, 12 replicates):
**`W = 12` restores it — measured against every integer, on common random numbers.** The pairing was first argued from the shape of the mechanism; this sweep fixes the value. It has to resolve differences of ~0.001 in `D̂/D`, so it is built for power rather than coverage: `W` at **every integer from 8 to 15** rather than a few scattered points, **32 replicates**, and — the part that does the work — `paired_streams`, which puts the whole grid on **common random numbers**. `SimConfig._base_key()` excludes both `uncle_window_anchor` and `window_absorption`, so at a given replicate every cell draws the same stake vector, the same peering graph and the same lottery, and the only thing that differs between two cells is the window rule itself. Differences are then *paired*, which removes the between-replicate variance that left the earlier unpaired version unable to resolve its own headline (a difference of 0.0009 against a standard error of 0.0009). `configs/pref-window-anchor.yaml`, the capstone's geometry, 30 % suppression adversary.
Parent-anchored at `W` = 12 lands within **+0.0009** of today's uncle-anchored `W` = 10 (0.9941 ± 0.0010 against 0.9932 ± 0.0008) — parity inside one standard error — so the anchor's cost under a suppressing adversary is bought back by the two extra block-intervals the longer parent gap consumes. `p_ref` recovers with it, to 0.9372 against 0.9374: parity on the reference rate too, at the same `W`. At `W` = 10 the anchor costs 0.0046 under this adversary (0.9885 against 0.9932), which is the one regime where the change is not free — so **pair the anchor change with `W` = 12, or take neither**.
The last two columns are the paired difference against **today's recipe** — uncle-anchored at `W` = 10 — so the question "does this configuration cost anything relative to what the spec does now?" is read straight off them.
*These are the re-measured values.* The first edition of this sweep put the same pairing at +0.0008 but had `p_ref` still short at `W` = 12 (0.924 against 0.933) and only matching at `W` = 15, and put the `W` = 10 cost at 0.0065. Two of its twelve replicates were running a larger adversary than their label ([§9](#s9)); with that fixed the recommendation is unchanged and its justification is stronger, because the reference rate now reaches parity at the same `W` as the estimate rather than three intervals later.
**`W` = 12 is the smallest window at which the parent anchor reaches parity, and the parity is exact.** Every window below it is resolvably worse: even `W` = 11, only one interval short, still costs 0.0024 at `t` = 4.5. At `W` = 12 the paired difference is `+0.00004 ± 0.00050`, `t` = 0.1 — indistinguishable from today's recipe, and `p_ref` agrees (0.938 against 0.939). Beyond it the anchor is *better* than today rather than equal (`t` = 3.5 at `W` = 14), so 12 is a floor and not a knife-edge. **Pair the anchor change with `W` = 12, or take neither**: at `W` = 10 it costs 0.0056 under this adversary, at `t` = 10.4, which is the one regime where the change is not free.
Note the uncle-anchored column moves too — widening today's rule to `W` = 12 buys +0.0018 (`t` = 4.5) on its own. So `W` = 12 is what makes the anchor change *free relative to today*, not what makes it optimal; a deployment that widened `W` for its own sake would find the parent anchor still costs ~0.0017 against the uncle anchor at equal `W`. The recommendation is scoped to the swap being cost-neutral against the current recipe, which is the decision actually on the table.
*This supersedes two earlier editions of this measurement.* The first swept 5 windows at 12 replicates, unpaired, and reported the pairing at +0.0008 with `p_ref` still short at `W` = 12 and only matching at `W` = 15. Its `t` on that headline was below 1 — it could not actually resolve the claim it made — and 2 of its 12 replicates were running majority coalitions under the [§9](#s9) sizing defect. Both problems are fixed here, and the conclusion survives both: the value `W` = 12 is unchanged, now with `p_ref` reaching parity at the same window rather than three intervals later, and with the difference resolved rather than assumed.
**One further observation, and it sharpens the case.** At `δ_max` = 16 the *honest* uncle-anchored arm already reaches **315 slots** — past its own `w_u` = 300. Under the current rule `w_u` is not a bound on how far back validation reaches even with no adversary present; under the parent rule the same cell is 296. The parameter only becomes a state-retention bound once it is anchored to the parent.
@ -948,7 +955,7 @@ Everything below is assembled from this report's own measurements; each row cite
17. **The `β_adv` axis is a nominal target, not a realised share ([§6.5](#s6-5)).** A random coalition is grown until its stake first reaches `β_adv`, so the last node added overshoots by its own size — under a Pareto tail, potentially a whale. The realised block share at a nominal `β_adv` = 0.1 is 0.137 ± 0.108, and that variance dominates the mean at small `β_adv`. The conclusions here are drawn from monotone trends across the axis and are unaffected, but a reader should not read `β_adv` as an achieved share; a whale coalition (filled largest-first to the target) lands on it precisely and is the cleaner instrument where the exact share matters.
18. **The collapsed-branch tail is uncharacterised ([§6.2](#s6-2)).** Static withholding reaches the collapsed branch once in 96 runs — one replicate of the concentrated (whale) 50 % coalition at `δ_max` = 8 s — and never at `δ_max` = 4 s. One reproducible event is enough to retire "not an observed dynamical trap" but far too thin to give the event a rate; its frequency against `β_adv`, `ρ` and coalition concentration is unmeasured.
19. **Structurally uncompensatable orphans ([§6.7](#s6-7)(1), [§6.8](#s6-8)).** The uncle reward refunds `w_u` per *referenced* orphan, but 20–40 % of the honest blocks a private-chain attack destroys are unreferenceable by construction — buried behind the first block of a discarded run. Those producers cannot be compensated at any `w_u`, so the fairness guarantee inherits the first-fork ceiling exactly as the density repair does. No reward schedule fixes this; it is a property of the counting rule. Whether that is acceptable — honest miners bearing an uninsurable loss precisely when attacked — is a protocol-design question this report raises rather than settles.
20. **Two adversary studies await re-measurement ([§9](#s9)).** The coalition-sizing defect — a Pareto whale straddling the prefix cut could carry the coalition past its label, up to a majority in ~10 % of replicates — was fixed, and the load-bearing studies ([§8.4](#s8-4) capstone under both anchors, [§6.12](#s6-12)'s `W` pairing) were re-run. Two were not: [§6.8](#s6-8)'s selfish uncle-margin sweep (3/8, 2/8 and 1/8 replicates contaminated at `α` = 0.2/0.3/0.4) and [§6.5](#s6-5)'s `random`-selection scope variants (2/12 and 1/12). Both report *directional* results — whether a larger `U` clears a bar, whether a variant overturns a conclusion — and a too-large adversary does not flip either direction, which is why they are not withdrawn. But their **levels and thresholds should not be quoted as measured** until re-run. The `whale` arms, every honest sweep, and the [§6.2](#s6-2)/[§6.5](#s6-5) collapse event (a whale coalition) were never affected.
20. **Two adversary studies await re-measurement ([§9](#s9)).** The coalition-sizing defect — a Pareto whale straddling the prefix cut could carry the coalition past its label, up to a majority in ~10 % of replicates — was fixed, and the load-bearing studies ([§8.4](#s8-4) capstone under both anchors, [§6.12](#s6-12)'s `W` pairing) were re-run. One was not: [§6.8](#s6-8)'s selfish uncle-margin sweep, where 2 of 8 replicates at `α` = 0.3 and 1 of 8 at `α` = 0.4 were running majority coalitions (worst 0.602 and 0.707). It reports a *directional* result — whether a larger `U` clears a recovery bar — and a too-large adversary does not flip that direction, which is why it is not withdrawn. But its **levels and thresholds should not be quoted as measured** until re-run. Its `α` = 0.2 arm, [§6.5](#s6-5)'s scope variants, the `whale` arms, every honest sweep, and the [§6.2](#s6-2)/[§6.5](#s6-5) collapse event (a whale coalition) were clean.
<aid="s8-4"></a>
### 8.4 Capstone: the whole recipe, in one run
@ -963,11 +970,11 @@ Every finding above comes from a different sweep. As a final check that the reco
| max reorg depth | 3 | 3 |
| emergent `p_ref` | 0.944 | 0.937 |
*These numbers are the **countable** model's. An earlier edition of this table reported 1.001 / 0.998 with `p_ref` 1.000 / 0.990, measured before the countable redesign and never re-run against it — the capstone was missed when the other studies were brought over ([§9](#s9)). The corrected values are lower and the reference rate is materially lower (0.944 against 1.000), because the first-fork restriction makes some orphans unreferenceable that the earlier model counted. Nothing in the recommendation changes: accuracy still sits within the ±0.9 % per-epoch noise floor of [Appendix B](#sB) below the hard ceiling of 1, consensus is still exact, and `p_ref` remains far above the `≳ 0.3` the soft rule needs. The adversarial column was re-measured a second time after the coalition-sizing defect of [§9](#s9) was found — 2 of its 8 replicates had been running a larger adversary than their label, one of them a 61 % majority — which moved `D̂/D` from 0.994 to 0.995 and`p_ref` from 0.936 to 0.937. The spec's own recipe is barely sensitive to that defect. The [§6.12](#s6-12) variant below is not, which is the whole reason to state both.*
*These numbers are the **countable** model's. An earlier edition of this table reported 1.001 / 0.998 with `p_ref` 1.000 / 0.990, measured before the countable redesign and never re-run against it — the capstone was missed when the other studies were brought over ([§9](#s9)). The corrected values are lower and the reference rate is materially lower (0.944 against 1.000), because the first-fork restriction makes some orphans unreferenceable that the earlier model counted. Nothing in the recommendation changes: accuracy still sits within the ±0.9 % per-epoch noise floor of [Appendix B](#sB) below the hard ceiling of 1, consensus is still exact, and `p_ref` remains far above the `≳ 0.3` the soft rule needs. The adversarial column was re-measured a second time after the coalition-sizing defect of [§9](#s9) was found. This particular draw got off lightly — its worst replicate ran a 0.369 coalition against a 0.30 label and none reached a majority — and `D̂/D` moved only from 0.994 to 0.995,`p_ref` from 0.936 to 0.937. The spec's own recipe is barely sensitive to that defect. The [§6.12](#s6-12) variant below is not, which is the whole reason to state both.*
**Under the [§6.12](#s6-12) parent-anchored window** the same run gives 0.996 honest — no change — and **0.990 under the 30 % suppression adversary**, with `p_ref` at 0.923. The two effects still compound in the direction predicted: a tighter effective window leaves an orphan fewer chances to be referenced before its *parent* ages out, and an adversary suppressing references on its own blocks removes some of those chances. Neither isolated sweep shows the interaction, because [§6.12](#s6-12)'s honest arms hold the adversary at zero and its adversarial arms use a slack cap; that is the reason the capstone exists.
*This is the one place the [§9](#s9) coalition-sizing defect changed a conclusion rather than a digit.* An earlier edition read **0.974** here with `p_ref` 0.875, and drew from it the strongest argument for pairing the anchor change with `W = 12`. Two of the eight adversarial replicates were running a bigger adversary than their label — one of them a 61 % majority — and the parent anchor is far more sensitive to that than the spec's rule is, because a tighter window and a larger suppressing coalition compound. Re-measured, the anchor's cost under the same 30 % adversary is **0.006** (0.9953 → 0.9896), not the 0.021 that argument rested on. The `W = 12` pairing is a smaller correction than it appeared, and [§6.12](#s6-12) re-derives it from the re-measured sweep rather than from this figure.
*This is the one place the [§9](#s9) coalition-sizing defect changed a conclusion rather than a digit.* An earlier edition read **0.974** here with `p_ref` 0.875, and drew from it the strongest argument for pairing the anchor change with `W = 12`. The overshoot in this draw was mild — the worst of its eight adversarial replicates ran a 0.369 coalition against a 0.30 label, and none reached a majority — but the parent anchor is far more sensitive to it than the spec's rule is, because a tighter effective window and a larger suppressing coalition compound. That asymmetry is the finding: the same mild contamination moved the spec's rule by 0.001 and this one by 0.016. Re-measured, the anchor's cost under the same 30 % adversary is **0.006** (0.9953 → 0.9896), not the 0.021 that argument rested on. The `W = 12` pairing is a smaller correction than it appeared, and [§6.12](#s6-12) re-derives it from the re-measured sweep rather than from this figure.
The whole recipe coheres: accurate to the true stake (the ~1 % rounding removed), unanimous, shallow-forking, and its soft-inclusion premise (`p_ref` high) confirmed — and all of it survives a 30 % adversary actively trying to deflate the estimate — the honest and adversarial fork rates are close (0.328 ± 0.014 vs 0.350 ± 0.004), i.e. the suppression adversary barely changes the fork structure it exploits. (The honest `D̂/D` = 0.996 sits within the ±0.9 % per-epoch noise floor of [Appendix B](#sB), consistent with the equilibrium's hard ceiling of 1.) This also resolves the finding-2 ([§3.2](#s3-2)) vs row-4 tension in the recommendation's favour: at this operating point `⌈ρ⌉ = 1`, and the recommended `U = 2` (the `+1` margin) holds every metric at target with room to spare.
@ -1041,7 +1048,7 @@ Sweep studies are committed configs, run with `make <name>` (writes a dated `run
| **uncle cap under a private chain** (`U`×`W`×`α` against the SM1 engine adversary, plus the structural/queue decomposition of the honest orphans) | `scripts/selfish_uncle_margin.py` (`adversary_strategy: selfish`); `runs/selfish_uncle_margin{,_decomp}.parquet` | [§6.8](#s6-8) |
| **profit/deflation frontier** (how far a *paid* adversary can deflate `D̂`; the deflation-optimal MDP) | `scripts/deflation_frontier.py` (`selfish_mdp.deflation_frontier`, `.deflation_optimal_stats`); fig37 | [§6.6](#s6-6) |
| **uncle- vs parent-anchored reference window** (honest recovery cost, and an adversary's reach into historical state) | `scripts/uncle_parent_window.py` (`uncle_window_anchor`, `adversary_strategy: deep_parent`); `runs/uncle_parent_window{,_effort}.parquet`; fig38 | [§6.12](#s6-12) |
| **the sizing rules re-measured under both anchors** (the `W` floor at `U` = 1; the `U` rule at `W` = 10; the `W` pairing under a suppression adversary) | `configs/absorption-window-anchor.yaml`, `configs/window-uncles-anchor.yaml`, `configs/pref-window-anchor.yaml` | [§3.4](#s3-4), [§6.8](#s6-8), [§6.12](#s6-12) |
| **the sizing rules re-measured under both anchors** (the `W` floor at `U` = 1; the `U` rule at `W` = 10; the `W` pairing under a suppression adversary — the last **paired**, every integer `W` 8–15, 32 replicates) | `configs/absorption-window-anchor.yaml`, `configs/window-uncles-anchor.yaml`, `configs/pref-window-anchor.yaml` | [§3.4](#s3-4), [§6.8](#s6-8), [§6.12](#s6-12) |
| **the deployed operating point** (`δ_max` = 4 from the spec's Blend profile; the three `f`-precision arms) | `scripts/spec_point.py` (`f_precision`); `runs/spec_point.parquet` | [§2.2](#s2-2), [§8.5](#s8-5), [Appendix A](#sA) |
| **the spec point at scale and by window** (`N` = 5000; `W_abs` sweep at `δ_max` = 4) | `configs/spec-point-n5000.yaml` (run twice, `--old`), `configs/spec-point-window.yaml` | [§3.4](#s3-4), [§8.5](#s8-5) |
@ -1063,7 +1070,7 @@ Sweep studies are committed configs, run with `make <name>` (writes a dated `run
Because the two models draw independent RNG streams, every countable-vs-unrestricted comparison is **unpaired**, and its resolution is set by the replicate spread rather than by the effect size. Each comparison sweep therefore includes a `U = 0` arm as a **negative control**: with no uncles the models are identical by construction, so the measured `U = 0` gap is a direct reading of the noise floor at that delay and replicate count. At `δ_max = 32` with 5 replicates that floor is ≈ 0.23 in `D̂/D` — larger than several real effects elsewhere in the grid — which is why [§3.2](#s3-2) reports a `t` statistic per cell and why the design regime is measured separately at 40 replicates ([§3.2a](#s3-2a)).
**Coalition sizing: a tail defect in the adversary construction, found and fixed.** The adversarial coalition is the node set whose stake sums to `adversary_frac`. It was built by a **cumulative-prefix cut** — the smallest random prefix whose stake reaches the target — and under a Pareto tail that lets a single whale straddling the cutoff carry the coalition far past its label. The *median* was always on-label, which is why it survived review; the tail was not. Over 60 replicates of the default draw, a nominal `adversary_frac` of 0.4 realised a **majority** coalition in ~10 % of replicates and reached 0.97, and a nominal 0.2 reached 0.90. A sweep labelled "30 % adversary" was therefore, in a minority of its replicates, simulating a substantially larger attacker — occasionally one holding more stake than everyone else combined.
**Coalition sizing: a tail defect in the adversary construction, found and fixed.** The adversarial coalition is the node set whose stake sums to `adversary_frac`. It was built by a **cumulative-prefix cut** — the smallest random prefix whose stake reaches the target — and under a Pareto tail that lets a single whale straddling the cutoff carry the coalition far past its label. The *median* was always on-label, which is why it survived review; the tail was not. Over 120 replicates at the report's geometry, a nominal `adversary_frac` of 0.3 realised a **majority** coalition in 12 % of replicates and reached 0.95; 0.4 did so in 9 % and reached 0.96; even 0.2 reached 0.97 in 3 %. Roughly one replicate in ten of any adversarial sweep was running an attacker at least a quarter larger than its label. A sweep labelled "30 % adversary" was therefore, in a minority of its replicates, simulating a substantially larger attacker — occasionally one holding more stake than everyone else combined.
Two parts of the code were never affected, which is what makes this a miss rather than an oversight. The **`whale` selection arm** already used the fit-then-close rule below — it exists because "taking whales until the cumulative sum first exceeds the target would overshoot badly under a heavy tail" — and the **churn amplitude** helper documents the identical failure ("a 30 % label realising up to ~53 %") and fixes it the same way. The `random` arm, the default, kept the rule the other two had each rejected.
@ -1071,16 +1078,20 @@ The construction is now fit-then-close in random order: take every node that sti
**What it reached.** Only studies with an adversary and the default `random` selection; the `whale` arms, every honest sweep, and the [§6.2](#s6-2)/[§6.5](#s6-5) collapse event (a *whale* 50 % coalition) are untouched. Contaminated replicates per study, and what re-measuring moved:
| [§8.4](#s8-4)/[§6.12](#s6-12) capstone, parent anchor | 0 of 8 | 0.369 vs 0.30 | `D̂/D` 0.974 → **0.990**, `p_ref` 0.875 → **0.923** — the one changed conclusion |
| [§6.12](#s6-12) `W` pairing, the 12-replicate edition | 2 of 12 (**2 majorities**) | 0.720 vs 0.30 | re-run *and* re-designed as a paired sweep — same value for `W`, now resolved; see [§6.12](#s6-12) |
| [§6.8](#s6-8) selfish uncle margin, `α` = 0.3 | 2 of 8 (**2 majorities**) | 0.602 vs 0.30 | not re-run — see below |
| [§6.8](#s6-8) selfish uncle margin, `α` = 0.4 | 1 of 8 (**1 majority**) | 0.707 vs 0.40 | not re-run — see below |
| [§6.8](#s6-8) selfish uncle margin, `α` = 0.2 | 0 of 8 | 0.202 vs 0.20 | clean as run |
| [§6.5](#s6-5) scope variants, `random` arm | 0 of 12 at `β_adv` = 0.3 and 0.5 | 0.345 vs 0.30; 0.567 vs 0.50 | clean as run |
| [§6.12](#s6-12) `uncle_parent_window` | 0 of 10 | 0.346 vs 0.30 | clean as run |
The two not re-run are stated as outstanding rather than quietly carried: both report *directional* results (does a larger `U` clear a bar; does a variant overturn a conclusion) whose direction a too-large adversary does not flip, but neither their levels nor their thresholds should be quoted as measured until they are re-run. That is [§8.3](#s8-3) item 20.
Note the [§8.4](#s8-4) rows: that draw contained **no** oversized coalition, and the spec's own recipe barely moved — yet the parent-anchored variant moved by 0.016 on the same replicates. A rule that leans harder on the reference window is more sensitive to a mildly oversized suppressing coalition than the spec's rule is, which is why the two rows differ by an order of magnitude on identical inputs.
The [§6.8](#s6-8) rows at `α` = 0.3 and 0.4 are the ones genuinely contaminated, and they are stated as outstanding rather than quietly carried: that sweep reports a *directional* result (does a larger `U` clear a recovery bar), and a too-large adversary does not flip the direction, but its **levels and thresholds should not be quoted as measured** until it is re-run. That is [§8.3](#s8-3) item 20.
The capstone was re-run under the countable model (and both window anchors) after it was found still carrying pre-redesign numbers; its parquet now carries an `anchor` column. All other studies were **re-run on 2026-07-23/24 with the corrected slot-counting mechanism** ([§2.1](#s2-1)) and the early-stop optimisation; the resilient batch is `scripts/run_all_reruns.sh` (per-step log in `runs/rerun_status.log`). Canonical run directories (latest): fullscale N=5000/10000 = `2026-07-24_094519_fullscale`; fullscale N=1000/2000 = `2026-07-23_171803_fullscale-small`; uncle-window = `2026-07-24_001456`; window-uncles = `2026-07-24_014240`; block-rate = `2026-07-24_043943`; blend-hops-delay = `2026-07-24_064052`; window-scale = `2026-07-24_085234`; latency-shape = `2026-07-24_090014_expdist`; stake-tail = `2026-07-24_090044_pareto133`; heterogeneous-start = `2026-07-24_090114_default`; N-scaling = the `nscaling-{a,b}` + `nscaling32-{a,b}` runs; adversary grids = `runs/adversary_grid/`; jitter = `runs/jitter_grid/`; bootstrap = `runs/bootstrap_fullscale/`; fluctuation = `runs/fluctuation_u0.parquet`; fork-rate = `runs/fork_rate_vs_delay.parquet`; ρ-boundary = `2026-07-27_195627_rho-boundary`. Referencing-model studies: countable-vs-unrestricted (paired, primary) = `2026-08-05_120804_cvo-paired-countable` / `2026-08-05_123403_cvo-paired-old`; the superseded unpaired pair = `2026-08-04_103536_cvo-countable` / `2026-08-04_104010_cvo-old`; window absorption = `2026-08-04_104633_absorption-window`; fine delay band (unpaired) = `2026-08-04_191441_fine-countable` / `2026-08-04_195353_fine-old`; fine delay band (paired, primary) = `2026-08-05_111109_fine-paired-countable` / `2026-08-05_113218_fine-paired-old`. Adversarial-countability studies: uncle-selection deviation = `2026-08-05_152617_uncle-selection`; countable-selfish MDP = `runs/countable_selfish.parquet` + `runs/countable_selfish_reorg.parquet`; §6.5 scope variants and the withhold-load sweep = `runs/adversary_variants_{whale,jitter,beta,withhold_load}.parquet`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.