feat(rules): add Sonarr seasonFileRank for season-level rolling windows#3223
Merged
Conversation
enoch85
added a commit
to Maintainerr/Maintainerr_docs
that referenced
this pull request
Jul 4, 2026
Ranks a season within its show by the air date of its newest downloaded episode (newest = 1), enabling keep-newest-N-seasons rules. Derived from the same run-cached episode pool as episodeFileRank (one shared rank-map cache entry per show, no extra Sonarr calls); season statistics were deliberately not used because previousAiring is monitored-dependent and Maintainerr's own unmonitor actions would erase the ranking key. Seasons without downloaded episodes take no rank slot; specials and unaired-only seasons rank null so the comparator stays fail-closed.
enoch85
added a commit
to Maintainerr/Maintainerr_docs
that referenced
this pull request
Jul 4, 2026
…erties (#106) * docs(rules): document Sonarr episode retention rank and arr scoping properties Covers the episodeFileRank/seriesTitle/seriesId properties from Maintainerr/Maintainerr#3095 and the Radarr movieTitle/movieId pair from Maintainerr/Maintainerr#3222, with a keep-newest-N walkthrough. Also converts a stray em dash to a plain hyphen. * docs(rules): add seasonFileRank to the episode retention section Covers Maintainerr/Maintainerr#3223. * docs(rules): integrate seasonFileRank properly (count, order, season walkthrough) * docs(rules): split episode and season retention walkthroughs, clarify daily-series behavior Review polish: each retention level gets its own self-contained recipe with expected outcome, the scoping advice is stated once up front, and a dedicated daily-series section spells out date-only episode matching, year-seasons, and that airing without downloading never moves the window. * docs(rules): match the renamed rank labels (Maintainerr/Maintainerr#3224) * docs(rules): final label wording (1 = latest)
maintainerr-automation Bot
added a commit
that referenced
this pull request
Jul 4, 2026
* build(deps): bump @sigstore/core from 3.0.0 to 3.2.1 (#3182) Bumps [@sigstore/core](https://github.com/sigstore/sigstore-js) from 3.0.0 to 3.2.1. - [Release notes](https://github.com/sigstore/sigstore-js/releases) - [Commits](https://github.com/sigstore/sigstore-js/compare/@sigstore/[email protected]...@sigstore/[email protected]) --- updated-dependencies: - dependency-name: "@sigstore/core" dependency-version: 3.2.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump js-yaml from 3.14.2 to 3.15.0 (#3183) Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.2 to 3.15.0. - [Changelog](https://github.com/nodeca/js-yaml/blob/3.15.0/CHANGELOG.md) - [Commits](nodeca/js-yaml@3.14.2...3.15.0) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 3.15.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: keep server booting when sharp can't load on pre-x86-64-v2 CPUs (#3184) sharp 0.35's prebuilt Linux x64 binaries require the x86-64-v2 microarchitecture (libvips 8.18). On older CPUs or minimal VM CPU models (e.g. QEMU kvm64) the native addon throws while loading at require() time, which crashed the whole server during Nest bootstrap — Maintainerr would not start after updating past v3.14.0. Load sharp through a small try/catch wrapper so the failure no longer takes down boot. The server starts; only the image features (overlays, collection posters) degrade, and a clear startup message explains the CPU requirement. Same sharp package — no dependency change. * build(deps-dev): bump knip from 6.21.0 to 6.23.0 (#3187) Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) from 6.21.0 to 6.23.0. - [Release notes](https://github.com/webpro-nl/knip/releases) - [Commits](https://github.com/webpro-nl/knip/commits/[email protected]/packages/knip) --- updated-dependencies: - dependency-name: knip dependency-version: 6.23.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump eslint from 10.5.0 to 10.6.0 in the eslint group (#3186) Bumps the eslint group with 1 update: [eslint](https://github.com/eslint/eslint). Updates `eslint` from 10.5.0 to 10.6.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v10.5.0...v10.6.0) --- updated-dependencies: - dependency-name: eslint dependency-version: 10.6.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump @tanstack/react-query from 5.101.1 to 5.101.2 (#3188) Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.101.1 to 5.101.2. - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/react-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/[email protected]/packages/react-query) --- updated-dependencies: - dependency-name: "@tanstack/react-query" dependency-version: 5.101.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @tailwindcss/vite from 4.3.1 to 4.3.2 (#3190) Bumps [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) from 4.3.1 to 4.3.2. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.2/packages/@tailwindcss-vite) --- updated-dependencies: - dependency-name: "@tailwindcss/vite" dependency-version: 4.3.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @tanstack/eslint-plugin-query (#3189) Bumps [@tanstack/eslint-plugin-query](https://github.com/TanStack/query/tree/HEAD/packages/eslint-plugin-query) from 5.101.1 to 5.101.2. - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/eslint-plugin-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/[email protected]/packages/eslint-plugin-query) --- updated-dependencies: - dependency-name: "@tanstack/eslint-plugin-query" dependency-version: 5.101.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump @nestjs/swagger in the nestjs group (#3192) Bumps the nestjs group with 1 update: [@nestjs/swagger](https://github.com/nestjs/swagger). Updates `@nestjs/swagger` from 11.4.4 to 11.4.5 - [Release notes](https://github.com/nestjs/swagger/releases) - [Commits](nestjs/swagger@11.4.4...11.4.5) --- updated-dependencies: - dependency-name: "@nestjs/swagger" dependency-version: 11.4.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nestjs ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump turbo from 2.10.0 to 2.10.1 (#3193) Bumps [turbo](https://github.com/vercel/turborepo) from 2.10.0 to 2.10.1. - [Release notes](https://github.com/vercel/turborepo/releases) - [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md) - [Commits](vercel/turborepo@v2.10.0...v2.10.1) --- updated-dependencies: - dependency-name: turbo dependency-version: 2.10.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump react-router-dom from 7.18.0 to 7.18.1 (#3194) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.18.0 to 7.18.1. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/[email protected]/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/[email protected]/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-version: 7.18.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @eslint-react/eslint-plugin from 5.9.3 to 5.10.0 (#3195) Bumps [@eslint-react/eslint-plugin](https://github.com/Rel1cx/eslint-react/tree/HEAD/plugins/eslint-plugin) from 5.9.3 to 5.10.0. - [Release notes](https://github.com/Rel1cx/eslint-react/releases) - [Changelog](https://github.com/Rel1cx/eslint-react/blob/main/CHANGELOG.md) - [Commits](https://github.com/Rel1cx/eslint-react/commits/v5.10.0/plugins/eslint-plugin) --- updated-dependencies: - dependency-name: "@eslint-react/eslint-plugin" dependency-version: 5.10.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @typescript-eslint/eslint-plugin (#3196) Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.62.0 to 8.62.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.1/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.62.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump typescript-eslint from 8.62.0 to 8.62.1 (#3197) Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.62.0 to 8.62.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.1/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.62.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump nodemailer from 9.0.1 to 9.0.2 (#3199) Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 9.0.1 to 9.0.2. - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](nodemailer/nodemailer@v9.0.1...v9.0.2) --- updated-dependencies: - dependency-name: nodemailer dependency-version: 9.0.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump prettier from 3.8.5 to 3.9.4 (#3198) * build(deps-dev): bump prettier from 3.8.5 to 3.9.4 Bumps [prettier](https://github.com/prettier/prettier) from 3.8.5 to 3.9.4. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](prettier/prettier@3.8.5...3.9.4) --- updated-dependencies: - dependency-name: prettier dependency-version: 3.9.4 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> * style: apply prettier 3.9.4 formatting --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: enoch85 <[email protected]> * fix(deps): patch vulnerable transitive deps via resolutions (#3201) Force-resolve transitive packages flagged by Dependabot to their patched versions (their parents pin exact/old versions, so a resolution is the only way to lift them): - multer 2.1.1 -> 2.2.0 (via @nestjs/platform-express) — DoS - dompurify 3.4.2 -> 3.4.11 (via monaco-editor) — XSS/sanitizer bypass - linkify-it 5.0.0 -> 5.0.1 (via mailparser) — quadratic complexity - undici 6.25.0 -> 6.27.0 (existing pin) — header/DoS issues undici 7.x (->7.28.0) and js-yaml 4.x (->4.3.0) resolve to patched versions naturally from the lockfile; no resolution needed. Remaining: undici 5.29.0 via @actions/http-client (dev/CI tooling, not in the production image) needs undici 5->6, a major that breaks the parent, so it is intentionally left. * build(deps): bump nodemailer from 9.0.2 to 9.0.3 (#3202) Bumps [nodemailer](https://github.com/nodemailer/nodemailer) from 9.0.2 to 9.0.3. - [Release notes](https://github.com/nodemailer/nodemailer/releases) - [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md) - [Commits](nodemailer/nodemailer@v9.0.2...v9.0.3) --- updated-dependencies: - dependency-name: nodemailer dependency-version: 9.0.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump turbo from 2.10.1 to 2.10.2 (#3204) Bumps [turbo](https://github.com/vercel/turborepo) from 2.10.1 to 2.10.2. - [Release notes](https://github.com/vercel/turborepo/releases) - [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md) - [Commits](vercel/turborepo@v2.10.1...v2.10.2) --- updated-dependencies: - dependency-name: turbo dependency-version: 2.10.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump vite from 8.1.0 to 8.1.2 (#3205) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.1.0 to 8.1.2. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.1.2/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.1.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @types/node from 26.0.0 to 26.1.0 (#3206) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.0.0 to 26.1.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump sharp from 0.35.2 to 0.35.3 (#3207) Bumps [sharp](https://github.com/lovell/sharp) from 0.35.2 to 0.35.3. - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](lovell/sharp@v0.35.2...v0.35.3) --- updated-dependencies: - dependency-name: sharp dependency-version: 0.35.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @typescript-eslint/parser from 8.62.0 to 8.62.1 (#3208) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.62.0 to 8.62.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.1/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-version: 8.62.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Document health probes and LOG_LEVEL override (#3210) * Potential fix for code scanning alert no. 199: Untrusted Checkout TOCTOU (#3209) * Potential fix for code scanning alert no. 199: Untrusted Checkout TOCTOU Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * ci: don't persist credentials when checking out untrusted PR code Keep the workflow GITHUB_TOKEN (packages:write / pull-requests:write) out of the checked-out worktree that this job builds, complementing the SHA-pin/verify. --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: enoch85 <[email protected]> * fix(collections): distinguish a missing library from an empty one (#3203) (#3211) An automatic collection with no server-side collection cleared its link and always logged that it would be recreated automatically when items match the rule. That is false when the collection's target Plex library section is gone (removed, or recreated with a new id) — the 404 the user sees. Check whether the library still exists and log an actionable message telling the user to re-point the collection, keeping the auto-create message only for a valid but empty library. Inconclusive library fetches stay silent so a transient blip never mislabels a library as missing. * build(deps-dev): bump knip from 6.23.0 to 6.24.0 (#3213) Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) from 6.23.0 to 6.24.0. - [Release notes](https://github.com/webpro-nl/knip/releases) - [Commits](https://github.com/webpro-nl/knip/commits/[email protected]/packages/knip) --- updated-dependencies: - dependency-name: knip dependency-version: 6.24.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump eslint-plugin-jest from 29.15.3 to 29.15.4 (#3214) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 29.15.3 to 29.15.4. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](jest-community/eslint-plugin-jest@v29.15.3...v29.15.4) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-version: 29.15.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @types/node from 26.0.0 to 26.1.0 (#3215) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.0.0 to 26.1.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-version: 26.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump vite from 8.1.2 to 8.1.3 (#3216) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.1.2 to 8.1.3. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.1.3/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.1.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump rolldown from 1.1.3 to 1.1.4 (#3217) Bumps [rolldown](https://github.com/rolldown/rolldown/tree/HEAD/packages/rolldown) from 1.1.3 to 1.1.4. - [Release notes](https://github.com/rolldown/rolldown/releases) - [Changelog](https://github.com/rolldown/rolldown/blob/main/CHANGELOG.md) - [Commits](https://github.com/rolldown/rolldown/commits/v1.1.4/packages/rolldown) --- updated-dependencies: - dependency-name: rolldown dependency-version: 1.1.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump sigstore from 4.0.0 to 4.1.1 (#3218) Bumps [sigstore](https://github.com/sigstore/sigstore-js) from 4.0.0 to 4.1.1. - [Release notes](https://github.com/sigstore/sigstore-js/releases) - [Commits](https://github.com/sigstore/sigstore-js/compare/[email protected]@4.1.1) --- updated-dependencies: - dependency-name: sigstore dependency-version: 4.1.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps-dev): bump @eslint-react/eslint-plugin from 5.10.0 to 5.10.2 (#3219) Bumps [@eslint-react/eslint-plugin](https://github.com/Rel1cx/eslint-react/tree/HEAD/plugins/eslint-plugin) from 5.10.0 to 5.10.2. - [Release notes](https://github.com/Rel1cx/eslint-react/releases) - [Changelog](https://github.com/Rel1cx/eslint-react/blob/main/CHANGELOG.md) - [Commits](https://github.com/Rel1cx/eslint-react/commits/v5.10.2/plugins/eslint-plugin) --- updated-dependencies: - dependency-name: "@eslint-react/eslint-plugin" dependency-version: 5.10.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: ban em/en dashes, convert existing source usages to hyphens (#3212) * chore: ban em/en dashes and convert existing usages to hyphens Replaces every em dash (U+2014) and en dash (U+2013) with a plain ASCII hyphen across TypeScript/TSX and CSS source (comments, log and UI strings, tests), and adds the convention to AGENTS.md and project-notes.instructions.md so new code keeps to a single ASCII dash. Purely mechanical in source; no behavior change. Markdown prose was intentionally left out of scope. * chore: extend em/en dash ban to docs, markdown, workflows, and tooling Complete the sweep beyond source: convert em (U+2014) and en (U+2013) dashes to plain hyphens across docs/, instruction files, .github workflows, tooling scripts, CHANGELOG, and config. The two lines that document the ban by showing the banned characters as examples (AGENTS.md, project-notes.instructions.md) are intentionally preserved. * feat(rules): add Sonarr episodeFileRank with seriesTitle/seriesId scoping (#3095) - episodeFileRank: rank on-disk episodes per show by air date (newest = 1). Pool requires hasFile, excludes specials (S00), unaired, and null-airDate episodes; out-of-pool ranks null so the comparator stays fail-closed. Rank maps are memoised through ArrLookupCache so long-running daily series fetch the full episode list once per show per rule-run. - Daily-series airDate fallback for Plex items carrying parentIndex (year) but no episode index; keyed on Sonarr's broadcast-date string (not a UTC day-bucket) so US primetime broadcasts straddling UTC midnight still match. - seriesTitle (TEXT) and seriesId (NUMBER) as scoping handles for rank-and-delete rules; seriesId survives a title rename or regional/year suffix. * feat(rules): add Radarr movieTitle/movieId scoping properties (#3222) Movie-scope handles mirroring Sonarr's seriesTitle/seriesId (#3220): movieTitle (TEXT, case-insensitive matching) and movieId (NUMBER, the rename-proof handle for destructive rules). Read from the resolved Radarr movie; not-tracked stays null and transient lookup failures stay undefined, matching the getter contract. * feat(rules): add Sonarr seasonFileRank for season-level rolling windows (#3223) Ranks a season within its show by the air date of its newest downloaded episode (newest = 1), enabling keep-newest-N-seasons rules. Derived from the same run-cached episode pool as episodeFileRank (one shared rank-map cache entry per show, no extra Sonarr calls); season statistics were deliberately not used because previousAiring is monitored-dependent and Maintainerr's own unmonitor actions would erase the ranking key. Seasons without downloaded episodes take no rank slot; specials and unaired-only seasons rank null so the comparator stays fail-closed. * fix(rules): plainer labels for the rank properties (#3224) 'Episode/Season position by air date (1 = latest)' replaces the 'file rank' labels: simpler words chosen for instant readability, including for non-native English speakers. Display-only; stored rules and YAML exports reference the internal property names/ids, which are unchanged. * fix(collections): accept hex-GUID context.id for manual season/episode actions (#3225) --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: maintainerr-automation[bot] <261505141+maintainerr-automation[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: enoch85 <[email protected]> Co-authored-by: Kristian Matthews-Kennington <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: Jack McPherson <[email protected]>
Contributor
|
🎉 This PR is included in version 3.17.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
doonga
pushed a commit
to greyrock-labs/home-ops
that referenced
this pull request
Jul 6, 2026
… ➔ 3.17.0) (#460) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/maintainerr/maintainerr](https://github.com/Maintainerr/Maintainerr) | minor | `3.16.0` → `3.17.0` | --- ### Release Notes <details> <summary>Maintainerr/Maintainerr (ghcr.io/maintainerr/maintainerr)</summary> ### [`v3.17.0`](https://github.com/Maintainerr/Maintainerr/blob/HEAD/CHANGELOG.md#3170-2026-07-05) [Compare Source](Maintainerr/Maintainerr@v3.16.0...v3.17.0) #### Highlights - Added new rule properties for Sonarr and Radarr, enabling advanced filtering and scoping capabilities for media management ([#​3095](Maintainerr/Maintainerr#3095), [#​3222](Maintainerr/Maintainerr#3222), [#​3223](Maintainerr/Maintainerr#3223)). - Fixed server startup issue on older CPUs or minimal VM models by handling `sharp` library compatibility ([#​3184](Maintainerr/Maintainerr#3184)). - Improved library reconciliation to handle transient errors and clarified error messaging for unavailable libraries ([#​3226](Maintainerr/Maintainerr#3226)). #### Features - Added `seasonFileRank` rule property for Sonarr, enabling season-level rolling windows ([#​3223](Maintainerr/Maintainerr#3223)). - Added `movieTitle` and `movieId` rule properties for Radarr, allowing movie-specific scoping ([#​3222](Maintainerr/Maintainerr#3222)). - Added `episodeFileRank` rule property for Sonarr with `seriesTitle` and `seriesId` scoping ([#​3095](Maintainerr/Maintainerr#3095)). #### Fixes - Hardened library reconciliation against transient errors and clarified error messaging for unavailable libraries ([#​3226](Maintainerr/Maintainerr#3226)). - Fixed manual "Add to collection" for Jellyfin by supporting hex-GUID `context.id` ([#​3225](Maintainerr/Maintainerr#3225)). - Updated rule-builder labels for rank properties to improve clarity and readability ([#​3224](Maintainerr/Maintainerr#3224)). - Resolved issue where missing libraries were misinterpreted as empty during automatic collection creation ([#​3203](Maintainerr/Maintainerr#3203), [#​3211](Maintainerr/Maintainerr#3211)). - Addressed server crash during startup on pre-x86-64-v2 CPUs by handling `sharp` library loading ([#​3184](Maintainerr/Maintainerr#3184)). #### Performance - Improved defense against potential code scanning alert related to untrusted checkout in GitHub Actions ([#​3209](Maintainerr/Maintainerr#3209)). #### Database migrations - Backfilled the `operator` field in stored rules to ensure explicit values for section and within-section operators, preventing unintended behavior changes. #### Internal - Documented `LOG_LEVEL` environment override and health probe endpoints ([#​3210](Maintainerr/Maintainerr#3210)). #### Dependencies - Updated 28 dependencies, including `sharp`, `typescript-eslint`, `eslint`, and `prettier`. #### New Contributors - [@​jackemcpherson](https://github.com/jackemcpherson) made their first contribution in [#​3095](Maintainerr/Maintainerr#3095) </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDcuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI0Ny4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/460
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds Sonarr
seasonFileRank(NUMBER, id 35, season scope only): ranks a season within its show by the air date of its newest downloaded episode, newest = 1. Together withseriesIdthis enables season-level rolling windows:seasonFileRank bigger than 2 AND seriesId equals Xkeeps the newest two seasons of a show and selects the older ones.Stacked on #3095 - it extends that PR's rank-map machinery, so this branch contains its commit and should be rebased/merged after it lands.
Design notes:
episodeFileRank(the builder now also emits a season map in the same cache entry - zero extra Sonarr calls). Seasonstatistics.previousAiringwas deliberately rejected as the ordering key: verified against a real Sonarr that it is monitored-dependent and absent for unmonitored content, so Maintainerr's own unmonitor actions would erase the ranking key mid-lifecycle.null(fail-closed); transient Sonarr failures returnundefined.Validated on the real dev stack: 15 real hardlinked episode files across five seasons of a real 7,362-episode daily series;
/api/rules/testreturned ranks 5..1 in exact newest-downloaded-episode order, a full run matched exactly the three oldest seasons, and Playwright confirmed the property is offered only at Seasons scope (absent for Shows/Episodes). Full suite green (102 suites / 1,866 tests).