diff options
Diffstat (limited to 'docs/superpowers')
| -rw-r--r-- | docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md index 0186bfa..dd6a8ca 100644 --- a/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md +++ b/docs/superpowers/plans/2026-08-03-post-0.1.0-usability.md @@ -85,7 +85,7 @@ taking that too literally. | 35 | No refresh of the thread list after a sync | workflow | M | open | | 36 | `test_mainwindow` cannot reach the worker | testing | S | open, on demand | | 37 | The worker stalls on a tag edit made during a background sync | correctness | S | **done** | -| 38 | `test_mainwindow` fails when a real sync holds the lock | testing | XS | open | +| 38 | `test_mainwindow` fails when a real sync holds the lock | testing | XS | **done** | | 39 | Thread list cannot be sorted by clicking a column header | workflow | S | open | | 40 | No live filter over the current view | workflow | M | open | | 41 | A message whose HTML body carries a `Content-Id` renders blank | correctness | S | open | @@ -93,7 +93,7 @@ taking that too literally. | 43 | No "Mark all read" for the current view | workflow | S | open | | 44 | No way to manage the filters applied at sync time | workflow | ? | open, unspecified | | 45 | Two Sync buttons on the main window | discoverability | XS | open | -| 46 | `uiStateSurvivesARestart` fails under the offscreen platform | testing | XS | open | +| 46 | `uiStateSurvivesARestart` fails under the offscreen platform | testing | XS | **done** | Sizes are rough: XS under an hour, S a sitting, M a session. @@ -1917,6 +1917,30 @@ are unaffected either way; it is only the construction-time state that leaks in. construction-time state IS the behaviour under test for this case, and a window that never polls would pass the assertion for the wrong reason. +### Outcome (done) + +`MainWindow::setLocksPathForTesting()` / `locksPath()` give the window the seam +`SyncMonitor` already had, and the test points it at an empty file in its own +`QTemporaryDir` so construction observes no sync. The constraint above is +respected: the monitor is still constructed and still started, it simply reads a +lock table the test controls. + +**A test seam, deliberately not a config key.** `/proc/locks` is not something a +user would ever set, and a wrong value fails silently by disabling background +sync detection rather than loudly. A `[general]` key was considered and rejected +for that reason. + +**The override is process-wide and is reset at the end of the test**, since the +`QTemporaryDir` holding the file is destroyed with it; leaving it set would +point every later window at a path that no longer exists. + +**Verified by reproducing the original failure rather than waiting for cron.** +Running the suite under `flock -n /tmp/mbsync.lock` fails the assertion exactly +as reported when the seam is bypassed, and passes with it in place. The first +mutation attempted was a dud worth recording: writing `MUTANT` into the injected +lock table does not fail the test, because it is not a parseable `/proc/locks` +line and `lockHeldIn()` correctly finds no lock in it. + ## 39. Thread list cannot be sorted by clicking a column header **Observed (user, 2026-08-05):** "left pane columns order by clicking on the @@ -2207,6 +2231,16 @@ the property under test (the size that went in comes back out) is exact. the machine they run on, and both were found by running the suite in a context its author had not tried rather than by reading it. +### Outcome (done) + +The asserted size is now 640x560, which fits the offscreen platform's 800x800 +screen. Nothing in `MainWindow` changed: the persistence was never broken, only +the test's choice of a window wider than the smallest screen it runs against. + +Verified both ways round, since this one passed on Wayland throughout: 45 of 45 +under offscreen where it previously failed, and still green on the real +platform. + ## Deferred, unsized, or split out Items noted while triaging but not part of the original list. Same numbering |
