Support Matrix
This matrix separates detection, local validation, and public support. A working source checkout is not the same thing as a published package or a live audio-routing guarantee.
Status Vocabulary
| Status | Meaning |
|---|---|
| Verified | Covered by local automated validation in this repo. |
| Manual VM | Covered by a VM target and ready for operator-run guest evidence. |
| Planned | Designed in the contract but not implemented or validated yet. |
| Unsupported | Intentionally not a target for this milestone. |
Host Targets
Target metadata is stored in vm/targets.tsv and validated by pnpm verify:vm, which also renders and checks cloud-init handoffs for every target. Rows marked Verified must have a passing target evidence bundle under .vm/evidence/<target>. Rows with passing evidence must be promoted to Verified; otherwise they stay Manual VM. Use scripts/collect-vm-evidence-ssh.sh after a VM is reachable over SSH to run guest validation, copy the target bundle back, and verify it locally before changing a row to Verified. Guest evidence includes a redacted support bundle plus a desktop launch smoke so maintainers can inspect backend diagnostics without relying only on screenshot or pass/fail status. It also includes environment.json, which must match the target distro, desktop/session, audio stack, and architecture before a row can be promoted. The matching detect-audio.json must also report the target audio backend as available, so a JACK or PulseAudio row cannot be promoted with only generic Linux evidence. Direct SSH collection keeps guest and copied-back output target-scoped: custom --remote-output-dir and --local-output-dir values must include the target id as a path segment and cannot contain parent traversal. After evidence verifies, promote the row with pnpm vm:promote-evidence -- --target <target>. Use --dry-run first to preview the docs change without editing the matrix. For final release support claims, pass --require-published-release --release-tag <tag> so promotion also proves the guest installed and ran the signed published artifact for the exact release. Custom verifier --evidence-root and --matrix paths are local artifacts only: the support-matrix verifier rejects root/home placeholders, parent/current-directory traversal, URL syntax, glob metacharacters, symlinks, and existing paths with the wrong file or directory type before reading the matrix or scanning copied-back VM evidence. Run pnpm vm:host-plan for cross-distro host setup hints and target-specific image, cloud-init, launch, and evidence handoff commands. Run pnpm vm:render-ssh-plan -- --all --output .vm/ssh-targets.tsv to generate the multi-guest TSV consumed by pnpm vm:collect-matrix.
| Target | Desktop/session | Audio stack | Current status |
|---|---|---|---|
arch-hyprland-pipewire | Hyprland on Wayland | PipeWire/WirePlumber | Manual VM |
fedora-kde-pipewire | KDE Plasma on Wayland | PipeWire/WirePlumber | Manual VM |
fedora-kde-jack | KDE Plasma on Wayland | JACK | Manual VM |
ubuntu-gnome-pipewire | GNOME on Wayland | PipeWire/PulseAudio compatibility | Manual VM |
ubuntu-gnome-pipewire-aarch64 | GNOME on Wayland | PipeWire/PulseAudio compatibility | Manual VM |
debian-xfce-pulseaudio | Xfce on X11 | PulseAudio | Manual VM |
nixos-gnome-pipewire | GNOME on Wayland | PipeWire/WirePlumber | Manual VM |
fedora-sway-pipewire | Sway on Wayland | PipeWire/WirePlumber | Manual VM |
opensuse-kde-pipewire | KDE Plasma on Wayland | PipeWire/WirePlumber | Manual VM |
Audio Backends
| Backend | Detection | Host mutation | Notes |
|---|---|---|---|
| PipeWire native | Verified probes and port listing | Virtual sinks, routes, mute, monitor links | Per-edge gain planned. |
| PulseAudio compatibility | Verified read-only probes | Verified with fake runners | Sinks, monitors, routes; one output per source. |
| Native PulseAudio | Verified read-only probes | Same pactl adapter path | Needs manual VM proof on a non-PipeWire PulseAudio host. |
| JACK | Verified probes and port listing | Existing-port routes, route mute, and monitor links | Virtual ports and gain still planned. |
| ALSA | Playback/capture hardware detection | Not a routing backend | Used for diagnostics and hardware visibility. |
Host adapters are dry-run by default. Live apply is session-local and requires the desktop Host apply control plus the Tauri shell command bridge.
Install Channels
| Channel | Current validation | Public status |
|---|---|---|
| Source checkout | pnpm check | Supported for contributors. |
| Signed curl installer | Local verification plus live /install.sh byte comparison | Published for 0.1.0 at loopwire.app. |
| AppImage | Published-artifact and Tauri bundle smoke | Published for 0.1.0 on GitHub Releases. |
| Ubuntu 24.04 / Debian 13 deb | Verified in matching KVM guests at commit 70eee4e; review snapshot in vm/native-package-proof/ | Published as direct downloads. |
| Ubuntu 24.04 / Debian 13 signed APT repository, amd64 | Separate signed-metadata, publication, bootstrap, and clean-guest lifecycle checks | Public activation is gated; see current channel availability. |
| Fedora 44 / openSUSE Tumbleweed RPM | Verified in matching KVM guests at commit 70eee4e; review snapshot in vm/native-package-proof/ | Published as direct downloads; no COPR/OBS repository. |
AUR loopwire | Tagged source build through pnpm verify:aur:source | Published for 0.1.0. |
AUR loopwire-bin | Signed release-artifact build through pnpm verify:aur | Published for 0.1.0. |
AUR loopwire-git | Rolling default-branch build through pnpm verify:aur:git | Published; development snapshots are not stable releases. |
Nix flake package (loopwire-bin) | pnpm verify:nix-release -- --repo sandwichfarm/loopwire --tag v0.1.0 --public-key packaging/release-signing-public.pem | Release-bound for 0.1.0; locally proved on x86_64 only. |
The flake package output is packages.<system>.loopwire-bin; flake.nix now pins the signed v0.1.0 tarball hashes for x86_64-linux and aarch64-linux. Fresh local non-skipped Nix build evidence in this repository currently covers x86_64-linux only; aarch64-linux still needs native proof.
APT lifecycle evidence is separate from the direct-download snapshot. Isolated HTTPS guests and synthetic +aptfixture1 package upgrades demonstrate development behavior with the existing release payload; they do not establish a new public release or production channel. Only reviewed production HTTPS verification activates APT instructions. Repository support covers the named distro versions on amd64, not derivatives or other architectures.
Native package verification is narrower than audio-backend support. The committed snapshot proves that each official, checksum-pinned guest built and installed its target package, ran the packaged background/provider/backend commands, resolved GUI libraries, created a Loopwire X11 window under Xvfb, and removed all package-owned files. It does not promote any host-audio backend row or claim that the packages have been published.
Desktop Integration
| Area | Current behavior |
|---|---|
| Window chrome | Native chrome by default; custom mode persists and requests an undecorated Tauri window with Loopwire controls. |
| Autostart | XDG desktop autostart can be installed and removed with scripts/manage-autostart.sh. |
| Background restore | Source checkout and packaged user-scoped systemd restore paths are verified locally. |
| Screenshots | assets/product-screenshot.png is the canonical desktop capture; refresh the docs public copy through the screenshot procedure. |