eval: block-gated scored horizon ladder (inert until configured) - #241
Closed
tensorlink-dev wants to merge 2 commits into
Closed
eval: block-gated scored horizon ladder (inert until configured)#241tensorlink-dev wants to merge 2 commits into
tensorlink-dev wants to merge 2 commits into
Conversation
[eval] scored_horizons + scored_from_block draw the verdict (and heat screen) windows as per-horizon seeded even-by-domain draws with equalised rung sizes; the pooled rows flow through the unchanged round statistic, so equal rungs weight horizons equally and the cluster bootstrap resamples feeds jointly across horizons. Defaults keep every path byte-identical to the single-horizon draw; activation follows the mix_from_block release-then-activate shape, and audit replay applies each round's own rule via the receipt's epoch_start_block. The calibration draw now delegates to the shared horizon_draw so the scored and telemetry draws cannot drift. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ewrx7YTJ46UosQFgLfDhPf
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
tensorlink-dev
added a commit
that referenced
this pull request
Sep 2, 2026
…d go-live block (owner 2026-09-02) [eval] scored_horizons / scored_from_block = 8991900 — PR #241's knobs, set to the SAME block as [round] funded_activation_block so the two flips are one coordinated validator update. Ignored by loaders without #241; on the merged tree the ladder is () at 8991899 and (64, 256, 720) at 8991900 (verified). Runbook: #241 must be in the deployed release; check the current pool's >= 784-step eligibility (the 720 rung sizes every rung) before the block. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y65PT2wahVQnhE1SjWXyGW
tensorlink-dev
added a commit
that referenced
this pull request
Sep 2, 2026
…uel settle (owner 2026-09-02) - Drop the pre-gate hold: before funded_activation_block the funded knobs read "off" and legacy rounds keep running (last one Thu 20:30 UTC, 6-8h); the first 12h boundary after it, 8992800 (≈ Fri 08:30 UTC), is the go-live block for BOTH the funded field and PR #241's ladder. - Keep the 12h epoch grid (owner): epoch_blocks 3600, no scheduled seam, max_rounds_per_day 2. The 3h grid is a later switch. - one_submission_per_hotkey bug: funded entries burned at the heat settle, BEFORE their legs ran, so a leg requeued unburned (sold-out/rate-limit/ infra) was terminally failed as "burned" by the next round's filter. Funded entries now burn at the DUEL settle per outcome — trained or generator-failed → spent; auth/market/infra → still re-fundable. Testnet runs the rule off, which is why the E2E never showed it. - Docs: spent-hotkey rollover rule (fresh hotkey, reveal after the Thu 20:30 cutoff), 12h cadence, block table; seam tests build their pairs explicitly instead of matching shipped literals. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y65PT2wahVQnhE1SjWXyGW
Each rung was drawn at the full per-rung ask and then truncated to the scarcest rung's count with r[:m]. horizon_draw sorts its picks by pool index, so the truncation kept filename order and silently undid the even-by-domain draw on every rung larger than the scarcest: on the 2026-07-19 mainnet snapshot the h64 rung's healthcare share fell from 13 to 4 while h720 kept 7 (review 2026-09-02, verified on the real pool). Now the rung size is min(per-rung ask, smallest horizon's eligible-series count) and every rung is drawn even-by-domain AT that size; an empty horizon still raises, and an unequal draw (cannot happen by construction) fails loud rather than judging on an unequal ladder. Consensus-critical: this must be in the release before scored_from_block activates. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y65PT2wahVQnhE1SjWXyGW
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a block-gated multi-horizon window draw for the round verdict, dormant by default.
Knobs (
[eval]):scored_horizons = []andscored_from_block = 0. With the defaults every code path is byte-identical to the single-horizon draw. When both are set, rounds whose epoch-boundary block is at or past the gate draw their verdict windows as a horizon ladder: each horizon gets its own seeded even-by-domain draw over the snapshot's raw series (n_windowssplit evenly across horizons, rung sizes equalised), and the pooled rows flow through the unchanged round statistic — no changes toevaluate_round, the bootstrap, or the receipt schema.Why pooling works unchanged: with equal rung sizes the geometric mean over the concatenated rows equals the geometric mean of per-horizon geomeans, and the cluster bootstrap keys on upstream feed ids, so rows from one feed resample jointly across horizons.
Coverage:
_verdict_windows)epoch_start_block, same as the jittered mix)calib_drawnow delegates to the sharedhorizon_draw(byte-identical ids/draws), so the two draws cannot driftRollout shape:
mix_from_blockprecedent — deploy everywhere first, then activate via config at a future epoch boundary.[training]and the contract digest are untouched.Tests: config round-trip, gate semantics, draw determinism/equalisation/eligibility, pooled-equals-blend property, source plumbing, and the verdict branch.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Ewrx7YTJ46UosQFgLfDhPf