A report older than our own seek is not news #25
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
mobrule/kurageyomi#25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#1
What is wrong, with evidence
Pressing back twice goes back one Cue, then forward one. #21 attempted this and missed. The diagnostics from #24 caught it on a real episode; this is the log, oldest first:
After a seek, the client's in-flight progress reports still describe where it was. They are not identical to the previous report — time has passed, so the position differs — so #21's echo suppression does not catch them. They are classified
resync, which both ends the run and drags the clock forward to a pre-seek position. The next press computes "previous Cue" from there and seeks forward.The flaw is that echo suppression compares values when the question is age. A report that predates the seek is stale whatever it says.
What to build
A pending-seek gate. Once the app seeks, a report is not trusted until one of:
SEEK_CONFIRMATION_MSexpires, which #21 already has for the case where the seek never landed.Until then a report neither resyncs the clock nor ends the run. The existing timeout stays as the backstop against a seek that is silently refused: the phone must never be able to lie forever about where the show is.
Do not merely widen the resync tolerance. The log shows a report
+4.94soff, so any tolerance loose enough to swallow it would also swallow a real seek someone made on the television, which is one of the things the run is supposed to notice.Acceptance criteria
Blocked by
Merged to
main. Suites: 79 C#, 366 phone.Proven by #24's log rather than inferred, and reproduced red before anything was fixed:
expected 3040000000 to be 2960000000— the third press seeking forward, exactly as reported.After a seek, the client's in-flight reports still describe where it was. They are not identical to the previous report, so #21's echo suppression did not catch them; they were classified
resync, which both ended the run and dragged the clock forward to a pre-seek position. Echo suppression compared values when the question was age.A report is now withheld while a seek is unconfirmed unless it corroborates the seek or the reader's paused state changed. The existing 15s timeout stays as the backstop, so a seek the client silently refuses still corrects itself.
Known consequence, accepted: a genuine seek made on the television within 15s of a phone press is withheld until the window expires. The phone cannot tell it from an in-flight stale report.