feat(admin): surface a waiting update on Overview, put the share-expiry default next to the maximum it defers to #331

Merged
Cordy merged 4 commits from feat/cluster-d into main 2026-08-27 18:52:50 +00:00
Owner

Deferred-items cluster D (#311 items 7 and 10).

Item 7 — Overview attention strip

Overview is where an admin looks to see whether the instance is fine. Until now the one thing that is not fine — a waiting update — was only discoverable by navigating to the Updates topic. The strip sits above the meters because it is the only thing on the page that asks you to act rather than reporting a fact.

Two implementation choices worth recording:

  • It does not block the rest of Overview. The update check is a network round trip and nothing below it depends on the answer, so a placeholder div is appended immediately and filled when the response lands.
  • The CTA clicks the rail button rather than calling the render function. document.querySelector('#adminrail [data-topic="updates"]').click() reuses the exact path a user click takes, so the rail's active state cannot drift out of sync with what's on screen. The splice verifies data-topic actually exists on the rail first — otherwise this would ship as a silently dead button.

It renders only when the check is enabled, an update is genuinely available, and a version string came back. A disabled or failing check shows nothing here; the Updates topic remains the place that explains why.

Item 10 — this was mostly already done

The deferred note said default share expiry "stays in Basic settings". That was stale: SET_SLOTS has mapped set-f-expiry to adm-sharing-policy since slice B, so it already lives in Sharing. Rather than re-doing a move that had happened, here's what was actually still wrong:

  • The default and the maximum were separated by the upload toggle. The default's own description reads "up to the maximum below" — which pointed past an unrelated control. Reordered so the two expiry settings are adjacent and the sentence refers to the thing directly beneath it.
  • Basic still advertised a setting it no longer contains ("Instance name and default share expiry"). Now "How this instance identifies itself."

No pointer panel left behind in Basic, contrary to the mockup. A pointer exists to help people who learned the old location, and Cairn has no users yet who could have — it would be shipping a signpost to an address nobody has been to. Worth revisiting after the beta if anyone actually goes looking.

Gate: node --check on every script block, go vet ./..., go test ./... (webcheck guard included), go build ./cmd/cairnd. All three new i18n keys populated in all four languages.

Deferred-items cluster D (#311 items 7 and 10). ## Item 7 — Overview attention strip Overview is where an admin looks to see whether the instance is fine. Until now the one thing that is *not* fine — a waiting update — was only discoverable by navigating to the Updates topic. The strip sits above the meters because it is the only thing on the page that asks you to act rather than reporting a fact. Two implementation choices worth recording: - **It does not block the rest of Overview.** The update check is a network round trip and nothing below it depends on the answer, so a placeholder div is appended immediately and filled when the response lands. - **The CTA clicks the rail button rather than calling the render function.** `document.querySelector('#adminrail [data-topic="updates"]').click()` reuses the exact path a user click takes, so the rail's active state cannot drift out of sync with what's on screen. The splice verifies `data-topic` actually exists on the rail first — otherwise this would ship as a silently dead button. It renders only when the check is enabled, an update is genuinely available, and a version string came back. A disabled or failing check shows nothing here; the Updates topic remains the place that explains why. ## Item 10 — this was mostly already done The deferred note said default share expiry "stays in Basic settings". That was stale: `SET_SLOTS` has mapped `set-f-expiry` to `adm-sharing-policy` since slice B, so it already lives in Sharing. Rather than re-doing a move that had happened, here's what was actually still wrong: - **The default and the maximum were separated by the upload toggle.** The default's own description reads "up to the maximum below" — which pointed past an unrelated control. Reordered so the two expiry settings are adjacent and the sentence refers to the thing directly beneath it. - **Basic still advertised a setting it no longer contains** ("Instance name and default share expiry"). Now "How this instance identifies itself." **No pointer panel left behind in Basic**, contrary to the mockup. A pointer exists to help people who learned the old location, and Cairn has no users yet who could have — it would be shipping a signpost to an address nobody has been to. Worth revisiting after the beta if anyone actually goes looking. Gate: `node --check` on every script block, `go vet ./...`, `go test ./...` (webcheck guard included), `go build ./cmd/cairnd`. All three new i18n keys populated in all four languages.
Cordy merged commit 0df77e3a8f into main 2026-08-27 18:52:50 +00:00
Cordy deleted branch feat/cluster-d 2026-08-27 18:52:51 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#331
No description provided.