Siavash Sameni
81042ac190
T4.4: SignalMessage::Nack + PictureLossIndication; NACK sender/receiver state machines
2026-05-12 09:25:29 +04:00
Siavash Sameni
e177e63843
T4.3: MediaCodec H.264 encoder/decoder stub (Android)
2026-05-12 09:15:06 +04:00
Siavash Sameni
1f7d130de9
fix: T4.2 status board → Pending Review
2026-05-12 09:10:50 +04:00
Siavash Sameni
3356ba94c6
T4.2: VideoToolbox H.264 encoder/decoder traits (macOS, MVP)
2026-05-12 09:09:57 +04:00
Siavash Sameni
bb153a331d
fix: T4.1 status board → Pending Review
2026-05-12 07:23:15 +04:00
Siavash Sameni
490d2d31c6
T4.1: wzp-video crate scaffold + H.264 NAL framer + depacketizer
2026-05-12 07:22:54 +04:00
Siavash Sameni
db69f7e9d1
fix: T3.5 status board → Pending Review
2026-05-12 06:46:28 +04:00
Siavash Sameni
f1b86e0fed
T3.5: Tier E per-session token bucket
2026-05-12 06:45:56 +04:00
Siavash Sameni
8454835c18
fix: T3.4 status board → Pending Review
2026-05-12 06:25:17 +04:00
Siavash Sameni
017c371611
T3.4: Tier D per-codec payload size sanity
2026-05-12 06:24:40 +04:00
Siavash Sameni
3220bd6151
fix: T3.2 status board — Committed → Pending Review
2026-05-12 06:14:07 +04:00
Siavash Sameni
e73f8a7150
T3.3: SignalMessage version field
2026-05-12 06:11:59 +04:00
Siavash Sameni
1b4f7b0772
T3.2: Document timestamp_ms monotonic across rekey + test
2026-05-11 21:19:03 +04:00
Siavash Sameni
f3398adb95
T3.1: RoomManager concurrency — Arc<RwLock<Room>> per room
2026-05-11 21:12:04 +04:00
Siavash Sameni
54c1a35186
T2.3-T2.6: BWE guard, relay conformance Tier A/B/C, Prometheus metrics
2026-05-11 20:50:22 +04:00
Siavash Sameni
3de56cf1f9
T2.2: BandwidthEstimator with cwnd/REMB target_send_bps
2026-05-11 19:16:25 +04:00
Siavash Sameni
fe1f9484bd
T2.1: Add SignalMessage::TransportFeedback
2026-05-11 19:06:45 +04:00
Siavash Sameni
0ef1f574ff
T1.8: Per-stream anti-replay window with configurable size
2026-05-11 16:56:09 +04:00
Siavash Sameni
b1c5837495
T1.7: Move QualityReport trailer inside AEAD payload
2026-05-11 16:42:25 +04:00
Siavash Sameni
6f81487778
T1.6: Protocol version negotiation in handshake
2026-05-11 15:53:04 +04:00
Siavash Sameni
5cdb50160a
T1.5.2: Workspace clippy hygiene + document pre-existing debt
2026-05-11 12:59:14 +04:00
Siavash Sameni
30d26fc7f6
T1.5.1: Remove unwrap() from encode_compact
2026-05-11 12:57:35 +04:00
Siavash Sameni
c93d302656
T1.5: Migrate emit/parse sites to v2 wire format
2026-05-11 12:37:32 +04:00
Siavash Sameni
9680b6ff34
T1.4.1: Add rustdoc on MiniHeaderV2 and MiniFrameContextV2 public items
2026-05-11 11:38:04 +04:00
Siavash Sameni
6b15b8f97c
T1.1.2: Address review — fix remaining stale 272 audio tests references
2026-05-11 11:35:15 +04:00
Siavash Sameni
6385b93391
T1.2.1: Add rustdoc on MediaType variants and methods
2026-05-11 11:33:58 +04:00
Siavash Sameni
6eb94f079d
T1.1.1: Address review — add rustdoc on impl MediaHeaderV2 constants and methods
2026-05-11 11:32:00 +04:00
Siavash Sameni
5580b794a4
T1.1.2: Refresh stale test-count figures in docs
2026-05-11 11:29:18 +04:00
Siavash Sameni
7c9ede9227
T1.1.1: Add rustdoc on MediaHeaderV2 fields
2026-05-11 11:22:21 +04:00
Siavash Sameni
e8866c6632
T1.4: Add v2 MiniHeader with seq_delta
2026-05-11 11:18:15 +04:00
Siavash Sameni
8c6e88ea68
T1.3: Widen CodecId wire representation to u8
2026-05-11 11:11:42 +04:00
Siavash Sameni
ffb92237be
T1.2: Add MediaType enum
2026-05-11 11:09:43 +04:00
Siavash Sameni
6af0539a72
T1.1: Add v2 MediaHeader type
2026-05-11 11:00:51 +04:00
Siavash Sameni
7b4bce69d5
docs: update all docs for hard NAT detection + relay wiring
...
Mirror to GitHub / mirror (push) Failing after 28s
Build Release Binaries / build-amd64 (push) Failing after 3m36s
- PROGRESS.md: hard NAT Phase A, relay cross-wiring, 588 tests
- ARCHITECTURE.md: hard NAT port prediction diagram + pattern table
- PRD-p2p-direct.md: Phase 8.6 split into a/b/c/d with status
- PRD-hard-nat.md: Phase A done, B signal ready, effort table updated
- PRD-netcheck.md: port_allocation field + probe documented
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 11:33:12 +04:00
Siavash Sameni
ee14862376
docs: add PRD for hard NAT traversal (port prediction + birthday attack)
...
Mirror to GitHub / mirror (push) Failing after 22s
Build Release Binaries / build-amd64 (push) Failing after 3m26s
4-phase design:
A. Port allocation pattern detection (sequential vs random)
B. Sequential port prediction (~80% success, <2s)
C. Birthday attack for random NATs (98% success, ~10s)
D. Hybrid waterfall with background relay-to-direct upgrade
Taskmaster tasks #84-87 added.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 11:20:19 +04:00
Siavash Sameni
f83361895e
docs: add PRDs for Phase 8 Tailscale-inspired features
...
Mirror to GitHub / mirror (push) Failing after 23s
Build Release Binaries / build-amd64 (push) Failing after 3m35s
5 new PRDs:
- PRD-public-stun.md — RFC 5389 STUN client
- PRD-portmap.md — NAT-PMP/PCP/UPnP port mapping
- PRD-ice-regather.md — Mid-call ICE re-gathering
- PRD-netcheck.md — Network diagnostic
- PRD-relay-selection.md — Region-based relay selection
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 11:08:46 +04:00
Siavash Sameni
8fcf1be341
feat(nat): Tailscale-inspired STUN/ICE + port mapping + mid-call re-gathering ( #28 )
...
Mirror to GitHub / mirror (push) Failing after 23s
Build Release Binaries / build-amd64 (push) Failing after 6m8s
Phase 8: 5 new modules bringing NAT traversal close to Tailscale's approach.
- stun.rs: RFC 5389 STUN client — public server reflexive discovery,
XOR-MAPPED-ADDRESS parsing, parallel probe with retry, STUN fallback
in desktop try_reflect_own_addr()
- portmap.rs: NAT-PMP (RFC 6886) + PCP (RFC 6887) + UPnP IGD port
mapping — gateway discovery, acquire/release/refresh lifecycle,
new PeerCandidates.mapped candidate type in dial order
- ice_agent.rs: candidate lifecycle — gather(), re_gather(),
apply_peer_update() with monotonic generation counter,
CandidateUpdate signal message forwarded by relay
- netcheck.rs: comprehensive diagnostic — NAT type, IPv4/v6,
port mapping availability, relay latencies, CLI --netcheck
- relay_map.rs: RTT-sorted relay map, preferred() selection,
populate_from_ack() for RegisterPresenceAck.available_relays
Relay: CallRegistry stores + cross-wires caller/callee_mapped_addr
into CallSetup.peer_mapped_addr. Region config + available_relays
populated from federation peers in RegisterPresenceAck.
Desktop: place_call/answer_call call acquire_port_mapping() and
fill caller/callee_mapped_addr. STUN+relay combined NAT detection.
571 tests pass (66 new), 0 regressions, 0 warnings.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 10:17:17 +04:00
Siavash Sameni
4471797edf
docs: update all PRDs and PROGRESS to current state (2026-04-13)
...
Mirror to GitHub / mirror (push) Has been cancelled
Build Release Binaries / build-amd64 (push) Has been cancelled
Updated 6 PRDs with implementation status:
- PRD-adaptive-quality: P2P quality done, bandwidth probing remains
- PRD-protocol-analyzer: all 5 phases documented
- PRD-relay-concurrency: DashMap + clone-before-send done
- PRD-p2p-direct: P2P adaptive quality update
- PRD-engine-dedup: all phases done
- PROGRESS.md: test count 372+, 3 new change sections
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 16:40:56 +04:00
Siavash Sameni
ba12aae439
refactor: extract shared engine helpers, federation clone-before-send, constants
...
Mirror to GitHub / mirror (push) Failing after 30s
Build Release Binaries / build-amd64 (push) Failing after 3m48s
Engine deduplication (PRD-engine-dedup.md):
- build_call_config(): shared CallConfig construction (was 23 lines × 2)
- codec_to_profile(): shared CodecId → QualityProfile mapping (was 19 lines × 2)
- run_signal_task(): shared signal handler (was 48 lines × 2)
- Net -39 lines from engine.rs, 6 duplicated blocks → single-line calls
Quick wins from REFACTOR-codebase-audit.md:
- 6 magic number constants extracted (CAPTURE_POLL_MS, RECV_TIMEOUT_MS, etc.)
- DRED_POLL_INTERVAL moved from 2 local defs to 1 module-level const
- federation.rs: forward_to_peers, broadcast_signal, send_signal_to_peer
now clone peer list and release lock before sending (was holding Mutex
across async I/O — last lock-during-send pattern eliminated)
- main.rs: close_transport() helper replaces 12 silent .ok() calls with
debug-level logging
314 tests passing, 0 regressions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 15:22:44 +04:00
Siavash Sameni
fdb78e08bd
docs: full codebase refactoring audit with prioritized suggestions
...
Mirror to GitHub / mirror (push) Failing after 32s
Build Release Binaries / build-amd64 (push) Failing after 3m33s
Comprehensive analysis across all 8 crates + Tauri engine covering:
- engine.rs: 35% duplication between Android/desktop (350+ lines)
- SignalMessage: 36 variants mixing orthogonal concerns
- federation.rs: zero test coverage on 1,132 lines of complex logic
- peer_links: lock held across async sends (last lock-during-I/O)
- Magic numbers, error handling, CLI parsing, unsafe docs
- Priority matrix: 10 items ranked by effort/impact/risk
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 12:35:59 +04:00
Siavash Sameni
3a51db998a
docs: relay concurrency refactor guide + PRD update for DashMap
...
Mirror to GitHub / mirror (push) Failing after 25s
Build Release Binaries / build-amd64 (push) Failing after 8m3s
REFACTOR-relay-concurrency.md: complete post-DashMap analysis with
current lock inventory, 4 prioritized suggestions (clone-before-send,
peer_links DashMap, quality atomics, arc-swap snapshots), decision
matrix, and concurrency diagram.
PRD-relay-concurrency.md: updated to recommend DashMap as primary
approach (was Option A per-room locks).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 12:27:26 +04:00
Siavash Sameni
a52b011fb5
feat(relay): replace global Mutex<RoomManager> with DashMap sharding
...
Mirror to GitHub / mirror (push) Failing after 24s
Build Release Binaries / build-amd64 (push) Failing after 3m41s
Eliminates the single-lock bottleneck for media forwarding. Before:
all participants across all rooms competed for one Mutex. Now rooms
are stored in DashMap (64 internal shards with per-shard RwLocks).
Changes:
- RoomManager.rooms: HashMap → DashMap<String, Room>
- Per-room quality tracking (qualities, current_tier moved into Room)
- Arc<Mutex<RoomManager>> → Arc<RoomManager> everywhere
- 20 .lock().await sites removed across room.rs, main.rs, federation.rs, ws.rs
- federation forward_to_peers: clone peer list, release lock, then send
- ACL uses std::sync::Mutex (rarely accessed, non-async)
Concurrency improvement:
- Before: 100 rooms × 10 people = 1000 tasks → 1 Mutex
- After: distributed across 64 DashMap shards, ~15 tasks per shard avg
- Rooms are fully independent — room A never blocks room B
314 tests passing, 0 regressions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 12:17:57 +04:00
Siavash Sameni
2514151a89
docs: PRD for relay concurrency — per-room lock sharding
...
Mirror to GitHub / mirror (push) Failing after 32s
Build Release Binaries / build-amd64 (push) Failing after 3m43s
Full analysis of relay lock contention with precise inventory of every
lock acquisition in the hot path. Evaluates 4 design options:
A) Per-room Arc<Mutex<Room>> (recommended — 100x improvement for multi-room)
B) DashMap (good but less explicit)
C) Channel-based fan-out (over-engineered for current scale)
D) Snapshot-on-change via arc-swap (best perf, more complex)
Phase 1: per-room locks, Phase 2: federation lock fix, Phase 3: quality
tracking out of critical path. Estimated 1.5-2.5 days total.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 12:01:21 +04:00
Siavash Sameni
f265fd772d
docs: relay concurrency model, Opus6k fix, build script fixes
...
Mirror to GitHub / mirror (push) Failing after 34s
Build Release Binaries / build-amd64 (push) Failing after 3m56s
- ARCHITECTURE.md: new "Relay Concurrency Model" section documenting
threading, shared state locking table, scaling characteristics, and
the RoomManager Mutex as primary bottleneck
- PROGRESS.md: Opus6k frame starvation fix, build script fixes
- PRD-dred-integration.md: Opus6k frame starvation bug documentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 11:54:37 +04:00
Siavash Sameni
d9e7e72978
docs: update PROGRESS, PRDs for completed tasks #9 , #11 , #12 , #27
...
Mirror to GitHub / mirror (push) Failing after 28s
Build Release Binaries / build-amd64 (push) Failing after 3m50s
- PROGRESS.md: add 2026-04-13 section with 5-tier quality, QualityDirective
handling, debug tap enhancements, dual_path fix, keystore sync
- PRD-coordinated-codec.md: Phase 3 marked complete (client directive handling)
- PRD-adaptive-quality.md: milestone table updated with Done/Pending status
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 11:34:01 +04:00
Siavash Sameni
ea5fc17c34
fix(relay): debug tap signal logging, dual_path test regression, PRD updates
...
Build Release Binaries / build-amd64 (push) Failing after 3m39s
Mirror to GitHub / mirror (push) Failing after 28s
- Add log_signal() and log_event() to DebugTap for RoomUpdate,
QualityDirective, join/leave lifecycle events (task #11 )
- Fix dual_path.rs Phase 7 regression: add missing ipv6_endpoint arg
to 3 race() call sites
- Update PRDs to reflect actual implementation status: mark adaptive
quality, coordinated codec, P2P, network awareness, protocol analyzer
- Update PROGRESS.md with QualityDirective gap and dual_path regression
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 09:54:52 +04:00
Siavash Sameni
d249b32ee5
test+docs: add tests for QualityDirective, ParticipantQuality; update docs
...
- QualityDirective signal roundtrip tests (with/without reason)
- ParticipantQuality unit tests (initial tier, degradation, weakest-link)
- Updated PROGRESS.md with desktop adaptive quality, relay coordinated
switching, Oboe state polling entries
- Updated ARCHITECTURE.md SFU fan-out rules with QualityDirective
- Updated PRD-coordinated-codec.md with implementation status
- 312 tests passing across all modified crates
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-12 19:56:46 +04:00
Siavash Sameni
766c9df442
feat(dred): continuous DRED tuning, PMTUD, extended Opus6k window
...
- DredTuner: maps live network metrics (loss/RTT/jitter) to continuous
DRED duration every ~500ms instead of discrete tier-locked values.
Includes jitter-spike detection for pre-emptive Starlink-style boost.
- Opus6k DRED extended from 500ms to 1040ms (max libopus 1.5 supports)
- PMTUD: quinn MtuDiscoveryConfig with upper_bound=1452, 300s interval
- TrunkedForwarder respects discovered MTU (was hard-coded 1200)
- QuinnPathSnapshot exposes quinn internal stats + discovered MTU
- AudioEncoder trait: set_expected_loss() + set_dred_duration() methods
- PathMonitor: sliding-window jitter variance for spike detection
- Integrated into both Android and desktop send tasks in engine.rs
- 14 new tests (10 tuner unit + 4 encoder integration)
- Updated ARCHITECTURE.md, PROGRESS.md, PRD-dred-integration, PRD-mtu
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-12 19:38:37 +04:00
Siavash Sameni
300ea66d13
docs: update DESIGN, ARCHITECTURE, PRDs, PROGRESS for BT + network + build changes
...
Reflects the current reality: setCommunicationDevice API 31+, deferred
MODE_IN_COMMUNICATION, BT-mode Oboe (bt_active flag), per-arch builds,
Hangup call_id fix, and network monitoring integration.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-12 17:39:59 +04:00
Siavash Sameni
4c1ad841e1
feat(android): Bluetooth audio routing + network change detection + per-arch APK builds
...
Bluetooth: wire existing AudioRouteManager SCO support through both app
variants. Replace binary speaker toggle with 3-way route cycling
(Earpiece → Speaker → Bluetooth). Tauri side adds JNI bridge functions
(start/stop/query SCO, device availability) and Oboe stream restart.
Network awareness: integrate Android ConnectivityManager to detect
WiFi/cellular transitions and feed them to AdaptiveQualityController
via lock-free AtomicU8 signaling. Enables proactive quality downgrade
and FEC boost on network handoffs.
Build: add --arch flag to build-tauri-android.sh supporting arm64,
armv7, or all (separate per-arch APKs for smaller tester binaries).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-12 16:07:41 +04:00