codex 2.5.2__tar.gz → 2.5.4__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 (2364) hide show
  1. codex-2.5.4/.dockerignore +51 -0
  2. codex-2.5.4/.github/actions/devenv-ci-container/action.yml +35 -0
  3. codex-2.5.4/.github/actions/devenv-pypi/action.yml +50 -0
  4. codex-2.5.4/.github/workflows/devenv-check.yml +382 -0
  5. codex-2.5.4/.github/workflows/devenv-release.yml +48 -0
  6. codex-2.5.4/.gitignore +96 -0
  7. codex-2.5.4/.prettierignore +27 -0
  8. codex-2.5.4/NEWS.md +2714 -0
  9. codex-2.5.4/PKG-INFO +1299 -0
  10. codex-2.5.4/README.md +1237 -0
  11. codex-2.5.4/bin/_lib.sh +45 -0
  12. codex-2.5.4/bin/ci-reuse-dist.sh +56 -0
  13. codex-2.5.4/bin/cleanup-pypi-alpha.sh +41 -0
  14. codex-2.5.4/bin/dev-module.sh +13 -0
  15. codex-2.5.4/bin/docker-compose-exit.sh +7 -0
  16. codex-2.5.4/bin/docker-tag-latest.sh +38 -0
  17. codex-2.5.4/bin/find-files.sh +107 -0
  18. codex-2.5.4/bin/find-sh.sh +21 -0
  19. codex-2.5.4/bin/fix-django.sh +14 -0
  20. codex-2.5.4/bin/fix-docker.sh +12 -0
  21. codex-2.5.4/bin/fix.sh +23 -0
  22. codex-2.5.4/bin/hub_prune_stale.py +524 -0
  23. codex-2.5.4/bin/kill-eslint_d.sh +12 -0
  24. codex-2.5.4/bin/lint-ci.sh +11 -0
  25. codex-2.5.4/bin/lint-complexity.sh +6 -0
  26. codex-2.5.4/bin/lint-django.sh +14 -0
  27. codex-2.5.4/bin/lint-docker.sh +18 -0
  28. codex-2.5.4/bin/lint-python.sh +13 -0
  29. codex-2.5.4/bin/lint.sh +13 -0
  30. codex-2.5.4/bin/manage.py +70 -0
  31. codex-2.5.4/bin/pm +5 -0
  32. codex-2.5.4/bin/prettier-nginx.sh +7 -0
  33. codex-2.5.4/bin/release_info.py +240 -0
  34. codex-2.5.4/bin/roman.py +220 -0
  35. codex-2.5.4/bin/run-test-proxy.sh +101 -0
  36. codex-2.5.4/bin/sh-tools.sh +39 -0
  37. codex-2.5.4/bin/sort-ignore.sh +22 -0
  38. codex-2.5.4/bin/test-python.sh +10 -0
  39. codex-2.5.4/bin/uml.sh +9 -0
  40. codex-2.5.4/bin/version-node.sh +17 -0
  41. codex-2.5.4/bun.lock +765 -0
  42. codex-2.5.4/codex/applications/http.py +142 -0
  43. codex-2.5.4/codex/applications/workers.py +245 -0
  44. codex-2.5.4/codex/choices/admin.py +84 -0
  45. codex-2.5.4/codex/choices/notifications.py +45 -0
  46. codex-2.5.4/codex/doctor/__init__.py +108 -0
  47. codex-2.5.4/codex/doctor/checks.py +303 -0
  48. codex-2.5.4/codex/librarian/bookmark/bookmarkd.py +195 -0
  49. codex-2.5.4/codex/librarian/bookmark/update.py +278 -0
  50. codex-2.5.4/codex/librarian/covers/create.py +439 -0
  51. codex-2.5.4/codex/librarian/fs/filters.py +91 -0
  52. codex-2.5.4/codex/librarian/fs/watcher/dirs.py +94 -0
  53. codex-2.5.4/codex/librarian/notifier/tasks.py +68 -0
  54. codex-2.5.4/codex/librarian/onlinetag/credential_validator.py +181 -0
  55. codex-2.5.4/codex/librarian/onlinetag/issue_id.py +22 -0
  56. codex-2.5.4/codex/librarian/onlinetag/prompt_apply.py +418 -0
  57. codex-2.5.4/codex/librarian/onlinetag/session_manager.py +1034 -0
  58. codex-2.5.4/codex/librarian/onlinetag/session_state.py +225 -0
  59. codex-2.5.4/codex/librarian/onlinetag/statuses.py +36 -0
  60. codex-2.5.4/codex/librarian/scribe/force_updater.py +38 -0
  61. codex-2.5.4/codex/librarian/scribe/importer/create/link_fks.py +187 -0
  62. codex-2.5.4/codex/librarian/scribe/importer/delete/comics.py +123 -0
  63. codex-2.5.4/codex/librarian/scribe/importer/failed/query.py +103 -0
  64. codex-2.5.4/codex/librarian/scribe/importer/finish.py +150 -0
  65. codex-2.5.4/codex/librarian/scribe/importer/importer.py +120 -0
  66. codex-2.5.4/codex/librarian/scribe/importer/init.py +445 -0
  67. codex-2.5.4/codex/librarian/scribe/importer/link/prepare.py +247 -0
  68. codex-2.5.4/codex/librarian/scribe/importer/moved/covers.py +96 -0
  69. codex-2.5.4/codex/librarian/scribe/importer/moved/folders.py +237 -0
  70. codex-2.5.4/codex/librarian/scribe/importer/query/foreign_keys.py +207 -0
  71. codex-2.5.4/codex/librarian/scribe/importer/query/links_m2m.py +231 -0
  72. codex-2.5.4/codex/librarian/scribe/importer/revive.py +227 -0
  73. codex-2.5.4/codex/librarian/scribe/importer/search/sync_m2m.py +157 -0
  74. codex-2.5.4/codex/librarian/scribe/importer/search/update.py +230 -0
  75. codex-2.5.4/codex/librarian/scribe/janitor/integrity/foreign_keys.py +657 -0
  76. codex-2.5.4/codex/librarian/scribe/janitor/reap.py +142 -0
  77. codex-2.5.4/codex/librarian/scribe/janitor/vacuum.py +169 -0
  78. codex-2.5.4/codex/librarian/scribe/lazy_importer.py +50 -0
  79. codex-2.5.4/codex/librarian/scribe/search/sync.py +400 -0
  80. codex-2.5.4/codex/librarian/scribe/tag_writer.py +715 -0
  81. codex-2.5.4/codex/librarian/scribe/tagwrite_errors.py +74 -0
  82. codex-2.5.4/codex/librarian/scribe/timestamp_update.py +154 -0
  83. codex-2.5.4/codex/librarian/status.py +83 -0
  84. codex-2.5.4/codex/librarian/telemeter/admin_stats.py +264 -0
  85. codex-2.5.4/codex/librarian/telemeter/count_stats.py +183 -0
  86. codex-2.5.4/codex/librarian/telemeter/per_user_stats.py +259 -0
  87. codex-2.5.4/codex/management/commands/restore_user_data.py +58 -0
  88. codex-2.5.4/codex/middleware.py +152 -0
  89. codex-2.5.4/codex/migrations/0056_match_mode_ask.py +35 -0
  90. codex-2.5.4/codex/models/admin.py +477 -0
  91. codex-2.5.4/codex/models/identifier.py +137 -0
  92. codex-2.5.4/codex/models/named.py +290 -0
  93. codex-2.5.4/codex/models/paths.py +169 -0
  94. codex-2.5.4/codex/models/util.py +68 -0
  95. codex-2.5.4/codex/oidc.py +392 -0
  96. codex-2.5.4/codex/serializers/admin/custom_cover.py +104 -0
  97. codex-2.5.4/codex/serializers/admin/doctor.py +30 -0
  98. codex-2.5.4/codex/serializers/admin/tagging.py +231 -0
  99. codex-2.5.4/codex/serializers/opds/v1.py +70 -0
  100. codex-2.5.4/codex/settings/db.py +335 -0
  101. codex-2.5.4/codex/startup/__init__.py +262 -0
  102. codex-2.5.4/codex/static/assets/VAvatar-BZOmNH9A.js +1 -0
  103. codex-2.5.4/codex/static/assets/VAvatar-BZOmNH9A.js.br +0 -0
  104. codex-2.5.4/codex/static/assets/VAvatar-BZOmNH9A.js.gz +0 -0
  105. codex-2.5.4/codex/static/assets/VCard-DGgzzpxI.js +1 -0
  106. codex-2.5.4/codex/static/assets/VCard-DGgzzpxI.js.br +0 -0
  107. codex-2.5.4/codex/static/assets/VCard-DGgzzpxI.js.gz +0 -0
  108. codex-2.5.4/codex/static/assets/VCheckbox-vQEOQHp8.js +1 -0
  109. codex-2.5.4/codex/static/assets/VCheckbox-vQEOQHp8.js.br +0 -0
  110. codex-2.5.4/codex/static/assets/VCheckbox-vQEOQHp8.js.gz +0 -0
  111. codex-2.5.4/codex/static/assets/VCheckboxBtn-BYymD5WX.js +1 -0
  112. codex-2.5.4/codex/static/assets/VCheckboxBtn-BYymD5WX.js.br +0 -0
  113. codex-2.5.4/codex/static/assets/VCheckboxBtn-BYymD5WX.js.gz +0 -0
  114. codex-2.5.4/codex/static/assets/VChip-LNzJwq7b.js +1 -0
  115. codex-2.5.4/codex/static/assets/VChip-LNzJwq7b.js.br +0 -0
  116. codex-2.5.4/codex/static/assets/VChip-LNzJwq7b.js.gz +0 -0
  117. codex-2.5.4/codex/static/assets/VChip-pMOXPdio.css +1 -0
  118. codex-2.5.4/codex/static/assets/VChip-pMOXPdio.css.br +0 -0
  119. codex-2.5.4/codex/static/assets/VChip-pMOXPdio.css.gz +0 -0
  120. codex-2.5.4/codex/static/assets/VCombobox-SAY5wst_.js +2 -0
  121. codex-2.5.4/codex/static/assets/VCombobox-SAY5wst_.js.br +0 -0
  122. codex-2.5.4/codex/static/assets/VCombobox-SAY5wst_.js.gz +0 -0
  123. codex-2.5.4/codex/static/assets/VContainer-DBeudEu9.js +1 -0
  124. codex-2.5.4/codex/static/assets/VContainer-DBeudEu9.js.br +2 -0
  125. codex-2.5.4/codex/static/assets/VContainer-DBeudEu9.js.gz +0 -0
  126. codex-2.5.4/codex/static/assets/VDataTableVirtual-BgzcmwBb.css +1 -0
  127. codex-2.5.4/codex/static/assets/VDataTableVirtual-BgzcmwBb.css.br +0 -0
  128. codex-2.5.4/codex/static/assets/VDataTableVirtual-BgzcmwBb.css.gz +0 -0
  129. codex-2.5.4/codex/static/assets/VDataTableVirtual-CGN88uNg.js +1 -0
  130. codex-2.5.4/codex/static/assets/VDataTableVirtual-CGN88uNg.js.br +0 -0
  131. codex-2.5.4/codex/static/assets/VDataTableVirtual-CGN88uNg.js.gz +0 -0
  132. codex-2.5.4/codex/static/assets/VDivider-DfKnxr_a.js +1 -0
  133. codex-2.5.4/codex/static/assets/VDivider-DfKnxr_a.js.br +0 -0
  134. codex-2.5.4/codex/static/assets/VDivider-DfKnxr_a.js.gz +0 -0
  135. codex-2.5.4/codex/static/assets/VExpansionPanels-9tcwGpsp.js +1 -0
  136. codex-2.5.4/codex/static/assets/VExpansionPanels-9tcwGpsp.js.br +0 -0
  137. codex-2.5.4/codex/static/assets/VExpansionPanels-9tcwGpsp.js.gz +0 -0
  138. codex-2.5.4/codex/static/assets/VForm-BA_tzbnW.js +1 -0
  139. codex-2.5.4/codex/static/assets/VForm-BA_tzbnW.js.br +0 -0
  140. codex-2.5.4/codex/static/assets/VForm-BA_tzbnW.js.gz +0 -0
  141. codex-2.5.4/codex/static/assets/VListItem-LrH13hDN.js +1 -0
  142. codex-2.5.4/codex/static/assets/VListItem-LrH13hDN.js.br +0 -0
  143. codex-2.5.4/codex/static/assets/VListItem-LrH13hDN.js.gz +0 -0
  144. codex-2.5.4/codex/static/assets/VMenu-AbtjXrI6.css +1 -0
  145. codex-2.5.4/codex/static/assets/VMenu-AbtjXrI6.css.br +0 -0
  146. codex-2.5.4/codex/static/assets/VMenu-AbtjXrI6.css.gz +0 -0
  147. codex-2.5.4/codex/static/assets/VMenu-IVslBreR.js +1 -0
  148. codex-2.5.4/codex/static/assets/VMenu-IVslBreR.js.br +0 -0
  149. codex-2.5.4/codex/static/assets/VMenu-IVslBreR.js.gz +0 -0
  150. codex-2.5.4/codex/static/assets/VOverlay-Da44fOU2.js +1 -0
  151. codex-2.5.4/codex/static/assets/VOverlay-Da44fOU2.js.br +0 -0
  152. codex-2.5.4/codex/static/assets/VOverlay-Da44fOU2.js.gz +0 -0
  153. codex-2.5.4/codex/static/assets/VProgressCircular-B1FBFycV.js +10 -0
  154. codex-2.5.4/codex/static/assets/VProgressCircular-B1FBFycV.js.br +0 -0
  155. codex-2.5.4/codex/static/assets/VProgressCircular-B1FBFycV.js.gz +0 -0
  156. codex-2.5.4/codex/static/assets/VRadioGroup-Cwt7_DOe.js +1 -0
  157. codex-2.5.4/codex/static/assets/VRadioGroup-Cwt7_DOe.js.br +0 -0
  158. codex-2.5.4/codex/static/assets/VRadioGroup-Cwt7_DOe.js.gz +0 -0
  159. codex-2.5.4/codex/static/assets/VSelect-BCsz583e.js +2 -0
  160. codex-2.5.4/codex/static/assets/VSelect-BCsz583e.js.br +0 -0
  161. codex-2.5.4/codex/static/assets/VSelect-BCsz583e.js.gz +0 -0
  162. codex-2.5.4/codex/static/assets/VSelectionControl-EO96VGsP.js +1 -0
  163. codex-2.5.4/codex/static/assets/VSelectionControl-EO96VGsP.js.br +0 -0
  164. codex-2.5.4/codex/static/assets/VSelectionControl-EO96VGsP.js.gz +0 -0
  165. codex-2.5.4/codex/static/assets/VSnackbar-hrIaXETc.js +1 -0
  166. codex-2.5.4/codex/static/assets/VSnackbar-hrIaXETc.js.br +0 -0
  167. codex-2.5.4/codex/static/assets/VSnackbar-hrIaXETc.js.gz +0 -0
  168. codex-2.5.4/codex/static/assets/VSpacer-uyFyeFuR.js +1 -0
  169. codex-2.5.4/codex/static/assets/VTable-D4BhNrrp.js +1 -0
  170. codex-2.5.4/codex/static/assets/VTable-D4BhNrrp.js.br +0 -0
  171. codex-2.5.4/codex/static/assets/VTable-D4BhNrrp.js.gz +0 -0
  172. codex-2.5.4/codex/static/assets/VTabs-BqJIOlkV.js +1 -0
  173. codex-2.5.4/codex/static/assets/VTabs-BqJIOlkV.js.br +0 -0
  174. codex-2.5.4/codex/static/assets/VTabs-BqJIOlkV.js.gz +0 -0
  175. codex-2.5.4/codex/static/assets/VTextField-4oj9UAff.js +1 -0
  176. codex-2.5.4/codex/static/assets/VTextField-4oj9UAff.js.br +0 -0
  177. codex-2.5.4/codex/static/assets/VTextField-4oj9UAff.js.gz +0 -0
  178. codex-2.5.4/codex/static/assets/VTooltip-BqfDEz5x.js +1 -0
  179. codex-2.5.4/codex/static/assets/VTooltip-BqfDEz5x.js.br +0 -0
  180. codex-2.5.4/codex/static/assets/VTooltip-BqfDEz5x.js.gz +0 -0
  181. codex-2.5.4/codex/static/assets/action-bar-BeUO3cd5.js +1 -0
  182. codex-2.5.4/codex/static/assets/action-bar-BeUO3cd5.js.br +2 -0
  183. codex-2.5.4/codex/static/assets/action-bar-BeUO3cd5.js.gz +0 -0
  184. codex-2.5.4/codex/static/assets/admin-BYEi9ZYS.js +1 -0
  185. codex-2.5.4/codex/static/assets/admin-BYEi9ZYS.js.br +0 -0
  186. codex-2.5.4/codex/static/assets/admin-BYEi9ZYS.js.gz +0 -0
  187. codex-2.5.4/codex/static/assets/admin-Cx8WJaTv.js +1 -0
  188. codex-2.5.4/codex/static/assets/admin-Cx8WJaTv.js.br +0 -0
  189. codex-2.5.4/codex/static/assets/admin-DR8JHXK5.js +1 -0
  190. codex-2.5.4/codex/static/assets/admin-DR8JHXK5.js.br +0 -0
  191. codex-2.5.4/codex/static/assets/admin-DS1DKoL9.css +1 -0
  192. codex-2.5.4/codex/static/assets/admin-DS1DKoL9.css.br +0 -0
  193. codex-2.5.4/codex/static/assets/admin-DS1DKoL9.css.gz +0 -0
  194. codex-2.5.4/codex/static/assets/admin-Dh_qZTuo.js +1 -0
  195. codex-2.5.4/codex/static/assets/admin-Dh_qZTuo.js.br +0 -0
  196. codex-2.5.4/codex/static/assets/admin-Dh_qZTuo.js.gz +0 -0
  197. codex-2.5.4/codex/static/assets/admin-KDDWpvPK.js +1 -0
  198. codex-2.5.4/codex/static/assets/admin-KDDWpvPK.js.br +0 -0
  199. codex-2.5.4/codex/static/assets/admin-KDDWpvPK.js.gz +0 -0
  200. codex-2.5.4/codex/static/assets/admin-menu-De57bLSm.css +1 -0
  201. codex-2.5.4/codex/static/assets/admin-menu-De57bLSm.css.br +2 -0
  202. codex-2.5.4/codex/static/assets/admin-menu-De57bLSm.css.gz +0 -0
  203. codex-2.5.4/codex/static/assets/admin-menu-KBQuIMIE.js +1 -0
  204. codex-2.5.4/codex/static/assets/admin-menu-KBQuIMIE.js.br +0 -0
  205. codex-2.5.4/codex/static/assets/admin-menu-KBQuIMIE.js.gz +0 -0
  206. codex-2.5.4/codex/static/assets/admin-section-DX0Idd62.js +1 -0
  207. codex-2.5.4/codex/static/assets/admin-section-DX0Idd62.js.br +0 -0
  208. codex-2.5.4/codex/static/assets/admin-section-DX0Idd62.js.gz +0 -0
  209. codex-2.5.4/codex/static/assets/admin-settings-button-errors-CSl9xq5Y.js +1 -0
  210. codex-2.5.4/codex/static/assets/admin-settings-button-errors-CSl9xq5Y.js.br +0 -0
  211. codex-2.5.4/codex/static/assets/admin-settings-button-errors-CSl9xq5Y.js.gz +0 -0
  212. codex-2.5.4/codex/static/assets/admin-settings-button-progress-DxcUPx4U.js +1 -0
  213. codex-2.5.4/codex/static/assets/admin-settings-button-progress-DxcUPx4U.js.br +0 -0
  214. codex-2.5.4/codex/static/assets/admin-settings-button-progress-DxcUPx4U.js.gz +0 -0
  215. codex-2.5.4/codex/static/assets/auth-BYPQX5nf.js +1 -0
  216. codex-2.5.4/codex/static/assets/auth-BYPQX5nf.js.br +0 -0
  217. codex-2.5.4/codex/static/assets/auth-BYPQX5nf.js.gz +0 -0
  218. codex-2.5.4/codex/static/assets/auth-form-mixin-Cmwcdpvw.js +1 -0
  219. codex-2.5.4/codex/static/assets/auth-form-mixin-Cmwcdpvw.js.br +3 -0
  220. codex-2.5.4/codex/static/assets/auth-form-mixin-Cmwcdpvw.js.gz +0 -0
  221. codex-2.5.4/codex/static/assets/auth-tab-DNV2zScw.js +16 -0
  222. codex-2.5.4/codex/static/assets/auth-tab-DNV2zScw.js.br +0 -0
  223. codex-2.5.4/codex/static/assets/auth-tab-DNV2zScw.js.gz +0 -0
  224. codex-2.5.4/codex/static/assets/browser-BMKaQZ2x.js +2 -0
  225. codex-2.5.4/codex/static/assets/browser-BMKaQZ2x.js.br +0 -0
  226. codex-2.5.4/codex/static/assets/browser-BMKaQZ2x.js.gz +0 -0
  227. codex-2.5.4/codex/static/assets/browser-BRFyGGxB.js +2 -0
  228. codex-2.5.4/codex/static/assets/browser-BRFyGGxB.js.br +0 -0
  229. codex-2.5.4/codex/static/assets/browser-BRFyGGxB.js.gz +0 -0
  230. codex-2.5.4/codex/static/assets/browser-C178B43i.css +1 -0
  231. codex-2.5.4/codex/static/assets/browser-C178B43i.css.br +0 -0
  232. codex-2.5.4/codex/static/assets/browser-C178B43i.css.gz +0 -0
  233. codex-2.5.4/codex/static/assets/browser-table-column-picker-CxC1s1ic.js +1 -0
  234. codex-2.5.4/codex/static/assets/browser-table-column-picker-CxC1s1ic.js.br +0 -0
  235. codex-2.5.4/codex/static/assets/browser-table-column-picker-CxC1s1ic.js.gz +0 -0
  236. codex-2.5.4/codex/static/assets/clipboard-30kF5UuB.js +1 -0
  237. codex-2.5.4/codex/static/assets/clipboard-30kF5UuB.js.br +0 -0
  238. codex-2.5.4/codex/static/assets/clipboard-30kF5UuB.js.gz +0 -0
  239. codex-2.5.4/codex/static/assets/close-button-CBgwgsxz.js +1 -0
  240. codex-2.5.4/codex/static/assets/close-button-CBgwgsxz.js.br +1 -0
  241. codex-2.5.4/codex/static/assets/close-button-CBgwgsxz.js.gz +0 -0
  242. codex-2.5.4/codex/static/assets/codex-list-item-CEV27D48.js +1 -0
  243. codex-2.5.4/codex/static/assets/codex-list-item-CEV27D48.js.br +0 -0
  244. codex-2.5.4/codex/static/assets/codex-list-item-CEV27D48.js.gz +0 -0
  245. codex-2.5.4/codex/static/assets/common-D43H6khE.js +1 -0
  246. codex-2.5.4/codex/static/assets/common-D43H6khE.js.br +0 -0
  247. codex-2.5.4/codex/static/assets/common-D43H6khE.js.gz +0 -0
  248. codex-2.5.4/codex/static/assets/confirm-dialog-CZAzk2bt.js +1 -0
  249. codex-2.5.4/codex/static/assets/confirm-dialog-CZAzk2bt.js.br +0 -0
  250. codex-2.5.4/codex/static/assets/confirm-dialog-CZAzk2bt.js.gz +0 -0
  251. codex-2.5.4/codex/static/assets/confirm-footer-8IgzCE1c.js +1 -0
  252. codex-2.5.4/codex/static/assets/confirm-footer-8IgzCE1c.js.br +0 -0
  253. codex-2.5.4/codex/static/assets/confirm-footer-8IgzCE1c.js.gz +0 -0
  254. codex-2.5.4/codex/static/assets/cover-popup-Bihdhv00.js +1 -0
  255. codex-2.5.4/codex/static/assets/cover-popup-Bihdhv00.js.br +0 -0
  256. codex-2.5.4/codex/static/assets/cover-popup-Bihdhv00.js.gz +0 -0
  257. codex-2.5.4/codex/static/assets/createSimpleFunctional-MhpqWXi2.js +1 -0
  258. codex-2.5.4/codex/static/assets/createSimpleFunctional-MhpqWXi2.js.br +1 -0
  259. codex-2.5.4/codex/static/assets/createSimpleFunctional-MhpqWXi2.js.gz +0 -0
  260. codex-2.5.4/codex/static/assets/custom-covers-tab-CvtXLQ3d.js +1 -0
  261. codex-2.5.4/codex/static/assets/custom-covers-tab-CvtXLQ3d.js.br +0 -0
  262. codex-2.5.4/codex/static/assets/custom-covers-tab-CvtXLQ3d.js.gz +0 -0
  263. codex-2.5.4/codex/static/assets/datetime-column-C1StCPoT.js +1 -0
  264. codex-2.5.4/codex/static/assets/datetime-column-C1StCPoT.js.br +0 -0
  265. codex-2.5.4/codex/static/assets/datetime-column-C1StCPoT.js.gz +0 -0
  266. codex-2.5.4/codex/static/assets/defaults-tab-BLdQkLf9.js +1 -0
  267. codex-2.5.4/codex/static/assets/defaults-tab-BLdQkLf9.js.br +0 -0
  268. codex-2.5.4/codex/static/assets/defaults-tab-BLdQkLf9.js.gz +0 -0
  269. codex-2.5.4/codex/static/assets/delete-row-dialog-LAe-EZW_.js +1 -0
  270. codex-2.5.4/codex/static/assets/delete-row-dialog-LAe-EZW_.js.br +0 -0
  271. codex-2.5.4/codex/static/assets/delete-row-dialog-LAe-EZW_.js.gz +0 -0
  272. codex-2.5.4/codex/static/assets/display-BMRHBirV.js +1 -0
  273. codex-2.5.4/codex/static/assets/display-BMRHBirV.js.br +0 -0
  274. codex-2.5.4/codex/static/assets/display-BMRHBirV.js.gz +0 -0
  275. codex-2.5.4/codex/static/assets/dist-Ofq4EvcO.js +1 -0
  276. codex-2.5.4/codex/static/assets/dist-Ofq4EvcO.js.br +0 -0
  277. codex-2.5.4/codex/static/assets/dist-Ofq4EvcO.js.gz +0 -0
  278. codex-2.5.4/codex/static/assets/doctor-tab-0x2d9twH.css +1 -0
  279. codex-2.5.4/codex/static/assets/doctor-tab-0x2d9twH.css.br +0 -0
  280. codex-2.5.4/codex/static/assets/doctor-tab-0x2d9twH.css.gz +0 -0
  281. codex-2.5.4/codex/static/assets/doctor-tab-BCPhAVXx.js +1 -0
  282. codex-2.5.4/codex/static/assets/doctor-tab-BCPhAVXx.js.br +0 -0
  283. codex-2.5.4/codex/static/assets/doctor-tab-BCPhAVXx.js.gz +0 -0
  284. codex-2.5.4/codex/static/assets/easing-BKlyjday.js +1 -0
  285. codex-2.5.4/codex/static/assets/easing-BKlyjday.js.br +0 -0
  286. codex-2.5.4/codex/static/assets/easing-BKlyjday.js.gz +0 -0
  287. codex-2.5.4/codex/static/assets/edit-panel-B209ls5b.js +1 -0
  288. codex-2.5.4/codex/static/assets/edit-panel-B209ls5b.js.br +0 -0
  289. codex-2.5.4/codex/static/assets/edit-panel-B209ls5b.js.gz +0 -0
  290. codex-2.5.4/codex/static/assets/email-tab-Czau_g7F.js +1 -0
  291. codex-2.5.4/codex/static/assets/email-tab-Czau_g7F.js.br +0 -0
  292. codex-2.5.4/codex/static/assets/email-tab-Czau_g7F.js.gz +0 -0
  293. codex-2.5.4/codex/static/assets/expand-toggle-6o1u1L2z.js +1 -0
  294. codex-2.5.4/codex/static/assets/expand-toggle-6o1u1L2z.js.br +0 -0
  295. codex-2.5.4/codex/static/assets/expand-toggle-6o1u1L2z.js.gz +0 -0
  296. codex-2.5.4/codex/static/assets/flag-card-CqOgVhq7.js +1 -0
  297. codex-2.5.4/codex/static/assets/flag-card-CqOgVhq7.js.br +0 -0
  298. codex-2.5.4/codex/static/assets/flag-card-CqOgVhq7.js.gz +0 -0
  299. codex-2.5.4/codex/static/assets/forwardRefs-BAj60Oe8.js +1 -0
  300. codex-2.5.4/codex/static/assets/forwardRefs-BAj60Oe8.js.br +0 -0
  301. codex-2.5.4/codex/static/assets/forwardRefs-BAj60Oe8.js.gz +0 -0
  302. codex-2.5.4/codex/static/assets/goto-B07zwC6B.js +1 -0
  303. codex-2.5.4/codex/static/assets/goto-B07zwC6B.js.br +0 -0
  304. codex-2.5.4/codex/static/assets/goto-B07zwC6B.js.gz +0 -0
  305. codex-2.5.4/codex/static/assets/group-tab-C8YrIn8m.js +1 -0
  306. codex-2.5.4/codex/static/assets/group-tab-C8YrIn8m.js.br +0 -0
  307. codex-2.5.4/codex/static/assets/group-tab-C8YrIn8m.js.gz +0 -0
  308. codex-2.5.4/codex/static/assets/http-error-BrJoxbWa.js +1 -0
  309. codex-2.5.4/codex/static/assets/http-error-BrJoxbWa.js.br +0 -0
  310. codex-2.5.4/codex/static/assets/http-error-BrJoxbWa.js.gz +0 -0
  311. codex-2.5.4/codex/static/assets/job-tab-goR9JWOe.js +1 -0
  312. codex-2.5.4/codex/static/assets/job-tab-goR9JWOe.js.br +0 -0
  313. codex-2.5.4/codex/static/assets/job-tab-goR9JWOe.js.gz +0 -0
  314. codex-2.5.4/codex/static/assets/launcher-dialog-BwCmg_8O.js +1 -0
  315. codex-2.5.4/codex/static/assets/launcher-dialog-BwCmg_8O.js.br +0 -0
  316. codex-2.5.4/codex/static/assets/launcher-dialog-BwCmg_8O.js.gz +0 -0
  317. codex-2.5.4/codex/static/assets/launcher-dialog-CpWa7zNB.css +1 -0
  318. codex-2.5.4/codex/static/assets/launcher-dialog-CpWa7zNB.css.br +0 -0
  319. codex-2.5.4/codex/static/assets/launcher-dialog-CpWa7zNB.css.gz +0 -0
  320. codex-2.5.4/codex/static/assets/layout-DIgKtIM2.js +1 -0
  321. codex-2.5.4/codex/static/assets/layout-DIgKtIM2.js.br +0 -0
  322. codex-2.5.4/codex/static/assets/layout-DIgKtIM2.js.gz +0 -0
  323. codex-2.5.4/codex/static/assets/library-tab-pPNaGhrY.js +9 -0
  324. codex-2.5.4/codex/static/assets/library-tab-pPNaGhrY.js.br +0 -0
  325. codex-2.5.4/codex/static/assets/library-tab-pPNaGhrY.js.gz +0 -0
  326. codex-2.5.4/codex/static/assets/main-BdnugF58.js +6 -0
  327. codex-2.5.4/codex/static/assets/main-BdnugF58.js.br +0 -0
  328. codex-2.5.4/codex/static/assets/main-BdnugF58.js.gz +0 -0
  329. codex-2.5.4/codex/static/assets/online-tag-B5q7a00l.js +1 -0
  330. codex-2.5.4/codex/static/assets/online-tag-B5q7a00l.js.br +0 -0
  331. codex-2.5.4/codex/static/assets/online-tag-B5q7a00l.js.gz +0 -0
  332. codex-2.5.4/codex/static/assets/online-tag-BjTx6EU6.js +1 -0
  333. codex-2.5.4/codex/static/assets/pagination-toolbar-BGicwTXg.js +2 -0
  334. codex-2.5.4/codex/static/assets/pagination-toolbar-BGicwTXg.js.br +0 -0
  335. codex-2.5.4/codex/static/assets/pagination-toolbar-BGicwTXg.js.gz +0 -0
  336. codex-2.5.4/codex/static/assets/pdf-doc-BxKG4OnB.js +628 -0
  337. codex-2.5.4/codex/static/assets/pdf-doc-BxKG4OnB.js.br +0 -0
  338. codex-2.5.4/codex/static/assets/pdf-doc-BxKG4OnB.js.gz +0 -0
  339. codex-2.5.4/codex/static/assets/pretty-bytes-Y-4Ao0R3.js +1 -0
  340. codex-2.5.4/codex/static/assets/pretty-bytes-Y-4Ao0R3.js.br +0 -0
  341. codex-2.5.4/codex/static/assets/pretty-bytes-Y-4Ao0R3.js.gz +0 -0
  342. codex-2.5.4/codex/static/assets/prompt-popup-BSxff9bi.js +2 -0
  343. codex-2.5.4/codex/static/assets/prompt-popup-BSxff9bi.js.br +0 -0
  344. codex-2.5.4/codex/static/assets/prompt-popup-BSxff9bi.js.gz +0 -0
  345. codex-2.5.4/codex/static/assets/prompt-popup-DOss4tHf.css +1 -0
  346. codex-2.5.4/codex/static/assets/prompt-popup-DOss4tHf.css.br +0 -0
  347. codex-2.5.4/codex/static/assets/prompt-popup-DOss4tHf.css.gz +0 -0
  348. codex-2.5.4/codex/static/assets/reader-BpLVrS0o.js +1 -0
  349. codex-2.5.4/codex/static/assets/reader-BpLVrS0o.js.br +0 -0
  350. codex-2.5.4/codex/static/assets/reader-BpLVrS0o.js.gz +0 -0
  351. codex-2.5.4/codex/static/assets/reader-C4ZRidrS.css +1 -0
  352. codex-2.5.4/codex/static/assets/reader-C4ZRidrS.css.br +0 -0
  353. codex-2.5.4/codex/static/assets/reader-C4ZRidrS.css.gz +0 -0
  354. codex-2.5.4/codex/static/assets/reader-DHGk_jbM.js +1 -0
  355. codex-2.5.4/codex/static/assets/reader-DHGk_jbM.js.br +0 -0
  356. codex-2.5.4/codex/static/assets/reader-DHGk_jbM.js.gz +0 -0
  357. codex-2.5.4/codex/static/assets/reader-DLK284TT.js +2 -0
  358. codex-2.5.4/codex/static/assets/reader-DLK284TT.js.br +0 -0
  359. codex-2.5.4/codex/static/assets/reader-DLK284TT.js.gz +0 -0
  360. codex-2.5.4/codex/static/assets/reader-settings-controls-BY3gCTe_.js +1 -0
  361. codex-2.5.4/codex/static/assets/reader-settings-controls-BY3gCTe_.js.br +0 -0
  362. codex-2.5.4/codex/static/assets/reader-settings-controls-BY3gCTe_.js.gz +0 -0
  363. codex-2.5.4/codex/static/assets/relation-chips-Td_IgxC7.js +1 -0
  364. codex-2.5.4/codex/static/assets/relation-chips-Td_IgxC7.js.br +0 -0
  365. codex-2.5.4/codex/static/assets/relation-chips-Td_IgxC7.js.gz +0 -0
  366. codex-2.5.4/codex/static/assets/reset-password-confirm-CRZ2eSwp.js +1 -0
  367. codex-2.5.4/codex/static/assets/reset-password-confirm-CRZ2eSwp.js.br +0 -0
  368. codex-2.5.4/codex/static/assets/reset-password-confirm-CRZ2eSwp.js.gz +0 -0
  369. codex-2.5.4/codex/static/assets/restore-tab-Lzo0SbQ1.js +3 -0
  370. codex-2.5.4/codex/static/assets/restore-tab-Lzo0SbQ1.js.br +0 -0
  371. codex-2.5.4/codex/static/assets/restore-tab-Lzo0SbQ1.js.gz +0 -0
  372. codex-2.5.4/codex/static/assets/rules-DrDSf0fE.js +1 -0
  373. codex-2.5.4/codex/static/assets/rules-DrDSf0fE.js.br +0 -0
  374. codex-2.5.4/codex/static/assets/rules-DrDSf0fE.js.gz +0 -0
  375. codex-2.5.4/codex/static/assets/settings-tab-DfQDkUXj.js +1 -0
  376. codex-2.5.4/codex/static/assets/settings-tab-DfQDkUXj.js.br +0 -0
  377. codex-2.5.4/codex/static/assets/settings-tab-DfQDkUXj.js.gz +0 -0
  378. codex-2.5.4/codex/static/assets/sso-error-CENd54BZ.js +1 -0
  379. codex-2.5.4/codex/static/assets/sso-error-CENd54BZ.js.br +0 -0
  380. codex-2.5.4/codex/static/assets/sso-error-CENd54BZ.js.gz +0 -0
  381. codex-2.5.4/codex/static/assets/sso-login-button-C-DOvxMe.js +1 -0
  382. codex-2.5.4/codex/static/assets/sso-login-button-C-DOvxMe.js.br +0 -0
  383. codex-2.5.4/codex/static/assets/sso-login-button-C-DOvxMe.js.gz +0 -0
  384. codex-2.5.4/codex/static/assets/ssrBoot-DlxlmH3u.js +1 -0
  385. codex-2.5.4/codex/static/assets/ssrBoot-DlxlmH3u.js.br +0 -0
  386. codex-2.5.4/codex/static/assets/ssrBoot-DlxlmH3u.js.gz +0 -0
  387. codex-2.5.4/codex/static/assets/stats-tab-DqjgojRP.js +1 -0
  388. codex-2.5.4/codex/static/assets/stats-tab-DqjgojRP.js.br +0 -0
  389. codex-2.5.4/codex/static/assets/stats-tab-DqjgojRP.js.gz +0 -0
  390. codex-2.5.4/codex/static/assets/submit-footer-i0x6RSsh.js +1 -0
  391. codex-2.5.4/codex/static/assets/submit-footer-i0x6RSsh.js.br +0 -0
  392. codex-2.5.4/codex/static/assets/submit-footer-i0x6RSsh.js.gz +0 -0
  393. codex-2.5.4/codex/static/assets/tagging-choices-Cz8PJN0_.js +1 -0
  394. codex-2.5.4/codex/static/assets/tagging-choices-Cz8PJN0_.js.br +0 -0
  395. codex-2.5.4/codex/static/assets/tagging-choices-Cz8PJN0_.js.gz +0 -0
  396. codex-2.5.4/codex/static/assets/tagging-tab-DJO-yx23.css +1 -0
  397. codex-2.5.4/codex/static/assets/tagging-tab-DJO-yx23.css.br +0 -0
  398. codex-2.5.4/codex/static/assets/tagging-tab-DJO-yx23.css.gz +0 -0
  399. codex-2.5.4/codex/static/assets/tagging-tab-mwlB_eKi.js +1 -0
  400. codex-2.5.4/codex/static/assets/tagging-tab-mwlB_eKi.js.br +0 -0
  401. codex-2.5.4/codex/static/assets/tagging-tab-mwlB_eKi.js.gz +0 -0
  402. codex-2.5.4/codex/static/assets/tooltip-ccIZ5bGX.js +1 -0
  403. codex-2.5.4/codex/static/assets/tooltip-ccIZ5bGX.js.br +0 -0
  404. codex-2.5.4/codex/static/assets/tooltip-ccIZ5bGX.js.gz +0 -0
  405. codex-2.5.4/codex/static/assets/transitions-C7qDTrRD.js +1 -0
  406. codex-2.5.4/codex/static/assets/transitions-C7qDTrRD.js.br +0 -0
  407. codex-2.5.4/codex/static/assets/transitions-C7qDTrRD.js.gz +0 -0
  408. codex-2.5.4/codex/static/assets/unauthorized-DJ99j3L5.js +1 -0
  409. codex-2.5.4/codex/static/assets/unauthorized-DJ99j3L5.js.br +0 -0
  410. codex-2.5.4/codex/static/assets/unauthorized-DJ99j3L5.js.gz +0 -0
  411. codex-2.5.4/codex/static/assets/use-now-timer-C6d1odjI.js +1 -0
  412. codex-2.5.4/codex/static/assets/use-now-timer-C6d1odjI.js.br +0 -0
  413. codex-2.5.4/codex/static/assets/use-now-timer-C6d1odjI.js.gz +0 -0
  414. codex-2.5.4/codex/static/assets/user-tab-HfkOBuB-.js +1 -0
  415. codex-2.5.4/codex/static/assets/user-tab-HfkOBuB-.js.br +0 -0
  416. codex-2.5.4/codex/static/assets/user-tab-HfkOBuB-.js.gz +0 -0
  417. codex-2.5.4/codex/static/assets/vendor-vue-BGsxEsqj.js +4 -0
  418. codex-2.5.4/codex/static/assets/vendor-vue-BGsxEsqj.js.br +0 -0
  419. codex-2.5.4/codex/static/assets/vendor-vue-BGsxEsqj.js.gz +0 -0
  420. codex-2.5.4/codex/static/manifest.json +1825 -0
  421. codex-2.5.4/codex/static/manifest.json.br +0 -0
  422. codex-2.5.4/codex/static/manifest.json.gz +0 -0
  423. codex-2.5.4/codex/urls/api/v4/admin.py +346 -0
  424. codex-2.5.4/codex/user_data/dump.py +268 -0
  425. codex-2.5.4/codex/user_data/serializers.py +425 -0
  426. codex-2.5.4/codex/user_data/store.py +315 -0
  427. codex-2.5.4/codex/views/admin/custom_cover.py +284 -0
  428. codex-2.5.4/codex/views/admin/doctor.py +25 -0
  429. codex-2.5.4/codex/views/admin/dump_user_data.py +16 -0
  430. codex-2.5.4/codex/views/admin/email.py +144 -0
  431. codex-2.5.4/codex/views/admin/identifier_parse.py +151 -0
  432. codex-2.5.4/codex/views/admin/oidc.py +77 -0
  433. codex-2.5.4/codex/views/admin/restore_user_data.py +50 -0
  434. codex-2.5.4/codex/views/admin/stats.py +106 -0
  435. codex-2.5.4/codex/views/admin/tagging_validate.py +68 -0
  436. codex-2.5.4/codex/views/admin/tagwrite.py +251 -0
  437. codex-2.5.4/codex/views/admin/tasks.py +215 -0
  438. codex-2.5.4/codex/views/auth.py +794 -0
  439. codex-2.5.4/codex/views/browser/annotate/order.py +655 -0
  440. codex-2.5.4/codex/views/browser/bookmark.py +103 -0
  441. codex-2.5.4/codex/views/browser/breadcrumbs.py +248 -0
  442. codex-2.5.4/codex/views/browser/browser.py +516 -0
  443. codex-2.5.4/codex/views/browser/collection_mtime.py +199 -0
  444. codex-2.5.4/codex/views/browser/filters/search/field/expression.py +192 -0
  445. codex-2.5.4/codex/views/browser/filters/search/parse.py +350 -0
  446. codex-2.5.4/codex/views/browser/force_update.py +50 -0
  447. codex-2.5.4/codex/views/browser/order_by.py +239 -0
  448. codex-2.5.4/codex/views/browser/params.py +86 -0
  449. codex-2.5.4/codex/views/browser/saved_settings.py +312 -0
  450. codex-2.5.4/codex/views/browser/validate.py +186 -0
  451. codex-2.5.4/codex/views/opds/auth.py +27 -0
  452. codex-2.5.4/codex/views/opds/authentication/v1.py +93 -0
  453. codex-2.5.4/codex/views/opds/feed.py +17 -0
  454. codex-2.5.4/codex/views/opds/v1/entry/entry.py +162 -0
  455. codex-2.5.4/codex/views/opds/v1/facets.py +185 -0
  456. codex-2.5.4/codex/views/opds/v2/feed/links.py +140 -0
  457. codex-2.5.4/codex/views/opds/v2/feed/publications.py +579 -0
  458. codex-2.5.4/codex/views/opds/v2/manifest.py +417 -0
  459. codex-2.5.4/codex/views/reader/books.py +264 -0
  460. codex-2.5.4/codex/views/reader/page.py +253 -0
  461. codex-2.5.4/codex/views/reader/params.py +78 -0
  462. codex-2.5.4/codex/views/settings.py +587 -0
  463. codex-2.5.4/codex/views/util.py +71 -0
  464. codex-2.5.4/codex/websockets/payloads.py +47 -0
  465. codex-2.5.4/docs/NEWS.md +2714 -0
  466. codex-2.5.4/docs/README.md +1237 -0
  467. codex-2.5.4/docs/WINDOWS.md +161 -0
  468. codex-2.5.4/frontend/.eslintcache +1 -0
  469. codex-2.5.4/frontend/bun.lock +845 -0
  470. codex-2.5.4/frontend/package.json +53 -0
  471. codex-2.5.4/frontend/src/api/v4/admin.js +261 -0
  472. codex-2.5.4/frontend/src/app.vue +92 -0
  473. codex-2.5.4/frontend/src/choices/tagging-choices.json +55 -0
  474. codex-2.5.4/frontend/src/components/admin/admin-header.vue +126 -0
  475. codex-2.5.4/frontend/src/components/admin/drawer/admin-menu.vue +153 -0
  476. codex-2.5.4/frontend/src/components/admin/tabs/doctor-tab.vue +106 -0
  477. codex-2.5.4/frontend/src/components/admin/tabs/doctor-table.vue +139 -0
  478. codex-2.5.4/frontend/src/components/admin/tabs/tagging-tab.vue +783 -0
  479. codex-2.5.4/frontend/src/components/browser/toolbars/top/browser-toolbar-top.vue +89 -0
  480. codex-2.5.4/frontend/src/components/online-tag/launcher-dialog.vue +782 -0
  481. codex-2.5.4/frontend/src/components/online-tag/review-button.vue +74 -0
  482. codex-2.5.4/frontend/src/components/reader/drawer/reader-settings-scope.vue +314 -0
  483. codex-2.5.4/frontend/src/components/reader/toolbars/nav/reader-toolbar-nav.vue +159 -0
  484. codex-2.5.4/frontend/src/components/reader/toolbars/top/reader-toolbar-top.vue +243 -0
  485. codex-2.5.4/frontend/src/components/reader/use-reader-keyup.js +49 -0
  486. codex-2.5.4/frontend/src/components/settings/button.vue +78 -0
  487. codex-2.5.4/frontend/src/plugins/router.js +172 -0
  488. codex-2.5.4/frontend/src/stores/admin.js +682 -0
  489. codex-2.5.4/frontend/src/stores/auth.js +274 -0
  490. codex-2.5.4/frontend/src/stores/online-tag.js +291 -0
  491. codex-2.5.4/frontend/tests/unit/doctor-tab.test.js +224 -0
  492. codex-2.5.4/frontend/tests/unit/online-tag-store.test.js +377 -0
  493. codex-2.5.4/frontend/tests/unit/review-button.test.js +78 -0
  494. codex-2.5.4/frontend/tests/unit/use-reader-keyup.test.js +149 -0
  495. codex-2.5.4/package.json +92 -0
  496. codex-2.5.4/pyproject.toml +443 -0
  497. codex-2.5.4/pyproject.toml.orig +410 -0
  498. codex-2.5.4/tests/importer/test_failed_import_vanished.py +99 -0
  499. codex-2.5.4/tests/importer/test_moved_by_signature.py +103 -0
  500. codex-2.5.4/tests/importer/test_update_all.py +884 -0
  501. codex-2.5.4/tests/opds_schema.py +327 -0
  502. codex-2.5.4/tests/perf/run_baseline.py +382 -0
  503. codex-2.5.4/tests/perf/run_opds_baseline.py +365 -0
  504. codex-2.5.4/tests/perf/run_reader_baseline.py +429 -0
  505. codex-2.5.4/tests/schema/opds/fetch_schemas.py +118 -0
  506. codex-2.5.4/tests/test_admin_custom_cover.py +297 -0
  507. codex-2.5.4/tests/test_admin_doctor_endpoint.py +106 -0
  508. codex-2.5.4/tests/test_bookmark_unique.py +186 -0
  509. codex-2.5.4/tests/test_ci_workflow.py +140 -0
  510. codex-2.5.4/tests/test_cover_pool_stop.py +55 -0
  511. codex-2.5.4/tests/test_credential_validator.py +323 -0
  512. codex-2.5.4/tests/test_disk_snapshot_unreadable.py +162 -0
  513. codex-2.5.4/tests/test_dockerfile.py +120 -0
  514. codex-2.5.4/tests/test_doctor.py +133 -0
  515. codex-2.5.4/tests/test_doctor_codex_checks.py +259 -0
  516. codex-2.5.4/tests/test_download_errors.py +303 -0
  517. codex-2.5.4/tests/test_fs_filters_comic_suffixes.py +45 -0
  518. codex-2.5.4/tests/test_fs_filters_ignore.py +259 -0
  519. codex-2.5.4/tests/test_janitor_folder_relations.py +300 -0
  520. codex-2.5.4/tests/test_latest_version_fetch.py +250 -0
  521. codex-2.5.4/tests/test_librarian_status_updates.py +79 -0
  522. codex-2.5.4/tests/test_migration_bookmark_dedupe.py +211 -0
  523. codex-2.5.4/tests/test_onlinetag_credentials.py +76 -0
  524. codex-2.5.4/tests/test_onlinetag_estimate.py +77 -0
  525. codex-2.5.4/tests/test_onlinetag_issue_id.py +25 -0
  526. codex-2.5.4/tests/test_onlinetag_live_lookup.py +266 -0
  527. codex-2.5.4/tests/test_onlinetag_match_mode_ask.py +86 -0
  528. codex-2.5.4/tests/test_onlinetag_merge_task.py +80 -0
  529. codex-2.5.4/tests/test_onlinetag_outcome_stats.py +269 -0
  530. codex-2.5.4/tests/test_onlinetag_prompt_endpoints.py +271 -0
  531. codex-2.5.4/tests/test_onlinetag_prompt_resolution.py +603 -0
  532. codex-2.5.4/tests/test_onlinetag_quota_pause.py +230 -0
  533. codex-2.5.4/tests/test_onlinetag_resume_endpoints.py +271 -0
  534. codex-2.5.4/tests/test_onlinetag_session_manager.py +757 -0
  535. codex-2.5.4/tests/test_onlinetag_snapshot.py +618 -0
  536. codex-2.5.4/tests/test_onlinetag_tag_pass.py +312 -0
  537. codex-2.5.4/tests/test_opds_degrade.py +234 -0
  538. codex-2.5.4/tests/test_release_info.py +65 -0
  539. codex-2.5.4/tests/test_scribe_priority.py +81 -0
  540. codex-2.5.4/tests/test_search_field_expression.py +48 -0
  541. codex-2.5.4/tests/test_settings_defaults_seeding.py +264 -0
  542. codex-2.5.4/tests/test_tag_by_id.py +313 -0
  543. codex-2.5.4/tests/test_tag_write_date.py +208 -0
  544. codex-2.5.4/tests/test_tag_write_delete_keys.py +238 -0
  545. codex-2.5.4/tests/test_tag_write_errors.py +188 -0
  546. codex-2.5.4/tests/test_tag_writer_preflight.py +368 -0
  547. codex-2.5.4/tests/test_tag_writer_rename.py +595 -0
  548. codex-2.5.4/tests/test_tagging_rename_wiring.py +338 -0
  549. codex-2.5.4/tests/test_tagging_validate_endpoint.py +174 -0
  550. codex-2.5.4/tests/test_url_path_prefix.py +33 -0
  551. codex-2.5.4/tests/test_user_data_backups.py +99 -0
  552. codex-2.5.4/tests/test_user_data_dump.py +182 -0
  553. codex-2.5.4/tests/test_user_data_store.py +193 -0
  554. codex-2.5.4/tests/test_version_outdated.py +127 -0
  555. codex-2.5.4/tests/test_watcher_move_detect.py +164 -0
  556. codex-2.5.4/tests/test_watcher_unmount_guard.py +202 -0
  557. codex-2.5.4/tests/test_xz.py +94 -0
  558. codex-2.5.4/uv.lock +4547 -0
  559. codex-2.5.2/.dockerignore +0 -51
  560. codex-2.5.2/.github/actions/devenv-ci-container/action.yml +0 -35
  561. codex-2.5.2/.github/actions/devenv-pypi/action.yml +0 -50
  562. codex-2.5.2/.github/workflows/devenv-check.yml +0 -368
  563. codex-2.5.2/.github/workflows/devenv-release.yml +0 -48
  564. codex-2.5.2/.gitignore +0 -96
  565. codex-2.5.2/.prettierignore +0 -27
  566. codex-2.5.2/NEWS.md +0 -2682
  567. codex-2.5.2/PKG-INFO +0 -1274
  568. codex-2.5.2/README.md +0 -1213
  569. codex-2.5.2/bin/ci-reuse-dist.sh +0 -48
  570. codex-2.5.2/bin/cleanup-pypi-alpha.sh +0 -31
  571. codex-2.5.2/bin/dev-module.sh +0 -10
  572. codex-2.5.2/bin/docker-compose-exit.sh +0 -6
  573. codex-2.5.2/bin/docker-tag-latest.sh +0 -40
  574. codex-2.5.2/bin/find-sh.sh +0 -79
  575. codex-2.5.2/bin/fix-django.sh +0 -10
  576. codex-2.5.2/bin/fix-docker.sh +0 -11
  577. codex-2.5.2/bin/fix-sh.sh +0 -13
  578. codex-2.5.2/bin/hub_prune_stale.py +0 -519
  579. codex-2.5.2/bin/lint-ci.sh +0 -12
  580. codex-2.5.2/bin/lint-complexity.sh +0 -10
  581. codex-2.5.2/bin/lint-django.sh +0 -10
  582. codex-2.5.2/bin/lint-docker.sh +0 -12
  583. codex-2.5.2/bin/lint-python.sh +0 -13
  584. codex-2.5.2/bin/lint-sh.sh +0 -14
  585. codex-2.5.2/bin/manage.py +0 -67
  586. codex-2.5.2/bin/pm +0 -5
  587. codex-2.5.2/bin/prettier-nginx.sh +0 -7
  588. codex-2.5.2/bin/release_info.py +0 -238
  589. codex-2.5.2/bin/roman.py +0 -215
  590. codex-2.5.2/bin/run-test-proxy.sh +0 -102
  591. codex-2.5.2/bin/sort-ignore.sh +0 -21
  592. codex-2.5.2/bin/test-python.sh +0 -7
  593. codex-2.5.2/bin/type-python.sh +0 -9
  594. codex-2.5.2/bin/uml.sh +0 -5
  595. codex-2.5.2/bun.lock +0 -804
  596. codex-2.5.2/codex/applications/http.py +0 -143
  597. codex-2.5.2/codex/applications/workers.py +0 -250
  598. codex-2.5.2/codex/choices/admin.py +0 -86
  599. codex-2.5.2/codex/choices/notifications.py +0 -45
  600. codex-2.5.2/codex/librarian/bookmark/bookmarkd.py +0 -195
  601. codex-2.5.2/codex/librarian/bookmark/update.py +0 -278
  602. codex-2.5.2/codex/librarian/covers/create.py +0 -428
  603. codex-2.5.2/codex/librarian/fs/filters.py +0 -107
  604. codex-2.5.2/codex/librarian/fs/watcher/dirs.py +0 -94
  605. codex-2.5.2/codex/librarian/notifier/tasks.py +0 -70
  606. codex-2.5.2/codex/librarian/onlinetag/credential_validator.py +0 -180
  607. codex-2.5.2/codex/librarian/onlinetag/issue_id.py +0 -24
  608. codex-2.5.2/codex/librarian/onlinetag/prompt_apply.py +0 -413
  609. codex-2.5.2/codex/librarian/onlinetag/session_manager.py +0 -1030
  610. codex-2.5.2/codex/librarian/onlinetag/session_state.py +0 -225
  611. codex-2.5.2/codex/librarian/onlinetag/statuses.py +0 -38
  612. codex-2.5.2/codex/librarian/scribe/force_updater.py +0 -38
  613. codex-2.5.2/codex/librarian/scribe/importer/create/link_fks.py +0 -190
  614. codex-2.5.2/codex/librarian/scribe/importer/delete/comics.py +0 -122
  615. codex-2.5.2/codex/librarian/scribe/importer/failed/query.py +0 -103
  616. codex-2.5.2/codex/librarian/scribe/importer/finish.py +0 -150
  617. codex-2.5.2/codex/librarian/scribe/importer/importer.py +0 -118
  618. codex-2.5.2/codex/librarian/scribe/importer/init.py +0 -443
  619. codex-2.5.2/codex/librarian/scribe/importer/link/prepare.py +0 -249
  620. codex-2.5.2/codex/librarian/scribe/importer/moved/covers.py +0 -96
  621. codex-2.5.2/codex/librarian/scribe/importer/moved/folders.py +0 -237
  622. codex-2.5.2/codex/librarian/scribe/importer/query/foreign_keys.py +0 -205
  623. codex-2.5.2/codex/librarian/scribe/importer/query/links_m2m.py +0 -231
  624. codex-2.5.2/codex/librarian/scribe/importer/revive.py +0 -228
  625. codex-2.5.2/codex/librarian/scribe/importer/search/sync_m2m.py +0 -157
  626. codex-2.5.2/codex/librarian/scribe/importer/search/update.py +0 -230
  627. codex-2.5.2/codex/librarian/scribe/janitor/integrity/foreign_keys.py +0 -670
  628. codex-2.5.2/codex/librarian/scribe/janitor/reap.py +0 -142
  629. codex-2.5.2/codex/librarian/scribe/janitor/vacuum.py +0 -169
  630. codex-2.5.2/codex/librarian/scribe/lazy_importer.py +0 -50
  631. codex-2.5.2/codex/librarian/scribe/search/sync.py +0 -401
  632. codex-2.5.2/codex/librarian/scribe/tag_writer.py +0 -715
  633. codex-2.5.2/codex/librarian/scribe/tagwrite_errors.py +0 -76
  634. codex-2.5.2/codex/librarian/scribe/timestamp_update.py +0 -154
  635. codex-2.5.2/codex/librarian/status.py +0 -83
  636. codex-2.5.2/codex/librarian/telemeter/admin_stats.py +0 -265
  637. codex-2.5.2/codex/librarian/telemeter/count_stats.py +0 -184
  638. codex-2.5.2/codex/librarian/telemeter/per_user_stats.py +0 -259
  639. codex-2.5.2/codex/management/commands/restore_user_data.py +0 -60
  640. codex-2.5.2/codex/middleware.py +0 -152
  641. codex-2.5.2/codex/models/admin.py +0 -476
  642. codex-2.5.2/codex/models/identifier.py +0 -137
  643. codex-2.5.2/codex/models/named.py +0 -290
  644. codex-2.5.2/codex/models/paths.py +0 -173
  645. codex-2.5.2/codex/models/util.py +0 -68
  646. codex-2.5.2/codex/oidc.py +0 -392
  647. codex-2.5.2/codex/serializers/admin/custom_cover.py +0 -106
  648. codex-2.5.2/codex/serializers/admin/tagging.py +0 -227
  649. codex-2.5.2/codex/serializers/opds/v1.py +0 -72
  650. codex-2.5.2/codex/settings/db.py +0 -335
  651. codex-2.5.2/codex/startup/__init__.py +0 -260
  652. codex-2.5.2/codex/static/assets/VAvatar-D29nc-oB.js +0 -1
  653. codex-2.5.2/codex/static/assets/VAvatar-D29nc-oB.js.br +0 -0
  654. codex-2.5.2/codex/static/assets/VAvatar-D29nc-oB.js.gz +0 -0
  655. codex-2.5.2/codex/static/assets/VCard-B6ACYUKq.js +0 -1
  656. codex-2.5.2/codex/static/assets/VCard-B6ACYUKq.js.br +0 -0
  657. codex-2.5.2/codex/static/assets/VCard-B6ACYUKq.js.gz +0 -0
  658. codex-2.5.2/codex/static/assets/VCheckbox-B_nXx9w4.js +0 -1
  659. codex-2.5.2/codex/static/assets/VCheckbox-B_nXx9w4.js.br +0 -0
  660. codex-2.5.2/codex/static/assets/VCheckbox-B_nXx9w4.js.gz +0 -0
  661. codex-2.5.2/codex/static/assets/VCheckboxBtn-d6hb81bO.js +0 -1
  662. codex-2.5.2/codex/static/assets/VCheckboxBtn-d6hb81bO.js.br +0 -0
  663. codex-2.5.2/codex/static/assets/VCheckboxBtn-d6hb81bO.js.gz +0 -0
  664. codex-2.5.2/codex/static/assets/VChip-BIRKno8L.js +0 -1
  665. codex-2.5.2/codex/static/assets/VChip-BIRKno8L.js.br +0 -0
  666. codex-2.5.2/codex/static/assets/VChip-BIRKno8L.js.gz +0 -0
  667. codex-2.5.2/codex/static/assets/VChip-C5tJo2I6.css +0 -1
  668. codex-2.5.2/codex/static/assets/VChip-C5tJo2I6.css.br +0 -0
  669. codex-2.5.2/codex/static/assets/VChip-C5tJo2I6.css.gz +0 -0
  670. codex-2.5.2/codex/static/assets/VCombobox-q5bdaVNK.js +0 -2
  671. codex-2.5.2/codex/static/assets/VCombobox-q5bdaVNK.js.br +0 -0
  672. codex-2.5.2/codex/static/assets/VCombobox-q5bdaVNK.js.gz +0 -0
  673. codex-2.5.2/codex/static/assets/VContainer-NClTJlys.js +0 -1
  674. codex-2.5.2/codex/static/assets/VContainer-NClTJlys.js.br +0 -0
  675. codex-2.5.2/codex/static/assets/VContainer-NClTJlys.js.gz +0 -0
  676. codex-2.5.2/codex/static/assets/VDataTableVirtual-Ds-gUzbn.js +0 -1
  677. codex-2.5.2/codex/static/assets/VDataTableVirtual-Ds-gUzbn.js.br +0 -0
  678. codex-2.5.2/codex/static/assets/VDataTableVirtual-Ds-gUzbn.js.gz +0 -0
  679. codex-2.5.2/codex/static/assets/VDataTableVirtual-myUG9XI9.css +0 -1
  680. codex-2.5.2/codex/static/assets/VDataTableVirtual-myUG9XI9.css.br +0 -0
  681. codex-2.5.2/codex/static/assets/VDataTableVirtual-myUG9XI9.css.gz +0 -0
  682. codex-2.5.2/codex/static/assets/VDivider-Dcir611P.js +0 -1
  683. codex-2.5.2/codex/static/assets/VDivider-Dcir611P.js.br +0 -0
  684. codex-2.5.2/codex/static/assets/VDivider-Dcir611P.js.gz +0 -0
  685. codex-2.5.2/codex/static/assets/VExpansionPanels-81xwCx4V.js +0 -1
  686. codex-2.5.2/codex/static/assets/VExpansionPanels-81xwCx4V.js.br +0 -0
  687. codex-2.5.2/codex/static/assets/VExpansionPanels-81xwCx4V.js.gz +0 -0
  688. codex-2.5.2/codex/static/assets/VForm-CK23X38a.js +0 -1
  689. codex-2.5.2/codex/static/assets/VForm-CK23X38a.js.br +0 -0
  690. codex-2.5.2/codex/static/assets/VForm-CK23X38a.js.gz +0 -0
  691. codex-2.5.2/codex/static/assets/VListItem-Ccq7H0pv.js +0 -1
  692. codex-2.5.2/codex/static/assets/VListItem-Ccq7H0pv.js.br +0 -0
  693. codex-2.5.2/codex/static/assets/VListItem-Ccq7H0pv.js.gz +0 -0
  694. codex-2.5.2/codex/static/assets/VOverlay-nzEqDSg0.js +0 -1
  695. codex-2.5.2/codex/static/assets/VOverlay-nzEqDSg0.js.br +0 -0
  696. codex-2.5.2/codex/static/assets/VOverlay-nzEqDSg0.js.gz +0 -0
  697. codex-2.5.2/codex/static/assets/VProgressCircular-DGKSiTON.js +0 -10
  698. codex-2.5.2/codex/static/assets/VProgressCircular-DGKSiTON.js.br +0 -0
  699. codex-2.5.2/codex/static/assets/VProgressCircular-DGKSiTON.js.gz +0 -0
  700. codex-2.5.2/codex/static/assets/VRadioGroup-BXJxVqlm.js +0 -1
  701. codex-2.5.2/codex/static/assets/VRadioGroup-BXJxVqlm.js.br +0 -0
  702. codex-2.5.2/codex/static/assets/VRadioGroup-BXJxVqlm.js.gz +0 -0
  703. codex-2.5.2/codex/static/assets/VSelect--GP2VLqn.js +0 -2
  704. codex-2.5.2/codex/static/assets/VSelect--GP2VLqn.js.br +0 -0
  705. codex-2.5.2/codex/static/assets/VSelect--GP2VLqn.js.gz +0 -0
  706. codex-2.5.2/codex/static/assets/VSelectionControl-BxknLgDt.js +0 -1
  707. codex-2.5.2/codex/static/assets/VSelectionControl-BxknLgDt.js.br +0 -0
  708. codex-2.5.2/codex/static/assets/VSelectionControl-BxknLgDt.js.gz +0 -0
  709. codex-2.5.2/codex/static/assets/VSnackbar-CrNIR-ND.js +0 -1
  710. codex-2.5.2/codex/static/assets/VSnackbar-CrNIR-ND.js.br +0 -0
  711. codex-2.5.2/codex/static/assets/VSnackbar-CrNIR-ND.js.gz +0 -0
  712. codex-2.5.2/codex/static/assets/VSpacer-UKiwf93o.js +0 -1
  713. codex-2.5.2/codex/static/assets/VTable-ByPFL64g.js +0 -1
  714. codex-2.5.2/codex/static/assets/VTable-ByPFL64g.js.br +0 -0
  715. codex-2.5.2/codex/static/assets/VTable-ByPFL64g.js.gz +0 -0
  716. codex-2.5.2/codex/static/assets/VTabs-BwaD-qwW.js +0 -1
  717. codex-2.5.2/codex/static/assets/VTabs-BwaD-qwW.js.br +0 -0
  718. codex-2.5.2/codex/static/assets/VTabs-BwaD-qwW.js.gz +0 -0
  719. codex-2.5.2/codex/static/assets/VTextField-Dd-WuSKg.js +0 -1
  720. codex-2.5.2/codex/static/assets/VTextField-Dd-WuSKg.js.br +0 -0
  721. codex-2.5.2/codex/static/assets/VTextField-Dd-WuSKg.js.gz +0 -0
  722. codex-2.5.2/codex/static/assets/VTooltip-CaI8_HOK.js +0 -1
  723. codex-2.5.2/codex/static/assets/VTooltip-CaI8_HOK.js.br +0 -0
  724. codex-2.5.2/codex/static/assets/VTooltip-CaI8_HOK.js.gz +0 -0
  725. codex-2.5.2/codex/static/assets/action-bar-D3T3XVDI.js +0 -1
  726. codex-2.5.2/codex/static/assets/action-bar-D3T3XVDI.js.br +0 -2
  727. codex-2.5.2/codex/static/assets/action-bar-D3T3XVDI.js.gz +0 -0
  728. codex-2.5.2/codex/static/assets/admin-Bhu8byIr.js +0 -1
  729. codex-2.5.2/codex/static/assets/admin-Bhu8byIr.js.br +0 -0
  730. codex-2.5.2/codex/static/assets/admin-Bhu8byIr.js.gz +0 -0
  731. codex-2.5.2/codex/static/assets/admin-CLoqRLh0.js +0 -1
  732. codex-2.5.2/codex/static/assets/admin-CLoqRLh0.js.br +0 -0
  733. codex-2.5.2/codex/static/assets/admin-CmoRz6aH.js +0 -1
  734. codex-2.5.2/codex/static/assets/admin-CmoRz6aH.js.br +0 -0
  735. codex-2.5.2/codex/static/assets/admin-CmoRz6aH.js.gz +0 -0
  736. codex-2.5.2/codex/static/assets/admin-DCTXdHq6.js +0 -1
  737. codex-2.5.2/codex/static/assets/admin-DCTXdHq6.js.br +0 -0
  738. codex-2.5.2/codex/static/assets/admin-DrZqnft6.css +0 -1
  739. codex-2.5.2/codex/static/assets/admin-DrZqnft6.css.br +0 -0
  740. codex-2.5.2/codex/static/assets/admin-DrZqnft6.css.gz +0 -0
  741. codex-2.5.2/codex/static/assets/admin-menu-C-YtIxLd.js +0 -1
  742. codex-2.5.2/codex/static/assets/admin-menu-C-YtIxLd.js.br +0 -0
  743. codex-2.5.2/codex/static/assets/admin-menu-C-YtIxLd.js.gz +0 -0
  744. codex-2.5.2/codex/static/assets/admin-menu-Dk5nS7Ea.css +0 -1
  745. codex-2.5.2/codex/static/assets/admin-menu-Dk5nS7Ea.css.br +0 -0
  746. codex-2.5.2/codex/static/assets/admin-menu-Dk5nS7Ea.css.gz +0 -0
  747. codex-2.5.2/codex/static/assets/admin-qIImnmTR.js +0 -1
  748. codex-2.5.2/codex/static/assets/admin-qIImnmTR.js.br +0 -0
  749. codex-2.5.2/codex/static/assets/admin-qIImnmTR.js.gz +0 -0
  750. codex-2.5.2/codex/static/assets/admin-section-D4DQuE2f.js +0 -1
  751. codex-2.5.2/codex/static/assets/admin-section-D4DQuE2f.js.br +0 -0
  752. codex-2.5.2/codex/static/assets/admin-section-D4DQuE2f.js.gz +0 -0
  753. codex-2.5.2/codex/static/assets/admin-settings-button-errors-saa9G_P8.js +0 -1
  754. codex-2.5.2/codex/static/assets/admin-settings-button-errors-saa9G_P8.js.br +0 -0
  755. codex-2.5.2/codex/static/assets/admin-settings-button-errors-saa9G_P8.js.gz +0 -0
  756. codex-2.5.2/codex/static/assets/admin-settings-button-progress-B1zx-fpE.js +0 -1
  757. codex-2.5.2/codex/static/assets/admin-settings-button-progress-B1zx-fpE.js.br +0 -0
  758. codex-2.5.2/codex/static/assets/admin-settings-button-progress-B1zx-fpE.js.gz +0 -0
  759. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-3DmurNi6.js +0 -1
  760. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-3DmurNi6.js.br +0 -1
  761. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-3DmurNi6.js.gz +0 -0
  762. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css +0 -1
  763. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css.br +0 -0
  764. codex-2.5.2/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css.gz +0 -0
  765. codex-2.5.2/codex/static/assets/auth-DaQygWAo.js +0 -1
  766. codex-2.5.2/codex/static/assets/auth-DaQygWAo.js.br +0 -0
  767. codex-2.5.2/codex/static/assets/auth-DaQygWAo.js.gz +0 -0
  768. codex-2.5.2/codex/static/assets/auth-form-mixin-Cf25uvAE.js +0 -1
  769. codex-2.5.2/codex/static/assets/auth-form-mixin-Cf25uvAE.js.br +0 -0
  770. codex-2.5.2/codex/static/assets/auth-form-mixin-Cf25uvAE.js.gz +0 -0
  771. codex-2.5.2/codex/static/assets/auth-tab-DfJGi-uN.js +0 -16
  772. codex-2.5.2/codex/static/assets/auth-tab-DfJGi-uN.js.br +0 -0
  773. codex-2.5.2/codex/static/assets/auth-tab-DfJGi-uN.js.gz +0 -0
  774. codex-2.5.2/codex/static/assets/browser-B2e9HXdS.js +0 -2
  775. codex-2.5.2/codex/static/assets/browser-B2e9HXdS.js.br +0 -0
  776. codex-2.5.2/codex/static/assets/browser-B2e9HXdS.js.gz +0 -0
  777. codex-2.5.2/codex/static/assets/browser-B_fvlpOV.js +0 -2
  778. codex-2.5.2/codex/static/assets/browser-B_fvlpOV.js.br +0 -0
  779. codex-2.5.2/codex/static/assets/browser-B_fvlpOV.js.gz +0 -0
  780. codex-2.5.2/codex/static/assets/browser-KQS1nie9.css +0 -1
  781. codex-2.5.2/codex/static/assets/browser-KQS1nie9.css.br +0 -0
  782. codex-2.5.2/codex/static/assets/browser-KQS1nie9.css.gz +0 -0
  783. codex-2.5.2/codex/static/assets/browser-table-column-picker-BGgeBgSU.js +0 -1
  784. codex-2.5.2/codex/static/assets/browser-table-column-picker-BGgeBgSU.js.br +0 -0
  785. codex-2.5.2/codex/static/assets/browser-table-column-picker-BGgeBgSU.js.gz +0 -0
  786. codex-2.5.2/codex/static/assets/clipboard-CvvZCZV1.js +0 -1
  787. codex-2.5.2/codex/static/assets/clipboard-CvvZCZV1.js.br +0 -0
  788. codex-2.5.2/codex/static/assets/clipboard-CvvZCZV1.js.gz +0 -0
  789. codex-2.5.2/codex/static/assets/close-button-BpCYIRzy.js +0 -1
  790. codex-2.5.2/codex/static/assets/close-button-BpCYIRzy.js.br +0 -4
  791. codex-2.5.2/codex/static/assets/close-button-BpCYIRzy.js.gz +0 -0
  792. codex-2.5.2/codex/static/assets/codex-list-item-vbl083u3.js +0 -1
  793. codex-2.5.2/codex/static/assets/codex-list-item-vbl083u3.js.br +0 -0
  794. codex-2.5.2/codex/static/assets/codex-list-item-vbl083u3.js.gz +0 -0
  795. codex-2.5.2/codex/static/assets/common-CsNKi8hy.js +0 -1
  796. codex-2.5.2/codex/static/assets/common-CsNKi8hy.js.br +0 -0
  797. codex-2.5.2/codex/static/assets/common-CsNKi8hy.js.gz +0 -0
  798. codex-2.5.2/codex/static/assets/confirm-dialog-DepYKtCw.js +0 -1
  799. codex-2.5.2/codex/static/assets/confirm-dialog-DepYKtCw.js.br +0 -0
  800. codex-2.5.2/codex/static/assets/confirm-dialog-DepYKtCw.js.gz +0 -0
  801. codex-2.5.2/codex/static/assets/confirm-footer-CPfAZCVt.js +0 -1
  802. codex-2.5.2/codex/static/assets/confirm-footer-CPfAZCVt.js.br +0 -0
  803. codex-2.5.2/codex/static/assets/confirm-footer-CPfAZCVt.js.gz +0 -0
  804. codex-2.5.2/codex/static/assets/cover-popup-C7h0tv7o.js +0 -1
  805. codex-2.5.2/codex/static/assets/cover-popup-C7h0tv7o.js.br +0 -0
  806. codex-2.5.2/codex/static/assets/cover-popup-C7h0tv7o.js.gz +0 -0
  807. codex-2.5.2/codex/static/assets/createSimpleFunctional-DkaGsm1l.js +0 -1
  808. codex-2.5.2/codex/static/assets/createSimpleFunctional-DkaGsm1l.js.br +0 -1
  809. codex-2.5.2/codex/static/assets/createSimpleFunctional-DkaGsm1l.js.gz +0 -0
  810. codex-2.5.2/codex/static/assets/custom-covers-tab-74CwGKZy.js +0 -1
  811. codex-2.5.2/codex/static/assets/custom-covers-tab-74CwGKZy.js.br +0 -0
  812. codex-2.5.2/codex/static/assets/custom-covers-tab-74CwGKZy.js.gz +0 -0
  813. codex-2.5.2/codex/static/assets/datetime-column-DMOk8G0i.js +0 -1
  814. codex-2.5.2/codex/static/assets/datetime-column-DMOk8G0i.js.br +0 -0
  815. codex-2.5.2/codex/static/assets/datetime-column-DMOk8G0i.js.gz +0 -0
  816. codex-2.5.2/codex/static/assets/defaults-tab-DrCKXPHs.js +0 -1
  817. codex-2.5.2/codex/static/assets/defaults-tab-DrCKXPHs.js.br +0 -0
  818. codex-2.5.2/codex/static/assets/defaults-tab-DrCKXPHs.js.gz +0 -0
  819. codex-2.5.2/codex/static/assets/delete-row-dialog-Dxyi-Iny.js +0 -1
  820. codex-2.5.2/codex/static/assets/delete-row-dialog-Dxyi-Iny.js.br +0 -0
  821. codex-2.5.2/codex/static/assets/delete-row-dialog-Dxyi-Iny.js.gz +0 -0
  822. codex-2.5.2/codex/static/assets/dist-CGi8j66w.js +0 -1
  823. codex-2.5.2/codex/static/assets/dist-CGi8j66w.js.br +0 -0
  824. codex-2.5.2/codex/static/assets/dist-CGi8j66w.js.gz +0 -0
  825. codex-2.5.2/codex/static/assets/edit-panel-C0tZGhCV.js +0 -1
  826. codex-2.5.2/codex/static/assets/edit-panel-C0tZGhCV.js.br +0 -0
  827. codex-2.5.2/codex/static/assets/edit-panel-C0tZGhCV.js.gz +0 -0
  828. codex-2.5.2/codex/static/assets/email-tab-D3WFyLkh.js +0 -1
  829. codex-2.5.2/codex/static/assets/email-tab-D3WFyLkh.js.br +0 -0
  830. codex-2.5.2/codex/static/assets/email-tab-D3WFyLkh.js.gz +0 -0
  831. codex-2.5.2/codex/static/assets/expand-toggle-CUK4ktTj.js +0 -1
  832. codex-2.5.2/codex/static/assets/expand-toggle-CUK4ktTj.js.br +0 -0
  833. codex-2.5.2/codex/static/assets/expand-toggle-CUK4ktTj.js.gz +0 -0
  834. codex-2.5.2/codex/static/assets/flag-card-C_I8l48x.js +0 -1
  835. codex-2.5.2/codex/static/assets/flag-card-C_I8l48x.js.br +0 -0
  836. codex-2.5.2/codex/static/assets/flag-card-C_I8l48x.js.gz +0 -0
  837. codex-2.5.2/codex/static/assets/forwardRefs-UZlONtkj.js +0 -1
  838. codex-2.5.2/codex/static/assets/forwardRefs-UZlONtkj.js.br +0 -0
  839. codex-2.5.2/codex/static/assets/forwardRefs-UZlONtkj.js.gz +0 -0
  840. codex-2.5.2/codex/static/assets/goto-Bzy3aPmg.js +0 -1
  841. codex-2.5.2/codex/static/assets/goto-Bzy3aPmg.js.br +0 -0
  842. codex-2.5.2/codex/static/assets/goto-Bzy3aPmg.js.gz +0 -0
  843. codex-2.5.2/codex/static/assets/group-tab-Cuz8-tHK.js +0 -1
  844. codex-2.5.2/codex/static/assets/group-tab-Cuz8-tHK.js.br +0 -0
  845. codex-2.5.2/codex/static/assets/group-tab-Cuz8-tHK.js.gz +0 -0
  846. codex-2.5.2/codex/static/assets/http-error-ClLjvBSS.js +0 -1
  847. codex-2.5.2/codex/static/assets/http-error-ClLjvBSS.js.br +0 -0
  848. codex-2.5.2/codex/static/assets/http-error-ClLjvBSS.js.gz +0 -0
  849. codex-2.5.2/codex/static/assets/job-tab-COCqu1gh.js +0 -1
  850. codex-2.5.2/codex/static/assets/job-tab-COCqu1gh.js.br +0 -0
  851. codex-2.5.2/codex/static/assets/job-tab-COCqu1gh.js.gz +0 -0
  852. codex-2.5.2/codex/static/assets/launcher-dialog-CIJBpTWb.css +0 -1
  853. codex-2.5.2/codex/static/assets/launcher-dialog-CIJBpTWb.css.br +0 -0
  854. codex-2.5.2/codex/static/assets/launcher-dialog-CIJBpTWb.css.gz +0 -0
  855. codex-2.5.2/codex/static/assets/launcher-dialog-Ct1K99aL.js +0 -1
  856. codex-2.5.2/codex/static/assets/launcher-dialog-Ct1K99aL.js.br +0 -0
  857. codex-2.5.2/codex/static/assets/launcher-dialog-Ct1K99aL.js.gz +0 -0
  858. codex-2.5.2/codex/static/assets/layout-CSttw2d9.js +0 -1
  859. codex-2.5.2/codex/static/assets/layout-CSttw2d9.js.br +0 -0
  860. codex-2.5.2/codex/static/assets/layout-CSttw2d9.js.gz +0 -0
  861. codex-2.5.2/codex/static/assets/library-tab-oSx9NDMI.js +0 -9
  862. codex-2.5.2/codex/static/assets/library-tab-oSx9NDMI.js.br +0 -0
  863. codex-2.5.2/codex/static/assets/library-tab-oSx9NDMI.js.gz +0 -0
  864. codex-2.5.2/codex/static/assets/main-D-qMqvF9.js +0 -6
  865. codex-2.5.2/codex/static/assets/main-D-qMqvF9.js.br +0 -0
  866. codex-2.5.2/codex/static/assets/main-D-qMqvF9.js.gz +0 -0
  867. codex-2.5.2/codex/static/assets/online-tag-8xFKTKo1.js +0 -1
  868. codex-2.5.2/codex/static/assets/online-tag-8xFKTKo1.js.br +0 -0
  869. codex-2.5.2/codex/static/assets/online-tag-BNAwUiCf.js +0 -1
  870. codex-2.5.2/codex/static/assets/online-tag-BNAwUiCf.js.br +0 -0
  871. codex-2.5.2/codex/static/assets/online-tag-BNAwUiCf.js.gz +0 -0
  872. codex-2.5.2/codex/static/assets/pagination-toolbar-CV9ZlZ-K.js +0 -2
  873. codex-2.5.2/codex/static/assets/pagination-toolbar-CV9ZlZ-K.js.br +0 -0
  874. codex-2.5.2/codex/static/assets/pagination-toolbar-CV9ZlZ-K.js.gz +0 -0
  875. codex-2.5.2/codex/static/assets/pdf-doc-z-pWcz9j.js +0 -628
  876. codex-2.5.2/codex/static/assets/pdf-doc-z-pWcz9j.js.br +0 -0
  877. codex-2.5.2/codex/static/assets/pdf-doc-z-pWcz9j.js.gz +0 -0
  878. codex-2.5.2/codex/static/assets/pretty-bytes-CpM93hIp.js +0 -1
  879. codex-2.5.2/codex/static/assets/pretty-bytes-CpM93hIp.js.br +0 -0
  880. codex-2.5.2/codex/static/assets/pretty-bytes-CpM93hIp.js.gz +0 -0
  881. codex-2.5.2/codex/static/assets/prompt-popup-D27yCGWo.js +0 -2
  882. codex-2.5.2/codex/static/assets/prompt-popup-D27yCGWo.js.br +0 -0
  883. codex-2.5.2/codex/static/assets/prompt-popup-D27yCGWo.js.gz +0 -0
  884. codex-2.5.2/codex/static/assets/prompt-popup-DFYXA7Zi.css +0 -1
  885. codex-2.5.2/codex/static/assets/prompt-popup-DFYXA7Zi.css.br +0 -0
  886. codex-2.5.2/codex/static/assets/prompt-popup-DFYXA7Zi.css.gz +0 -0
  887. codex-2.5.2/codex/static/assets/reader-2PmVrmVv.js +0 -2
  888. codex-2.5.2/codex/static/assets/reader-2PmVrmVv.js.br +0 -0
  889. codex-2.5.2/codex/static/assets/reader-2PmVrmVv.js.gz +0 -0
  890. codex-2.5.2/codex/static/assets/reader-D-Ivf0Vs.css +0 -1
  891. codex-2.5.2/codex/static/assets/reader-D-Ivf0Vs.css.br +0 -0
  892. codex-2.5.2/codex/static/assets/reader-D-Ivf0Vs.css.gz +0 -0
  893. codex-2.5.2/codex/static/assets/reader-DUoxqZic.js +0 -1
  894. codex-2.5.2/codex/static/assets/reader-DUoxqZic.js.br +0 -0
  895. codex-2.5.2/codex/static/assets/reader-DUoxqZic.js.gz +0 -0
  896. codex-2.5.2/codex/static/assets/reader-DwWLV7nD.js +0 -1
  897. codex-2.5.2/codex/static/assets/reader-DwWLV7nD.js.br +0 -0
  898. codex-2.5.2/codex/static/assets/reader-DwWLV7nD.js.gz +0 -0
  899. codex-2.5.2/codex/static/assets/reader-settings-controls-Drunnzve.js +0 -1
  900. codex-2.5.2/codex/static/assets/reader-settings-controls-Drunnzve.js.br +0 -0
  901. codex-2.5.2/codex/static/assets/reader-settings-controls-Drunnzve.js.gz +0 -0
  902. codex-2.5.2/codex/static/assets/relation-chips-BZdU_SRS.js +0 -1
  903. codex-2.5.2/codex/static/assets/relation-chips-BZdU_SRS.js.br +0 -0
  904. codex-2.5.2/codex/static/assets/relation-chips-BZdU_SRS.js.gz +0 -0
  905. codex-2.5.2/codex/static/assets/reset-password-confirm-DM1ErJXb.js +0 -1
  906. codex-2.5.2/codex/static/assets/reset-password-confirm-DM1ErJXb.js.br +0 -0
  907. codex-2.5.2/codex/static/assets/reset-password-confirm-DM1ErJXb.js.gz +0 -0
  908. codex-2.5.2/codex/static/assets/restore-tab-CY8gz7FI.js +0 -3
  909. codex-2.5.2/codex/static/assets/restore-tab-CY8gz7FI.js.br +0 -0
  910. codex-2.5.2/codex/static/assets/restore-tab-CY8gz7FI.js.gz +0 -0
  911. codex-2.5.2/codex/static/assets/rules-BsL3Cz4C.js +0 -1
  912. codex-2.5.2/codex/static/assets/rules-BsL3Cz4C.js.br +0 -0
  913. codex-2.5.2/codex/static/assets/rules-BsL3Cz4C.js.gz +0 -0
  914. codex-2.5.2/codex/static/assets/settings-tab-BHFoFmJh.js +0 -1
  915. codex-2.5.2/codex/static/assets/settings-tab-BHFoFmJh.js.br +0 -0
  916. codex-2.5.2/codex/static/assets/settings-tab-BHFoFmJh.js.gz +0 -0
  917. codex-2.5.2/codex/static/assets/sso-error-CQUecRux.js +0 -1
  918. codex-2.5.2/codex/static/assets/sso-error-CQUecRux.js.br +0 -0
  919. codex-2.5.2/codex/static/assets/sso-error-CQUecRux.js.gz +0 -0
  920. codex-2.5.2/codex/static/assets/sso-login-button-rH74e8fK.js +0 -1
  921. codex-2.5.2/codex/static/assets/sso-login-button-rH74e8fK.js.br +0 -0
  922. codex-2.5.2/codex/static/assets/sso-login-button-rH74e8fK.js.gz +0 -0
  923. codex-2.5.2/codex/static/assets/ssrBoot-B5nC0Adp.js +0 -1
  924. codex-2.5.2/codex/static/assets/ssrBoot-B5nC0Adp.js.br +0 -0
  925. codex-2.5.2/codex/static/assets/ssrBoot-B5nC0Adp.js.gz +0 -0
  926. codex-2.5.2/codex/static/assets/stats-tab-BGiRxHtM.js +0 -1
  927. codex-2.5.2/codex/static/assets/stats-tab-BGiRxHtM.js.br +0 -0
  928. codex-2.5.2/codex/static/assets/stats-tab-BGiRxHtM.js.gz +0 -0
  929. codex-2.5.2/codex/static/assets/submit-footer-CKq9KwPA.js +0 -1
  930. codex-2.5.2/codex/static/assets/submit-footer-CKq9KwPA.js.br +0 -0
  931. codex-2.5.2/codex/static/assets/submit-footer-CKq9KwPA.js.gz +0 -0
  932. codex-2.5.2/codex/static/assets/tagging-choices-C_47yKpF.js +0 -1
  933. codex-2.5.2/codex/static/assets/tagging-choices-C_47yKpF.js.br +0 -0
  934. codex-2.5.2/codex/static/assets/tagging-choices-C_47yKpF.js.gz +0 -0
  935. codex-2.5.2/codex/static/assets/tagging-tab-CVy3KqUH.js +0 -1
  936. codex-2.5.2/codex/static/assets/tagging-tab-CVy3KqUH.js.br +0 -0
  937. codex-2.5.2/codex/static/assets/tagging-tab-CVy3KqUH.js.gz +0 -0
  938. codex-2.5.2/codex/static/assets/tagging-tab-DjzFlOh2.css +0 -1
  939. codex-2.5.2/codex/static/assets/tagging-tab-DjzFlOh2.css.br +0 -0
  940. codex-2.5.2/codex/static/assets/tagging-tab-DjzFlOh2.css.gz +0 -0
  941. codex-2.5.2/codex/static/assets/tooltip-ByIwluee.js +0 -1
  942. codex-2.5.2/codex/static/assets/tooltip-ByIwluee.js.br +0 -0
  943. codex-2.5.2/codex/static/assets/tooltip-ByIwluee.js.gz +0 -0
  944. codex-2.5.2/codex/static/assets/transitions-CFH9rSkj.js +0 -1
  945. codex-2.5.2/codex/static/assets/transitions-CFH9rSkj.js.br +0 -0
  946. codex-2.5.2/codex/static/assets/transitions-CFH9rSkj.js.gz +0 -0
  947. codex-2.5.2/codex/static/assets/unauthorized-CLlpbWqw.js +0 -1
  948. codex-2.5.2/codex/static/assets/unauthorized-CLlpbWqw.js.br +0 -0
  949. codex-2.5.2/codex/static/assets/unauthorized-CLlpbWqw.js.gz +0 -0
  950. codex-2.5.2/codex/static/assets/use-now-timer-DTKILBVn.js +0 -1
  951. codex-2.5.2/codex/static/assets/use-now-timer-DTKILBVn.js.br +0 -0
  952. codex-2.5.2/codex/static/assets/use-now-timer-DTKILBVn.js.gz +0 -0
  953. codex-2.5.2/codex/static/assets/user-tab-9xMjOcrK.js +0 -1
  954. codex-2.5.2/codex/static/assets/user-tab-9xMjOcrK.js.br +0 -0
  955. codex-2.5.2/codex/static/assets/user-tab-9xMjOcrK.js.gz +0 -0
  956. codex-2.5.2/codex/static/assets/vendor-vue-ujw8Piqg.js +0 -4
  957. codex-2.5.2/codex/static/assets/vendor-vue-ujw8Piqg.js.br +0 -0
  958. codex-2.5.2/codex/static/assets/vendor-vue-ujw8Piqg.js.gz +0 -0
  959. codex-2.5.2/codex/static/manifest.json +0 -1782
  960. codex-2.5.2/codex/static/manifest.json.br +0 -0
  961. codex-2.5.2/codex/static/manifest.json.gz +0 -0
  962. codex-2.5.2/codex/urls/api/v4/admin.py +0 -340
  963. codex-2.5.2/codex/user_data/dump.py +0 -269
  964. codex-2.5.2/codex/user_data/serializers.py +0 -427
  965. codex-2.5.2/codex/user_data/store.py +0 -288
  966. codex-2.5.2/codex/views/admin/custom_cover.py +0 -285
  967. codex-2.5.2/codex/views/admin/dump_user_data.py +0 -18
  968. codex-2.5.2/codex/views/admin/email.py +0 -146
  969. codex-2.5.2/codex/views/admin/identifier_parse.py +0 -153
  970. codex-2.5.2/codex/views/admin/oidc.py +0 -79
  971. codex-2.5.2/codex/views/admin/restore_user_data.py +0 -52
  972. codex-2.5.2/codex/views/admin/stats.py +0 -109
  973. codex-2.5.2/codex/views/admin/tagging_validate.py +0 -70
  974. codex-2.5.2/codex/views/admin/tagwrite.py +0 -252
  975. codex-2.5.2/codex/views/admin/tasks.py +0 -215
  976. codex-2.5.2/codex/views/auth.py +0 -804
  977. codex-2.5.2/codex/views/browser/annotate/order.py +0 -663
  978. codex-2.5.2/codex/views/browser/bookmark.py +0 -105
  979. codex-2.5.2/codex/views/browser/breadcrumbs.py +0 -258
  980. codex-2.5.2/codex/views/browser/browser.py +0 -518
  981. codex-2.5.2/codex/views/browser/collection_mtime.py +0 -203
  982. codex-2.5.2/codex/views/browser/filters/search/field/expression.py +0 -186
  983. codex-2.5.2/codex/views/browser/filters/search/parse.py +0 -353
  984. codex-2.5.2/codex/views/browser/force_update.py +0 -52
  985. codex-2.5.2/codex/views/browser/order_by.py +0 -241
  986. codex-2.5.2/codex/views/browser/params.py +0 -92
  987. codex-2.5.2/codex/views/browser/saved_settings.py +0 -312
  988. codex-2.5.2/codex/views/browser/validate.py +0 -204
  989. codex-2.5.2/codex/views/opds/auth.py +0 -31
  990. codex-2.5.2/codex/views/opds/authentication/v1.py +0 -93
  991. codex-2.5.2/codex/views/opds/feed.py +0 -22
  992. codex-2.5.2/codex/views/opds/v1/entry/entry.py +0 -159
  993. codex-2.5.2/codex/views/opds/v1/facets.py +0 -201
  994. codex-2.5.2/codex/views/opds/v2/feed/links.py +0 -152
  995. codex-2.5.2/codex/views/opds/v2/feed/publications.py +0 -585
  996. codex-2.5.2/codex/views/opds/v2/manifest.py +0 -417
  997. codex-2.5.2/codex/views/reader/books.py +0 -264
  998. codex-2.5.2/codex/views/reader/page.py +0 -243
  999. codex-2.5.2/codex/views/reader/params.py +0 -80
  1000. codex-2.5.2/codex/views/settings.py +0 -587
  1001. codex-2.5.2/codex/views/util.py +0 -68
  1002. codex-2.5.2/codex/websockets/payloads.py +0 -47
  1003. codex-2.5.2/docs/NEWS.md +0 -2682
  1004. codex-2.5.2/docs/README.md +0 -1213
  1005. codex-2.5.2/docs/WINDOWS.md +0 -161
  1006. codex-2.5.2/frontend/.eslintcache +0 -1
  1007. codex-2.5.2/frontend/bin/fix.sh +0 -23
  1008. codex-2.5.2/frontend/bin/kill-eslint_d.sh +0 -5
  1009. codex-2.5.2/frontend/bin/lint-darwin.sh +0 -10
  1010. codex-2.5.2/frontend/bin/lint.sh +0 -12
  1011. codex-2.5.2/frontend/bin/version-node.sh +0 -15
  1012. codex-2.5.2/frontend/bun.lock +0 -839
  1013. codex-2.5.2/frontend/package.json +0 -53
  1014. codex-2.5.2/frontend/src/api/v4/admin.js +0 -257
  1015. codex-2.5.2/frontend/src/app.vue +0 -78
  1016. codex-2.5.2/frontend/src/choices/tagging-choices.json +0 -51
  1017. codex-2.5.2/frontend/src/components/admin/admin-header.vue +0 -123
  1018. codex-2.5.2/frontend/src/components/admin/drawer/admin-menu.vue +0 -160
  1019. codex-2.5.2/frontend/src/components/admin/drawer/admin-settings-button-prompts.vue +0 -45
  1020. codex-2.5.2/frontend/src/components/admin/tabs/tagging-tab.vue +0 -783
  1021. codex-2.5.2/frontend/src/components/browser/toolbars/top/browser-toolbar-top.vue +0 -86
  1022. codex-2.5.2/frontend/src/components/online-tag/launcher-dialog.vue +0 -781
  1023. codex-2.5.2/frontend/src/components/reader/drawer/reader-settings-scope.vue +0 -318
  1024. codex-2.5.2/frontend/src/components/reader/toolbars/nav/reader-toolbar-nav.vue +0 -164
  1025. codex-2.5.2/frontend/src/components/reader/toolbars/top/reader-toolbar-top.vue +0 -233
  1026. codex-2.5.2/frontend/src/components/settings/button.vue +0 -87
  1027. codex-2.5.2/frontend/src/plugins/router.js +0 -170
  1028. codex-2.5.2/frontend/src/stores/admin.js +0 -671
  1029. codex-2.5.2/frontend/src/stores/auth.js +0 -282
  1030. codex-2.5.2/frontend/src/stores/online-tag.js +0 -269
  1031. codex-2.5.2/frontend/tests/unit/online-tag-store.test.js +0 -332
  1032. codex-2.5.2/package.json +0 -93
  1033. codex-2.5.2/pyproject.toml +0 -443
  1034. codex-2.5.2/pyproject.toml.orig +0 -410
  1035. codex-2.5.2/tests/importer/test_failed_import_vanished.py +0 -60
  1036. codex-2.5.2/tests/importer/test_moved_by_signature.py +0 -105
  1037. codex-2.5.2/tests/importer/test_update_all.py +0 -884
  1038. codex-2.5.2/tests/opds_schema.py +0 -327
  1039. codex-2.5.2/tests/perf/run_baseline.py +0 -384
  1040. codex-2.5.2/tests/perf/run_opds_baseline.py +0 -367
  1041. codex-2.5.2/tests/perf/run_reader_baseline.py +0 -431
  1042. codex-2.5.2/tests/schema/opds/fetch_schemas.py +0 -120
  1043. codex-2.5.2/tests/test_admin_custom_cover.py +0 -299
  1044. codex-2.5.2/tests/test_bookmark_unique.py +0 -188
  1045. codex-2.5.2/tests/test_ci_workflow.py +0 -142
  1046. codex-2.5.2/tests/test_credential_validator.py +0 -273
  1047. codex-2.5.2/tests/test_disk_snapshot_unreadable.py +0 -164
  1048. codex-2.5.2/tests/test_dockerfile.py +0 -114
  1049. codex-2.5.2/tests/test_download_errors.py +0 -305
  1050. codex-2.5.2/tests/test_fs_filters_ignore.py +0 -261
  1051. codex-2.5.2/tests/test_janitor_folder_relations.py +0 -300
  1052. codex-2.5.2/tests/test_latest_version_fetch.py +0 -252
  1053. codex-2.5.2/tests/test_librarian_status_updates.py +0 -81
  1054. codex-2.5.2/tests/test_migration_bookmark_dedupe.py +0 -213
  1055. codex-2.5.2/tests/test_onlinetag_credentials.py +0 -74
  1056. codex-2.5.2/tests/test_onlinetag_estimate.py +0 -79
  1057. codex-2.5.2/tests/test_onlinetag_issue_id.py +0 -27
  1058. codex-2.5.2/tests/test_onlinetag_live_lookup.py +0 -268
  1059. codex-2.5.2/tests/test_onlinetag_merge_task.py +0 -82
  1060. codex-2.5.2/tests/test_onlinetag_outcome_stats.py +0 -271
  1061. codex-2.5.2/tests/test_onlinetag_prompt_endpoints.py +0 -273
  1062. codex-2.5.2/tests/test_onlinetag_prompt_resolution.py +0 -580
  1063. codex-2.5.2/tests/test_onlinetag_quota_pause.py +0 -232
  1064. codex-2.5.2/tests/test_onlinetag_resume_endpoints.py +0 -273
  1065. codex-2.5.2/tests/test_onlinetag_session_manager.py +0 -759
  1066. codex-2.5.2/tests/test_onlinetag_snapshot.py +0 -620
  1067. codex-2.5.2/tests/test_onlinetag_tag_pass.py +0 -314
  1068. codex-2.5.2/tests/test_opds_degrade.py +0 -191
  1069. codex-2.5.2/tests/test_release_info.py +0 -67
  1070. codex-2.5.2/tests/test_scribe_priority.py +0 -83
  1071. codex-2.5.2/tests/test_settings_defaults_seeding.py +0 -264
  1072. codex-2.5.2/tests/test_tag_by_id.py +0 -315
  1073. codex-2.5.2/tests/test_tag_write_date.py +0 -210
  1074. codex-2.5.2/tests/test_tag_write_delete_keys.py +0 -240
  1075. codex-2.5.2/tests/test_tag_write_errors.py +0 -190
  1076. codex-2.5.2/tests/test_tag_writer_preflight.py +0 -370
  1077. codex-2.5.2/tests/test_tag_writer_rename.py +0 -597
  1078. codex-2.5.2/tests/test_tagging_rename_wiring.py +0 -340
  1079. codex-2.5.2/tests/test_tagging_validate_endpoint.py +0 -176
  1080. codex-2.5.2/tests/test_url_path_prefix.py +0 -35
  1081. codex-2.5.2/tests/test_user_data_backups.py +0 -101
  1082. codex-2.5.2/tests/test_user_data_dump.py +0 -158
  1083. codex-2.5.2/tests/test_user_data_store.py +0 -160
  1084. codex-2.5.2/tests/test_version_outdated.py +0 -129
  1085. codex-2.5.2/tests/test_watcher_move_detect.py +0 -166
  1086. codex-2.5.2/tests/test_watcher_unmount_guard.py +0 -204
  1087. codex-2.5.2/tests/test_xz.py +0 -96
  1088. codex-2.5.2/uv.lock +0 -4788
  1089. {codex-2.5.2 → codex-2.5.4}/.github/workflows/ci.yml +0 -0
  1090. {codex-2.5.2 → codex-2.5.4}/.readthedocs.yaml +0 -0
  1091. {codex-2.5.2 → codex-2.5.4}/.shellcheckrc +0 -0
  1092. {codex-2.5.2 → codex-2.5.4}/.shellignore +0 -0
  1093. {codex-2.5.2 → codex-2.5.4}/Makefile +0 -0
  1094. {codex-2.5.2 → codex-2.5.4}/bin/benchmark-opds.sh +0 -0
  1095. {codex-2.5.2 → codex-2.5.4}/bin/build-choices.sh +0 -0
  1096. {codex-2.5.2 → codex-2.5.4}/bin/build-dist.sh +0 -0
  1097. {codex-2.5.2 → codex-2.5.4}/bin/clean-pycache.sh +0 -0
  1098. {codex-2.5.2 → codex-2.5.4}/bin/collectstatic.sh +0 -0
  1099. {codex-2.5.2 → codex-2.5.4}/bin/delete-files.sh +0 -0
  1100. {codex-2.5.2 → codex-2.5.4}/bin/dev-docker.sh +0 -0
  1101. {codex-2.5.2 → codex-2.5.4}/bin/dev-prod-server.sh +0 -0
  1102. {codex-2.5.2 → codex-2.5.4}/bin/dev.sh +0 -0
  1103. {codex-2.5.2 → codex-2.5.4}/bin/fix-python.sh +0 -0
  1104. {codex-2.5.2 → codex-2.5.4}/bin/ghcr-prune-alphas.sh +0 -0
  1105. {codex-2.5.2 → codex-2.5.4}/bin/icons_transform.py +0 -0
  1106. {codex-2.5.2 → codex-2.5.4}/bin/kill-codex.sh +0 -0
  1107. {codex-2.5.2 → codex-2.5.4}/bin/lint-vulture.sh +0 -0
  1108. {codex-2.5.2 → codex-2.5.4}/bin/localize-db.sh +0 -0
  1109. {codex-2.5.2 → codex-2.5.4}/bin/localize_library.sql +0 -0
  1110. {codex-2.5.2 → codex-2.5.4}/bin/release-tag.sh +0 -0
  1111. {codex-2.5.2 → codex-2.5.4}/bin/sync_comic_logo.py +0 -0
  1112. {codex-2.5.2 → codex-2.5.4}/bin/update-deps-node.sh +0 -0
  1113. {codex-2.5.2 → codex-2.5.4}/bin/update-deps-python.sh +0 -0
  1114. {codex-2.5.2 → codex-2.5.4}/bin/vendor-diff-package.sh +0 -0
  1115. {codex-2.5.2 → codex-2.5.4}/bin/vendor-patch-imports.sh +0 -0
  1116. {codex-2.5.2 → codex-2.5.4}/bin/version-python.sh +0 -0
  1117. {codex-2.5.2 → codex-2.5.4}/codex/__init__.py +0 -0
  1118. {codex-2.5.2 → codex-2.5.4}/codex/applications/__init__.py +0 -0
  1119. {codex-2.5.2 → codex-2.5.4}/codex/applications/lifespan.py +0 -0
  1120. {codex-2.5.2 → codex-2.5.4}/codex/applications/websocket.py +0 -0
  1121. {codex-2.5.2 → codex-2.5.4}/codex/asgi.py +0 -0
  1122. {codex-2.5.2 → codex-2.5.4}/codex/authentication.py +0 -0
  1123. {codex-2.5.2 → codex-2.5.4}/codex/cache.py +0 -0
  1124. {codex-2.5.2 → codex-2.5.4}/codex/choices/__init__.py +0 -0
  1125. {codex-2.5.2 → codex-2.5.4}/codex/choices/browser.py +0 -0
  1126. {codex-2.5.2 → codex-2.5.4}/codex/choices/choices_to_json.py +0 -0
  1127. {codex-2.5.2 → codex-2.5.4}/codex/choices/jobs.py +0 -0
  1128. {codex-2.5.2 → codex-2.5.4}/codex/choices/limits.py +0 -0
  1129. {codex-2.5.2 → codex-2.5.4}/codex/choices/onlinetag.py +0 -0
  1130. {codex-2.5.2 → codex-2.5.4}/codex/choices/reader.py +0 -0
  1131. {codex-2.5.2 → codex-2.5.4}/codex/choices/search.py +0 -0
  1132. {codex-2.5.2 → codex-2.5.4}/codex/choices/statii.py +0 -0
  1133. {codex-2.5.2 → codex-2.5.4}/codex/choices/tagging.py +0 -0
  1134. {codex-2.5.2 → codex-2.5.4}/codex/collection.py +0 -0
  1135. {codex-2.5.2 → codex-2.5.4}/codex/db_routers.py +0 -0
  1136. {codex-2.5.2 → codex-2.5.4}/codex/failed_login_log.py +0 -0
  1137. {codex-2.5.2 → codex-2.5.4}/codex/librarian/README.md +0 -0
  1138. {codex-2.5.2 → codex-2.5.4}/codex/librarian/__init__.py +0 -0
  1139. {codex-2.5.2 → codex-2.5.4}/codex/librarian/bookmark/__init__.py +0 -0
  1140. {codex-2.5.2 → codex-2.5.4}/codex/librarian/bookmark/last_route.py +0 -0
  1141. {codex-2.5.2 → codex-2.5.4}/codex/librarian/bookmark/latest_version.py +0 -0
  1142. {codex-2.5.2 → codex-2.5.4}/codex/librarian/bookmark/tasks.py +0 -0
  1143. {codex-2.5.2 → codex-2.5.4}/codex/librarian/bookmark/user_active.py +0 -0
  1144. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/__init__.py +0 -0
  1145. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/coverd.py +0 -0
  1146. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/path.py +0 -0
  1147. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/purge.py +0 -0
  1148. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/status.py +0 -0
  1149. {codex-2.5.2 → codex-2.5.4}/codex/librarian/covers/tasks.py +0 -0
  1150. {codex-2.5.2 → codex-2.5.4}/codex/librarian/cron/__init__.py +0 -0
  1151. {codex-2.5.2 → codex-2.5.4}/codex/librarian/cron/crond.py +0 -0
  1152. {codex-2.5.2 → codex-2.5.4}/codex/librarian/db.py +0 -0
  1153. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/README.md +0 -0
  1154. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/__init__.py +0 -0
  1155. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/events.py +0 -0
  1156. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/gone.py +0 -0
  1157. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/import_task.py +0 -0
  1158. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/mounted.py +0 -0
  1159. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/__init__.py +0 -0
  1160. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/poller.py +0 -0
  1161. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/snapshot.py +0 -0
  1162. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/snapshot_diff.py +0 -0
  1163. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/status.py +0 -0
  1164. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/poller/tasks.py +0 -0
  1165. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/status.py +0 -0
  1166. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/tasks.py +0 -0
  1167. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/__init__.py +0 -0
  1168. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/data.py +0 -0
  1169. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/events.py +0 -0
  1170. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/move.py +0 -0
  1171. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/status.py +0 -0
  1172. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/tasks.py +0 -0
  1173. {codex-2.5.2 → codex-2.5.4}/codex/librarian/fs/watcher/watcher.py +0 -0
  1174. {codex-2.5.2 → codex-2.5.4}/codex/librarian/librariand.py +0 -0
  1175. {codex-2.5.2 → codex-2.5.4}/codex/librarian/memory.py +0 -0
  1176. {codex-2.5.2 → codex-2.5.4}/codex/librarian/mp_queue.py +0 -0
  1177. {codex-2.5.2 → codex-2.5.4}/codex/librarian/notifier/__init__.py +0 -0
  1178. {codex-2.5.2 → codex-2.5.4}/codex/librarian/notifier/notifierd.py +0 -0
  1179. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/__init__.py +0 -0
  1180. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/estimate.py +0 -0
  1181. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/explicit_id.py +0 -0
  1182. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/onlinetagd.py +0 -0
  1183. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/outcome_stats.py +0 -0
  1184. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/session_cache.py +0 -0
  1185. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/session_snapshot.py +0 -0
  1186. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/status.py +0 -0
  1187. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/stored_id_prepass.py +0 -0
  1188. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/tag_pass_runner.py +0 -0
  1189. {codex-2.5.2 → codex-2.5.4}/codex/librarian/onlinetag/tasks.py +0 -0
  1190. {codex-2.5.2 → codex-2.5.4}/codex/librarian/pending_deletes.py +0 -0
  1191. {codex-2.5.2 → codex-2.5.4}/codex/librarian/restarter/__init__.py +0 -0
  1192. {codex-2.5.2 → codex-2.5.4}/codex/librarian/restarter/restarter.py +0 -0
  1193. {codex-2.5.2 → codex-2.5.4}/codex/librarian/restarter/status.py +0 -0
  1194. {codex-2.5.2 → codex-2.5.4}/codex/librarian/restarter/tasks.py +0 -0
  1195. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/__init__.py +0 -0
  1196. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/__init__.py +0 -0
  1197. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/const.py +0 -0
  1198. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/__init__.py +0 -0
  1199. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/comics.py +0 -0
  1200. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/const.py +0 -0
  1201. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/covers.py +0 -0
  1202. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/folders.py +0 -0
  1203. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/create/foreign_keys.py +0 -0
  1204. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/delete/__init__.py +0 -0
  1205. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/delete/collect.py +0 -0
  1206. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/delete/covers.py +0 -0
  1207. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/delete/existence.py +0 -0
  1208. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/delete/folders.py +0 -0
  1209. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/failed/__init__.py +0 -0
  1210. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/failed/create.py +0 -0
  1211. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/failed/failed.py +0 -0
  1212. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/__init__.py +0 -0
  1213. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/const.py +0 -0
  1214. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/covers.py +0 -0
  1215. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/delete.py +0 -0
  1216. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/many_to_many.py +0 -0
  1217. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/link/sum.py +0 -0
  1218. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/moved/__init__.py +0 -0
  1219. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/moved/comics.py +0 -0
  1220. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/pragmas.py +0 -0
  1221. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/__init__.py +0 -0
  1222. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/covers.py +0 -0
  1223. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/filters.py +0 -0
  1224. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/links.py +0 -0
  1225. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/links_fk.py +0 -0
  1226. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/update_comics.py +0 -0
  1227. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/query/update_fks.py +0 -0
  1228. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/__init__.py +0 -0
  1229. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/aggregate_path.py +0 -0
  1230. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/const.py +0 -0
  1231. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/extract.py +0 -0
  1232. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/folders.py +0 -0
  1233. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/foreign_keys.py +0 -0
  1234. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/read/many_to_many.py +0 -0
  1235. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/search/__init__.py +0 -0
  1236. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/search/prepare.py +0 -0
  1237. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/__init__.py +0 -0
  1238. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/create.py +0 -0
  1239. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/delete.py +0 -0
  1240. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/failed.py +0 -0
  1241. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/link.py +0 -0
  1242. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/moved.py +0 -0
  1243. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/query.py +0 -0
  1244. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/read.py +0 -0
  1245. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/statii/search.py +0 -0
  1246. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/status.py +0 -0
  1247. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/importer/tasks.py +0 -0
  1248. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/__init__.py +0 -0
  1249. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/adopt_folders.py +0 -0
  1250. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/cleanup.py +0 -0
  1251. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/failed_imports.py +0 -0
  1252. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/integrity/__init__.py +0 -0
  1253. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/janitor.py +0 -0
  1254. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/scheduled_time.py +0 -0
  1255. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/status.py +0 -0
  1256. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/tasks.py +0 -0
  1257. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/janitor/update.py +0 -0
  1258. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/priority.py +0 -0
  1259. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/scribed.py +0 -0
  1260. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/__init__.py +0 -0
  1261. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/const.py +0 -0
  1262. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/handler.py +0 -0
  1263. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/optimize.py +0 -0
  1264. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/prepare.py +0 -0
  1265. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/remove.py +0 -0
  1266. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/status.py +0 -0
  1267. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/search/tasks.py +0 -0
  1268. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/status.py +0 -0
  1269. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/tagwrite_rename.py +0 -0
  1270. {codex-2.5.2 → codex-2.5.4}/codex/librarian/scribe/tasks.py +0 -0
  1271. {codex-2.5.2 → codex-2.5.4}/codex/librarian/status_controller.py +0 -0
  1272. {codex-2.5.2 → codex-2.5.4}/codex/librarian/tasks.py +0 -0
  1273. {codex-2.5.2 → codex-2.5.4}/codex/librarian/telemeter/__init__.py +0 -0
  1274. {codex-2.5.2 → codex-2.5.4}/codex/librarian/telemeter/scheduled_time.py +0 -0
  1275. {codex-2.5.2 → codex-2.5.4}/codex/librarian/telemeter/stats.py +0 -0
  1276. {codex-2.5.2 → codex-2.5.4}/codex/librarian/telemeter/tasks.py +0 -0
  1277. {codex-2.5.2 → codex-2.5.4}/codex/librarian/telemeter/telemeter.py +0 -0
  1278. {codex-2.5.2 → codex-2.5.4}/codex/librarian/threads.py +0 -0
  1279. {codex-2.5.2 → codex-2.5.4}/codex/librarian/worker.py +0 -0
  1280. {codex-2.5.2 → codex-2.5.4}/codex/mail.py +0 -0
  1281. {codex-2.5.2 → codex-2.5.4}/codex/management/__init__.py +0 -0
  1282. {codex-2.5.2 → codex-2.5.4}/codex/management/commands/__init__.py +0 -0
  1283. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0001_init.py +0 -0
  1284. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0002_auto_20200826_0622.py +0 -0
  1285. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0003_auto_20200831_2033.py +0 -0
  1286. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0004_failedimport.py +0 -0
  1287. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0005_auto_20200918_0146.py +0 -0
  1288. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0006_update_default_names_and_remove_duplicate_comics.py +0 -0
  1289. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0007_auto_20211210_1710.py +0 -0
  1290. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0008_alter_comic_created_at_alter_comic_format_and_more.py +0 -0
  1291. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0009_alter_comic_parent_folder.py +0 -0
  1292. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0010_haystack.py +0 -0
  1293. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0011_library_groups_and_metadata_changes.py +0 -0
  1294. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0012_rename_description_comic_comments.py +0 -0
  1295. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0013_int_issue_count_longer_charfields.py +0 -0
  1296. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0014_pdf_issue_suffix_remove_cover_image_sort_name.py +0 -0
  1297. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0015_link_comics_to_top_level_folders.py +0 -0
  1298. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0016_remove_comic_cover_path_librarianstatus.py +0 -0
  1299. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0017_alter_timestamp_options_alter_adminflag_name_and_more.py +0 -0
  1300. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0018_rename_userbookmark_bookmark.py +0 -0
  1301. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0019_delete_queuejob.py +0 -0
  1302. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0020_remove_search_tables.py +0 -0
  1303. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0021_bookmark_fit_to_choices_read_in_reverse.py +0 -0
  1304. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0022_bookmark_vertical_useractive_null_statuses.py +0 -0
  1305. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0023_rename_credit_creator_and_more.py +0 -0
  1306. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0024_comic_gtin_comic_story_arc_number.py +0 -0
  1307. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0025_add_story_arc_number.py +0 -0
  1308. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0026_comicbox_1.py +0 -0
  1309. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0027_import_order_and_covers.py +0 -0
  1310. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0028_telemeter.py +0 -0
  1311. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0029_comicfts.py +0 -0
  1312. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0030_nocase_collation_day_month_indexes_status_types.py +0 -0
  1313. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0031_adminflag_banner.py +0 -0
  1314. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0032_alter_librarianstatus_preactive.py +0 -0
  1315. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0033_alter_librarianstatus_status_type.py +0 -0
  1316. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0034_comicbox2.py +0 -0
  1317. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0035_fts_optmize.py +0 -0
  1318. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0036_alter_comic_path_alter_customcover_path_and_more.py +0 -0
  1319. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0037_redefine_reading_direction_filetype_choices.py +0 -0
  1320. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0038_settings_tables.py +0 -0
  1321. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0039_metron_age_rating_default_view_and_performance.py +0 -0
  1322. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0040_reset_global_cache_book.py +0 -0
  1323. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0041_cleanup_phantom_comic_as_folder_rows.py +0 -0
  1324. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0042_browser_table_view_and_favorites.py +0 -0
  1325. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0043_comicbox_tagging_defaults.py +0 -0
  1326. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0044_alter_librarianstatus_status_type.py +0 -0
  1327. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0045_library_read_only.py +0 -0
  1328. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0046_comicboxtaggingdefaults_rename_files.py +0 -0
  1329. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0047_oidc_settings.py +0 -0
  1330. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0048_community_rating_alternative_issue.py +0 -0
  1331. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0049_reprints.py +0 -0
  1332. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0050_comicboxtaggingdefaults_metron_key.py +0 -0
  1333. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0051_remove_comicboxtaggingdefaults_urls.py +0 -0
  1334. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0052_comicboxtaggingdefaults_comicvine_url.py +0 -0
  1335. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0053_comicbox_5_reprints_and_sort_memory.py +0 -0
  1336. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0054_post_v2_3_3_schema.py +0 -0
  1337. {codex-2.5.2 → codex-2.5.4}/codex/migrations/0055_settings_defaults.py +0 -0
  1338. {codex-2.5.2 → codex-2.5.4}/codex/migrations/__init__.py +0 -0
  1339. {codex-2.5.2 → codex-2.5.4}/codex/models/__init__.py +0 -0
  1340. {codex-2.5.2 → codex-2.5.4}/codex/models/age_rating.py +0 -0
  1341. {codex-2.5.2 → codex-2.5.4}/codex/models/auth.py +0 -0
  1342. {codex-2.5.2 → codex-2.5.4}/codex/models/base.py +0 -0
  1343. {codex-2.5.2 → codex-2.5.4}/codex/models/bookmark.py +0 -0
  1344. {codex-2.5.2 → codex-2.5.4}/codex/models/choices.py +0 -0
  1345. {codex-2.5.2 → codex-2.5.4}/codex/models/collections.py +0 -0
  1346. {codex-2.5.2 → codex-2.5.4}/codex/models/comic.py +0 -0
  1347. {codex-2.5.2 → codex-2.5.4}/codex/models/favorite.py +0 -0
  1348. {codex-2.5.2 → codex-2.5.4}/codex/models/fields.py +0 -0
  1349. {codex-2.5.2 → codex-2.5.4}/codex/models/functions.py +0 -0
  1350. {codex-2.5.2 → codex-2.5.4}/codex/models/library.py +0 -0
  1351. {codex-2.5.2 → codex-2.5.4}/codex/models/query.py +0 -0
  1352. {codex-2.5.2 → codex-2.5.4}/codex/models/settings.py +0 -0
  1353. {codex-2.5.2 → codex-2.5.4}/codex/run.py +0 -0
  1354. {codex-2.5.2 → codex-2.5.4}/codex/serializers/README.md +0 -0
  1355. {codex-2.5.2 → codex-2.5.4}/codex/serializers/__init__.py +0 -0
  1356. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/__init__.py +0 -0
  1357. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/email.py +0 -0
  1358. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/flags.py +0 -0
  1359. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/groups.py +0 -0
  1360. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/libraries.py +0 -0
  1361. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/oidc.py +0 -0
  1362. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/pending_deletes.py +0 -0
  1363. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/settings_defaults.py +0 -0
  1364. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/stats.py +0 -0
  1365. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/tasks.py +0 -0
  1366. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/throttle.py +0 -0
  1367. {codex-2.5.2 → codex-2.5.4}/codex/serializers/admin/users.py +0 -0
  1368. {codex-2.5.2 → codex-2.5.4}/codex/serializers/auth.py +0 -0
  1369. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/__init__.py +0 -0
  1370. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/choices.py +0 -0
  1371. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/filters.py +0 -0
  1372. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/metadata.py +0 -0
  1373. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/mixins.py +0 -0
  1374. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/mtime.py +0 -0
  1375. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/page.py +0 -0
  1376. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/saved.py +0 -0
  1377. {codex-2.5.2 → codex-2.5.4}/codex/serializers/browser/settings.py +0 -0
  1378. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/__init__.py +0 -0
  1379. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/auth.py +0 -0
  1380. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/base.py +0 -0
  1381. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/browser.py +0 -0
  1382. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/collection.py +0 -0
  1383. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/reader.py +0 -0
  1384. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/sanitized.py +0 -0
  1385. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/settings.py +0 -0
  1386. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/stats.py +0 -0
  1387. {codex-2.5.2 → codex-2.5.4}/codex/serializers/fields/vuetify.py +0 -0
  1388. {codex-2.5.2 → codex-2.5.4}/codex/serializers/homepage.py +0 -0
  1389. {codex-2.5.2 → codex-2.5.4}/codex/serializers/mixins.py +0 -0
  1390. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/__init__.py +0 -0
  1391. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/admin.py +0 -0
  1392. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/base.py +0 -0
  1393. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/bookmark.py +0 -0
  1394. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/collections.py +0 -0
  1395. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/comic.py +0 -0
  1396. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/named.py +0 -0
  1397. {codex-2.5.2 → codex-2.5.4}/codex/serializers/models/pycountry.py +0 -0
  1398. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/__init__.py +0 -0
  1399. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/authentication.py +0 -0
  1400. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/urls.py +0 -0
  1401. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/__init__.py +0 -0
  1402. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/facet.py +0 -0
  1403. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/feed.py +0 -0
  1404. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/links.py +0 -0
  1405. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/metadata.py +0 -0
  1406. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/progression.py +0 -0
  1407. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/publication.py +0 -0
  1408. {codex-2.5.2 → codex-2.5.4}/codex/serializers/opds/v2/unused.py +0 -0
  1409. {codex-2.5.2 → codex-2.5.4}/codex/serializers/reader.py +0 -0
  1410. {codex-2.5.2 → codex-2.5.4}/codex/serializers/redirect.py +0 -0
  1411. {codex-2.5.2 → codex-2.5.4}/codex/serializers/route.py +0 -0
  1412. {codex-2.5.2 → codex-2.5.4}/codex/serializers/settings.py +0 -0
  1413. {codex-2.5.2 → codex-2.5.4}/codex/serializers/versions.py +0 -0
  1414. {codex-2.5.2 → codex-2.5.4}/codex/settings/README.md +0 -0
  1415. {codex-2.5.2 → codex-2.5.4}/codex/settings/__init__.py +0 -0
  1416. {codex-2.5.2 → codex-2.5.4}/codex/settings/codex.toml.default +0 -0
  1417. {codex-2.5.2 → codex-2.5.4}/codex/settings/config.py +0 -0
  1418. {codex-2.5.2 → codex-2.5.4}/codex/settings/hypercorn_migrate.py +0 -0
  1419. {codex-2.5.2 → codex-2.5.4}/codex/settings/logging.py +0 -0
  1420. {codex-2.5.2 → codex-2.5.4}/codex/settings/secret_key.py +0 -0
  1421. {codex-2.5.2 → codex-2.5.4}/codex/settings/servestatic.py +0 -0
  1422. {codex-2.5.2 → codex-2.5.4}/codex/settings/timezone.py +0 -0
  1423. {codex-2.5.2 → codex-2.5.4}/codex/signals/__init__.py +0 -0
  1424. {codex-2.5.2 → codex-2.5.4}/codex/signals/django_signals.py +0 -0
  1425. {codex-2.5.2 → codex-2.5.4}/codex/signals/os_signals.py +0 -0
  1426. {codex-2.5.2 → codex-2.5.4}/codex/startup/db.py +0 -0
  1427. {codex-2.5.2 → codex-2.5.4}/codex/startup/loguru.py +0 -0
  1428. {codex-2.5.2 → codex-2.5.4}/codex/startup/registration.py +0 -0
  1429. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/account.js +0 -0
  1430. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/account.js.br +0 -0
  1431. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/account.js.gz +0 -0
  1432. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/onload.js +0 -0
  1433. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/onload.js.br +0 -0
  1434. {codex-2.5.2 → codex-2.5.4}/codex/static/account/js/onload.js.gz +0 -0
  1435. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VAvatar-PAjPc2KE.css +0 -0
  1436. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VAvatar-PAjPc2KE.css.br +0 -0
  1437. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VAvatar-PAjPc2KE.css.gz +0 -0
  1438. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCard-dv-Dc592.css +0 -0
  1439. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCard-dv-Dc592.css.br +0 -0
  1440. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCard-dv-Dc592.css.gz +0 -0
  1441. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCheckbox-ChRKi1kj.css +0 -0
  1442. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCheckbox-ChRKi1kj.css.br +0 -0
  1443. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCheckbox-ChRKi1kj.css.gz +0 -0
  1444. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCombobox-C3ha-zP2.css +0 -0
  1445. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCombobox-C3ha-zP2.css.br +0 -0
  1446. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VCombobox-C3ha-zP2.css.gz +0 -0
  1447. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VContainer-ku9EbwM-.css +0 -0
  1448. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VContainer-ku9EbwM-.css.br +0 -0
  1449. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VContainer-ku9EbwM-.css.gz +0 -0
  1450. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VDivider-DvkP_iX7.css +0 -0
  1451. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VDivider-DvkP_iX7.css.br +0 -0
  1452. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VDivider-DvkP_iX7.css.gz +0 -0
  1453. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VExpansionPanels-cvCWEkWz.css +0 -0
  1454. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VExpansionPanels-cvCWEkWz.css.br +0 -0
  1455. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VExpansionPanels-cvCWEkWz.css.gz +0 -0
  1456. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VListItem-CZAZkqwj.css +0 -0
  1457. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VListItem-CZAZkqwj.css.br +0 -0
  1458. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VListItem-CZAZkqwj.css.gz +0 -0
  1459. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VOverlay-DG-PukqI.css +0 -0
  1460. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VOverlay-DG-PukqI.css.br +0 -0
  1461. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VOverlay-DG-PukqI.css.gz +0 -0
  1462. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VProgressCircular-GPPnnKWp.css +0 -0
  1463. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VProgressCircular-GPPnnKWp.css.br +0 -0
  1464. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VProgressCircular-GPPnnKWp.css.gz +0 -0
  1465. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VRadioGroup-C9f4tbih.css +0 -0
  1466. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VRadioGroup-C9f4tbih.css.br +0 -0
  1467. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VRadioGroup-C9f4tbih.css.gz +0 -0
  1468. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelect-DdMCmFiT.css +0 -0
  1469. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelect-DdMCmFiT.css.br +0 -0
  1470. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelect-DdMCmFiT.css.gz +0 -0
  1471. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelectionControl-BoFo3GVJ.css +0 -0
  1472. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelectionControl-BoFo3GVJ.css.br +0 -0
  1473. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSelectionControl-BoFo3GVJ.css.gz +0 -0
  1474. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSnackbar-BjpINqLT.css +0 -0
  1475. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSnackbar-BjpINqLT.css.br +0 -0
  1476. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSnackbar-BjpINqLT.css.gz +0 -0
  1477. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VSpacer-DfbUir7X.css +0 -0
  1478. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTable-LbK8_KkU.css +0 -0
  1479. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTable-LbK8_KkU.css.br +0 -0
  1480. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTable-LbK8_KkU.css.gz +0 -0
  1481. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTabs-C6gWhgyW.css +0 -0
  1482. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTabs-C6gWhgyW.css.br +0 -0
  1483. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTabs-C6gWhgyW.css.gz +0 -0
  1484. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTextField-DVt19ZIG.css +0 -0
  1485. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTextField-DVt19ZIG.css.br +0 -0
  1486. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTextField-DVt19ZIG.css.gz +0 -0
  1487. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTooltip-BI1qRHEp.css +0 -0
  1488. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTooltip-BI1qRHEp.css.br +0 -0
  1489. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/VTooltip-BI1qRHEp.css.gz +0 -0
  1490. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/_plugin-vue_export-helper-BDNMzG2s.js +0 -0
  1491. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/action-bar-BBtuZ452.css +0 -0
  1492. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/action-bar-BBtuZ452.css.br +0 -0
  1493. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/action-bar-BBtuZ452.css.gz +0 -0
  1494. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-section-DutEJrAC.css +0 -0
  1495. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-section-DutEJrAC.css.br +0 -0
  1496. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-section-DutEJrAC.css.gz +0 -0
  1497. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-settings-button-errors-8nyZgICC.css +0 -0
  1498. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-settings-button-errors-8nyZgICC.css.br +0 -0
  1499. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-settings-button-errors-8nyZgICC.css.gz +0 -0
  1500. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/admin-settings-button-progress-DJAsUqRu.css +0 -0
  1501. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/auth-tab-CpvNjZwL.css +0 -0
  1502. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/auth-tab-CpvNjZwL.css.br +0 -0
  1503. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/auth-tab-CpvNjZwL.css.gz +0 -0
  1504. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/base-CLy6lQ2j.js +0 -0
  1505. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/base-CLy6lQ2j.js.br +0 -0
  1506. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/base-CLy6lQ2j.js.gz +0 -0
  1507. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/browser-table-column-picker-B-KmTQaR.css +0 -0
  1508. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/browser-table-column-picker-B-KmTQaR.css.br +0 -0
  1509. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/browser-table-column-picker-B-KmTQaR.css.gz +0 -0
  1510. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/clipboard-BJt098sL.css +0 -0
  1511. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/clipboard-BJt098sL.css.br +0 -0
  1512. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/clipboard-BJt098sL.css.gz +0 -0
  1513. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/close-button-3oqF5yoQ.css +0 -0
  1514. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/close-button-3oqF5yoQ.css.br +0 -0
  1515. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/codex-list-item-8h79A4kT.css +0 -0
  1516. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/codex-list-item-8h79A4kT.css.br +0 -0
  1517. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/codex-list-item-8h79A4kT.css.gz +0 -0
  1518. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/comic-name-CGOOijIX.js +0 -0
  1519. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/comic-name-CGOOijIX.js.br +0 -0
  1520. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/comic-name-CGOOijIX.js.gz +0 -0
  1521. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/confirm-dialog-D5_8m9zi.css +0 -0
  1522. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/confirm-dialog-D5_8m9zi.css.br +0 -0
  1523. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/confirm-dialog-D5_8m9zi.css.gz +0 -0
  1524. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/confirm-footer-qa14x_AQ.css +0 -0
  1525. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/confirm-footer-qa14x_AQ.css.br +0 -0
  1526. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/cover-popup-BqgJF1ur.css +0 -0
  1527. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/cover-popup-BqgJF1ur.css.br +0 -0
  1528. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/cover-popup-BqgJF1ur.css.gz +0 -0
  1529. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/custom-covers-tab-B5uHBUI4.css +0 -0
  1530. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/custom-covers-tab-B5uHBUI4.css.br +0 -0
  1531. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/custom-covers-tab-B5uHBUI4.css.gz +0 -0
  1532. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/datetime-6KSUmkh6.js +0 -0
  1533. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/datetime-6KSUmkh6.js.br +0 -0
  1534. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/datetime-6KSUmkh6.js.gz +0 -0
  1535. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/datetime-column-D6IIm0tQ.css +0 -0
  1536. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/defaults-tab-cZjDQDaY.css +0 -0
  1537. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/defaults-tab-cZjDQDaY.css.br +0 -0
  1538. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/defaults-tab-cZjDQDaY.css.gz +0 -0
  1539. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/delete-row-dialog-CT_O7Q6B.css +0 -0
  1540. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/delete-row-dialog-CT_O7Q6B.css.br +0 -0
  1541. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist-Kll2twSG.js +0 -0
  1542. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist-Kll2twSG.js.br +0 -0
  1543. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist-Kll2twSG.js.gz +0 -0
  1544. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-CD1KUkvy.js +0 -0
  1545. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-CD1KUkvy.js.br +0 -0
  1546. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-CD1KUkvy.js.gz +0 -0
  1547. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-Cy0bzSGI.js +0 -0
  1548. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-Cy0bzSGI.js.br +0 -0
  1549. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/dist.es2015-Cy0bzSGI.js.gz +0 -0
  1550. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/edit-panel-BckXNuwl.css +0 -0
  1551. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/edit-panel-BckXNuwl.css.br +0 -0
  1552. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/edit-panel-BckXNuwl.css.gz +0 -0
  1553. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/email-tab-ai9a1pVt.css +0 -0
  1554. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/email-tab-ai9a1pVt.css.br +0 -0
  1555. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/email-tab-ai9a1pVt.css.gz +0 -0
  1556. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/expand-toggle-DB2JNmpB.css +0 -0
  1557. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/expand-toggle-DB2JNmpB.css.br +0 -0
  1558. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/expand-toggle-DB2JNmpB.css.gz +0 -0
  1559. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/flag-card-DUj78_QG.css +0 -0
  1560. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/flag-card-DUj78_QG.css.br +0 -0
  1561. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/flag-card-DUj78_QG.css.gz +0 -0
  1562. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/group-tab-CkJvWVyy.css +0 -0
  1563. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/group-tab-CkJvWVyy.css.br +0 -0
  1564. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/group-tab-CkJvWVyy.css.gz +0 -0
  1565. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/http-error-B4FHKAcr.css +0 -0
  1566. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/http-error-B4FHKAcr.css.br +0 -0
  1567. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/http-error-B4FHKAcr.css.gz +0 -0
  1568. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/job-tab-DTLS_Xg3.css +0 -0
  1569. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/job-tab-DTLS_Xg3.css.br +0 -0
  1570. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/job-tab-DTLS_Xg3.css.gz +0 -0
  1571. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/library-tab-DXxbsPUa.css +0 -0
  1572. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/library-tab-DXxbsPUa.css.br +0 -0
  1573. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/library-tab-DXxbsPUa.css.gz +0 -0
  1574. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/limits-BejchfvK.js +0 -0
  1575. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/limits-BejchfvK.js.br +0 -0
  1576. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/limits-BejchfvK.js.gz +0 -0
  1577. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/main-BT7sVvWb.css +0 -0
  1578. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/main-BT7sVvWb.css.br +0 -0
  1579. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/main-BT7sVvWb.css.gz +0 -0
  1580. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/mdi-B2m8j20z.js +0 -0
  1581. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/mdi-B2m8j20z.js.br +0 -0
  1582. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/mdi-B2m8j20z.js.gz +0 -0
  1583. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pagination-toolbar-BOVxJXqE.css +0 -0
  1584. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pagination-toolbar-BOVxJXqE.css.br +0 -0
  1585. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pagination-toolbar-BOVxJXqE.css.gz +0 -0
  1586. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pdf-doc-BY-0-glL.css +0 -0
  1587. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pdf-doc-BY-0-glL.css.br +0 -0
  1588. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/pdf-doc-BY-0-glL.css.gz +0 -0
  1589. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reader-map-BVK2B5JV.js +0 -0
  1590. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reader-map-BVK2B5JV.js.br +0 -0
  1591. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reader-map-BVK2B5JV.js.gz +0 -0
  1592. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reader-settings-controls-x0mnhxBq.css +0 -0
  1593. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reader-settings-controls-x0mnhxBq.css.br +0 -0
  1594. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/relation-chips-BjO1ttEA.css +0 -0
  1595. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/relation-chips-BjO1ttEA.css.br +0 -0
  1596. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/relation-chips-BjO1ttEA.css.gz +0 -0
  1597. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reset-password-confirm-Cw6u7xuL.css +0 -0
  1598. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reset-password-confirm-Cw6u7xuL.css.br +0 -0
  1599. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/reset-password-confirm-Cw6u7xuL.css.gz +0 -0
  1600. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/restore-tab-BUaEpQgP.css +0 -0
  1601. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/restore-tab-BUaEpQgP.css.br +0 -0
  1602. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/restore-tab-BUaEpQgP.css.gz +0 -0
  1603. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/rolldown-runtime-DK3Fl9T5.js +0 -0
  1604. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/rolldown-runtime-DK3Fl9T5.js.br +0 -0
  1605. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/settings-tab-Dd3cBbi9.css +0 -0
  1606. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/settings-tab-Dd3cBbi9.css.br +0 -0
  1607. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/settings-tab-Dd3cBbi9.css.gz +0 -0
  1608. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/source-labels-CLbVHwH4.js +0 -0
  1609. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/sso-error-irWbDBI-.css +0 -0
  1610. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/sso-error-irWbDBI-.css.br +0 -0
  1611. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/sso-error-irWbDBI-.css.gz +0 -0
  1612. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/stats-tab-BbivcwEc.css +0 -0
  1613. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/stats-tab-BbivcwEc.css.br +0 -0
  1614. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/stats-tab-BbivcwEc.css.gz +0 -0
  1615. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/submit-footer-DxBt30-N.css +0 -0
  1616. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/submit-footer-DxBt30-N.css.br +0 -0
  1617. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/submit-footer-DxBt30-N.css.gz +0 -0
  1618. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/unauthorized-DKcohWBG.css +0 -0
  1619. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/unauthorized-DKcohWBG.css.br +0 -0
  1620. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/unauthorized-DKcohWBG.css.gz +0 -0
  1621. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/user-tab-R3NglX8t.css +0 -0
  1622. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/user-tab-R3NglX8t.css.br +0 -0
  1623. {codex-2.5.2 → codex-2.5.4}/codex/static/assets/user-tab-R3NglX8t.css.gz +0 -0
  1624. {codex-2.5.2 → codex-2.5.4}/codex/static/img/comic-165.webp +0 -0
  1625. {codex-2.5.2 → codex-2.5.4}/codex/static/img/comic.svg +0 -0
  1626. {codex-2.5.2 → codex-2.5.4}/codex/static/img/comic.svg.br +0 -0
  1627. {codex-2.5.2 → codex-2.5.4}/codex/static/img/comic.svg.gz +0 -0
  1628. {codex-2.5.2 → codex-2.5.4}/codex/static/img/folder.svg +0 -0
  1629. {codex-2.5.2 → codex-2.5.4}/codex/static/img/folder.svg.br +0 -0
  1630. {codex-2.5.2 → codex-2.5.4}/codex/static/img/folder.svg.gz +0 -0
  1631. {codex-2.5.2 → codex-2.5.4}/codex/static/img/imprint.svg +0 -0
  1632. {codex-2.5.2 → codex-2.5.4}/codex/static/img/imprint.svg.br +0 -0
  1633. {codex-2.5.2 → codex-2.5.4}/codex/static/img/imprint.svg.gz +0 -0
  1634. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo-32.webp +0 -0
  1635. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo-maskable-180.webp +0 -0
  1636. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo-maskable.svg +0 -0
  1637. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo-maskable.svg.br +0 -0
  1638. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo-maskable.svg.gz +0 -0
  1639. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo.svg +0 -0
  1640. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo.svg.br +0 -0
  1641. {codex-2.5.2 → codex-2.5.4}/codex/static/img/logo.svg.gz +0 -0
  1642. {codex-2.5.2 → codex-2.5.4}/codex/static/img/publisher.svg +0 -0
  1643. {codex-2.5.2 → codex-2.5.4}/codex/static/img/publisher.svg.br +0 -0
  1644. {codex-2.5.2 → codex-2.5.4}/codex/static/img/publisher.svg.gz +0 -0
  1645. {codex-2.5.2 → codex-2.5.4}/codex/static/img/series.svg +0 -0
  1646. {codex-2.5.2 → codex-2.5.4}/codex/static/img/series.svg.br +0 -0
  1647. {codex-2.5.2 → codex-2.5.4}/codex/static/img/series.svg.gz +0 -0
  1648. {codex-2.5.2 → codex-2.5.4}/codex/static/img/story-arc.svg +0 -0
  1649. {codex-2.5.2 → codex-2.5.4}/codex/static/img/story-arc.svg.br +0 -0
  1650. {codex-2.5.2 → codex-2.5.4}/codex/static/img/story-arc.svg.gz +0 -0
  1651. {codex-2.5.2 → codex-2.5.4}/codex/static/img/volume.svg +0 -0
  1652. {codex-2.5.2 → codex-2.5.4}/codex/static/img/volume.svg.br +0 -0
  1653. {codex-2.5.2 → codex-2.5.4}/codex/static/img/volume.svg.gz +0 -0
  1654. {codex-2.5.2 → codex-2.5.4}/codex/static/pwa/offline.html +0 -0
  1655. {codex-2.5.2 → codex-2.5.4}/codex/static/pwa/offline.html.br +0 -0
  1656. {codex-2.5.2 → codex-2.5.4}/codex/static/pwa/offline.html.gz +0 -0
  1657. {codex-2.5.2 → codex-2.5.4}/codex/static/robots.txt +0 -0
  1658. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/.picopt_treestamps.yaml +0 -0
  1659. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/comic-165.webp +0 -0
  1660. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/comic.svg +0 -0
  1661. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/folder.svg +0 -0
  1662. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/imprint.svg +0 -0
  1663. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/logo-32.webp +0 -0
  1664. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/logo-maskable-180.webp +0 -0
  1665. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/logo-maskable.svg +0 -0
  1666. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/logo.svg +0 -0
  1667. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/publisher.svg +0 -0
  1668. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/series.svg +0 -0
  1669. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/story-arc.svg +0 -0
  1670. {codex-2.5.2 → codex-2.5.4}/codex/static_src/img/volume.svg +0 -0
  1671. {codex-2.5.2 → codex-2.5.4}/codex/static_src/pwa/offline.html +0 -0
  1672. {codex-2.5.2 → codex-2.5.4}/codex/static_src/robots.txt +0 -0
  1673. {codex-2.5.2 → codex-2.5.4}/codex/templates/README.md +0 -0
  1674. {codex-2.5.2 → codex-2.5.4}/codex/templates/headers-icons.html +0 -0
  1675. {codex-2.5.2 → codex-2.5.4}/codex/templates/headers-script-globals.html +0 -0
  1676. {codex-2.5.2 → codex-2.5.4}/codex/templates/index.html +0 -0
  1677. {codex-2.5.2 → codex-2.5.4}/codex/templates/opds_v1/index.xml +0 -0
  1678. {codex-2.5.2 → codex-2.5.4}/codex/templates/opds_v1/opensearch_v1.xml +0 -0
  1679. {codex-2.5.2 → codex-2.5.4}/codex/templates/pwa/headers.html +0 -0
  1680. {codex-2.5.2 → codex-2.5.4}/codex/templates/pwa/manifest.webmanifest +0 -0
  1681. {codex-2.5.2 → codex-2.5.4}/codex/templates/pwa/serviceworker-register.js +0 -0
  1682. {codex-2.5.2 → codex-2.5.4}/codex/templates/pwa/serviceworker.js +0 -0
  1683. {codex-2.5.2 → codex-2.5.4}/codex/templates/rest_registration/register/body.txt +0 -0
  1684. {codex-2.5.2 → codex-2.5.4}/codex/templates/rest_registration/register/subject.txt +0 -0
  1685. {codex-2.5.2 → codex-2.5.4}/codex/templates/rest_registration/reset_password/body.html +0 -0
  1686. {codex-2.5.2 → codex-2.5.4}/codex/templates/rest_registration/reset_password/body.txt +0 -0
  1687. {codex-2.5.2 → codex-2.5.4}/codex/templates/rest_registration/reset_password/subject.txt +0 -0
  1688. {codex-2.5.2 → codex-2.5.4}/codex/throttling.py +0 -0
  1689. {codex-2.5.2 → codex-2.5.4}/codex/urls/__init__.py +0 -0
  1690. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/__init__.py +0 -0
  1691. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/root.py +0 -0
  1692. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/__init__.py +0 -0
  1693. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/auth.py +0 -0
  1694. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/browse.py +0 -0
  1695. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/comics.py +0 -0
  1696. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/favorites.py +0 -0
  1697. {codex-2.5.2 → codex-2.5.4}/codex/urls/api/v4/reader.py +0 -0
  1698. {codex-2.5.2 → codex-2.5.4}/codex/urls/app.py +0 -0
  1699. {codex-2.5.2 → codex-2.5.4}/codex/urls/const.py +0 -0
  1700. {codex-2.5.2 → codex-2.5.4}/codex/urls/converters.py +0 -0
  1701. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/__init__.py +0 -0
  1702. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/authentication.py +0 -0
  1703. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/binary.py +0 -0
  1704. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/root.py +0 -0
  1705. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/v1.py +0 -0
  1706. {codex-2.5.2 → codex-2.5.4}/codex/urls/opds/v2.py +0 -0
  1707. {codex-2.5.2 → codex-2.5.4}/codex/urls/pwa.py +0 -0
  1708. {codex-2.5.2 → codex-2.5.4}/codex/urls/root.py +0 -0
  1709. {codex-2.5.2 → codex-2.5.4}/codex/urls/spectacular.py +0 -0
  1710. {codex-2.5.2 → codex-2.5.4}/codex/user_data/__init__.py +0 -0
  1711. {codex-2.5.2 → codex-2.5.4}/codex/user_data/backups.py +0 -0
  1712. {codex-2.5.2 → codex-2.5.4}/codex/user_data/identifiers.py +0 -0
  1713. {codex-2.5.2 → codex-2.5.4}/codex/user_data/restore.py +0 -0
  1714. {codex-2.5.2 → codex-2.5.4}/codex/user_data/schema.sql +0 -0
  1715. {codex-2.5.2 → codex-2.5.4}/codex/util.py +0 -0
  1716. {codex-2.5.2 → codex-2.5.4}/codex/version.py +0 -0
  1717. {codex-2.5.2 → codex-2.5.4}/codex/views/README.md +0 -0
  1718. {codex-2.5.2 → codex-2.5.4}/codex/views/__init__.py +0 -0
  1719. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/__init__.py +0 -0
  1720. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/age_rating_metron.py +0 -0
  1721. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/api_key.py +0 -0
  1722. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/auth.py +0 -0
  1723. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/failed_imports_seen.py +0 -0
  1724. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/flag.py +0 -0
  1725. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/group.py +0 -0
  1726. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/json_api.py +0 -0
  1727. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/library.py +0 -0
  1728. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/onlinetag.py +0 -0
  1729. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/pending_deletes.py +0 -0
  1730. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/permissions.py +0 -0
  1731. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/settings_defaults.py +0 -0
  1732. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/settings_defaults_catchup.py +0 -0
  1733. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/tag_write_errors.py +0 -0
  1734. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/tagging_defaults.py +0 -0
  1735. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/throttle.py +0 -0
  1736. {codex-2.5.2 → codex-2.5.4}/codex/views/admin/user.py +0 -0
  1737. {codex-2.5.2 → codex-2.5.4}/codex/views/bookmark.py +0 -0
  1738. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/__init__.py +0 -0
  1739. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/annotate/__init__.py +0 -0
  1740. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/annotate/bookmark.py +0 -0
  1741. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/annotate/card.py +0 -0
  1742. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/annotate/cover.py +0 -0
  1743. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/choices.py +0 -0
  1744. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/columns.py +0 -0
  1745. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/const.py +0 -0
  1746. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/cover.py +0 -0
  1747. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/download.py +0 -0
  1748. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/__init__.py +0 -0
  1749. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/bookmark.py +0 -0
  1750. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/collection.py +0 -0
  1751. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/field.py +0 -0
  1752. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/filter.py +0 -0
  1753. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/__init__.py +0 -0
  1754. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/field/__init__.py +0 -0
  1755. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/field/column.py +0 -0
  1756. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/field/filter.py +0 -0
  1757. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/field/parse.py +0 -0
  1758. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/filters/search/fts.py +0 -0
  1759. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/intersections.py +0 -0
  1760. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/__init__.py +0 -0
  1761. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/annotate.py +0 -0
  1762. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/collection_list.py +0 -0
  1763. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/const.py +0 -0
  1764. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/copy_intersections.py +0 -0
  1765. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/metadata/query_intersections.py +0 -0
  1766. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/mtime.py +0 -0
  1767. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/page_in_bounds.py +0 -0
  1768. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/paginate.py +0 -0
  1769. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/settings.py +0 -0
  1770. {codex-2.5.2 → codex-2.5.4}/codex/views/browser/title.py +0 -0
  1771. {codex-2.5.2 → codex-2.5.4}/codex/views/const.py +0 -0
  1772. {codex-2.5.2 → codex-2.5.4}/codex/views/download.py +0 -0
  1773. {codex-2.5.2 → codex-2.5.4}/codex/views/envelope.py +0 -0
  1774. {codex-2.5.2 → codex-2.5.4}/codex/views/error.py +0 -0
  1775. {codex-2.5.2 → codex-2.5.4}/codex/views/exceptions.py +0 -0
  1776. {codex-2.5.2 → codex-2.5.4}/codex/views/favorites.py +0 -0
  1777. {codex-2.5.2 → codex-2.5.4}/codex/views/frontend.py +0 -0
  1778. {codex-2.5.2 → codex-2.5.4}/codex/views/healthcheck.py +0 -0
  1779. {codex-2.5.2 → codex-2.5.4}/codex/views/lazy_import.py +0 -0
  1780. {codex-2.5.2 → codex-2.5.4}/codex/views/mixins.py +0 -0
  1781. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/__init__.py +0 -0
  1782. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/authentication/__init__.py +0 -0
  1783. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/binary.py +0 -0
  1784. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/const.py +0 -0
  1785. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/error.py +0 -0
  1786. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/metadata.py +0 -0
  1787. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/opensearch/__init__.py +0 -0
  1788. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/opensearch/v1.py +0 -0
  1789. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/route.py +0 -0
  1790. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/settings.py +0 -0
  1791. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/start.py +0 -0
  1792. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/urls.py +0 -0
  1793. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/user_agent.py +0 -0
  1794. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/__init__.py +0 -0
  1795. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/const.py +0 -0
  1796. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/entry/__init__.py +0 -0
  1797. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/entry/links.py +0 -0
  1798. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/feed.py +0 -0
  1799. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v1/links.py +0 -0
  1800. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/__init__.py +0 -0
  1801. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/const.py +0 -0
  1802. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/feed/__init__.py +0 -0
  1803. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/feed/feed_links.py +0 -0
  1804. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/feed/groups.py +0 -0
  1805. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/href.py +0 -0
  1806. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/progression.py +0 -0
  1807. {codex-2.5.2 → codex-2.5.4}/codex/views/opds/v2/renderers.py +0 -0
  1808. {codex-2.5.2 → codex-2.5.4}/codex/views/pagination.py +0 -0
  1809. {codex-2.5.2 → codex-2.5.4}/codex/views/pwa.py +0 -0
  1810. {codex-2.5.2 → codex-2.5.4}/codex/views/reader/__init__.py +0 -0
  1811. {codex-2.5.2 → codex-2.5.4}/codex/views/reader/_archive_cache.py +0 -0
  1812. {codex-2.5.2 → codex-2.5.4}/codex/views/reader/arcs.py +0 -0
  1813. {codex-2.5.2 → codex-2.5.4}/codex/views/reader/reader.py +0 -0
  1814. {codex-2.5.2 → codex-2.5.4}/codex/views/reader/settings.py +0 -0
  1815. {codex-2.5.2 → codex-2.5.4}/codex/views/register.py +0 -0
  1816. {codex-2.5.2 → codex-2.5.4}/codex/views/reset_password.py +0 -0
  1817. {codex-2.5.2 → codex-2.5.4}/codex/views/session.py +0 -0
  1818. {codex-2.5.2 → codex-2.5.4}/codex/views/template.py +0 -0
  1819. {codex-2.5.2 → codex-2.5.4}/codex/views/version.py +0 -0
  1820. {codex-2.5.2 → codex-2.5.4}/codex/websockets/README.md +0 -0
  1821. {codex-2.5.2 → codex-2.5.4}/codex/websockets/__init__.py +0 -0
  1822. {codex-2.5.2 → codex-2.5.4}/codex/websockets/consumers.py +0 -0
  1823. {codex-2.5.2 → codex-2.5.4}/codex/websockets/listener.py +0 -0
  1824. {codex-2.5.2 → codex-2.5.4}/codex/websockets/mp_queue.py +0 -0
  1825. {codex-2.5.2 → codex-2.5.4}/codex/xz.py +0 -0
  1826. {codex-2.5.2 → codex-2.5.4}/compose.yaml +0 -0
  1827. {codex-2.5.2 → codex-2.5.4}/docs/DOCKER.md +0 -0
  1828. {codex-2.5.2 → codex-2.5.4}/docs/codex/img/logo.svg +0 -0
  1829. {codex-2.5.2 → codex-2.5.4}/docs/requirements.txt +0 -0
  1830. {codex-2.5.2 → codex-2.5.4}/docs/strange.jpg +0 -0
  1831. {codex-2.5.2 → codex-2.5.4}/docs/style.css +0 -0
  1832. {codex-2.5.2 → codex-2.5.4}/docs/style.material.css +0 -0
  1833. {codex-2.5.2 → codex-2.5.4}/docs/style.mkdocs.css +0 -0
  1834. {codex-2.5.2 → codex-2.5.4}/docs/style.readthedocs.css +0 -0
  1835. {codex-2.5.2 → codex-2.5.4}/eslint.config.js +0 -0
  1836. {codex-2.5.2 → codex-2.5.4}/frontend/.gitignore +0 -0
  1837. {codex-2.5.2 → codex-2.5.4}/frontend/.npmrc +0 -0
  1838. {codex-2.5.2 → codex-2.5.4}/frontend/.prettierignore +0 -0
  1839. {codex-2.5.2 → codex-2.5.4}/frontend/.remarkignore +0 -0
  1840. {codex-2.5.2 → codex-2.5.4}/frontend/.shellcheckrc +0 -0
  1841. {codex-2.5.2 → codex-2.5.4}/frontend/DESIGN.md +0 -0
  1842. {codex-2.5.2 → codex-2.5.4}/frontend/Makefile +0 -0
  1843. {codex-2.5.2 → codex-2.5.4}/frontend/README.md +0 -0
  1844. {codex-2.5.2 → codex-2.5.4}/frontend/bin/dev-server.sh +0 -0
  1845. {codex-2.5.2 → codex-2.5.4}/frontend/bin/fix-sh.sh +0 -0
  1846. {codex-2.5.2 → codex-2.5.4/frontend}/bin/fix.sh +0 -0
  1847. {codex-2.5.2 → codex-2.5.4/frontend}/bin/kill-eslint_d.sh +0 -0
  1848. {codex-2.5.2 → codex-2.5.4/frontend}/bin/lint-darwin.sh +0 -0
  1849. {codex-2.5.2 → codex-2.5.4}/frontend/bin/lint-sh.sh +0 -0
  1850. {codex-2.5.2 → codex-2.5.4/frontend}/bin/lint.sh +0 -0
  1851. {codex-2.5.2 → codex-2.5.4}/frontend/bin/release-tag.sh +0 -0
  1852. {codex-2.5.2 → codex-2.5.4}/frontend/bin/remark-for-claude.sh +0 -0
  1853. {codex-2.5.2 → codex-2.5.4}/frontend/bin/roman.py +0 -0
  1854. {codex-2.5.2 → codex-2.5.4}/frontend/bin/sort-ignore.sh +0 -0
  1855. {codex-2.5.2 → codex-2.5.4}/frontend/bin/update-deps-node.sh +0 -0
  1856. {codex-2.5.2 → codex-2.5.4/frontend}/bin/version-node.sh +0 -0
  1857. {codex-2.5.2 → codex-2.5.4}/frontend/cfg/codex-frontend.mk +0 -0
  1858. {codex-2.5.2 → codex-2.5.4}/frontend/cfg/common.mk +0 -0
  1859. {codex-2.5.2 → codex-2.5.4}/frontend/cfg/help.mk +0 -0
  1860. {codex-2.5.2 → codex-2.5.4}/frontend/cfg/node.mk +0 -0
  1861. {codex-2.5.2 → codex-2.5.4}/frontend/jsconfig.json +0 -0
  1862. {codex-2.5.2 → codex-2.5.4}/frontend/src/admin.vue +0 -0
  1863. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/abortable.js +0 -0
  1864. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/auth.js +0 -0
  1865. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/base.js +0 -0
  1866. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/browser.js +0 -0
  1867. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/common.js +0 -0
  1868. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/cover-probe.js +0 -0
  1869. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/favorites.js +0 -0
  1870. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/notify.js +0 -0
  1871. {codex-2.5.2 → codex-2.5.4}/frontend/src/api/v4/reader.js +0 -0
  1872. {codex-2.5.2 → codex-2.5.4}/frontend/src/browser.vue +0 -0
  1873. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/admin-flag-choices.json +0 -0
  1874. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/admin-jobs.json +0 -0
  1875. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/admin-status-titles.json +0 -0
  1876. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-choices.json +0 -0
  1877. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-defaults.json +0 -0
  1878. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-map.json +0 -0
  1879. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-table-column-costs.json +0 -0
  1880. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-table-columns.json +0 -0
  1881. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/browser-table-default-columns.json +0 -0
  1882. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/countries.json +0 -0
  1883. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/format-field-support.json +0 -0
  1884. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/format-field-values.json +0 -0
  1885. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/identifier-sources.json +0 -0
  1886. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/identifier-type-by-codex-name.json +0 -0
  1887. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/identifier-types.json +0 -0
  1888. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/languages.json +0 -0
  1889. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/limits.json +0 -0
  1890. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/reader-choices.json +0 -0
  1891. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/reader-defaults.json +0 -0
  1892. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/reader-map.json +0 -0
  1893. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/search-map.json +0 -0
  1894. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/tagging-estimate.json +0 -0
  1895. {codex-2.5.2 → codex-2.5.4}/frontend/src/choices/websocket-messages.json +0 -0
  1896. {codex-2.5.2 → codex-2.5.4}/frontend/src/comic-name.js +0 -0
  1897. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/browser-link.vue +0 -0
  1898. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/create-update-button.vue +0 -0
  1899. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/create-update-dialog.vue +0 -0
  1900. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/create-update-inputs-mixin.js +0 -0
  1901. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/duration-input.vue +0 -0
  1902. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/group-create-update-inputs.vue +0 -0
  1903. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/library-create-update-inputs.vue +0 -0
  1904. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/relation-picker.vue +0 -0
  1905. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/server-folder-picker.vue +0 -0
  1906. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/create-update-dialog/user-create-update-inputs.vue +0 -0
  1907. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/admin-settings-button-errors.vue +0 -0
  1908. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/admin-settings-button-progress.vue +0 -0
  1909. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/admin-settings-drawer.vue +0 -0
  1910. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/admin-settings-panel.vue +0 -0
  1911. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/status-list-item.vue +0 -0
  1912. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/drawer/status-list.vue +0 -0
  1913. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/group-chip.vue +0 -0
  1914. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/status-helpers.js +0 -0
  1915. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/action-bar.vue +0 -0
  1916. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/admin-section.scss +0 -0
  1917. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/admin-section.vue +0 -0
  1918. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/admin-table.vue +0 -0
  1919. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/auth-tab.vue +0 -0
  1920. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/custom-covers-tab.vue +0 -0
  1921. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/datetime-column.vue +0 -0
  1922. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/defaults-tab.vue +0 -0
  1923. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/delete-row-dialog.vue +0 -0
  1924. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/design.scss +0 -0
  1925. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/email-tab.vue +0 -0
  1926. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/expand-toggle.vue +0 -0
  1927. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/failed-imports-panel.vue +0 -0
  1928. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/flag-card.vue +0 -0
  1929. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/flag-descriptions.json +0 -0
  1930. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/flag-groups.json +0 -0
  1931. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/group-tab.vue +0 -0
  1932. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/job-tab.vue +0 -0
  1933. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/key-value-table.vue +0 -0
  1934. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/library-tab.vue +0 -0
  1935. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/library-table.vue +0 -0
  1936. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/pending-deletes-panel.vue +0 -0
  1937. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/relation-chips.vue +0 -0
  1938. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/replace-cover-button.vue +0 -0
  1939. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/restore-tab.vue +0 -0
  1940. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/settings-tab.vue +0 -0
  1941. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/stats-tab.vue +0 -0
  1942. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/tabs.vue +0 -0
  1943. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/tag-write-errors-panel.vue +0 -0
  1944. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/tagging-status-table.vue +0 -0
  1945. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/tagging-validation-chip.vue +0 -0
  1946. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/throttling-section.vue +0 -0
  1947. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/tabs/user-tab.vue +0 -0
  1948. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/admin/use-now-timer.js +0 -0
  1949. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/anchors.scss +0 -0
  1950. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/auth-form-mixin.js +0 -0
  1951. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/auth-menu.vue +0 -0
  1952. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/auth-token.vue +0 -0
  1953. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/change-password-dialog.vue +0 -0
  1954. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/login-dialog.vue +0 -0
  1955. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/profile-dialog.vue +0 -0
  1956. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/reset-password-confirm.vue +0 -0
  1957. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/reset-password-request-dialog.vue +0 -0
  1958. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/sso-error.vue +0 -0
  1959. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/auth/sso-login-button.vue +0 -0
  1960. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/banner.vue +0 -0
  1961. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/book-cover.scss +0 -0
  1962. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/book-cover.vue +0 -0
  1963. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/browser-header.vue +0 -0
  1964. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/browser-card-menu.vue +0 -0
  1965. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/card.vue +0 -0
  1966. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/controls.vue +0 -0
  1967. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/order-by-caption.vue +0 -0
  1968. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/remove-cover-button.vue +0 -0
  1969. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/subtitle.vue +0 -0
  1970. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/card/upload-cover-button.vue +0 -0
  1971. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-collection.vue +0 -0
  1972. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-covers.vue +0 -0
  1973. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-drawer.vue +0 -0
  1974. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-misc.vue +0 -0
  1975. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-panel.vue +0 -0
  1976. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/drawer/browser-settings-saved.vue +0 -0
  1977. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/empty.vue +0 -0
  1978. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/filter-warning-snackbar.vue +0 -0
  1979. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/main.vue +0 -0
  1980. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/table/browser-table-cell.vue +0 -0
  1981. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/table/browser-table-column-picker.vue +0 -0
  1982. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/table/browser-table.vue +0 -0
  1983. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/breadcrumbs/breadcrumbs.vue +0 -0
  1984. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/breadcrumbs/browser-toolbar-breadcrumbs.vue +0 -0
  1985. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/browser-toolbar-title.vue +0 -0
  1986. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/nav/browser-nav-button.vue +0 -0
  1987. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/nav/browser-toolbar-nav.vue +0 -0
  1988. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/search/browser-toolbar-search.vue +0 -0
  1989. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/search/search-combobox.vue +0 -0
  1990. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/search/search-help-text.vue +0 -0
  1991. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/search/search-help.vue +0 -0
  1992. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/select-many/browser-toolbar-select-many.vue +0 -0
  1993. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/columns-button.vue +0 -0
  1994. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/filter-by-select.vue +0 -0
  1995. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/filter-choice-list.vue +0 -0
  1996. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/filter-sub-menu.vue +0 -0
  1997. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/order-by-select.vue +0 -0
  1998. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/order-reverse-button.vue +0 -0
  1999. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/search-button.vue +0 -0
  2000. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/toolbar-button.vue +0 -0
  2001. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/top-collection-select.vue +0 -0
  2002. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/browser/toolbars/top/view-mode-toggle.vue +0 -0
  2003. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/cancel-button.vue +0 -0
  2004. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/clipboard.vue +0 -0
  2005. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/close-button.vue +0 -0
  2006. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/codex-list-item.vue +0 -0
  2007. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/confirm-dialog.vue +0 -0
  2008. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/confirm-footer.vue +0 -0
  2009. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/cover-popup.vue +0 -0
  2010. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/docker-hub-deprecated-snackbar.vue +0 -0
  2011. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/download-button.vue +0 -0
  2012. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/empty.vue +0 -0
  2013. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/favorite-toggle.vue +0 -0
  2014. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/force-update-button.vue +0 -0
  2015. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/force-update-confirm-dialog.vue +0 -0
  2016. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/mark-read-button.vue +0 -0
  2017. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/edit-mode/clear-field-icon.vue +0 -0
  2018. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/edit-mode/edit-panel.vue +0 -0
  2019. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/expand-button.vue +0 -0
  2020. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-activator.vue +0 -0
  2021. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-body.vue +0 -0
  2022. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-chip.vue +0 -0
  2023. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-controls.vue +0 -0
  2024. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-cover.vue +0 -0
  2025. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-dialog.vue +0 -0
  2026. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-header.vue +0 -0
  2027. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-ratings.vue +0 -0
  2028. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-tags.vue +0 -0
  2029. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/metadata-text.vue +0 -0
  2030. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/table.scss +0 -0
  2031. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/metadata/tags-table.vue +0 -0
  2032. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/online-tag/candidate-row.vue +0 -0
  2033. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/online-tag/cover-size.js +0 -0
  2034. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/online-tag/file-cover-thumb.vue +0 -0
  2035. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/online-tag/prompt-popup.vue +0 -0
  2036. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/online-tag/source-labels.js +0 -0
  2037. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/pagination-nav-button.vue +0 -0
  2038. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/pagination-slider.vue +0 -0
  2039. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/pagination-toolbar.vue +0 -0
  2040. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/placeholder-loading.vue +0 -0
  2041. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/read-state-bar.vue +0 -0
  2042. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/book-change-activator.vue +0 -0
  2043. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/book-change-drawer.vue +0 -0
  2044. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/books-window.vue +0 -0
  2045. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/change-column.scss +0 -0
  2046. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/_expansion-panel-overrides.scss +0 -0
  2047. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/download-panel.vue +0 -0
  2048. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/keyboard-shortcuts-panel.vue +0 -0
  2049. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/keyboard-shortcuts-table.vue +0 -0
  2050. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/reader-settings-controls.vue +0 -0
  2051. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/reader-settings-drawer.vue +0 -0
  2052. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/reader-settings-panel.vue +0 -0
  2053. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/reader-settings-reader.vue +0 -0
  2054. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/drawer/settings-indicator-dot.vue +0 -0
  2055. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/empty.vue +0 -0
  2056. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/horizontal-pages.vue +0 -0
  2057. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/page/page-error.vue +0 -0
  2058. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/page/page-img.vue +0 -0
  2059. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/page/page-loading.vue +0 -0
  2060. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/page/page.vue +0 -0
  2061. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/page-change-link.vue +0 -0
  2062. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/pager-horizontal.vue +0 -0
  2063. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/pager-vertical.vue +0 -0
  2064. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/pager.vue +0 -0
  2065. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/pdf-doc.vue +0 -0
  2066. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/pager/scale-for-scroll.vue +0 -0
  2067. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/toolbars/nav/reader-book-change-nav-button.vue +0 -0
  2068. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/toolbars/nav/reader-nav-button.vue +0 -0
  2069. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/reader/toolbars/top/reader-arc-select.vue +0 -0
  2070. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/scale-button.vue +0 -0
  2071. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/session-error-snackbar.vue +0 -0
  2072. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/settings/docs-footer.vue +0 -0
  2073. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/settings/opds-dialog.vue +0 -0
  2074. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/settings/opds-url.vue +0 -0
  2075. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/settings/settings-drawer.vue +0 -0
  2076. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/settings/version-footer.vue +0 -0
  2077. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/submit-footer.vue +0 -0
  2078. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/toolbar-select.vue +0 -0
  2079. {codex-2.5.2 → codex-2.5.4}/frontend/src/components/unauthorized.vue +0 -0
  2080. {codex-2.5.2 → codex-2.5.4}/frontend/src/datetime.js +0 -0
  2081. {codex-2.5.2 → codex-2.5.4}/frontend/src/http-error.vue +0 -0
  2082. {codex-2.5.2 → codex-2.5.4}/frontend/src/main.js +0 -0
  2083. {codex-2.5.2 → codex-2.5.4}/frontend/src/platform.js +0 -0
  2084. {codex-2.5.2 → codex-2.5.4}/frontend/src/plugins/drag-scroll.js +0 -0
  2085. {codex-2.5.2 → codex-2.5.4}/frontend/src/plugins/rules.js +0 -0
  2086. {codex-2.5.2 → codex-2.5.4}/frontend/src/plugins/vuetify.js +0 -0
  2087. {codex-2.5.2 → codex-2.5.4}/frontend/src/read-state.js +0 -0
  2088. {codex-2.5.2 → codex-2.5.4}/frontend/src/reader.vue +0 -0
  2089. {codex-2.5.2 → codex-2.5.4}/frontend/src/route.js +0 -0
  2090. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/browser-select-many.js +0 -0
  2091. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/browser.js +0 -0
  2092. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/common.js +0 -0
  2093. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/favorites.js +0 -0
  2094. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/metadata.js +0 -0
  2095. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/reader.js +0 -0
  2096. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/socket.js +0 -0
  2097. {codex-2.5.2 → codex-2.5.4}/frontend/src/stores/store.js +0 -0
  2098. {codex-2.5.2 → codex-2.5.4}/frontend/src/styles/global.scss +0 -0
  2099. {codex-2.5.2 → codex-2.5.4}/frontend/src/util.js +0 -0
  2100. {codex-2.5.2 → codex-2.5.4}/frontend/src/vuetify-items.js +0 -0
  2101. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-field-errors.test.js +0 -0
  2102. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-menu.test.js +0 -0
  2103. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-oidc-store.test.js +0 -0
  2104. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-row-save.test.js +0 -0
  2105. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-settings-defaults-store.test.js +0 -0
  2106. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-store-helpers.test.js +0 -0
  2107. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-table-store.test.js +0 -0
  2108. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/admin-tag-write-errors-store.test.js +0 -0
  2109. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/api-v4-base-prefix.test.js +0 -0
  2110. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/api-v4-envelope-redirect.test.js +0 -0
  2111. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/auth-store.test.js +0 -0
  2112. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/book-change-drawer.test.js +0 -0
  2113. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/breadcrumbs.test.js +0 -0
  2114. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-empty-clear-search.test.js +0 -0
  2115. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-saved-views-delete.test.js +0 -0
  2116. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-saved-views-menu.test.js +0 -0
  2117. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-select-many-store.test.js +0 -0
  2118. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-filter-settings.test.js +0 -0
  2119. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-helpers.test.js +0 -0
  2120. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-order-memory.test.js +0 -0
  2121. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-saved-settings.test.js +0 -0
  2122. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-search-clear.test.js +0 -0
  2123. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-site-defaults.test.js +0 -0
  2124. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-store-top-collection.test.js +0 -0
  2125. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-table-cell.test.js +0 -0
  2126. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-table-column-picker-standalone.test.js +0 -0
  2127. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/browser-table-column-picker.test.js +0 -0
  2128. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/candidate-row.test.js +0 -0
  2129. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/change-password-dialog.test.js +0 -0
  2130. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/common-store-errors.test.js +0 -0
  2131. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/cover-buttons.test.js +0 -0
  2132. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/cover-popup.test.js +0 -0
  2133. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/cover-probe.test.js +0 -0
  2134. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/create-update-dialog-validate.test.js +0 -0
  2135. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/datetime-column.test.js +0 -0
  2136. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/defaults-tab.test.js +0 -0
  2137. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/docker-hub-deprecated-snackbar.test.js +0 -0
  2138. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/duration-input.test.js +0 -0
  2139. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-collections.test.js +0 -0
  2140. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-comicbox5-fields.test.js +0 -0
  2141. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-community-rating.test.js +0 -0
  2142. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-date.test.js +0 -0
  2143. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-delete-keys.test.js +0 -0
  2144. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-disabled-tooltips.test.js +0 -0
  2145. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-identifiers.test.js +0 -0
  2146. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-metron-fields.test.js +0 -0
  2147. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/edit-panel-reprints.test.js +0 -0
  2148. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/favorite-toggle.test.js +0 -0
  2149. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/favorites-store.test.js +0 -0
  2150. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/file-cover-thumb.test.js +0 -0
  2151. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/filter-by-select.test.js +0 -0
  2152. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/first-paint-defaults.test.js +0 -0
  2153. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/job-tab-update-note.test.js +0 -0
  2154. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/launcher-dialog.test.js +0 -0
  2155. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/login-dialog.test.js +0 -0
  2156. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/mark-read-button.test.js +0 -0
  2157. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/metadata-activator.test.js +0 -0
  2158. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/metadata-header.test.js +0 -0
  2159. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/metadata-ratings.test.js +0 -0
  2160. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/metadata-reprints.test.js +0 -0
  2161. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/metadata-store-comicbox5.test.js +0 -0
  2162. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/opds-dialog.test.js +0 -0
  2163. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/order-by-caption.test.js +0 -0
  2164. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/pager-vertical.test.js +0 -0
  2165. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/pending-deletes-panel.test.js +0 -0
  2166. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/profile-dialog.test.js +0 -0
  2167. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/prompt-popup.test.js +0 -0
  2168. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/read-state-bar.test.js +0 -0
  2169. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/read-state.test.js +0 -0
  2170. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-arc-select.test.js +0 -0
  2171. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-nav-button.test.js +0 -0
  2172. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-settings-controls-standalone.test.js +0 -0
  2173. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-settings-scope-defaults.test.js +0 -0
  2174. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-settings-scope-shortcuts.test.js +0 -0
  2175. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-store-book-settings.test.js +0 -0
  2176. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-store-bookmark.test.js +0 -0
  2177. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-store-global-settings.test.js +0 -0
  2178. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-store-routes.test.js +0 -0
  2179. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reader-store-settings-race.test.js +0 -0
  2180. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/rename-toggle.test.js +0 -0
  2181. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reset-password-confirm.test.js +0 -0
  2182. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/reset-password-request-dialog.test.js +0 -0
  2183. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/route-helpers.test.js +0 -0
  2184. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/rules-plugin.test.js +0 -0
  2185. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/sso-auth.test.js +0 -0
  2186. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/stats-tab.test.js +0 -0
  2187. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/status-helpers.test.js +0 -0
  2188. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/tag-write-errors-panel.test.js +0 -0
  2189. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/tagging-status-table.test.js +0 -0
  2190. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/tagging-tab.test.js +0 -0
  2191. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/tagging-validation-chip.test.js +0 -0
  2192. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/theme-contract.test.js +0 -0
  2193. {codex-2.5.2 → codex-2.5.4}/frontend/tests/unit/version-footer.test.js +0 -0
  2194. {codex-2.5.2 → codex-2.5.4}/frontend/vite.config.js +0 -0
  2195. {codex-2.5.2 → codex-2.5.4}/img/comic.svg +0 -0
  2196. {codex-2.5.2 → codex-2.5.4}/img/folder.svg +0 -0
  2197. {codex-2.5.2 → codex-2.5.4}/img/imprint.svg +0 -0
  2198. {codex-2.5.2 → codex-2.5.4}/img/logo-maskable.svg +0 -0
  2199. {codex-2.5.2 → codex-2.5.4}/img/logo.svg +0 -0
  2200. {codex-2.5.2 → codex-2.5.4}/img/publisher.svg +0 -0
  2201. {codex-2.5.2 → codex-2.5.4}/img/series.svg +0 -0
  2202. {codex-2.5.2 → codex-2.5.4}/img/story-arc.svg +0 -0
  2203. {codex-2.5.2 → codex-2.5.4}/img/volume.svg +0 -0
  2204. {codex-2.5.2 → codex-2.5.4}/mkdocs.yml +0 -0
  2205. {codex-2.5.2 → codex-2.5.4}/tests/README.md +0 -0
  2206. {codex-2.5.2 → codex-2.5.4}/tests/__init__.py +0 -0
  2207. {codex-2.5.2 → codex-2.5.4}/tests/conftest.py +0 -0
  2208. {codex-2.5.2 → codex-2.5.4}/tests/files/comicbox-2-example.cbz +0 -0
  2209. {codex-2.5.2 → codex-2.5.4}/tests/files/comicbox-2-update.cbz +0 -0
  2210. {codex-2.5.2 → codex-2.5.4}/tests/files/comicbox.example.yaml +0 -0
  2211. {codex-2.5.2 → codex-2.5.4}/tests/files/comicbox.update.yaml +0 -0
  2212. {codex-2.5.2 → codex-2.5.4}/tests/importer/__init__.py +0 -0
  2213. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_basic.py +0 -0
  2214. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_cross_library_path_collision.py +0 -0
  2215. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_delete_backstop.py +0 -0
  2216. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_move_timestamps.py +0 -0
  2217. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_moved_dest_collision.py +0 -0
  2218. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_moved_folder_parents.py +0 -0
  2219. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_moved_stat_preserved.py +0 -0
  2220. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_pending_deletes.py +0 -0
  2221. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_update_none.py +0 -0
  2222. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_update_protagonist.py +0 -0
  2223. {codex-2.5.2 → codex-2.5.4}/tests/importer/test_write_then_rename.py +0 -0
  2224. {codex-2.5.2 → codex-2.5.4}/tests/nginx-local-codex.conf +0 -0
  2225. {codex-2.5.2 → codex-2.5.4}/tests/onlinetag_session_fakes.py +0 -0
  2226. {codex-2.5.2 → codex-2.5.4}/tests/perf/__init__.py +0 -0
  2227. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/README.md +0 -0
  2228. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v1/atom.rnc +0 -0
  2229. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v1/opds-pse-1.2.rnc +0 -0
  2230. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v1/opds.rnc +0 -0
  2231. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v1/opensearch-1.1.rnc +0 -0
  2232. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/acquisition-object.schema.json +0 -0
  2233. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/authentication.schema.json +0 -0
  2234. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/feed-metadata.schema.json +0 -0
  2235. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/feed.schema.json +0 -0
  2236. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/progression.schema.json +0 -0
  2237. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/properties.schema.json +0 -0
  2238. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/opds/publication.schema.json +0 -0
  2239. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/a11y.schema.json +0 -0
  2240. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/altIdentifier.schema.json +0 -0
  2241. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/article.schema.json +0 -0
  2242. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/chapter.schema.json +0 -0
  2243. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/collection.schema.json +0 -0
  2244. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/contributor.schema.json +0 -0
  2245. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/episode.schema.json +0 -0
  2246. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/extensions/encryption/properties.schema.json +0 -0
  2247. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/extensions/epub/metadata.schema.json +0 -0
  2248. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/extensions/epub/properties.schema.json +0 -0
  2249. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/extensions/epub/subcollections.schema.json +0 -0
  2250. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/issue.schema.json +0 -0
  2251. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/language-map.schema.json +0 -0
  2252. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/link.schema.json +0 -0
  2253. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/metadata.schema.json +0 -0
  2254. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/periodical.schema.json +0 -0
  2255. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/publication.schema.json +0 -0
  2256. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/season.schema.json +0 -0
  2257. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/series.schema.json +0 -0
  2258. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/storyArc.schema.json +0 -0
  2259. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/subcollection.schema.json +0 -0
  2260. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/subject.schema.json +0 -0
  2261. {codex-2.5.2 → codex-2.5.4}/tests/schema/opds/v2/readium/volume.schema.json +0 -0
  2262. {codex-2.5.2 → codex-2.5.4}/tests/settings_defaults_helpers.py +0 -0
  2263. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_change_broadcasts.py +0 -0
  2264. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_error_shapes.py +0 -0
  2265. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_flag_defaults.py +0 -0
  2266. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_oidc_settings.py +0 -0
  2267. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_pending_deletes.py +0 -0
  2268. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_query_counts.py +0 -0
  2269. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_singleton_settings.py +0 -0
  2270. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_status_order.py +0 -0
  2271. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_value_bounds.py +0 -0
  2272. {codex-2.5.2 → codex-2.5.4}/tests/test_admin_writes.py +0 -0
  2273. {codex-2.5.2 → codex-2.5.4}/tests/test_age_rating_acl.py +0 -0
  2274. {codex-2.5.2 → codex-2.5.4}/tests/test_api_docs_urls.py +0 -0
  2275. {codex-2.5.2 → codex-2.5.4}/tests/test_app_urls.py +0 -0
  2276. {codex-2.5.2 → codex-2.5.4}/tests/test_asgi.py +0 -0
  2277. {codex-2.5.2 → codex-2.5.4}/tests/test_asgi_db_connections.py +0 -0
  2278. {codex-2.5.2 → codex-2.5.4}/tests/test_bookmark_filter_isolation.py +0 -0
  2279. {codex-2.5.2 → codex-2.5.4}/tests/test_bookmark_mark_unread.py +0 -0
  2280. {codex-2.5.2 → codex-2.5.4}/tests/test_breadcrumbs.py +0 -0
  2281. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_bookmark_unread.py +0 -0
  2282. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_columns_registry.py +0 -0
  2283. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_ordering.py +0 -0
  2284. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_reprints_column.py +0 -0
  2285. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_settings_table.py +0 -0
  2286. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_table_columns.py +0 -0
  2287. {codex-2.5.2 → codex-2.5.4}/tests/test_browser_table_response.py +0 -0
  2288. {codex-2.5.2 → codex-2.5.4}/tests/test_choices_limits.py +0 -0
  2289. {codex-2.5.2 → codex-2.5.4}/tests/test_collection_order_memory.py +0 -0
  2290. {codex-2.5.2 → codex-2.5.4}/tests/test_collection_row_aggregates.py +0 -0
  2291. {codex-2.5.2 → codex-2.5.4}/tests/test_community_rating.py +0 -0
  2292. {codex-2.5.2 → codex-2.5.4}/tests/test_cover_views.py +0 -0
  2293. {codex-2.5.2 → codex-2.5.4}/tests/test_credits.py +0 -0
  2294. {codex-2.5.2 → codex-2.5.4}/tests/test_credits_primary.py +0 -0
  2295. {codex-2.5.2 → codex-2.5.4}/tests/test_crond.py +0 -0
  2296. {codex-2.5.2 → codex-2.5.4}/tests/test_csp_onlinetag_covers.py +0 -0
  2297. {codex-2.5.2 → codex-2.5.4}/tests/test_db_backup.py +0 -0
  2298. {codex-2.5.2 → codex-2.5.4}/tests/test_failed_login_log.py +0 -0
  2299. {codex-2.5.2 → codex-2.5.4}/tests/test_favorites_api.py +0 -0
  2300. {codex-2.5.2 → codex-2.5.4}/tests/test_group.py +0 -0
  2301. {codex-2.5.2 → codex-2.5.4}/tests/test_identifier_types.py +0 -0
  2302. {codex-2.5.2 → codex-2.5.4}/tests/test_import_task_build.py +0 -0
  2303. {codex-2.5.2 → codex-2.5.4}/tests/test_intersection_acl.py +0 -0
  2304. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_cleanup_bookmarks.py +0 -0
  2305. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_cleanup_custom_covers.py +0 -0
  2306. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_cleanup_orphan_covers.py +0 -0
  2307. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_cleanup_tagging_state.py +0 -0
  2308. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_codex_update.py +0 -0
  2309. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_failed_imports.py +0 -0
  2310. {codex-2.5.2 → codex-2.5.4}/tests/test_janitor_fts_rebuild.py +0 -0
  2311. {codex-2.5.2 → codex-2.5.4}/tests/test_lazy_import.py +0 -0
  2312. {codex-2.5.2 → codex-2.5.4}/tests/test_lazy_import_marker.py +0 -0
  2313. {codex-2.5.2 → codex-2.5.4}/tests/test_logging_filter.py +0 -0
  2314. {codex-2.5.2 → codex-2.5.4}/tests/test_metadata_collection_list.py +0 -0
  2315. {codex-2.5.2 → codex-2.5.4}/tests/test_metadata_get_no_writes.py +0 -0
  2316. {codex-2.5.2 → codex-2.5.4}/tests/test_metadata_path.py +0 -0
  2317. {codex-2.5.2 → codex-2.5.4}/tests/test_metadata_reprints.py +0 -0
  2318. {codex-2.5.2 → codex-2.5.4}/tests/test_migration_age_rating_relink.py +0 -0
  2319. {codex-2.5.2 → codex-2.5.4}/tests/test_missing_acl.py +0 -0
  2320. {codex-2.5.2 → codex-2.5.4}/tests/test_models.py +0 -0
  2321. {codex-2.5.2 → codex-2.5.4}/tests/test_mtime_gate.py +0 -0
  2322. {codex-2.5.2 → codex-2.5.4}/tests/test_oidc_login.py +0 -0
  2323. {codex-2.5.2 → codex-2.5.4}/tests/test_oidc_settings.py +0 -0
  2324. {codex-2.5.2 → codex-2.5.4}/tests/test_onlinetag_effort.py +0 -0
  2325. {codex-2.5.2 → codex-2.5.4}/tests/test_onlinetag_prompt_version.py +0 -0
  2326. {codex-2.5.2 → codex-2.5.4}/tests/test_onlinetag_serialize_candidate.py +0 -0
  2327. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_cache.py +0 -0
  2328. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_contributors.py +0 -0
  2329. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_feed.py +0 -0
  2330. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_keep_reading.py +0 -0
  2331. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_progression_acl.py +0 -0
  2332. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_progression_put.py +0 -0
  2333. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_schema.py +0 -0
  2334. {codex-2.5.2 → codex-2.5.4}/tests/test_opds_user_agent.py +0 -0
  2335. {codex-2.5.2 → codex-2.5.4}/tests/test_password_reset.py +0 -0
  2336. {codex-2.5.2 → codex-2.5.4}/tests/test_per_user_stats.py +0 -0
  2337. {codex-2.5.2 → codex-2.5.4}/tests/test_poller_stat_refresh.py +0 -0
  2338. {codex-2.5.2 → codex-2.5.4}/tests/test_read_only_library.py +0 -0
  2339. {codex-2.5.2 → codex-2.5.4}/tests/test_reader.py +0 -0
  2340. {codex-2.5.2 → codex-2.5.4}/tests/test_registration_settings_patch.py +0 -0
  2341. {codex-2.5.2 → codex-2.5.4}/tests/test_reprints.py +0 -0
  2342. {codex-2.5.2 → codex-2.5.4}/tests/test_route_serializer.py +0 -0
  2343. {codex-2.5.2 → codex-2.5.4}/tests/test_saved_settings_delete.py +0 -0
  2344. {codex-2.5.2 → codex-2.5.4}/tests/test_search_fts.py +0 -0
  2345. {codex-2.5.2 → codex-2.5.4}/tests/test_search_reprints.py +0 -0
  2346. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_collection_flip.py +0 -0
  2347. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_comicbox_config.py +0 -0
  2348. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_defaults.py +0 -0
  2349. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_defaults_catchup.py +0 -0
  2350. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_defaults_migration.py +0 -0
  2351. {codex-2.5.2 → codex-2.5.4}/tests/test_settings_defaults_session.py +0 -0
  2352. {codex-2.5.2 → codex-2.5.4}/tests/test_shape_identifiers.py +0 -0
  2353. {codex-2.5.2 → codex-2.5.4}/tests/test_snapshot_diff.py +0 -0
  2354. {codex-2.5.2 → codex-2.5.4}/tests/test_tag_write_filters.py +0 -0
  2355. {codex-2.5.2 → codex-2.5.4}/tests/test_tag_writer_progress.py +0 -0
  2356. {codex-2.5.2 → codex-2.5.4}/tests/test_telemeter.py +0 -0
  2357. {codex-2.5.2 → codex-2.5.4}/tests/test_telemeter_counts.py +0 -0
  2358. {codex-2.5.2 → codex-2.5.4}/tests/test_telemeter_privacy.py +0 -0
  2359. {codex-2.5.2 → codex-2.5.4}/tests/test_timezone.py +0 -0
  2360. {codex-2.5.2 → codex-2.5.4}/tests/test_user_data_restore.py +0 -0
  2361. {codex-2.5.2 → codex-2.5.4}/tests/test_user_data_snapshot.py +0 -0
  2362. {codex-2.5.2 → codex-2.5.4}/tests/test_watcher_path_prefixes.py +0 -0
  2363. {codex-2.5.2 → codex-2.5.4}/tests/tmp_dirs.py +0 -0
  2364. {codex-2.5.2 → codex-2.5.4}/vulture_ignorelist.py +0 -0
@@ -0,0 +1,51 @@
1
+ **/*.egg-info
2
+ **/*.py[co]
3
+ **/*~
4
+ **/.*cache
5
+ **/.DS_Store
6
+ **/__pycache__
7
+ **/node_modules
8
+ **/test-results
9
+ *.egg-info
10
+ *.py[co]
11
+ *Dockerfile
12
+ *~
13
+ .*cache
14
+ .DS_Store
15
+ .claude
16
+ .coverage*
17
+ .docker-token
18
+ .env*
19
+ .eslintcache
20
+ .ghrc-token
21
+ .git
22
+ .mypy_cache
23
+ .picopt_timestamp
24
+ .picopt_treestamps.yaml
25
+ .pypi-token
26
+ .pytest_cache
27
+ .ropeproject
28
+ .ruff_cache
29
+ .venv*
30
+ MANIFEST
31
+ NEWS
32
+ TODO.md
33
+ __pycache__
34
+ benchmark
35
+ cache
36
+ codex/static
37
+ codex/static_build
38
+ comics
39
+ config
40
+ dev*
41
+ docker*
42
+ docker-compose*
43
+ monkeytype.sqlite3
44
+ node_modules
45
+ site
46
+ test-results
47
+ update-builder-requirement.sh
48
+ version.sh
49
+ !Dockerfile
50
+ !dist
51
+ !docker/debian.sources
@@ -0,0 +1,35 @@
1
+ # Managed by devenv (copy/ci). Edit it there, not in a child repo.
2
+ name: devenv CI container
3
+ description: >-
4
+ Pull the CI image devenv-check's image job pushed, by digest, and start the
5
+ compose service "ci" from it. CI_CONTAINER comes from the calling
6
+ workflow's env.
7
+ inputs:
8
+ image:
9
+ description: The CI image by digest (devenv-check's needs.image.outputs.image).
10
+ required: true
11
+ token:
12
+ description: Token for logging in to GHCR.
13
+ default: ${{ github.token }}
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Log in to GHCR
18
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
19
+ with:
20
+ registry: ghcr.io
21
+ username: ${{ github.actor }}
22
+ password: ${{ inputs.token }}
23
+
24
+ - name: Start Services
25
+ shell: bash
26
+ env:
27
+ # compose.yaml's `image: ${CI_IMAGE}`.
28
+ CI_IMAGE: ${{ inputs.image }}
29
+ run: |
30
+ mkdir -p dist test-results
31
+ if ! docker pull --quiet "$CI_IMAGE"; then
32
+ echo "::error::Could not pull $CI_IMAGE. A re-run of a failed job reuses its original CI image, which may have been pruned since; use \"Re-run all jobs\" to rebuild it."
33
+ exit 1
34
+ fi
35
+ docker compose up --detach --no-build ci
@@ -0,0 +1,50 @@
1
+ # Managed by devenv (copy/ci). Edit it there, not in a child repo.
2
+ #
3
+ # A composite action, not a reusable workflow, so it can run in any job (for
4
+ # example straight after an image manifest) and so PyPI trusted publishing,
5
+ # which PyPI refuses from inside a reusable workflow, stays possible.
6
+ name: devenv PyPI publish
7
+ description: >-
8
+ Publish the python-dist artifact to PyPI with uv. Files already on PyPI are
9
+ skipped, so a re-run finishes a partial publish. Without a token it uses
10
+ trusted publishing, so the job must grant id-token: write and must be a job
11
+ in the repo's own ci.yml, which is the workflow registered on PyPI, not in a
12
+ reusable workflow.
13
+ inputs:
14
+ token:
15
+ description: >-
16
+ A PyPI API token (secrets.PYPI_TOKEN). Empty, as a deleted secret is,
17
+ means trusted publishing.
18
+ required: false
19
+ default: ""
20
+ download:
21
+ description: >-
22
+ "false" when the job has already downloaded python-dist into dist/.
23
+ default: "true"
24
+ runs:
25
+ using: composite
26
+ steps:
27
+ - name: Download dist artifact
28
+ if: inputs.download == 'true'
29
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
30
+ with:
31
+ name: python-dist
32
+ path: dist/
33
+
34
+ - name: Set up uv
35
+ uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
36
+
37
+ - name: Publish to PyPI with a token
38
+ if: inputs.token != ''
39
+ shell: bash
40
+ env:
41
+ UV_PUBLISH_TOKEN: ${{ inputs.token }}
42
+ run: uv publish --check-url https://pypi.org/simple/ dist/*
43
+
44
+ # UV_PUBLISH_TOKEN stays unset: an empty one might count as a token.
45
+ - name: Publish to PyPI with trusted publishing
46
+ if: inputs.token == ''
47
+ shell: bash
48
+ run: >-
49
+ uv publish --trusted-publishing always
50
+ --check-url https://pypi.org/simple/ dist/*
@@ -0,0 +1,382 @@
1
+ # Managed by devenv (copy/ci). Edit it there, not in a child repo.
2
+ #
3
+ # Gate, one CI image build, a fail-fast lint/test/build matrix that pulls that
4
+ # image, and the required-check aggregator. With container: false the matrix
5
+ # runs natively on inputs.runner instead (for macOS-only projects) and no
6
+ # image is built. Call it from a job in ci.yml; later jobs read its outputs
7
+ # instead of repeating any trigger logic:
8
+ #
9
+ # ci:
10
+ # uses: ./.github/workflows/devenv-check.yml
11
+ # permissions: { contents: read, actions: read, packages: write, checks: write }
12
+ # deploy-job:
13
+ # needs: ci
14
+ # if: ${{ !cancelled() && needs.ci.result == 'success' && needs.ci.outputs.deploy == 'true' }}
15
+ name: devenv check
16
+
17
+ on:
18
+ workflow_call:
19
+ inputs:
20
+ matrix:
21
+ description: >-
22
+ JSON list of check combos, one parallel job each. Keys: name (the
23
+ job name), make (make targets run in the CI container), and the
24
+ booleans junit (publish test-results/pytest) and dist (upload dist/
25
+ as python-dist).
26
+ type: string
27
+ default: >-
28
+ [{"name": "Lint", "make": "lint"},
29
+ {"name": "Test", "make": "test", "junit": true},
30
+ {"name": "Build Dist", "make": "build", "dist": true}]
31
+ ci-target:
32
+ description: Dockerfile target for the CI image. Empty builds the last stage.
33
+ type: string
34
+ default: ""
35
+ container:
36
+ description: >-
37
+ true runs every combo in the CI image built from the Dockerfile.
38
+ false runs it natively on the runner after setup-uv, setup-bun and
39
+ make install, for projects that cannot run in a Linux container.
40
+ type: boolean
41
+ default: true
42
+ runner:
43
+ description: >-
44
+ Runner for the check matrix, e.g. macos-latest with container false.
45
+ The gate, image and result jobs stay on ubuntu-24.04.
46
+ type: string
47
+ default: ubuntu-24.04
48
+ release-preflight:
49
+ description: >-
50
+ Run bin/release-tag.sh preflight in the gate on main pushes and pull
51
+ requests into main.
52
+ type: boolean
53
+ default: true
54
+ retention-days:
55
+ description: Days to keep python-dist and the ci-passed marker.
56
+ type: number
57
+ default: 7
58
+ outputs:
59
+ deploy:
60
+ description: '"true" on a main push or a develop <- pre-release pull request.'
61
+ value: ${{ jobs.gate.outputs.deploy }}
62
+ release:
63
+ description: '"true" on a main push unless vars.RELEASE_AUTOMATION is "off".'
64
+ value: ${{ jobs.gate.outputs.release }}
65
+ version:
66
+ description: The version in pyproject.toml.
67
+ value: ${{ jobs.gate.outputs.version }}
68
+ final:
69
+ description: '"true" when the version is a final X.Y.Z release.'
70
+ value: ${{ jobs.gate.outputs.final }}
71
+ dist_found:
72
+ description: '"true" when the gate reused python-dist from an earlier run.'
73
+ value: ${{ jobs.gate.outputs.dist_found }}
74
+ source_run_id:
75
+ description: The run python-dist was reused from.
76
+ value: ${{ jobs.gate.outputs.source_run_id }}
77
+ tree:
78
+ description: The git tree that was checked.
79
+ value: ${{ jobs.gate.outputs.tree }}
80
+
81
+ env:
82
+ CI_IMAGE: ghcr.io/${{ github.repository }}-ci
83
+ CI_CONTAINER: ${{ github.event.repository.name }}-ci
84
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
85
+
86
+ jobs:
87
+ # ---------------------------------------------------------------------------
88
+ # Gate: the only job with trigger logic. Runs the Release Preflight, and on a
89
+ # main push reuses the dist of an earlier run that passed on the same tree.
90
+ # A pull request into develop is checked only from pre-release or a version
91
+ # branch: "v" and a digit, as in v1.2.3. Expressions have no regex, so each
92
+ # digit is its own prefix; a bare "v" prefix would also match vulture-fix.
93
+ # ---------------------------------------------------------------------------
94
+ gate:
95
+ name: Gate
96
+ runs-on: ubuntu-24.04
97
+ timeout-minutes: 10
98
+ if: >-
99
+ (github.event_name == 'push' && github.ref_name == 'main')
100
+ || github.base_ref == 'main'
101
+ || (github.base_ref == 'develop'
102
+ && (github.head_ref == 'pre-release'
103
+ || startsWith(github.head_ref, 'v0') || startsWith(github.head_ref, 'v1')
104
+ || startsWith(github.head_ref, 'v2') || startsWith(github.head_ref, 'v3')
105
+ || startsWith(github.head_ref, 'v4') || startsWith(github.head_ref, 'v5')
106
+ || startsWith(github.head_ref, 'v6') || startsWith(github.head_ref, 'v7')
107
+ || startsWith(github.head_ref, 'v8') || startsWith(github.head_ref, 'v9')))
108
+ permissions:
109
+ contents: read
110
+ actions: read
111
+ outputs:
112
+ deploy: >-
113
+ ${{ (github.event_name == 'push' && github.ref_name == 'main')
114
+ || (github.base_ref == 'develop' && github.head_ref == 'pre-release') }}
115
+ release: >-
116
+ ${{ github.event_name == 'push' && github.ref_name == 'main'
117
+ && vars.RELEASE_AUTOMATION != 'off' }}
118
+ version: ${{ steps.info.outputs.version }}
119
+ final: ${{ steps.info.outputs.final }}
120
+ tree: ${{ steps.info.outputs.tree }}
121
+ # Always "true" or "false".
122
+ dist_found: ${{ steps.reuse.outputs.dist_found == 'true' }}
123
+ source_run_id: ${{ steps.reuse.outputs.source_run_id }}
124
+ steps:
125
+ - name: Checkout
126
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
127
+
128
+ # A release PR must bump the version and add its NEWS.md section before
129
+ # it can merge; a failure here fails the gate, so nothing else runs and
130
+ # the required check goes red.
131
+ - name: Release Preflight
132
+ if: >-
133
+ inputs.release-preflight && vars.RELEASE_AUTOMATION != 'off'
134
+ && ((github.event_name == 'push' && github.ref_name == 'main')
135
+ || github.base_ref == 'main')
136
+ env:
137
+ RELEASE_SHA: ${{ github.sha }}
138
+ run: bin/release-tag.sh preflight
139
+
140
+ - name: Tree and version
141
+ id: info
142
+ run: |
143
+ echo "tree=$(git rev-parse 'HEAD^{tree}')" >>"$GITHUB_OUTPUT"
144
+ if [[ -f bin/release_info.py ]]; then
145
+ python3 bin/release_info.py version --pyproject pyproject.toml \
146
+ --github-output "$GITHUB_OUTPUT"
147
+ fi
148
+
149
+ # Main pushes only: a pull request always runs the full check.
150
+ - name: Reuse a dist that passed on this tree
151
+ id: reuse
152
+ if: github.event_name == 'push' && github.ref_name == 'main'
153
+ env:
154
+ GH_REPO: ${{ github.repository }}
155
+ GH_TOKEN: ${{ github.token }}
156
+ run: bin/ci-reuse-dist.sh
157
+
158
+ - name: Link the reused run
159
+ if: steps.reuse.outputs.dist_found == 'true'
160
+ env:
161
+ RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ steps.reuse.outputs.source_run_id }}
162
+ run: echo "Reused python-dist from CI run $RUN_URL" >>"$GITHUB_STEP_SUMMARY"
163
+
164
+ - name: Upload reused dist
165
+ if: steps.reuse.outputs.dist_found == 'true'
166
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
167
+ with:
168
+ name: python-dist
169
+ path: dist/
170
+ retention-days: ${{ inputs.retention-days }}
171
+ if-no-files-found: error
172
+
173
+ # ---------------------------------------------------------------------------
174
+ # Build the CI image once, with the registry cache, and push it by digest.
175
+ # Pushing skips exporting and loading the image into the Docker daemon,
176
+ # which cost about a minute per job when every combo built its own.
177
+ # ---------------------------------------------------------------------------
178
+ image:
179
+ name: CI Image
180
+ needs: gate
181
+ if: inputs.container && needs.gate.outputs.dist_found != 'true'
182
+ runs-on: ubuntu-24.04
183
+ # The slowest job: a cold build without the registry cache.
184
+ timeout-minutes: 45
185
+ permissions:
186
+ contents: read
187
+ packages: write
188
+ outputs:
189
+ image: ${{ steps.ref.outputs.image }}
190
+ env:
191
+ DOCKER_BUILD_RECORD_UPLOAD: "false"
192
+ DOCKER_BUILD_SUMMARY: "false"
193
+ steps:
194
+ - name: Checkout
195
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
196
+
197
+ - name: Set up Docker Buildx
198
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
199
+
200
+ - name: Log in to GHCR
201
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
202
+ with:
203
+ registry: ghcr.io
204
+ username: ${{ github.actor }}
205
+ password: ${{ github.token }}
206
+
207
+ - name: Build and push CI image
208
+ id: build
209
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
210
+ with:
211
+ context: .
212
+ # An empty target builds the Dockerfile's last stage.
213
+ target: ${{ inputs.ci-target }}
214
+ # Untagged, by digest: every check job pulls exactly this image.
215
+ outputs: type=image,name=${{ env.CI_IMAGE }},push-by-digest=true,name-canonical=true,push=true
216
+ # One manifest per run, so pruning never splits an image index.
217
+ provenance: false
218
+ sbom: false
219
+ cache-from: type=registry,ref=${{ env.CI_IMAGE }}:cache
220
+ cache-to: type=registry,ref=${{ env.CI_IMAGE }}:cache,mode=max
221
+
222
+ - name: Image reference
223
+ id: ref
224
+ env:
225
+ DIGEST: ${{ steps.build.outputs.digest }}
226
+ run: echo "image=$CI_IMAGE@$DIGEST" >>"$GITHUB_OUTPUT"
227
+
228
+ # ---------------------------------------------------------------------------
229
+ # Every run leaves an untagged CI image in the <repo>-ci package; keep the
230
+ # newest 10. It runs beside the check matrix, off the deploy path: this
231
+ # run's image is the newest, and each check has pulled its own copy within
232
+ # seconds of starting. A failure here never fails CI. The spares cover
233
+ # "Re-run failed jobs", which reuses this run's image digest.
234
+ # ---------------------------------------------------------------------------
235
+ prune:
236
+ name: Prune CI Images
237
+ needs: image
238
+ runs-on: ubuntu-24.04
239
+ timeout-minutes: 10
240
+ continue-on-error: true
241
+ permissions:
242
+ packages: write
243
+ steps:
244
+ - name: Delete old untagged CI images
245
+ uses: actions/delete-package-versions@e5bc658cc4c965c472efe991f8beea3981499c55 # v5.0.0
246
+ with:
247
+ package-name: ${{ github.event.repository.name }}-ci
248
+ package-type: container
249
+ min-versions-to-keep: 10
250
+ delete-only-untagged-versions: "true"
251
+
252
+ # ---------------------------------------------------------------------------
253
+ # Lint, test and build in parallel in the CI image. fail-fast: the first
254
+ # failing combo cancels the rest. Never set fail-fast: false or
255
+ # continue-on-error here; the result job relies on it.
256
+ # ---------------------------------------------------------------------------
257
+ check:
258
+ name: ${{ matrix.name }}
259
+ needs: [gate, image]
260
+ # Skipped when the gate reused a dist. The image job is skipped in native
261
+ # mode; in container mode it must have succeeded.
262
+ if: >-
263
+ !cancelled() && needs.gate.result == 'success'
264
+ && needs.gate.outputs.dist_found != 'true'
265
+ && (needs.image.result == 'success'
266
+ || (!inputs.container && needs.image.result == 'skipped'))
267
+ runs-on: ${{ inputs.runner }}
268
+ timeout-minutes: 30
269
+ # Job permissions cannot vary per combo; this is the union.
270
+ permissions:
271
+ contents: read
272
+ packages: read
273
+ checks: write
274
+ strategy:
275
+ fail-fast: true
276
+ matrix:
277
+ include: ${{ fromJSON(inputs.matrix) }}
278
+ steps:
279
+ - name: Checkout
280
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
281
+
282
+ - name: Start CI container
283
+ if: inputs.container
284
+ uses: ./.github/actions/devenv-ci-container
285
+ with:
286
+ image: ${{ needs.image.outputs.image }}
287
+
288
+ # Native mode: install the project on the runner instead.
289
+ - name: Set up uv
290
+ if: ${{ !inputs.container }}
291
+ uses: astral-sh/setup-uv@cec208311dfd045dd5311c1add060b2062131d57 # v8.0.0
292
+ with:
293
+ enable-cache: true
294
+
295
+ - name: Set up bun
296
+ if: ${{ !inputs.container }}
297
+ uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
298
+
299
+ - name: Install
300
+ if: ${{ !inputs.container }}
301
+ run: |
302
+ uv python install
303
+ mkdir -p dist test-results
304
+ make install
305
+
306
+ - name: ${{ matrix.name }}
307
+ id: work
308
+ env:
309
+ MAKE_TARGETS: ${{ matrix.make }}
310
+ IN_CONTAINER: ${{ inputs.container }}
311
+ run: |
312
+ read -ra targets <<<"$MAKE_TARGETS"
313
+ if [[ $IN_CONTAINER == true ]]; then
314
+ docker exec "$CI_CONTAINER" make "${targets[@]}"
315
+ else
316
+ make "${targets[@]}"
317
+ fi
318
+
319
+ # Straight after the work step and on !cancelled(), so a test failure
320
+ # still publishes its report.
321
+ - name: Upload Test Results
322
+ id: upload-tests
323
+ if: matrix.junit && !cancelled() && steps.work.outcome != 'skipped'
324
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
325
+ with:
326
+ name: test-results-${{ strategy.job-index }}
327
+ path: "**/test-results/pytest/*.xml"
328
+
329
+ - name: Publish Test Report
330
+ if: matrix.junit && !cancelled() && steps.upload-tests.outcome == 'success'
331
+ uses: mikepenz/action-junit-report@b7b80d7ac5b1da46d6aaff9fb57ad50d8453bcb3 # v6.6.0
332
+ with:
333
+ report_paths: "**/test-results/pytest/*.xml"
334
+
335
+ # Implicit success(): only when make succeeded. The one producer of
336
+ # python-dist unless the gate reused a dist.
337
+ - name: Upload dist artifact
338
+ if: matrix.dist
339
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
340
+ with:
341
+ name: python-dist
342
+ path: dist/
343
+ retention-days: ${{ inputs.retention-days }}
344
+ if-no-files-found: error
345
+
346
+ # ---------------------------------------------------------------------------
347
+ # The required check, "<caller job name> / Lint, Test & Build Dist": green
348
+ # only when the gate and every check combo passed, or the gate reused an
349
+ # already-tested dist.
350
+ # ---------------------------------------------------------------------------
351
+ result:
352
+ name: Lint, Test & Build Dist
353
+ needs: [gate, check]
354
+ # always(), not !cancelled(): a skipped required check counts as passing,
355
+ # so a cancelled run must still reach this job and go red.
356
+ if: ${{ always() && needs.gate.result != 'skipped' }}
357
+ runs-on: ubuntu-24.04
358
+ timeout-minutes: 5
359
+ permissions: {}
360
+ steps:
361
+ - name: All required jobs passed
362
+ env:
363
+ NEEDS: ${{ toJSON(needs) }}
364
+ DIST_FOUND: ${{ needs.gate.outputs.dist_found }}
365
+ run: |
366
+ jq -c 'map_values(.result)' <<<"$NEEDS"
367
+ ok='["success"]'
368
+ if [[ "$DIST_FOUND" == "true" ]]; then ok='["success","skipped"]'; fi
369
+ jq -e --argjson ok "$ok" '.gate.result == "success" and (.check.result | IN($ok[]))' <<<"$NEEDS"
370
+
371
+ # The marker bin/ci-reuse-dist.sh looks for: this tree passed, and this
372
+ # run holds its python-dist.
373
+ - name: Record the passing tree
374
+ run: echo "$GITHUB_RUN_ID" >ci-passed
375
+
376
+ - name: Upload the passing-tree marker
377
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
378
+ with:
379
+ name: ci-passed-${{ needs.gate.outputs.tree }}
380
+ path: ci-passed
381
+ retention-days: ${{ inputs.retention-days }}
382
+ if-no-files-found: error
@@ -0,0 +1,48 @@
1
+ # Managed by devenv (copy/ci). Edit it there, not in a child repo.
2
+ #
3
+ # Last step of a main release: tag, GitHub Release from NEWS.md, merge-back.
4
+ # Every step is idempotent: use "Re-run failed jobs" to finish a partial run.
5
+ # The caller decides when it runs, because only the caller knows which deploy
6
+ # jobs must succeed first:
7
+ #
8
+ # release:
9
+ # needs: [ci, pypi]
10
+ # if: ${{ !cancelled() && needs.ci.outputs.release == 'true' && needs.pypi.result == 'success' }}
11
+ # uses: ./.github/workflows/devenv-release.yml
12
+ # permissions: { contents: write }
13
+ name: devenv release
14
+
15
+ on: workflow_call
16
+
17
+ env:
18
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
19
+
20
+ jobs:
21
+ release:
22
+ name: Tag, Release & Merge to Develop
23
+ runs-on: ubuntu-24.04
24
+ timeout-minutes: 10
25
+ permissions:
26
+ contents: write # tag push, develop push, gh release create
27
+ env:
28
+ GH_TOKEN: ${{ github.token }}
29
+ GH_REPO: ${{ github.repository }}
30
+ RELEASE_SHA: ${{ github.sha }}
31
+ GIT_AUTHOR_NAME: github-actions[bot]
32
+ GIT_AUTHOR_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
33
+ GIT_COMMITTER_NAME: github-actions[bot]
34
+ GIT_COMMITTER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
35
+ steps:
36
+ - name: Checkout
37
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
38
+ with:
39
+ fetch-depth: 0 # ancestry and tree lookups against develop
40
+
41
+ - name: Tag
42
+ run: bin/release-tag.sh tag
43
+
44
+ - name: GitHub Release
45
+ run: bin/release-tag.sh publish
46
+
47
+ - name: Merge main into develop
48
+ run: bin/release-tag.sh merge-back
codex-2.5.4/.gitignore ADDED
@@ -0,0 +1,96 @@
1
+ *$py.class
2
+ *.cover
3
+ *.egg
4
+ *.egg-info/
5
+ *.log
6
+ *.manifest
7
+ *.mo
8
+ *.pot
9
+ *.py,cover
10
+ *.py[cod]
11
+ *.sage.py
12
+ *.so
13
+ *.spec
14
+ *~
15
+ .*cache
16
+ .DS_Store
17
+ .Python
18
+ .claude
19
+ .coverage*
20
+ .coverage.*
21
+ .dmypy.json
22
+ .docker-token
23
+ .eggs/
24
+ .env
25
+ .env-*
26
+ .env.cleaner
27
+ .env.package
28
+ .env.pushover
29
+ .ghrc-token
30
+ .hypothesis/
31
+ .installed.cfg
32
+ .ipynb_checkpoints
33
+ .nox/
34
+ .npm
35
+ .pypi-token
36
+ .pypirc
37
+ .pyre/
38
+ .python-version
39
+ .ropeproject
40
+ .scrapy
41
+ .spyderproject
42
+ .spyproject
43
+ .tox/
44
+ .uv-publish-env
45
+ .venv*
46
+ ENV/
47
+ MANIFEST
48
+ TODO.md
49
+ __pycache__/
50
+ __pypackages__/
51
+ __snapshots__
52
+ build
53
+ celerybeat-schedule
54
+ celerybeat.pid
55
+ codex/static/
56
+ codex/static_build/
57
+ comics
58
+ config
59
+ coverage.xml
60
+ develop-eggs/
61
+ dist
62
+ dmypy.json
63
+ docs/_build/
64
+ downloads/
65
+ eggs/
66
+ env.bak/
67
+ env/
68
+ frontend/bundle-stats.html
69
+ frontend/components.d.ts
70
+ frontend/coverage
71
+ frontend/src/choices/
72
+ htmlcov/
73
+ instance/
74
+ ipython_config.py
75
+ jspm_packages/
76
+ lib/
77
+ lib64/
78
+ local_settings.py
79
+ monkeytype.sqlite3
80
+ node_modules
81
+ nosetests.xml
82
+ parts/
83
+ pip-delete-this-directory.txt
84
+ pip-log.txt
85
+ pip-wheel-metadata/
86
+ profile_default/
87
+ sdist/
88
+ share/python-wheels/
89
+ site/
90
+ target/
91
+ tasks/
92
+ test-results
93
+ var/
94
+ venv.bak/
95
+ venv/
96
+ wheels/
@@ -0,0 +1,27 @@
1
+ *.sh
2
+ *Dockerfile
3
+ .*cache
4
+ .claude
5
+ .git
6
+ .venv*
7
+ __pycache__
8
+ bun.lock
9
+ cache
10
+ codex/static
11
+ codex/static_build
12
+ codex/static_src/img/*.svg
13
+ codex/templates/**/*.html
14
+ codex/templates/**/*.xml
15
+ codex/templates/pwa/manifest.webmanifest
16
+ comics
17
+ config
18
+ dist
19
+ frontend
20
+ node_modules
21
+ tasks
22
+ test-results
23
+ tests/**/*.json
24
+ tests/**/*.xml
25
+ tests/**/*.yaml
26
+ tests/**/*.yml
27
+ uv.lock