kryten-webqueue 0.38.2__tar.gz → 0.38.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.
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/CHANGELOG.md +37 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/PKG-INFO +1 -1
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/css/main.css +52 -47
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin.js +12 -8
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/auth/login.html +2 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/pyproject.toml +1 -1
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.github/workflows/gitleaks.yml +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.github/workflows/python-publish.yml +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.github/workflows/release.yml +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.gitignore +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.gitleaks.toml +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/.pre-commit-config.yaml +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/AGENT-WORKFLOW-GUIDE.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/AGENTS.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/README.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/config.example.json +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/deploy/kryten-webqueue.service +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/deploy/nginx-queue.conf +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/IMPLEMENTATION_SPEC.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/IMPL_API_GATE.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/IMPL_ECONOMY.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/IMPL_KRYTEN_PY.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/IMPL_ROBOT.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/Kryten-Economy Service Quality Survey Report at v0.13.0.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/Kryten-Webqueue Service Quality Survey Report at v0.27.1.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/Log for incorrect promo insertion problem.txt +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/PLAN_PRESENCE_AND_PROMOS.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/PRE_PLAN_GAPS.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/PRODUCT_PLAN.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/SPEC-Visual-UX-Sprint-August-2026.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/SPEC_ADMIN_ITEM_EDITOR.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/SPEC_CATALOG_ENRICHMENT_PIPELINE.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/SPEC_EMOTE_REHOST.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/SPEC_JOBS_AND_BROWSE.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/UX_POLISH_PLAN.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/__main__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/api_gate/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/api_gate/client.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/app.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/auth/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/auth/otp.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/auth/rate_limit.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/auth/session.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_catalog.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_connection.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_enrichment.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_feedback.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_people.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_playlists.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_queue.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/db/_watchlist.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/classify.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/normalise.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/pipeline.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/providers.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/report.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/art.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/categories.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/meta.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/sync.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/tags.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/title.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/images.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/mediacms.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/sync.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/config.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/_common.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/enrichmeta.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/enrichtitles.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/enrichtv.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/fetchurls.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/motdposters.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/playedmovies.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/ytpipe/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/ytpipe/downloader.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/fetchurls_auth.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/job_scheduler.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/manager.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/rehost_emotes.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/jobs/tasks.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/logging_config.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/bulk_add.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/fire.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/importer.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/ordering.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/playlists/scheduler.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/promos/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/promos/director.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/completion.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/ordering.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/poller.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/presence.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/race_poller.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/queue/shadow.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_catalog.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_feedback.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_job_schedules.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_jobs.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_moderation.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_playlists.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_promos.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_queue.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_schedules.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/auth.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/catalog.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/feedback.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/pages.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/queue.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/user.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-playlists.js +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-promos.js +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-queue-mgmt.js +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-schedules.js +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/main.js +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/index.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/playlists.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/promos.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/queue_mgmt.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/schedules.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/base.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/browse.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/edit_item_modal.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/item_detail.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/item_not_found.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/feedback/index.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/queue/index.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/race.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/user/dashboard.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/user/my_list.html +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/ws/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/ws/handler.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/ws/manager.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/scripts/AGENTS.md +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/scripts/patch_mediacms_bulk_facets.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/scripts/patch_mediacms_tags.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/scripts/trigger_enrich.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/__init__.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_classify.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_config_persistence.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_feedback.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_fetchurls_sharepoint.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_people_facets.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_phase1.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_phase2_jobs.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_phase3_jobs.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_phase4_live_fixes.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_playlist_import.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_presence_refund.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_promo_director.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_promo_pool_exclusion.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_providers.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_queue_announce.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_race_poller.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_recently_played_hide.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_save_results_to_playlist.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_schedule_lock.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_search_facets.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_title_normalization.py +0 -0
- {kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/tests/test_watchlist.py +0 -0
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.38.4] - 2026-08-15
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **Admin job action buttons now sit in fixed, aligned columns.** The action rail
|
|
10
|
+
is a fixed three-column grid: Run/Begin (col 1), edit-schedule (col 2, empty
|
|
11
|
+
placeholder when no schedule exists), and a toggling add/delete-schedule button
|
|
12
|
+
(col 3). Buttons line up across every row regardless of schedule state. Dropped
|
|
13
|
+
the trailing ellipsis from the "Begin"/"Running" labels for a more uniform look,
|
|
14
|
+
and the delete-schedule button now uses the standard `btn-danger` style instead
|
|
15
|
+
of an inline (and mis-named) color variable.
|
|
16
|
+
|
|
17
|
+
## [0.38.3] - 2026-08-15
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- **Reverted to sans-serif everywhere.** The 0.38.0 serif experiment (Georgia for
|
|
22
|
+
body and headings) was reverted; `--font-body` and `--font-heading` now use the
|
|
23
|
+
same Inter sans stack as the rest of the UI.
|
|
24
|
+
- **Restored the colored light-mode pills.** The 0.38.0 light-mode "contrast"
|
|
25
|
+
overrides that flattened every `.np-chip-*` to solid amber were removed, bringing
|
|
26
|
+
back the mint-green people and peach tag pills in light mode. All pills keep their
|
|
27
|
+
colored translucent styles in both themes.
|
|
28
|
+
- **Pill-shaped badges.** `.qi-badge` and `.job-badge` were rounded from 3px to full
|
|
29
|
+
999px pills to match the catalog/queue chips.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **Login title now centers.** The Channel-Z Unicode title rendered at the default
|
|
34
|
+
h1 size overflowed the 400px auth container (with `white-space: nowrap`), so it
|
|
35
|
+
could not center. It now uses a clamped `font-size` that fits and centers.
|
|
36
|
+
- **Admin jobs list is a real aligned grid.** Previously each row was its own grid,
|
|
37
|
+
so the status/last-run/action columns never lined up. `.jobs-list` is now the
|
|
38
|
+
shared grid and rows use `display: contents`, so buttons and timestamps align in
|
|
39
|
+
columns across every row. Job badges are more visible and the last-run timestamp
|
|
40
|
+
is larger (0.75rem -> 0.9rem).
|
|
41
|
+
|
|
5
42
|
## [0.38.2] - 2026-08-15
|
|
6
43
|
|
|
7
44
|
### Fixed
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
--shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
|
|
22
22
|
--radius: 8px;
|
|
23
23
|
--nav-height: 4rem;
|
|
24
|
-
--font-body:
|
|
25
|
-
--font-heading:
|
|
24
|
+
--font-body: 'Inter', 'Helvetica Neue', 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
|
|
25
|
+
--font-heading: 'Inter', 'Helvetica Neue', 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
|
|
26
26
|
--font-ui: 'Inter', 'Helvetica Neue', 'Segoe UI', -apple-system, BlinkMacSystemFont, Roboto, sans-serif;
|
|
27
27
|
--font-mono: 'Consolas', 'Courier New', monospace;
|
|
28
28
|
}
|
|
@@ -65,35 +65,9 @@
|
|
|
65
65
|
--shadow: 0 4px 12px rgba(60, 40, 0, 0.15);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
/*
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
background: var(--bg-secondary);
|
|
72
|
-
border: 1px solid var(--border);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
:root[data-theme="light"] .np-chip-cat,
|
|
76
|
-
:root[data-theme="light"] .np-chip-tag,
|
|
77
|
-
:root[data-theme="light"] .np-chip-person,
|
|
78
|
-
:root[data-theme="light"] .np-chip-studio {
|
|
79
|
-
background: var(--accent);
|
|
80
|
-
color: var(--accent-text);
|
|
81
|
-
border-color: var(--accent);
|
|
82
|
-
font-weight: 600;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
:root[data-theme="light"] .qi-badge,
|
|
86
|
-
:root[data-theme="light"] .badge-paid {
|
|
87
|
-
background: var(--accent);
|
|
88
|
-
color: var(--accent-text);
|
|
89
|
-
font-weight: 600;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
:root[data-theme="light"] .badge-promo {
|
|
93
|
-
background: var(--warning);
|
|
94
|
-
color: #ffffff;
|
|
95
|
-
font-weight: 600;
|
|
96
|
-
}
|
|
68
|
+
/* Pills, badges, and chips keep their colored styles in both themes
|
|
69
|
+
(mint-green people, peach tags, etc.). Their translucent backgrounds and
|
|
70
|
+
colored borders read correctly on the light cream surfaces too. */
|
|
97
71
|
|
|
98
72
|
* {
|
|
99
73
|
margin: 0;
|
|
@@ -713,7 +687,7 @@ a:hover {
|
|
|
713
687
|
.qi-badge {
|
|
714
688
|
font-size: 0.85rem;
|
|
715
689
|
padding: 0.2rem 0.6rem;
|
|
716
|
-
border-radius:
|
|
690
|
+
border-radius: 999px;
|
|
717
691
|
background: var(--accent);
|
|
718
692
|
color: var(--accent-text);
|
|
719
693
|
}
|
|
@@ -1310,41 +1284,72 @@ a.np-chip {
|
|
|
1310
1284
|
|
|
1311
1285
|
/* Jobs */
|
|
1312
1286
|
.jobs-list {
|
|
1313
|
-
display:
|
|
1314
|
-
|
|
1315
|
-
|
|
1287
|
+
display: grid;
|
|
1288
|
+
grid-template-columns: minmax(0, 1fr) auto auto;
|
|
1289
|
+
align-items: stretch;
|
|
1290
|
+
gap: 0.4rem 1.25rem;
|
|
1316
1291
|
margin-bottom: 1rem;
|
|
1317
1292
|
}
|
|
1293
|
+
/* Each row spreads its three cells across the shared grid so the status,
|
|
1294
|
+
last-run, and action columns line up across every row. */
|
|
1318
1295
|
.job-row {
|
|
1319
|
-
display:
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
align-items: center;
|
|
1323
|
-
padding: 0.5rem 0.75rem;
|
|
1296
|
+
display: contents;
|
|
1297
|
+
}
|
|
1298
|
+
.job-row > * {
|
|
1324
1299
|
background: var(--bg-card);
|
|
1300
|
+
padding: 0.55rem 0.75rem;
|
|
1325
1301
|
border-radius: var(--radius);
|
|
1302
|
+
display: flex;
|
|
1303
|
+
align-items: center;
|
|
1326
1304
|
}
|
|
1327
1305
|
.job-label {
|
|
1328
1306
|
min-width: 0;
|
|
1307
|
+
gap: 0.4rem;
|
|
1329
1308
|
overflow: hidden;
|
|
1330
|
-
|
|
1309
|
+
}
|
|
1310
|
+
/* Fixed three-column button rail so Run / edit-schedule / add-delete line up
|
|
1311
|
+
across every row, whether or not a schedule exists (empty slots hold space). */
|
|
1312
|
+
.job-actions {
|
|
1313
|
+
display: grid;
|
|
1314
|
+
grid-template-columns: 5rem 2.4rem 2.4rem;
|
|
1315
|
+
gap: 0.4rem;
|
|
1316
|
+
justify-content: end;
|
|
1317
|
+
align-items: center;
|
|
1318
|
+
}
|
|
1319
|
+
.job-actions > .btn {
|
|
1320
|
+
width: 100%;
|
|
1321
|
+
padding-left: 0.35rem;
|
|
1322
|
+
padding-right: 0.35rem;
|
|
1323
|
+
text-align: center;
|
|
1331
1324
|
}
|
|
1332
1325
|
.job-badge {
|
|
1333
|
-
font-
|
|
1326
|
+
font-family: var(--font-ui);
|
|
1327
|
+
font-size: 0.8rem;
|
|
1328
|
+
font-weight: 600;
|
|
1334
1329
|
text-transform: uppercase;
|
|
1335
1330
|
letter-spacing: 0.04em;
|
|
1336
|
-
padding: 0.2rem 0.
|
|
1337
|
-
border-radius:
|
|
1338
|
-
background:
|
|
1339
|
-
color: var(--
|
|
1331
|
+
padding: 0.2rem 0.65rem;
|
|
1332
|
+
border-radius: 999px;
|
|
1333
|
+
background: rgba(232, 150, 16, 0.15);
|
|
1334
|
+
color: var(--accent);
|
|
1335
|
+
border: 1px solid var(--accent);
|
|
1340
1336
|
white-space: nowrap;
|
|
1341
1337
|
}
|
|
1342
1338
|
.job-last-run {
|
|
1343
|
-
font-size: 0.
|
|
1339
|
+
font-size: 0.9rem;
|
|
1344
1340
|
color: var(--text-secondary);
|
|
1345
1341
|
white-space: nowrap;
|
|
1346
1342
|
font-variant-numeric: tabular-nums;
|
|
1347
1343
|
}
|
|
1344
|
+
@media (max-width: 640px) {
|
|
1345
|
+
.jobs-list {
|
|
1346
|
+
grid-template-columns: 1fr;
|
|
1347
|
+
gap: 0.25rem;
|
|
1348
|
+
}
|
|
1349
|
+
.job-row > .job-actions {
|
|
1350
|
+
justify-content: start;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1348
1353
|
/* Job Run parameter modal */
|
|
1349
1354
|
.job-params {
|
|
1350
1355
|
display: flex;
|
|
@@ -262,19 +262,23 @@ async function loadJobs() {
|
|
|
262
262
|
const schedBadge = sched
|
|
263
263
|
? ` <span class="job-badge" title="${escapeHtml(sched.cron_expression || '')}">${sched.is_active ? 'scheduled' : 'paused'}</span>`
|
|
264
264
|
: '';
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
: ''
|
|
265
|
+
// Column 2: edit an existing schedule. When none exists this is an
|
|
266
|
+
// empty placeholder so the add/delete toggle stays anchored in column 3.
|
|
267
|
+
const schedEditBtn = sched
|
|
268
|
+
? `<button class="btn btn-sm" onclick="openScheduleModal('${j.name}')" title="Edit schedule">${sched.is_active ? '\u23f0' : '\u23f8'}</button>`
|
|
269
|
+
: '<span class="job-action-empty"></span>';
|
|
270
|
+
// Column 3: toggles between "add schedule" (none) and "delete schedule".
|
|
271
|
+
const schedToggleBtn = sched
|
|
272
|
+
? `<button class="btn btn-sm btn-danger" onclick="removeJobSchedule('${j.name}')" title="Delete schedule">\u00d7</button>`
|
|
273
|
+
: `<button class="btn btn-sm" onclick="openScheduleModal('${j.name}')" title="Add schedule">\u2295</button>`;
|
|
269
274
|
return `
|
|
270
275
|
<div class="job-row">
|
|
271
276
|
<span class="job-label">${escapeHtml(j.label)}${hasParams ? ' <span class="job-badge">params</span>' : ''}${schedBadge}</span>
|
|
272
277
|
${summary}
|
|
273
278
|
<div class="job-actions">
|
|
274
|
-
<button class="btn btn-sm" onclick="startJob('${j.name}')" ${j.running ? 'disabled' : ''}>
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
${schedEditBtn}${schedDelBtn}
|
|
279
|
+
<button class="btn btn-sm" onclick="startJob('${j.name}')" ${j.running ? 'disabled' : ''}>${j.running ? 'Running' : (hasParams ? 'Begin' : 'Run')}</button>
|
|
280
|
+
${schedEditBtn}
|
|
281
|
+
${schedToggleBtn}
|
|
278
282
|
</div>
|
|
279
283
|
</div>`;
|
|
280
284
|
}).join('')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/docs/Log for incorrect promo insertion problem.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/classify.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/normalise.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/pipeline.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/providers.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/report.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/art.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/meta.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/sync.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/tags.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/catalog/enrichment/steps/title.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/_common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/enrichtv.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/cmsutils/fetchurls.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/ytpipe/__init__.py
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/integrations/ytpipe/downloader.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_job_schedules.py
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/routes/admin_moderation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-playlists.js
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-queue-mgmt.js
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/static/js/admin-schedules.js
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/playlists.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/promos.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/queue_mgmt.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/admin/schedules.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/browse.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/catalog/item_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/feedback/index.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/queue/index.html
RENAMED
|
File without changes
|
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/user/dashboard.html
RENAMED
|
File without changes
|
{kryten_webqueue-0.38.2 → kryten_webqueue-0.38.4}/kryten_webqueue/templates/user/my_list.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|