Skip to content

fix: seek bar follow-ups from the PR #59 review#60

Merged
chrisuthe merged 2 commits into
masterfrom
fix/seek-bar-follow-ups
Jul 20, 2026
Merged

fix: seek bar follow-ups from the PR #59 review#60
chrisuthe merged 2 commits into
masterfrom
fix/seek-bar-follow-ups

Conversation

@chrisuthe

Copy link
Copy Markdown
Owner

Summary

Closes out the remaining suggestion-level findings from the PR #59 review.

  • Static-delay-free display anchor: IClockSynchronizer.ServerToClientTime subtracts the configured static delay (audio-scheduling semantics). The seek bar anchor now adds it back so the displayed position reflects measurement time — a positive delay no longer runs the bar ahead, and a negative delay no longer pushes every conversion into the future, which permanently tripped the plausibility guard so the server-timestamp anchoring path silently never engaged.
  • Collision-proof track identity: identity is now a (title, artist, album) tuple instead of a |-joined string, eliminating delimiter collisions; a Debug log flags degenerate (fully untagged) identities where identity-based resets cannot distinguish consecutive tracks.
  • Boundary pins (test-only): exact 5 s anchor-age boundary, negative playback_speed clamped to 0 (bar never runs backwards), negative progress/duration clamped to 0.
  • claude.md drift fixes (pre-existing staleness): protocol table now describes group/update accurately and gains the missing server/state row; ServerToLocalTimeServerToClientTime; SendSpinHostService/SendSpinClient → actual class names SendspinHostService/SendspinClientService.

Testing

  • TDD: the static-delay and identity-collision tests were written first and confirmed failing against the previous behavior (bar at 120.6 s instead of 120.2 s with a 400 ms delay; colliding identities skipping the reset).
  • Tracker suite: 36/36 pass (30 existing + 6 new). Full suite: 133/135 — the 2 failures are the known pre-existing resampler-area ones, unchanged.
  • Release rebuild: 0 errors, warning count exactly at the 553 baseline.

- Exclude the configured static delay from the display anchor:
  ServerToClientTime targets audio scheduling, so the delay is added back
  to keep the bar at measurement time; this also stops a negative delay
  from permanently tripping the plausibility guard into receipt anchoring.
- Track identity as a (title, artist, album) tuple, eliminating the
  delimiter collisions of the joined-string form; log degenerate
  (untagged) identities where identity-based resets cannot help.
- Pin boundary behavior with tests: exact 5 s anchor age, negative
  playback speed, and negative progress/duration clamps.
@chrisuthe
chrisuthe merged commit ca75f0a into master Jul 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant