Block structural errors first
Duplicate outputs and common invalid names become blocking errors before rename execution, reducing surprises after a batch is downloaded.
This evidence does not use 'safe' as a slogan. It separates the checkable safeguards in the current production renamer and image batch flow: what can be reviewed first, what blocks execution, what is only advisory, whether source files are overwritten, and how output-name collisions are handled.
Re-reviewed from the batch-renaming, image-conversion and output-naming source pinned to the reviewed commit. The review continues to cover Pro CSV mapping integrity for batch renaming: CSV is parsed locally with a strict field-state parser; unclosed quotes, illegal quotes inside unquoted fields, illegal characters after a closing quote, incomplete rows, and conflicting targets for the same source filename are rejected before entering mapping state; header detection requires an explicit source/target column pair so ordinary filenames are not treated as headers; non-empty mapping values preserve their original characters instead of being trimmed into different filenames; and when Keep original extension is enabled, CSV targets change only the filename stem, with target extensions taking effect only when that option is off. This review adds the confirmed-preview execution snapshot: after the device-workset gate passes and download is confirmed, the renamer copies that run's file/newName pairs and accounting metadata before synchronously locking the workset; ZIP contents, success accounting and download records all use the same snapshot, and the workset unlocks only after packaging finishes. Pre-execution preview, duplicate-output blocking and original-file protection remain verified. Existing image source previews, active-batch locking, settings undo/redo and output naming remain unchanged. This records safeguards that can be checked in the current implementation without stretching UI protections or device-capacity heuristics into a zero-risk guarantee.
Pinned production commit: 467e9d6b; 5 production source files referenced.The rename workspace computes and displays the original filename, proposed filename, warnings and errors for each file so the batch can be reviewed before ZIP creation. Once download is confirmed, that run's file/newName pairs are copied into the execution snapshot and the workset is locked until ZIP packaging finishes; ZIP contents, success counts and download records use the same snapshot so mid-run UI changes cannot split the reviewed preview from the delivered archive.
Source: components/RenamerTool.tsx
CSV mappings are parsed locally in the browser. An unclosed quote, an illegal quote inside an unquoted field, illegal characters after a closing quote, a row missing either mapping column, or conflicting target names for the same source filename rejects that import instead of putting partial bad data into mapping state. The first row is treated as a header only when both supported source and target header names match, and non-empty mapping keys and values are not rewritten by trimming legitimate leading or trailing spaces.
Source: components/RenamerTool.tsx · lib/renamer-csv-map.ts
Proposed output names are checked case-insensitively for duplicates. A collision becomes a blocking error instead of waiting until ZIP creation to reveal the conflict.
Source: components/RenamerTool.tsx
Current checks cover empty names, slash/backslash, control characters, common reserved symbols, trailing spaces or periods, Windows reserved names, and output names beyond the current 180-character limit.
Source: components/RenamerTool.tsx
When Keep original extension is enabled, both ordinary rules and CSV mappings use the source file extension; a different extension in the CSV target cannot silently replace it. When the option is off, the CSV target extension may take effect. If a source with an extension ultimately produces an extensionless output, the workspace still warns because extension removal can be intentional.
Source: components/RenamerTool.tsx · lib/renamer-csv-map.ts
When the rename batch contains blocking errors, the action that creates the downloadable ZIP remains disabled until the naming conflict or invalid output is resolved.
Source: components/RenamerTool.tsx
The renamer selects a conservative one-run ZIP source-byte window from device memory, CPU and coarse-pointer hints. Above that window the files remain available for preview, ordering and rule edits, but JSZip packaging does not start; the 500-file count limit is unchanged.
Source: components/RenamerTool.tsx · lib/renamer-zip-capacity.ts
Execution uses the existing browser File objects and writes them into a new ZIP under the proposed names. FileNest does not directly overwrite or delete the source files on the user's device.
Source: components/RenamerTool.tsx
Each admitted source image gets one browser Object URL. Multi-image batches show clickable thumbnails so every source can be inspected before processing, and the URLs are released on removal, clear or workspace unmount. Undo/redo restores image-setting snapshots only and does not replace these source file objects.
Source: components/ImageConverterTool.tsx
Image outputs use a case-insensitive set of names already used in the batch. Collisions are resolved deterministically as name (2), name (3), and so on to avoid same-name results in the ZIP.
Source: components/ImageConverterTool.tsx · lib/file-names.ts
Duplicate outputs and common invalid names become blocking errors before rename execution, reducing surprises after a batch is downloaded.
Extension changes and sequence choices may be intentional, so the preview does not pretend software can decide every project-specific naming meaning.
Renamed results go into a new ZIP instead of directly rewriting or deleting source files on the user's device.