Repository navigation
e2e: every failing test prints its daemons' logs - #57
Conversation
A timing failure in CI arrives as one line ("offers = []", "daemon never
became ready") with nothing to say what the daemons did, and it rarely
happens twice: the cloud-offer failure on Windows CI took 150 runs to see
again. Only 12 tests printed the logs (logOnFailure), by asking for it.
- testutil.NewTestDaemon prints the daemon's log when its test fails, after
the daemon has stopped, so its shutdown is in it too. logOnFailure and its
calls go, since every test now has it.
- The CLI harness prints the daemon process's opensave.log before its home
is removed, and a daemon that never became ready says whether its address
was published and what the last `daemon status` answered.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@ChakraFusion is attempting to deploy a commit to the sivadaboi's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
The failing job is
The fix for 1 (the trigger) is #58: a watch stopped during its snapshot keeps the snapshot but starts nothing, and a change reported for a game with auto-sync off doesn't start a sync. 2 is a question for you rather than a fix I'd just send: in the fallback, a side whose newest file is within the tolerance of the last sync could count as changed. That raises a conflict when it can't tell, instead of picking a side, at the risk of a prompt right after a sync. Save versions for locations would replace that fallback altogether. Would you like either? |
… by Liquid-co#57; every test logs now) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QBtnfWuhA6pZmEwVjzjscw
Liquid-co#57 removes logOnFailure, since every e2e test daemon now prints its log when its test fails. Without this, the test stops compiling once Liquid-co#57 is merged; before that, it only loses the log it asked for itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A snapshot can take longer than stopping waits for its watch (watchStopTimeout, 5 s). The watch was given up, but its handleChange ran on, finished the snapshot and called OnChanged, which syncs the game - a game whose auto-sync had just been switched off. Seen in the logs #57 printed for TestMultiRootScenario_ALateReportDoes NotHideADivergence on Windows CI: "the watcher for loclatereport did not stop within 5s and was abandoned", then "auto-snapshot created" and a sync with the other device, whose "in sync" report gave it a fresh last-synced time just before the test's edits. - handleChange keeps the snapshot, which is the save as it changed, but announces nothing once its watch was stopped. - The daemon's OnChanged starts no sync for a game whose auto-sync is off, which also covers the catch-up, run outside any one watch. Test: TestAWatchStoppedDuringItsSnapshotAnnouncesNothing holds a snapshot mid-way and stops the watch (fails without the change: the change is announced after the stop). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks, the logs did exactly their job. On the 2-second fallback: yes, please send option 1, but narrowly. Count an edit within the tolerance as a change, and raise a conflict only when both sides have one. When just one side does, it can still win as it does now. An occasional extra prompt right after a sync is a better failure than a silently lost edit, and since save versions are postponed, we'd rather not leave this waiting on them. Against |
|
Sent as #72. Any edit after the last sync now counts as a change. A conflict still needs both sides changed, and one side alone wins as before. There's a unit table and an e2e test that fails 3/3 without it. I first moved the 2 s before the sync instead of dropping it, but that turned a just-pulled copy into a "change" and broke two sync tests, so #72 drops it. The description has the details. |
Entries for Liquid-co#49, Liquid-co#70, Liquid-co#69, Liquid-co#72, Liquid-co#68 and Liquid-co#47, added at the end of the Fixed list so they do not touch Liquid-co#75's own entry. Liquid-co#57 is test-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Liquid-co#57 removes logOnFailure, since every e2e test daemon now prints its log when its test fails. Without this, the test stops compiling once Liquid-co#57 is merged; before that, it only loses the log it asked for itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A timing failure in CI arrives as one line ("offers = []", "daemon never became ready") with nothing to say what the daemons did, and it rarely happens twice: the cloud-offer failure behind #56 took 150 runs on Windows runners to see again. Until now only 12 tests printed their daemons' logs (
logOnFailure), each by asking for it.testutil.NewTestDaemonprints the daemon's log whenever its test fails, after the daemon has stopped, so its shutdown is in it too.logOnFailureand its calls are removed, since every test now has it.opensave.logbefore the test's home folder is removed. A daemon that never became ready now also says whether it published its address and what the lastdaemon statusanswered (the failure seen on sync: a peer that pulled says what it now holds, so the base is recorded at once #51).Tests only; no product code changes. Checked with a deliberately failing test of each kind.
🤖 Generated with Claude Code