Two bugs caused the post-Phase-3c APK build to ship from the wrong source: 1. The remote script hardcoded `feat/android-voip-client` as the branch to pull — not the current working branch. It was never updated when we moved to android-rewrite and then opus-DRED. 2. `git reset --hard origin/feat/android-voip-client 2>/dev/null || true` silently swallowed the reset failure when that branch didn't exist on the remote's origin, leaving the tree on whatever branch was there from a previous session. In our case that was feat/desktop-audio-rewrite atd0c1731— the android-rewrite baseline, missing every Phase 0-4 commit. The ntfy notification even included the stale commit hashd0c1731but nobody noticed because the hash wasn't being cross-checked against the branch the script claimed to be building. Fix: Local side (scripts/build-and-notify.sh): - Auto-detect the current local branch via `git branch --show-current` - Accept `--branch NAME` override for explicit control - Pass the branch as a third positional arg to the remote build script - Abort early if we can't determine a branch (detached HEAD) - Updated usage docs to reflect the "build whatever I'm working on" default Remote side (embedded heredoc): - Read BRANCH from $3 and abort if empty - `git fetch origin "$BRANCH"` — no piping to /dev/null, errors surface - `git reset --hard "origin/$BRANCH"` — no `|| true`, failures abort - Print the resolved commit hash + subject line immediately after reset so logs cross-reference the source clearly - Started/done ntfy notifications now include the branch name alongside the commit hash: "WZP Android [opus-DRED @953ab71] done! APK: ..." Result: next build will (a) actually fetch the requested branch from the remote's gitea origin, (b) fail loudly if the branch doesn't exist or the reset fails, and (c) surface the branch in the ntfy notifications so future "wait, which build is this?" confusion is impossible. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
WarzonePhone
Custom lossy VoIP protocol built in Rust. E2E encrypted, FEC-protected, adaptive quality, designed for hostile network conditions.
Quick Start
# Build
cargo build --release
# Run relay
./target/release/wzp-relay --listen 0.0.0.0:4433
# Send a test tone
./target/release/wzp-client --send-tone 5 relay-addr:4433
# Web bridge (browser calls)
./target/release/wzp-web --port 8080 --relay 127.0.0.1:4433 --tls
# Open https://localhost:8080/room-name in two browser tabs
Architecture
See docs/ARCHITECTURE.md for the full system architecture with Mermaid diagrams covering:
- System overview and data flow
- Crate dependency graph (8 crates)
- Wire formats (MediaHeader, MiniHeader, TrunkFrame, SignalMessage)
- Cryptographic handshake (X25519 + Ed25519 + ChaCha20-Poly1305)
- Identity model (BIP39 seed, featherChat compatible)
- Quality profiles (GOOD/DEGRADED/CATASTROPHIC)
- FEC protection (RaptorQ with interleaving)
- Adaptive jitter buffer (NetEq-inspired)
- Telemetry stack (Prometheus + Grafana)
- Deployment topology
Features
- 3 quality tiers: Opus 24k (28.8 kbps) / Opus 6k (9 kbps) / Codec2 1200 (2.4 kbps)
- RaptorQ FEC: Recovers from 20-100% packet loss depending on tier
- E2E encryption: ChaCha20-Poly1305 with X25519 key exchange
- Adaptive jitter buffer: EMA-based playout delay tracking
- Silence suppression: VAD + comfort noise (~50% bandwidth savings)
- ML noise removal: RNNoise (nnnoiseless pure Rust port)
- Mini-frames: 67% header compression for steady-state packets
- Trunking: Multiplex sessions into batched datagrams
- featherChat integration: Shared BIP39 identity, token auth, call signaling
- Prometheus metrics: Relay, web bridge, inter-relay probes
- Grafana dashboard: Pre-built JSON with 18 panels
Documentation
| Document | Description |
|---|---|
| ARCHITECTURE.md | Full system architecture with diagrams |
| TELEMETRY.md | Prometheus metrics specification |
| INTEGRATION_TASKS.md | featherChat integration tracker |
| WZP-FC-SHARED-CRATES.md | Shared crate strategy |
| grafana-dashboard.json | Importable Grafana dashboard |
Binaries
| Binary | Description |
|---|---|
wzp-relay |
Relay daemon (SFU room mode, forward mode, probes) |
wzp-client |
CLI client (send-tone, record, live mic, echo-test, drift-test, sweep) |
wzp-web |
Browser bridge (HTTPS + WebSocket + AudioWorklet) |
wzp-bench |
Component benchmarks |
Linux Build
./scripts/build-linux.sh --prepare # Create Hetzner VM + install deps
./scripts/build-linux.sh --build # Build release binaries
./scripts/build-linux.sh --transfer # Download to target/linux-x86_64/
./scripts/build-linux.sh --destroy # Delete VM
Tests
cargo test --workspace # 272 tests
License
MIT OR Apache-2.0
Description
Languages
Rust
78%
Kotlin
7.9%
Shell
6.7%
TypeScript
3.2%
C++
1.5%
Other
2.6%