# Reprieve runtime bug hunt — September 30, 2026 Runtime qualification for the 1.5.2 release. This records the tested scope and remaining limits. The checkout already contained the 1.5.x native-journal, timeline and branding changes. Those were preserved. A pre-investigation diff and source copies are retained in a local audit directory outside this repository. ## Findings The live control-panel watchdog was replacing Super+W every five seconds with unnamed press/release close callbacks. The Reprieve binding existed on disk but was no longer the live shortcut. Its helper now yields to the explicitly installed Reprieve managed block, even with missing legacy preferences or a forced call. Hyprland was reloaded and the live binding was verified. The companion fix is published separately in [Control Panel PR #1](https://github.com/avillagran/omarchy-control-panel/pull/1). Its full suite passes; three unrelated backup cases skip when optional `age-keygen` and `rclone` dependencies are unavailable. Reprieve also had independently reproducible defects: duplicate flight jobs, a deferred park hiding a window after early undo, redo bypassing flights, stale drag/resize geometry, a missing angel-opacity assignment during lift, frames pruned during active restores, null focus during startup/transitions, workspace caches lagging own moves, unpersisted timeout-enable grace, and settings failures reporting or retaining the wrong local state. Each testable behavior has a regression test that failed before its correction. Recovery notice text also produced an observed QML height binding loop; its anchors were corrected. Service tests evaluate the actual QML JavaScript methods with compositor/process boundaries stubbed. Flight tests evaluate actual lifecycle and timeline expressions. These are not QML rendering tests; separate live captures and runtime checks cover that boundary. ## Verification - `tests/run.sh`: model, service, flight lifecycle, journal, binding manager, media parsing, health, wrapper fallback, namespace and manifest checks. - Negative control: setting `REPRIEVE_SERVICE_SOURCE` to the preserved `Service.before.qml` makes all nine new service regression cases fail. - Companion checkout: `node --test tests/superw-ownership.test.js`, five cases; new ownership case failed before the helper fix. - `tests/live/focused.py`: address-scoped disposable windows; park/restore, original workspace and floating state, animated redo, eight rapid duplicate park/restore cycles, fullscreen state, actual timeout close, restore cancelling expiry, timeout-enable grace and cleanup. Does not clear user history or call reset. Settings are restored; no user windows are deliberately closed. - `tests/live/media_parking.py`: actual MPRIS Pause/Play across shell restart, owed cleanup with new pausing disabled, and legacy mixer-mute cleanup across restart, all passed on dedicated fixtures. - `tests/live/audio_streams.py`: stream replacement preserves mute/volume, real MPRIS Pause/Play without mixer mute. Passed five consecutive confirmation runs. An earlier run failed its volume/sink equality assertion; no Reprieve mixer write was found, the failure was not reproduced, and richer before/after diagnostics were retained instead of weakening the assertion. ## Rendered evidence and limits The initial agent claim that animation was fine was too strong: flight counters proved execution, not visible output. The operator's contrary observation was accepted. Direct compositor captures then showed the oversized ghost from stale geometry. Subsequent captures of a 600×400 floating fixture show an equally sized snapshot lifting and moving toward the bar, and returning on restore. Rendered contact sheets were actually inspected. This is an agent review, not operator approval or proof of graphics quality on every output. Before/after evidence stays in the local audit directory outside the repository, in `motion/`, `fixed-motion/`, `final-motion/` and `qualified-motion/`. The last set was captured after a full shell restart with the final flight fixes, and both park and restore contact sheets were inspected. Captures include the live desktop and are not publication assets. Screenshot sample labels are sequence numbers, not measured frame timestamps. The live Super+W command wrapper passed; physical keyboard input is not independently certified by these scripts. Synthetic keyboard attempts were inconclusive and are not counted as passing evidence. The installed shell retains `keepLoaded` service instances and cached components through plugin rescans. A full shell restart was necessary to exercise edited service code. Plugin disable/enable alone did not reliably refresh cached code. `reprieve doctor` now detects an enabled flight renderer with no screen, while `reprieve status` exposes renderer availability, frames and fallback reasons. Timer policy is unchanged: restoring cancels expiry; enabling grants grace; restart reconciliation grants its documented fresh interval. The current user setting was 15 seconds at the final qualification, with angel mode enabled. Only the primary currently attached screen was visually qualified. This qualification preceded the release commit and publication. Desktop captures remain local.