Skip to content

Releases: zspatter/mod-sweep

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 06 Jul 22:53

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's unique column 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, and check-update previously lacked it).
  • hash --limit 0 now 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
    personal modsweep.toml is 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.

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 06 Jul 18:44
Mod Sweep v0.2.1

Metadata, documentation, and a Nolvus fix: PyPI description (README
render), project urls, keywords, author; GUI screenshots; NexusMods
page copy and maintenance guide; nested Nolvus instances
(Instances/<name>/MODS wrapped layout) are now found, protecting
their [NoDelete] custom additions.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 18:09
Mod Sweep v0.2.0 - first published release

Whitelist-driven cleanup for shared Skyrim modlist archive directories.
MIT licensed. Available on PyPI (uv tool install modsweep / pipx
install modsweep) and as standalone executables below.

- Sources of truth: Wabbajack (.wabbajack, exact size + xxHash64),
  bundled Nolvus InstallPackage manifests (CRC32, updatable in-app
  from this repository), MO2 [NoDelete] custom additions,
  whole-install recovery, snapshots.
- Resolution: active-by-default, exclude globs, latest-only version
  filtering keyed on machine ids with explicit-entry pinning, drift
  detection, every decision announced.
- Safety: name/size classification with a hash gate before anything
  moves; quarantine-first sweeps with restore; purge as the only hard
  delete; per-file operations.
- Interfaces: full CLI and a PySide6 GUI (system-themed, sortable
  tables, version-grouped source tree, config editor, update checks)
  over one pipeline. Sub-second warm resolution via manifest cache.
- 169 tests, ~95% coverage; CI on Windows/Linux/macOS/Debian/Arch.