rekordbox-edit 0.13.1.dev21__tar.gz → 0.13.2.dev24__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.1.dev21 → rekordbox_edit-0.13.2.dev24}/.pre-commit-config.yaml +1 -1
  2. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/CHANGELOG.md +6 -1
  3. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/PKG-INFO +1 -1
  4. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/commands/edit.md +2 -0
  5. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/pyproject.toml +1 -1
  6. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_field_handlers.py +7 -1
  7. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/query.py +34 -3
  8. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_field_handlers.py +30 -0
  9. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_query.py +58 -1
  10. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/uv.lock +22 -22
  11. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.agent-style/RULES.md +0 -0
  12. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.agent-style/claude-code.md +0 -0
  13. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/build-release-notes/action.yml +0 -0
  14. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/build-release-notes/build_release_notes.py +0 -0
  15. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/commit-check/action.yml +0 -0
  16. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/commitizen-bump/action.yml +0 -0
  17. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/commitizen-bump/commitizen-bump.sh +0 -0
  18. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/e2e/action.yml +0 -0
  19. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/install/action.yml +0 -0
  20. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/lint/action.yml +0 -0
  21. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/actions/test/action.yml +0 -0
  22. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/workflows/cd.yml +0 -0
  23. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/workflows/ci.yml +0 -0
  24. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/workflows/publish.yml +0 -0
  25. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.github/workflows/release.yml +0 -0
  26. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.gitignore +0 -0
  27. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.python-version +0 -0
  28. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/.readthedocs.yaml +0 -0
  29. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/AGENTS.md +0 -0
  30. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/CLAUDE.md +0 -0
  31. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/CONTRIBUTING.md +0 -0
  32. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/LICENSE +0 -0
  33. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/Makefile +0 -0
  34. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/README.md +0 -0
  35. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/codecov.yml +0 -0
  36. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docker-compose.yml +0 -0
  37. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/api.md +0 -0
  38. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/commands/convert.md +0 -0
  39. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/commands/import.md +0 -0
  40. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/commands/remove.md +0 -0
  41. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/commands/search.md +0 -0
  42. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/faqs.md +0 -0
  43. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/filtering.md +0 -0
  44. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/index.md +0 -0
  45. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/docs/stylesheets/extra.css +0 -0
  46. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/mkdocs.yml +0 -0
  47. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/__init__.py +0 -0
  48. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/_tag_fields.py +0 -0
  49. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/__init__.py +0 -0
  50. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_anlz.py +0 -0
  51. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_convert.py +0 -0
  52. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_edit.py +0 -0
  53. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_import.py +0 -0
  54. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_relations.py +0 -0
  55. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_remove.py +0 -0
  56. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_search.py +0 -0
  57. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_utils.py +0 -0
  58. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/__init__.py +0 -0
  59. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_click.py +0 -0
  60. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_progress.py +0 -0
  61. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_utils.py +0 -0
  62. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/convert.py +0 -0
  63. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/edit.py +0 -0
  64. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/import_.py +0 -0
  65. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/main.py +0 -0
  66. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/remove.py +0 -0
  67. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/search.py +0 -0
  68. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/display.py +0 -0
  69. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/errors.py +0 -0
  70. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/locking.py +0 -0
  71. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/logger.py +0 -0
  72. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/models.py +0 -0
  73. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/tags.py +0 -0
  74. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/utils.py +0 -0
  75. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/renovate.json5 +0 -0
  76. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/README.md +0 -0
  77. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/beets-plugin-integration.md +0 -0
  78. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/decisions/converted-original-disposition.md +0 -0
  79. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/convert-repoint.txt +0 -0
  80. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/event-order.txt +0 -0
  81. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/file-level-encode.txt +0 -0
  82. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/id-stability.txt +0 -0
  83. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/media-field-roundtrip.txt +0 -0
  84. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/convert_repoint.py +0 -0
  85. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/event_probe.py +0 -0
  86. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/file_level_encode.py +0 -0
  87. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/id_stability.py +0 -0
  88. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/media_field_roundtrip.py +0 -0
  89. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/convert-export-impact-test-plan.md +0 -0
  90. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/convert-export-impact.md +0 -0
  91. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-00-baseline.json +0 -0
  92. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-10-postconvert.json +0 -0
  93. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-20-postexport.json +0 -0
  94. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-21-postexport-full.json +0 -0
  95. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2-00-baseline.json +0 -0
  96. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-00-baseline.json +0 -0
  97. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-10-deviceedit.json +0 -0
  98. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-30-postsync.json +0 -0
  99. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-00-baseline.json +0 -0
  100. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-10-deviceedit.json +0 -0
  101. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-40-resync.json +0 -0
  102. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-41-reexport-full.json +0 -0
  103. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-11317782-r3-20-postconvert.json +0 -0
  104. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-11317782-r3-30-postsync.json +0 -0
  105. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r1-00-baseline.json +0 -0
  106. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r1-10-postconvert.json +0 -0
  107. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r1-20-postexport.json +0 -0
  108. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r2-00-baseline.json +0 -0
  109. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r2b-00-baseline.json +0 -0
  110. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r2b-00-lib.json +0 -0
  111. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r2b-20-postconvert.json +0 -0
  112. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-121715696-r2b-30-postsync.json +0 -0
  113. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-140193439-r3-20-postconvert.json +0 -0
  114. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-140193439-r3-30-postsync.json +0 -0
  115. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r1-00-baseline.json +0 -0
  116. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r1-10-postconvert.json +0 -0
  117. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r1-20-postexport.json +0 -0
  118. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r2-00-baseline.json +0 -0
  119. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r2b-00-baseline.json +0 -0
  120. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r2b-00-lib.json +0 -0
  121. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r2b-20-postconvert.json +0 -0
  122. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-258421826-r2b-30-postsync.json +0 -0
  123. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-268012584-r3-20-postconvert.json +0 -0
  124. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-268012584-r3-30-postsync.json +0 -0
  125. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r1-00-baseline.json +0 -0
  126. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r1-10-postconvert.json +0 -0
  127. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r1-20-postexport.json +0 -0
  128. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r2-00-baseline.json +0 -0
  129. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r2b-00-baseline.json +0 -0
  130. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r2b-00-lib.json +0 -0
  131. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r2b-20-postconvert.json +0 -0
  132. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-53013048-r2b-30-postsync.json +0 -0
  133. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r1-00-baseline.json +0 -0
  134. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r1-10-postconvert.json +0 -0
  135. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r1-20-postexport.json +0 -0
  136. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r2-00-baseline.json +0 -0
  137. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r2b-00-baseline.json +0 -0
  138. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r2b-20-postconvert.json +0 -0
  139. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/subject-54793376-r2b-30-postsync.json +0 -0
  140. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/scripts/export_diff.py +0 -0
  141. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/scripts/export_snapshot.py +0 -0
  142. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2-plan.md +0 -0
  143. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2.md +0 -0
  144. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-test-plan.md +0 -0
  145. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-verification.md +0 -0
  146. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact.md +0 -0
  147. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/decisions/convert-and-reanalysis-impact.md +0 -0
  148. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/decisions/convert-helper-structure.md +0 -0
  149. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/01-inventory.txt +0 -0
  150. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/02-cue-schema.txt +0 -0
  151. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/03-cue-fields-by-format.txt +0 -0
  152. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/04-anlz-deep.txt +0 -0
  153. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/05-census.txt +0 -0
  154. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/06-content-columns.txt +0 -0
  155. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/07-analysis-flags.txt +0 -0
  156. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/exp2-00-pvb2-origin.txt +0 -0
  157. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-00-zero.json +0 -0
  158. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-01.json +0 -0
  159. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-02.json +0 -0
  160. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-high-03.json +0 -0
  161. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-01.json +0 -0
  162. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-02.json +0 -0
  163. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-dyn-normal-03.json +0 -0
  164. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-01.json +0 -0
  165. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-02.json +0 -0
  166. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-03.json +0 -0
  167. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-04.json +0 -0
  168. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-05.json +0 -0
  169. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-01.json +0 -0
  170. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-02.json +0 -0
  171. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-auto-03.json +0 -0
  172. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-01.json +0 -0
  173. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-02.json +0 -0
  174. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-03.json +0 -0
  175. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-04.json +0 -0
  176. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-05.json +0 -0
  177. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-06.json +0 -0
  178. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-then-high.json +0 -0
  179. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-unlocked-ref.json +0 -0
  180. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-nth-mid-normal.json +0 -0
  181. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-00-baseline.json +0 -0
  182. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postanalyze.json +0 -0
  183. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postconv.json +0 -0
  184. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-baseline.json +0 -0
  185. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze.json +0 -0
  186. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-combined-ctrl-postanalyze2.json +0 -0
  187. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-00-baseline.json +0 -0
  188. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postanalyze.json +0 -0
  189. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postconv.json +0 -0
  190. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postopen.json +0 -0
  191. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-baseline.json +0 -0
  192. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze.json +0 -0
  193. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-ctrl-postanalyze2.json +0 -0
  194. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-postconv.json +0 -0
  195. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postanalyze.json +0 -0
  196. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postconv.json +0 -0
  197. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-00-baseline.json +0 -0
  198. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-locked.json +0 -0
  199. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-postconv.json +0 -0
  200. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-unlocked-reanalyze.json +0 -0
  201. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-postlock.json +0 -0
  202. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-prelock.json +0 -0
  203. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-baseline.json +0 -0
  204. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postanalyze.json +0 -0
  205. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-231283665-iso-rate-postconv.json +0 -0
  206. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-00-zero.json +0 -0
  207. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-01.json +0 -0
  208. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-02.json +0 -0
  209. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-high-03.json +0 -0
  210. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-01.json +0 -0
  211. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-02.json +0 -0
  212. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-dyn-normal-03.json +0 -0
  213. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-01.json +0 -0
  214. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-02.json +0 -0
  215. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-03.json +0 -0
  216. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-04.json +0 -0
  217. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-05.json +0 -0
  218. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-01.json +0 -0
  219. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-02.json +0 -0
  220. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-auto-03.json +0 -0
  221. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-01.json +0 -0
  222. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-02.json +0 -0
  223. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-03.json +0 -0
  224. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-04.json +0 -0
  225. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-05.json +0 -0
  226. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-06.json +0 -0
  227. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-locked.json +0 -0
  228. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-then-high.json +0 -0
  229. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-nth-mid-normal.json +0 -0
  230. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-baseline.json +0 -0
  231. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postanalyze.json +0 -0
  232. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-34178159-iso-depth-postconv.json +0 -0
  233. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-baseline.json +0 -0
  234. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postanalyze.json +0 -0
  235. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postconv.json +0 -0
  236. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/README.md +0 -0
  237. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/analysis_flags.py +0 -0
  238. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/anlz_census.py +0 -0
  239. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/anlz_deep.py +0 -0
  240. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/content_columns.py +0 -0
  241. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/cue_fields_by_format.py +0 -0
  242. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/cue_schema.py +0 -0
  243. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/grid_drift.py +0 -0
  244. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/inventory.py +0 -0
  245. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/pvb2_origin.py +0 -0
  246. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/reset_fresh_to_zero.py +0 -0
  247. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/restore_fixtures.sh +0 -0
  248. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/row_snapshot.py +0 -0
  249. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/convert-thread-scaling.md +0 -0
  250. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/evidence/thread-scaling.txt +0 -0
  251. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/_sources.py +0 -0
  252. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/format_scaling.py +0 -0
  253. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/shipped_path_scaling.py +0 -0
  254. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/write_cost.py +0 -0
  255. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/database-concurrency.md +0 -0
  256. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/evidence/plan-apply-probes.txt +0 -0
  257. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/evidence/usn-spikes.txt +0 -0
  258. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/plan-apply-window.md +0 -0
  259. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/block_reservation.py +0 -0
  260. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/concurrent_increment.py +0 -0
  261. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/identity_probe.py +0 -0
  262. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/membership_probe.py +0 -0
  263. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/snapshot_probe.py +0 -0
  264. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/wal_snapshot.py +0 -0
  265. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/usn-maintenance.md +0 -0
  266. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/decisions/edit-field-handlers.md +0 -0
  267. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/edit-relational-fields-test-plan.md +0 -0
  268. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/edit-relational-fields.md +0 -0
  269. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-112264610-e2-00-baseline.json +0 -0
  270. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-112264610-e2-10-reuse.json +0 -0
  271. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-141833798-e3b-00-baseline.json +0 -0
  272. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-141833798-e3b-10-newalbum.json +0 -0
  273. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-145166719-e0-census.json +0 -0
  274. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-176388182-e1-00-baseline.json +0 -0
  275. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-176388182-e1-10-reuse.json +0 -0
  276. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-183309432-e4-00-baseline.json +0 -0
  277. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-183309432-e4-10-orphaned.json +0 -0
  278. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-47413782-v-00-baseline.json +0 -0
  279. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-47413782-v-10-reuse.json +0 -0
  280. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-50395296-v-00-baseline.json +0 -0
  281. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-50395296-v-10-reuse.json +0 -0
  282. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-57701453-e3-00-baseline.json +0 -0
  283. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-57701453-e3-10-diffartist.json +0 -0
  284. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-71974950-v-00-baseline.json +0 -0
  285. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-71974950-v-10-reuse.json +0 -0
  286. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/scripts/relational_diff.py +0 -0
  287. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/scripts/relational_snapshot.py +0 -0
  288. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/file-types/README.md +0 -0
  289. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/file-types/decisions/unknown-file-types.md +0 -0
  290. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/decisions/commit-semantics-and-usn.md +0 -0
  291. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/column-coverage-gig.json +0 -0
  292. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/datecreated-source-gig.json +0 -0
  293. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/filetype-searchstr-gig.json +0 -0
  294. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/filetype-searchstr-local.json +0 -0
  295. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/import-row-shape-gig.json +0 -0
  296. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/tag-key-mapping-gig.json +0 -0
  297. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/import-track-row-shape.md +0 -0
  298. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/column_coverage.py +0 -0
  299. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/datecreated_source.py +0 -0
  300. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/filetype_and_searchstr.py +0 -0
  301. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/import_row_shape.py +0 -0
  302. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/tag_key_mapping.py +0 -0
  303. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/decisions/remove-command-behavior.md +0 -0
  304. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-109570093-r8-00-imported.json +0 -0
  305. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-109570093-r8-10-analyzed.json +0 -0
  306. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-114745319-r1-00-baseline.json +0 -0
  307. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-114745319-r1-10-removed.json +0 -0
  308. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-120331280-f6-00-baseline.json +0 -0
  309. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-120331280-f6-10-control.json +0 -0
  310. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-137975518-f3-00-baseline.json +0 -0
  311. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-137975518-f3-10-control.json +0 -0
  312. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-139425629-r6-00-baseline.json +0 -0
  313. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-139425629-r6-10-removed.json +0 -0
  314. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-14241481-r5-00-baseline.json +0 -0
  315. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-14241481-r5-10-removed.json +0 -0
  316. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-143461275-r7-01-folder-art.json +0 -0
  317. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-265892207-r3-00-baseline.json +0 -0
  318. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-265892207-r3-10-removed.json +0 -0
  319. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-265892207-r4-10-playlist-only.json +0 -0
  320. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-36337051-r7-00-folder-art.json +0 -0
  321. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-74039842-r8-00-imported.json +0 -0
  322. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/evidence/rm-74039842-r8-10-analyzed.json +0 -0
  323. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/remove-track-impact-test-plan.md +0 -0
  324. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/remove-track-impact.md +0 -0
  325. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/build_fixtures.py +0 -0
  326. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/removal_diff.py +0 -0
  327. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/removal_snapshot.py +0 -0
  328. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/restore.sh +0 -0
  329. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/shared/scripts/subject_diff.py +0 -0
  330. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/research/shared/scripts/subject_snapshot.py +0 -0
  331. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/ruff.toml +0 -0
  332. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/__init__.py +0 -0
  333. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/anlz_helpers.py +0 -0
  334. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/__init__.py +0 -0
  335. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/conftest.py +0 -0
  336. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_anlz.py +0 -0
  337. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_convert.py +0 -0
  338. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_edit.py +0 -0
  339. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_import.py +0 -0
  340. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_package.py +0 -0
  341. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_relations.py +0 -0
  342. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_remove.py +0 -0
  343. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_search.py +0 -0
  344. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/api/test_utils.py +0 -0
  345. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/__init__.py +0 -0
  346. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_convert.py +0 -0
  347. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_edit.py +0 -0
  348. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_import.py +0 -0
  349. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_locking.py +0 -0
  350. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_main.py +0 -0
  351. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_progress.py +0 -0
  352. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_remove.py +0 -0
  353. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_search.py +0 -0
  354. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_utils.py +0 -0
  355. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/conftest.py +0 -0
  356. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/Dockerfile +0 -0
  357. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__init__.py +0 -0
  358. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[macos].json +0 -0
  359. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__snapshots__/test_journey/test_search_full_json_snapshot[windows].json +0 -0
  360. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__snapshots__/test_journey.ambr +0 -0
  361. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/conftest.py +0 -0
  362. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/01-flac-44_1k-16b.flac +0 -0
  363. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/02-flac-96k-24b.flac +0 -0
  364. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/03-alac-44_1k-16b.m4a +0 -0
  365. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/04-alac-48k-24b.m4a +0 -0
  366. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/05-aiff-44_1k-16b.aiff +0 -0
  367. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/06-wav-96k-24b.wav +0 -0
  368. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/07-mp3-44_1k-320cbr.mp3 +0 -0
  369. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/08-mp3-44_1k-v0vbr.mp3 +0 -0
  370. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/09-aac-44_1k-256kbps.m4a +0 -0
  371. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/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.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/macos/master.6.8.6.db +0 -0
  373. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/windows/master.6.8.6.db +0 -0
  374. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_edit_fields.py +0 -0
  375. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_import.py +0 -0
  376. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_journey.py +0 -0
  377. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_remove.py +0 -0
  378. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_display.py +0 -0
  379. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_locking.py +0 -0
  380. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_logger.py +0 -0
  381. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_models.py +0 -0
  382. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_tag_fields.py +0 -0
  383. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_tags.py +0 -0
  384. {rekordbox_edit-0.13.1.dev21 → rekordbox_edit-0.13.2.dev24}/tests/test_utils.py +0 -0
@@ -32,7 +32,7 @@ repos:
32
32
  files: pyproject\.toml$
33
33
  pass_filenames: false
34
34
  - repo: https://github.com/astral-sh/ruff-pre-commit
35
- rev: v0.16.8
35
+ rev: v0.16.9
36
36
  hooks:
37
37
  - id: ruff-check
38
38
  args: [--fix]
@@ -1,6 +1,11 @@
1
- ## v0.13.1.dev21 (2026-09-27)
1
+ ## v0.13.2.dev24 (2026-09-29)
2
2
 
3
3
 
4
+ - fix(import): don't resolve mapped/symlinked drives to their UNC paths
5
+ - chore(deps): update dependency ruff to v0.16.9 (#251)
6
+ - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
7
+ - chore(deps): update pre-commit hook astral-sh/ruff-pre-commit to v0.16.9 (#252)
8
+ - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4
9
  - chore(deps): update dependency ty to v0.0.84 (#250)
5
10
  - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6
11
  - chore(deps): update dependency commitizen to v4.19.0 (#248)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rekordbox-edit
3
- Version: 0.13.1.dev21
3
+ Version: 0.13.2.dev24
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
@@ -52,6 +52,8 @@ rbe edit --title "Teh" Title --match "Teh" --replace "The"
52
52
  - When the new file's size differs from the recorded `FileSize`, the file is probed and all of `FileType`, `SampleRate`, `BitDepth`, `BitRate`, `FileSize`, and `Length` are rewritten to match it.
53
53
  - When the file name changes, the `PPTH` path tag inside the track's analysis (ANLZ) files is rewritten to match. All other analysis data is left alone.
54
54
 
55
+ A `--replace` path is resolved just like [`import`](import.md) does. It resolves to an absolute path, follows any symlinks, and normalizes to forward-slashes.
56
+
55
57
  By default edits will be skipped in the following cases:
56
58
 
57
59
  - The new path's file does not exist.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "rekordbox-edit"
7
- version = "0.13.1.dev21"
7
+ version = "0.13.2.dev24"
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"
@@ -22,6 +22,7 @@ from rekordbox_edit.api._relations import (
22
22
  from rekordbox_edit.api._utils import _sync_audio_columns, _update_anlz_paths
23
23
  from rekordbox_edit.errors import DependencyMissingError
24
24
  from rekordbox_edit.models import EditRequest, SkipReason
25
+ from rekordbox_edit.query import normalize_path
25
26
  from rekordbox_edit.utils import (
26
27
  AudioInfo,
27
28
  get_audio_info,
@@ -265,7 +266,12 @@ class FolderPathField(FieldHandler):
265
266
  new_value = _replace(current, args)
266
267
  if new_value is None:
267
268
  return None
268
- return new_value.replace("\\", "/")
269
+ if args.match_pattern is not None:
270
+ # --match rewrites stored paths in bulk, routinely onto a drive
271
+ # this machine has not mounted. Resolving those against the local
272
+ # filesystem would rewrite the very prefix the caller just set.
273
+ return new_value.replace("\\", "/")
274
+ return normalize_path(new_value)
269
275
 
270
276
  def validate_track(self, db, content, new_value, args):
271
277
  if not os.path.exists(new_value):
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  import os
3
- from pathlib import Path
3
+ from pathlib import Path, PurePath, PureWindowsPath
4
4
  from collections.abc import Collection
5
5
  from typing import List, Literal, Tuple, Union
6
6
 
@@ -342,8 +342,39 @@ def get_filtered_content(
342
342
  def normalize_path(path: str) -> str:
343
343
  """A path in the form Rekordbox stores: absolute, symlinks resolved,
344
344
  forward-slashed. Rekordbox records the resolved form, so /tmp becomes
345
- /private/tmp on macOS."""
346
- return Path(path).resolve().as_posix()
345
+ /private/tmp on macOS. A Windows drive letter survives resolution, since
346
+ Rekordbox cannot open the UNC share behind a mapped network drive.
347
+ """
348
+ resolved = Path(path).resolve()
349
+ # splitdrive over abspath, not over `resolved`: abspath makes a relative
350
+ # path absolute without following the mapping, so the drive letter the
351
+ # caller meant is still there to compare against. It is always "" off
352
+ # Windows, which short-circuits everything below.
353
+ drive = os.path.splitdrive(os.path.abspath(path))[0]
354
+ if not drive or drive == resolved.drive or drive.startswith("\\\\"):
355
+ return resolved.as_posix()
356
+ try:
357
+ target = Path(drive + os.sep).resolve()
358
+ except OSError as e:
359
+ _logger.debug(f"could not resolve what drive {drive} points at: {e}")
360
+ return resolved.as_posix()
361
+ return _restore_drive_letter(resolved, drive, target)
362
+
363
+
364
+ def _restore_drive_letter(resolved: PurePath, drive: str, target: PurePath) -> str:
365
+ """`resolved` moved back onto `drive`, which is mapped to `target`.
366
+
367
+ Path.resolve() follows a mapped network drive (M: -> //host/share) and a
368
+ subst drive the way it follows a symlink. Rekordbox stores and plays the
369
+ drive-letter form and cannot open the UNC share, so only the mapping is
370
+ undone; a symlink resolved deeper in the path stays resolved.
371
+ """
372
+ try:
373
+ tail = resolved.relative_to(target)
374
+ except ValueError:
375
+ _logger.debug(f"{resolved} does not sit under {target}, the target of {drive}")
376
+ return resolved.as_posix()
377
+ return PureWindowsPath(drive + "\\", tail).as_posix()
347
378
 
348
379
 
349
380
  def find_content_by_key(
@@ -1,3 +1,5 @@
1
+ import os
2
+ import platform
1
3
  from typing import get_args
2
4
  from unittest.mock import MagicMock, patch
3
5
 
@@ -13,6 +15,7 @@ from rekordbox_edit.api._field_handlers import (
13
15
  from rekordbox_edit.api._relations import RELATIONS, find_by_name, get_or_create
14
16
  from rekordbox_edit.errors import DependencyMissingError
15
17
  from rekordbox_edit.models import EditRequest, SkipReason
18
+ from rekordbox_edit.query import normalize_path
16
19
 
17
20
 
18
21
  def _artist_handler():
@@ -403,6 +406,9 @@ class TestFolderPathField:
403
406
  content = make_djmd_content_item(ID="1", FolderPath="/old/song.wav")
404
407
  assert _folder_handler().current_value(content) == "/old/song.wav"
405
408
 
409
+ @pytest.mark.skipif(
410
+ platform.system() != "Windows", reason="a backslash path is a Windows path"
411
+ )
406
412
  def test_compute_normalizes_backslashes(self):
407
413
  args = EditRequest(
408
414
  title=["x"], field="FolderPath", replace_value=r"C:\Music\song.wav"
@@ -412,6 +418,30 @@ class TestFolderPathField:
412
418
  == "C:/Music/song.wav"
413
419
  )
414
420
 
421
+ def test_compute_makes_a_wholesale_replacement_absolute(self):
422
+ """Rekordbox resolves a stored path against nothing, so a relative one
423
+ never finds its file."""
424
+ args = EditRequest(
425
+ title=["x"], field="FolderPath", replace_value="music/song.wav"
426
+ )
427
+ new_value = _folder_handler().compute_new_value("/old/song.wav", args)
428
+ assert new_value == normalize_path("music/song.wav")
429
+ assert os.path.isabs(new_value)
430
+
431
+ def test_compute_match_leaves_the_replacement_unresolved(self):
432
+ """--match retargets stored paths in bulk, often onto a drive this
433
+ machine has not mounted, so the substitution stands as written."""
434
+ args = EditRequest(
435
+ title=["x"],
436
+ field="FolderPath",
437
+ match_pattern="/old/music",
438
+ replace_value="relative/dir",
439
+ )
440
+ assert (
441
+ _folder_handler().compute_new_value("/old/music/song.wav", args)
442
+ == "relative/dir/song.wav"
443
+ )
444
+
415
445
  def test_compute_match_skips_none(self):
416
446
  # --match has no text to search when the field is empty.
417
447
  args = EditRequest(
@@ -3,7 +3,9 @@
3
3
 
4
4
  import os
5
5
  import platform
6
- from pathlib import Path
6
+ import subprocess
7
+ from contextlib import contextmanager
8
+ from pathlib import Path, PureWindowsPath
7
9
  from unittest.mock import MagicMock
8
10
 
9
11
  import pytest
@@ -17,6 +19,7 @@ from rekordbox_edit.query import (
17
19
  find_playlists_by_name,
18
20
  get_filtered_content,
19
21
  normalize_path,
22
+ _restore_drive_letter,
20
23
  )
21
24
 
22
25
 
@@ -24,6 +27,24 @@ def _compile(condition: ColumnElement[bool]) -> str:
24
27
  return str(condition.compile(compile_kwargs={"literal_binds": True}))
25
28
 
26
29
 
30
+ @contextmanager
31
+ def _subst_drive(target: Path):
32
+ """Map the first free drive letter to `target` for the duration of the
33
+ block. subst is a per-session mapping: it creates no files and leaves
34
+ nothing behind once detached."""
35
+ drive = next(
36
+ (f"{letter}:" for letter in "ZYXWV" if not os.path.exists(f"{letter}:/")),
37
+ None,
38
+ )
39
+ if drive is None:
40
+ pytest.skip("no free drive letter to map")
41
+ subprocess.run(["subst", drive, str(target)], check=True)
42
+ try:
43
+ yield drive
44
+ finally:
45
+ subprocess.run(["subst", drive, "/D"], check=True)
46
+
47
+
27
48
  class TestCollectionQuery:
28
49
  """Test the CollectionQuery class."""
29
50
 
@@ -885,6 +906,42 @@ class TestNormalizePath:
885
906
  def test_makes_relative_paths_absolute(self):
886
907
  assert os.path.isabs(normalize_path("song.flac"))
887
908
 
909
+ @pytest.mark.skipif(
910
+ platform.system() != "Windows", reason="drive letters are Windows-only"
911
+ )
912
+ def test_keeps_the_drive_letter_a_subst_drive_resolves_away(self, tmp_path):
913
+ """A mapped drive is what this guards in the field; subst stands in for
914
+ one, since Path.resolve() expands both the same way."""
915
+ track = tmp_path / "song.flac"
916
+ track.write_bytes(b"")
917
+ with _subst_drive(tmp_path) as drive:
918
+ assert normalize_path(f"{drive}/song.flac") == f"{drive}/song.flac"
919
+
920
+
921
+ class TestRestoreDriveLetter:
922
+ """The drive-letter half of normalize_path, fed the paths Windows would
923
+ produce so the assertions run on every platform."""
924
+
925
+ UNC = PureWindowsPath("//192.168.68.10/music")
926
+
927
+ def test_rewrites_a_unc_share_back_onto_the_drive(self):
928
+ resolved = self.UNC / "DJ Music/song.flac"
929
+ assert (
930
+ _restore_drive_letter(resolved, "M:", self.UNC) == "M:/DJ Music/song.flac"
931
+ )
932
+
933
+ def test_rewrites_the_share_root_itself(self):
934
+ assert _restore_drive_letter(self.UNC, "M:", self.UNC) == "M:/"
935
+
936
+ def test_keeps_a_path_outside_the_drive_target(self):
937
+ """A symlink deeper in the path can land outside the share; the
938
+ resolved form is then the only one that points at the file."""
939
+ resolved = PureWindowsPath("//other-host/backup/song.flac")
940
+ assert (
941
+ _restore_drive_letter(resolved, "M:", self.UNC)
942
+ == "//other-host/backup/song.flac"
943
+ )
944
+
888
945
 
889
946
  class TestFindContentByKey:
890
947
  @staticmethod
@@ -1274,7 +1274,7 @@ wheels = [
1274
1274
 
1275
1275
  [[package]]
1276
1276
  name = "rekordbox-edit"
1277
- version = "0.13.1.dev21"
1277
+ version = "0.13.2.dev24"
1278
1278
  source = { editable = "." }
1279
1279
  dependencies = [
1280
1280
  { name = "click" },
@@ -1371,27 +1371,27 @@ wheels = [
1371
1371
 
1372
1372
  [[package]]
1373
1373
  name = "ruff"
1374
- version = "0.16.8"
1375
- source = { registry = "https://pypi.org/simple" }
1376
- sdist = { url = "https://files.pythonhosted.org/packages/ba/78/449cb84790bd5cc3823b2652ee405a4558856e5c4195aee3a16bf7b3eb5d/ruff-0.16.8.tar.gz", hash = "sha256:9247bf92b5f04d825c8639a4fe423ec2e4222acd9222e58412b0dab7e442798b", size = 4938814, upload-time = "2026-09-16T15:54:46.688Z" }
1377
- wheels = [
1378
- { url = "https://files.pythonhosted.org/packages/ac/25/6071aabc530e9be7e2c195e8fe3f7aea2735405b6cf447212832d7811831/ruff-0.16.8-py3-none-linux_armv6l.whl", hash = "sha256:6ffbd6d87383c1edf5f6fa890f10200950240d7c1a16052a19a09d3a2307dd38", size = 10048966, upload-time = "2026-09-16T15:53:57.605Z" },
1379
- { url = "https://files.pythonhosted.org/packages/54/98/07f90ecbc74dd5fb5764f11f2bc774d6a7cffef92d2ff5f5b4e9e23c754e/ruff-0.16.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:42ed6b878ed61e3acca92f2730a17acff39286944ea82398544696366a6f925e", size = 10165498, upload-time = "2026-09-16T15:54:01.14Z" },
1380
- { url = "https://files.pythonhosted.org/packages/fe/1f/e6a712e3b47cad4a40600134105ed193cb773f618a42eb7ba323cb812cc0/ruff-0.16.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7ea781c7f2afba8c6a505ea0fb3f994020249e0c450635f5381286fea6b46170", size = 9830004, upload-time = "2026-09-16T15:54:03.998Z" },
1381
- { url = "https://files.pythonhosted.org/packages/23/f2/311a08776d75d81c7676e20b6b020ae63cbe881fcdc7a8dd64e6e18bdd93/ruff-0.16.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8efeae3bbe414a5efefda11a792dfb51ef90ac48d50c4830de2f644caf3e8659", size = 9986558, upload-time = "2026-09-16T15:54:06.804Z" },
1382
- { url = "https://files.pythonhosted.org/packages/f3/ed/37b6cb3d3ba8c73e68ae3eb1d502383beb5aa05a582bb7bb3a922f929f54/ruff-0.16.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a79b795469fef7fc6e908b218eed2eb17332afd85031db6480dc864560e69b2", size = 9877332, upload-time = "2026-09-16T15:54:09.552Z" },
1383
- { url = "https://files.pythonhosted.org/packages/22/cc/40873a8f36ad084cc540d55fcca7077264d5b13b24659e9180c176fb2b08/ruff-0.16.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fdc5563cdc50555e6fba39322850860e9267c1b3d12c26a74729d8604c3c812", size = 10507125, upload-time = "2026-09-16T15:54:12.152Z" },
1384
- { url = "https://files.pythonhosted.org/packages/c3/e4/fc91a642b78ccbab6b9477720f3644ae7a10a9bcce69a934679cd64f62bc/ruff-0.16.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34508983c70665578dab88f5223d8e6228307e1135398ca8bfc8b7e9501e282b", size = 11336694, upload-time = "2026-09-16T15:54:15.489Z" },
1385
- { url = "https://files.pythonhosted.org/packages/c2/3d/bbd2a9a600a4e73dc3e7548a249c8d1671273464b55822c6fae50f602dff/ruff-0.16.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644bb578569e0ffc575741232bd385dacdd6fbe123f1a729e7a225f54aa3957f", size = 10774448, upload-time = "2026-09-16T15:54:18.16Z" },
1386
- { url = "https://files.pythonhosted.org/packages/1a/41/d83af9879a7b6e8bf5fe16b1da0b134049d2f5d3afac12defb0897cb84bd/ruff-0.16.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15e7d226246961db9235098333caa13063906d3851136b84c2900b82f5daa1df", size = 10323796, upload-time = "2026-09-16T15:54:20.743Z" },
1387
- { url = "https://files.pythonhosted.org/packages/f5/2c/cefd07bfe914b84943ea769ade8d607bd22750b965d3228eefd7cebd15d0/ruff-0.16.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a2bf6bc3e9ebdd4449abc6f06cf64b98051a2c61cf94d2fe9596518c881f1a1e", size = 10514115, upload-time = "2026-09-16T15:54:23.497Z" },
1388
- { url = "https://files.pythonhosted.org/packages/f3/9d/76a2e26c79a23be6e6e3664c57bec9e9fc8de155cfb9e4b67ea91b64f9d7/ruff-0.16.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6ca111ba0849539165e9e59d2b442542f3c1e8060ebbdea82494f1ffbccb1e1f", size = 10072582, upload-time = "2026-09-16T15:54:26.185Z" },
1389
- { url = "https://files.pythonhosted.org/packages/2e/d4/f42edddb39668af1a559ceafa3823aedd65633a48dc9768e775485faa2c1/ruff-0.16.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:359a1e5b495448ee1e91018064382ebc86f90e8aac2fed222c7d0e4e8df85fd2", size = 9879644, upload-time = "2026-09-16T15:54:29.278Z" },
1390
- { url = "https://files.pythonhosted.org/packages/f8/d4/913e3195d95e0378786c6656945c865f534a3560e29139da4882aff630d1/ruff-0.16.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:59e8f5681349474110b24d62e93cfda6593f5fa3473446ca3705200cac1a08b9", size = 10231569, upload-time = "2026-09-16T15:54:32.036Z" },
1391
- { url = "https://files.pythonhosted.org/packages/2b/c4/8aa6ea0bdcedbd1bf87397e2fc4ed8406448ea5842f8660bc6e5f163039d/ruff-0.16.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:efa3e7a16d1baaa79957888dfdf8be9ef2e44db81cb032af06d76632ab59e773", size = 10663666, upload-time = "2026-09-16T15:54:34.838Z" },
1392
- { url = "https://files.pythonhosted.org/packages/3d/02/7f10ef4700bc223c30a3fdd10631a29830c45524b810a3c7ed947af64591/ruff-0.16.8-py3-none-win32.whl", hash = "sha256:55793ba85c69921e89be061426d91a78652d6e50317c962240922747a4eb713f", size = 10093472, upload-time = "2026-09-16T15:54:37.47Z" },
1393
- { url = "https://files.pythonhosted.org/packages/1e/5d/a509c07d714b6da88f2c518b4637cf6f1d46b074be8f0f1e5fb9ff5126fe/ruff-0.16.8-py3-none-win_amd64.whl", hash = "sha256:a6b85621fd3c81e31fc5f5add09c9c078b430db3595ca632efafdec9e64ebfaa", size = 10586899, upload-time = "2026-09-16T15:54:40.488Z" },
1394
- { url = "https://files.pythonhosted.org/packages/fe/a0/50787329e4f20bf9dc9f6230015d46ec69c51a97ace5bc202dae4755365d/ruff-0.16.8-py3-none-win_arm64.whl", hash = "sha256:d075e820af612102ce217f07cc93e69f9490b10ec13ea85fa87bd03d996cef8a", size = 10386316, upload-time = "2026-09-16T15:54:43.332Z" },
1374
+ version = "0.16.9"
1375
+ source = { registry = "https://pypi.org/simple" }
1376
+ sdist = { url = "https://files.pythonhosted.org/packages/96/bf/c935ca98e73fe8ce65b87ef08a280c0c1e85295d569228c15e87d8fdfaf1/ruff-0.16.9.tar.gz", hash = "sha256:12b625c6cfba78d285d9f48eda5f053374f1e53cb10ef17342a383750db99161", size = 4948764, upload-time = "2026-09-24T20:37:49.416Z" }
1377
+ wheels = [
1378
+ { url = "https://files.pythonhosted.org/packages/0d/26/df51322b52ee1ada7eff2d071ea09d11d5c2d1dcc9f02594f5785c4d1635/ruff-0.16.9-py3-none-linux_armv6l.whl", hash = "sha256:95e6f022090368ab3b824c36276839c53b2adf1a3f4c09fefc33dfc400f6da96", size = 10082922, upload-time = "2026-09-24T20:37:13.045Z" },
1379
+ { url = "https://files.pythonhosted.org/packages/a5/27/7bf51f5a7aa375e9f339280a303aab44ca75dc1525f1cdc5991761685b0f/ruff-0.16.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a5f27be168556594a86d2f415db0cf43f5291917849318f873c7e2791f7a8c67", size = 10236360, upload-time = "2026-09-24T20:37:16.049Z" },
1380
+ { url = "https://files.pythonhosted.org/packages/b6/63/09659283f92f02dff45809da194a70da2f688d87c55d8875c4fae3536072/ruff-0.16.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1632eb1d6197f33bd00b1acbc5b71009e89a8895c158e2d2b03a834fac964ab6", size = 9892940, upload-time = "2026-09-24T20:37:17.957Z" },
1381
+ { url = "https://files.pythonhosted.org/packages/24/58/98de1b72ec172f5f8f1731236fe21585b3998bf7dfe9fcc44ae9ba626012/ruff-0.16.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3f951b14d865d5952c89d40a5ca07e87abe24fa5453299878411e127748fb1c", size = 10032114, upload-time = "2026-09-24T20:37:19.942Z" },
1382
+ { url = "https://files.pythonhosted.org/packages/c8/7d/f1e17c54ab59d4bad1dce8ee3e22a7a1d0ef4745240decacdcf3832b5bb2/ruff-0.16.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:447fc07e1573afff7cb02803462b12b6c8ece7cf10e2cd78565fa6d7a1c0bf8d", size = 9910227, upload-time = "2026-09-24T20:37:21.872Z" },
1383
+ { url = "https://files.pythonhosted.org/packages/34/19/436f647a65075bbd3bab2668b3bdaa5120559b294694018cdcefabbbf30b/ruff-0.16.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a3e039a6a40ed976c491722b60e0ae4a4aa1a86057f540ee7a37a5d19ae9120", size = 10547484, upload-time = "2026-09-24T20:37:24.229Z" },
1384
+ { url = "https://files.pythonhosted.org/packages/03/59/38430a6bc2f6d8095447ac39625cf8b6e9344a47e6c26225c8ba1bff3ffb/ruff-0.16.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4684dded7db60aa57cb118fa158630f5feade4af5782903b6053484bdf9bd129", size = 11412367, upload-time = "2026-09-24T20:37:26.307Z" },
1385
+ { url = "https://files.pythonhosted.org/packages/c8/bd/bbb6d7fc7f208c8b8c50dd5dc8206e4cfdb1e7a8fb852606a3adf370c880/ruff-0.16.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d29c934357e45642fda2f34c0b1f4025b4a6c01e15e4bf0016879d60078a142c", size = 10869787, upload-time = "2026-09-24T20:37:28.35Z" },
1386
+ { url = "https://files.pythonhosted.org/packages/bc/b8/9c543074918061abbefc3bd139bee22de35abedb00dde0f2d27288838962/ruff-0.16.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a21713e629d3e5bdb2f5c2def1cc7f04f47fa8e1a7eb0571b4a28e1da64bc728", size = 10406494, upload-time = "2026-09-24T20:37:30.624Z" },
1387
+ { url = "https://files.pythonhosted.org/packages/35/7a/5a8851bd146e7ccf8fd4b003f6c75c11f8fbdb0e60673b45097986b6bf41/ruff-0.16.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:7baa24ef5fc8e77aa93879e1d3f43754a01ae488e869f1ae30cf431afd4d2452", size = 10590083, upload-time = "2026-09-24T20:37:32.439Z" },
1388
+ { url = "https://files.pythonhosted.org/packages/87/f0/4c3467188f23f806960b46fa76575a7cd0514c9ba90562650b71efc96980/ruff-0.16.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a41aac6230aadfaa133bdfa1614488531ffa3e0837567ae04c0da2058a9c0f9e", size = 10119151, upload-time = "2026-09-24T20:37:34.581Z" },
1389
+ { url = "https://files.pythonhosted.org/packages/15/34/5a4def5adea572ce6aea0bb64f21f928ee317b80e0db747d7979b01d7261/ruff-0.16.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:c2529fb5896d49115b0e9aa8f887490b34bbe76baf879ec2264ac59406869ce7", size = 9911544, upload-time = "2026-09-24T20:37:36.796Z" },
1390
+ { url = "https://files.pythonhosted.org/packages/62/5d/d15ebea7499eef9373318c0ee6ca127832927c6529731f6d48e18dce7ca9/ruff-0.16.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:41e3870277694177429b56406d65dfbdb2c2802c52b715edaf6a0b829c69d4ee", size = 10269884, upload-time = "2026-09-24T20:37:38.857Z" },
1391
+ { url = "https://files.pythonhosted.org/packages/d1/56/c5d3cd119ded7a3c7aba0e961b69cb3df701c91662c98ad694467d060ce1/ruff-0.16.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8adbe4e58af167f767d7b2ba5e83c42e878350796cf78c2f5e14ab9903a92588", size = 10749366, upload-time = "2026-09-24T20:37:41.042Z" },
1392
+ { url = "https://files.pythonhosted.org/packages/ac/fe/734ec7527029ac757ecf821f143c9f3fcf69149c21f53a044a899b430f5a/ruff-0.16.9-py3-none-win32.whl", hash = "sha256:0e1dbc2073624dee6618d41d0098690a7244654af746704b64759e12b6b6b385", size = 10152355, upload-time = "2026-09-24T20:37:43.025Z" },
1393
+ { url = "https://files.pythonhosted.org/packages/14/21/26e4643629b3ebb44f0a06f9c9a53058d63d989415f63a9a3c28e2ee7f22/ruff-0.16.9-py3-none-win_amd64.whl", hash = "sha256:6bd40fec8cd4c8a3d4dd589bd8ad4e6320c13c29234159bfd959a40d529d597b", size = 10592965, upload-time = "2026-09-24T20:37:44.944Z" },
1394
+ { url = "https://files.pythonhosted.org/packages/51/60/5fb1a39dbb5ae314d5f59bc7348a63c1d5c20f3cd83914c4b5cb0be31d2d/ruff-0.16.9-py3-none-win_arm64.whl", hash = "sha256:ed1a252039200f57a59eebc063b54beabea67bfbaaca0eeaa7f54b5fbcda2284", size = 10458649, upload-time = "2026-09-24T20:37:46.882Z" },
1395
1395
  ]
1396
1396
 
1397
1397
  [[package]]