Heron v0.7.2
[0.7.2] — 2026-08-15
Added
- sglake (sglog) storage backend.
[storage] backend = "sglake"runs the
whole console against a Splunk-compatible log platform, alongside DuckDB and
ClickHouse — writes over the HTTP Event Collector, reads in SPL, all thirty
StorageBackendmethods. Unlike the SQL backends, stored request and response
bodies are full-text searchable (search index=heron_bodies "SELECT * FROM users"). Retention is pushed as per-index TTLs rather thanDELETE, since
the store is append-only.heron sglake-propsprints the index-time
extraction stanzas that keep aggregates on the columnar path; they are
generated from the event structs themselves, so they cannot drift from the
schema. See docs/design/10-sglake.md, which also
documents the known divergences — proxy pairing does not annotate traces on an
append-only store.
Fixed
- Pagination could return the same row on two pages and skip another. Every
paginated list ordered by a non-unique key (request_timemost often) with no
tie-break, andLIMIT/OFFSETissues one query per page, so the engine was
free to order tied rows differently between them. Walking 26 spans that shared
a timestamp five at a time returned 18 distinct rows. All paginated queries in
the DuckDB and ClickHouse backends now end their sort with the row id. - DuckDB truncated
duration_mson HTTP exchanges to whole milliseconds, so
every sub-millisecond exchange showed0.0. ClickHouse already computed it
from microseconds. /api/metrics/timeseriescould be asked for an unbounded number of
buckets — a 7-day window at 10s granularity materialises 60,480 points per
series. It now refuses above 20,000 and names a granularity that fits.
Changed
- The agent-trace panel switches to lazy per-call body loading above 50 calls
rather than 200, measured against the real cost of answering with bodies.
What's Changed
- docs(readme): swap hero GIF to the live dashboard view by @vaderyang in #178
- feat(storage): sglake backend — full-text searchable bodies, and five defects it exposed by @vaderyang in #191
- ci(prod): production tracks releases, gated on a read-path smoke by @vaderyang in #192
Full Changelog: v0.7.1...v0.7.2