diff --git a/serverAppConfigs-docs/Dankserver/Media TV Relayout.md b/serverAppConfigs-docs/Dankserver/Media TV Relayout.md index 5c7a9dd..a7ed683 100644 --- a/serverAppConfigs-docs/Dankserver/Media TV Relayout.md +++ b/serverAppConfigs-docs/Dankserver/Media TV Relayout.md @@ -171,6 +171,36 @@ sequel (410031), the 2026 Hokuto no Ken remake (465216) and `Mugyutto! Black Clover` (378762) offered for Black Clover. It is why the map is approved by hand and the sheet is never fed to the planner. +**A parked folder merges into the row that owns the show.** The folder that never +got an id usually holds episodes the identified folder for that show lacks, and +the server shows the audience neither: the parked copy is invisible and the owner +reads as a short series. One `media-apply.py` plan per show, built from the +server's own rows: + +- the **owner is the folder whose `Series` row carries the tvdb id**; the parked + side is the folder with the same words and no id (or the same id under a second + row — see the law below); +- the **comparison is episode identity, not filename**: which (season, episode) + the provider row gives each file, read straight out of the server. Release + folders renumber — one park carried `S01E01-11` of a show tvdb books as seasons + 2 and 3, and every episode runs the same eleven minutes, so neither the marker + nor the duration says what one query into the rows says; +- **a season the owner has no file in moves whole**: `mkdir` the `Season NN`, + then one row per file with its name unchanged — the folder shape is the + contract, the file name is not; +- **a subtitle pack is re-keyed, never just moved**: a sidecar attaches only when + its stem equals the video's, so each `.srt` has to land on the OWNER's stem with + the language suffix kept (`… - The Cat and the Claw (1).en.srt`). Moved under + its release-group name it stays a folder of 88 subtitles no player ever offers; +- **the same episode on both sides is the operator's call**, never a plan row: + which copy survives is a quality judgment — the parked copy is usually the + bigger one, and a re-cut is not a worse one — and the parked file often carries + no title to align by. Those pairs are listed and left alone. + +The two sides speak different path dialects, since the server records the +container coordinate ([[Jellyfin]]) and the journal speaks the array; a join that +forgets the translation returns zero rows and looks like an empty library. + ## Laws of this arm - **A folder that names two series is not evidence of two series — the files @@ -187,6 +217,16 @@ and the sheet is never fed to the planner. them, per-season counts equal, and no duplicate `SxxEyy` key anywhere prove the layout is already correct. Renumbering files under that evidence buys nothing and can silently mislabel an episode. +- **One tvdb id can carry two `Series` rows, so the id-less folder list proves + nothing about a merge.** A parked folder whose words parse to a registered show + gets identified on its own and keeps its own folder: the count of id-less + folders drops, and the library now offers the same show twice. Prove a merge by + the episode rows standing under the owner folder, never by that list. +- **Move library files only while `Scan Media Library` is Idle.** A rename that + lands under a running scan is a row the server read a moment ago pointing at a + path that no longer exists. `ScheduledTasks` is the read ([[Jellyfin]]); wait + for a `Running` sighting and then two consecutive `Idle` polls, because a gap + between sub-tasks reads as finished. ## See Also