Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
screenrecording: 5s SIGINT grace before SIGKILL truncates recordings on slow or loaded systems
Reported by ReneXiong · filed Sep 18, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
Omarchy version: 4.0.3-1
gpu-screen-recorder: 6.1.0-1
GPU/CPU: Intel Iris Plus Graphics 645, i5-8257U (thermally constrained laptop)
Kernel: 7.2.4-arch1-Watanare-T2-1-t2
What happened
Stopping a screen recording while the system was under load produced the toast "Screen recording error — Recording process had to be force-killed. Video may be corrupted." The resulting file is indeed truncated: the mp4 index reports duration=286.8 while the last video packet's pts_time is 202.0 — roughly 85 s of footage past the last decodable frame is gone. A second recording shows the same signature (duration=234.2, last packet 188.0).
Expected behavior
Stopping a recording should finalize the file no matter how slow the machine is — data loss should not be on a fixed timer.
Root cause
bin/omarchy-capture-screenrecording, stop_screenrecording():
pkill -SIGINT -f "^gpu-screen-recorder"
local count=0
while pgrep -f "^gpu-screen-recorder" >/dev/null && ((count < 50)); do
sleep 0.1
count=$((count + 1))
done
# ... -> pkill -9 after a flat 5 secondsgpu-screen-recorder's SIGINT path has to flush the encoder and write the mp4 trailer. On a loaded or thermally throttled machine that can exceed 5 s — my fan curve log shows core temp at 84 °C sustained for >90 s during the recording, and a coding-agent workload was running alongside. The SIGKILL then lands mid-mux.
Evidence this was the script's timeout, not a crash
coredumpctlshows nogpu-screen-recorderdumps — not a segfault.- No kernel OOM-kill or
systemd-oomdentries — not memory pressure. - The truncated files decode cleanly up to the cut point and carry a valid index — consistent with SIGKILL mid-write.
- The notification text matches the
pkill -9branch verbatim.
Deterministic reproduction
The 5 s guillotine can be triggered without needing a genuinely slow machine:
omarchy screenrecord --fullscreenpkill -STOP -f '^gpu-screen-recorder'(simulates a stalled finalize — the process still matchespgrep)omarchy screenrecord --stop-recording
Five seconds later the SIGKILL fires, the error toast appears, and the output file is truncated. (pkill -CONT cleanup needed for any surviving instance.)
Possible directions — happy to go with whatever the maintainers prefer:
- Simply raise the bound (15–30 s covers slow machines without changing the shape of the code)
- Make it configurable, e.g.
OMARCHY_SCREENRECORD_STOP_TIMEOUT - Notify "finalizing recording…" while waiting, so a longer wait doesn't read as broken
- Kill only after N seconds without write progress (e.g. output mtime stalled), rather than a flat deadline
Related: the stale-bar-indicator side effect of this same force-kill path is tracked in #9205 — see my comment there for a script-side ordering issue that is distinct from the QML watchdog fixed in #9296.
View raw text
**Omarchy version:** 4.0.3-1 **gpu-screen-recorder:** 6.1.0-1 **GPU/CPU:** Intel Iris Plus Graphics 645, i5-8257U (thermally constrained laptop) **Kernel:** 7.2.4-arch1-Watanare-T2-1-t2 **What happened** Stopping a screen recording while the system was under load produced the toast *"Screen recording error — Recording process had to be force-killed. Video may be corrupted."* The resulting file is indeed truncated: the mp4 index reports `duration=286.8` while the last video packet's `pts_time` is `202.0` — roughly 85 s of footage past the last decodable frame is gone. A second recording shows the same signature (`duration=234.2`, last packet `188.0`). **Expected behavior** Stopping a recording should finalize the file no matter how slow the machine is — data loss should not be on a fixed timer. **Root cause** `bin/omarchy-capture-screenrecording`, `stop_screenrecording()`: ```bash pkill -SIGINT -f "^gpu-screen-recorder" local count=0 while pgrep -f "^gpu-screen-recorder" >/dev/null && ((count < 50)); do sleep 0.1 count=$((count + 1)) done # ... -> pkill -9 after a flat 5 seconds ``` `gpu-screen-recorder`'s SIGINT path has to flush the encoder and write the mp4 trailer. On a loaded or thermally throttled machine that can exceed 5 s — my fan curve log shows core temp at 84 °C sustained for >90 s during the recording, and a coding-agent workload was running alongside. The SIGKILL then lands mid-mux. **Evidence this was the script's timeout, not a crash** - `coredumpctl` shows no `gpu-screen-recorder` dumps — not a segfault. - No kernel OOM-kill or `systemd-oomd` entries — not memory pressure. - The truncated files decode cleanly up to the cut point and carry a valid index — consistent with SIGKILL mid-write. - The notification text matches the `pkill -9` branch verbatim. **Deterministic reproduction** The 5 s guillotine can be triggered without needing a genuinely slow machine: 1. `omarchy screenrecord --fullscreen` 2. `pkill -STOP -f '^gpu-screen-recorder'` (simulates a stalled finalize — the process still matches `pgrep`) 3. `omarchy screenrecord --stop-recording` Five seconds later the SIGKILL fires, the error toast appears, and the output file is truncated. (`pkill -CONT` cleanup needed for any surviving instance.) **Possible directions** — happy to go with whatever the maintainers prefer: - Simply raise the bound (15–30 s covers slow machines without changing the shape of the code) - Make it configurable, e.g. `OMARCHY_SCREENRECORD_STOP_TIMEOUT` - Notify "finalizing recording…" while waiting, so a longer wait doesn't read as broken - Kill only after N seconds *without write progress* (e.g. output mtime stalled), rather than a flat deadline **Related:** the stale-bar-indicator side effect of this same force-kill path is tracked in #9205 — see my comment there for a script-side ordering issue that is distinct from the QML watchdog fixed in #9296.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
- Fixed bypr/10397· confirmed
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 15:45 UTC