rekordbox-edit 0.13.1.dev23__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.dev23 → rekordbox_edit-0.13.2.dev24}/CHANGELOG.md +2 -1
  2. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/PKG-INFO +1 -1
  3. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/commands/edit.md +2 -0
  4. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/pyproject.toml +1 -1
  5. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_field_handlers.py +7 -1
  6. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/query.py +34 -3
  7. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_field_handlers.py +30 -0
  8. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_query.py +58 -1
  9. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/uv.lock +1 -1
  10. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.agent-style/RULES.md +0 -0
  11. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.agent-style/claude-code.md +0 -0
  12. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/build-release-notes/action.yml +0 -0
  13. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/build-release-notes/build_release_notes.py +0 -0
  14. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/commit-check/action.yml +0 -0
  15. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/commitizen-bump/action.yml +0 -0
  16. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/commitizen-bump/commitizen-bump.sh +0 -0
  17. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/e2e/action.yml +0 -0
  18. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/install/action.yml +0 -0
  19. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/lint/action.yml +0 -0
  20. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/actions/test/action.yml +0 -0
  21. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/workflows/cd.yml +0 -0
  22. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/workflows/ci.yml +0 -0
  23. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/workflows/publish.yml +0 -0
  24. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.github/workflows/release.yml +0 -0
  25. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.gitignore +0 -0
  26. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.pre-commit-config.yaml +0 -0
  27. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.python-version +0 -0
  28. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/.readthedocs.yaml +0 -0
  29. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/AGENTS.md +0 -0
  30. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/CLAUDE.md +0 -0
  31. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/CONTRIBUTING.md +0 -0
  32. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/LICENSE +0 -0
  33. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/Makefile +0 -0
  34. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/README.md +0 -0
  35. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/codecov.yml +0 -0
  36. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docker-compose.yml +0 -0
  37. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/api.md +0 -0
  38. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/commands/convert.md +0 -0
  39. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/commands/import.md +0 -0
  40. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/commands/remove.md +0 -0
  41. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/commands/search.md +0 -0
  42. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/faqs.md +0 -0
  43. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/filtering.md +0 -0
  44. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/index.md +0 -0
  45. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/docs/stylesheets/extra.css +0 -0
  46. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/mkdocs.yml +0 -0
  47. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/__init__.py +0 -0
  48. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/_tag_fields.py +0 -0
  49. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/__init__.py +0 -0
  50. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_anlz.py +0 -0
  51. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_convert.py +0 -0
  52. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_edit.py +0 -0
  53. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_import.py +0 -0
  54. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_relations.py +0 -0
  55. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_remove.py +0 -0
  56. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_search.py +0 -0
  57. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/api/_utils.py +0 -0
  58. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/__init__.py +0 -0
  59. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_click.py +0 -0
  60. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_progress.py +0 -0
  61. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/_utils.py +0 -0
  62. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/convert.py +0 -0
  63. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/edit.py +0 -0
  64. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/import_.py +0 -0
  65. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/main.py +0 -0
  66. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/remove.py +0 -0
  67. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/cli/search.py +0 -0
  68. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/display.py +0 -0
  69. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/errors.py +0 -0
  70. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/locking.py +0 -0
  71. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/logger.py +0 -0
  72. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/models.py +0 -0
  73. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/tags.py +0 -0
  74. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/rekordbox_edit/utils.py +0 -0
  75. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/renovate.json5 +0 -0
  76. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/README.md +0 -0
  77. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/beets-plugin-integration.md +0 -0
  78. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/decisions/converted-original-disposition.md +0 -0
  79. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/convert-repoint.txt +0 -0
  80. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/event-order.txt +0 -0
  81. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/file-level-encode.txt +0 -0
  82. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/id-stability.txt +0 -0
  83. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/evidence/media-field-roundtrip.txt +0 -0
  84. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/convert_repoint.py +0 -0
  85. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/event_probe.py +0 -0
  86. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/file_level_encode.py +0 -0
  87. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/id_stability.py +0 -0
  88. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/beets-plugin-integration/scripts/media_field_roundtrip.py +0 -0
  89. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/convert-export-impact-test-plan.md +0 -0
  90. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/convert-export-impact.md +0 -0
  91. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-00-baseline.json +0 -0
  92. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-10-postconvert.json +0 -0
  93. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r1-20-postexport.json +0 -0
  94. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2-00-baseline.json +0 -0
  96. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-00-baseline.json +0 -0
  97. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-10-deviceedit.json +0 -0
  98. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r2b-30-postsync.json +0 -0
  99. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-00-baseline.json +0 -0
  100. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-10-deviceedit.json +0 -0
  101. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/evidence/export-r3-40-resync.json +0 -0
  102. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/scripts/export_diff.py +0 -0
  141. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-export-impact/scripts/export_snapshot.py +0 -0
  142. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-experiment2.md +0 -0
  144. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact-verification.md +0 -0
  146. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/convert-anlz-cue-impact.md +0 -0
  147. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/decisions/convert-and-reanalysis-impact.md +0 -0
  148. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/decisions/convert-helper-structure.md +0 -0
  149. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/01-inventory.txt +0 -0
  150. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/02-cue-schema.txt +0 -0
  151. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/04-anlz-deep.txt +0 -0
  153. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/05-census.txt +0 -0
  154. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/06-content-columns.txt +0 -0
  155. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/07-analysis-flags.txt +0 -0
  156. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/exp2-00-pvb2-origin.txt +0 -0
  157. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-00-zero.json +0 -0
  158. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-01.json +0 -0
  165. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-02.json +0 -0
  166. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-03.json +0 -0
  167. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-04.json +0 -0
  168. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-high-05.json +0 -0
  169. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-01.json +0 -0
  173. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-02.json +0 -0
  174. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-03.json +0 -0
  175. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-04.json +0 -0
  176. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-05.json +0 -0
  177. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-174954387-normal-06.json +0 -0
  178. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-00-baseline.json +0 -0
  182. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postanalyze.json +0 -0
  183. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205157376-aiff-postconv.json +0 -0
  184. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-00-baseline.json +0 -0
  188. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postanalyze.json +0 -0
  189. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postconv.json +0 -0
  190. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-aiff-postopen.json +0 -0
  191. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-flac-postconv.json +0 -0
  195. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postanalyze.json +0 -0
  196. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-205795680-mp3-postconv.json +0 -0
  197. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-00-baseline.json +0 -0
  198. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-locked.json +0 -0
  199. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-mp3-postconv.json +0 -0
  200. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-postlock.json +0 -0
  202. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-230928195-prelock.json +0 -0
  203. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-00-zero.json +0 -0
  207. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-01.json +0 -0
  214. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-02.json +0 -0
  215. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-03.json +0 -0
  216. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-04.json +0 -0
  217. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-high-05.json +0 -0
  218. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-01.json +0 -0
  222. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-02.json +0 -0
  223. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-03.json +0 -0
  224. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-04.json +0 -0
  225. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-05.json +0 -0
  226. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-06.json +0 -0
  227. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-27790898-normal-locked.json +0 -0
  228. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-baseline.json +0 -0
  234. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postanalyze.json +0 -0
  235. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/evidence/subject-7691309-pvb2-postconv.json +0 -0
  236. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/README.md +0 -0
  237. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/analysis_flags.py +0 -0
  238. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/anlz_census.py +0 -0
  239. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/anlz_deep.py +0 -0
  240. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/content_columns.py +0 -0
  241. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/cue_fields_by_format.py +0 -0
  242. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/cue_schema.py +0 -0
  243. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/grid_drift.py +0 -0
  244. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/inventory.py +0 -0
  245. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/pvb2_origin.py +0 -0
  246. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/reset_fresh_to_zero.py +0 -0
  247. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/restore_fixtures.sh +0 -0
  248. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-reanalysis-impact/scripts/row_snapshot.py +0 -0
  249. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/convert-thread-scaling.md +0 -0
  250. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/evidence/thread-scaling.txt +0 -0
  251. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/_sources.py +0 -0
  252. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/format_scaling.py +0 -0
  253. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/shipped_path_scaling.py +0 -0
  254. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/convert-thread-scaling/scripts/write_cost.py +0 -0
  255. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/database-concurrency.md +0 -0
  256. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/evidence/plan-apply-probes.txt +0 -0
  257. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/evidence/usn-spikes.txt +0 -0
  258. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/plan-apply-window.md +0 -0
  259. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/block_reservation.py +0 -0
  260. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/concurrent_increment.py +0 -0
  261. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/identity_probe.py +0 -0
  262. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/membership_probe.py +0 -0
  263. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/snapshot_probe.py +0 -0
  264. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/scripts/wal_snapshot.py +0 -0
  265. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/database-concurrency/usn-maintenance.md +0 -0
  266. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/decisions/edit-field-handlers.md +0 -0
  267. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/edit-relational-fields-test-plan.md +0 -0
  268. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/edit-relational-fields.md +0 -0
  269. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/evidence/rel-145166719-e0-census.json +0 -0
  274. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/scripts/relational_diff.py +0 -0
  287. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/edit-relational-fields/scripts/relational_snapshot.py +0 -0
  288. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/file-types/README.md +0 -0
  289. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/file-types/decisions/unknown-file-types.md +0 -0
  290. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/column-coverage-gig.json +0 -0
  292. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/datecreated-source-gig.json +0 -0
  293. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/filetype-searchstr-gig.json +0 -0
  294. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/evidence/filetype-searchstr-local.json +0 -0
  295. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/import-track-row-shape.md +0 -0
  298. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/column_coverage.py +0 -0
  299. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/datecreated_source.py +0 -0
  300. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/filetype_and_searchstr.py +0 -0
  301. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/import_row_shape.py +0 -0
  302. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/import-track-row-shape/scripts/tag_key_mapping.py +0 -0
  303. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/decisions/remove-command-behavior.md +0 -0
  304. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/remove-track-impact-test-plan.md +0 -0
  324. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/remove-track-impact.md +0 -0
  325. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/build_fixtures.py +0 -0
  326. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/removal_diff.py +0 -0
  327. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/removal_snapshot.py +0 -0
  328. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/remove-track-impact/scripts/restore.sh +0 -0
  329. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/shared/scripts/subject_diff.py +0 -0
  330. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/research/shared/scripts/subject_snapshot.py +0 -0
  331. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/ruff.toml +0 -0
  332. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/__init__.py +0 -0
  333. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/anlz_helpers.py +0 -0
  334. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/__init__.py +0 -0
  335. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/conftest.py +0 -0
  336. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_anlz.py +0 -0
  337. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_convert.py +0 -0
  338. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_edit.py +0 -0
  339. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_import.py +0 -0
  340. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_package.py +0 -0
  341. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_relations.py +0 -0
  342. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_remove.py +0 -0
  343. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_search.py +0 -0
  344. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/api/test_utils.py +0 -0
  345. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/__init__.py +0 -0
  346. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_convert.py +0 -0
  347. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_edit.py +0 -0
  348. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_import.py +0 -0
  349. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_locking.py +0 -0
  350. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_main.py +0 -0
  351. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_progress.py +0 -0
  352. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_remove.py +0 -0
  353. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_search.py +0 -0
  354. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/cli/test_utils.py +0 -0
  355. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/conftest.py +0 -0
  356. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/Dockerfile +0 -0
  357. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__init__.py +0 -0
  358. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/__snapshots__/test_journey.ambr +0 -0
  361. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/conftest.py +0 -0
  362. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/01-flac-44_1k-16b.flac +0 -0
  363. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/02-flac-96k-24b.flac +0 -0
  364. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/03-alac-44_1k-16b.m4a +0 -0
  365. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/04-alac-48k-24b.m4a +0 -0
  366. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/05-aiff-44_1k-16b.aiff +0 -0
  367. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/06-wav-96k-24b.wav +0 -0
  368. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/07-mp3-44_1k-320cbr.mp3 +0 -0
  369. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/08-mp3-44_1k-v0vbr.mp3 +0 -0
  370. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/audio/09-aac-44_1k-256kbps.m4a +0 -0
  371. {rekordbox_edit-0.13.1.dev23 → 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.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/macos/master.6.8.6.db +0 -0
  373. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/fixtures/windows/master.6.8.6.db +0 -0
  374. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_edit_fields.py +0 -0
  375. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_import.py +0 -0
  376. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_journey.py +0 -0
  377. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/e2e/test_remove.py +0 -0
  378. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_display.py +0 -0
  379. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_locking.py +0 -0
  380. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_logger.py +0 -0
  381. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_models.py +0 -0
  382. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_tag_fields.py +0 -0
  383. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_tags.py +0 -0
  384. {rekordbox_edit-0.13.1.dev23 → rekordbox_edit-0.13.2.dev24}/tests/test_utils.py +0 -0
@@ -1,6 +1,7 @@
1
- ## v0.13.1.dev23 (2026-09-28)
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
4
5
  - chore(deps): update dependency ruff to v0.16.9 (#251)
5
6
  - Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6
7
  - chore(deps): update pre-commit hook astral-sh/ruff-pre-commit to v0.16.9 (#252)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: rekordbox-edit
3
- Version: 0.13.1.dev23
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.dev23"
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.dev23"
1277
+ version = "0.13.2.dev24"
1278
1278
  source = { editable = "." }
1279
1279
  dependencies = [
1280
1280
  { name = "click" },