Skip to content

Commit fba5406

Browse files
authored
Prepare the 0.3.8 release (#187)
## What's in it - `scripts/release.sh prepare --version 0.3.8`: workspace version, the 44 internal dependency pins, both lockfiles, and the three active release metadata files. - The hand sweep prepare doesn't reach, matching 0.3.7's `228a4aff`: 14 example manifests + `examples/Cargo.lock`, ten crate READMEs, the rvoip-sip docs set, `docs/RELEASING.md`, and the workflow's version hint. Two references deliberately stay at 0.3.7: `check_public_api.sh`'s semver baseline (the *previous* release is the comparison target) and the OpenSIPS TLS provenance note (a historical statement). - CHANGELOG `0.3.8` entry and a rewritten `RELEASE_NOTES_NEXT.md`, including an **Upgrading from 0.3.7** section: the one source-level change for downstream code is `CodecInfo` literals adding `payload_type: None`. Every other consumer-constructed type (`MediaFrame`, `SymmetricRtpPolicy`, `SipTraceConfig`, `MediaMode`) was diffed against `v0.3.7` and is shape-identical. - A pre-publish API review moved the three new AMR knobs off `Config`'s public fields onto `with_amr_dtx` / `with_amr_auto_cmr` / `with_amr_mode_set` builders (private fields — the constructible shape stays frozen at 0.3.7's). Fifteen in-repo functional-record-update construction sites were converted to the documented constructors. `cargo semver-checks` vs `v0.3.7`: **no semver update required**. - Example 12 fixed for the `CodecInfo` field addition (it had never compiled since the field landed; only main-ci builds all 14 examples). ## Issue triage folded in All ten bug-shaped open issues were evaluated against this branch: #176 is fixed by this release (closed); #163, #166, #167 were fixed in 0.3.7 and are now closed against their evidence; #177 and #170 updated as partially addressed; #169, #168, #86, #164 confirmed valid and open; follow-ups #184, #185, #186 filed from the verification residuals. None of the open issues is a 0.3.8 regression; nothing new rides this release beyond the API-shape corrections above. ## After merge `remote-preflight`, then `remote-release` qualification with `first_candidate=true` — the gate catalog changed (+17 gates), so the catalog hash is fresh and no prior evidence reuses. Publish follows the protected workflow. Bridgefu's pin bump has a prepared 7-site patch. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2 parents 2e49edf + 550da8f commit fba5406

64 files changed

Lines changed: 562 additions & 435 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release-prepare.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
workflow_dispatch:
55
inputs:
66
version:
7-
description: Stable SemVer without a leading v (for example 0.3.7)
7+
description: Stable SemVer without a leading v (for example 0.3.8)
88
required: true
99
type: string
1010

CHANGELOG.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,71 @@
22

33
## Unreleased
44

5+
## 0.3.8 — 2026-08-14
6+
7+
This coordinated 44-crate patch release brings AMR-NB and AMR-WB into the
8+
codec set end to end — negotiation, transport, transcoding, and release
9+
evidence — adds record-routed proxy interop to the qualification matrix, and
10+
repairs SIPS dialog and opus-bridge edge cases found on the way.
11+
12+
### AMR codecs
13+
14+
- Add AMR-NB and AMR-WB with IF1 and IF2 interface formats, VAD1/VAD2 and DTX
15+
reaching the wire, receive-side interleaving reassembly, max-red redundancy
16+
scheduling with dedup, and CMR damping — bit-exact against the fetched
17+
TS 26.073/26.101/26.201 material, with no 3GPP sources in the repository.
18+
- Negotiate and obey the SDP mode-set, prove every mode in a live call, and
19+
attest each rate in the release evidence; long-run soaks cover both
20+
variants.
21+
- Admit dynamic codecs into the media graph by their negotiated payload type
22+
(`CodecInfo` now carries it), re-frame packet times AMR cannot accept
23+
(10 ms joins and 30 ms splits), and label emitted frames so the UCTP pumps
24+
stop stamping Opus's number on everything else.
25+
- Prove AMR crosses SRTP in process and a QUIC datagram in both directions.
26+
27+
### SIP, proxies, and interop
28+
29+
- Generate a secure fallback Contact for every RFC 3261 §12.1.1 trigger, so
30+
secure dialogs answer with `sips:` at the TLS-advertised address while
31+
explicit Contact and plain-SIP behavior are preserved (issue #176). This
32+
also repairs rvoip-to-rvoip SIPS setup: `Dialog::from_2xx_response` refuses
33+
a secure dialog whose Contact is not `sips:`, which the old plain fallback
34+
tripped.
35+
- Learn the UAC route set from the dialog-forming 2xx's Record-Route
36+
(reversed per §12.1.2), so in-dialog requests stop bypassing
37+
record-routing proxies; the UAS side reads it from the request.
38+
- Add Kamailio and OpenSIPS registrar-proxy labs with TLS and SRTP through
39+
rtpengine, opt-in AMR-NB transcoding (the AMR-WB transcode failure is
40+
attributed to rtpengine), and a per-rate sweep bound to the gate catalog.
41+
- Expose the profiled egress registration's coordinator for
42+
observation-only event subscriptions; the composite adapter remains the
43+
sole signaling and lifecycle owner.
44+
- `Config` gains `with_amr_dtx`, `with_amr_auto_cmr`, and
45+
`with_amr_mode_set` builders (private fields — `Config`'s constructible
46+
shape stays frozen). DTX and auto-CMR are local media policy; only the
47+
RFC 4867 `mode-set` is negotiated.
48+
- `CodecInfo` carries the payload type a transport negotiated
49+
(`payload_type: Option<u8>`). Code constructing `CodecInfo` literals adds
50+
one field on upgrade; `None` preserves the name-table behavior.
51+
52+
### Media graph and bridges
53+
54+
- Keep opus↔opus bridges passthrough when the two legs numbered opus
55+
differently: the payload type is a per-leg SDP artifact, so the bypass
56+
compares name, rate, and channels, and passthrough restamps the sink's
57+
payload type on egress.
58+
- Make a barge-in flush empty the re-framing accumulator as well as the sink
59+
queues, so no pre-interruption audio or dead-timeline timestamp survives
60+
into the first post-flush frame.
61+
- Reach the opus and all-codecs feature sets from the rvoip facade.
62+
63+
### Qualification
64+
65+
`0.3.8` requires a fresh `remote-release` qualification bound to the updated
66+
gate catalog, which adds the AMR per-rate sweep, the proxy-PBX media family,
67+
and the AMR fuzz targets. Because the aggregate is bound to the catalog hash,
68+
no `0.3.7` evidence qualifies this release.
69+
570
## 0.3.7 — 2026-08-06
671

772
This coordinated 44-crate patch release hardens voice-AI and WebRTC media under

0 commit comments

Comments
 (0)