Bug bash 5: the URL, the fleet loop, and an empty card

A link to a hub page no longer reloads onto the last machine; a link from a hub-only page to
a machine's page arrives at that page; a page being left no longer asks about the next page's
selection; the hub holds its machines to the rate it is itself running.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Mitchell-Johnson
2026-09-21 23:26:36 -07:00
co-authored by Claude Opus 5
parent a7b8319974
commit 3c7e46104c
9 changed files with 84 additions and 27 deletions
+48
View File
@@ -544,3 +544,51 @@ drawn over the page behind.
Firefox: nothing leaves its card, no number is broken across lines, and the fallback
scrollbar is never reached. The same measurement was run over every other page's cards
and boxes — Dashboard, Top, Docker, Alerts, Machines and the rest — and found nothing.
# Bug bash 5 — 2026-09-21: navigation, and the fleet setting nobody had set
A sweep of the whole console after a week of changes, not of any one page: every page on every
machine at four widths in **Chromium and Firefox**, then the everyday flows, then the URL.
Measured rather than looked at — a heading against its neighbour and its own text, a box
against what it holds, a request against the page that should have made it.
## Bugs — all ✅ fixed and verified by the script that found them
1. ✅ **A link to a page of the hub reloaded onto whichever machine you last had open.** The hub
is `null` internally, so `parseHash()?.machine ?? sessionStorage…` read straight past it to
the remembered machine: open `#/hub/docker/stack:gitea` after looking at `grid`, reload, and
you were on `#/grid/docker`. The URL wins when it has an opinion, and "hub" is an opinion;
the remembered machine is for a bare address only. Every link shape now survives a reload,
and a bare address still lands where you left off.
2. ✅ **From Settings, Machines or Alerts, a link to a machine's page arrived at its Dashboard.**
Those three pages only exist on the hub, so moving to a machine bounces off them — but the
bounce was decided from inside the machine change, which read the page being *left*, and
landed after the URL's own page had been set. It is judged now once the machine and the page
have both settled. `#/hub/settings` → `#/grid/disks` arrives at Disks; `#/grid/settings`
still falls back to that machine's Dashboard.
3. ✅ **A page being navigated away from briefly adopted the next page's selection**, and asked
about it: leaving `#/grid/services/ssh.service` for `#/hub/docker/stack:gitea`, Services —
still mounted for a moment — opened a log socket for a *service* called `stack:gitea`, on
`grid`. Firefox says so in the console; Chromium swallows it. A page now reads the URL's
selection only while the URL still points at that page. Checked over every hop between the
five pages that keep a selection in the URL, in both browsers.
4. ✅ **The hub only held its machines to a sampling rate if somebody had been into Settings.**
The re-assert loop read the rate out of the saved UI prefs, which are written on change and
not before — so on a hub where the rate had never been touched, a node left on a different
rate was never pulled back. It compares against what the hub itself is running, which always
exists. Verified by setting a node behind the hub's back: corrected within seconds.
5. ✅ **"Everything is up to date." sat in a 20px sliver of a card**, flush to its border, where
the package list it shares the card with is meant to be.
## Checked and fine
Machine titles on every page and against an offline or never-reached machine; the colour a
machine wears stays with the name it was added under, not its hostname. Files: create, open,
edit, save, rename, delete. Services with its unit and log, cron jobs, containers and stacks,
alert rules edited and put back, the terminal, the widget gallery. Login, a wrong password, a
session cleared under an open page, logging back in onto the page you were on, and logout
leaving nothing behind. The sampler, window and UI prefs endpoints under nonsense and hostile
input, and a read-only token refused by all of them. The public demo page and installer. The
Top tab on all four machines — including `grid`'s sixteen cores and thirteen filesystems, which
scroll inside their boxes — its rate control, its filter, and three skins repainting it.
`hamtv`'s eMMC really is called `hB8aP>`; that is what the device reports.