v0.9.5

thevoiceguy/siphon-aiv0.9.5Jun 19, 2026by thevoiceguy

Upgrading?

AI Summary

Fixes a latent bug where inbound delayed-offer calls were never bridged and adds CDRs for delayed-offer negotiations that fail before going active.

Key Highlights

  • Fixed ACK dispatching to finalize bridging for inbound delayed-offer calls.
  • Added CDRs for delayed-offer failures with new termination causes (e.g., `ack_timeout`, `invalid_sdp_answer`).
  • CDR schema bumped to version 2.

New Features

  • CDRs for failed delayed-offer negotiations

Full Release Notes

**Patch release — fixes a latent bug that left inbound delayed offer unbridged, and completes the delayed-offer failure CDRs.**

### Fixed
- **Inbound delayed offer never bridged** (latent since 0.9.0). The daemon's packet pump special-cased ACK — it cleared the 200-OK retransmit timer and returned *without* dispatching the request to the UAS — so `on_ack` never fired and the delayed-offer call was never finalized from the ACK's SDP answer. The 200 OK (with our offer) was sent and the dialog existed (so a BYE got a 200), which is why the SIPp tests — asserting only the 200 OK content — missed it. Now a **body-carrying ACK is dispatched to the UAS** (`on_ack` → finalize → bridge); body-less ACKs (early offer) keep the timer-only fast path. The `delayed_offer` SIPp phase now also asserts the bridge actually connected.

### Added
- **Per-call CDR for delayed-offer negotiations that fail before going active.** A delayed-offer call whose ACK answer never arrives or is unusable now writes a CDR (not just a metric + log), with one of five new `termination.cause` values: `ack_timeout`, `missing_sdp_answer`, `invalid_sdp_answer`, `no_compatible_codec`, `invalid_remote_media`. These records have an empty `audio` block (no codec was negotiated).
- **CDR schema `version` → 2** — the new cause strings can break a strict consumer that exhaustively matched the v1 set (CLAUDE.md §7.7). The record shape is otherwise unchanged.

This closes the delayed-offer follow-ups — and makes inbound delayed offer work end-to-end.

PR: #197.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Related Repositories