← Jobs
success

headless ant/term ↗

started 17 Sep 2026 11:08 UTC · ran for
2m 38s, success 2m 32s, success 2m 41s, success 2m 37s, success 3m 43s, success 3m 29s, success 3m 47s, success 3m 37s, success 3m 31s, success 3m 46s, success avg 3m 14s ± 33s over the last 10 runs
fix: headless entrypoint needs sway/grim, and must reap sway by real pid Two blockers once XDG_RUNTIME_DIR (ci-tron's own fix) let the headless smoke test actually start: - flake.nix's devShell already bundled wlrctl/wl-clipboard for this exact test but never sway or grim themselves — scripts/headless_test.py needs both, and had no way to get them on a host that doesn't happen to have a desktop environment already providing them system-wide (a bare CI box, for instance). - On a host with no logind session for this seat — nothing registers one for ci-tron-runner's sudo session, same root cause as the XDG_RUNTIME_DIR fix — sway double-forks and detaches, reparenting to init. start_sway's own Popen then tracks a pid that's already exited, not the real compositor: find_sway_ipc_socket was matching the IPC socket by that stale pid (so it could never find sway's real one) and the process a broken run's `finally` tried to terminate() wasn't the real compositor either, leaking sway/swaybar/swaybg past every run — confirmed by hand (orphaned sway processes still running from a reproduction). Recovers the real pid from the IPC socket's own name instead ("sway-ipc.<uid>.<pid>.sock" — authoritative, unlike the Popen handle), and reaps it with a plain kill(2)/proc-poll loop since it's not our child (waitpid(2) can't see it). Verified end-to-end as ci-tron-runner itself on the ci-tron host, including confirming no leaked processes across repeated runs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KpDBFeBQKx9f5U3pfVeVV3
$ headless success · exit 0 · raw
++ mktemp -d
+ checkout=/tmp/tmp.zb716PHtiw
+ trap 'rm -rf "$checkout"' EXIT
+ cp -R /var/lib/ci-tron/sources/28b1979c69e0df43/. /tmp/tmp.zb716PHtiw
+ cd /tmp/tmp.zb716PHtiw
+ nix develop --command python3 scripts/headless_test.py
GC Warning: Could not open /proc/stat
headless_test: building term...
headless_test: starting headless sway...
headless_test: headless sway is on wayland-1 (pid 4078827)
headless_test: starting term...
headless_test: term window mapped
headless_test: screenshot captured (5500 bytes)
headless_test: wlrctl found — exercising wl_pointer capability negotiation
headless_test: wl_pointer wiring survived a synthetic scroll (does not confirm axis_discrete fired)
headless_test: wlrctl found — exercising pointer motion + click
headless_test: wl_pointer click/motion wiring survived a synthetic click and follow-up motion
headless_test: resizing headless output (term was 1280x672)...
headless_test: term resized to 640x432
headless_test: post-resize screenshot captured (11734 bytes) — resize path survived
headless_test: middle-click never reached term after 5 synthetic attempts — known wlrctl virtual-pointer enter/leave race (see check_pointer_click's docstring and ROADMAP.md's Known v1 limitations), not a paste-logic failure; skipping the round-trip assertion
headless_test: PASS
+ rm -rf /tmp/tmp.zb716PHtiw
Artifacts

no artifacts