rekordbox-edit 0.13.2.dev24__tar.gz → 0.13.3.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/CHANGELOG.md +12 -1
  2. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/PKG-INFO +1 -1
  3. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/pyproject.toml +1 -1
  4. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/tags.py +39 -16
  5. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_tags.py +33 -5
  6. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/uv.lock +5 -5
  7. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.agent-style/RULES.md +0 -0
  8. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.agent-style/claude-code.md +0 -0
  9. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/build-release-notes/action.yml +0 -0
  10. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/build-release-notes/build_release_notes.py +0 -0
  11. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/commit-check/action.yml +0 -0
  12. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/commitizen-bump/action.yml +0 -0
  13. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/commitizen-bump/commitizen-bump.sh +0 -0
  14. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/e2e/action.yml +0 -0
  15. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/install/action.yml +0 -0
  16. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/lint/action.yml +0 -0
  17. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/actions/test/action.yml +0 -0
  18. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/workflows/cd.yml +0 -0
  19. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/workflows/ci.yml +0 -0
  20. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/workflows/publish.yml +0 -0
  21. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.github/workflows/release.yml +0 -0
  22. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.gitignore +0 -0
  23. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.pre-commit-config.yaml +0 -0
  24. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.python-version +0 -0
  25. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/.readthedocs.yaml +0 -0
  26. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/AGENTS.md +0 -0
  27. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/CLAUDE.md +0 -0
  28. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/CONTRIBUTING.md +0 -0
  29. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/LICENSE +0 -0
  30. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/Makefile +0 -0
  31. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/README.md +0 -0
  32. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/codecov.yml +0 -0
  33. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docker-compose.yml +0 -0
  34. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/api.md +0 -0
  35. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/commands/convert.md +0 -0
  36. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/commands/edit.md +0 -0
  37. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/commands/import.md +0 -0
  38. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/commands/remove.md +0 -0
  39. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/commands/search.md +0 -0
  40. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/faqs.md +0 -0
  41. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/filtering.md +0 -0
  42. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/index.md +0 -0
  43. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/docs/stylesheets/extra.css +0 -0
  44. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/mkdocs.yml +0 -0
  45. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/__init__.py +0 -0
  46. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/_tag_fields.py +0 -0
  47. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/__init__.py +0 -0
  48. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_anlz.py +0 -0
  49. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_convert.py +0 -0
  50. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_edit.py +0 -0
  51. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_field_handlers.py +0 -0
  52. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_import.py +0 -0
  53. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_relations.py +0 -0
  54. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_remove.py +0 -0
  55. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_search.py +0 -0
  56. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/api/_utils.py +0 -0
  57. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/__init__.py +0 -0
  58. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/_click.py +0 -0
  59. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/_progress.py +0 -0
  60. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/_utils.py +0 -0
  61. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/convert.py +0 -0
  62. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/edit.py +0 -0
  63. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/import_.py +0 -0
  64. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/main.py +0 -0
  65. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/remove.py +0 -0
  66. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/cli/search.py +0 -0
  67. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/display.py +0 -0
  68. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/errors.py +0 -0
  69. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/locking.py +0 -0
  70. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/logger.py +0 -0
  71. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/models.py +0 -0
  72. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/query.py +0 -0
  73. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/rekordbox_edit/utils.py +0 -0
  74. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/renovate.json5 +0 -0
  75. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/README.md +0 -0
  76. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/beets-plugin-integration.md +0 -0
  77. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/decisions/converted-original-disposition.md +0 -0
  78. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/evidence/convert-repoint.txt +0 -0
  79. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/evidence/event-order.txt +0 -0
  80. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/evidence/file-level-encode.txt +0 -0
  81. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/evidence/id-stability.txt +0 -0
  82. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/evidence/media-field-roundtrip.txt +0 -0
  83. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/scripts/convert_repoint.py +0 -0
  84. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/scripts/event_probe.py +0 -0
  85. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/scripts/file_level_encode.py +0 -0
  86. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/scripts/id_stability.py +0 -0
  87. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/beets-plugin-integration/scripts/media_field_roundtrip.py +0 -0
  88. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/convert-export-impact-test-plan.md +0 -0
  89. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/convert-export-impact.md +0 -0
  90. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r1-00-baseline.json +0 -0
  91. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r1-10-postconvert.json +0 -0
  92. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r1-20-postexport.json +0 -0
  93. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r1-21-postexport-full.json +0 -0
  94. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r2-00-baseline.json +0 -0
  95. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r2b-00-baseline.json +0 -0
  96. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r2b-10-deviceedit.json +0 -0
  97. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r2b-30-postsync.json +0 -0
  98. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r3-00-baseline.json +0 -0
  99. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r3-10-deviceedit.json +0 -0
  100. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r3-40-resync.json +0 -0
  101. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/export-r3-41-reexport-full.json +0 -0
  102. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-11317782-r3-20-postconvert.json +0 -0
  103. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-11317782-r3-30-postsync.json +0 -0
  104. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r1-00-baseline.json +0 -0
  105. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r1-10-postconvert.json +0 -0
  106. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r1-20-postexport.json +0 -0
  107. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r2-00-baseline.json +0 -0
  108. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r2b-00-baseline.json +0 -0
  109. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r2b-00-lib.json +0 -0
  110. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r2b-20-postconvert.json +0 -0
  111. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-121715696-r2b-30-postsync.json +0 -0
  112. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-140193439-r3-20-postconvert.json +0 -0
  113. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-140193439-r3-30-postsync.json +0 -0
  114. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r1-00-baseline.json +0 -0
  115. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r1-10-postconvert.json +0 -0
  116. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r1-20-postexport.json +0 -0
  117. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r2-00-baseline.json +0 -0
  118. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r2b-00-baseline.json +0 -0
  119. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r2b-00-lib.json +0 -0
  120. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r2b-20-postconvert.json +0 -0
  121. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-258421826-r2b-30-postsync.json +0 -0
  122. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-268012584-r3-20-postconvert.json +0 -0
  123. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-268012584-r3-30-postsync.json +0 -0
  124. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r1-00-baseline.json +0 -0
  125. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r1-10-postconvert.json +0 -0
  126. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r1-20-postexport.json +0 -0
  127. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r2-00-baseline.json +0 -0
  128. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r2b-00-baseline.json +0 -0
  129. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r2b-00-lib.json +0 -0
  130. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r2b-20-postconvert.json +0 -0
  131. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-53013048-r2b-30-postsync.json +0 -0
  132. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r1-00-baseline.json +0 -0
  133. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r1-10-postconvert.json +0 -0
  134. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r1-20-postexport.json +0 -0
  135. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r2-00-baseline.json +0 -0
  136. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r2b-00-baseline.json +0 -0
  137. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r2b-20-postconvert.json +0 -0
  138. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/evidence/subject-54793376-r2b-30-postsync.json +0 -0
  139. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/scripts/export_diff.py +0 -0
  140. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-export-impact/scripts/export_snapshot.py +0 -0
  141. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2-plan.md +0 -0
  142. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2.md +0 -0
  143. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/convert-anlz-cue-impact-test-plan.md +0 -0
  144. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/convert-anlz-cue-impact-verification.md +0 -0
  145. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/convert-anlz-cue-impact.md +0 -0
  146. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/decisions/convert-and-reanalysis-impact.md +0 -0
  147. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/decisions/convert-helper-structure.md +0 -0
  148. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/01-inventory.txt +0 -0
  149. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/02-cue-schema.txt +0 -0
  150. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/03-cue-fields-by-format.txt +0 -0
  151. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/04-anlz-deep.txt +0 -0
  152. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/05-census.txt +0 -0
  153. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/06-content-columns.txt +0 -0
  154. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/07-analysis-flags.txt +0 -0
  155. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/exp2-00-pvb2-origin.txt +0 -0
  156. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-00-zero.json +0 -0
  157. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-01.json +0 -0
  158. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-02.json +0 -0
  159. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-03.json +0 -0
  160. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-01.json +0 -0
  161. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-02.json +0 -0
  162. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-03.json +0 -0
  163. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-01.json +0 -0
  164. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-02.json +0 -0
  165. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-03.json +0 -0
  166. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-04.json +0 -0
  167. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-05.json +0 -0
  168. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-01.json +0 -0
  169. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-02.json +0 -0
  170. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-03.json +0 -0
  171. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-01.json +0 -0
  172. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-02.json +0 -0
  173. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-03.json +0 -0
  174. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-04.json +0 -0
  175. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-05.json +0 -0
  176. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-06.json +0 -0
  177. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-then-high.json +0 -0
  178. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-unlocked-ref.json +0 -0
  179. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-174954387-nth-mid-normal.json +0 -0
  180. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-00-baseline.json +0 -0
  181. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postanalyze.json +0 -0
  182. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postconv.json +0 -0
  183. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-baseline.json +0 -0
  184. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze.json +0 -0
  185. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze2.json +0 -0
  186. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-00-baseline.json +0 -0
  187. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postanalyze.json +0 -0
  188. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postconv.json +0 -0
  189. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postopen.json +0 -0
  190. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-baseline.json +0 -0
  191. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze.json +0 -0
  192. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze2.json +0 -0
  193. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-postconv.json +0 -0
  194. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postanalyze.json +0 -0
  195. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postconv.json +0 -0
  196. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-00-baseline.json +0 -0
  197. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-locked.json +0 -0
  198. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-postconv.json +0 -0
  199. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-unlocked-reanalyze.json +0 -0
  200. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-postlock.json +0 -0
  201. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-230928195-prelock.json +0 -0
  202. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-baseline.json +0 -0
  203. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postanalyze.json +0 -0
  204. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postconv.json +0 -0
  205. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-00-zero.json +0 -0
  206. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-01.json +0 -0
  207. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-02.json +0 -0
  208. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-03.json +0 -0
  209. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-01.json +0 -0
  210. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-02.json +0 -0
  211. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-03.json +0 -0
  212. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-01.json +0 -0
  213. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-02.json +0 -0
  214. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-03.json +0 -0
  215. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-04.json +0 -0
  216. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-05.json +0 -0
  217. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-01.json +0 -0
  218. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-02.json +0 -0
  219. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-03.json +0 -0
  220. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-01.json +0 -0
  221. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-02.json +0 -0
  222. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-03.json +0 -0
  223. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-04.json +0 -0
  224. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-05.json +0 -0
  225. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-06.json +0 -0
  226. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-locked.json +0 -0
  227. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-then-high.json +0 -0
  228. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-27790898-nth-mid-normal.json +0 -0
  229. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-baseline.json +0 -0
  230. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postanalyze.json +0 -0
  231. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postconv.json +0 -0
  232. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-baseline.json +0 -0
  233. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postanalyze.json +0 -0
  234. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postconv.json +0 -0
  235. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/README.md +0 -0
  236. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/analysis_flags.py +0 -0
  237. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/anlz_census.py +0 -0
  238. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/anlz_deep.py +0 -0
  239. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/content_columns.py +0 -0
  240. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/cue_fields_by_format.py +0 -0
  241. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/cue_schema.py +0 -0
  242. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/grid_drift.py +0 -0
  243. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/inventory.py +0 -0
  244. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/pvb2_origin.py +0 -0
  245. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/reset_fresh_to_zero.py +0 -0
  246. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/restore_fixtures.sh +0 -0
  247. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-reanalysis-impact/scripts/row_snapshot.py +0 -0
  248. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/convert-thread-scaling.md +0 -0
  249. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/evidence/thread-scaling.txt +0 -0
  250. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/scripts/_sources.py +0 -0
  251. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/scripts/format_scaling.py +0 -0
  252. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/scripts/shipped_path_scaling.py +0 -0
  253. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/convert-thread-scaling/scripts/write_cost.py +0 -0
  254. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/database-concurrency.md +0 -0
  255. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/evidence/plan-apply-probes.txt +0 -0
  256. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/evidence/usn-spikes.txt +0 -0
  257. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/plan-apply-window.md +0 -0
  258. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/block_reservation.py +0 -0
  259. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/concurrent_increment.py +0 -0
  260. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/identity_probe.py +0 -0
  261. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/membership_probe.py +0 -0
  262. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/snapshot_probe.py +0 -0
  263. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/scripts/wal_snapshot.py +0 -0
  264. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/database-concurrency/usn-maintenance.md +0 -0
  265. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/decisions/edit-field-handlers.md +0 -0
  266. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/edit-relational-fields-test-plan.md +0 -0
  267. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/edit-relational-fields.md +0 -0
  268. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-112264610-e2-00-baseline.json +0 -0
  269. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-112264610-e2-10-reuse.json +0 -0
  270. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-141833798-e3b-00-baseline.json +0 -0
  271. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-141833798-e3b-10-newalbum.json +0 -0
  272. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-145166719-e0-census.json +0 -0
  273. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-176388182-e1-00-baseline.json +0 -0
  274. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-176388182-e1-10-reuse.json +0 -0
  275. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-183309432-e4-00-baseline.json +0 -0
  276. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-183309432-e4-10-orphaned.json +0 -0
  277. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-47413782-v-00-baseline.json +0 -0
  278. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-47413782-v-10-reuse.json +0 -0
  279. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-50395296-v-00-baseline.json +0 -0
  280. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-50395296-v-10-reuse.json +0 -0
  281. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-57701453-e3-00-baseline.json +0 -0
  282. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-57701453-e3-10-diffartist.json +0 -0
  283. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-71974950-v-00-baseline.json +0 -0
  284. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/evidence/rel-71974950-v-10-reuse.json +0 -0
  285. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/scripts/relational_diff.py +0 -0
  286. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/edit-relational-fields/scripts/relational_snapshot.py +0 -0
  287. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/file-types/README.md +0 -0
  288. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/file-types/decisions/unknown-file-types.md +0 -0
  289. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/decisions/commit-semantics-and-usn.md +0 -0
  290. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/column-coverage-gig.json +0 -0
  291. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/datecreated-source-gig.json +0 -0
  292. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/filetype-searchstr-gig.json +0 -0
  293. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/filetype-searchstr-local.json +0 -0
  294. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/import-row-shape-gig.json +0 -0
  295. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/evidence/tag-key-mapping-gig.json +0 -0
  296. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/import-track-row-shape.md +0 -0
  297. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/scripts/column_coverage.py +0 -0
  298. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/scripts/datecreated_source.py +0 -0
  299. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/scripts/filetype_and_searchstr.py +0 -0
  300. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/scripts/import_row_shape.py +0 -0
  301. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/import-track-row-shape/scripts/tag_key_mapping.py +0 -0
  302. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/decisions/remove-command-behavior.md +0 -0
  303. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-109570093-r8-00-imported.json +0 -0
  304. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-109570093-r8-10-analyzed.json +0 -0
  305. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-114745319-r1-00-baseline.json +0 -0
  306. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-114745319-r1-10-removed.json +0 -0
  307. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-120331280-f6-00-baseline.json +0 -0
  308. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-120331280-f6-10-control.json +0 -0
  309. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-137975518-f3-00-baseline.json +0 -0
  310. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-137975518-f3-10-control.json +0 -0
  311. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-139425629-r6-00-baseline.json +0 -0
  312. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-139425629-r6-10-removed.json +0 -0
  313. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-14241481-r5-00-baseline.json +0 -0
  314. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-14241481-r5-10-removed.json +0 -0
  315. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-143461275-r7-01-folder-art.json +0 -0
  316. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-265892207-r3-00-baseline.json +0 -0
  317. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-265892207-r3-10-removed.json +0 -0
  318. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-265892207-r4-10-playlist-only.json +0 -0
  319. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-36337051-r7-00-folder-art.json +0 -0
  320. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-74039842-r8-00-imported.json +0 -0
  321. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/evidence/rm-74039842-r8-10-analyzed.json +0 -0
  322. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/remove-track-impact-test-plan.md +0 -0
  323. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/remove-track-impact.md +0 -0
  324. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/scripts/build_fixtures.py +0 -0
  325. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/scripts/removal_diff.py +0 -0
  326. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/scripts/removal_snapshot.py +0 -0
  327. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/remove-track-impact/scripts/restore.sh +0 -0
  328. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/shared/scripts/subject_diff.py +0 -0
  329. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/research/shared/scripts/subject_snapshot.py +0 -0
  330. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/ruff.toml +0 -0
  331. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/__init__.py +0 -0
  332. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/anlz_helpers.py +0 -0
  333. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/__init__.py +0 -0
  334. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/conftest.py +0 -0
  335. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_anlz.py +0 -0
  336. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_convert.py +0 -0
  337. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_edit.py +0 -0
  338. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_field_handlers.py +0 -0
  339. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_import.py +0 -0
  340. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_package.py +0 -0
  341. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_relations.py +0 -0
  342. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_remove.py +0 -0
  343. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_search.py +0 -0
  344. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/api/test_utils.py +0 -0
  345. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/__init__.py +0 -0
  346. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_convert.py +0 -0
  347. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_edit.py +0 -0
  348. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_import.py +0 -0
  349. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_locking.py +0 -0
  350. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_main.py +0 -0
  351. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_progress.py +0 -0
  352. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_remove.py +0 -0
  353. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_search.py +0 -0
  354. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/cli/test_utils.py +0 -0
  355. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/conftest.py +0 -0
  356. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/Dockerfile +0 -0
  357. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/__init__.py +0 -0
  358. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[macos].json +0 -0
  359. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[windows].json +0 -0
  360. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/__snapshots__/test_journey.ambr +0 -0
  361. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/conftest.py +0 -0
  362. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/01-flac-44_1k-16b.flac +0 -0
  363. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/02-flac-96k-24b.flac +0 -0
  364. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/03-alac-44_1k-16b.m4a +0 -0
  365. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/04-alac-48k-24b.m4a +0 -0
  366. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/05-aiff-44_1k-16b.aiff +0 -0
  367. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/06-wav-96k-24b.wav +0 -0
  368. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/07-mp3-44_1k-320cbr.mp3 +0 -0
  369. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/08-mp3-44_1k-v0vbr.mp3 +0 -0
  370. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/09-aac-44_1k-256kbps.m4a +0 -0
  371. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/audio/10-/303/274/303/261/303/256c/303/266d/303/251-flac-44_1k-16b.flac" +0 -0
  372. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/macos/master.6.8.6.db +0 -0
  373. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/fixtures/windows/master.6.8.6.db +0 -0
  374. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/test_edit_fields.py +0 -0
  375. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/test_import.py +0 -0
  376. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/test_journey.py +0 -0
  377. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/e2e/test_remove.py +0 -0
  378. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_display.py +0 -0
  379. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_locking.py +0 -0
  380. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_logger.py +0 -0
  381. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_models.py +0 -0
  382. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_query.py +0 -0
  383. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_tag_fields.py +0 -0
  384. {rekordbox_edit-0.13.2.dev24 → rekordbox_edit-0.13.3.dev1}/tests/test_utils.py +0 -0
@@ -1,4 +1,15 @@
1
- ## v0.13.2.dev24 (2026-09-29)
1
+ ## v0.13.3.dev1 (2026-10-03)
2
+
3
+
4
+ - chore(deps): update dependency platformdirs to v4.12.2 (#255)
5
+ - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6
+
7
+ ## v0.13.3 (2026-10-01)
8
+
9
+
10
+ - fix(import): read and concatenate all tagged genres
11
+
12
+ ## v0.13.2 (2026-09-29)
2
13
 
3
14
 
4
15
  - fix(import): don't resolve mapped/symlinked drives to their UNC paths
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rekordbox-edit
3
- Version: 0.13.2.dev24
3
+ Version: 0.13.3.dev1
4
4
  Summary: Tools for managing and modifying a RekordBox library en-masse
5
5
  Project-URL: Homepage, https://github.com/jviall/rekordbox-edit
6
6
  Project-URL: Repository, https://github.com/jviall/rekordbox-edit
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rekordbox-edit"
7
- version = "0.13.2.dev24"
7
+ version = "0.13.3.dev1"
8
8
  description = "Tools for managing and modifying a RekordBox library en-masse"
9
9
  authors = [{ name = "James Viall", email= "jamesviall@pm.me"}]
10
10
  license = "MIT"
@@ -42,6 +42,9 @@ class TrackTags(TypedDict):
42
42
  bitrate: int | None
43
43
 
44
44
 
45
+ #: Joins the genres of a multi-genre file into the single name a track stores.
46
+ GENRE_SEPARATOR = "; "
47
+
45
48
  # Rekordbox FileType by mutagen's file class. MP4 splits on the codec because
46
49
  # .m4a holds either ALAC or AAC and the extension cannot tell them apart.
47
50
  _MP4_ALAC, _MP4_AAC = 6, 4
@@ -91,8 +94,17 @@ _MP4_KEYS: dict[str, tuple[str, ...]] = {
91
94
  }
92
95
 
93
96
 
94
- def _first(tags, keys) -> str | None:
95
- """The first non-empty value among `keys`, as a string.
97
+ def _text(value) -> str:
98
+ """One raw mutagen value as stripped text."""
99
+ if isinstance(value, tuple): # MP4 trkn/disk are (number, total)
100
+ value = value[0]
101
+ if isinstance(value, (bytes, bytearray)):
102
+ value = bytes(value).decode("utf-8", "replace")
103
+ return str(value).strip()
104
+
105
+
106
+ def _values(tags, keys) -> list[str]:
107
+ """Every non-empty value under the first of `keys` the file carries.
96
108
 
97
109
  A literal "COMM" key is a fallback marker: mutagen keys ID3 comment
98
110
  frames as "COMM:<description>:<language>", and the description varies
@@ -109,20 +121,31 @@ def _first(tags, keys) -> str | None:
109
121
  raw = tags[key]
110
122
  except (KeyError, TypeError):
111
123
  continue
112
- if isinstance(raw, list) and raw:
113
- value = raw[0]
114
- elif hasattr(raw, "text"): # ID3 frame; .text holds its value(s)
115
- value = raw.text[0] if raw.text else ""
124
+ if hasattr(raw, "text"): # ID3 frame; .text holds its value(s)
125
+ items = list(raw.text)
126
+ elif isinstance(raw, list):
127
+ items = raw
116
128
  else:
117
- value = raw
118
- if isinstance(value, tuple): # MP4 trkn/disk are (number, total)
119
- value = value[0]
120
- if isinstance(value, (bytes, bytearray)):
121
- value = bytes(value).decode("utf-8", "replace")
122
- text = str(value).strip()
123
- if text:
124
- return text
125
- return None
129
+ items = [raw]
130
+ values = [text for text in (_text(item) for item in items) if text]
131
+ if values:
132
+ return values
133
+ return []
134
+
135
+
136
+ def _first(tags, keys) -> str | None:
137
+ """The first non-empty value among `keys`, as a string."""
138
+ values = _values(tags, keys)
139
+ return values[0] if values else None
140
+
141
+
142
+ def _genre(tags, keys) -> str | None:
143
+ """Every genre the file lists, joined by GENRE_SEPARATOR.
144
+
145
+ A track holds one GenreID, so multiple genres collapse into one name
146
+ that Rekordbox shows, sorts, and searches as written.
147
+ """
148
+ return GENRE_SEPARATOR.join(_values(tags, keys)) or None
126
149
 
127
150
 
128
151
  def _leading_int(value: str | None) -> int | None:
@@ -199,7 +222,7 @@ def read_tags(path: str) -> TrackTags:
199
222
  "title": read.get("title") or os.path.splitext(os.path.basename(path))[0],
200
223
  "artist": read.get("artist"),
201
224
  "album": read.get("album"),
202
- "genre": read.get("genre"),
225
+ "genre": _genre(tags, keys["genre"]),
203
226
  "composer": read.get("composer"),
204
227
  "label": read.get("label"),
205
228
  "isrc": isrc,
@@ -7,7 +7,7 @@ from mutagen.id3 import COMM, TCOM, TCON, TDRC, TKEY, TPOS, TPUB, TRCK, TSRC
7
7
  from mutagen.mp3 import MP3
8
8
  from mutagen.mp4 import MP4, MP4FreeForm
9
9
 
10
- from rekordbox_edit.tags import UnreadableFile, _first, read_tags
10
+ from rekordbox_edit.tags import UnreadableFile, _first, _genre, read_tags
11
11
 
12
12
  FIXTURES = Path(__file__).resolve().parent / "e2e/fixtures/audio"
13
13
 
@@ -163,6 +163,16 @@ class TestVorbisTags:
163
163
  assert tags["track_no"] == 3
164
164
  assert tags["disc_no"] == 1
165
165
 
166
+ def test_joins_repeated_genre_comments(self, tmp_path):
167
+ """Vorbis stores a second genre as a second `genre` comment; all of
168
+ them reach the single genre a track stores."""
169
+ path = _copy(tmp_path, "01-flac-44_1k-16b.flac")
170
+ audio = FLAC(path)
171
+ audio["genre"] = ["Techno", "Electro", " "]
172
+ audio.save()
173
+
174
+ assert read_tags(path)["genre"] == "Techno; Electro"
175
+
166
176
 
167
177
  class TestID3Tags:
168
178
  """genre through disc_no plus comment: none of these appear on the
@@ -211,9 +221,19 @@ class TestID3Tags:
211
221
  assert read_tags(path)["comment"] == "legacy note"
212
222
 
213
223
  def test_takes_the_first_value_of_a_multi_value_text_frame(self, tmp_path):
214
- """A text frame may legally carry multiple values (e.g. two genres
215
- in one TCON). Stringifying the whole frame joins them with a NUL
216
- byte; read_tags must take only the first value instead."""
224
+ """A text frame may legally carry multiple values. Stringifying the
225
+ whole frame joins them with a NUL byte; read_tags must take only the
226
+ first value instead, except for genre, which keeps all of them."""
227
+ path = _copy(tmp_path, "07-mp3-44_1k-320cbr.mp3")
228
+
229
+ audio = MP3(path)
230
+ assert audio.tags is not None
231
+ audio.tags.add(TCOM(encoding=3, text=["First Composer", "Second Composer"]))
232
+ audio.save()
233
+
234
+ assert read_tags(path)["composer"] == "First Composer"
235
+
236
+ def test_joins_the_genres_of_a_multi_value_tcon_frame(self, tmp_path):
217
237
  path = _copy(tmp_path, "07-mp3-44_1k-320cbr.mp3")
218
238
 
219
239
  audio = MP3(path)
@@ -221,7 +241,7 @@ class TestID3Tags:
221
241
  audio.tags.add(TCON(encoding=3, text=["Trance", "Progressive House"]))
222
242
  audio.save()
223
243
 
224
- assert read_tags(path)["genre"] == "Trance"
244
+ assert read_tags(path)["genre"] == "Trance; Progressive House"
225
245
 
226
246
 
227
247
  class TestFirst:
@@ -252,3 +272,11 @@ class TestFirst:
252
272
 
253
273
  def test_returns_none_when_every_key_is_empty(self):
254
274
  assert _first({"label": [""]}, ("label", "organization")) is None
275
+
276
+
277
+ class TestGenre:
278
+ def test_joins_every_value_of_the_first_populated_key(self):
279
+ assert _genre({"\xa9gen": ["House", "Disco"]}, ("\xa9gen",)) == "House; Disco"
280
+
281
+ def test_returns_none_when_no_key_holds_a_genre(self):
282
+ assert _genre({}, ("genre",)) is None
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- revision = 3
2
+ revision = 5
3
3
  requires-python = ">=3.11"
4
4
 
5
5
  [options]
@@ -884,11 +884,11 @@ wheels = [
884
884
 
885
885
  [[package]]
886
886
  name = "platformdirs"
887
- version = "4.11.12"
887
+ version = "4.12.2"
888
888
  source = { registry = "https://pypi.org/simple" }
889
- sdist = { url = "https://files.pythonhosted.org/packages/ea/dd/65804b0c2925a1c821a05502ea57517b69a073ff400d25ab9faa3a2cf012/platformdirs-4.11.12.tar.gz", hash = "sha256:e8dc1cb58f1153fd7f61db1374317770baababec2480b37b8f01c6cc25b45267", size = 40016, upload-time = "2026-09-22T01:02:36.973Z" }
889
+ sdist = { url = "https://files.pythonhosted.org/packages/17/c8/721b3855fe457da514fe249247d404b9b39c5d16532278f70ebaa6acf18b/platformdirs-4.12.2.tar.gz", hash = "sha256:eab5f70271a490ef74618bb314fbb86e3c7e82fa3b9c922c2ea0e0a1a155d329", size = 59353, upload-time = "2026-09-29T18:27:56.009Z" }
890
890
  wheels = [
891
- { url = "https://files.pythonhosted.org/packages/ec/2b/69de6317fbf48865bb12aa56c9cfcfff46b3add0cd45250725d96146dce0/platformdirs-4.11.12-py3-none-any.whl", hash = "sha256:b1ba966ac76153d9985a0787ffab951e7c18416189873d4e4ddb2c8a04a0a254", size = 24976, upload-time = "2026-09-22T01:02:35.742Z" },
891
+ { url = "https://files.pythonhosted.org/packages/d0/89/446044f33aba0348d35e433f56d12206d010a5281a1df54054d4cfb82388/platformdirs-4.12.2-py3-none-any.whl", hash = "sha256:29dbf06d96c500bc6bdbce75fb0a14d63279c93b1842f97e72a135b33e856983", size = 32457, upload-time = "2026-09-29T18:27:54.43Z" },
892
892
  ]
893
893
 
894
894
  [[package]]
@@ -1274,7 +1274,7 @@ wheels = [
1274
1274
 
1275
1275
  [[package]]
1276
1276
  name = "rekordbox-edit"
1277
- version = "0.13.2.dev24"
1277
+ version = "0.13.3.dev1"
1278
1278
  source = { editable = "." }
1279
1279
  dependencies = [
1280
1280
  { name = "click" },