Skip to content

Manual verification: macOS-driven harness changes on a Linux/GNOME checkout #142

Description

@jonocodes

What to verify

A macOS upkeep pass (2026-08-06) fixed a set of dev-harness assumptions that only broke off-Linux. Every change was verified on macOS 15.6.1 / Apple Silicon — full ladder green, just test-all 7/7 — but none of it has run on a Linux/GNOME checkout, and all of it touches the shared harness rather than the macOS backend.

The risk isn't subtle behaviour: it's that a Linux dev's just setup or just test-all stops working.

What changed

change file Linux risk
uv venv skipped when $VIRTUAL_ENV is set Justfile (setup-linux, setup-macos) a Linux dev without flox still gets ./.venv; a Linux dev with an active venv now installs into it instead of creating ./.venv — intended, but changes where packages land
install_evdev_source.sh gets PYTHON="${VIRTUAL_ENV:-.venv}/bin/python" Justfile the aarch64 source-build path is Linux-only and was not exercised at all
./.venv/bin prepended to PATH only when it exists Justfile (test-all) should be a no-op on a normal Linux checkout
pyright --pythonpath "$(command -v python)" Justfile (test-all) with ./.venv present, [tool.pyright] venv still wins — expected to behave exactly as before, but unconfirmed
pyright added to the [dev] extra pyproject.toml first just setup-linux after this pulls a new dep (wraps node)
# pyright: ignore[reportMissingImports] on the evdev import daemon/deckd/input.py with evdev installed, confirm the ignore doesn't itself become a warning
e2e daemon runs with DECKD_FAKE_INPUT=1 client/playwright.config.ts, daemon/deckd/__main__.py (_build_sinks) the Linux suite previously relied on the PYTHONPATH=scripts/no-evdev shadow; both are now in play and the shadow must stay redundant, not conflicting
e2e daemon runs with --no-focus client/playwright.config.ts on GNOME the daemon previously watched real desktop focus during e2e; specs that implicitly depended on that would now fail
chromium lookup falls back to Playwright's managed browser client/e2e/find-chromium.mjs the nix-store path must still win on nix — it's checked first, but confirm no accidental fallback
e2e daemon binary falls back to deckd on PATH client/playwright.config.ts .venv/bin/deckd must still be preferred where it exists

Acceptance criteria

On a Linux/GNOME checkout (nix/flox or plain, note which):

  • just setup completes and lands packages where you expect (which deckd, python -c "import evdev" where the extra applies).
  • just test-all passes all 7 steps.
  • Step 1 (pyright) resolves third-party imports — no reportMissingImports storm — and the evdev ignore comment produces no new warning on a box where evdev is installed.
  • npm run test:e2e passes, and client/e2e/.daemon.log shows DECKD_FAKE_INPUT set; input is logged, not injected — i.e. no keystroke reached your desktop during the run.
  • On nix: e2e still launches the /nix/store/*-playwright-chromium/*/chrome binary, not a downloaded one.
  • just dev / just dev-daemon-lan still work normally (the sink and focus changes must not leak into non-test runs — DECKD_FAKE_INPUT unset means real injection).
  • aarch64 Linux only, if you have one handy: just setup-linux still source-builds python-evdev via scripts/install_evdev_source.sh.

Notes

Nothing here changes daemon behaviour at runtime; _build_sinks() is a pure extraction of the previous inline sink selection plus the new DECKD_FAKE_INPUT short-circuit (covered by tests in tests/test_input.py). If a step fails, the fix is likely a one-liner in the Justfile — file it as a follow-up rather than reverting the set.

Metadata

Metadata

Assignees

No one assigned

    Labels

    human-verification-requiredCode is complete; a human must verify on real hardware / a live session before closing

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions