feat(ui): folder picker sort/filter/create/rename and exclusions size rollups - #315
Merged
Conversation
Contributor
Coverage
Gate: passed - no coverage regression (epsilon 0.1 pp). |
… rollups Closes #305, #306, #307. - Destination folder picker: client-side sort (name/modified, Shared Drive roots pinned first), type-to-filter (auto-focus, resets on navigation), inline "New folder" on every browsable backend, inline hover-rename on Drive + SFTP (disabled with an explanatory tooltip on S3), row-level inline errors, near-fullscreen sizing in the add-source wizard modal. - Exclusions preview tree: per-folder file-count + byte-size rollups streamed from the backend walker (settle progressively for a descended folder, final immediately for a pruned excluded folder via a lightweight recursive disk count), an excluded-bytes "would be freed" summary stat, and the same near-fullscreen sizing. - New RemoteStore::rename_folder (Drive PATCH, SFTP real rename + sidecar move, S3 stays unsupported by design) and create_remote_folder/ rename_remote_folder IPC commands; BackendDto.supportsRename and DriveFolderEntry.modifiedTime added to the wire contract. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019xKUm9vH4ifb5LHR5szy1v
pmaxhogan
force-pushed
the
wave-1-picker-exclusions
branch
from
August 17, 2026 19:46
e047997 to
b68624f
Compare
pmaxhogan
added a commit
that referenced
this pull request
Aug 18, 2026
🤖 I have created a release *beep* *boop* --- ## [2.12.0](v2.11.1...v2.12.0) (2026-08-18) ### Features * **app:** opt-in debug logging mode and safer, richer diagnostic bundles ([#314](#314)) ([33c281c](33c281c)) * **core:** allow nested backup sources when the parent excludes the child ([#294](#294)) ([0b62df9](0b62df9)) * **core:** live exclusion pickup and a visible pending-work queue ([#313](#313)) ([e6427c7](e6427c7)) * live bottleneck indicator on the Activity dashboard ([#311](#311)) ([2d9d763](2d9d763)) * **ui:** folder picker sort/filter/create/rename and exclusions size rollups ([#315](#315)) ([7e87341](7e87341)) ### Bug Fixes * **app:** never freeze on tray quit during a backup; quitting tray state; honest recovery status ([#312](#312)) ([f951cde](f951cde)) * clear the attention banner after a passing run and make source removal backend-aware ([#310](#310)) ([6d8e1ab](6d8e1ab)) * **s3:** honest per-source versioning across backends and multipart-upload leak sweep ([#316](#316)) ([d462592](d462592)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
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
Closes #305, #306, #307 (v2.12.0 wave, PR3).
Modified asc/desc, default Name asc), type-to-filter (substring, current
folder only, auto-focus on open, resets on navigation), backend pagination
verified complete on all three backends, near-fullscreen sizing (92vw x
85vh capped 1400px) in the add-source wizard modal specifically on the
destination-folder and exclusions steps.
(Drive, S3, SFTP - reuses
ensure_folder's idempotent search-then-create),inline hover rename on Drive + SFTP (
RemoteStore::rename_folder: Drive isa
files.updatename-only PATCH; SFTP does a realRENAME+ moves thesidecar, and can mint a new id since SFTP ids are path-derived - the UI
replaces the row by its old id with the backend's returned entry). S3 stays
on the trait's unsupported default (
BackendKind::supports_rename= false)and shows a disabled control with an explanatory tooltip instead of hiding
the affordance outright. All actions surface errors inline, next to the
control that failed - never an alert dialog.
per-directory file-count + byte-size rollup with each batch - a descended
directory's rollup starts at 0 and settles upward as its subtree streams in
(re-emitting the same row without duplicating it), a pruned excluded
directory gets its final answer immediately via one lightweight recursive
disk count (no classification). The summary line gained an excluded-bytes
"would be freed" stat to match the existing included-bytes one.
Visual baselines
Not touched in this PR. Per the wave lead's sequencing note:
#311(bottleneck tile) and
#313(queue nav button, which changes all 104full-page screenshots) land first; I'll rebase and run
just visual-updatein a follow-up commit on this branch afterward. The one baseline my changes
affect is
setup-wizard.spec.ts'sstep3-source.png(light + dark) - theSetupWizardstep 3 embeds the picker's new toolbar (sort/filter/new-folderbutton).
Test plan
cargo testacross touched crates (driven-remote,driven-drive,driven-sftp,driven-backend,driven-core) andsrc-tauri- 447src-tauri tests + all crate tests green, including new coverage for
rollup settling/pruning, SFTP rename (real move + sidecar + id change +
clobber refusal + same-name no-op), and the fake Drive store's rename.
cargo clippy --all-targetsclean (driven-remote/-drive/-sftp/-backend/-coreandsrc-tauri).cargo fmt --checkclean.pnpm run test:unit- 806 vitest tests green (added ~30: pickersort/filter/create/rename, tree rollup rendering + fill sizing, store
rollup settling).
vue-tsc --noEmit,eslint .,prettier --checkall clean.just e2e-run wizard-first-run local-folder-round-trip- both PASSagainst the real containerized app (boots into the setup wizard,
renders the picker, completes a real backup/restore round trip). Did
not run the full
just e2esuite (expensive); these two scenarios arethe ones that exercise the wizard/picker paths this PR touches.
just visual-update) - deferred per the baselinesequencing above.
README
Updated: the live-exclusion-preview bullet now mentions the per-folder size
rollup, and a new bullet describes the picker's sort/filter/new-folder/rename
behavior including the S3 rename caveat.
🤖 Generated with Claude Code
https://claude.ai/code/session_019xKUm9vH4ifb5LHR5szy1v