Nested headless Hyprland aborts on Wayland host protocol version announcements #90

Open
opened 2026-10-11 13:15:19 +08:00 by Breadway · 2 comments
Owner

Found while testing ECO-71 in an entirely isolated headless environment. Confidence: high for the observed failure; root cause in package/protocol interface compatibility is unconfirmed. On the installed Hyprland 0.56.2 / Aquamarine 0.15.1 stack, a private Weston 15.0.1 headless GL host causes invalid version for global wl_compositor (1): expected at most 5, got 6, followed by CBackend::create failure. An isolated Sway headless host instead fails on xdg_wm_base (13): expected at most 5, got 6. No live desktop operations are required to reproduce. Investigate whether the packaged client binds an advertised version newer than its compiled interface, or whether linked protocol symbols disagree. This blocks straightforward headless nested testing. A test-only proxy that caps these registry announcements is being evaluated as a workaround.

Found while testing ECO-71 in an entirely isolated headless environment. Confidence: high for the observed failure; root cause in package/protocol interface compatibility is unconfirmed. On the installed Hyprland 0.56.2 / Aquamarine 0.15.1 stack, a private Weston 15.0.1 headless GL host causes `invalid version for global wl_compositor (1): expected at most 5, got 6`, followed by CBackend::create failure. An isolated Sway headless host instead fails on `xdg_wm_base (13): expected at most 5, got 6`. No live desktop operations are required to reproduce. Investigate whether the packaged client binds an advertised version newer than its compiled interface, or whether linked protocol symbols disagree. This blocks straightforward headless nested testing. A test-only proxy that caps these registry announcements is being evaluated as a workaround.
Author
Owner

ECO-71 handoff update: the workaround is now implemented and used successfully by bread-session/tests/wayland_compat.py. It forwards Unix-socket traffic and SCM_RIGHTS file descriptors while capping wl_compositor and xdg_wm_base versions to 5 in both registry announcements and outgoing registry.bind requests. This is test-only Python; the deployed session app is Rust. A private headless Weston GL host plus this proxy and a separate Hyprland headless output passed 12 session integration checks and the later breadbar old/new comparison. It does not resolve the underlying packaged protocol mismatch, whose root cause remains unconfirmed. Keep this issue open for the package-level investigation. See ECO-71 for isolation safeguards and retained evidence.

ECO-71 handoff update: the workaround is now implemented and used successfully by bread-session/tests/wayland_compat.py. It forwards Unix-socket traffic and SCM_RIGHTS file descriptors while capping wl_compositor and xdg_wm_base versions to 5 in both registry announcements and outgoing registry.bind requests. This is test-only Python; the deployed session app is Rust. A private headless Weston GL host plus this proxy and a separate Hyprland headless output passed 12 session integration checks and the later breadbar old/new comparison. It does not resolve the underlying packaged protocol mismatch, whose root cause remains unconfirmed. Keep this issue open for the package-level investigation. See ECO-71 for isolation safeguards and retained evidence.
Author
Owner

Triage (no change made, card left in todo).

Searched Breadway/bos (scripts/, iso/, docs/) for the named harness (wayland_compat, weston, sway headless, headless). No headless or nested-compositor harness exists in this repo. The workaround the card describes lives in bread-session/tests/wayland_compat.py, which is outside this repo.

Reproducing or fixing the root cause (packaged wl_compositor / xdg_wm_base version mismatch between Aquamarine 0.15.1 and the host protocol) needs a live or private headless compositor and a package-level investigation. I did not start either, and nothing was changed. Leaving in todo for the package-level investigation.

Triage (no change made, card left in todo). Searched Breadway/bos (scripts/, iso/, docs/) for the named harness (wayland_compat, weston, sway headless, headless). No headless or nested-compositor harness exists in this repo. The workaround the card describes lives in bread-session/tests/wayland_compat.py, which is outside this repo. Reproducing or fixing the root cause (packaged wl_compositor / xdg_wm_base version mismatch between Aquamarine 0.15.1 and the host protocol) needs a live or private headless compositor and a package-level investigation. I did not start either, and nothing was changed. Leaving in todo for the package-level investigation.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Breadway/bos#90
No description provided.