You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix data-safety bugs and packaging (v0.5.0)
Rename engine (ops.ts):
- applyRename now returns per-file OpResult[] and refuses to run if two
files collide on one target or an unrelated existing file would be
clobbered; renames go through temp names so chains (a->b, b->c) can't
destroy data, with rollback on failure.
- uniquePath() everywhere so no output ever overwrites an existing file.
- unzip: Zip Slip guard (entries must resolve under the output dir).
- zipFiles: de-duplicate entry names; guard empty input.
UI (App.tsx):
- RenamePanel surfaces the OpResult[] instead of silently discarding it;
the file list only clears when every rename actually succeeded. Fixes a
silent "fake success" data-loss path.
- SHA-256 button catches errors and reports them instead of throwing an
unhandled rejection.
Main process (index.ts):
- runBatch uses bounded concurrency (max 4) so large batches don't spawn
hundreds of parallel pipelines.
- filesFromArgv resolves paths and ignores flags.
Packaging (package.json):
- asarUnpack sharp/@img so the native module actually loads in the packaged
app (previously invisible because tests run from source).
- macOS builds arm64-only; the cross-compiled x64 dmg had a broken native
binary. Intel Macs build from source (README updated).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>