fix(recyclarr): restore guide SQP-1 scores and match profiles by trash_id - #1491
Merged
Merged
Conversation
min_format_score: 2000 (double the TRaSH guide's 1000) made the [SQP] SQP-1 (2160p) profile reject every release for its 240 movies - the decision engine had no scoring path above ~1275 for anything below 2160p WEB/UHD-Bluray with HDR. Removing the override restores the guide default. assign_scores_to entries matched the profile by name (SQP-1 (2160p)), which orphaned onto profile id 7 when the 2026-04-09 rewrite switched the quality_profiles entry to match by trash_id and created a new profile (id 8) under the guide's full bracketed name. Every custom-format tuning since (including PR #1369's Language/MULTi scores) landed on the 2-movie orphan instead of the 240-movie profile actually in use. Matching by trash_id is immune to this class of rename. Also adds the guide's [SQP] SQP-1 (1080p) profile (trash_id 0896c29d74de619df168d23b98104b22), the structural fix for titles that will never get a UHD release - many of the 240 stuck movies are catalogue, pre-2010, or documentary titles that simply don't exist in 2160p. This supersedes the hand-made "[SQP] SQP-1 (2160p) < Year 2000" profile, which recyclarr doesn't manage.
Records the min_format_score/trash_id root cause and the reproducible movie-reassignment rule (year < 2010 or Documentary genre -> 1080p profile) used for the one-off Radarr API classification pass, since profile membership is Radarr database state that GitOps cannot see.
Contributor
--- ConfigMap downloads/recyclarr-9925979k9k
+++ ConfigMap downloads/recyclarr-9925979k9k
@@ -1 +1,162 @@
+apiVersion: v1
+data:
+ recyclarr.yml: |
+ ---
+ # yaml-language-server: $schema=https://schemas.recyclarr.dev/v8/config-schema.json
+ sonarr:
+ sonarr_main:
+ base_url: http://sonarr.downloads.svc.cluster.local:8989
+ api_key: !env_var SONARR_API_KEY
+ delete_old_custom_formats: true
+
+ quality_definition:
+ type: series
+
+ quality_profiles:
+ - trash_id: 72dae194fc92bf828f32cde7744e51a1 # WEB-1080p
+ reset_unmatched_scores:
+ enabled: true
+ - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
+ reset_unmatched_scores:
+ enabled: true
+
+ custom_formats:
+ # HDR Formats (WEB-2160p only)
+ - trash_ids:
+ # Comment out the next line if you and all of your users' setups are fully DV compatible
+ - 9b27ab6498ec0f31a3353992e19434ca # DV (WEBDL)
+ assign_scores_to:
+ - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
+
+ # Unwanted
+ - trash_ids:
+ - 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
+ - 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup
+ - e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
+ - 06d66ab109d4d2eddb2794d21526d140 # Retags
+ - 1b3994c551cbb92a2c781af061f4ab44 # Scene
+ - 15a05bc7c1a36e2b57fd628f8f3e15a6 # AV1
+ - 85c61753df5da1fb2aab6f2a47c8b789 # BR-DISK
+ - 9c11cd3f07101cdba90a2d81cf0e56b4 # LQ
+ - e2315f990da2e2e0c9b11b485e36a947 # LQ (Release Title)
+ - 47435ece6b99a0b477caf360e79ba0bb # x265 (HD)
+ assign_scores_to:
+ - trash_id: 72dae194fc92bf828f32cde7744e51a1 # WEB-1080p
+ - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
+
+ # Miscellaneous
+ - trash_ids:
+ - ec8fa7296b64e8cd390a1600981f3923 # Repack/Proper
+ - eb3d5cc0a2be0db205fb823640db6a3c # Repack2
+ - 44e7c4de10ae50265753082e5dc76047 # Repack3
+ assign_scores_to:
+ - trash_id: 72dae194fc92bf828f32cde7744e51a1 # WEB-1080p
+ - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
+
+ # Streaming Services
+ - trash_ids:
+ - d660701077794679fd59e8bdf4ce3a29 # AMZN
+ - f67c9ca88f463a48346062e8ad07713f # ATVP
+ - 36b72f59f4ea20aad9316f475f2d9fbb # DCU
+ - 89358767a60cc28783ab36f5fd3e5cb0 # DSNP
+ - 7a235133c87f7da4c8ccccbe915e60aa # HBO
+ - a880d6abc21e7c16884f3ae393f84179 # HMAX
+ - f6cce30f1733d5c8194222a7507f2e49 # HULU
+ - 0ac24a2a68a9700bcb7eee4e573a6227 # iT
+ - 81d1fbf600e2540cee87f3a23f9d3c1c # MAX
+ - d34870697c9db575f17700212167be23 # NF
+ - 1656adc6d7bb2c8cca6acfb6592db421 # PCOK
+ - c67a75ae4a1715f2bb4d492c17f80112 # PMTP
+ - ae58039e1319178e6be73f5f551e1afd # SHO
+ - 1efe8da11bfd74fbbcd4d8117ddb9213 # STAN
+ assign_scores_to:
+ - trash_id: 72dae194fc92bf828f32cde7744e51a1 # WEB-1080p
+ - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
+
+ radarr:
+ radarr_main:
+ base_url: http://radarr.downloads.svc.cluster.local:7878
+ api_key: !env_var RADARR_API_KEY
+
+ delete_old_custom_formats: true
+
+ quality_definition:
+ type: sqp-streaming
+
+ quality_profiles:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+ reset_unmatched_scores:
+ enabled: true
+ - trash_id: 0896c29d74de619df168d23b98104b22 # [SQP] SQP-1 (1080p)
+ reset_unmatched_scores:
+ enabled: true
+
+ custom_formats:
+ # Trusted Groups
+ - trash_ids:
+ - 7a0d1ad358fee9f5b074af3ef3f9d9ef # hallowed
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+
+ # Unwanted
+ - trash_ids:
+ - b6832f586342ef70d9c128d40c07b872 # Bad Dual Groups
+ - ae9b7c9ebde1f3bd336a8cbd1ec4c5e5 # No-RlsGroup
+ - 7357cf5161efbf8c4d5d0c30b4815ee2 # Obfuscated
+ - 5c44f52a8714fdd79bb4d98e2673be1f # Retags
+ - f537cf427b64c38c8e36298f657e4828 # Scene
+ - cae4ca30163749b891686f95532519bd # AV1
+ - ed38b889b31be83fda192888e2286d83 # BR-DISK
+ - 90a6f9a284dff5103f6346090e6280c8 # LQ
+ - e204b80c87be9497a8a6eaff48f72905 # LQ (Release Title)
+ - dc98083c8c6b34cc9ab94e6c4a45b18c # x265 (HD)
+ - b8cd450cbfa689c0259a01d9e29ba3d6 # 3D
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+
+ # Miscellaneous
+ - trash_ids:
+ - e7718d7a3ce595f289bfee26adc178f5 # Repack/Proper
+ - ae43b294509409a6a13919dedd49c257 # Repack2
+ - 5caaaa1c08c1742aa4342571f427e5c5 # Repack3
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+
+ # Movie Versions
+ - trash_ids:
+ - eca37840c13c6ef2dd0754c2a6a89554 # Criterion Collection
+ - 0f12c086e289cf966fa5948eac571f44 # Hybrid
+ - 570bc9ebecd92723d2d21500f4be314c # Remaster
+ - eecf3a857724171f968a66cb5719e152 # IMAX
+ - 9d27d9d2181838f76dee150882bdc58c # IMAX Enhanced
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+
+ # Language / naming risk - deprioritize (not block) releases whose title format is more
+ # likely to defeat Radarr's import parser and trigger the "matched movie by ID, Manual
+ # Import required" stuck-queue state. Scores are intentionally small (well under
+ # min_format_score) so a foreign-audio or MULTi release is still grabbed when it's the
+ # best/only match - this only nudges Radarr toward a cleaner-named English release when
+ # more than one candidate is available.
+ - trash_ids:
+ - 0dc8aec3bd1c47cd6c40c46ecd27e846 # Language: Not English
+ score: -25
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+ - trash_ids:
+ - 4b900e171accbfb172729b63323ea8ca # MULTi
+ score: -25
+ assign_scores_to:
+ - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
+kind: ConfigMap
+metadata:
+ annotations:
+ kustomize.toolkit.fluxcd.io/substitute: disabled
+ labels:
+ app.kubernetes.io/name: recyclarr
+ kustomize.toolkit.fluxcd.io/name: recyclarr
+ kustomize.toolkit.fluxcd.io/namespace: downloads
+ name: recyclarr-9925979k9k
+ namespace: downloads
+
--- ConfigMap downloads/recyclarr-m2dt5hb278
+++ ConfigMap downloads/recyclarr-m2dt5hb278
@@ -1,160 +1 @@
-apiVersion: v1
-data:
- recyclarr.yml: |
- ---
- # yaml-language-server: $schema=https://schemas.recyclarr.dev/v8/config-schema.json
- sonarr:
- sonarr_main:
- base_url: http://sonarr.downloads.svc.cluster.local:8989
- api_key: !env_var SONARR_API_KEY
- delete_old_custom_formats: true
-
- quality_definition:
- type: series
-
- quality_profiles:
- - trash_id: 72dae194fc92bf828f32cde7744e51a1 # WEB-1080p
- reset_unmatched_scores:
- enabled: true
- - trash_id: d1498e7d189fbe6c7110ceaabb7473e6 # WEB-2160p
- reset_unmatched_scores:
- enabled: true
-
- custom_formats:
- # HDR Formats (WEB-2160p only)
- - trash_ids:
- # Comment out the next line if you and all of your users' setups are fully DV compatible
- - 9b27ab6498ec0f31a3353992e19434ca # DV (WEBDL)
- assign_scores_to:
- - name: WEB-2160p
-
- # Unwanted
- - trash_ids:
- - 32b367365729d530ca1c124a0b180c64 # Bad Dual Groups
- - 82d40da2bc6923f41e14394075dd4b03 # No-RlsGroup
- - e1a997ddb54e3ecbfe06341ad323c458 # Obfuscated
- - 06d66ab109d4d2eddb2794d21526d140 # Retags
- - 1b3994c551cbb92a2c781af061f4ab44 # Scene
- - 15a05bc7c1a36e2b57fd628f8f3e15a6 # AV1
- - 85c61753df5da1fb2aab6f2a47c8b789 # BR-DISK
- - 9c11cd3f07101cdba90a2d81cf0e56b4 # LQ
- - e2315f990da2e2e0c9b11b485e36a947 # LQ (Release Title)
- - 47435ece6b99a0b477caf360e79ba0bb # x265 (HD)
- assign_scores_to:
- - name: WEB-1080p
- - name: WEB-2160p
-
- # Miscellaneous
- - trash_ids:
- - ec8fa7296b64e8cd390a1600981f3923 # Repack/Proper
- - eb3d5cc0a2be0db205fb823640db6a3c # Repack2
- - 44e7c4de10ae50265753082e5dc76047 # Repack3
- assign_scores_to:
- - name: WEB-1080p
- - name: WEB-2160p
-
- # Streaming Services
- - trash_ids:
- - d660701077794679fd59e8bdf4ce3a29 # AMZN
- - f67c9ca88f463a48346062e8ad07713f # ATVP
- - 36b72f59f4ea20aad9316f475f2d9fbb # DCU
- - 89358767a60cc28783ab36f5fd3e5cb0 # DSNP
- - 7a235133c87f7da4c8ccccbe915e60aa # HBO
- - a880d6abc21e7c16884f3ae393f84179 # HMAX
- - f6cce30f1733d5c8194222a7507f2e49 # HULU
- - 0ac24a2a68a9700bcb7eee4e573a6227 # iT
- - 81d1fbf600e2540cee87f3a23f9d3c1c # MAX
- - d34870697c9db575f17700212167be23 # NF
- - 1656adc6d7bb2c8cca6acfb6592db421 # PCOK
- - c67a75ae4a1715f2bb4d492c17f80112 # PMTP
- - ae58039e1319178e6be73f5f551e1afd # SHO
- - 1efe8da11bfd74fbbcd4d8117ddb9213 # STAN
- assign_scores_to:
- - name: WEB-1080p
- - name: WEB-2160p
-
- radarr:
- radarr_main:
- base_url: http://radarr.downloads.svc.cluster.local:7878
- api_key: !env_var RADARR_API_KEY
-
- delete_old_custom_formats: true
-
- quality_definition:
- type: sqp-streaming
-
- quality_profiles:
- - trash_id: 5128baeb2b081b72126bc8482b2a86a0 # [SQP] SQP-1 (2160p)
- reset_unmatched_scores:
- enabled: true
- min_format_score: 2000
-
- custom_formats:
- # Trusted Groups
- - trash_ids:
- - 7a0d1ad358fee9f5b074af3ef3f9d9ef # hallowed
- assign_scores_to:
- - name: SQP-1 (2160p)
-
- # Unwanted
- - trash_ids:
- - b6832f586342ef70d9c128d40c07b872 # Bad Dual Groups
- - ae9b7c9ebde1f3bd336a8cbd1ec4c5e5 # No-RlsGroup
- - 7357cf5161efbf8c4d5d0c30b4815ee2 # Obfuscated
- - 5c44f52a8714fdd79bb4d98e2673be1f # Retags
- - f537cf427b64c38c8e36298f657e4828 # Scene
- - cae4ca30163749b891686f95532519bd # AV1
- - ed38b889b31be83fda192888e2286d83 # BR-DISK
- - 90a6f9a284dff5103f6346090e6280c8 # LQ
- - e204b80c87be9497a8a6eaff48f72905 # LQ (Release Title)
- - dc98083c8c6b34cc9ab94e6c4a45b18c # x265 (HD)
- - b8cd450cbfa689c0259a01d9e29ba3d6 # 3D
- assign_scores_to:
- - name: SQP-1 (2160p)
-
- # Miscellaneous
- - trash_ids:
- - e7718d7a3ce595f289bfee26adc178f5 # Repack/Proper
- - ae43b294509409a6a13919dedd49c257 # Repack2
- - 5caaaa1c08c1742aa4342571f427e5c5 # Repack3
- assign_scores_to:
- - name: SQP-1 (2160p)
-
- # Movie Versions
- - trash_ids:
- - eca37840c13c6ef2dd0754c2a6a89554 # Criterion Collection
- - 0f12c086e289cf966fa5948eac571f44 # Hybrid
- - 570bc9ebecd92723d2d21500f4be314c # Remaster
- - eecf3a857724171f968a66cb5719e152 # IMAX
- - 9d27d9d2181838f76dee150882bdc58c # IMAX Enhanced
- assign_scores_to:
- - name: SQP-1 (2160p)
-
- # Language / naming risk - deprioritize (not block) releases whose title format is more
- # likely to defeat Radarr's import parser and trigger the "matched movie by ID, Manual
- # Import required" stuck-queue state. Scores are intentionally small (well under
- # min_format_score) so a foreign-audio or MULTi release is still grabbed when it's the
- # best/only match - this only nudges Radarr toward a cleaner-named English release when
- # more than one candidate is available.
- - trash_ids:
- - 0dc8aec3bd1c47cd6c40c46ecd27e846 # Language: Not English
- score: -25
- assign_scores_to:
- - name: SQP-1 (2160p)
- - trash_ids:
- - 4b900e171accbfb172729b63323ea8ca # MULTi
- score: -25
- assign_scores_to:
- - name: SQP-1 (2160p)
-kind: ConfigMap
-metadata:
- annotations:
- kustomize.toolkit.fluxcd.io/substitute: disabled
- labels:
- app.kubernetes.io/name: recyclarr
- kustomize.toolkit.fluxcd.io/name: recyclarr
- kustomize.toolkit.fluxcd.io/namespace: downloads
- name: recyclarr-m2dt5hb278
- namespace: downloads
-
--- HelmRelease downloads/recyclarr
+++ HelmRelease downloads/recyclarr
@@ -82,6 +82,6 @@
- path: /config/recyclarr.yml
readOnly: true
subPath: recyclarr.yml
- name: recyclarr-m2dt5hb278
+ name: recyclarr-9925979k9k
type: configMap
|
Contributor
--- CronJob downloads/recyclarr
+++ CronJob downloads/recyclarr
@@ -69,7 +69,7 @@
persistentVolumeClaim:
claimName: recyclarr-config
- configMap:
- name: recyclarr-m2dt5hb278
+ name: recyclarr-9925979k9k
name: config-file
schedule: '@daily'
startingDeadlineSeconds: 30
|
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.
Intent
Fix Radarr's movie quality profiles so it can grab releases again. 240 of 1077 movies sit in the [SQP] SQP-1 (2160p) Radarr quality profile, which our recyclarr.yml configures with min_format_score: 2000 - double the TRaSH guide's own value of 1000. This gives the profile no scoring path to acceptance for anything below a 2160p WEB/UHD-Bluray release with HDR, so Radarr's decision engine rejects every release that exists for those movies (measured: 0 accepted releases across 5 sampled movies at threshold 2000, vs 2-13 accepted at the guide's 1000). Radarr, Prowlarr, and SABnzbd are otherwise healthy; this is purely a quality-profile config defect.
The captain decided on the full guide-aligned fix, not a one-line patch. All four parts, all in scope:
Both trash_ids were independently verified against the live TRaSH-Guides GitHub source (not just trusted from the brief) before use.
Moving movies between profiles is inherently a Radarr-side action, not a config change (recyclarr only creates/scores profiles - it never assigns a movie to one). This was done deliberately, live, against the cluster, using a reproducible, documented rule: a movie moves to the 1080p profile if year < 2010 OR its genres include "Documentary"; everything else stays on 2160p. This moved 262 movies total: 157 from the 240-movie 2160p profile by that rule, all 103 from the retired hand-made <2000 profile (id 41, wholly superseded), and both of the orphaned profile 7's movies (Scream 1996, Hackers 1995 - also pre-2010, so the same rule applies). 3 Radarr Collections (Die Hard, Jurassic Park, WarGames) referenced orphan profile 7 as their default and were repointed to profile 8 before it could be deleted. Profiles 7 and 41 are now deleted from Radarr.
The live cluster fix was verified end-to-end before committing: suspended the Flux Kustomization for downloads/recyclarr, applied the locally-built kustomize output (kubectl apply -n downloads, matching this repo's documented pre-merge live-testing pattern), triggered a manual sync job, confirmed via Radarr's interactive-search API that Million Dollar Baby (movieId 726) went from 0/163 to 10/163 accepted releases and The Lego Movie (movieId 810) went from 0/291 to 2/291 accepted releases - matching the outage report's own counterfactual numbers exactly. Flux was then resumed per the documented pattern (this reverts the live ConfigMap back to unmerged main, so the recyclarr.yml fix must merge before the next @daily CronJob run, roughly 04:00 America/New_York the next day, or the min_format_score threshold reverts in the live cluster - the movie/collection/profile reassignments themselves are durable Radarr database state and are not affected by that revert).
Explicitly out of scope for this change, per the captain: do not trigger a Radarr backlog/missing-movie search (approved separately, gated on this merging - tracked as a separate task homeops-radarr-backlog-search); do not touch Plex settings or Tdarr transcoding (separate faults, owned by other workers); do not change indexers, download clients, or storage layout; do not fix anything by hand-editing Radarr's UI (the daily recyclarr CronJob would silently revert any UI-only fix within 24h) - the config-level fix belongs in recyclarr.yml only.
Docs were updated (docs/media-stack.md, AGENTS.md) to record the trash_id-matching root cause and the reproducible movie-classification rule, since profile membership is Radarr database state invisible to GitOps and this exact class of silent drift is what caused the original 4-month outage.
Live Verification Evidence (against the real cluster, pre-merge)
The Test step's warning below is accurate about its own sandbox (no kubeconfig there) but the acceptance proof this PR claims was already captured directly against the live cluster before this PR was opened, using this repo's documented suspend-Flux / apply-locally-built-config / manual-sync / resume-Flux pre-merge testing pattern:
These numbers match the original outage report's own counterfactual measurement exactly (0 accepted at
min_format_score: 2000, 10 and 2 accepted at the guide's1000), confirmed live via Radarr's ownGET /api/v3/release?movieId=<id>decision-engine output, not inferred.Also verified live and durable in Radarr's database (independent of this PR's merge state):
PUT /api/v3/movie/editor- 157 from the 2160p profile (year < 2010or genreDocumentary), 103 from the retired hand-made< Year 2000profile (id 41), 2 from the orphaned profile (id 7).DELETE /api/v3/qualityprofile/{id}returned 200 for both, after clearing the referencing collections).What is still open, and who owns it: because Flux was resumed after this live test (per the documented pattern), the live ConfigMap now reflects unmerged
mainagain - themin_format_score/trash_idfix only takes effect in the cluster once this PR merges and the recyclarr CronJob (@daily, next run ~04:00 America/New_York) syncs it, or a manual sync job is triggered post-merge. The movie/collection/profile reassignments above are Radarr database state and are unaffected by that. Firstmate re-checks the live grab path after merge, once recyclarr has synced, before the separately-tracked backlog search (homeops-radarr-backlog-search) is triggered.What Changed
recyclarr.ymlto drop the Radarrmin_format_score: 2000override (guide default 1000), add the TRaSH[SQP] SQP-1 (1080p)profile, and retarget everyassign_scores_toentry (Radarr and Sonarr) from profilenameto stabletrash_idvalues.year < 2010or Documentary → 1080p) indocs/media-stack.mdandAGENTS.md.scripts/ci/recyclarr-quality-profile-test.py(and README inventory entry) to pin guide min scores, both SQP-1 trash_ids, trash_id-only scoring targets, and the kustomize-built ConfigMap semantics.Risk Assessment
✅ Low: Bounded recyclarr config and docs change that closes the documented grab outage (guide min_format_score, trash_id matching, 1080p profile) with the prior Sonarr name-match gap fixed and no remaining source contradictions to intent.
Testing
Added and ran a semantic recyclarr regression test that parses the source config and the kustomize-built ConfigMap Flux mounts, confirms both SQP-1 profiles by live TRaSH trash_ids with guide minFormatScore 1000 and zero overrides, requires trash_id-only assign_scores_to, and shows the pre-fix blob still fails those invariants; live Radarr interactive-search re-proof was not possible here without cluster credentials.
Evidence: recyclarr-quality-profile-test.py full pass + evidence JSON
[PASS] source recyclarr.yml satisfies SQP-1 fix invariants [PASS] kustomize ConfigMap satisfies SQP-1 fix invariants [PASS] pre-fix config fails the same invariants (regression) pre_fix: min_format_score_overrides=[2000], name_matched_assign_count=6; fixed: both SQP trash_ids, min_format_score_overrides=[], guide minFormatScore=1000Evidence: Semantic evidence (file vs ConfigMap vs pre-fix)
Evidence: Kustomize ConfigMap Radarr profiles and assign_scores_to targets
configmap recyclarr-9925979k9k declares trash_ids 5128baeb… (2160p) and 0896c29d… (1080p); all Radarr/Sonarr assign_scores_to use trash_id only; no min_format_score keyEvidence: TRaSH-Guides SQP-1 profile summary (live fetch)
[SQP] SQP-1 (1080p) trash_id=0896c29d74de619df168d23b98104b22 minFormatScore=1000; [SQP] SQP-1 (2160p) trash_id=5128baeb2b081b72126bc8482b2a86a0 minFormatScore=1000Evidence: Raw TRaSH sqp-1-2160p.json
Evidence: Raw TRaSH sqp-1-1080p.json
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 1 issue found → auto-fixed ✅
kubernetes/apps/base/downloads/recyclarr/app/config/recyclarr.yml:27- The durable invariant this change documents (AGENTS.md + docs/media-stack.md: assign_scores_to must match by trash_id, never by profile name) is only enforced on the Radarr section. Sonarr still has six assign_scores_to entries matching WEB-1080p / WEB-2160p by name (lines 27, 42-43, 51-52, 71-72), while those profiles already have trash_ids on the quality_profiles block (72dae194… / d1498e7d…). A TRaSH rename of either WEB profile would silently orphan Sonarr CF scores the same way SQP-1 did. Either convert those Sonarr entries to trash_id (mirrors joryirving/home-ops and the new AGENTS rule), or narrow AGENTS/docs to say the rule applies to Radarr SQP-1 only so the written invariant matches the file.🔧 Fix: Match Sonarr scores by trash_id
✅ Re-checked - no issues remain.
python3 scripts/ci/recyclarr-quality-profile-test.py(source YAML + kustomize ConfigMap invariants + pre-fix regression)kustomize build kubernetes/apps/base/downloads/recyclarr/app→ parse ConfigMaprecyclarr.ymlquality_profiles/assign_scores_toFetched TRaSH-Guidessqp-1-2160p.json/sqp-1-1080p.jsonand assertedtrash_id+minFormatScore: 1000Compared base blobcb3529b9:.../recyclarr.yml(min_format_score 2000, name-matched assigns, no 1080p profile) against fixed configChecked for live Radarr API access via kubeconfig (unavailable in this worktree)✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.