Skip to content

0.11.0: optional WebP copies, adult posters per account, works entered by hand for Sonarr and Radarr, sessions that end show a visitor - #19

Merged
Dim145 merged 4 commits into
mainfrom
release/0.11.0
Oct 26, 2026
Merged

Dim145 merged 4 commits into
mainfrom
release/0.11.0

Conversation

@Dim145

@Dim145 Dim145 commented Oct 26, 2026

Copy link
Copy Markdown
Owner

The changes for 0.11.0, four commits on top of main.

What changes

  • WebP copies are a choice, off by default (media.webp). With them off, the pages are given the pictures themselves, with an AVIF source over them where the night's copies reach as wide. Turning WebP or AVIF off while copies are kept asks whether to delete them (DELETE /api/v1/media/variants/{format}, in the background).
  • Posters of works for adults can be shown or veiled from a Reading panel on the profile page, kept with the account (reader.adultPosters).
  • Works entered by hand reach Sonarr and Radarr. One that TheTVDB, TMDB and Fankai don't name is handed a number of its own, from 1,000,000,000 to 2,147,483,647, made of its catalogue id. Searches list it, lookups answer it from the catalogue alone, and Radarr takes it as the film's TmdbId. The push, the seeding and the scene mapping know it too. Fankai's range now ends at 999,999,999. docs/plex.md explains why Plex's own provider, listed in the same agent, guesses such a work by its title.
  • The front page no longer offers a programmer's note button.
  • Sessions: signing out, changing one's password, closing one's own sessions, untying one's own account from the identity provider, or a session that ended elsewhere now shows a visitor at once, instead of Admin until a reload. An administrator's own page among the accounts points to their account page for their password, which the server refuses there.
  • Radarr's search leaves out the films it could not add. A tvdb: term resolves every id the server hands out.
  • The image takes --build-arg CARGO_PROFILE_RELEASE_LTO=thin for machines short of memory; CI and the published image stay fat.
  • scripts/e2e-stack.sh checks the works entered by hand on the real Sonarr 4, Sonarr 5, Radarr and Plex.

Checked locally

  • cargo fmt, cargo clippy --all-targets -D warnings, and cargo test: 1475 tests on SQLite and 1475 on PostgreSQL.
  • Front end: typecheck, e2e typecheck, lint, vitest (257 tests), build. The site builds with no broken links.
  • Playwright:
    • The whole suite passed (558) before the last commit.
    • After it, the 20 spec files that timed out on a machine short of memory passed with two workers, except four tests that then passed alone.
    • server-wide: 46 passed.
  • The stack bench: 149 checks pass.
  • gitleaks, cargo audit, npm audit (front end and site), semgrep on the changed files and shellcheck are all clean.

🤖 Generated with Claude Code

Dim145 and others added 4 commits October 26, 2026 03:01
…ing a format's copies, and let a reader keep the posters for adults shown with their account

The WebP copies are off until media.webp is set: the pages are given the pictures themselves, with an AVIF source over them where the night's copies reach as wide, and an address of a WebP copy answers the copy kept or sends to the original, making none. The placeholders are still worked out as a picture is stored; media.variants makes the first copies only while WebP copies are on. GET /api/v1/auth/options says whether they are, so a page draws the right sources from its first picture.

Turning the WebP or the AVIF copies off while some are kept asks whether to delete them too. DELETE /api/v1/media/variants/{format} deletes every copy of a format once it is off, five hundred at a time in the background, under a lock shared among instances; the Media page follows it.

A Reading panel on the profile page keeps whether the posters of works for adults are shown with the account (reader.adultPosters), so the choice follows it from one browser to the next; the bar's Language and reading menu is the same choice for whoever is signed in, and stays the browser's for a visitor. The settings reference gives the AVIF copies' background widths as made, 1280 and 1920.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… hand, take the programmer's note button off the front page, and show a visitor at once after signing out

A work entered by hand that TheTVDB, TMDB and Fankai do not name was sent to Sonarr and Radarr without an id they could add it by: Sonarr's searches left it out, and Radarr was given a film of TmdbId 0. It is now handed a number from 1,000,000,000 to 2,147,483,647, worked out from its catalogue id so that it never changes: Sonarr's searches (v1 and v2) list it under it, a lookup by it is answered from the catalogue alone, switched off or merged into another, without asking a source; Radarr takes it as the film's TmdbId, and the changed films, the refresh push, the scene mapping and the seeding from their libraries know it by it. Should two catalogue ids make one number, the work entered first keeps it and the other is left out of the searches; a work entered by hand now is given a catalogue id whose number no other holds. Fankai's range ends below it, at 999,999,999. Radarr's search leaves out the films it could not add, and a tvdb: term resolves every id the server hands out. Plex was given such a work whole already: docs/plex.md says why an agent that also lists Plex's own provider lays a guess by title over it, and what to do.

The front page no longer offers whoever may edit a programmer's note to write under the work of the day; a written one is still shown there, and the administration's page and the other pages still offer one.

Signing out, or changing one's password, resets every answer the account was given and tells whoever reads them (endSession), rather than emptying the cache without a word: the bar shows a visitor at once instead of Admin until a reload.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f the stack bench

scripts/e2e-stack.py makes, through the native API, a series entered by hand — an alternative title, a season of two episodes — and a film, neither named anywhere else, and follows them through every phase. Sonarr 4 and 5 find the series by its title and by tvdb: under the number the server makes of its catalogue id (worked out again here, and compared), add it with its season and episodes as served, take a locked title at a refresh and map a release named by its alternative title to it; Sonarr 5 is answered metadataSource local. Radarr finds, adds and refreshes the film the same way, and the films changed name it once edited. A lock on either sends the client a RefreshSeries or RefreshMovie under that number; seeded from their libraries on a new catalogue, both are reported held under no id to look them up by. Plex matches them, in libraries of their own on the provider's agent, as show-id-… and movie-id-… with the catalogue's title, summary, season and episodes. A number no work was handed finds nothing on either client.

The push phase run alone skips the checks of a work its client does not hold rather than failing them. The whole run passes, 149 checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stop offering an administrator the reset of their own password

The query client's caches now hear a refusal for want of a credential while somebody is signed in here (sessionCaches in session.ts): who is looking is asked again, once for any number of refusals at a time, and an answer that says nobody, where somebody was, ends the session here with endSession — so a session that ran out, or was closed from another browser or by another administrator, takes the bar's Admin and the account's answers with it at the next request refused, or when who is signed in is next asked. A password typed wrong is refused the same way and only costs that question; a visitor's refusals, every answer on a private site, ask nothing.

On an administrator's own page among the accounts, closing every session asks first and then signs them out here, as untying their own account from the identity provider now does too; editing their own profile refreshes the name the side bar shows. The reset of their own password, which the server has always refused there, gives way to a link to their account page, which asks for the current one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Dim145
Dim145 merged commit 7c19156 into main Oct 26, 2026
16 checks passed
@Dim145
Dim145 deleted the release/0.11.0 branch October 26, 2026 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant