kryten-webqueue 0.37.0__tar.gz → 0.38.0__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 (169) hide show
  1. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/CHANGELOG.md +48 -0
  2. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/PKG-INFO +1 -1
  3. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/pyproject.toml +1 -1
  4. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.github/workflows/gitleaks.yml +0 -0
  5. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.github/workflows/python-publish.yml +0 -0
  6. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.github/workflows/release.yml +0 -0
  7. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.gitignore +0 -0
  8. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.gitleaks.toml +0 -0
  9. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/.pre-commit-config.yaml +0 -0
  10. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/AGENT-WORKFLOW-GUIDE.md +0 -0
  11. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/AGENTS.md +0 -0
  12. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/README.md +0 -0
  13. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/config.example.json +0 -0
  14. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/deploy/kryten-webqueue.service +0 -0
  15. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/deploy/nginx-queue.conf +0 -0
  16. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/IMPLEMENTATION_SPEC.md +0 -0
  17. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/IMPL_API_GATE.md +0 -0
  18. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/IMPL_ECONOMY.md +0 -0
  19. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/IMPL_KRYTEN_PY.md +0 -0
  20. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/IMPL_ROBOT.md +0 -0
  21. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
  22. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
  23. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/Log for incorrect promo insertion problem.txt +0 -0
  24. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
  25. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/PRE_PLAN_GAPS.md +0 -0
  26. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/PRODUCT_PLAN.md +0 -0
  27. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/SPEC_ADMIN_ITEM_EDITOR.md +0 -0
  28. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/SPEC_CATALOG_ENRICHMENT_PIPELINE.md +0 -0
  29. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/SPEC_EMOTE_REHOST.md +0 -0
  30. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
  31. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/docs/UX_POLISH_PLAN.md +0 -0
  32. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/__init__.py +0 -0
  33. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/__main__.py +0 -0
  34. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/api_gate/__init__.py +0 -0
  35. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/api_gate/client.py +0 -0
  36. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/app.py +0 -0
  37. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/auth/__init__.py +0 -0
  38. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/auth/otp.py +0 -0
  39. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/auth/rate_limit.py +0 -0
  40. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/auth/session.py +0 -0
  41. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/__init__.py +0 -0
  42. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/__init__.py +0 -0
  43. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_catalog.py +0 -0
  44. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_connection.py +0 -0
  45. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_enrichment.py +0 -0
  46. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_feedback.py +0 -0
  47. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_people.py +0 -0
  48. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_playlists.py +0 -0
  49. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_queue.py +0 -0
  50. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/db/_watchlist.py +0 -0
  51. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/__init__.py +0 -0
  52. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/classify.py +0 -0
  53. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/normalise.py +0 -0
  54. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/pipeline.py +0 -0
  55. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/providers.py +0 -0
  56. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/report.py +0 -0
  57. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/__init__.py +0 -0
  58. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/art.py +0 -0
  59. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/categories.py +0 -0
  60. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/meta.py +0 -0
  61. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/sync.py +0 -0
  62. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/tags.py +0 -0
  63. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/enrichment/steps/title.py +0 -0
  64. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/images.py +0 -0
  65. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/mediacms.py +0 -0
  66. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/catalog/sync.py +0 -0
  67. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/config.py +0 -0
  68. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/__init__.py +0 -0
  69. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
  70. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
  71. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
  72. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
  73. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
  74. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
  75. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/motdposters.py +0 -0
  76. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/cmsutils/playedmovies.py +0 -0
  77. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
  78. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/integrations/ytpipe/downloader.py +0 -0
  79. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/__init__.py +0 -0
  80. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
  81. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/job_scheduler.py +0 -0
  82. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/manager.py +0 -0
  83. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/rehost_emotes.py +0 -0
  84. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/jobs/tasks.py +0 -0
  85. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/logging_config.py +0 -0
  86. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/__init__.py +0 -0
  87. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/bulk_add.py +0 -0
  88. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/fire.py +0 -0
  89. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/importer.py +0 -0
  90. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/ordering.py +0 -0
  91. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/playlists/scheduler.py +0 -0
  92. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/promos/__init__.py +0 -0
  93. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/promos/director.py +0 -0
  94. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/__init__.py +0 -0
  95. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/completion.py +0 -0
  96. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/ordering.py +0 -0
  97. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/poller.py +0 -0
  98. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/presence.py +0 -0
  99. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/race_poller.py +0 -0
  100. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/queue/shadow.py +0 -0
  101. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/__init__.py +0 -0
  102. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_catalog.py +0 -0
  103. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_feedback.py +0 -0
  104. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_job_schedules.py +0 -0
  105. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_jobs.py +0 -0
  106. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_moderation.py +0 -0
  107. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_playlists.py +0 -0
  108. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_promos.py +0 -0
  109. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_queue.py +0 -0
  110. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/admin_schedules.py +0 -0
  111. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/auth.py +0 -0
  112. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/catalog.py +0 -0
  113. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/feedback.py +0 -0
  114. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/pages.py +0 -0
  115. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/queue.py +0 -0
  116. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/routes/user.py +0 -0
  117. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/css/main.css +0 -0
  118. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/admin-playlists.js +0 -0
  119. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/admin-promos.js +0 -0
  120. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
  121. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/admin-schedules.js +0 -0
  122. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/admin.js +0 -0
  123. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/static/js/main.js +0 -0
  124. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/admin/index.html +0 -0
  125. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/admin/playlists.html +0 -0
  126. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/admin/promos.html +0 -0
  127. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
  128. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/admin/schedules.html +0 -0
  129. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/auth/login.html +0 -0
  130. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/base.html +0 -0
  131. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/catalog/browse.html +0 -0
  132. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/catalog/edit_item_modal.html +0 -0
  133. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
  134. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
  135. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/feedback/index.html +0 -0
  136. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/queue/index.html +0 -0
  137. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/race.html +0 -0
  138. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/user/dashboard.html +0 -0
  139. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/templates/user/my_list.html +0 -0
  140. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/ws/__init__.py +0 -0
  141. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/ws/handler.py +0 -0
  142. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/kryten_webqueue/ws/manager.py +0 -0
  143. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/scripts/AGENTS.md +0 -0
  144. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/scripts/patch_mediacms_bulk_facets.py +0 -0
  145. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/scripts/patch_mediacms_tags.py +0 -0
  146. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/scripts/trigger_enrich.py +0 -0
  147. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/__init__.py +0 -0
  148. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_classify.py +0 -0
  149. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_config_persistence.py +0 -0
  150. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_feedback.py +0 -0
  151. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_fetchurls_sharepoint.py +0 -0
  152. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_people_facets.py +0 -0
  153. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_phase1.py +0 -0
  154. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_phase2_jobs.py +0 -0
  155. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_phase3_jobs.py +0 -0
  156. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_phase4_live_fixes.py +0 -0
  157. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_playlist_import.py +0 -0
  158. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_presence_refund.py +0 -0
  159. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_promo_director.py +0 -0
  160. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_promo_pool_exclusion.py +0 -0
  161. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_providers.py +0 -0
  162. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_queue_announce.py +0 -0
  163. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_race_poller.py +0 -0
  164. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_recently_played_hide.py +0 -0
  165. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_save_results_to_playlist.py +0 -0
  166. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_schedule_lock.py +0 -0
  167. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_search_facets.py +0 -0
  168. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_title_normalization.py +0 -0
  169. {kryten_webqueue-0.37.0 → kryten_webqueue-0.38.0}/tests/test_watchlist.py +0 -0
@@ -2,6 +2,54 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.38.0] - 2026-08-15
6
+
7
+ ### Added
8
+
9
+ - **Delete Permanently feature** for admins. Catalog items can now be permanently
10
+ deleted from both the local database and MediaCMS via a 🗑️ Delete button on
11
+ browse cards and item detail pages (admin-only). The deletion requires explicit
12
+ confirmation with a "CANNOT be undone" warning, removes the item from all
13
+ catalog tables (tags, categories, people, main catalog) in proper FK order, and
14
+ logs the action with admin username and item title for audit trail. The MediaCMS
15
+ deletion is idempotent (404 treated as success) to handle edge cases gracefully.
16
+
17
+ - **Clickable queue items.** Queue items (both in the main queue list and the
18
+ Now Playing card) now link to their catalog detail pages. Clicking a queue item's
19
+ title or cover art navigates to `/catalog/item/{friendly_token}` for quick access
20
+ to full metadata, tags, and queueing options. Links are conditionally rendered
21
+ only when `friendly_token` exists (graceful degradation for non-catalog items).
22
+
23
+ ### Changed
24
+
25
+ - **Typography system overhaul.** Established a consistent three-font hierarchy:
26
+ Georgia serif (body text and headings), Inter sans-serif with weights 400/500/600/700
27
+ (UI elements, navigation, buttons), and Consolas monospace (logs, code). Headings
28
+ now use font-weight 600-700 for proper visual hierarchy, nav links are semi-bold
29
+ (600) with an animated underline on hover, and the navbar displays the Channel-Z
30
+ Unicode logo (🟩🟨🟧🟥Channel-Z🟥🟧🟨🟩).
31
+
32
+ - **Admin jobs grid layout.** The admin dashboard jobs panel now uses CSS Grid
33
+ instead of flexbox, with properly aligned columns (`minmax(0, 1fr)` for text
34
+ columns to prevent overflow). Job names, statuses, and actions stay aligned
35
+ across rows for improved readability.
36
+
37
+ - **Size increases for readability.** Job badges and queue item badges increased
38
+ to 0.85rem, queue item titles to 1rem, now-playing descriptions to 0.95rem, and
39
+ metadata chips to 0.9rem. The Back link on detail pages is now styled as a
40
+ simple text link (`.back-link` utility class) rather than a button.
41
+
42
+ - **Light mode contrast improvements.** Pills and badges in light mode now use
43
+ explicit high-contrast color overrides (solid backgrounds with proper text colors)
44
+ to meet WCAG AA accessibility standards. Race page pills also received light mode
45
+ overrides with solid backgrounds.
46
+
47
+ - **Login page polish.** The login page now displays the Channel-Z Unicode logo as
48
+ the title (Georgia serif, bold), enhanced instructional text sizing (1.1rem,
49
+ semi-bold), smart button states (disabled until input has content), Enter key
50
+ submission on both username and OTP fields, and auto-focus on the OTP input after
51
+ code delivery.
52
+
5
53
  ## [0.37.0] - 2026-08-14
6
54
 
7
55
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: kryten-webqueue
3
- Version: 0.37.0
3
+ Version: 0.38.0
4
4
  Summary: Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube
5
5
  Author: grobertson
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kryten-webqueue"
3
- version = "0.37.0"
3
+ version = "0.38.0"
4
4
  description = "Netflix/Tubi-style catalog browser and pay-to-play queue management for CyTube"
5
5
  readme = "README.md"
6
6
  license = "MIT"