Skip to content

v0.9.0

Choose a tag to compare

@MatthieuNoirbusson MatthieuNoirbusson released this 01 Jul 08:43
28ffd10

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 tagged array / 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_diff and GraphQL ChangeEvent.deleteReason.
  • entity.report.interval == 0 (or absent) = no cadence (#261), locked by a
    conformance test: removed only by an explicit entity.delete, never by the sweep.

Read-surface security

  • Decoupled ingest and read authentication (#262). New opt-in ingest_mtls_only
    (TOISE_INGEST_MTLS_ONLY, requires tls_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-5038 mime, GO-2026-5037 crypto/x509, and one further). No
    application code changed.

Producer SDK

  • pkg/emit/v0.3.0 (unchanged since the beta): Entity.RichAttributes emits the full
    AnyValue; Entity.DeleteReason emits entity.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.0

Each tarball ships a .sha256 — verify before installing.

See the 0.8 → 0.9 migration guide
and the changelog.