docs(media): the Monk duplicate is verified; compare libraries with the series engine

The destination-hold refusal's evidence, stated exactly: 124 episodes both
sides, same episode list, every byte count identical, 31.5 GiB each way,
head+tail blake2b identical on a 6-episode sample.

Plus the law this came out of: a path-substring filter for a series name also
returns other shows (monk matches Monkey Dust), and whichever file a walk
reaches first standing in for an episode turns two libraries into a fake
duplicate — the same sloppiness aimed the other way deletes a unique file.
ep_of on both sides, and a hash before anything is trashed.
This commit is contained in:
Frank committed 2026-10-30 20:33:41 -07:00
1 parent 409a8d8b0c
commit e1786e7cf2
1 file changed
+12 -4
@@ -133,10 +133,11 @@ from the box-set folder. What it refuses it prints and leaves alone:
- a destination two files both claim: the executor refuses the whole plan - a destination two files both claim: the executor refuses the whole plan
before its first rename, and only Frank decides which copy is the keeper. before its first rename, and only Frank decides which copy is the keeper.
- an episode the destination library already holds at the same byte count. The - an episode the destination library already holds at the same byte count. The
movie share carried a second copy of all 124 Monk episodes — the TV library movie share carried a second copy of the whole Monk box set — 124 episodes
has had the same box set for years, every episode the same size, ~31 GiB of both sides, the same episode list, every byte count identical, 31.5 GiB each
it. The mover leaves such a series in place and says so; a duplicate is way, and head+tail blake2b identical on a 6-episode sample. The mover leaves
deleted or kept by Frank, never copied into one library by a tool. such a series in place and says so; a duplicate is deleted or kept by Frank,
never copied into one library by a tool.
A sidecar that shares an episode's own name (`.srt`, `.nfo`) moves with it. A sidecar that shares an episode's own name (`.srt`, `.nfo`) moves with it.
@@ -166,6 +167,13 @@ A sidecar that shares an episode's own name (`.srt`, `.nfo`) moves with it.
folder holding it, and extras drifted into a neighbour. A bare number counts folder holding it, and extras drifted into a neighbour. A bare number counts
only when it could be a release year, so `1080` and `2160` never pose as only when it could be a release year, so `1080` and `2160` never pose as
agreement between two names. agreement between two names.
- **Compare two media libraries with the series engine, never a path
substring.** Filtering paths for `monk` also returns *Monkey Dust*, and
letting whichever file a walk happens to reach first stand for an episode
paired two libraries into a fake duplicate — the same sloppiness pointed the
other way deletes a file that is unique. The comparison is `media-titles.ep_of`
on both sides: series, season, episode, bytes, and a hash before anything is
trashed.
- **A file whose name carries no words is bonus material, not a folder.** - **A file whose name carries no words is bonus material, not a folder.**
`.Extra 1 ( 1H 27min multisub ).mkv` parses to `1`; a movie folder named `1` `.Extra 1 ( 1H 27min multisub ).mkv` parses to `1`; a movie folder named `1`
is not a movie. It becomes a review line telling a human to name the file. is not a movie. It becomes a review line telling a human to name the file.