2026.10.6 — 2026-10-01
Added
Check alert, governance, transfer and lifecycle forms field by field (1545c336)
Alert rules and channels, governance rules, accepted risks, transfers, bulk actions, retention policies, bug reports and request-reply expectations check each field when it is left. A retention quota above its limit is now flagged instead of silently lowered, and a half-typed alert threshold is refused with a message.
Check user, role, token and setting forms field by field (99c5b7bd)
Users, roles, group mappings, API keys and operational settings check each field when it is left, and a refusal from the server (such as a password policy) appears on its field. A failed two-factor reset or key mint is shown in the form with its cause instead of a toast.
Dialogs that show their result, and forms checked field by field (9e78996a)
Deleting, pausing and closing (queues, connections, consumers, diverts) happen in one dialog that turns into the result, with focus returned to the button that opened it. Creating and editing queues, sending messages and moving them check each field when it is left; a send rejects duplicate property names. Every red banner is now a notice or a failure that names its next step, and a dead-lettered message's queue name keeps its distinguishing end visible.
Check sign-in, second-factor and password forms field by field (e2726df0)
Sign-in, step-up, second-factor enrolment and password change check each field when it is left, place a refusal from the server on the field it concerns, and focus the first problem when a submit is refused. A wrong password reads "Invalid username or password. Check both and try again."
Confirm plugin actions with the reason a button is unavailable (66e8f816)
A plugin action that needs you to confirm who you are first says so beside its disabled confirm button instead of refusing after the press. Installer, trusted-key and trust dialogs check each field when it is left.
Check configuration editors field by field (5267eb64)
Address, address-setting, divert, bridge, security-setting and transformer editors check each field when it is left and put each queue's error on its own row. Enter saves an editor. The local notice and key-value list copies are replaced by the shared ones.
Show which URLs to enter for the setup being registered (c3e8a487)
Registering a cluster starts with what is being connected: a single broker, a primary and backup, or a cluster. The choice says which management URLs to enter. The example diagrams, which drew nothing and did nothing when chosen, are replaced by a preview area that the discovered topology fills after Check connection. Placeholders that looked like typed values are gone. Cluster forms (registration, environments, management URLs and credentials) check each field when it is left.
Notices, aligned fields and dialogs that show their result (6f7fda8c)
Forms keep one line of room under every labelled field, so a validation message no longer moves the fields below it, and fields set side by side stay aligned at the top whatever their labels hold. Dialog and drawer titles read as headings. Settings sections are spaced further apart.
A confirmation dialog now shows its outcome in place of its controls, and a confirm button that cannot be pressed yet says why. Failures name their next step, and a broker's own message follows the cause. Notices share one look and tone across the console. Long identifiers are read out whole by screen readers. The sign-in page no longer asks for the feature manifest before anyone has signed in.
The plugin SDK also exports GateScope, for gating a control on an installation-wide capability.
Rebuild cluster registration, plugins, local accounts and sign-in on the shared parts (e2ae0cbd)
The plugin inventory backs off while it cannot load instead of asking every second.
Rebuild security, API tokens, settings and the admin, account and home pages on the shared parts (57bb2731)
Revoking a key is announced, a revoke error no longer follows into the next key's dialog, and the grantable permissions update once your own grants load.
Rebuild alerting, governance and setup review on the shared parts (6866b0a0)
Rule actions are gated on the permission and state their outcome; a list that failed to load says so instead of claiming there is nothing; the governance rules page no longer runs four times wider than the window.
Rebuild flow, request-reply, consumer health and data lifecycle on the shared parts (6cff96b7)
Request-reply expectations have named switches, refuse a second toggle while one is in flight, confirm before removal, are gated on the permission, and keep the warning threshold valid when the field is cleared.
Rebuild transfers, bulk runs, metrics, diagnostics and MCP on the shared parts (3a619023)
Rebuild broker configuration on the shared parts (a273c5e5)
Declared items, the apply result, the configuration diff, history and the security-setting editor use the shared tables, sections and states; the routing canvas follows the colour scheme and no longer reflows for narrow windows.
Rebuild messages, the dead-letter view, events and audit on the shared parts (70c8dfdf)
Message detail reads as a list of terms, the dead-letter view is a table with a row menu, sending validates each field as you leave it, and move, retry, delete, expire and purge confirm and announce their outcome, including a partial one. Send and purge are offered disabled with the reason when the permission is missing.
Rebuild queues, resources and routing on the shared parts (247508cd)
Each view has one heading, per-node breakdowns are tables, and deleting a queue, closing a connection or consumers, and removing a divert confirm by typing the name, show the per-node result, and return focus to the trigger.
Fixed
Use native elements for statuses, groups and regions (d4639f66)
Status messages are output elements, groups of controls are fieldsets and named scroll areas are sections, instead of generic elements with an ARIA role, so assistive technology that ignores roles still reads them the same way.
Write bucket sizes in words and keep the window note on one line (5dd390df)
The metrics window note read durations as ISO codes ("Each point is a PT5M bucket"); it now reads "Each point is a 5m bucket", and the note for an adjusted window fits on one line, so the charts no longer move down when it appears. The header's freshness word keeps its width when Polling becomes Live.
Keep long lists on the account page from pushing it down (84bcbccf)
A long list of API keys or sessions now scrolls inside its section, at about eight rows, instead of growing the Account page as it loads. The scrolling list is a named region that takes keyboard focus. Static tables honour a row limit for this, as the grid already did.
Start no second-factor enrolment for an account that need not enrol (54049656)
Opening the enrolment page with a second factor already set up started an authenticator enrolment, which the server refused, before the page moved on to the account page. The form now opens only once the account is known to need it, and the page says it is checking until then.
Stop the header, breadcrumb and table toolbar moving as a page loads (1343058b)
Pages no longer jump while they load:
- the header stays on one line at any width or zoom, so the freshness word changing from Polling to Live no longer reflows it;
- the breadcrumb holds its line until the cluster's name is known, instead of sliding when a placeholder name is replaced;
- a table's toolbar holds the pager's height before the row count arrives, and the count appears without moving the Columns button. The smallest buttons are now 24px tall, the target size WCAG 2.5.8 asks for.
Size the columns of an empty or hidden table (23a236fe)
A table with no rows, or one first drawn inside a hidden tab, gave its number, time and status columns no width: they collapsed and the row overflowed its frame by their padding, so the request-reply grids scrolled sideways at every window size. Headers are now measured even with no rows, a table is measured again when its first rows arrive and when it is first shown, and a read taken while it was hidden never counts.
Explain an address that leads nowhere (b941fbd0)
An address no page matches, such as /settings without a cluster, showed only the words "Not Found". It now names the address, says that a cluster's pages (Settings included) open from a cluster, and links back to the start page.