Skip to content

v2.13.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 05:41
· 321 commits to main since this release
527906d

Bug Fixes

  • ci: put every unpublished version's notes in the GitHub release body
  • ui: image sizing
  • ui: stat card icon spacing
  • ui: stop What's New from listing a breaking change twice

2.13.1 (2026-10-20)

2.13.0 (2026-10-19)

Features

  • db-fleet: store the client URL path as an encrypted credential (thanks @vasilvestre)
  • trackers: add TR4KER and its platform adapter (thanks @vasilvestre)
  • trackers: name bonus points the way each tracker does (thanks @Avamander)

Bug Fixes

  • backups: match restored trackers to the registry before polling restarts
  • ci: keep knip, security-audit and tracker-validation working on fork pull requests (#224)
  • db-fleet: size the qBittorrent response cap to the largest library the sync store holds
  • trackers: check a pasted API token for characters a request header cannot carry
  • trackers: leave an unparseable AvistaZ date unset instead of writing Invalid Date
  • trackers: list skipped debug calls and let a cached user id drive the second one
  • trackers: name a Cloudflare challenge on the card instead of reading it as Poll failed
  • trackers: name an off-site or looping redirect on the card instead of Poll failed
  • trackers: read a non-JSON 200 as an unexpected response instead of a raw parser error
  • trackers: read petabyte byte totals instead of failing the poll
  • trackers: run the poll's own checks in the debug view and keep the body under its error
  • trackers: show the body BTN and Nebulance actually sent in the debug view
  • trackers: stop reading a TorrentLeech login 429, 5xx or Cloudflare page as bad credentials
  • trackers: stop sanitizing scraper status errors twice, which turned each one into Poll failed
  • trackers: store an absent user class as null instead of a made-up label
  • trackers: store an infinite Hawke ratio when nothing has been downloaded
  • trackers: store the Nebulance ratio unrounded so a minimum check sees the real figure
  • trackers: word unreadable scraper pages so the card reads them as an unexpected response
  • trackers: write Gazelle meta on every poll so a failed profile call cannot leave stale ranks
  • user-proxy: arm the deadline after the request exists so a refused header leaves no timer
  • user-proxy: decode a compressed response on the proxied path (thanks @Ian-Costa18)

2.12.1 (2026-10-16)

MyAnonamouse seeding and leeching counts read 0 from about 2026-09-23 until this release, after MAM moved those figures in its API response. This release reads the new location; the zeros already recorded for that period stay in the charts. The Mousehole card now needs Mousehole v0.5.0 or newer with MOUSEHOLE_AUTH_TOKEN set, and the token entered in the MAM tracker's settings.

⚠ BREAKING CHANGES

  • trackers: require Mousehole v0.5.0 or newer and its own API token

Features

  • dashboard: add a Hit & Runs card to the Ecosystem section
  • dashboard: add a Ranks section with a class stack per tracker
  • trackers: add DreadVault (thanks @thund3rcracker)
  • trackers: add InfinityHD and RocketHD (thanks @mwallace02-dev)
  • trackers: add Retro Movies Club and refresh OldToons (thanks @LocalBoomer)
  • trackers: add SeedCore (thanks @thund3rcracker and @vasilvestre)
  • trackers: add the retrotoon adapter
  • trackers: backfill the registry slug once at startup and carry it through backup restore
  • trackers: mark which registry classes sit outside the earned ladder
  • trackers: record each tracker's registry entry by slug and stop deriving it from the URL
  • trackers: rewrite the Redacted class ladder from the site wiki

Bug Fixes

  • api: store base URLs without a trailing slash and drop a vestigial debug log
  • backups: restore each row the way it was saved
  • backups: restore the seven tracker and snapshot columns the inserts never named
  • charts: render percentile ranks with the correct ordinal suffix
  • ci: make lint errors block, mirror the ladder rules into the validator and pin the audit checks
  • ci: silence dotenv in the playwright config
  • dashboard: give each rank stack one tooltip and a spoken class name
  • dashboard: keep an infinite-ratio account from voiding the fleet ratio change
  • dashboard: stop offering an older release as an update
  • db-fleet: cap every qBittorrent read, carry the deadline into login and fix the sync store cap
  • db-fleet: the qBittorrent transport no longer copies a header-validation TypeError
  • scheduler: bound a proxied request and the poll cycle so a stalled proxy cannot stop polling
  • security: bumped next and sharp
  • security: bumped next and sharp again
  • security: cancel a download client request when its deadline passes
  • security: close the audit blind spot that left download-clients unscanned
  • security: forbid framing with frame-ancestors as well as X-Frame-Options (thanks @Ian-Costa18)
  • security: keep undici's header-validation message out of tracker errors and logs
  • security: reject control characters in a pasted cookie header
  • security: reject every control character in DigitalCore's uid and pass cookies
  • security: remove a dead public route prefix
  • security: require a real character class in the cookie injection guard check
  • security: stop leaking API tokens through the auth probe and the debug view
  • security: stop the connection test passing on a credential it never sent
  • security: stop the qBittorrent login following a redirect that replays the password
  • security: validate the MAM session cookie like every other pasted cookie
  • security: validate what the download client host sends before it reaches the store
  • sidebar: vertically centre the infinite-ratio sign
  • tracker-adapters: derive the GGn ratio when the reported one will not parse
  • tracker-adapters: make fetchRaw and error classification match what fetchStats does
  • tracker-adapters: make the error wording an interface rather than prose
  • tracker-adapters: parse every bonus figure through the shared count helper
  • tracker-adapters: parse the binary byte units the shared helper silently dropped
  • tracker-adapters: refuse a blank BTN byte total instead of recording it as zero
  • tracker-adapters: refuse a byte total a scraper could not read instead of storing zero
  • tracker-adapters: refuse a byte total the API omitted instead of recording it as zero
  • tracker-adapters: report a figure UNIT3D omits as unknown rather than zero
  • tracker-adapters: report an absent count as unknown instead of zero
  • tracker-adapters: stop a DigitalCore maintenance page reading as invalid credentials
  • tracker-adapters: stop adapters asserting what the tracker never reported
  • tracker-adapters: surface failed fetches and bad credentials instead of healthy data
  • tracker-adapters: tell an absent figure apart from a measured zero
  • trackers: check pasted credentials evenly and match the registry entry by hostname
  • trackers: correct the session cache, permission flags and platformMeta clearing
  • trackers: dim classes outside the ladder and read a missing hit & run count as unknown
  • trackers: fail a RetroToon poll on a dead session and list its awarded ranks above the ladder
  • trackers: keep a bare join date on the day the tracker reported it
  • trackers: move the Mousehole integration to its current API
  • trackers: order rank changes by rung, not list position (thanks @Avamander)
  • trackers: read MAM snatch counts from snatch_summary (thanks @Avamander)
  • trackers: remove the URL edit from the settings sheet and the PATCH route
  • trackers: require Mousehole v0.5.0 or newer and its own API token
  • trackers: stop prefixing "Profile" to the IPTorrents username (thanks @Ian-Costa18)
  • trackers: store an infinite GGn ratio when nothing has been downloaded (thanks @Avamander)
  • trackers: test the base URL the save will store
  • ui: label the tracker settings credential section Credentials instead of API Key
  • webhooks: persist the download disabled notification toggle

Refactoring

  • tracker-adapters: build each request once and take the auth spelling from the registry
  • tracker-adapters: derive the TorrentLeech session key with scrypt
  • tracker-adapters: enforce the adapter rules in the types and one shared test
  • tracker-adapters: enforce the source-text rules and fix what they flagged
  • tracker-adapters: extract FileList's text helpers into a shared module
  • tracker-adapters: keep the adapters folder holding only adapters
  • tracker-adapters: key the session retry on an error type instead of its message
  • tracker-adapters: move the shared helpers into their own folder
  • tracker-adapters: promote one count parser and retire the four private ones
  • trackers: move the platform vocabulary into the data layer
  • trackers: move the poll-result types out of the adapter module
  • trackers: put the cookie-header validator in the credentials module
  • ui: drop the group role from the stat tile
  • ui: move the Add Tracker credential fields onto a per-platform table
  • ui: move the tracker settings credential fields onto the shared table

2.11.0 (2026-08-31)

Features

  • tracker-adapters: store an optional browser User-Agent for DigitalCore
  • trackers: add an API key expiry card
  • trackers: add filelist platform groundwork
  • trackers: add the filelist adapter
  • trackers: add the TorrentLeech logo
  • trackers: judge tracker health against each tracker's required ratio
  • trackers: let a tracker state an either/or seeding requirement
  • trackers: support TorrentLeech's Alt 2FA Token

Bug Fixes

  • api: send a User-Agent when proxying avatar fetches
  • ci: deploy hangs
  • ci: healthcheck now probes 127.0.0.1 instead of localhost
  • ci: make the security test count check able to fail
  • dashboard: exclude the cross-seed sentinel from category ratio averages
  • dashboard: respect the retention choice after the first-run prompt
  • dashboard: update the retention banner the moment the prompt is answered
  • db-fleet: coerce a missing qBittorrent seeding time to zero
  • db-fleet: drop garbage numerics from qBittorrent delta updates
  • db-fleet: log dropped delta fields at debug
  • security: drop vulnerable Go binaries from the runtime image
  • tracker-adapters: pass the shared timeout through the proxy path
  • tracker-adapters: simplify DigitalCore userAgent validation and cover both writers
  • trackers: correct six wrong figures in the TorrentLeech profile parser
  • trackers: count only the stated routes when combining satisfaction
  • trackers: owe the full requirement when seed time is unreadable
  • trackers: send the TorrentLeech login through the configured proxy
  • trackers: stop trusting TorrentLeech's cookies on a refused login
  • trackers: surface UNIT3D shape errors instead of a trim crash (#214)
  • trackers: tighten the TorrentLeech login and error reporting
  • trackers: treat a non-finite seed time as no progress
  • ui: align the credential info icons with their field titles
  • ui: clear pasted iptorrents cookies on close
  • ui: clear TorrentLeech secrets on close and cover the add dialog
  • ui: crisp overlay elevation for dialogs and sheets
  • ui: describe the middle health tier by its ratio band
  • ui: float popovers and visible field focus
  • ui: inputs now have a labeled tooltip option
  • ui: lit lip keeps field corners defined
  • ui: overlays no longer wedge in hidden tabs
  • ui: parse both bullet markers in the whats-new changelog
  • ui: render the infinite-ratio sentinel as infinity
  • ui: show cross-seed ratios as infinity in every torrent table
  • user-proxy: guard the User-Agent version against a missing minor
  • user-proxy: send a User-Agent on proxied tracker requests
  • user-proxy: shorten the User-Agent to major.minor and mark the module server-only
  • webhooks: distinguish a failed poll from an unreachable tracker

Refactoring

  • tracker-adapters: add adapterRequest helper that returns non-2xx
  • tracker-adapters: parse optional credential fields in one place
  • tracker-adapters: route digitalcore through adapterRequest
  • tracker-adapters: route nebulance through adapterRequest
  • ui: collapse the duplicated remaining-ratio branches
  • ui: reuse remainingSeedSeconds in the remaining column
  • user-proxy: drop User-Agent policy from proxyFetch

2.10.1 (2026-08-19)

Bug Fixes

  • release: port changelog template to writer 9 function form
  • tracker-adapters: api responses now parsed as either strings or ints