Redundancy and coherence pass on the merged report

Read as one document rather than four, with an overlap scan over all
146 prose paragraphs.

- §2.2 and Appendix A both carried the full derivation of the on-chain
  `f`-rounding offset (37% trigram overlap) — an artefact of the parts
  having to stand alone. §2.2 now states the fact, the ~1.010 factor,
  and that this report's estimator is unbiased, then defers the
  derivation and the spec-change sizing to Appendix A. Residual overlap
  is the unavoidable shared notation.

- §7's figure-location note was corrected to the measured placement
  (Appendix B and C hold figB1/figB2 and fig17/fig18/fig21; it had said
  §9) and extended to fig30–fig35.

Checked and found clean: no verbatim repeated sentences; no other
paragraph pair above 20% overlap that is not a vocabulary coincidence;
no directional reference ("above"/"below") inverted by moving §7–§8
after §6 — the three flagged were numeric comparisons, not navigation;
all 33 TOC entries resolve and every top-level section is listed; 47
anchors and 37 figures resolve in both markdown and rendered HTML.

Tests: 209 passed. ruff clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marcin Pawlowski 2026-08-05 10:45:16 +02:00
parent c5059c2fc8
commit 8d1ede2807
No known key found for this signature in database

View File

@ -113,7 +113,7 @@ Slot deduplication is what makes the recovered equilibrium exactly 1.0 rather th
**It cannot exceed the true stake.** TSI counts *occupied slots*, and a window can hold no more occupied slots than actually occurred, so the counted density is capped at the true rate `f` and the equilibrium `D̂/D` is **bounded by 1** — it recovers *up to* exactly 1 (full uncle recovery) and sits below it when delay orphans slots faster than uncles restore them ([§3.2](#s3-2)). The old `c(f) ≈ 1.017` ceiling above 1 was an artefact of counting uncle *blocks*; slot-counting removes it ([§2.1](#s2-1), [Appendix A](#sA)). Around that bounded equilibrium each epoch's finite-window measurement carries ≈ ±0.9 % sampling noise (`√((1f)/(f·T))` at k = 2160), which averages out over the burn-in ([Appendix B](#sB)) and is *fairness-neutral* — all nodes share the same `D̂`, so relative win rates are untouched; only the block pace breathes by ±0.9 % epoch to epoch, with no systematic bias.
**The one residual bias is the on-chain rounding of `f`, and it is optional.** The spec stores the target as an integer at three-decimal precision, `f_p = ⌊1000·f⌋/1000 = 0.033` instead of `1/30 = 0.03333…`. Driving the density to `0.033` rather than to `f` leaves the estimate ≈ 1 % high (`f/f_p ≈ 1.010`) — a factor common to every node, so fairness is untouched, but an absolute ~1 % under-delivery of win probability and a ~1 % slow canonical pace. It is removed by carrying `f` at higher precision — **which this report's estimator does**: it drives the density to exact `f = 1/30` (residual 0), even finer than the 10⁻⁶ spec bump it recommends (`f_p = 0.033333`, residual < 10⁻⁵) so every result here is unbiased. It is a one-constant change with no dynamics cost; the current spec still uses 10⁻³ and should adopt it ([§8](#s8) row 14; [Appendix A](#sA) quantifies it). This is the *only* systematic offset from 1 that the counting fix leaves.
**The one residual bias is the on-chain rounding of `f`, and it is optional.** The spec stores the target as a three-decimal on-chain integer, `f_p = 0.033` rather than `1/30`, and driving the density to `f_p` leaves the estimate high by the fixed factor `f/f_p ≈ 1.010`. It is common to every node, so fairness is untouched; it is removed by carrying `f` at higher precision, and **this report's estimator drives the density to exact `f`, so every result here is unbiased**. This is the *only* systematic offset from 1 that the counting fix leaves — and the sole reason a deployed `D̂/D` would read ≈ 1.01 rather than 1.00. [Appendix A](#sA) derives it and sizes the one-constant spec change that removes it ([§8](#s8) row 14).
---