feat(cec): the access list owns live state; Forget also disconnects#44
Merged
Conversation
- Fold the Connected banner into "Who can connect to your computer": each technician row carries a status dot above Forget (connected / connecting / not connected) and, while a session is active, a green "Viewing your screen" / "Controlling your screen" chip that pulses gently next to the grant countdown. A session still in "requested" no longer reads as connected (the old banner said "connected" while the approval prompt was still up), and a live session whose grant event hasn't landed yet still gets a row - the signal can't vanish. - Forget is the one kill-switch: it ends any live session with that technician, then revokes and drops the node. The separate Disconnect button (and the banner) are gone. - The chat door next to the name is a real button that says "Chat", keeping the unread badge. - The access list's footer paragraph now lives behind a ? next to the title: tooltip on hover, tap to pin open. - The KVM & Claiming card moves with the moment: bottom-left on the quiet front door; bottom-right while the hand is up, a session is live, or grants stand; back left once everything clears and those sections hide themselves. - The Board row shows the node's raw board field only, no product fallback (paired with the AllMyStuff collector change). - Copy pass: emdashes removed from every user-visible string (UI, toasts, CLI help), and the contact card's explanations shortened with the detail moved into tooltips. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYdqmManehKSKxwzcfeeU4
A fleetless customer never saw a plugged-in claimable KVM unless they first made a fleet or opened the AllMyStuff app — the KVM was in the node's snapshot, but the card's reachability cross-check culled it. Root cause: a claimable is genuinely `active` on the full-mesh local-claim network (the daemon auto-dials discovered peers), but it reads `sighted`/`handshaking` for the first second or two while that link is dialing. Our `reachable` set was a single point-in-time active/shelved check taken at bring-up, which races that dial-up and drops the KVM — and nothing re-sampled it, so it stayed hidden. The AllMyStuff app shows the same KVM because it keeps a 45s grace on "recently live" and re-polls, riding over the dial-up and routine ICE churn. Mirror that here, keeping active/shelved as the base status (loosening it to "any non-terminal status" would resurrect the old bug where an offline claimable lingers forever from the sticky presence advert): - Add a 45s reachability grace (`lastReachableAt` + `REACHABLE_GRACE_MS`) seeded from active/shelved sightings across every joined network; an explicit offline/error clears it at once, so a powered-off KVM still drops within one refresh. - Sample reachability across the dial-up window at bring-up (fire the same short refresh burst a claim/attach uses) instead of once, so the just-joined local-claim link is caught the moment it goes active. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYdqmManehKSKxwzcfeeU4
Bump the AllMyStuff pin to pick up the CEC-side changes that landed for this update pass: the raw Board field in the inventory collector and the hand-raise console/Site buttons in the AllMyStuff GUI. - `.allmystuff-rev` v0.2.44 -> v0.2.45 (the rev build.rs fetches the `allmystuff-serve` node binary by). - `gui/src-tauri/Cargo.toml`: the three AllMyStuff git deps (allmystuff-node, -cec-protocol, -cec-consent) tag v0.2.44 -> v0.2.45. gui/src-tauri/Cargo.lock is intentionally left as-is: it can only be regenerated once the v0.2.45 tag is published (the git deps don't resolve until then), and the lock is already carried behind the toml in this repo because CI never builds the Tauri backend (its AllMyStuff git deps resolve only after the sibling branch ships). The lock refreshes on the next `pnpm tauri build` / release once the tag exists. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YYdqmManehKSKxwzcfeeU4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
One place for connection truth. The separate "‹Tech› is connected — viewing your screen" banner (with its own Disconnect button) is gone. "Who can connect to your computer" now carries everything:
prefers-reduced-motiondisables the animation).Forget = disconnect + revoke.
store.forget()first ends any live session with that technician, then revokes the grant and drops the node. One button, one outcome. The store's separatedisconnect()is deleted.Chat looks like a button. The invisible speech-bubble icon next to the tech's name is now a proper bordered button labeled Chat (icon + text + unread badge).
? instead of footer text. The access list's explanatory paragraph moved into a
?next to the title — tooltip on hover, tap to pin open.KVM & Claiming card follows the moment. Idle front door (no hand up, nobody connected, no grants): bottom of the left column. Hand raised / session live / grants outstanding: bottom of the right rail, returning left once everything clears and the access section hides itself.
Board row is raw. Shows the node's
boardfield verbatim, no moreproduct || boardfallback (pairs with mrjeeves/allmystuff's collector change makingboardthe unparsed system value).Copy pass. Emdashes removed from every user-visible string (components, toasts, placeholders, CLI help). The contact card's long explanations are one short line each with the detail in tooltips.
Verification
svelte-check: 106 files, 0 errors, 0 warningspnpm build: cleancargo check --workspace(light workspace): cleanNotes for review
liveSessionsnow excludesrequestedstate — that also means the approve-modal flow no longer shows a phantom "connected" row behind the modal.gui/src/ui/ConnectedBanner.svelte; README updated to match the new flow.🤖 Generated with Claude Code
https://claude.ai/code/session_01YYdqmManehKSKxwzcfeeU4
Generated by Claude Code