v0.12.0

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

Upgrading?

AI Summary

Operability release introducing a config-validation CLI and `SIGHUP` hot-reload for routes, webhooks, CDR sinks, and SIP TLS certificates.

Key Highlights

  • New CLI subcommands: `check`, `print-config`, and `route-test` for preflight and diagnostics.
  • Full `SIGHUP` hot-reload for routes and webhook/CDR sinks.
  • Fail-safe reload mechanism that retains the old config if the new one fails to compile.
  • New metric `siphon_ai_config_reloads_total`.

New Features

  • Config-validation CLI
  • SIGHUP hot-reload for routes and sinks
  • SIP TLS certificate reload via SIGHUP

Full Release Notes

Operability release: a real config-validation CLI and `SIGHUP` hot-reload. Running the daemon is unchanged — `siphon-ai --config X` with no subcommand.

## Added — config CLI subcommands
- **`siphon-ai check --config X`** — validate + compile and exit (no sockets, no runtime). Exit `0` + a one-screen summary if valid, `1` + the error on stderr otherwise. The CI / pre-deploy / pre-`systemctl reload` preflight. (Also fixes the documented-but-nonexistent `--check` flag in `contrib/README.md`.)
- **`siphon-ai print-config --config X [--show-secrets]`** — render the *effective* compiled config (post-`${VAR}`, post per-route merge); **secrets redacted by default**.
- **`siphon-ai route-test --config X --to N [...]`** — run the dialplan against a synthetic call (first-match-wins) and report the winning route (or `NO MATCH → 404`) + its effective bridge config.

## Added — `SIGHUP` config hot-reload
`systemctl reload siphon-ai` re-reads the `--config` file and hot-applies the reload-safe sections **without dropping calls**:
- **routes** — new INVITEs use the new dialplan; in-flight calls keep the route they matched;
- **`[webhooks]` / `[cdr]` sinks** — rebuilt + swapped, *unless* a durable `spool_dir` is active for that sink (its drain worker can't be hot-swapped → restart required there);
- the `[sip.tls]` cert reload (0.3.0) is folded into the same handler.

**Fail-safe:** a config that doesn't load/compile is logged + counted and the running config is kept — a bad edit can't take the daemon down. Run `check` first:
```sh
siphon-ai check --config /etc/siphon-ai/config.toml && systemctl reload siphon-ai
```

**Restart-required sections** — `[sip]` listen/transports, `[node]`, `[media]`, `[observability]`, `[admin]`, `[hep]`, `[security.stir_shaken]`, and `[[gateway]]` bind sockets / build process-wide state and need a restart. A reload that changes one applies the safe sections and logs a warning naming it.

New metric `siphon_ai_config_reloads_total{result=applied|no_change|failed}`.

> **Gateway hot-reload** (recreating UAC-backed originators) is a planned fast-follow into 0.12.x; until then `[[gateway]]` changes are restart-required.

Docs: `docs/CONFIG.md` → *Validating, inspecting & reloading config*; `docs/DEPLOY.md` → *Config file reload*.

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

Related Repositories