Repository navigation
Recover queued batch renames, preserve tags and repair WinUI builds - #84
Merged
Merged
Conversation
Select several files or folders and rename them at once. Every new name is validated against the folder's existing names before anything is renamed, and one item that cannot be renamed never stops the others: each result is reported per item, successes are applied, and failures are listed with their reasons. Core: FileOperations.RenameItems renames independently and returns a RenameResult per item; ValidateNewName is now public so the UI can pre-flight every row. UI: the rename dialog shows one editable row per selection with per-row error text, keeps the dialog open on validation problems, refreshes the pane afterward, and shows a failures dialog when any item fails. F2 and context-menu Rename now work on multi-selections (pluralized menu label and tooltip included). Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Mark files and folders with a colored indicator (red, orange, yellow, green, blue, purple, gray, or none) from the right-click menu in either pane. Tags are a visual supplement to the item name, never carry meaning by color alone, and each tag has a plain-text accessibility label. Core: FileTagColor enum, a fixed restrained palette with labels, and FileTagStore persisting path -> color in an atomic JSON file under %LOCALAPPDATA%/Meridian. FileEntry carries a nullable TagColor that is rehydrated from the store after every folder read. UI: a small tag badge in the Details, Grid and Tiles row templates, plus a Tag submenu (None and the seven colors) on both pane context menus. Tagging applies to every selected item at once, saves immediately, and updates the rows live through change notification. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Renames no longer run synchronously without a safety net. Select one or more items, choose Rename (or F2), and a preview dialog shows old name → new name for each, flagging names that already exist in the folder. On confirm the whole batch is enqueued as a TransferJobKind.Rename job that runs through the same Transfers queue as copies and moves: progress in the strip, cancellable, one item's failure never aborts the job, and every finished rename is recorded in History where it can be undone. Core: - TransferJobKind.Rename; TransferExecutor renames each item in place (a single same-folder Windows rename per item, never a copy), parks name collisions for a user Replace/Keep-both/Skip choice, and records destination facts so undo can verify nothing changed since. - UndoPlanner reverses a rename by moving each item back to its original name (numbered name if the original is occupied again), refusing when the destination file changed in the meantime. UI: - Rename dialog is a before/after preview; the batch is enqueued rather than applied synchronously, so the pane refreshes when the job settles. - Transfers strip shows Renaming/Renamed; the Replace option is hidden for rename conflicts since a rename must never overwrite an existing item. Tests cover rename of files and folders, one failed source not aborting the job, Keep-both numbering, Ask parking until resolved, and undo (including original-occupied → numbered name, and changed-since → not undoable). Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Synthesized specification capturing Meridian's differentiation direction (safe/recoverable operations, project workspaces, dependable large-scale work), the complete capability map with roadmap traceability, a text UI mockup, and next implementation priorities. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
FileTagPalette used Windows.UI.Color, which doesn't exist in Meridian.Core (a plain class library without WinUI). Colors are now stored as hex strings in Core, and FileTagToBrushConverter parses them into SolidColorBrush in the App project. Also added the missing using Meridian.Models; so FileTagColor resolves. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
The core test project targets plain net10.0 without WinUI, so FileTagPaletteTests using Windows.UI.Color would not compile. Rewrote the color-distinctness test to compare hex strings instead. Also fixed RenameItems_CaseOnlyChangeRenamesInPlace to check the directory listing ordinally instead of File.Exists(source), which on Windows' case-insensitive filesystem still matches the renamed file. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
RenameCollisionKeepBoth_UsesTheNextFreeNumberedName renamed report.txt to report.txt (the same path), so the executor fails the item immediately with "The name is unchanged" while the test asserted Completed. Rework it as a real collision: an occupied destination parks the item, resolving with a new name lands the rename under the next free number without replacing anything. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.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.
Queued renames now journal physical intent and completion with file identity before and after each move. Interrupted batch swaps and inverse undo preserve participants and refuse ambiguous or foreign destinations. Simultaneous tag migration uses durable pending state, and settlement records history before removing queued work with job-ID deduplication.
Provably unstarted cancellation settles without a tag commit; ambiguous state refuses cancellation. Tag/cancellation refusals are contained at the UI boundary, and required journal failures park the operation and stop subsequent dispatch. Includes tag controls and valid WinUI resources/submenus integrated with the current 0.9.6 main features and packaging.
Validation: 94 focused tests pass; local full suite 1,589/1,590, with the sole failure requiring Windows symbolic-link privilege. x64 and ARM64 publishing and PE architecture checks pass. Independent source review passes the corrected failure paths and recorded hashes. Hosted core tests now pass; hosted architecture builds pending.
Interactive recovery/UI, exhaustive crash/power-loss permutations and installer lifecycle remain unverified. A static control mockup is supplied in the audit output; it is not a runtime screenshot. No tag or release is created by this PR.