diff --git a/reports/tsi/tsi-report.md b/reports/tsi/tsi-report.md index b465e33..da4cbc9 100644 --- a/reports/tsi/tsi-report.md +++ b/reports/tsi/tsi-report.md @@ -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 (`√((1−f)/(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). ---