Skip to content

Network map key, heartbeat Retry-After, skipped-release tray row, and two narrow-topbar fixes - #1933

Merged
BarganConstantin merged 5 commits into
developmentfrom
fix/small-followups
Oct 4, 2026
Merged

BarganConstantin merged 5 commits into
developmentfrom
fix/small-followups

Conversation

@BarganConstantin

Copy link
Copy Markdown
Owner

What changes

  • Network map key. The key under the map listed "over Tailscale" on every network, including one with no deck on the tailnet and one where every deck is on it, where no slice is drawn. The key now gets told whether the slice was drawn, the same way the panel's note already is. A slice drawn without its own name (no stretch of its edge was clear) keeps its key entry.
  • Heartbeat and Retry-After. A 429 or 503 with a Retry-After held back the check-ins, but the ping still went out on every beat, about every ten minutes. The wait the API asks for is now kept separate from the check-ins' own backoff. It holds the ping as well, with the same one-day cap, whichever request it came back on.
  • Desktop tray, skipped release. After a macOS swap fails, that release is not staged again until a newer one is out. The tray still read "Update failed — try again", but a retry gets refused the same way every time. The updater now marks this failure as a skipped release and records its version. The row reads "Skipped vX — check for the next release", and clicking it still checks for updates.
  • Selection ribbon below 640px. From 481px all nine controls are back on the bar, and the selected agent's ribbon came back with them. Even at its smallest (state, name cut to nothing, ×) it needs 503px beside the waiting pill. The readout gave way first, so the pill lost up to 5px of its left edge through 499px. With a running agent's cost it lost up to 15px through 520px, and the cost and × ran over the Session list button. Below 640px the detail sheet already names the agent, so the ribbon now leaves the bar at that breakpoint instead of at the ⋯ fold.
  • Topbar ⋯ menu when the window grows. Above 480px the sheet hides the ⋯. A menu left open across that line was placed against a zero-sized box and jumped to the window's top-left corner, still open and holding focus. An AnchoredPopover whose anchor stops being drawn now closes, as one whose anchor is gone already did. The ⋯ hands focus to the bar button that matches the focused menu item, now shown again.

Verification

  • npm run typecheck: clean.
  • Full suite before the rebase (--maxWorkers=3 --minWorkers=1): 884 files, 11560 tests passed, exit 0. After rebasing onto development (which brought in Close a dialog only on a press of its scrim #1932), the touched and neighbouring tests ran again and passed: 134 files, 1823 tests.
  • New regression tests. Each one failed on the code before its fix:
    • network-map-legend-slice.test.ts: the key had four entries on a network with no tailnet deck, and on one with only tailnet decks.
    • reports-ping-retry-after.test.ts: uses a stubbed fetch and fake timers. Before the fix, a ping answered 429 with Retry-After: 3600 was sent on every beat (5 pings in the hour). The same happened for a dated 503 and for a week-long header past the one-day cap, and a check-in's Retry-After did not hold the ping either.
    • desktop-update-skipped-release.test.ts: uses fakes for the macOS check and staging. Before the fix the state had no kind and the row read "Update failed — try again".
    • topbar-ribbon-room.test.ts: cascade arithmetic over the sheet's own numbers. Before the fix, the bar was short at 481 to 502px with the ribbon drawn (481px needs 503).
    • topbar-more-widen.test.ts: AnchoredPopover and TopbarMore drawn on fake-react. Before the fix, a resize with the anchor hidden moved the menu from 45px to 8px (the corner) and never closed it.
  • Browser, on an isolated deck (own HOME/XDG/CLAUDE_CONFIG_DIR, AGENTS_DECK_NO_*=1, LAN state faked with page.route):
    • Waiting pill, measured from 470 to 700px with an agent selected and the sheet closed. Before the fix it was clipped 4.9px at 481, 1.9px at 490 and 0.3px at 495. With a real running agent's cost in the ribbon it was clipped 15.1px at 481 and 1.9px at 520, and the × was drawn 16 to 100px into the controls. After the fix nothing is clipped at any width measured, and the ribbon is back from 641px.
    • ⋯ menu, opened at 420px by keyboard and by pointer, then the window widened to 700px. Before the fix the menu sat at (8, 8) with aria-expanded still true. After the fix it closes, and focus lands on the matching button: "Browser watch" from that item, "Open usage history" from Usage history. Narrowed again, the ⋯ opens in its usual place.
    • Network map at 1440x900. An office network with no tailnet deck and an all-tailnet network both show three key entries. A mixed network shows the slice, its name and the "over Tailscale" entry.
  • Electron and the updater were never started, and fetch was stubbed in every reports test.

The key under the network map listed "over Tailscale" on every network, including one with no deck on the tailnet and one where every deck is on it, where no slice is drawn. It is now told whether the slice was drawn, as the panel's note already is, and keeps the entry for a slice drawn without its name.
A 429 or 503 with a Retry-After held back the check-ins, but the ping still went on every beat, about every ten minutes. The wait the API asks for is now kept apart from the check-ins' own backoff and holds the ping as well, with the same one-day cap, whichever request it came back on.
After a macOS swap failed, that release is not staged again until a newer one is out, but the tray row read "Update failed — try again" and invited a retry that is refused the same way every time. The updater now marks that failure as a skipped release with its version, and the row reads "Skipped vX — check for the next release"; clicking it still checks.
From 481px all nine controls are back on the bar, and a selected agent's ribbon came back with them where even its floor does not fit: the readout gave first, so the waiting pill lost up to 5px of its left edge to 499px, and up to 15px to 520px with a running agent's cost, which ran on over the Session list button. Below 640px the detail sheet already names the agent, so the ribbon now leaves at that breakpoint instead of the ⋯ fold's.
The sheet hides the ⋯ above a phone's width, and a menu open across that line was placed against a box of zeros: it went to the window's top-left corner, still open and holding focus. A popover whose anchor stops being drawn now closes, as one whose anchor is gone already did, and the ⋯ hands focus to the button its focused item stands for, which the bar draws again.
@BarganConstantin
BarganConstantin merged commit 482ad14 into development Oct 4, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant