Skip to content

Recover queued batch renames, preserve tags and repair WinUI builds - #84

Merged
SeanShaffer88 merged 10 commits into
mainfrom
arena/87840f82-meridian
Nov 4, 2026
Merged

SeanShaffer88 merged 10 commits into
mainfrom
arena/87840f82-meridian

Conversation

@SeanShaffer88

@SeanShaffer88 SeanShaffer88 commented Nov 1, 2026 •

Copy link
Copy Markdown
Owner

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.

SeanShaffer88 and others added 7 commits November 1, 2026 22:19
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>
@SeanShaffer88 SeanShaffer88 changed the title Safe/recoverable operations: queued rename, color tags, batch rename Make queued renames recoverable and repair WinUI builds Nov 4, 2026
@SeanShaffer88 SeanShaffer88 changed the title Make queued renames recoverable and repair WinUI builds Recover queued batch renames, preserve tags and repair WinUI builds Nov 4, 2026
@SeanShaffer88
SeanShaffer88 merged commit 26a2f96 into main Nov 4, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant