All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Browser demo: pressing Stop (or a transfer completing) could let a queued
audio/BroadcastChannel callback run after the
AudioContextwas closed and the WASM decoder freed, crashing the module. The receive path now tracks an active flag, guards its callbacks, and tears down cleanly. - Browser demo: encrypted file send/receive failed and left the Stop button
looking frozen, because the device-mode decode loop kept pushing into a
decoder that completion had already freed. The loop now stops feeding the
instant the decoder is torn down (extracted into a tested
feedStreamBufferhelper).
- Over-the-air fieldtest harness (
sonance fieldtest): single-machine acoustic loopback that plays a seeded corpus out the speaker, records it back on the mic, decodes, and reports PER / sync rate / goodput / estimated SNR per payload size. JSON output matches thextasksweep convention; honest results template and caveats indocs/field-results.md. - Fieldtest TDD hardening: extracted the scorer / metrics / report core into
the
sonance_cli::fieldtestlibrary module so it is unit- and property- testable without a sound card; added a hardware-free--simulate[=ideal|awgn:SNR[,SEED]]mode that runs the full encode -> channel -> capture -> score -> report pipeline throughsonance-simvia one sharedsimulated_captureseam; and addedsonance-cli/tests/fieldtest_proptest.rsproving the scorer's integrity contract (never reports wrong bytes as a success) across arbitrary payloads, seeds, and channels, plus SNR-monotonicity and zero-trials boundary tests. - Demo JS test + lint tooling:
node:testregression coverage for the decode loop (sonance-wasm/demo/decode-loop.test.js), plus ESLint + Prettier config. - Repo hygiene:
CONTRIBUTING.md, this changelog,.editorconfig, and adeny.tomlforcargo-deny.
Initial implementation, built test-first milestone by milestone.
- PHY (
sonance-dsp):no_stdadaptive OFDM/QAM (BPSK..1024-QAM) with per-subcarrier water-filled bit-loading, MFSK/CSS modes, FFT front-end, chirp matched-filter + Schmidl-Cox synchronization, coherent channel estimation and per-subcarrier equalization with pilot CFO/SFO tracking. - Link (
sonance-link): framing, CRC, soft-decision LDPC FEC, frequency/ time interleaving, and the adaptive rate ladder. - Transport (
sonance-transport): RaptorQ (RFC 6330) fountain coding, chunking, self-describing packets, BLAKE3 integrity, multi-source demux. - API (
sonance): sans-IOEncoder/Decoder,Modem/Sender/Receiver, streaming, and theAutoadaptive rate path. - Crypto (
sonance-crypt, optionalencryptionfeature): XChaCha20-Poly1305 AEAD, ephemeral X25519 handshake with 6-digit SAS, BLAKE3 KDF, passphrase fallback; byte-identical wire format when disabled. - Audio (
sonance-audio):AudioSink/AudioSourcetraits with mock, WAV, andcpalbackends, resampling, and a lock-free ring buffer. - Bindings: C ABI (
sonance-ffi, cbindgen) and WebAssembly (sonance-wasm, Web Audio) with a browser send/receive demo. - Tooling: deterministic channel simulator (
sonance-sim),xtasksweeps/ benchmarks, criterion benches, and cargo-fuzz targets.