2026.09.10
Pre-releaseAdded
-
Make refresh, pause and the metric charts tell the truth (b25868e7)
The shell reported freshness, but three of its claims were wrong, and the
metrics page was wrong in a way a screenshot hides.Refresh now means your refresh. The control's busy state came from
cache-wideisFetching, so it spun on every background poll — a spinner that
never stops says nothing. It now tracks only the promise the operator started,
floored at 350ms so a fast refetch reads as an acknowledgement rather than a
flicker, and repeated activation joins the running refetch instead of aborting
and restarting it (cancelRefetch: false).Pause now holds. It stopped intervals but not mounts, so pausing and then
navigating silently resumed.refetchOnMountgoes through the same seam, gated
so a query that has never resolved still fetches once — pausing a screen to stop
it moving is not asking for an empty one. The paused control also renders
differently, rather than differing only inaria-pressed.Metric charts carry time. The x-axis was array position, so an omitted
bucket rendered flush against its neighbour — themetricscapability requires a
cold subject to show a gap, and it could not. The axis is now a numeric time
scale over the requested window. The live window was also frozen at page-open by
auseMemothat never re-ran; it now advances, quantized to the bucket width so
the query key changes once per bucket rather than once per second. A failed read
rendered as "No samples yet" — an absence presented as a fact — and now states
the failure.The dashboard around them is rebuilt: current depth, added/s, acked/s and
consumers as stat tiles that say "Not sampled" rather than showing zero; each
chart a titled panel with its unit; a table view of the window; and?subject=
to scope the whole page to one queue, linked from the queue drawer.Bounded views. Requests, events, audit and DLQ rendered every row they were
given. They page now, through one shared pager, with events and audit moved onto
the virtualised grid. Above 24 nodes the topology canvas collapses each pair to
one node, drops edge labels, renders only what is visible, and says that detail
has been reduced.Two fixes found while shooting the screenshots. The command palette mounts on
every route and asked for/clusters//queuesoutside a cluster — a 400, and one
errored observed query put the whole shell into its offline state, so every
cluster-less screen claimed Studio had lost the brokers. And the consumer chart's
y-axis rounded fractional ticks to integers, printing "0" five times beside bars
of visibly different heights.Colour. The latency panel used the reserved warning and danger colours as
series colours; p50/p95/p99 are now a validated sequential blue ramp. The depth
chart's two neutral series failed the normal-vision separation floor and are now
one hue distinguished by mark shape. Both checked with the palette validator in
both schemes rather than by eye.Release. The Docker Hub description step has failed with
Forbiddenon every
release, hidden bycontinue-on-error. It now points at a realdocs/dockerhub.md,
completes relative URLs so the screenshots resolve, and fails loudly. The
credential must be a PAT with read, write and delete scope — the description
endpoint rejects a repo-scoped token. It is the last step of the release job, so
a failure there cannot burn a version.Screenshots are recaptured from a four-node cluster carrying real traffic:
just demobrings up two live/backup pairs, registers them through Studio's own
API and drives messages with the broker image's own client — nothing is written
tometric_sampleby hand — andjust shotscaptures the four README images.ADR-0055 records the time axis and the quantized window. ADR-0056 records bounded
views and topology level of detail.