Skip to content

cargo-cleanme 0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 05:34
· 199 commits to main since this release
Immutable release. Only release title and notes can be modified.

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 cleanme is 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
    engine clean --known already used. Every candidate must still prove
    exclusive ownership of its bytes, and that proof is repeated immediately
    before each cargo clean. Deletion is always cargo clean; cargo-cleanme
    never removes a directory itself.

    0.1.x Now Same behaviour?
    cargo cleanme cargo cleanme scan --known yes
    cargo cleanme scan --full cargo cleanme scan yes
    cargo cleanme clean R --dry-run cargo cleanme clean R --cargo-preview yes
    cargo cleanme clean R --dryrun cargo cleanme clean R --dry-run yes
    cargo cleanme clean R --yes cargo cleanme clean R yes

    --dry-run, --dryrun, and --yes conflict pairwise on purpose.

  • --dry-run now 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 no cargo clean process of any kind. Cargo's
    own preview is reachable as cargo 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.

  • clean now defaults to Execute. --yes is retained as a hidden alias.

  • Rootless scan is now Full and no longer needs --full. A configured
    scan.root is not consulted by a rootless scan, so configuration cannot
    silently narrow the canonical reconciliation command. scan --full remains
    as a hidden alias; scan --known is the read-only Routine inventory.

  • --dryrun and --yes are 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, with op, status, scope, mode, a typed reason= code
    when blocked, and counts.

  • ignore.unignore: re-admits a literally-ignored relative path from an
    ignored subtree, so an ignore = true workspace 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.root made clean --known a silent no-op.
  • clean --full returned the scan's exit code silently. An incomplete Full
    reconciliation is a failure, and now reports it.
  • clean --full could emit two JSON documents on stdout.
  • scan.unignore re-admitted every sibling under a literally ignored
    directory
    , not just the named one (C019).
  • cargo cleanme update could replace a binary that Cargo owns (C018). The
    updater now refuses to mutate a Cargo-managed installation, names the
    cargo install command 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 json had 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.