feat(ui): two-icon sync-presence display (local + NAS) - #26
Merged
Conversation
Collapses the 10-state single glyph into a 7-view presence model (local + NAS icons per file; single rollup icon for folders/runs). Pure mapping + props layer with NiceGUI renderers; badge dot matches the cell's alert hue (red problem / amber held).
…m browse Adds the lost-file fix (unverified-absent records now surface as 'missing' instead of being dropped) and propagates per-run failure from creation.json to unverified on-disk files and the run rollup.
…e, metadata, legend Replaces the single status glyph with the local+NAS pair in file rows, a single colour-coded rollup icon in the run tree and folder metadata pane (tree now uses sync_nas.svg; sync_cloud.svg retired). Legend renders real swatches. Tree badge dot binds to sync_badge_bg (amber for held).
…ssertions Seed runs covering each rollup state (syncing/cleared/upload_failed/blocked), add missing/upload_failed/blocked file rows, page-object icon locators, and rewrite flow_05 to assert the two-icon language.
Xander-git
force-pushed
the
worktree-two-icon-sync-presence
branch
from
May 31, 2026 06:27
3479757 to
b74d736
Compare
…on design The seeded hierarchy gained the failed/blocked runs (so the tree rollup states are covered), so a 'Demo' search now matches 6 nodes not 4. And sync_legend_entries() now emits the FileSyncView vocabulary, so the legend popover lists 'Fully backed up on the NAS' / 'Sync held by a validation finding' instead of the old per-glyph wording. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Summary
Replaces the per-file sync display with a two-icon presence model so operators read only what matters: is a file here (local), on the NAS (backed up), both, or broken. The old single glyph encoded ten machine states; most describe sync machinery the operator never acts on.
Each file now shows a fixed local-left / NAS-right icon pair (
sync_local.svg+sync_nas.svg); runs (left tree) and the folder metadata pane show a single colour-coded rollup icon.sync_cloud.svgis retired.Colour language
blue = here · green = safe on NAS · gray = absent · red = problem · amber = held.
Folder/run rollup → one icon: synced→
sync_nasgreen, not-synced→sync_localblue, held→amber, error→red.How it works
browse.pyemits a discriminator string per file; the UI (sync_status_icon.py) is a pure presentation map (file_sync_view→FileSyncView→ icon/colour props).creation.jsonsync_status, then propagated to that run's unverified on-disk files and the rollups. (The originally-specced "live queue" path was unusable: per-file failure isn't persisted and the queue accessor doesn't exist.)missing(red/red).✕/!corner badges so red/amber aren't colour-only.Scope
File rows (two icons) · run tree + folder metadata pane (single rollup icon). Out of scope: center-pane sub-folder rollups; the hidden orchestrator/staging surfaces; any sync-engine/queue/schema change.
Design & plan
docs/superpowers/specs/2026-05-30-two-icon-sync-presence-design.mdTesting
mypy src/exlab_wizard→ 0 errors / 156 filesruff check(src + tests) → clean;ruff formatclean on all files this PR changestests/unit/ui→ 635 passed;tests/unit/api -k browse→ 36 passed (incl. 9 new discriminator tests);tests/unit/ui/test_theme.py→ 17 passedtests/integration→ 131 passedtests/e2e/test_flow_05_browse_view_sync_icons.py→ 2 passed (ran live against Chromium)tests/unitrun showed 4 pre-existing flaky failures intests/unit/sync/test_nas_client*.py— polling/timing assertions that flake under CPU load when the whole suite runs at once (documented project flakiness). These files are not touched by this PR and pass when the suite is run on its own.Each task was reviewed by a code-review agent and a simplify agent before commit.
🤖 Generated with Claude Code