validator: stop orphan raw scores inflating rolling avg / weights - #187
Open
sindresorhus-jpg wants to merge 1 commit into
Open
validator: stop orphan raw scores inflating rolling avg / weights#187sindresorhus-jpg wants to merge 1 commit into
sindresorhus-jpg wants to merge 1 commit into
Conversation
A background eval that finishes after a round's eval window closes and finalize_round_scores has run would write a raw `delta ** 1.2` score to the aggregator tagged with the finalized round_id. finalize's drop_round had already passed, so the point was never re-ranked: it rode the rolling score_avg as an illegal non-rank value (e.g. one stray 5.179 point pinned a uid's avg at 1.29 with samples=4) and inflated the miner's on-chain weight until it aged out of the history window. Race fix: add Round.finalized, set atomically with finalize's score snapshot under the round lock. mark_scored now drops any result for a finalized round (releasing the claim) and _record_in_cycle_score refuses to feed the aggregator once finalized, so no late eval can add a raw point after drop_round. Cleanup fix: MinerScoreAggregator.sweep_orphan_raw_scores() drops stale non-rank points (round_id below the miner's max, or untagged) and is run on load in run.py, remediating orphans already persisted to disk. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sindresorhus-jpg
force-pushed
the
fix/score-orphan-finalize-race
branch
from
June 29, 2026 20:41
9f0c006 to
b24dd2b
Compare
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.
A background eval that finishes after a round's eval window closes and finalize_round_scores has run would write a raw
delta ** 1.2score to the aggregator tagged with the finalized round_id. finalize's drop_round had already passed, so the point was never re-ranked: it rode the rolling score_avg as an illegal non-rank value (e.g. one stray 5.179 point pinned a uid's avg at 1.29 with samples=4) and inflated the miner's on-chain weight until it aged out of the history window.Race fix: add Round.finalized, set atomically with finalize's score snapshot under the round lock. mark_scored now drops any result for a finalized round (releasing the claim) and _record_in_cycle_score refuses to feed the aggregator once finalized, so no late eval can add a raw point after drop_round.
Cleanup fix: MinerScoreAggregator.sweep_orphan_raw_scores() drops stale non-rank points (round_id below the miner's max, or untagged) and is run on load in run.py, remediating orphans already persisted to disk.