The measurement
From make test-device against a live PinPointStudio, 27 August:
DEVICE-RUN agreement=± 36.77 ms drift=-184515 ppm, filtered
⛔ −184515 ppm is −18%. A real crystal is tens of ppm; hundreds would be a broken part. And ±36.77 ms of offset uncertainty after a settled burst is two orders of magnitude looser than the sub-millisecond figure B3 showed on 26 August.
Why it matters beyond the display
Almost certainly the same fault that put a t047 seconds in the future earlier the same day. A relation carries an offset and a rate; converting an instant applies the rate across the interval from the relation's epoch. Between two machines whose boot origins are 6752 s apart, a wrong rate term becomes tens of seconds of error — while the agreement between the clocks is genuinely fine, which is why sync could honestly report 0.0 ms at the same moment.
⚠ So the two numbers were never contradictory. One describes how well the clocks agree now; the other governs extrapolation, and nothing warns that they are different questions.
What is already worked around
The ring is no longer indexed through the host's clock — DetectAndMint keeps the Candidate's own instant, which needs no conversion. That fixed the missing clips. This issue is the estimate itself, which still feeds REQ-SYNC-4's residual and anything else that converts.
To find out
- whether
skew_ppm is this wrong on the wire or only in ClockAgreement's reading of it - whether the burst converged at all, or whether 0.0 ms and ±36.77 ms are two views of an unconverged estimator
sync_residual cannot be trusted until this is understood — a residual is a difference between two clocks, and one of them is currently claiming to run 18% slow
Recorded in the shared learnings document; a candidate finding for libppcp.
The measurement
From
make test-deviceagainst a live PinPointStudio, 27 August:⛔ −184515 ppm is −18%. A real crystal is tens of ppm; hundreds would be a broken part. And ±36.77 ms of offset uncertainty after a settled burst is two orders of magnitude looser than the sub-millisecond figure B3 showed on 26 August.
Why it matters beyond the display
Almost certainly the same fault that put a
t047 seconds in the future earlier the same day. A relation carries an offset and a rate; converting an instant applies the rate across the interval from the relation's epoch. Between two machines whose boot origins are 6752 s apart, a wrong rate term becomes tens of seconds of error — while the agreement between the clocks is genuinely fine, which is why sync could honestly report 0.0 ms at the same moment.⚠ So the two numbers were never contradictory. One describes how well the clocks agree now; the other governs extrapolation, and nothing warns that they are different questions.
What is already worked around
The ring is no longer indexed through the host's clock —
DetectAndMintkeeps the Candidate's own instant, which needs no conversion. That fixed the missing clips. This issue is the estimate itself, which still feeds REQ-SYNC-4's residual and anything else that converts.To find out
skew_ppmis this wrong on the wire or only inClockAgreement's reading of itsync_residualcannot be trusted until this is understood — a residual is a difference between two clocks, and one of them is currently claiming to run 18% slowRecorded in the shared learnings document; a candidate finding for libppcp.