Release
Announcing Toise 0.15.0 — answers that explain themselves
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
- The twelve MCP tools spell their shared fields identically, and each tool that can truncate says so.
-
Two conventions are now stated once in the stability policy: absence is an
empty string rather than null for scalars, and
countis scoped to its object whiletotalis the population before the limit. - The MCP golden pins the shape of answers, not their wording, so field descriptions can keep improving after 1.0.
Smaller improvements
- The debug UI names its tenant on every page and, when tenant selection is client-controlled, offers a switcher. Under claim-derived tenancy the list of tenants stays hidden, by design.
- The HA guide states what replicas agree on, and what they legitimately may not agree on at a given instant.
- The ingestion guide documents the 15-minute resurrection window, which has shipped since 0.7.0.
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.