Skip to content

feat: persist profile-scoped multi-source station provenance (#276) - #283

Merged
pitill0 merged 1 commit into
mainfrom
feat/issue-276-station-provenance
Oct 24, 2026
Merged

pitill0 merged 1 commit into
mainfrom
feat/issue-276-station-provenance

Conversation

@pitill0

@pitill0 pitill0 commented Oct 24, 2026

Copy link
Copy Markdown
Owner

Summary

Implements profile-scoped station provenance to track how stations enter a FluxTuner library without changing their shared station records or existing favorite metadata.

Changes

  • Add SQLite schema v4 for station sources and source-to-station memberships.
  • Support local_collection, remote_collection, and manual_entry provenance.
  • Provide Core APIs for creating, listing, querying, and deleting profile-owned sources.
  • Integrate provenance recording with GTK and TUI station imports and manual station creation.
  • Integrate Web remote imports using persistent, single-use receipts bound to the authenticated user, profile, session, and exact downloaded content.
  • Enforce receipt expiration and atomic consumption during import.
  • Preserve existing station metadata, favorites, tags, and playlist relationships.
  • Use opaque source references rather than storing source URLs or filesystem paths as provenance identifiers.

Security and compatibility

  • Enforce profile ownership across provenance operations.
  • Prevent remote-source attribution from unverified client claims.
  • Reject expired, modified, cross-profile, cross-user, or reused remote import receipts.
  • Preserve rollback behavior when imports fail.
  • Keep existing import response contracts compatible.

Scope

  • The Web API supports explicitly selected profiles.
  • The current Web interface operates on the default profile; a graphical profile selector is outside this PR.
  • Full profile-management UX for GTK/TUI/Web is outside this PR.

Validation

  • Full suite: 1,672 passed, 8 skipped.
  • Ruff: passed.
  • Ruff format: passed for all 25 changed/new Python files.
  • Mypy: passed for the six checked modules.
  • JavaScript syntax checks: passed.
  • git diff --check: passed.

Closes #276.

@pitill0 pitill0 self-assigned this Oct 24, 2026
@pitill0 pitill0 added the enhancement New feature or request label Oct 24, 2026
@pitill0
pitill0 merged commit 687fa2c into main Oct 24, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design and persist multi-source station provenance

1 participant