← Jobs
success

headless ant/term ↗

started 22 Sep 2026 14:53 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: fall back to continuous wl_pointer.axis when axis_discrete never fires Mouse wheel scrolling didn't work at all on a real Hyprland session, for both local scrollback and app-forwarded reports, despite click/motion mouse-tracking working correctly. Root cause: term only ever acted on wl_pointer.axis_discrete, an assumption ROADMAP.md had already flagged as unconfirmed against any real compositor (headless sway + wlrctl structurally can't produce that event) -- and on real hardware it turned out false for at least one device, which sends only the continuous axis event, never axis_discrete. events.odin's pointer_axis_cb/pointer_axis_discrete_cb now accumulate into per-sequence App fields instead of dispatching immediately; pointer_frame_cb (previously a no-op) resolves them once wl_pointer.frame closes the sequence via a new finish_axis_frame: axis_discrete wins when present (avoids double-scrolling a compositor that sends both for one notch), otherwise the continuous delta accumulates into a carry that persists across frames and emits a notch every time it crosses the conventional "10.0 units = one notch" threshold (the same convention GTK and other toolkits use for this fallback). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
$ headless success · exit 0 · raw
++ mktemp -d
+ checkout=/tmp/tmp.TWVi3GAqEN
+ trap 'rm -rf "$checkout"' EXIT
+ cp -R /var/lib/ci-tron/sources/f28db67c1c2069bb/. /tmp/tmp.TWVi3GAqEN
+ cd /tmp/tmp.TWVi3GAqEN
+ 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 666264)
headless_test: starting term...
headless_test: term window mapped
headless_test: screenshot captured (5672 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 (12578 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.TWVi3GAqEN
Artifacts

no artifacts