Fixed
- The GUI no longer exits silently when an action hits a configuration
error (for example a quarantine dir inside the downloads dir); failures
now land in the status bar and Log like any other error. - Name-only sources (
[NoDelete]additions) are credited on hash-verified
files, so the claims table'suniquecolumn truthfully shows what
retiring a list would free. - CRC32 rescues additionally require a size match, removing the chance of
a random 32-bit collision protecting an unrelated file. - Duplicate list labels with differing content (two same-named MO2
installs) are announced instead of silently dropping the second copy. - GUI actions refuse early with a clear message when no downloads
directory is configured yet.
Changed
- Reports bulk-load the hash cache: one query instead of one per file.
- The GUI's Hash Candidates hashes and refreshes the report in a single
pass over the disk instead of two. - Hashing pipelines reads with computation; access stays strictly
sequential, so spinning disks see no extra seeking. - The hash cache uses SQLite WAL mode: no per-file fsync, and concurrent
readers no longer block the writer. - Standalone executables are onedir bundles (one folder, both executables,
shared runtime), which trip far fewer antivirus heuristics than the
previous self-extracting stubs. - Every subcommand accepts
--log-level(restore,purge,
update-manifests, andcheck-updatepreviously lacked it). hash --limit 0now means "hash nothing" instead of "no limit".- CSV export orders rows by the same status ranking the report displays.
Added
- In-depth documentation: docs/usage.md covers every
command and config key, docs/gui.md tours the desktop
app; the README slimmed to an overview. - A tracked modsweep.example.toml template (the
personalmodsweep.tomlis no longer tracked). py.typed: the package advertises its inline type annotations to type
checkers.
Internal
- The GUI module became a package (texts / icons / workers / editor /
window). - ruff and pyright run in CI; the suite grew to 241 tests at 98% branch
coverage, including property-based invariants for version ordering and
the matcher contract, and much deeper end-to-end and GUI coverage.
Full changelog: https://github.com/zspatter/mod-sweep/blob/main/CHANGELOG.md
Note: the windows-gui / windows-cli single-file zips and the linux.zip were added after the initial release (the tagged workflow predates them; from v0.2.3 CI builds all of them directly). The Windows pair was built from the v0.2.2 tag source; the linux.zip is a repack of the CI-built linux.tar.gz with permissions preserved - identical binaries, NexusMods-compatible container.