Check unmatched media at season and episode level

Checking only shows and movies was hiding the larger problem. Battlestar
Galactica has a real plex:// GUID, a poster, and passes a show-level audit,
while all 74 of its episodes and all 5 of its seasons carry local:// GUIDs and
display as "Episode 1", "Episode 2" with no titles or artwork.

Surveying every level found 97 unmatched episodes of 11531 and 7 unmatched
seasons of 954, across four shows — none of it visible before.

Also adds known-issues.conf, an accepted-findings list. The unmatched movie in
the Movies library is the first entry: the 2003 BSG miniseries is catalogued as
television, so the movie agent has no record to match it against and the item
cannot be fixed in place. Listed entries are still printed, as [info] rather
than [warn], so they stop counting as unresolved faults without ever being
silently suppressed.

The episode list is a ~30MB response, so it is written to a temp file before
parsing rather than piped into jq.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Lucas Berger
2026-08-15 21:27:56 -04:00
co-authored by Claude Opus 5
parent 3df1cca91c
commit 829bf009df
4 changed files with 163 additions and 11 deletions
+14 -2
View File
@@ -11,6 +11,11 @@ Reached at `https://plex.bergerhouse.net` (DNS resolves to odin's LAN address
| [bin/poster-audit](bin/poster-audit) | Finds items whose poster is missing or does not resolve | no |
| [bin/poster-repair](bin/poster-repair) | Re-selects the poster for items the audit flags | **yes** |
[known-issues.conf](known-issues.conf) lists findings that have been reviewed and
accepted. `plex-health` still reports them, but as `[info]` rather than `[warn]`, so a
known-and-accepted item stops making the whole run read as failing. Nothing is ever
suppressed silently.
## Prerequisites
- **Where it runs:** this workstation (`dev`), targeting odin over Tailscale. Nothing
@@ -97,8 +102,15 @@ which for a local candidate is the `metadata://posters/...` string, not the `/li
path from the same object's `key` field.
**Season and episode posters were not affected** — only show-level ones, and only in the
TV Shows library. The movie libraries sampled clean. Worth re-checking rather than
assuming if this recurs.
TV Shows library. Every other library was later checked in full (not sampled) and came
back 100% clean. Worth re-checking rather than assuming if this recurs.
**A matched show can be full of unmatched episodes.** Checking only the top level of a
library is not enough: Battlestar Galactica has a real `plex://show/...` GUID and looks
healthy in a show-level audit, while all 74 of its episodes carry `local://` GUIDs and
display as "Episode 1", "Episode 2"… with no titles or artwork. `plex-health` therefore
checks show, season, *and* episode level. The episode list for a library this size is a
~30 MB response — it is written to a temp file before parsing, never piped into `jq`.
**The 2-minute tool timeout will kill a full repair run.** Run it with `nohup ... &` and
tail the log, or use `--limit`.