Release ani-cli-web 0.26.0
This commit is contained in:
+100
@@ -1,5 +1,105 @@
|
||||
# Changelog
|
||||
|
||||
## 0.26.0 - 2026-05-15
|
||||
|
||||
- Made controlled runtime shutdown stricter by canceling active download workers during blocking teardown paths such as app exit and runtime reset, reducing the chance of orphaned background work outliving the server.
|
||||
- Hardened watchlist thumbnail warm-up batches so shows removed mid-request are skipped cleanly instead of bubbling a stale lookup back as a route error.
|
||||
- Added shared serial browser polling helpers and switched the Search and Watchlist pages to use them, preventing overlapping queue and watchlist poll requests from stacking up when the server responds slowly.
|
||||
- Improved background refresh diagnostics by logging per-show worker failures and preserving the last bulk-refresh item error in refresh-job state.
|
||||
- Expanded regression coverage for deterministic download-queue shutdown, removed-entry thumbnail warm-up handling, shutdown-on-exit behavior, and shared serial polling usage in page templates.
|
||||
|
||||
## 0.25.0 - 2026-05-15
|
||||
|
||||
- Stopped the watchlist page from repeatedly rewarming the same unresolved thumbnails during silent queued-refresh polling by caching per-show warm-up attempts in the browser until thumbnail state changes.
|
||||
- Made background `Refresh All` lighter and faster by skipping inline thumbnail downloads during bulk refreshes and refreshing multiple watchlist shows in parallel.
|
||||
- Taught per-show refreshes to bail out quietly when a show disappears mid-refresh, avoiding stale watchlist writes and extra thumbnail work after removal.
|
||||
- Woke waiting thumbnail resolvers immediately when a show is removed, so stale in-flight cover waits no longer sit on the timeout path.
|
||||
- Expanded regression coverage for thumbnail warm-up deduplication, bulk refresh thumbnail skipping, thumbnail wait cleanup, and removed-entry handling during background refresh jobs.
|
||||
|
||||
## 0.24.0 - 2026-05-15
|
||||
|
||||
- Moved single-item watchlist refresh requests onto the existing per-show background refresh queue instead of doing episode, AnimeSchedule, and thumbnail work synchronously in the request handler.
|
||||
- Added queued-item counts to watchlist listing responses and taught the watchlist page to silently refresh itself while queued per-show refresh work is still draining.
|
||||
- Cleared removed shows out of the in-memory per-show refresh queue and in-flight tracking sets so deleted entries no longer consume stale queued refresh work.
|
||||
- Expanded regression coverage for queued watchlist counts, queued single-item refreshes, queued refresh removal cleanup, and watchlist-page queued polling behavior.
|
||||
|
||||
## 0.23.0 - 2026-05-15
|
||||
|
||||
- Fixed the per-show watchlist refresh queue so a show already being refreshed is no longer re-enqueued while its refresh is still in flight.
|
||||
- Added regression coverage for in-flight watchlist refresh deduplication and cleanup of the in-flight marker after refresh completion.
|
||||
|
||||
## 0.22.0 - 2026-05-15
|
||||
|
||||
- Added explicit runtime shutdown and reset hooks so shared globals and background workers can be torn down cleanly between in-process runs and tests.
|
||||
- Fixed deferred worker startup to keep respecting `ANI_CLI_WEB_DISABLE_WORKER`, preventing runtime-backed handler calls from silently enabling background workers in worker-disabled environments.
|
||||
- Split download-queue persistence into structured SQLite columns plus a separate log column, leaving JSON payload storage only for extra fields instead of rewriting the whole job record on routine state changes.
|
||||
- Reduced server-side exception noise by only printing full tracebacks in debug mode.
|
||||
- Centralized the shared browser `api()` fetch helper used by the Search, Config, and Watchlist pages.
|
||||
- Expanded regression coverage for runtime reset, worker-disable behavior, structured queue persistence, and the quieter exception path.
|
||||
|
||||
## 0.21.0 - 2026-05-15
|
||||
|
||||
- Persisted the per-show watchlist refresh queue across restarts by rebuilding pending refresh work from watchlist rows still marked `queued` during runtime startup.
|
||||
- Preserved queued refresh ordering during restart recovery so older queued watchlist items resume before newer ones.
|
||||
- Added regression coverage for queued watchlist refresh restoration after restart.
|
||||
|
||||
## 0.20.0 - 2026-05-15
|
||||
|
||||
- Replaced the HTTP handler's old mutable string-key service locator with an explicit configured handler context, making route dependencies clearer and surfacing wiring issues at startup time instead of during later requests.
|
||||
- Moved watchlist add and successful-download sync off the hot request path by queueing per-show background refresh work instead of doing episode, AnimeSchedule, and thumbnail fetches synchronously before the request returns.
|
||||
- Ensured runtime-backed HTTP requests start background workers when allowed, while still respecting `ANI_CLI_WEB_DISABLE_WORKER` in tests and intentionally worker-free runs.
|
||||
- Expanded regression coverage for the new non-blocking watchlist add/download-sync flow.
|
||||
|
||||
## 0.19.0 - 2026-05-15
|
||||
|
||||
- Guarded Search-page queue polling against stale out-of-order responses so an older refresh result no longer overwrites a newer queue state.
|
||||
- Added `get_cached_anidb_titles()` and switched AniDB lookup to reuse the cached parsed title list directly instead of rebuilding a duplicate list on every fallback lookup.
|
||||
- Expanded regression coverage for the queue freshness guard and AniDB cache reuse path.
|
||||
|
||||
## 0.18.0 - 2026-05-15
|
||||
|
||||
- Removed the eager runtime bootstrap from `main()`, so server startup no longer forces migrations, DB setup, worker startup, and config writes before the first runtime-backed request.
|
||||
- Batched queue log persistence so running downloads no longer rewrite the entire job payload into SQLite on every single output line.
|
||||
- Added regression coverage for lazy startup and queue log batching.
|
||||
|
||||
## 0.17.0 - 2026-05-15
|
||||
|
||||
- Tightened the remote-access guard so loopback reverse-proxy traffic with forwarded external client IPs no longer bypasses the non-local token requirement.
|
||||
- Stopped mutating the shared runtime config dict in place; queue creation now reads a stable config snapshot and config saves replace the runtime config atomically.
|
||||
- Reduced cheap-route startup overhead by serving page shells, `/api/version`, `/api/dependencies`, and `/api/config` without forcing a full runtime bootstrap first.
|
||||
- Added request-order guards on the Search and Watchlist pages so slower stale responses no longer overwrite newer searches, result selections, or category/page switches.
|
||||
- Added AniDB title lookup caching and indexed candidate narrowing, while preserving a full-scan fallback when narrowed candidates miss.
|
||||
- Expanded regression coverage for forwarded-client access checks and config snapshot behavior.
|
||||
|
||||
## 0.16.0 - 2026-05-15
|
||||
|
||||
- Hardened non-local access so `ANI_CLI_WEB_ALLOW_REMOTE=1` now also requires `ANI_CLI_WEB_REMOTE_TOKEN`, accepted through `Authorization: Bearer ...` or `X-AniCli-Web-Token`, before remote clients can use the web UI or JSON APIs.
|
||||
- Removed import-time state migration side effects from `app_support.py`; legacy state migration now runs during runtime bootstrap instead of plain module import.
|
||||
- Narrowed watchlist persistence updates so refreshes, category changes, and download-sync writes stop rewriting the full row and are less likely to clobber unrelated fields.
|
||||
- Resolve missing queue `show_id` values when jobs are queued, making completed-download watchlist sync stable even if upstream search ordering changes later.
|
||||
- Continued the backend split by moving queue workers into `queue_jobs.py`, HTTP routing into `http_handler.py`, and page bodies into `search_page.py`, `config_page.py`, and `watchlist_page.py`, while keeping `app.py` and `web_templates.py` as stable aggregation entrypoints.
|
||||
- Hardened the shared frontend `api()` helpers so page scripts handle non-JSON error responses more gracefully and only send JSON content headers when a request body is present.
|
||||
- Expanded regression coverage for the new remote token gate and queue identity enrichment path.
|
||||
|
||||
## 0.15.0 - 2026-05-15
|
||||
|
||||
- Started the backend/module split by moving shared runtime, state-path, config, and queue/file helper logic out of `app.py` into `app_support.py`.
|
||||
- Split shared page-shell helpers out of `web_templates.py` into `template_helpers.py`, so page templates no longer carry their own navigation/branding helpers inline.
|
||||
- Kept `app.py` and `web_templates.py` as stable aggregation points so the current tests and imports continue to work while the rest of the modularization can happen in smaller follow-up steps.
|
||||
|
||||
## 0.14.0 - 2026-05-15
|
||||
|
||||
- Added watchlist categories with separate `Watching`, `Planned`, `Finished`, and `Dropped` tabs, category-aware add forms, and in-card category editing for existing entries.
|
||||
- Migrated existing watchlist rows into the `Watching` category by default so older tracked shows keep working without manual cleanup.
|
||||
- Added finished-state check badges: finished anime that were downloaded now show a green check, while anime moved into `Finished` manually show a gray check.
|
||||
- Automatically sync successful downloads into the watchlist by flagging tracked shows as downloaded and creating a new `Finished` entry when the show was not already tracked.
|
||||
|
||||
## 0.13.0 - 2026-05-15
|
||||
|
||||
- Added AnimeSchedule-backed watchlist metadata refresh so tracked shows now store the expected total episode count and upstream airing status alongside the live AllAnime sub and dub availability counts.
|
||||
- Marked watchlist episode pills with `current / total` progress when the total is known, and highlight `Sub` or `Dub` in green when that release track has fully finished airing and is ready for download.
|
||||
- Added compact watchlist status tags such as `Finished`, `Sub ready`, and `Dub ready`, plus regression coverage for the new completion-state persistence and messaging.
|
||||
|
||||
## 0.12.0 - 2026-05-13
|
||||
|
||||
- Deferred runtime initialization until the server starts or a runtime-backed API/helper is first used, removing the earlier worker/thread startup and state writes from plain module import.
|
||||
|
||||
Reference in New Issue
Block a user