Honest XvB economics: measured realization + win odds on both earnings surfaces - #874
Merged
Conversation
The expected-vs-actual card folded XvB's published per-tier estimate into expected at face value, and the tier calculator's Net/yr did the same — on a production Whale box the card read 54% while the P2Pool leg ran at 120%, and the calculator showed +2.97 XMR/yr for a tier measured at about -1.8. The winners file we already mirror over Tor carries the qualifier count per round, so both surfaces can be honest without new egress or re-deriving reward_calc: - parse_round_stats aggregates every round (one fetch, second parse): type frequencies, players averages, span. - xvb_expected_wins_day forecasts wins/day for the held tier (verified against production: predicted 0.84/day, measured 0.84/day) — fills the wins row's expected cell. - xvb_realization measures what wins actually paid (confirmed payouts within 2h of each settled win vs face value per win); the earnings card's XvB leg and the calculator's Net/yr scale by it when >=5 wins are measurable, and say so; face value stands labeled as an upper bound otherwise. - The calculator shows each tier's draw (win odds + qualifier count), which also makes a single-qualifier tier's fragility self-evident. Closes #866. Closes #872. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
What
The expected-vs-actual card and the XvB tier calculator both priced XvB's published per-tier estimate as income. Measured on production (30d ending 2026-08-02): wins paid ~19% of that face value, making the card read 54% while the P2Pool leg ran at 120% — and the calculator's Net/yr showed +2.97 XMR/yr for a tier measured at about −1.8.
The winners file we already mirror over Tor publishes the qualifier count per round, so both surfaces become honest with no new egress and no re-derivation of XvB's reward_calc:
parse_round_stats— second parse of the same fetched body: round-type frequencies, qualifier averages, span. Cached beside the reward estimates with the same XvB algo over-donates when the XvB stats fetch is stale/failing (no staleness guard) #311 staleness rule.Testing
Tier 1/2 per docs/dev/testing-strategy.md: parser bounds + aggregation, storage contract, forecast/realization/tempering unit tests, calculator payload tests, frontend logic + component render tests (271 node tests). Full suite + docs voice lint green; patch coverage 98%.
Docs: docs/dashboard.md updated for all three surfaces in house voice.
Closes #866. Closes #872.
🤖 Generated with Claude Code