- v1.4.0 Changelog
- feat: (ultimate library) add Run on Cache Hit toggle
- feat: (ultimate library) delete nzbdav processing history when deleting from webdav
- fix: (sort) deprioritized packs stay at bottom and season-pack grouping wins over library tier
- fix: (library) re-validate inLibrary on cache hit so deleted files lose the 📚 icon
- fix: (indexers) test searches respect per-indexer proxy toggle
- fix: (filters) apply dead NZB filter to deprioritized season packs
- fix: (filters) log each filtered dead NZB title with scissors emoji
- fix: (library) support many results in delete-all tile
- fix: (streams) support Skip Ultimate Library tile placement when UF is disabled
- fix: (title-match) reject sequel-number tails unless they match release year
- fix: (ui) dim entire Health Checks overlay when disabled
- fix: (health-checks) gate auto-queue when UF resolves on search to avoid concurrent submits
- fix: (nzbdb) decouple cache key pattern from file picker, pack-wide on first-fail
- fix: (nzbdb) close .nzb& vs .nzb? URL drift in cache lookups
- fix: (nzbdb) strip chain-aware episode regex from cached titles
- chore: (nzbdav) drop test-connection request debug logs
- feat: (ui) add Ko-fi support link to install tab
- fix: (search) honor per-indexer text opt-out in newznab orchestrator
- fix: (search) gate TV text fallbacks and series-pack queries on opt-out
- fix: (search) honor per-indexer text opt-out in Prowlarr/NZBHydra movie path
- style: (ui) unify pack naming, document Season Pack Sxx query
- style: (ui) fix NzbDAV capitalization, drop "(Hosted)" from streaming selector
- perf: (ui) cut dashboard resource draw via static panels and per-tile icon chips
- feat: (filters) max series/season packs cap + prefer library results toggle
- feat: (library) match alias/date files via alias + date pattern
- refactor: (search) restore parallel alt-title via tvdb native title under force-english
- feat: (easynews) list filtered-out releases, unify filter icon to 📦
- refactor: (search) drop orchestration summaries, scope easynews filter logs to sub-buffers
- feat: (search) Newznab alias/absolute/alt-title fallbacks render in per-indexer cluster + magnifying glass consistency
- style: (easynews) use search icon on absolute fallback query log
- fix: (prowlarr,hydra) text query no longer fires against id-only indexers
- refactor: (search) unify pagination helpers, log prefixes, parallel batching
- fix: (alias) date-aware two-pass filter
- fix: (remake) log on cache hit and include detected years
- feat: (easynews) structured per-task logging + alias fallback
- feat: (search) Prowlarr+NZBHydra parity with Newznab+EasyNews
- fix: (library) reject wrong-season multi-episode files in scan
- refactor: (ui) pagination uses +/- steppers instead of number inputs
- refactor: (search) orchestrator parallelizes newznab methods and buffers per-indexer logs
- refactor: (search) Series Packs in searchers, parallelize searches, drop id fallbacks
- feat: (logs) labeled sections for each phase of the search flow
- feat: (logs) add per-task buffered logging module
- feat: (search) within-indexer content dedup catches multi-method dupes
- feat: (search) add Series Packs for multi-season and keyword-only releases
- refactor: (ui) rename Ultimate Library skip-tile position label "Top" to "First"
- feat: (ultimate library) per-type apply toggles for movies and tv
- fix: (uf tile) library probe before failure video when session is gone
- refactor: (t param) unify all tile URLs to single base64url-JSON envelope
- fix: (ios) carry self-redirect counters inside t= envelope
- fix: (alias fallback) verify air date is present in result title
- fix: (ios) pack UF tile URL into single t= envelope
- feat: (search) zero-result alias fallback retries with TVDB substring aliases
- fix: (remake detection) Anime: translate tvdb title and episode name to english for remake filter
- feat: (ui) amber toggle accent inside ultimate library card
- feat: (dashboard) amber treatment on index manager tile when ultimate library is on
- fix: (ios) pack library-delete tile URLs into single t= param
- feat: (Ultimate Library) WebDAV delete tiles + skip-tile position
- fix: (uf) throttle "Lobby: cached resolve served" log to once per 15s
- fix: (uf) recognize /content/uncategorized library hits via libraryVideoPath
- fix: (dead-nzb) episode-specific entries no longer trigger as URL-wide bans
- fix: (season/series packs) recognize dotted-range titles (S01.S08) so middle-season searches match the pack
- feat: (sel) implement rseMatched() for cross-rule SEL composition
- feat: (rules) live test derives seasonPack from title + clarifies title-only scope
- feat: (sel) add bitrate() and seasonPack() filter functions
- fix: (sel) size() now actually parses K/M/G/T suffix strings as the docstring promised
- fix: (title matcher) widen edition strip to cover Theatrical Cut, Director's Cut variants, DC, DirCut
- fix: (junk filter) allow trailing punctuation after archive-part suffix
- fix: (filters) whitelist H.26x codec numerals from junk-filter bare-3-digit match
- refactor: (ui) Baseline Filters section header + card-in-card Junk Filter
- fix: (filters) move seScore one slot later (after videoTag, not after quality)
- chore: (ui) drop TVDB API Key description copy
- refactor: (migrations) preserve upgrader priority customizations + match NZB Fallback chain via uf-lobby
- feat: (filters) default seScore between quality and size in sortOrder
- feat: (UTS) Always Resolve TVDB Title in English toggle + auto cache clear
- chore: (nzbdav) drop /v MIME override: unnecessary
- fix: (Ultimate Library) multi-season packs: skip wrong-season subdirs during recursion so per-season subfolders don't return the first season's same-numbered episode
- feat: (Ultimate Library) opt-in toggle to scan /content/uncategorized for manual NZBDav uploads
- fix: (Ultimate Library) Individual stream tiles survive Infuse iOS truncation
- chore: (assets) regenerate nzb_failure_video.mp4 for crystal-clear playback from frame 0
- feat: (Ultimate Library) Skip Ultimate Library bypass tile + escape flow
- fix: (Ultimate Library) season packs: tighten range regex so non-range markers like . stop matching as ranges
- fix: (Ultimate Library) Season pack extracted episode filtering, short-circuit fire after filtering pre-check
- feat: (filters) add Prefer Season Packs toggle (TV + Global)
- feat: (uf) add Lite preset - Enhanced behavior with reduced parallelism (2 candidates / 1 backup processed)
- feat: (Ultimate Library) pre-search WebDAV scan short-circuits indexer queries
- fix: (server) include X-Forwarded-Port in dynamic base URL so reverse proxies on non-standard HTTPS ports get correct URLs
- refactor: (nzbdav) consolidate job cancel into outer catch to drop duplicate logs
- fix: (uf) cancelled candidates no longer block parked library hits in priority mode
- refactor: (ui) move Baseline Junk Filter from IndexManager to Filters overlay
- fix: (pwa) push history sentinel on layer-open, not in popstate handler
- feat: (uf) move grab estimate to its own card, visible regardless of backup config and add a resource hint to the presets
- style: (uf) presets renamed to Classic / Enhanced, reordered, cleaner press feedback
- fix: (uf) midstream fallback substitutes backup when primary throws
- feat: (ui) confirmation modal warning when enabling Direct streaming mode
- revert: (nzbdav) drop flat-file fallback in findVideoFile (0f5e15e). The report was a user error.
- feat: (uf) wait-time steppers accept 0 for infinite NZBDav wait
- feat: (uf) free library backups always exceed desiredBackups target
- fix: (search) invalidate cached TVDB token on API key change
- fix: (filters) seScore sort position no longer snaps back on reload
- feat: (search) anime synthetic-title path uses TVDB direct lookup
- feat: (search) TVDB-first absolute episode lookup with TVDB cumulative fallback
- refactor: (nzbdav) default unknown-ext MIME to MKV
- feat: (cache) Clear Search Cache also drops resolved UF sessions
- feat: (uf) priority mode gates library hits behind in-flight candidates
- refactor: (nzbdav) library check is the single source of truth
- fix: (uf) persist UF sessions + fallback groups across addon restarts
- feat: (search) parallel alt-title search toggle for UTS
- feat: (search) absolute-episode numbering fallback for series UTS
- style: (filters) lift card titles for Baseline + Display library
- docs: (uf) overlay polish
- feat: (filters) default regexScore above seScore in sort order
- feat: (rules) drag-and-drop, batch select/delete, clearer cards
- docs: (uf) Health Checking description as 2 bullets
- fix: (uf) episode-specific dead NZBs no longer ban whole season pack
- fix: (logs) silence "timeout updated" spam on overlay open
- feat: (search) per-indexer timeout default 30s → 15s
- feat: (search) default displayLibraryInResults to true
- feat: (uf) presets card with Recommended + Legacy NZB Fallback
- feat: (uf) shift defaults to minimal opt-in baseline
- style: (uf) overlay copy + section reordering
- fix: (uf) UF tile click bypassed by stream-dedup cache
- refactor: rebrand Ultimate Resolve → Ultimate Fallback
- feat: (ur) allow standalone Health Checks to coexist with UR
- refactor: (ur) remove NZB Fallback feature; auto-migrate to UR
- feat: (ur) primary attempt limit + initial-pool cap honor
- feat: (ur) optional Health Checking phase with explanatory toggle
- feat: (cache) opt-out toggle for caching 0-result search responses
- feat: (db) persist indexer + size on dead-NZB entries; show in UI
- style: (ui) extract Anime settings into its own sibling card
- feat: (ui) Baseline Junk Filter — own card + on/off toggle (default on)
- fix: (ur) summary shows actual container in skipped (X ≠ MKV) instead of "unknown"
- fix: (ur) pull replacements on pool drain so library-primary doesn't end pipeline early
- feat: (search) display library in results — mark library-resident NZBs with 📚
- feat: (filter-rules) regex rules support keep/drop modes (filter the result pool)
- fix: (stream-handler) dedup cache hit when fallback resolves a different candidate
- feat: (ur) add When to Resolve and On Individual Stream Failure settings
- fix: (ur) BPL caps post-primary grabs only; pre-primary refills are free
- chore: (ur) overlay copy cleanup + nest Backup Processing Limit under Desired Backups
- fix: (ur) render nzbdav-failed candidates as ❌ in summary, not 💚 standby
- fix: (ur) skip post-primary grabs when desiredBackups=0; keep free library backups
- feat: (ur) allow candidateCount=1 for sequential single-NZB processing
- feat: (ur) force archive header inspection always-on
- feat: (nzbdav) default streaming method to dual-stage proxy
- feat: (ur) iterate full fallback group when UR-vetted backups are exhausted
- fix: (nzbdav) drop player Range on candidate-file switch via _norange
- fix: (nzbdav) recover from WebDAV 416 by retrying without Range
- fix: (nzbdav) sendFailureVideo 416 on out-of-range Range requests
- fix: (ur) preserve resolved sessions across config-change cancellations
- chore: (ur) UR-tile failure log distinguishes session states
- fix: (nzbdav) t-param URL survives fallback group expiry
- fix: (nzbdav) walk full candidate chain on tile click when UR is disabled
- fix: (nzbdav) flat-file fallback in findVideoFile when directory PROPFIND 404s
- chore: (ur) raise default backup processing limit 2 → 3
- style: (ur) tile layout - brand in name, mode + desc as bulleted title
- fix: (config) filter-save silent 413 on rule-heavy payloads
- feat: iOS external-player compat (Fusion → Infuse)
- feat: per-indexer search timeouts with UI stepper + retry suppression
- style: (ur) drop ending of description
- fix: (nzbdb) strip chain-aware episode suffix from cached titles
- perf: (webdav)socket hygiene for long streams (FIFO + TCP keepalive + shorter idle)
- feat: library pool gating + session-held backup streams + grab hygiene + size logs
- fix: (defaults) flip sortOrder pin to seScore, demote DCP above WEBCap
- feat: Rules section UI in Filters overlay
- feat: UI types + defaults for ranked rules
- feat: backend defaults + migrations for ranked rules
- feat: wire ranked rules into pipeline
- feat: Rules import + preview + validation API
- feat: Stream Expression Language + rank engine
- feat: metadata parser accuracy
- refactor: split resultProcessor.ts into dedup / filters / sort / limits modules - pure code motion, no logic changes, sets up the rules engine landing in a later PR
- feat: VVC / h.266 codec - encode filter entry with top-priority default and migration for existing configs
- feat: baseline junk filter - strip bare archive parts (par2/nzb/rar/r01-r99/001-999) from results before parsing, with Index Manager transparency card
- feat: smartMinHealthy setting for smart health checks - configurable stop threshold (default 1) with Batch Size dropdown expanded to 1-6
- style: Index Manager overlay - extract Season Packs and Results Deduplication into their own cards
- style: ProviderManager polish - pill toggles, accent Add button, portaled delete dialog
- feat: UR overlay overhaul - remove maxCandidates, update defaults, normalize toggles
- feat: show NZB Backup count on Ultimate Resolve dashboard tile
- feat: Stream Buffer slider in Ultimate Resolve overlay
- refactor: strip vestigial nzbdavLibraryCheckEnabled setting
- feat: three-mode streaming (pipe/proxy/direct) with delivery hardening
- feat: per-mode Stream Wait Times for Ultimate Resolve
- style: wrap Max Streams filters in a titled inner box
- feat: move Remake Detection and Multi-Episode Files to Filters overlay
- fix: prevent UR from shadowing specific dead-NZB errors with generic ones
- fix: attach no-op catch to Ultimate-Resolve session promise
- feat: Ultimate Resolve tile + per-tile fallback routing
- feat: Ultimate Resolve backup pre-caching with container-matched failover
- feat: Container type detection + multi-provider archive inspection
- feat: 7z parser - AES-256 decryption, LZMA2 support, tail-based header recovery
- fix: Auto-queue dedup and serialization to prevent NZBDav 500 errors
- fix: Health checks overlay - fixed connection count display to show batchSize × poolProviders (was showing batchSize only)
- feat: Ultimate Resolve - 5-layer parallel NZB resolution pipeline
- feat: Auto-Resolve Backup with priority queue grab chain
- feat: Context-aware file size filter labels for movie/TV/global tabs
- Add PDF Changelog