2026 04 06_sync_badge_verse_controls_plan - mark-ik/graphshell GitHub Wiki
Date: 2026-04-06 Status: Design โ Pre-Implementation (Verse-blocked) Purpose: Specify the interaction contract for the ambient sync status badge in the graph-scoped Navigator host and its expansion into live Verse peer presence, trust controls, and explicit sync actions.
Extracted from: ../subsystem_ux_semantics/2026-03-13_chrome_scope_split_plan.md
(Slice 4 open item, ยง12 acceptance criterion "Sync badge expands to Verse
controls on click") โ that plan is now archived; this document is the
forward-tracking authority for this feature.
Related:
-
../technical_architecture/โ Verse subsystem architecture ../../verse_docs/technical_architecture/VERSE_AS_NETWORK.md../../verse_docs/technical_architecture/VERSE_AS_PEER.md-
../subsystem_ux_semantics/2026-03-13_chrome_scope_split_plan.md(archived)
Blocking condition: Implementation requires a stable Verse peer presence and sync API. This plan should not drive shell-side code until that API is defined. The badge ambient state (dot rendered in graph-scoped host) is already landed; only the expansion interaction is open.
The graph-scoped Navigator host renders an ambient sync status indicator derived
from GraphBrowserApp sync state. It is a read-only dot/chip โ no interactive
expansion is implemented. This is the correct baseline: the ambient badge is
present and correctly scoped to the graph host.
When the user clicks the sync badge:
-
An expansion panel opens anchored to the badge, showing:
- Peer presence list: connected Verse peers with trust tier and last-seen timestamp
-
Sync action:
SyncNowbutton โ triggers an explicit sync cycle - Trust controls: per-peer trust tier toggle (trusted / untrusted / blocked), routing through the Verse trust authority
- Connection status: current Verse node connectivity state (connected / degraded / offline)
-
Clicking outside the expansion panel dismisses it without side effects.
-
The badge dot reflects aggregate sync state at all times regardless of whether the panel is open:
State Badge appearance Synced / no peers Neutral dot Peers connected, sync active Active/animated dot Sync degraded or offline Warning dot Verse disabled / not configured Badge hidden or grayed
- Verse subsystem owns: peer presence truth, trust tier state, sync cycle dispatch, connectivity state.
-
Shell / Navigator host owns: badge rendering, expansion panel layout,
dispatch of
GraphIntentorWorkbenchIntentvariants that the Verse apply layer handles. - The badge must not duplicate or replace any Verse-owned settings surface. It is an ambient status affordance with quick-action reach, not a full Verse configuration UI.
Before shell-side implementation can proceed, the Verse subsystem must expose:
- A queryable peer presence snapshot (peer id, trust tier, last-seen, sync
state) readable each frame from
GraphBrowserAppor a Verse runtime handle. - A
SyncNowdispatch path โ either aGraphIntentvariant or a direct Verse runtime call. - A per-peer trust mutation path โ either
GraphIntent::SetVersePeerTrustor equivalent, handled in the Verse apply layer. - A connectivity state field readable from
GraphBrowserApp.
These are the four inputs the shell badge expansion needs. Until they exist, the badge remains read-only ambient state.
| Criterion | Verification |
|---|---|
| Sync badge visible in graph-scoped host | Already landed โ ambient dot present |
| Badge reflects aggregate sync state | Verify: offline โ warning dot; active โ animated dot |
| Click opens expansion panel with peer list | Test: click badge โ panel appears with at least SyncNow and connectivity status |
SyncNow dispatches and triggers a sync cycle |
Test: click SyncNow โ Verse sync cycle starts; badge state updates |
| Trust tier toggle routes through Verse apply layer | Test: toggle trust for a peer โ Verse trust state updated; badge reflects change |
| Panel dismisses on outside click | Test: click outside โ panel closes; no side effects |
| Badge hidden when Verse is disabled/unconfigured | Test: Verse not configured โ badge absent or grayed |
| Expansion does not duplicate Verse settings surface | Review: panel contains only presence/status/quick-actions, not full config |