Repository navigation
cargo-cleanme 0.2.0
cargo-cleanme 0.2.0
The 0.2.0 line makes cargo-cleanme a real maintenance command. It is a
breaking release for the 0.1.x CLI: see "Upgrading from 0.1.x" in README.md and
docs/TROUBLESHOOTING.md before you script around it.
Breaking
-
cargo cleanmeis now the canonical maintenance command, and it cleans.
Bare invocation used to be a read-only Routine scan. It is now a Routine
cleanup over the maintenance scope, through the same combined-root safety
engineclean --knownalready used. Every candidate must still prove
exclusive ownership of its bytes, and that proof is repeated immediately
before eachcargo clean. Deletion is alwayscargo clean; cargo-cleanme
never removes a directory itself.0.1.x Now Same behaviour? cargo cleanmecargo cleanme scan --knownyes cargo cleanme scan --fullcargo cleanme scanyes cargo cleanme clean R --dry-runcargo cleanme clean R --cargo-previewyes cargo cleanme clean R --dryruncargo cleanme clean R --dry-runyes cargo cleanme clean R --yescargo cleanme clean Ryes --dry-run,--dryrun, and--yesconflict pairwise on purpose. -
--dry-runnow means simulation, not Cargo preview. It used to invoke
cargo clean --dry-run --verbose. It now runs the complete decision, proof,
and reporting path and spawns nocargo cleanprocess of any kind. Cargo's
own preview is reachable ascargo cleanme clean --cargo-preview. Simulation
is not a weaker mode: it passes the same completeness and final-proof gates as
a real cleanup, so it stays the right mode for testing changes to those gates. -
cleannow defaults to Execute.--yesis retained as a hidden alias. -
Rootless
scanis now Full and no longer needs--full. A configured
scan.rootis not consulted by a rootless scan, so configuration cannot
silently narrow the canonical reconciliation command.scan --fullremains
as a hidden alias;scan --knownis the read-only Routine inventory. -
--dryrunand--yesare hidden. Both remain accepted as aliases for the
canonical modes. They create no fourth mode and print nothing.
Added
-
--format log: one bounded ASCII summary line for unattended runs. At
most 384 bytes, withop,status,scope,mode, a typedreason=code
when blocked, and counts. -
ignore.unignore: re-admits a literally-ignored relative path from an
ignored subtree, so anignore = trueworkspace member can still be scanned.
Fixed
Corrective identifiers are given only where they have been checked against the
closure records; CHANGELOG.md is the authority for attribution.
- A configured
scan.rootmadeclean --knowna silent no-op. clean --fullreturned the scan's exit code silently. An incomplete Full
reconciliation is a failure, and now reports it.clean --fullcould emit two JSON documents on stdout.scan.unignorere-admitted every sibling under a literally ignored
directory, not just the named one (C019).cargo cleanme updatecould replace a binary that Cargo owns (C018). The
updater now refuses to mutate a Cargo-managed installation, names the
cargo installcommand that owns the repair, and does so before acquiring or
replacing bytes.- Concurrent first use could fail on Windows with "Access is denied" (C020).
The staging name is now unique within the process, so the collision is
removed rather than tolerated. cargo cleanme update --format jsonhad no contract evidence at all
(C022). This release adds the missing tests; the document's schema is
unchanged.
Verification
This release was staged by Eggpack from the exact v0.2.0 tag and validated
against the staged bytes before publication. The full receipt — run ids, asset
inventory, attestation verification, and the five-target post-release smoke — is
in plans/closure/distribution-release-update/013-status.md in the repository.
Release attestation and the automatic post-release smoke start after
publication, so neither is claimed here. What was verified before publication
was narrower and real: the staged draft's exact 15-asset inventory, sidecar
integrity, agreement between the served bytes and release-manifest.json,
agreement with the release contract, a measured GLIBC_2.17.0 floor on both
Linux targets, and a real installer run against the staged bytes.