Release identity and service compatibility
Use this reference before choosing a release, replacing a component or rolling back an upgrade. Deploy the approved component/configuration set for your deployment. A shared tag, an unchanged component or a service-change table alone does not prove that a mixed set works together.
Availability: Operators need the target release notes, generated deployment bundle, registry access and the applicable schema/upgrade instructions. SDK versions and the separately managed Portal have their own release identities. This page does not grant support status to an archived release or certify unlisted cross-release combinations.
Keep four identities separate
| Identity | What it tells you | What it does not establish |
|---|---|---|
| Product release/tag | Which product revision and release instructions are intended | That a specific host runs its images or has applied its configuration |
| Deployment manifest and bundle reference | Which roles, images and generated files are selected for that environment/features | That the target hosts fetched them or passed acceptance |
| Actual image/configuration identity | What content was delivered and is running | Compatibility with every other service, schema or client |
| Test/acceptance evidence | Which concrete combination and scenario worked | Arbitrary later image tags, different feature sets or untested workloads |
The Portal's release distribution manifest selects deployment registries and Delphi image names. Upstream images, mounted binaries and externally managed services also belong in the actual deployment inventory. Do not treat that distribution list as the complete running-container catalogue or as a test result.
Capture a useful release record
Before and after a change, record:
- Deployment and namespace; product revision/release; release notes and migration instructions.
- Each affected service's image reference, registry digest and running image identity; platform/architecture when relevant.
- Configuration bundle reference and recoverable exact content/version; effective feature profile and required configuration/secret version identifiers, without their values.
- Schema/migration state, independently versioned SDK/client contracts and external dependency versions needed for the scenario.
- The acceptance checks, result and time, plus the previous compatible recovery set.
On a known API host, a bounded identity check is:
docker inspect --format '{{.Name}} {{.Config.Image}} {{.Image}}' voiceai-telapi
This prints the container's reference and image ID, not its environment. A local image ID is not interchangeable with a registry manifest digest. Keep the distribution/registry evidence as well. The normal refresh helper compares running container IDs with local image metadata; that check detects stale local instances but is not a complete provenance or interoperability test.
Tags are not immutable content
Service Compose uses the configured Delphi release tag and upstream references such as postgres:17-alpine, redis:7-alpine, caddy:2-alpine and ubuntu/squid:latest. These names can resolve to different content over time. Record resolved digests when reproducibility matters; do not assume every upstream reference except latest is immutable.
Build inputs such as Asterisk/Kamailio/Janus version declarations describe source intent. Confirm them against the artifact actually built and delivered. An upstream version table and a container's Delphi tag answer different questions.
Decide whether a component can move alone
| Proposed change | Evidence needed before applying it |
|---|---|
| Restart/recreate unchanged component | Recorded image/configuration identity, dependency health and the same intended schema/credentials |
| Apply a documented component patch | Exact patch scope, permitted dependency set, migration/activation order, targeted acceptance and rollback instructions |
| Mix a newer component with older dependencies | Explicit evidence for that combination; otherwise use the approved coordinated release set |
| Roll back after a migration | Confirm old images can use the resulting schema, or use the planned schema/data recovery procedure; merely retagging images is insufficient |
| Change optional modules/topology | Generated manifest and effective flags, additional dependencies/network paths, entitlement and feature-specific verification |
A service-change matrix says which components were rebuilt. It does not certify unchanged components against all new schemas, queue payloads or runtime contracts. Treat the historical release register as a navigation aid to release information, not replacement acceptance evidence.
Recorded release register
This is a retained release register, not a live support feed or an independently verified list of compatible combinations. Its status labels below are the labels recorded when the documentation source was captured. Confirm your approved target, current support agreement and release-specific migration instructions before an upgrade; neither an archive label nor this historical status grants support.
| Release line | Recorded latest patch | Recorded status | Recorded release month |
|---|---|---|---|
| v0.9.17 | v0.9.17-patch2 | Current | September 2026 |
| v0.9.16 | v0.9.16-patch2 | Supported | July 2026 |
| v0.9.15 | v0.9.15-patch4 | Supported | July 2026 |
| v0.9.14 | v0.9.14-patch3 | Supported | June 2026 |
| v0.9.13 | v0.9.13-patch3 | Supported | June 2026 |
| v0.9.12 | v0.9.12-patch1 | Supported | May 2026 |
| v0.9.11 | None recorded | Supported | May 2026 |
| v0.9.10 | v0.9.10-patch1 | Superseded | April 2026 |
The register records 0.9.16-patch2 as the latest patch while its release-note pointer still names patch1. Do not interpret that inconsistency as verified patch2 rollout instructions. Obtain the exact selected release's notes and artifact record. Next is a documentation/source snapshot, not an additional released product line.
Recorded service rebuilds
The retained register says the following services changed image digest relative to the preceding release. It stores only changed/not-changed labels, not the digests or test results, so this table cannot reconstruct an immutable deployment. An omitted component means “not listed as changed”, not “tested against every other component”. Missing patch rows are unknown; do not interpolate them.
| Release | Services recorded as rebuilt |
|---|---|
| v0.9.17-patch2 | TelPro, TelPhi, TelAPI, TelWeb, Tasker, DB migrate, Scaler |
| v0.9.17-patch1 | TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.17 | TelPro, TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.16-patch1 | TelPro, RTPEngine, TelPhi, TelAPI, TelWeb, Scaler, Log-to-span |
| v0.9.16 | TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.15 | TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.14-patch3 | TelPro, RTPEngine, WebRTC (Janus), TelPhi, AudioProc, TelAPI, TelWeb, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.14-patch1 | TelPhi, TelAPI, TelWeb, DB migrate |
| v0.9.14 | TelPro, RTPEngine, WebRTC (Janus), TelSys, TelPhi, AudioProc, TelAPI, TelWeb, Media server, Scaler, Tasker, DB migrate |
| v0.9.13-patch3 | TelAPI, TelWeb, TelPro, TelPhi, Tasker, DB migrate |
| v0.9.13-patch1 | TelPro, TelPhi, TelWeb, TelAPI, DB migrate |
| v0.9.13 | TelPro, TelSys, TelPhi, TelAPI, TelWeb, Scaler, Tasker, DB migrate, Log-to-span |
| v0.9.12-patch1 | TelPhi |
| v0.9.12 | TelPhi, TelAPI, TelWeb, Media server, Scaler, Tasker |
| v0.9.11 | TelPro, TelSys, TelPhi, TelAPI, TelWeb, Media server, Scaler, Tasker |
log-to-span entries describe the historical build register; the selected Compose
sources use that image only in the local development topology. They do not add a
production service requirement. Relay uses the upstream coturn image below; do not
infer a voiceai-turn image from the availability of TURN. The SDK keeps its own
version and release process; these platform rebuild rows are not an SDK support
matrix. See browser integration for the separately
versioned SDK reference and its contract boundaries.
Declared upstream versions
For current release 0.9.17-patch2, these declarations were checked at product source d8697e3d9dddbb158ca66e4499c375575cf9d16b.
These are source declarations/defaults, not a bill of materials extracted from running images. Build arguments, deployment overrides and mutable registry tags can change delivered content. Paths below identify the declarations in the selected product source; record resolved image digests and effective overrides separately. No dependency version here certifies a successful upgrade or mixed-version pair.
| Component / scope | Declared version or image | Declaration location |
|---|---|---|
| Asterisk / TelSys | 22.9.0 | .docker/voiceai-telsys/Dockerfile: ASTERISK_VER; legacy base Dockerfile also declares it |
| Kamailio / TelPro | ghcr.io/kamailio/kamailio:6.1.1-bookworm | .docker/voiceai-telpro/Dockerfile |
| RTPEngine | 26.0 package repository channel | .docker/voiceai-rtpengine/Dockerfile: RTPENGINE_VERSION; package installation is not an exact package revision pin |
| Janus / browser gateway | v1.3.3 Git tag | .docker/voiceai-webrtc/Dockerfile: JANUS_VERSION |
| coturn / relay | coturn/coturn:4.6.2 | .infrastructure/services/telpro/docker-compose.yml |
| PostgreSQL | postgres:17-alpine | .infrastructure/services/database/docker-compose.yaml |
| PgBouncer | edoburu/pgbouncer:v1.25.1-p0 | Database Compose |
| Redis | redis:7-alpine | Database Compose |
| Caddy / Web and Media | caddy:2-alpine | .infrastructure/services/web/docker-compose.yaml and media/docker-compose.yaml |
| Squid | ubuntu/squid:latest | .infrastructure/services/squid/docker-compose.yaml |
| Contrib collector / service and export collectors | otel/opentelemetry-collector-contrib:0.159.0 | API, Database, Ops, Squid, TelPro, Voice and Web Compose; signoz/docker-compose.export-collector.yaml |
| SigNoz application | signoz/signoz:v0.139.0 default | .infrastructure/services/signoz/vars.yaml, init.sh and render-casting.sh; SIGNOZ_VERSION can override |
| SigNoz ingester collector | signoz/signoz-otel-collector:v0.142.0 default | signoz/render-casting.sh; SIGNOZ_OTELCOL_TAG can override independently of the app |
| ClickHouse | clickhouse/clickhouse-server:25.5.6 default | signoz/vars.yaml and render-casting.sh; CLICKHOUSE_IMAGE can override |
| Node.js / application and migration builds | node:24-alpine | .docker/voiceai-{telapi,telweb,telphi,tasker,scaler,db-migrate}/Dockerfile |
| CPU AudioProc | python:3.11-slim | .docker/voiceai-audioproc/Dockerfile |
| GPU AudioProc | nvidia/cuda:12.4.1-runtime-ubuntu22.04 | Same AudioProc Dockerfile; selected device build stage matters |
| Go / media-upload build | golang:1.24-alpine | .docker/voiceai-media-server/Dockerfile; build tool, not the final runtime |
| Alpine / media runtime and selected sidecars | alpine:3.19 | Media-server Dockerfile, TelPro and Voice Compose |
| Debian / TelSys, RTPEngine and Janus bases | debian:bookworm-slim | Their .docker/voiceai-*/Dockerfile files; Kamailio uses its own image above |
Defaults, overrides and mutable references
ECR_REGISTRY and ECR_TAG select the bespoke Delphi images in the generated
service Compose files. Several production declarations fall back to latest;
development has separate dev defaults. A fallback is not a recommended release
selection. Verify the effective generated deployment and preserve its identities.
Squid is not the only mutable reference: major/minor image tags and even
version-looking tags can be replaced, repository channels can gain new packages,
and build stages can resolve different base content. The auxiliary legacy runtime
Dockerfile also references voiceai-base:latest; its existence does not prove it
was built or deployed for your release. Use source declarations to investigate,
then retain the actual build and running identities.
SigNoz's application, ingester collector, contrib export collector and ClickHouse have separate version controls. Do not set the ingester to the application version merely to make them match. Inspect the rendered casting and the effective deployment overrides before applying its upgrade procedure. Logs and telemetry explains the collector roles; service health and refresh covers controlled activation. Neither a successful pull nor a rendered file proves data-path health.
Review the dependency boundaries
| Component set | What can couple its upgrade to other components |
|---|---|
| TelWeb | Database/auth model, role/session rules, API contracts and background notification jobs |
| TelAPI | Database/Redis schema and state, browser SDK/session protocols, callbacks, Voice and provider/media behavior |
| TelPhi + TelSys + optional AudioProc | ARI/media interfaces, provider audio, edge signaling, recording/job contracts; treat the bundle as coordinated unless the patch documents otherwise |
| TelPro signaling/media/gateway | Voice routing/media, generated trunk/TLS policy, Redis state and enabled browser gateway/relay behavior |
| Ops | Migration schema, job payload producers/consumers, cloud operations, backups and notification transport |
| Database/Redis | Every consumer's credentials, TLS, schema/state and recovery compatibility |
| Media/telemetry/proxy | Consumer authentication/trust, data formats, persistent storage, export paths and external connectivity |
For browser clients, retain the SDK's independent version and verify its supported session modes/contracts using the browser integration guide. Do not assign the platform tag to the SDK merely to make a table look aligned.
Apply and accept the selected set
Follow the deployment journey: preserve the recovery point, preview the intended update, perform required migrations/activation in the release's order and verify each affected role. A release workflow finishing distribution is not evidence that the customer installation completed this step.
Use service health plus the applicable end-to-end scenario: sign-in/team access, phone/browser conversation, callback, recording/backup job or feature activation. Store the actual result with the identities above. A failed scoped check is a failed release criterion for that change; do not replace it with an unrelated green build.
If acceptance fails, choose the failed layer before rollback. Configuration recovery separates application snapshots, bundle/secret versions, database recovery and external objects. Re-verify after rollback and retain the failed combination as evidence rather than silently marking it compatible.
Older documentation remains reachable at its established URLs. An archive label describes documentation presentation; it does not itself define product support, customer entitlement or a tested upgrade path.