v0.45.0
thevoiceguy/siphon-aiv0.45.0Jul 27, 2026by github-actions[bot]
Upgrading?
AI Summary
Adds `ws_disconnect` CDR termination cause and fixes outbound From tag reuse.
Key Highlights
- Added `ws_disconnect` termination cause to CDRs and metrics.
- Fixed outbound From tag reuse (now unique per request).
- CDR schema version bumped from v6 to v7.
Breaking Changes
- CDR schema version bumped from v6 to v7
New Features
- New `ws_disconnect` CDR termination cause
Full Release Notes
### Fixed - **CDR now records an unexpected mid-call WS drop as `termination.cause = "ws_disconnect"`** (issue #369; **CDR schema v6 → v7**). PROTOCOL.md §5.7 has always promised that a WS connection closing before any `stop` exchange produces a CDR recording `ws_disconnect` — but the CDR had no such cause: a crashed WS server, a network cut, a keepalive timeout, a bare socket close (even a clean 1000 with no `hangup`), and a reconnect window that elapsed without recovering all collapsed into `bridge_ended`, the same value an orderly SiphonAI-side session ending produces. The only trace of the difference was substring-matching the free-text `termination.bridge_disconnect` diagnostic, which has no stability contract. Same WS-vs-CDR divergence class as #356 (`transfer`) and #332 (`caller_hangup`) — the durable, billing/ops-grade side was the lossy one. New `WsDisconnect` variant on `CallTermination` / the CDR `TerminationCause` (serialises `"ws_disconnect"`, matching the WS `stop` reason); the controller classifies every bridge-first ending through one helper whose drop set deliberately equals reconnect eligibility (`ServerClosed` or any connection error → `ws_disconnect`; `stop`-sent, controller-hung-up, `server_too_slow`, `protocol_error` stay `bridge_ended`), so give-up reconnects land on `ws_disconnect` too. `siphon_ai_calls_total` gains the `cause="ws_disconnect"` label — alert on it; it means the WS server crashed or the network failed, not that a call ended. PROTOCOL.md §5.7 step 4 also named a `stop_reason` CDR field that never existed under any option — corrected to `termination.cause`. - **Outbound requests no longer reuse one From tag for the process lifetime** (fixed upstream by [siphon-rs#72](https://github.com/thevoiceguy/siphon-rs/pull/72), pin bumped `5c7cf20beb50` → `ead16f9bf9b7`). `UserAgentClient` minted a single `local_tag` at construction and stamped it on every out-of-dialog request until restart, so all outbound INVITEs (and OPTIONS, SUBSCRIBE, MESSAGE, PUBLISH, unsolicited NOTIFY) from a node shared one From tag — RFC 3261 §8.1.1.3 requires a fresh tag per request and §19.3 fresh randomness per tag; a live trunk capture showed 7 unrelated calls with 7 Call-IDs and a single tag over 86 minutes. Upstream now mints a tag per request, with REGISTER as the deliberate exception: a stable per-registrar tag (capped map, like the reused Call-ID) so a refresh series presents one `(Call-ID, From tag)` identity per §10.2. No siphon-ai code change. --- **Artifacts** - Static musl binaries for `x86_64` and `aarch64` (`.tar.gz`). - Debian packages (`.deb`) for `amd64` and `arm64` — `apt install ./siphon-ai_*_amd64.deb`. - `SHA256SUMS` — verify with `sha256sum -c SHA256SUMS`. - `*-sbom.cdx.json` — CycloneDX SBOM. - `SHA256SUMS.cosign.bundle` — cosign keyless signature over the checksums. - Container: `ghcr.io/thevoiceguy/siphon-ai:v0.45.0` (multi-arch, cosign-signed). Verify the checksums signature: ``` cosign verify-blob --bundle SHA256SUMS.cosign.bundle \ --certificate-oidc-issuer https://token.actions.githubusercontent.com \ --certificate-identity-regexp 'release.yml@' SHA256SUMS ```
Related Repositories
farion1231/cc-switch★ 147,652
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
rustdesk/rustdesk★ 126,626
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
tauri-apps/tauri★ 112,121
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
ruvnet/RuView★ 99,167
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
oven-sh/bun★ 96,346
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one