0.6.0¶
Released 2026-06-12.
The corrective release. A second full audit ran against 0.5.0 the day it shipped; v0.6.0 closes its entire P0 lot in one pass. Every change here makes an existing promise true: the SDK tells you when records are rejected, the conformance kit promises exactly what it checks, backups cannot back up nothing, reads do not trip over maintenance, and the liveness memento protects default deployments out of the box.
Not a wire-contract break, no data migration. The sharper behaviors (one MCP argument rename, new defaults) are in the 0.5 → 0.6 migration guide.
Changed¶
- Standard Go versioning. This release is tagged
v0.6.0, and the SDK is its own Go module released independently aspkg/emit/vX.Y.Z— sogo get github.com/toise-dev/toise/pkg/emit@v0.1.0resolves to a real version, and a producer's module graph shrinks to the OTel pdata types and gRPC (none of the server's storage or query stack). Import path unchanged (ADR 0027). - MCP
get_entitytakesentity_id(wasid), aligning it with every other entity-taking tool;recent_changesdefaults itswindowto the last hour instead of requiring it. - Snapshots on by default (
snapshot_interval: 5m), plus a final snapshot at graceful shutdown and a one-interval boot grace after downtime — producer liveness survives restarts in a default deployment, without a post-downtime delete storm. toise-server checkpointis strictly read-only: it refuses a missing data dir, a legacy layout, or an empty dir instead of silently minting an empty store and "backing it up";--confighonors the server's YAML.- The conformance kit's claim is exact: passing
Checkmeans never rejected per record for shape reasons; it now also catches empty attribute keys and warns (advisory) whenservice.instance.idis missing.
Fixed¶
- The SDK surfaces partial success:
State/Deletereturn a typedemit.PartialError(count + first server reason) when records are rejected, instead of a silentnil. - History reads no longer fail during maintenance: queries that overlapped
heartbeat coalescing or retention pruning could error with
pebble: not found; dangling index entries are now skipped. - An unknown embedded
relationship.typeis rejected per record instead of wedging the producer's whole export in a retry loop. - Pre-1970 timestamps are rejected on every event-time input (MCP and GraphQL) instead of answering with the current graph dressed up as ancient history.
Added¶
pkg/emit/wire— the single in-repo spelling of the entity-events wire vocabulary (stdlib-only), imported by the SDK, the conformance kit and Toise's own ingest, with end-to-end tests pinning the two constants whose drift would have been silent (entity.report.interval,service.instance.id).