Troubleshooting
Use this guide to isolate failures quickly.
Fast Triage (2 Minutes)
Run these first:
# control-plane container state
docker compose -f docker/control-plane.compose.yml ps
# gateway health endpoint
curl -fsS http://127.0.0.1:3000/health
# recent gateway logs
docker compose -f docker/control-plane.compose.yml logs --tail=100 gateway
Then determine if failure is primarily:
- control plane (session setup/auth/routing)
- host runtime (capture/encode/send)
- client runtime (receive/decode/render/input)
- network path (direct route vs relay fallback)
If control-plane behavior is unclear, use Control Plane Deep Dive for expected service interactions and failure boundaries.
1. Cannot Establish Session
Symptoms:
- client never reaches connected state
- handshake errors appear immediately
Checks:
- confirm gateway is healthy
- confirm host runtime is active
- confirm target/session parameters are correct
- confirm firewall/NAT policy allows required UDP flow
Actions:
- restart control-plane containers
- verify host/client compatibility versions
- retry with minimal topology (single host, single client)
2. Session Connects but Feels Laggy
Symptoms:
- high input delay
- visual jitter or stutter
Checks:
- verify whether session is direct or relay
- inspect RTT/loss/jitter trends around event time
- inspect host CPU/GPU saturation
- reduce bitrate/resolution to isolate bottleneck
Actions:
- restore direct path where possible
- reduce competing host workload
- keep adaptation logs for correlation
3. Unexpected High Relay Usage
Symptoms:
- sessions relay in networks where direct path should be common
Checks:
- validate NAT/firewall behavior
- confirm candidate address correctness
- inspect recent infra or policy changes
Actions:
- correct ingress/egress policy for direct path
- verify upstream candidate generation
- compare with known-good baseline region
4. Desktop Runtime Issues
Symptoms:
- desktop app starts but runtime does not
- settings do not apply
Checks:
- run
bun run checkincrates/wavry-desktop - inspect app logs for command/permission failures
- verify monitor/audio/input permissions
Linux Wayland/KDE note:
- if
Gdk-Message ... Error 71 (Protocol Error) dispatching to wayland displayappears, run Linux preflight and confirm portal/compositor health.
Use Linux Production Playbook for recovery sequencing and hardening guidance.
5. Linux Capture and Portal Failures
Checks:
./scripts/linux-display-smoke.sh
If failing:
- verify
xdg-desktop-portal+ backend package - verify PipeWire session state
- retest with clean login session
Use Linux and Wayland Support for distro-specific recovery flow.
6. Audio Issues
Symptoms:
- missing audio
- wrong source selection
Checks:
- verify selected audio source (
system,microphone,app:<name>) - verify OS capture permissions
- verify sample-rate/channel compatibility in logs
7. CI/CD Build Failures
Checks:
- re-run with clean workspace state
- confirm lockfiles and cache keys are valid
- verify platform dependencies
- verify Dockerfile and workflow syntax changes
8. Useful Diagnostic Bundle
When escalating an issue, provide:
- precise timestamp window
- gateway/relay logs for that window
- host/client runtime logs
- whether session was direct or relay
- environment details (OS/compositor/version)