Release

Announcing Toise 0.15.0 — answers that explain themselves

Released 2026-08-20 · written up 2026-09-30

Watching AI agents work through real infrastructure incidents taught us something useful: the graph already held the answers, but the guidance for reading them was not reaching the agents. 0.15.0 improves the reading, not the recording. Additive only, with one small behaviour change on GraphQL, described below.

Guidance delivered with the connection

The MCP instructions channel, sent to every client at initialisation, was empty. Resources and prompts only help an agent that goes looking for them. It now carries what changes an answer: start from describe_schema, bound an incident window with graph_diff, read a disappearance for what it says, remember that ids are local to a replica, and treat absence as something other than proof.

Disappearances, in plain language

Every delete_source on the change feed now comes with a sentence in a new disappearance field. Each sentence also says what the value does not mean: none of producer, liveness_expiry or cascade says that an operator removed anything. A bare code next to a field that sounds like a cause is easy to over-read; the sentence prevents that.

Change windows that say what they cover

recent_changes now accepts from and to, the shape graph_diff already had, so a past incident can be bounded directly. Every answer names the window it read. When the limit truncates, a covered field says which slice came back, how many older changes were left out, and how to reach them.

Producers: host-local endpoints made easy

DependsOnLocalEndpoint in pkg/emit v0.10.0 builds the four-key identity of a host-local network.endpoint. It classifies the address itself: exactly the four host-local ranges gain the observing host's id, everything else uses the three-key form. It also applies the frozen canonicalisation rules, so two spellings of one IPv6 peer derive one identity.

The 1.0 freeze audit, continued

Smaller improvements

Upgrading

No wire-contract break and no data migration. One behaviour change: GraphQL entityHistory and recentChanges now exclude heartbeats by default, matching MCP. A client that relied on seeing them passes includeHeartbeats: true.


Get it

go install github.com/toise-dev/toise/cmd/toise-server@v0.15.0

Binaries for linux and darwin (amd64 / arm64) are on the release, each with a checksum, and the container image is on GHCR. See the 0.15.0 docs and the changelog. Producers get this release's SDK with pkg/emit/v0.10.0.