v0.50.1

juanfont/headscalev0.50.1Aug 24, 2026by github-actions[bot]

Upgrading?

AI Summary

This patch release resolves blind spots in monitoring by counting rejected trunk gate 403s and fixing admin endpoints that were previously reported as 'unknown'. It includes updates to upstream dependencies and fixes for visibility issues.

Key Highlights

  • `[[trunk]]` 403s now counted as `rejected_trunk`
  • Admin endpoints no longer report as `endpoint="unknown"`
  • siphon-rs pinned to v2026.08.24
  • forge-media pinned to specific commit

New Features

  • Better alerting for trunk gate rejections
  • Improved admin endpoint metrics

Full Release Notes

**Two observability blind-spot fixes and routine upstream pin rolls.**

Both fixes came out of validating the 0.50.0 getting-started flow: the
`[[trunk]]` gate's 403s — the exact scanner traffic the gate exists to
shed — were invisible on `/metrics`, and four 0.49.0 admin endpoints
reported as `endpoint="unknown"`. No protocol change (still `1`), CDR
still v8, no new config keys. Drop-in upgrade; alerting can now key on
`siphon_ai_invites_total{result="rejected_trunk"}`.

### Changed

- **siphon-rs pinned to `v2026.08.24`** (from `v2026.08.21`) — picks up
  [sip-identity 0.3.0](https://github.com/thevoiceguy/siphon-rs/pull/124):
  PASSporT **signing** behind a new `sign` feature
  ([siphon-rs #123](https://github.com/thevoiceguy/siphon-rs/pull/123)),
  the provider-side complement to the ES256 verification SiphonAI already
  uses. SiphonAI does not enable the feature, so verification behaviour is
  unchanged — this makes outbound STIR/SHAKEN signing (long demand-gated)
  buildable against the current pin when it's picked up.
- **forge-media pinned to `c277860cd123`** (from `1fe94a502efa`) — one
  commit: aligns forge-media's own siphon-rs submodule to `v2026.08.24`,
  keeping both pins on the same upstream revision (the media path sees
  siphon-rs through that submodule).

### Fixed

- **`[[trunk]]`-gate 403s now count in `siphon_ai_invites_total` as
  `result="rejected_trunk"`**
  ([#564](https://github.com/thevoiceguy/siphon-ai/issues/564)). The allowlist gate runs in the SIP
  dispatch layer before the acceptor, whose paths owned every increment of
  that counter — so the INVITEs the gate sheds (scanner traffic hammering
  the SIP port from non-allowlisted sources) were invisible on `/metrics`
  and unalertable without log-pipeline tooling. Per-peer detail stays in
  the audit stream and SIP ring; the new label is alertable directly.
  Digest-auth 401s are deliberately still not in this counter (a challenged
  INVITE retries with credentials and is counted then) — that gate's
  brute-force signal remains `siphon_ai_sip_auth_total{result="failed"}`.

- **Four admin endpoints no longer report as `endpoint="unknown"` in
  `siphon_ai_admin_requests_total`**
  ([#565](https://github.com/thevoiceguy/siphon-ai/issues/565)):
  `GET /admin/v1/status`, `GET /admin/v1/errors`,
  `GET /admin/v1/cdrs/recent`, and `POST /admin/v1/drain` — the 0.49.0
  sightglass endpoints — got authorization arms but no metric-label
  arms, so their traffic lost per-endpoint visibility and polluted the
  `unknown` probing signal dashboards key on. The static route table is
  now a single shared source (`STATIC_ROUTES`) answering both
  `min_role` and `route_label`, so a route can no longer be known to
  authorization yet invisible to metrics.

---

**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.50.1` (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