v0.50.1

macro-inc/macrov0.50.1Aug 24, 2026by github-actions[bot]

Upgrading?

AI Summary

Improves monitoring by ensuring rejected trunk traffic and specific admin endpoints are correctly tracked in metrics, resolving blind spots in dashboards. It also pins upstream dependencies to the latest stable versions.

Key Highlights

  • Rejected trunk 403s now counted in `siphon_ai_invites_total`
  • Admin endpoints no longer report as 'unknown'
  • siphon-rs pinned to v2026.08.24 (enables PASSporT signing)
  • forge-media pinned to specific commit

New Features

  • Metric visibility for trunk rejections
  • Admin endpoint metric visibility

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