← Jobs
success

headless ant/term ↗

started 22 Sep 2026 11:56 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
feat: implement DEC Sixel graphics and the Kitty graphics protocol Closes the last 3 failing probes in scripts/terminfo_dev_test.py's conformance suite (108/111 -> 111/111): extensions.sixel, extensions.sixel-da1, and extensions.kitty-graphics. Both protocols share one storage model on vt.Grid (vt/image.odin): a new Cell.image_id anchors a placement to a single cell, mirroring link_id/cluster_id's "small id, resolved via a side table" shape but, unlike those never-freed tables, bounded and evictable (a placed image can be megabytes of raw RGBA). Sixel (vt/sixel.odin) is a from-scratch decoder for the 6-dot-per-byte palette bitmap encoding. Kitty graphics (vt/kitty_graphics.odin) leans on Odin's own core: stdlib (image/png, encoding/base64, compress/zlib) for decoding, no new FFI. render/render.odin gained a draw_row_images pass that blits placed images into the same wl_shm pixel buffer, reusing the glyph pass's existing alpha-compositing helper. Deliberate scope cuts (each documented at its point in the code): Kitty's raw RGB/RGBA formats, file/temp-file transmission mediums (security -- same class of concern as OSC 8's url_scheme_allowed), and re-placing a previously-transmitted image; sixel's HLS color mode. See ROADMAP.md's v1 (done) entry for the full writeup, including a real defer-scoping bug this work turned up along the way (defer inside an if-block fires at the end of that block, not the function). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
$ headless success · exit 0 · raw
++ mktemp -d
+ checkout=/tmp/tmp.3o8c6OUqwh
+ trap 'rm -rf "$checkout"' EXIT
+ cp -R /var/lib/ci-tron/sources/d56d37506a38ad23/. /tmp/tmp.3o8c6OUqwh
+ cd /tmp/tmp.3o8c6OUqwh
+ 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 506315)
headless_test: starting term...
headless_test: term window mapped
headless_test: screenshot captured (5957 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 (13097 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.3o8c6OUqwh
Artifacts

no artifacts