Centralize resolution status reconciliation with current beets associations #46

Closed
opened 2026-09-05 22:42:18 +00:00 by tophattedcat · 0 comments
Owner

Problem

Reporting combines saved resolution_state with live beets associations, but only overrides the saved state when one or more associated items exist. If a previously matched beets item is deleted, list-tracks can display matched with an empty BEETS_ITEMS column.

Related state reconciliation is independently implemented in reporting, explicit-match displacement handling, and interactive matching. These implementations can drift as associations change outside normal sync.

Proposed change

Centralize how current associations, saved automatic outcomes, and permanent skips determine effective status. Keep reporting read-only and distinguish a saved decision from evidence of a current association.

Acceptance criteria

  • Removing a matched local item cannot leave it displayed as currently matched.
  • One association and multiple associations are represented consistently.
  • Saved ambiguity/unmatched outcomes and permanent skips retain their intended meaning.
  • Explicit reassignment, displaced tracks, and interactive matching use consistent rules.
  • Add regressions covering deletion and association changes between sync and reporting.

References: beetsplug/appleplaylists/__init__.py:330-337, __init__.py:422-443, __init__.py:479-498. Audit finding 5 (medium).

## Problem Reporting combines saved resolution_state with live beets associations, but only overrides the saved state when one or more associated items exist. If a previously matched beets item is deleted, list-tracks can display matched with an empty BEETS_ITEMS column. Related state reconciliation is independently implemented in reporting, explicit-match displacement handling, and interactive matching. These implementations can drift as associations change outside normal sync. ## Proposed change Centralize how current associations, saved automatic outcomes, and permanent skips determine effective status. Keep reporting read-only and distinguish a saved decision from evidence of a current association. ## Acceptance criteria - Removing a matched local item cannot leave it displayed as currently matched. - One association and multiple associations are represented consistently. - Saved ambiguity/unmatched outcomes and permanent skips retain their intended meaning. - Explicit reassignment, displaced tracks, and interactive matching use consistent rules. - Add regressions covering deletion and association changes between sync and reporting. References: `beetsplug/appleplaylists/__init__.py:330-337`, `__init__.py:422-443`, `__init__.py:479-498`. Audit finding 5 (medium).
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#46
No description provided.