Skip to content

docs(linux): W0 Wayland evidence — workflow + validated matrix (issue #107) - #151

Merged
egdev6 merged 22 commits into
egdev6:mainfrom
sosan:wayland-matrix-107
Oct 20, 2026
Merged

egdev6 merged 22 commits into
egdev6:mainfrom
sosan:wayland-matrix-107

Conversation

@sosan

@sosan sosan commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

Context

Issue #107 (feat(linux): hacer funcional el escritorio y widget nativos) necesita evidencia de la matriz Wayland. Este PR aporta un workflow que levanta compositores Wayland reales en runner CI (ubuntu-latest) y el doc de evidencia.

Cambios

  • .github/workflows/w0-wayland.yml (nuevo): 4 jobs (workflow_dispatch) que instalan y lanzan compositores Wayland headless y capturan env vars + socket.
  • docs/wayland-evidence/W0-WAYLAND-EVIDENCE.md (nuevo): hallazgo F11 (Wayland genérico) + matriz Wayland con resultados de runs 39333298554 y 39339723250.

Matriz Wayland validada en CI

Compositor Estado Env capturado
Weston (Wayland genérico) valido wayland-0, wayland, weston, weston
Mutter (GNOME Wayland) valido wayland-0, wayland, GNOME, gnome
KWin (KDE Wayland) valido wayland-0, wayland, KDE, plasma
Hyprland pendiente paquete ausente ubuntu-24.04 (self-hosted/PPA)

Pendiente

Smoke en sesion real (bandeja visible, atajos, click-through con WM/compositor real) sigue siendo el criterio de cierre de #107.

Refs #107

sosan added 20 commits October 16, 2026 22:26
…taje); testeo de ramas por test-linux.yml manual y releases por build-linux (egdev6#108)
…e mod wm_compat

Owner feedback on PR (egdev6#107) asked for four adjustments from egdev6#128/egdev6#129
and flagged the missing UpdatesSection early-return (already absent
from the actual diff — verified, not present on this branch). This
commit lands the four:

1. is_wayland_only_session now also recognizes labwc and cosmic
   (both Wayland-only compositors) alongside hyprland/sway/wlroots/
   niri/river/wayfire.
2. recommendation() receives the is_kde flag computed once in
   detect_wm_info_from_env (same source of truth as surfaces_for)
   instead of re-matching kde-plasma/plasma inline on desktop_session,
   fixing the KDE-detection inconsistency the reviewer pointed out.
3. The play_effect click-through comment now references the canonical
   OVERLAY-builder note in setup() as the single source of truth for
   the show()-before-set_ignore_cursor_events ordering (tao#1204),
   instead of duplicating it.
4. wm-detect.ts gains the missing trailing newline.

Also fixes a merge casualty: lib.rs lost `mod wm_compat;` during the
merge of main (the file exists and get_wm_info is registered, so the
crate did not compile). Restored the module declaration.

Refs egdev6#107
The owner flagged the `mode !== 'native'` early-return in UpdatesSection
as a macOS behavior that must not be dropped by Linux PRs. This test
(final) pins that the code from main stays in this branch:

- UpdatesSection exists with its exact signature.
- The `if (mode !== 'native') return (` early return is present.
- The macOS manual-mode message is literal.
- The native branch keeps "Versión instalada".

Registered in the `test` script so every `npm test` run guards it.
Refs egdev6#107
Owner feedback (egdev6, PR egdev6#130) flagged two outstanding P2 issues
plus missing commits from this branch. Land the fixes:

Cherry-pick from feat-linux-l2-107 (Refs egdev6#107):
- 327337c land the four egdev6#128/egdev6#129 review adjustments (labwc/cosmic
  in is_wayland_only_session, is_kde in recommendation, micro-window
  for OVERLAY click-through, wm-detect.ts trailing newline) and fix
  the mod wm_compat casualty of the main merge.
- 7f69bda add the merge-regression test for the UpdatesSection
  early-return so the guard can never be dropped silently again.

P2 #1 — Updater in manual mode: UpdatesSection was rendering the
native branch unconditionally because the merge with main dropped
the `mode !== 'native'` guard. Restore the guard from main (commit
1dbc5fb) so the manual-mode branch on macOS shows the explanation
instead of a non-functional "Buscar ahora" CTA. The regression test
added above locks this in.

P2 egdev6#2 — Click-through of the strip: wm_compat.rs claimed `click_through
= ok` in X11, Hyprland, KDE, and the generic Wayland branch, but the
only set_ignore_cursor_events call in the app is in play_effect for
the effects overlay, NOT for the widget. Mark `click_through` as
`limited` in all four branches with an honest note (the widget does
not implement click-through; only the effects overlay uses it). Update
x11_surfaces_are_all_expected_complete and gnome_xorg_is_not_wayland
to assert `limited` for click_through in X11.

Refs egdev6#107
The merge with main brought changes that need rustfmt rewrap
(several multi-line let bindings in detect_wm_info_from_env and
the test assertions). This commit reformats just wm_compat.rs so the
project's cargo fmt --check passes on this branch without touching
the rest of the tree.

No logic changes.
 en feat-linux-wm-adjustes-107

Merge de fork/main (0d46ff1 UI egdev6#143, bdc9bbf W0 egdev6#90, c5a30f9 tao#1204)
en la rama del PR. Resueltos los conflictos:

- src-tauri/src/lib.rs: conservo los mods nuevos (window_clip,
  windows_backdrop) + mi mod wm_compat; tomo theirs para el comentario
  canónico de show() antes de set_ignore_cursor_events en play_effect;
  tomo theirs para el invoke_handler con la separacion Windows/non-Windows
  (windows_backdrop::finish_shutdown).
- src-tauri/src/wm_compat.rs: mantengo HEAD (los fixes P2 del PR):
  is_kde en la firma de recommendation, click_through: limited en las
  5 ramas, labwc/cosmic en is_wayland_only_session, test regression
  UpdatesSection y tests X11/GNOME actualizados.

Verificado: cargo test --locked 219 passed; npm test 568 passed (44 files);
cargo check compila (warnings preexistentes de main).
P2 #1 del owner (PR egdev6#128): con DESKTOP_SESSION=hyprland y las otras 3 env
vars ausentes, is_hyprland=true pero is_wayland=false -> surfaces_for tomaba
la rama X11 y presentaba bandeja/atajos/always-on-top como completos en vez
de los límites de Hyprland.

Fix: reordenar detect_wm_info_from_env para calcular is_hyprland antes de
is_wayland, y usar is_hyprland como señal adicional de Wayland (Hyprland es
compositor Wayland-only). Asi surfaces_for entra en la rama Hyprland.

Test ampliado desktop_session_hyprland_signals_hyprland: verifica
is_wayland=true, always_on_top=limited, tray_icon=limited (con la nota
"vuelve a abrir Quorb"), click_through=limited, global_shortcuts=limited,
autostart=ok.

cargo test --locked: 219 passed, 0 failed, 1 ignored.
…gdev6#107)

Squash of the wayland-matrix-107 branch (8 commits) into one unit.

Adds:
- .github/workflows/w0-wayland.yml (nuevo): workflow_dispatch on
  ubuntu-latest with 4 jobs that install and launch real Wayland
  compositors headless and capture env vars + socket:
  * weston --use-pixman --backend=headless-backend.so --socket=wayland-0
  * mutter --headless --wayland (dbus-run-session in background keeps
    the session bus alive via exec)
  * kwin_wayland --virtual --no-lockscreen (KWin 5.27 has no --headless)
  * hyprland (apt install hyprland not found on ubuntu-24.04)
- docs/wayland-evidence/W0-WAYLAND-EVIDENCE.md (nuevo): hallazgo
  F11 (Wayland genérico) + matriz Wayland real con resultados de
  runs 39333298554 y 39339723250.

Matriz Wayland validada en CI:
- Weston (Wayland genérico): VALIDADO (pixman + headless-backend,
  desktop-shell + weston-keyboard launched, socket wayland-0).
- Mutter (GNOME Wayland): VALIDADO (wayland-0 socket, GNOME env,
  fix D-Bus).
- KWin (KDE Wayland): VALIDADO (wayland-0 socket, KDE env, fix
  --virtual --no-lockscreen).
- Hyprland: pendiente self-hosted/PPA (paquete ausente en ubuntu-24.04).

Refs egdev6#107

@egdev6 egdev6 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@egdev6 @sosan — revisé el PR completo (solo workflow + doc, no toca código de la app; checks en verde). Buena base, pero pido request changes antes de merge: un PR cuya función es ser evidencia documental no puede llevar el comando equivocado ni un bug en su propia captura de "alive".

🔴 Bloqueantes

  1. Bug WESTON_PID entre steps (w0-wayland.yml): se define en el step de arranque y se consulta en el siguiente, donde está vacío → kill -0 "$WESTON_PID" falla siempre y raw/status.txt siempre imprime "weston exited" aunque el compositor esté vivo. La evidencia de "alive" queda invalidada. Fix: echo $! > raw/weston.pid en el step de arranque y kill -0 "$(cat raw/weston.pid)" en el step de captura.

  2. Comando documentado ≠ comando real (iteración 2): el doc muestra weston --headless --use-pixman --backend=headless-backend.so, pero el workflow omite --headless (su propio comentario explica que weston 13 lo rechaza junto a --backend). El doc reproduce el comando de la iteración que fallaba.

  3. Contradicciones internas del doc:

    • El header dice "la matriz completa (Mutter/KDE/Hyprland) requiere self-hosted; este workflow valida solo weston" — pero el workflow ejecuta los 4 jobs y Mutter/KWin quedaron validados en CI (la propia tabla lo dice).
    • "No se compila Mutter/KDE/Hyprland en CI" — falso: se instalan vía apt y Mutter/KWin corren de verdad.
    • "Run reproducible: --repo sosan/quorb" — instrucción específica del fork; indicar el equivalente para este repo o aclarar el origen.

🟡 Recomendados

  1. El run de evidencia citado (39339723250) está en failure por el job Hyprland (paquete ausente, esperado). Con continue-on-error: true en ese job —o skip explícito con aviso— el run queda verde y citable limpio, documentando Hyprland como pendiente self-hosted/PPA.
  2. Los run IDs dan 404 desde egdev6/quorb (son runs del fork). Indicar el repo origen junto a cada ID, o adjuntar logs/artefactos.
  3. Menores: falta newline al final en ambos archivos; el env XDG_CURRENT_DESKTOP=GNOME/KDE se fija manualmente vía GITHUB_ENV (no lo emite el compositor) — decirlo explícitamente en la doc para no presentarlo como salida real del compositor.

Lo que está bien ✅

  • Evidencia real de compositor headless: socket wayland-0, logs, artefactos por job.
  • Referencias de código correctas (wm_compat.rs:289, :215) contra main.
  • permissions: contents: read, timeouts, SHA pinneado, sin tocar workflows existentes.

Con 1–4 resueltos y la aclaración del origen de los runs, listo para merge. El pendiente de sesión real (bandeja, atajos, click-through) sigue como criterio de cierre de #107, en línea con la matriz de #105.

@egdev6

egdev6 commented Oct 20, 2026

Copy link
Copy Markdown
Owner

@egdev6 @sosan — dejé la revisión formal del PR como review con changes requested (ver pestaña "Files changed"). Resumen de lo bloqueante antes de merge:

  1. Bug WESTON_PID: se define en un step y se consulta en el siguiente, donde está vacío → raw/status.txt siempre dice "weston exited". Persistir el PID en raw/weston.pid y leerlo en el step de captura.
  2. Doc vs. workflow: el comando documentado incluye --headless, que el workflow (correctamente) omite — weston 13 lo rechaza junto a --backend. Actualizar el doc al comando real.
  3. Contradicciones del doc: el header dice "solo weston / matriz requiere self-hosted" y "no se compila Mutter/KDE en CI", pero el workflow ejecuta los 4 y Mutter/KWin quedaron validados. Y los run IDs citados (39339723250, etc.) dan 404 desde este repo porque son del fork — indicar el origen.

Recomendado: continue-on-error: true en el job Hyprland para que el run de evidencia quede verde citable, y aclarar que XDG_CURRENT_DESKTOP=GNOME/KDE se fija manualmente vía GITHUB_ENV.

El resto está muy bien: evidencia real de compositor headless, referencias de código correctas contra main, permisos mínimos y sin tocar workflows existentes. Con 1–3 resueltos, listo para merge.

sosan and others added 2 commits October 20, 2026 13:46
…gdev6#107)

Ajustes del veredicto en egdev6#107 (comentario 6280263933 sobre PR egdev6#151):

1. Job Hyprland con continue-on-error: true (paquete ausente en
   ubuntu-24.04, run de evidencia queda en success con 3 jobs validados).
2. Run IDs documentados como del fork sosan/quorb (404 desde egdev6/quorb;
   URL de verificacion github.com/sosan/quorb/actions/runs/<id>).
3. Bug de PID entre steps corregido: echo $! > raw/weston.pid y lectura
   con fallback (cat raw/weston.pid 2>/dev/null || echo 0) + kill -0.
4. Doc actualizada: encabezado ya no dice "matriz completa requiere
   self-hosted" (weston/Mutter/KWin corren en ubuntu-latest); nota de que
   XDG_CURRENT_DESKTOP/DESKTOP_SESSION (GNOME/KDE) se fijan manualmente
   via GITHUB_ENV como simulacion (el compositor headless no las emite).

Ademas: comando real de weston en la doc (sin --headless, fix iter 2) y
comentario del workflow alineado con la matriz actual.

Co-Authored-By: Claude Code <noreply@anthropic.com>

@egdev6 egdev6 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@egdev6 @sosan — re-revisé el commit 749283a y los 4 bloqueantes están resueltos y verificados:

  1. WESTON_PID persistido en raw/weston.pid y leído en el step de captura — la evidencia de "alive" ya es válida.
  2. Doc actualizado al comando real (sin --headless, con la explicación del rechazo de weston 13).
  3. Header coherente con el workflow: weston/Mutter/KWin en CI, env GNOME/KDE aclarado como simulación manual vía GITHUB_ENV, Hyprland pendiente con continue-on-error.
  4. Origen del fork documentado con URLs verificables; continue-on-error: true verificado en ejecución real (run 39417560610: success global, 3 jobs green).

Menores no bloqueantes que quedan: newline final en ambos archivos y añadir el run post-fix 39417560610 como evidencia definitiva en la doc (puede hacerse en un seguimiento).

Apruebo; mergeo a continuación.

@egdev6
egdev6 merged commit 54a4dc2 into egdev6:main Oct 20, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants