Ghost calibration MEASURED on hardware: straggler 1.462x → 1.189x - #227
Merged
Conversation
Two L40S, block 962,000, 16 chunks, real GPU proving, one arm per box, differing only in the four
HAZYNC_COST_* values. The refit clears the <=1.35 threshold BUILDS.md 4.2 states for the fourth card.
⛔ It first measured 1.567x — WORSE — and I reported that. It was ONE chunk: 31 of 32 chunk timings
across both boxes sit at 2.4-3.0 s/segment, and hz-b chunk 1 came in at 4.89 (171 s for 35 segments).
Re-run twice: 94 s both times, 2.69 s/seg. It never reproduced.
Two hypotheses were refuted on the way, which is the useful part:
- the segment straggler said the OPPOSITE (57 -> 49 max segments), which is what flagged the
wall-clock number as suspect rather than the constants
- "the boxes differ in speed" is true but IRRELEVANT: an identical 33-segment chunk is 87 s vs
90 s, and a straggler is a ratio, so box speed cancels out of it entirely
⇒ Re-run an outlier before believing it, and prefer the quantised metric: proving bills in whole
segments, not cycles.
Claude-Session: https://claude.ai/code/session_017fQ8BAyHyzxBf3bvdmckVL
…branch refutes The line 'Ghost needs its own calibration; it does not have one' was written before the 2026-09-05 run and never updated. This branch IS that calibration, so the doc contradicted its own evidence -- and the stale line had already been quoted as the measured reason Ghost cannot be a shipping channel (hazync#225). Records Ghost's constants, its measured straggler 1.462 -> 1.189, and the warning that Core's and Ghost's fits do not transfer in either direction. The channel decision is unchanged: Ghost stays experimental because it is substitution (broad), which is a fidelity judgement and needs no performance excuse -- its straggler is in fact better than Core's 1.210. Claude-Session: https://claude.ai/code/session_017fQ8BAyHyzxBf3bvdmckVL
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.
Been sitting unmerged on
measure/ghost-calibrationsince 2026-09-05. Raising it because the result is real, and becausedocs/BUILDS.md§3 currently states the opposite.What it measures
Two L40S, block 962,000, 16 chunks, real GPU proving. Same guest, same block, one box per arm, differing only in the four
HAZYNC_COST_*values:Ghost's own constants, fitted on block 965,500 (7.7% Schnorr), intercept forced to zero:
⚠ The card arithmetic was NOT re-derived. Read this as "the ≤1.35 straggler target is met", not as a card count.
⛔ This corrects a live claim in BUILDS.md
§3 says: "Ghost needs its own calibration; it does not have one." It does — this is it. That line was written before this run and never updated, and it has already been quoted as the measured reason Ghost cannot be a shipping channel (hazync#225).
The channel decision does not change, but the honest reason does:
⚠ Note what does NOT transfer: Core's refit and Ghost's are different constant sets. Applying Core's to Ghost moves its straggler 1.407 → 1.884. Each channel carries its own.
⏰ The part worth keeping
This run first measured 1.567x — worse than doing nothing — and that was reported. It was one chunk. Across 32 chunk timings every sample sits at 2.4–3.0 s/segment; the offending chunk came in at 4.89 s/segment and never reproduced (re-run twice: 94 s, 94 s, 2.69 s/seg).
Two of the three checks that recovered it refuted a hypothesis rather than confirming one:
⇒ A single un-replicated chunk timing was enough to invert the conclusion. Re-run an outlier before believing it, and prefer the quantised metric (segments) over the continuous one (cycles) — proving bills in whole segments.