Plugin: global --dry-run for all mutating operations #32

Closed
opened 2026-08-19 18:32:55 +00:00 by hermes · 1 comment
Owner

Context

SPEC.md §10. Today --dry-run exists only inside the (now removed) isrc-backfill path; sync and match mutate directly.

Task

  • One global --dry-run flag covering every mutation of: plugin SQLite state, beets library fields/associations, and playlistmanager playlist contents.
  • Dry-run performs reads, remote fetching, matching, and proposed-change reporting, but writes nothing.
  • Interactive choices made during a dry run are not persisted.
  • status and the listing commands are read-only and need no dry-run support.

Acceptance criteria

  • sync --dry-run and match --dry-run leave all three stores byte-identical.
  • Proposed changes are reported clearly.
  • Interactive decisions during dry-run are discarded.
  • Tests assert no writes across all stores.

Ref: SPEC.md §10.

## Context SPEC.md §10. Today `--dry-run` exists only inside the (now removed) `isrc-backfill` path; `sync` and `match` mutate directly. ## Task - One global `--dry-run` flag covering every mutation of: plugin SQLite state, beets library fields/associations, and playlistmanager playlist contents. - Dry-run performs reads, remote fetching, matching, and **proposed-change reporting**, but writes nothing. - Interactive choices made during a dry run are **not persisted**. - `status` and the listing commands are read-only and need no dry-run support. ## Acceptance criteria - [ ] `sync --dry-run` and `match --dry-run` leave all three stores byte-identical. - [ ] Proposed changes are reported clearly. - [ ] Interactive decisions during dry-run are discarded. - [ ] Tests assert no writes across all stores. Ref: SPEC.md §10.
Author
Owner

Delivered in merged PR #36 (cb442af). Issue-specific implementation commits:

  • #22: 4937fad (completed by the SPEC-aligned documentation in 02d5954)
  • #30: 1e245f2
  • #31: 9186be5
  • #32: 0a8ae97
  • #33: 02d5954

Verification: 95 tests passed; focused Ruff checks, compileall, diff checks, isolated-BEETSDIR command smoke testing, and package build all passed. Issue #34 remains open by maintainer request for the deferred real-library acceptance run.

Delivered in merged PR #36 (`cb442af`). Issue-specific implementation commits: - #22: `4937fad` (completed by the SPEC-aligned documentation in `02d5954`) - #30: `1e245f2` - #31: `9186be5` - #32: `0a8ae97` - #33: `02d5954` Verification: 95 tests passed; focused Ruff checks, compileall, diff checks, isolated-`BEETSDIR` command smoke testing, and package build all passed. Issue #34 remains open by maintainer request for the deferred real-library acceptance run.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coop/beets-appleplaylists#32
No description provided.