v0.9.0
v0.9.0
Strict OpenTelemetry entity-events (1.58.0) alignment and read-surface security.
0.9.0 promotes the 0.9.0-beta line to stable and adds an out-of-order relation fix and a
Go toolchain security bump. Every change is additive and backward compatible — existing
producers, consumers, and deployments keep working unchanged, and the zero-config single
binary is untouched. No wire-contract break, no data migration. Upgrade in place.
Strict spec alignment (entity-events 1.58.0)
- Full AnyValue in
entity.description(#259). Descriptions carrying arrays and
nested maps are ingested faithfully end to end (ingest → store → projection →
GraphQL/MCP); composite values render as compact JSON taggedarray/kvlist.
Identity stays scalar by contract (ADR 0018). ADR 0004 amended. entity.delete.reason(#260). A producer's motive on a delete (open enum,
never validated against a closed set) is captured, persisted, and exposed on MCP
recent_changes/graph_diffand GraphQLChangeEvent.deleteReason.entity.report.interval == 0(or absent) = no cadence (#261), locked by a
conformance test: removed only by an explicitentity.delete, never by the sweep.
Read-surface security
- Decoupled ingest and read authentication (#262). New opt-in
ingest_mtls_only
(TOISE_INGEST_MTLS_ONLY, requirestls_client_ca_file): OTLP ingest is
authenticated by mutual TLS alone — no bearer — while GraphQL/MCP keep requiring their
per-client scoped tokens or OIDC. Default off. ADR 0028 amended.
Fixed
- Relation buffer no longer drops a parked edge whose target reappears periodically
(#269). An out-of-order edge is held for at least one source re-emit cycle, so the
endpoint's next heartbeat attaches it; the hold auto-scales from
entity.report.interval.
Security
- Go toolchain bumped to 1.26.4 (#271), clearing three reachable standard-library
advisories (GO-2026-5038mime, GO-2026-5037crypto/x509, and one further). No
application code changed.
Producer SDK
pkg/emit/v0.3.0(unchanged since the beta):Entity.RichAttributesemits the full
AnyValue;Entity.DeleteReasonemitsentity.delete.reason. Scalar-only producers are
byte-for-byte unchanged.
Install
# Binary (Linux amd64 shown — also darwin/linux × amd64/arm64)
curl -fsSLO https://github.com/toise-dev/toise/releases/download/v0.9.0/toise_v0.9.0_linux_amd64.tar.gz
tar xzf toise_v0.9.0_linux_amd64.tar.gz
# From source
go install github.com/toise-dev/toise/cmd/toise-server@v0.9.0
# Container (multi-arch image on GHCR)
docker pull ghcr.io/toise-dev/toise:v0.9.0
docker run --rm -p 8080:8080 -p 4317:4317 ghcr.io/toise-dev/toise:v0.9.0Each tarball ships a .sha256 — verify before installing.
See the 0.8 → 0.9 migration guide
and the changelog.