azimut 0.2.2__tar.gz → 0.2.3__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 (320) hide show
  1. {azimut-0.2.2 → azimut-0.2.3}/.github/workflows/release.yml +30 -0
  2. {azimut-0.2.2 → azimut-0.2.3}/PKG-INFO +4 -2
  3. {azimut-0.2.2 → azimut-0.2.3}/README.md +3 -1
  4. {azimut-0.2.2 → azimut-0.2.3}/docs/RELEASE_NOTES.md +2 -1
  5. {azimut-0.2.2 → azimut-0.2.3}/extension/manifest.json +1 -1
  6. {azimut-0.2.2 → azimut-0.2.3}/pyproject.toml +8 -1
  7. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/__init__.py +6 -1
  8. {azimut-0.2.2 → azimut-0.2.3}/tests/test_release_gate.py +13 -2
  9. {azimut-0.2.2 → azimut-0.2.3}/uv.lock +1 -1
  10. {azimut-0.2.2 → azimut-0.2.3}/.github/workflows/ci.yml +0 -0
  11. {azimut-0.2.2 → azimut-0.2.3}/.gitignore +0 -0
  12. {azimut-0.2.2 → azimut-0.2.3}/LICENSE +0 -0
  13. {azimut-0.2.2 → azimut-0.2.3}/bench/case_baseline.py +0 -0
  14. {azimut-0.2.2 → azimut-0.2.3}/docs/IMAGERY_PROVIDERS.md +0 -0
  15. {azimut-0.2.2 → azimut-0.2.3}/docs/ONTOLOGY.md +0 -0
  16. {azimut-0.2.2 → azimut-0.2.3}/docs/SPEC.md +0 -0
  17. {azimut-0.2.2 → azimut-0.2.3}/docs/STORAGE_AND_PERFORMANCE.md +0 -0
  18. {azimut-0.2.2 → azimut-0.2.3}/docs/UI.md +0 -0
  19. {azimut-0.2.2 → azimut-0.2.3}/extension/README.md +0 -0
  20. {azimut-0.2.2 → azimut-0.2.3}/extension/background.js +0 -0
  21. {azimut-0.2.2 → azimut-0.2.3}/extension/bridge.js +0 -0
  22. {azimut-0.2.2 → azimut-0.2.3}/extension/icons/icon128.png +0 -0
  23. {azimut-0.2.2 → azimut-0.2.3}/extension/icons/icon16.png +0 -0
  24. {azimut-0.2.2 → azimut-0.2.3}/extension/icons/icon32.png +0 -0
  25. {azimut-0.2.2 → azimut-0.2.3}/extension/icons/icon48.png +0 -0
  26. {azimut-0.2.2 → azimut-0.2.3}/extension/options.html +0 -0
  27. {azimut-0.2.2 → azimut-0.2.3}/extension/options.js +0 -0
  28. {azimut-0.2.2 → azimut-0.2.3}/extension/overlay.js +0 -0
  29. {azimut-0.2.2 → azimut-0.2.3}/extension/popup.html +0 -0
  30. {azimut-0.2.2 → azimut-0.2.3}/extension/popup.js +0 -0
  31. {azimut-0.2.2 → azimut-0.2.3}/extension/ui.css +0 -0
  32. {azimut-0.2.2 → azimut-0.2.3}/frontend/e2e/app.fixture.js +0 -0
  33. {azimut-0.2.2 → azimut-0.2.3}/frontend/e2e/proof-canvas.spec.js +0 -0
  34. {azimut-0.2.2 → azimut-0.2.3}/frontend/e2e/satellite-canvas.spec.js +0 -0
  35. {azimut-0.2.2 → azimut-0.2.3}/frontend/index.html +0 -0
  36. {azimut-0.2.2 → azimut-0.2.3}/frontend/jsconfig.json +0 -0
  37. {azimut-0.2.2 → azimut-0.2.3}/frontend/package-lock.json +0 -0
  38. {azimut-0.2.2 → azimut-0.2.3}/frontend/package.json +0 -0
  39. {azimut-0.2.2 → azimut-0.2.3}/frontend/playwright.config.js +0 -0
  40. {azimut-0.2.2 → azimut-0.2.3}/frontend/public/favicon.svg +0 -0
  41. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/App.svelte +0 -0
  42. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/app.css +0 -0
  43. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/assets/logo-source.svg +0 -0
  44. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/CaseSidebar.svelte +0 -0
  45. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/CaseSwitcher.svelte +0 -0
  46. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/ConfirmDialog.svelte +0 -0
  47. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/EntityDetails.svelte +0 -0
  48. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/FolderSelect.svelte +0 -0
  49. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/FolderSelect.test.js +0 -0
  50. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Icon.svelte +0 -0
  51. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Logo.svelte +0 -0
  52. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Modal.svelte +0 -0
  53. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/PostTemplateEditor.svelte +0 -0
  54. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/ProofPreview.svelte +0 -0
  55. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/ProofTemplateEditor.svelte +0 -0
  56. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Toasts.svelte +0 -0
  57. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Toasts.test.js +0 -0
  58. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/UpdateModal.svelte +0 -0
  59. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/components/Wordmark.svelte +0 -0
  60. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/api.js +0 -0
  61. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/appUpdate.js +0 -0
  62. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/appUpdate.test.js +0 -0
  63. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/bidi.js +0 -0
  64. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/bidi.test.js +0 -0
  65. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/bookmarks.js +0 -0
  66. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/bookmarks.test.js +0 -0
  67. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/captureSize.js +0 -0
  68. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/captureSize.test.js +0 -0
  69. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/catalog.js +0 -0
  70. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/catalog.test.js +0 -0
  71. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/chain.js +0 -0
  72. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/chain.test.js +0 -0
  73. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/composer.js +0 -0
  74. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/composer.test.js +0 -0
  75. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/coords.js +0 -0
  76. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/coords.test.js +0 -0
  77. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/events.js +0 -0
  78. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/events.test.js +0 -0
  79. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/extBridge.js +0 -0
  80. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/extBridge.test.js +0 -0
  81. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/extension.test.js +0 -0
  82. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/filing.js +0 -0
  83. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/filing.test.js +0 -0
  84. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/folderTree.js +0 -0
  85. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/folderTree.test.js +0 -0
  86. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/frameRotate.js +0 -0
  87. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/frameRotate.test.js +0 -0
  88. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/fullscreen.js +0 -0
  89. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/fullscreen.test.js +0 -0
  90. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gmaps.js +0 -0
  91. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gmaps.test.js +0 -0
  92. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gridSearch.js +0 -0
  93. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gridSearch.test.js +0 -0
  94. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gridSelect.js +0 -0
  95. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/gridSelect.test.js +0 -0
  96. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/history.js +0 -0
  97. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/history.test.js +0 -0
  98. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/inspect.js +0 -0
  99. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/inspect.test.js +0 -0
  100. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/maplinks.js +0 -0
  101. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/maplinks.test.js +0 -0
  102. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/markdown.js +0 -0
  103. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/markdown.test.js +0 -0
  104. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/measure.js +0 -0
  105. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/measure.test.js +0 -0
  106. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/mediaFilter.js +0 -0
  107. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/mediaFilter.test.js +0 -0
  108. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/navigate.js +0 -0
  109. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/navigate.test.js +0 -0
  110. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebook.js +0 -0
  111. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebook.test.js +0 -0
  112. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookContent.js +0 -0
  113. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookContent.test.js +0 -0
  114. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookPdf.js +0 -0
  115. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookPdf.test.js +0 -0
  116. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookTabs.js +0 -0
  117. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notebookTabs.test.js +0 -0
  118. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notes.js +0 -0
  119. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/notes.test.js +0 -0
  120. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/post.js +0 -0
  121. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/post.test.js +0 -0
  122. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/refViewers.js +0 -0
  123. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/refViewers.test.js +0 -0
  124. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/reverseSearch.js +0 -0
  125. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/reverseSearch.test.js +0 -0
  126. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/satRotate.js +0 -0
  127. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/satRotate.test.js +0 -0
  128. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/screenCrop.js +0 -0
  129. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/screenCrop.test.js +0 -0
  130. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/sentinel.js +0 -0
  131. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/sentinel.test.js +0 -0
  132. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/sidebar.js +0 -0
  133. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/sidebar.test.js +0 -0
  134. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/state.svelte.js +0 -0
  135. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/state.test.js +0 -0
  136. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/theme.js +0 -0
  137. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/theme.test.js +0 -0
  138. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/toast.test.js +0 -0
  139. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/toolLoader.js +0 -0
  140. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/toolLoader.test.js +0 -0
  141. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/usage.js +0 -0
  142. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/usage.test.js +0 -0
  143. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/workspaces.js +0 -0
  144. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/lib/workspaces.test.js +0 -0
  145. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/main.js +0 -0
  146. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Coordinates.svelte +0 -0
  147. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Files.svelte +0 -0
  148. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Inspector.svelte +0 -0
  149. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/MediaLibrary.svelte +0 -0
  150. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/MediaLibrary.test.js +0 -0
  151. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Notebook.svelte +0 -0
  152. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Notebook.test.js +0 -0
  153. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/PostComposer.svelte +0 -0
  154. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/PostComposer.test.js +0 -0
  155. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/ProofComposer.svelte +0 -0
  156. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/ProofComposer.test.js +0 -0
  157. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/RefViewer.svelte +0 -0
  158. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/ReverseSearch.svelte +0 -0
  159. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Satellite.svelte +0 -0
  160. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/Settings.svelte +0 -0
  161. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/AdjustSliders.svelte +0 -0
  162. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/CollageCanvas.svelte +0 -0
  163. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/CollageMenu.svelte +0 -0
  164. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/CollagePreview.svelte +0 -0
  165. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/CropBox.svelte +0 -0
  166. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/CropControls.svelte +0 -0
  167. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/FrameMenu.svelte +0 -0
  168. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/OrientationControls.svelte +0 -0
  169. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/PieceCropModal.svelte +0 -0
  170. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/SaveGallery.svelte +0 -0
  171. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/SaveMenu.svelte +0 -0
  172. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/SelectionMenu.svelte +0 -0
  173. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/VideoPlayer.svelte +0 -0
  174. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/inspect/VideoPlayer.test.js +0 -0
  175. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/NewProofDialog.svelte +0 -0
  176. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/ProofCanvas.svelte +0 -0
  177. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/ProofLayersPanel.svelte +0 -0
  178. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/ProofToolbar.svelte +0 -0
  179. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/ProofToolbar.test.js +0 -0
  180. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/proof/canvasLifecycle.js +0 -0
  181. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/satellite/CaptureOptions.svelte +0 -0
  182. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/satellite/GridSearchPanel.svelte +0 -0
  183. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/satellite/MapToolCluster.svelte +0 -0
  184. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/satellite/SentinelPicker.svelte +0 -0
  185. {azimut-0.2.2 → azimut-0.2.3}/frontend/src/tools/satellite/SentinelPicker.test.js +0 -0
  186. {azimut-0.2.2 → azimut-0.2.3}/frontend/vite.config.js +0 -0
  187. {azimut-0.2.2 → azimut-0.2.3}/packaging/azimut.ico +0 -0
  188. {azimut-0.2.2 → azimut-0.2.3}/packaging/azimut.spec +0 -0
  189. {azimut-0.2.2 → azimut-0.2.3}/packaging/entry.py +0 -0
  190. {azimut-0.2.2 → azimut-0.2.3}/scripts/relaunch.py +0 -0
  191. {azimut-0.2.2 → azimut-0.2.3}/scripts/smoke_binary.py +0 -0
  192. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/__main__.py +0 -0
  193. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/__init__.py +0 -0
  194. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/cases.py +0 -0
  195. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/drafts.py +0 -0
  196. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/events.py +0 -0
  197. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/files.py +0 -0
  198. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/ingest.py +0 -0
  199. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/inspect.py +0 -0
  200. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/limits.py +0 -0
  201. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/media.py +0 -0
  202. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/proofs.py +0 -0
  203. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/satellite.py +0 -0
  204. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/settings.py +0 -0
  205. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/api/templates.py +0 -0
  206. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/cli.py +0 -0
  207. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/config.py +0 -0
  208. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/__init__.py +0 -0
  209. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/coords.py +0 -0
  210. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/ffmpeg.py +0 -0
  211. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/geo.py +0 -0
  212. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/google_tiles.py +0 -0
  213. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/inspect.py +0 -0
  214. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/links.py +0 -0
  215. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/mapsites.py +0 -0
  216. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/media.py +0 -0
  217. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/satellite.py +0 -0
  218. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/scrapers.py +0 -0
  219. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/sentinel.py +0 -0
  220. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/stitch.py +0 -0
  221. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/thumbnails.py +0 -0
  222. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/tilecache.py +0 -0
  223. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/tiles.py +0 -0
  224. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/engine/updates.py +0 -0
  225. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/jobs.py +0 -0
  226. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/launcher.py +0 -0
  227. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/repository.py +0 -0
  228. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/server.py +0 -0
  229. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/sqlite_backend.py +0 -0
  230. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Coordinates-CkOCsDYx.css +0 -0
  231. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Coordinates-Zk6hc7rX.js +0 -0
  232. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Files-B_kDrMmA.js +0 -0
  233. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Files-DoSPZhF-.css +0 -0
  234. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Icon-BgA9a5tG.js +0 -0
  235. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Inspector-3v5iq-jW.css +0 -0
  236. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Inspector-CbDQE9mL.js +0 -0
  237. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/MediaLibrary-DxDbISiM.css +0 -0
  238. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/MediaLibrary-aa18XUg0.js +0 -0
  239. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Modal-CuJYoHU9.css +0 -0
  240. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Modal-DHCHN-zW.js +0 -0
  241. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Notebook-6bRvw0Ld.css +0 -0
  242. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Notebook-De7CIAen.js +0 -0
  243. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/PostComposer-BoRw8SZk.js +0 -0
  244. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/PostComposer-C1P4_rp3.css +0 -0
  245. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/ProofComposer-C5mWoc8h.css +0 -0
  246. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/ProofComposer-hy7ZrvOu.js +0 -0
  247. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/ReverseSearch-BP3C1CxL.js +0 -0
  248. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/ReverseSearch-DqIrU_Pa.css +0 -0
  249. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Satellite-BhhCtezr.js +0 -0
  250. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Satellite-DGCcPv9w.css +0 -0
  251. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Settings-CnfrsP9_.js +0 -0
  252. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/Settings-Nqf90D6_.css +0 -0
  253. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/bidi-wWDUT82v.js +0 -0
  254. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/composer-C17apZ5p.js +0 -0
  255. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/frameRotate-F1nGHpcH.js +0 -0
  256. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/gmaps-D52n5msu.js +0 -0
  257. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/history-D8hJuA9t.js +0 -0
  258. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/index-B8MBkQLT.js +0 -0
  259. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/index-BaaWj0p3.css +0 -0
  260. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/leaflet-rotate-hAaDqhcJ.js +0 -0
  261. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/lib-Ce199MB2.js +0 -0
  262. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/maplinks-LmyLzEQg.js +0 -0
  263. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/markdown-Db8boR5D.js +0 -0
  264. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-400-normal-BnNz-3Mf.woff +0 -0
  265. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-400-normal-DcSlRu53.woff2 +0 -0
  266. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-600-normal-DNQhW0y0.woff +0 -0
  267. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-600-normal-DW9ldEDP.woff2 +0 -0
  268. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-700-normal-b_KP-pae.woff +0 -0
  269. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-700-normal-l0hKEjh4.woff2 +0 -0
  270. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-400-normal-B1qoybeA.woff2 +0 -0
  271. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-400-normal-ngSbnDVv.woff +0 -0
  272. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-600-normal-B2S5WIA4.woff2 +0 -0
  273. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-600-normal-DywhiVWf.woff +0 -0
  274. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-700-normal-BSlCClLu.woff2 +0 -0
  275. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/oxanium-latin-ext-700-normal-CPlnVieJ.woff +0 -0
  276. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/post-COJahl2R.js +0 -0
  277. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/assets/rolldown-runtime-Bh1tDfsg.js +0 -0
  278. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/favicon.svg +0 -0
  279. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/static/index.html +0 -0
  280. {azimut-0.2.2 → azimut-0.2.3}/src/azimut/workspace.py +0 -0
  281. {azimut-0.2.2 → azimut-0.2.3}/tests/bigcase.py +0 -0
  282. {azimut-0.2.2 → azimut-0.2.3}/tests/conftest.py +0 -0
  283. {azimut-0.2.2 → azimut-0.2.3}/tests/graph_read.py +0 -0
  284. {azimut-0.2.2 → azimut-0.2.3}/tests/legacy_case.py +0 -0
  285. {azimut-0.2.2 → azimut-0.2.3}/tests/test_bigcase.py +0 -0
  286. {azimut-0.2.2 → azimut-0.2.3}/tests/test_binary_smoke.py +0 -0
  287. {azimut-0.2.2 → azimut-0.2.3}/tests/test_cases_api.py +0 -0
  288. {azimut-0.2.2 → azimut-0.2.3}/tests/test_config.py +0 -0
  289. {azimut-0.2.2 → azimut-0.2.3}/tests/test_coords.py +0 -0
  290. {azimut-0.2.2 → azimut-0.2.3}/tests/test_drafts_api.py +0 -0
  291. {azimut-0.2.2 → azimut-0.2.3}/tests/test_events_api.py +0 -0
  292. {azimut-0.2.2 → azimut-0.2.3}/tests/test_ffmpeg.py +0 -0
  293. {azimut-0.2.2 → azimut-0.2.3}/tests/test_focus.py +0 -0
  294. {azimut-0.2.2 → azimut-0.2.3}/tests/test_geo_api.py +0 -0
  295. {azimut-0.2.2 → azimut-0.2.3}/tests/test_geo_formats.py +0 -0
  296. {azimut-0.2.2 → azimut-0.2.3}/tests/test_google_tiles.py +0 -0
  297. {azimut-0.2.2 → azimut-0.2.3}/tests/test_hardening.py +0 -0
  298. {azimut-0.2.2 → azimut-0.2.3}/tests/test_ingest_api.py +0 -0
  299. {azimut-0.2.2 → azimut-0.2.3}/tests/test_inspect_api.py +0 -0
  300. {azimut-0.2.2 → azimut-0.2.3}/tests/test_jobs.py +0 -0
  301. {azimut-0.2.2 → azimut-0.2.3}/tests/test_launcher.py +0 -0
  302. {azimut-0.2.2 → azimut-0.2.3}/tests/test_links_api.py +0 -0
  303. {azimut-0.2.2 → azimut-0.2.3}/tests/test_mapsites.py +0 -0
  304. {azimut-0.2.2 → azimut-0.2.3}/tests/test_media_api.py +0 -0
  305. {azimut-0.2.2 → azimut-0.2.3}/tests/test_migrations.py +0 -0
  306. {azimut-0.2.2 → azimut-0.2.3}/tests/test_proofs_api.py +0 -0
  307. {azimut-0.2.2 → azimut-0.2.3}/tests/test_relaunch.py +0 -0
  308. {azimut-0.2.2 → azimut-0.2.3}/tests/test_repository.py +0 -0
  309. {azimut-0.2.2 → azimut-0.2.3}/tests/test_satellite_api.py +0 -0
  310. {azimut-0.2.2 → azimut-0.2.3}/tests/test_scrapers.py +0 -0
  311. {azimut-0.2.2 → azimut-0.2.3}/tests/test_sentinel.py +0 -0
  312. {azimut-0.2.2 → azimut-0.2.3}/tests/test_server_guard.py +0 -0
  313. {azimut-0.2.2 → azimut-0.2.3}/tests/test_settings_api.py +0 -0
  314. {azimut-0.2.2 → azimut-0.2.3}/tests/test_settings_backup.py +0 -0
  315. {azimut-0.2.2 → azimut-0.2.3}/tests/test_sqlite_backend.py +0 -0
  316. {azimut-0.2.2 → azimut-0.2.3}/tests/test_stitch.py +0 -0
  317. {azimut-0.2.2 → azimut-0.2.3}/tests/test_templates_api.py +0 -0
  318. {azimut-0.2.2 → azimut-0.2.3}/tests/test_thumbnails.py +0 -0
  319. {azimut-0.2.2 → azimut-0.2.3}/tests/test_tiles.py +0 -0
  320. {azimut-0.2.2 → azimut-0.2.3}/tests/test_updates.py +0 -0
@@ -11,8 +11,37 @@ permissions:
11
11
  id-token: write # PyPI Trusted Publishing (OIDC) — no token secret needed
12
12
 
13
13
  jobs:
14
+ guard:
15
+ name: Version + release gate
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - uses: astral-sh/setup-uv@v5
20
+ with:
21
+ python-version: "3.12"
22
+ # Install the app (editable) + dev tools, like the CI backend job, so the
23
+ # gate can import azimut and run its tests. No frontend build: these tests
24
+ # don't touch the built UI, and the app tolerates a missing static dir.
25
+ - run: uv sync --frozen --extra dev
26
+ # The pushed tag must equal the version baked into the code. When it
27
+ # didn't (0.2.2 shipped a stale __version__), the binary's self-update
28
+ # check nagged every user about the very release they were running. This
29
+ # is the check the release used to lack — it runs before anything builds.
30
+ - name: Tag matches the code version
31
+ if: startsWith(github.ref, 'refs/tags/v')
32
+ run: |
33
+ tag="${GITHUB_REF_NAME#v}"
34
+ ver="$(uv run --no-sync python -c 'import azimut; print(azimut.__version__)')"
35
+ echo "tag=$tag __version__=$ver"
36
+ [ "$tag" = "$ver" ] || { echo "::error::tag v$tag != __version__ $ver — bump src/azimut/__init__.py"; exit 1; }
37
+ # The version-parity gate the release workflow used to skip: pyproject's
38
+ # single-sourced version and the extension manifest must line up.
39
+ - name: Release gate + version parity
40
+ run: uv run --no-sync pytest tests/test_release_gate.py tests/test_updates.py -q
41
+
14
42
  dist:
15
43
  name: Build wheel + sdist
44
+ needs: guard
16
45
  runs-on: ubuntu-latest
17
46
  steps:
18
47
  - uses: actions/checkout@v4
@@ -45,6 +74,7 @@ jobs:
45
74
 
46
75
  binaries:
47
76
  name: Binary (${{ matrix.os }})
77
+ needs: guard
48
78
  runs-on: ${{ matrix.os }}
49
79
  strategy:
50
80
  fail-fast: false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: azimut
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: A local OSINT workspace for media, geolocation proofs and case management.
5
5
  Project-URL: Homepage, https://github.com/OsintMeThat/azimut
6
6
  Author: OsintMeThat
@@ -49,6 +49,8 @@ to fix a point on the map.*
49
49
 
50
50
  ## v0.2.2: Login-walled downloads
51
51
 
52
+ > v0.2.3 is a bug-fix release: it corrects the version the v0.2.2 binary reported, which made its startup update check falsely announce an update to everyone already on v0.2.2. No feature changes.
53
+
52
54
  | Tool | What it does |
53
55
  |------|--------------|
54
56
  | **Media** | Import local files or download by URL (X, Telegram, TikTok, YouTube, Instagram and more via yt-dlp, with a gallery-dl fallback for image-only posts). Public media is fetched cookie-less; a login-walled post prompts once for a browser session or an exported `cookies.txt`. Each item gets a clean local file, metadata and a SHA-256. Multi-photo posts open a picker. |
@@ -235,7 +237,7 @@ wheel + Windows/Linux/macOS binaries, attaches them to a GitHub release, and
235
237
  publishes to PyPI. **Don't publish by hand.**
236
238
 
237
239
  ```bash
238
- git tag v0.2.2 && git push origin v0.2.2
240
+ git tag v0.2.3 && git push origin v0.2.3
239
241
  ```
240
242
 
241
243
  One-time setup: register the repo as a
@@ -11,6 +11,8 @@ to fix a point on the map.*
11
11
 
12
12
  ## v0.2.2: Login-walled downloads
13
13
 
14
+ > v0.2.3 is a bug-fix release: it corrects the version the v0.2.2 binary reported, which made its startup update check falsely announce an update to everyone already on v0.2.2. No feature changes.
15
+
14
16
  | Tool | What it does |
15
17
  |------|--------------|
16
18
  | **Media** | Import local files or download by URL (X, Telegram, TikTok, YouTube, Instagram and more via yt-dlp, with a gallery-dl fallback for image-only posts). Public media is fetched cookie-less; a login-walled post prompts once for a browser session or an exported `cookies.txt`. Each item gets a clean local file, metadata and a SHA-256. Multi-photo posts open a picker. |
@@ -197,7 +199,7 @@ wheel + Windows/Linux/macOS binaries, attaches them to a GitHub release, and
197
199
  publishes to PyPI. **Don't publish by hand.**
198
200
 
199
201
  ```bash
200
- git tag v0.2.2 && git push origin v0.2.2
202
+ git tag v0.2.3 && git push origin v0.2.3
201
203
  ```
202
204
 
203
205
  One-time setup: register the repo as a
@@ -1,4 +1,4 @@
1
- # Azimut v0.2.2
1
+ # Azimut v0.2.3
2
2
 
3
3
  ## OSINT toolkit at a glance
4
4
 
@@ -9,6 +9,7 @@
9
9
 
10
10
  ## What changed
11
11
 
12
+ - **Bug fix (from v0.2.2).** The v0.2.2 binary reported itself as an older version, so its startup update check wrongly announced that v0.2.2 was available to anyone already running it. Fixed here, with a release-time guard so the version can't drift again. Upgrade to stop the false prompt.
12
13
  - **Gated downloads.** Downloads now get past a login wall. Public media is still fetched without any session; only when a post turns out to need an account does Media offer to borrow a signed-in browser's cookies or an exported `cookies.txt`. The session is used for that download, kept private in your workspace, and never leaves the machine. Chromium on Windows can't be read, so Azimut points you to the file route instead.
13
14
  - **Responsive Geo Proof toolbar.** The proof toolbar reflows to fit narrow screens instead of overflowing, and remembers the colour and stroke width you last drew with.
14
15
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Azimut Capture",
4
- "version": "0.2.1",
4
+ "version": "0.2.3",
5
5
  "description": "File into Azimut: screenshot the map you are looking at (coordinates from the URL), or save any other page as a bookmark.",
6
6
  "permissions": ["activeTab", "scripting", "storage", "notifications"],
7
7
  "host_permissions": ["http://127.0.0.1/*", "http://localhost/*"],
@@ -4,7 +4,9 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "azimut"
7
- version = "0.2.2"
7
+ # Single-sourced from src/azimut/__init__.py so a release is bumped in one place
8
+ # (see [tool.hatch.version] below). Never add a literal version here.
9
+ dynamic = ["version"]
8
10
  description = "A local OSINT workspace for media, geolocation proofs and case management."
9
11
  readme = "README.md"
10
12
  requires-python = ">=3.11"
@@ -86,6 +88,11 @@ Homepage = "https://github.com/OsintMeThat/azimut"
86
88
  # the sdist and the wheel — `python -m build` builds the wheel from the sdist,
87
89
  # so if the sdist omits static the shipped wheel has no UI. Run `npm run build`
88
90
  # before building the package.
91
+ # The version hatchling stamps into the wheel/sdist is read from __version__,
92
+ # so pyproject never carries a second copy that can drift out of sync.
93
+ [tool.hatch.version]
94
+ path = "src/azimut/__init__.py"
95
+
89
96
  [tool.hatch.build]
90
97
  artifacts = ["src/azimut/static/**"]
91
98
 
@@ -2,7 +2,12 @@
2
2
 
3
3
  from PIL import Image as _Image
4
4
 
5
- __version__ = "0.2.1"
5
+ # The single source of truth for the app version. pyproject.toml reads it back
6
+ # through hatchling's dynamic version (``[tool.hatch.version]``) and the
7
+ # extension manifest is kept in lock-step by a test, so a release is bumped in
8
+ # exactly one place. Getting this wrong nags every user with a false update
9
+ # (the binary's self-check compares this against the latest GitHub tag).
10
+ __version__ = "0.2.3"
6
11
 
7
12
  # Cap the pixels Pillow will decode from a file, process-wide. A tiny,
8
13
  # highly-compressed image can otherwise expand to gigabytes in memory and take
@@ -22,7 +22,7 @@ from pathlib import Path
22
22
  from bigcase import build_big_case
23
23
  from legacy_case import write_legacy_json_case
24
24
 
25
- from azimut import __version__, workspace
25
+ from azimut import workspace
26
26
  from azimut.engine import links as link_engine
27
27
  from azimut.engine import media as media_engine
28
28
  from azimut.engine import thumbnails
@@ -192,7 +192,12 @@ def test_case_db_lives_under_the_workspace_root(tmp_workspace):
192
192
 
193
193
  def test_release_tooling_is_bounded_and_built_from_the_lock():
194
194
  cfg = _pyproject()
195
- assert cfg["project"]["version"] == __version__
195
+ # Version is single-sourced from src/azimut/__init__.py through hatchling's
196
+ # dynamic version, so pyproject carries no literal copy to drift out of sync
197
+ # (the 0.2.2 release shipped a stale __version__ against a bumped pyproject).
198
+ assert "version" not in cfg["project"]
199
+ assert "version" in cfg["project"]["dynamic"]
200
+ assert cfg["tool"]["hatch"]["version"]["path"] == "src/azimut/__init__.py"
196
201
  assert cfg["build-system"]["requires"] == ["hatchling>=1.27,<2"]
197
202
  release = cfg["dependency-groups"]["release"]
198
203
  assert any(dep.startswith("build>=") and "<2" in dep for dep in release)
@@ -210,6 +215,12 @@ def test_release_tooling_is_bounded_and_built_from_the_lock():
210
215
  assert "--no-editable" in workflow
211
216
  assert "uv run python" not in workflow
212
217
  assert "body_path: docs/RELEASE_NOTES.md" in workflow
218
+ # A guard job runs before anything builds: it checks the pushed tag equals
219
+ # __version__ and runs the version-parity gate the release used to skip, so
220
+ # a stale version can never ship again (the 0.2.2 false-update-nag bug).
221
+ assert "tag=$tag __version__=$ver" in workflow
222
+ assert "pytest tests/test_release_gate.py tests/test_updates.py" in workflow
223
+ assert "\n dist:\n" in workflow and "needs: guard" in workflow
213
224
  release_job = workflow.split(" release:\n", maxsplit=1)[1]
214
225
  assert release_job.index("actions/checkout@v4") < release_job.index(
215
226
  "softprops/action-gh-release@v2"
@@ -90,7 +90,7 @@ wheels = [
90
90
 
91
91
  [[package]]
92
92
  name = "azimut"
93
- version = "0.2.2"
93
+ version = "0.2.3"
94
94
  source = { editable = "." }
95
95
  dependencies = [
96
96
  { name = "fastapi" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes