diff --git a/documentation/audits/media-all-drives-2026-10-14/E1-where-each-landed.txt b/documentation/audits/media-all-drives-2026-10-14/E1-where-each-landed.txt new file mode 100644 index 00000000..c3f71765 --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/E1-where-each-landed.txt @@ -0,0 +1,26 @@ +== sonarr: 16 import(s) + series Avatar: Seven Havens: root=media_a tags=['drive-a'] + series American Horror Story: root=media_b tags=['drive-b'] + series Slow Horses: root=media_b tags=['drive-a'] + Avatar: Seven Havens Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRAC client=Transmission drive-a download=media_a library=media_a HARDLINK + Avatar: Seven Havens Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRAC client=qBittorrent drive-a download=media_a library=media_a HARDLINK + American Horror Story American.Horror.Story.S13E05.1080p.DSNP.WEB-DL client=qBittorrent drive-b download=media_b library=media_b HARDLINK + Avatar: Seven Havens Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRAC client=qBittorrent drive-a download=media_a library=media_a HARDLINK + American Horror Story American.Horror.Story.S13E04.1080p.DSNP.WEB-DL client=Transmission drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E03.1080p.DSNP.WEB-DL client=qBittorrent drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E07.1080p.DSNP.WEB-DL client=qBittorrent drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E01.1080p.DSNP.WEB-DL client=qBittorrent drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E02.1080p.DSNP.WEB-DL client=Transmission drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E08.1080p.DSNP.WEB-DL client=Transmission drive-b download=media_b library=media_b HARDLINK + American Horror Story American.Horror.Story.S13E06.1080p.DSNP.WEB-DL client=Transmission drive-b download=media_b library=media_b HARDLINK + Slow Horses Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL. client=qBittorrent drive-a download=media_a library=media_b COPY + Slow Horses Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL client=qBittorrent drive-a download=media_a library=media_b COPY + Slow Horses Slow.Horses.S06E03.1080p.WEB.H264-CAKES.mkv client=qBittorrent drive-a download=media_a library=media_b COPY + Slow Horses Slow.Horses.S06E01.1080p.WEB.H264-CAKES.mkv client=Transmission drive-a download=media_a library=media_b COPY + Slow Horses Slow.Horses.S06E04.1080p.WEB.H264-CAKES.mkv client=Transmission drive-a download=media_a library=media_b COPY +== radarr: 2 import(s) + movie Hope: root=media_a tags=['drive-a'] + movie Matchbox the Movie: root=media_b tags=['drive-b'] + Hope Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264- client=qBittorrent drive-a download=media_a library=media_a HARDLINK + Matchbox the Movie Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5. client=qBittorrent drive-b download=media_b library=media_b HARDLINK + diff --git a/documentation/audits/media-all-drives-2026-10-14/E1-where-full.txt b/documentation/audits/media-all-drives-2026-10-14/E1-where-full.txt new file mode 100644 index 00000000..2c8a46f7 --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/E1-where-full.txt @@ -0,0 +1,96 @@ +== drive adatlemez (/mnt/felhom-drives/adatlemez/userdata/media) +== drive media_a (/mnt/felhom-drives/media_a/userdata/media) + -- movies/ (1 file(s)) + 4697.5 MB links=2 inode=4194391 movies/Hope (2026)/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L.mkv + -- torrents/ (16 file(s)) + 909.5 MB links=2 inode=4194364 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + 0.0 MB links=1 inode=4194376 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e01.1080p.web.h264-grace.nfo + 35.2 MB links=1 inode=4194366 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e01.1080p.web.h264-grace.sample.mkv + 3789.5 MB links=1 inode=4194398 torrents/tv/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb.mkv + 0.0 MB links=1 inode=4194400 torrents/tv/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb.nfo + 3931.2 MB links=1 inode=4194385 torrents/tv/Slow.Horses.S06E03.1080p.WEB.H264-CAKES/slow.horses.s06e03.1080p.web.h264-cakes.mkv + 0.0 MB links=1 inode=4194367 torrents/tv/Slow.Horses.S06E03.1080p.WEB.H264-CAKES/slow.horses.s06e03.1080p.web.h264-cakes.nfo + 85.8 MB links=1 inode=4194392 torrents/tv/Slow.Horses.S06E03.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e03.1080p.web.h264-cakes-sample.mkv + 0.0 MB links=1 inode=4194397 torrents/tv/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL/slow.horses.s06e02.proper.1080p.web.h264-ethel.nfo + 3758.3 MB links=1 inode=4194369 torrents/tv/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL.mkv + 77.7 MB links=1 inode=4194383 torrents/tv/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL/Sample/slow.horses.s06e02.proper.1080p.web.h264-ethel.sample.mkv + 720.3 MB links=2 inode=4194368 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + 0.0 MB links=1 inode=4194377 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e03.1080p.web.h264-grace.nfo + 21.7 MB links=1 inode=4194370 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e03.1080p.web.h264-grace.sample.mkv + 0.0 MB links=1 inode=4194405 torrents/movies/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L.nfo + 4697.5 MB links=2 inode=4194391 torrents/movies/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L.mkv + -- transmission/ (9 file(s)) + 4039.9 MB links=1 inode=4194396 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/slow.horses.s06e04.1080p.web.h264-cakes.mkv + 0.0 MB links=1 inode=4194399 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/slow.horses.s06e04.1080p.web.h264-cakes.nfo + 94.2 MB links=1 inode=4194395 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e04.1080p.web.h264-cakes-sample.mkv + 3859.1 MB links=1 inode=4194387 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/slow.horses.s06e01.1080p.web.h264-cakes.mkv + 0.0 MB links=1 inode=4194388 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/slow.horses.s06e01.1080p.web.h264-cakes.nfo + 104.1 MB links=1 inode=4194390 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e01.1080p.web.h264-cakes-sample.mkv + 0.0 MB links=1 inode=4194374 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e02.1080p.web.h264-grace.nfo + 829.6 MB links=2 inode=4194375 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv + 31.2 MB links=1 inode=4194373 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e02.1080p.web.h264-grace.sample.mkv + -- tv/ (3 file(s)) + 909.5 MB links=2 inode=4194364 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + 720.3 MB links=2 inode=4194368 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + 829.6 MB links=2 inode=4194375 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv +== drive media_b (/mnt/felhom-drives/media_b/userdata/media) + -- movies/ (1 file(s)) + 3393.8 MB links=2 inode=1048578 movies/Matchbox the Movie (2026)/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX.mkv + -- torrents/ (10 file(s)) + 3393.8 MB links=2 inode=1048578 torrents/movies/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX.mkv + 0.0 MB links=1 inode=1048579 torrents/movies/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX.nfo + 0.0 MB links=1 inode=131101 torrents/tv/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 1314.1 MB links=2 inode=131100 torrents/tv/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E01.13.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 813.6 MB links=2 inode=131110 torrents/tv/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E03.Rauhnacht.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131113 torrents/tv/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 956.5 MB links=2 inode=393221 torrents/tv/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E07.The.Baddest.Witch.of.Them.All.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=393223 torrents/tv/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 969.7 MB links=2 inode=393218 torrents/tv/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=393220 torrents/tv/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + -- transmission/ (8 file(s)) + 1274.2 MB links=2 inode=131103 transmission/tv/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E02.1.13.AM.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131104 transmission/tv/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 1164.1 MB links=2 inode=131107 transmission/tv/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131108 transmission/tv/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + 1149.4 MB links=2 inode=262146 transmission/tv/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E08.Hell.No.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=262147 transmission/tv/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 913.5 MB links=2 inode=131112 transmission/tv/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131114 transmission/tv/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + -- tv/ (13 file(s)) + 1164.1 MB links=2 inode=131107 tv/American Horror Story/Season 13/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1314.1 MB links=2 inode=131100 tv/American Horror Story/Season 13/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 913.5 MB links=2 inode=131112 tv/American Horror Story/Season 13/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 956.5 MB links=2 inode=393221 tv/American Horror Story/Season 13/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 813.6 MB links=2 inode=131110 tv/American Horror Story/Season 13/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1274.2 MB links=2 inode=131103 tv/American Horror Story/Season 13/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 969.7 MB links=2 inode=393218 tv/American Horror Story/Season 13/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1149.4 MB links=2 inode=262146 tv/American Horror Story/Season 13/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 3789.5 MB links=1 inode=524295 tv/Slow Horses/Season 6/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb.mkv + 3859.1 MB links=1 inode=524298 tv/Slow Horses/Season 6/Slow.Horses.S06E01.1080p.WEB.H264-CAKES.mkv + 4039.9 MB links=1 inode=524299 tv/Slow Horses/Season 6/Slow.Horses.S06E04.1080p.WEB.H264-CAKES.mkv + 3758.3 MB links=1 inode=524296 tv/Slow Horses/Season 6/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL.mkv + 3931.2 MB links=1 inode=524297 tv/Slow Horses/Season 6/Slow.Horses.S06E03.1080p.WEB.H264-CAKES.mkv + +== 61 file(s) on 3 drive(s) +== ONE FILE, TWO NAMES (hardlink — no extra copy): + drive media_a inode 4194391 (4697.5 MB): movies/…/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L.mkv <-> torrents/…/Hope.2026.720p.AMZN.WEB-DL.DDP5.1.Atmos.H.264-N1H4L.mkv + drive media_a inode 4194364 (909.5 MB): torrents/…/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + drive media_a inode 4194368 (720.3 MB): torrents/…/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + drive media_a inode 4194375 (829.6 MB): transmission/…/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv + drive media_b inode 1048578 (3393.8 MB): movies/…/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX.mkv <-> torrents/…/Matchbox.The.Movie.2026.720p.ATVP.WEB-DL.DDP5.1.Atmos.H.264-FLUX.mkv + drive media_b inode 131100 (1314.1 MB): torrents/…/American.Horror.Story.S13E01.13.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131110 (813.6 MB): torrents/…/American.Horror.Story.S13E03.Rauhnacht.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 393221 (956.5 MB): torrents/…/American.Horror.Story.S13E07.The.Baddest.Witch.of.Them.All.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 393218 (969.7 MB): torrents/…/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131103 (1274.2 MB): transmission/…/American.Horror.Story.S13E02.1.13.AM.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131107 (1164.1 MB): transmission/…/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 262146 (1149.4 MB): transmission/…/American.Horror.Story.S13E08.Hell.No.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131112 (913.5 MB): transmission/…/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 13 pair(s) +== LIBRARY FILES WITH LINK COUNT 1 (a copy, or its download is gone): + drive media_b: media_b/userdata/media/tv/Slow Horses/Season 6/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb.mkv (3789.5 MB) + drive media_b: media_b/userdata/media/tv/Slow Horses/Season 6/Slow.Horses.S06E01.1080p.WEB.H264-CAKES.mkv (3859.1 MB) + drive media_b: media_b/userdata/media/tv/Slow Horses/Season 6/Slow.Horses.S06E04.1080p.WEB.H264-CAKES.mkv (4039.9 MB) + drive media_b: media_b/userdata/media/tv/Slow Horses/Season 6/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL.mkv (3758.3 MB) + drive media_b: media_b/userdata/media/tv/Slow Horses/Season 6/Slow.Horses.S06E03.1080p.WEB.H264-CAKES.mkv (3931.2 MB) + diff --git a/documentation/audits/media-all-drives-2026-10-14/I-client-unavailable.txt b/documentation/audits/media-all-drives-2026-10-14/I-client-unavailable.txt index 247593ff..a865bcea 100644 --- a/documentation/audits/media-all-drives-2026-10-14/I-client-unavailable.txt +++ b/documentation/audits/media-all-drives-2026-10-14/I-client-unavailable.txt @@ -25,3 +25,10 @@ drwxrwsr-x 2 1000 1000 4096 Oct 14 16:54 /mnt/felhom-drives/media_a/userdata/med drwxrwsr-x 2 1000 1000 4096 Oct 14 16:54 /mnt/felhom-drives/media_b/userdata/media/torrents/tv drwxrwsr-x 2 1000 1000 4096 Oct 14 16:54 /mnt/felhom-drives/media_b/userdata/media/transmission/tv +drwxrwsr-x 2 abc users 4096 Oct 14 18:54 /mnt/felhom-drives/media_a/userdata/media/torrents/tv +drwxrwsr-x 2 abc users 4096 Oct 14 18:54 /mnt/felhom-drives/media_b/userdata/media/torrents/tv +CheckHealth -> 201 +health items: 0 +tags: Avatar: Seven Havens [] +tags: American Horror Story [] + diff --git a/documentation/audits/media-all-drives-2026-10-14/J-operator-test-snapshot-1.txt b/documentation/audits/media-all-drives-2026-10-14/J-operator-test-snapshot-1.txt new file mode 100644 index 00000000..db9eceeb --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/J-operator-test-snapshot-1.txt @@ -0,0 +1,10 @@ +SHOW Avatar: Seven Havens drive=media_a tags=['drive-a'] +SHOW American Horror Story drive=media_b tags=['drive-b'] +SHOW Slow Horses drive=media_b tags=['drive-a'] +QUEUE Slow Horses client=Transmission drive-a status=downloading on=media_a x2 +QUEUE Slow Horses client=qBittorrent drive-a status=downloading on=- x3 +media_a: torrents=5.2G transmission=1.9G tv=2.3G +media_b: torrents=3.8G transmission=4.2G tv=8.0G +/dev/sdc 98G 7.0G 86G 8% /mnt/felhom-drives/media_a +/dev/sdd 98G 8.0G 85G 9% /mnt/felhom-drives/media_b + diff --git a/documentation/audits/media-all-drives-2026-10-14/J-where-snapshot-1.txt b/documentation/audits/media-all-drives-2026-10-14/J-where-snapshot-1.txt new file mode 100644 index 00000000..c995aec2 --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/J-where-snapshot-1.txt @@ -0,0 +1,73 @@ +== drive adatlemez (/mnt/felhom-drives/adatlemez/userdata/media) +== drive media_a (/mnt/felhom-drives/media_a/userdata/media) + -- torrents/ (11 file(s)) + 909.5 MB links=2 inode=4194364 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + 0.0 MB links=1 inode=4194376 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e01.1080p.web.h264-grace.nfo + 35.2 MB links=1 inode=4194366 torrents/tv/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e01.1080p.web.h264-grace.sample.mkv + 720.3 MB links=2 inode=4194368 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + 0.0 MB links=1 inode=4194377 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e03.1080p.web.h264-grace.nfo + 21.7 MB links=1 inode=4194370 torrents/tv/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e03.1080p.web.h264-grace.sample.mkv + 3783.7 MB links=1 inode=4194398 torrents/.temp/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb/Slow.Horses.S06E05.Sayonara.1080p.ATVP.WEB-DL.DDP5.1.H.264-NTb.mkv + 3903.0 MB links=1 inode=4194385 torrents/.temp/Slow.Horses.S06E03.1080p.WEB.H264-CAKES/slow.horses.s06e03.1080p.web.h264-cakes.mkv + 85.8 MB links=1 inode=4194392 torrents/.temp/Slow.Horses.S06E03.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e03.1080p.web.h264-cakes-sample.mkv + 3706.6 MB links=1 inode=4194369 torrents/.temp/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL.mkv + 77.7 MB links=1 inode=4194383 torrents/.temp/Slow.Horses.S06E02.PROPER.1080p.WEB.h264-ETHEL/Sample/slow.horses.s06e02.proper.1080p.web.h264-ethel.sample.mkv + -- transmission/ (9 file(s)) + 4039.9 MB links=1 inode=4194396 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/slow.horses.s06e04.1080p.web.h264-cakes.mkv.part + 0.0 MB links=1 inode=4194399 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/slow.horses.s06e04.1080p.web.h264-cakes.nfo + 94.2 MB links=1 inode=4194395 transmission/tv/Slow.Horses.S06E04.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e04.1080p.web.h264-cakes-sample.mkv + 3859.1 MB links=1 inode=4194387 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/slow.horses.s06e01.1080p.web.h264-cakes.mkv.part + 0.0 MB links=1 inode=4194388 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/slow.horses.s06e01.1080p.web.h264-cakes.nfo + 104.1 MB links=1 inode=4194390 transmission/tv/Slow.Horses.S06E01.1080p.WEB.H264-CAKES/Sample/slow.horses.s06e01.1080p.web.h264-cakes-sample.mkv + 0.0 MB links=1 inode=4194374 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/avatar.seven.havens.s01e02.1080p.web.h264-grace.nfo + 829.6 MB links=2 inode=4194375 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv + 31.2 MB links=1 inode=4194373 transmission/tv/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE/Sample/avatar.seven.havens.s01e02.1080p.web.h264-grace.sample.mkv + -- tv/ (3 file(s)) + 909.5 MB links=2 inode=4194364 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + 720.3 MB links=2 inode=4194368 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + 829.6 MB links=2 inode=4194375 tv/Avatar - Seven Havens/Season 1/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv +== drive media_b (/mnt/felhom-drives/media_b/userdata/media) + -- torrents/ (8 file(s)) + 0.0 MB links=1 inode=131101 torrents/tv/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 1314.1 MB links=2 inode=131100 torrents/tv/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E01.13.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 813.6 MB links=2 inode=131110 torrents/tv/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E03.Rauhnacht.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131113 torrents/tv/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 956.5 MB links=2 inode=393221 torrents/tv/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E07.The.Baddest.Witch.of.Them.All.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=393223 torrents/tv/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 969.7 MB links=2 inode=393218 torrents/tv/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=393220 torrents/tv/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + -- transmission/ (8 file(s)) + 1274.2 MB links=2 inode=131103 transmission/tv/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E02.1.13.AM.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131104 transmission/tv/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 1164.1 MB links=2 inode=131107 transmission/tv/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131108 transmission/tv/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + 1149.4 MB links=2 inode=262146 transmission/tv/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E08.Hell.No.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=262147 transmission/tv/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.nfo + 913.5 MB links=2 inode=131112 transmission/tv/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv + 0.0 MB links=1 inode=131114 transmission/tv/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.nfo + -- tv/ (8 file(s)) + 1164.1 MB links=2 inode=131107 tv/American Horror Story/Season 13/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1314.1 MB links=2 inode=131100 tv/American Horror Story/Season 13/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 913.5 MB links=2 inode=131112 tv/American Horror Story/Season 13/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 956.5 MB links=2 inode=393221 tv/American Horror Story/Season 13/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 813.6 MB links=2 inode=131110 tv/American Horror Story/Season 13/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1274.2 MB links=2 inode=131103 tv/American Horror Story/Season 13/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 969.7 MB links=2 inode=393218 tv/American Horror Story/Season 13/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 1149.4 MB links=2 inode=262146 tv/American Horror Story/Season 13/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + +== 47 file(s) on 3 drive(s) +== ONE FILE, TWO NAMES (hardlink — no extra copy): + drive media_a inode 4194364 (909.5 MB): torrents/…/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E01.1080p.WEB.h264-GRACE.mkv + drive media_a inode 4194368 (720.3 MB): torrents/…/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E03.1080p.WEB.h264-GRACE.mkv + drive media_a inode 4194375 (829.6 MB): transmission/…/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv <-> tv/…/Avatar.Seven.Havens.S01E02.1080p.WEB.h264-GRACE.mkv + drive media_b inode 131100 (1314.1 MB): torrents/…/American.Horror.Story.S13E01.13.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131110 (813.6 MB): torrents/…/American.Horror.Story.S13E03.Rauhnacht.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E03.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 393221 (956.5 MB): torrents/…/American.Horror.Story.S13E07.The.Baddest.Witch.of.Them.All.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E07.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 393218 (969.7 MB): torrents/…/American.Horror.Story.S13E05.Date.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E05.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131103 (1274.2 MB): transmission/…/American.Horror.Story.S13E02.1.13.AM.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E02.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131107 (1164.1 MB): transmission/…/American.Horror.Story.S13E04.Is.That.All.There.Is.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 262146 (1149.4 MB): transmission/…/American.Horror.Story.S13E08.Hell.No.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E08.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + drive media_b inode 131112 (913.5 MB): transmission/…/American.Horror.Story.S13E06.The.Return.of.Devils.Night.1080p.DSNP.WEB-DL.DD5.1.H.264-playWEB.mkv <-> tv/…/American.Horror.Story.S13E06.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv + 11 pair(s) +== LIBRARY FILES WITH LINK COUNT 1 (a copy, or its download is gone): + diff --git a/documentation/audits/media-all-drives-2026-10-14/K-plex-empty.txt b/documentation/audits/media-all-drives-2026-10-14/K-plex-empty.txt new file mode 100644 index 00000000..5576b073 --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/K-plex-empty.txt @@ -0,0 +1,47 @@ +--- libraries +count 2 +1 movie Movies tv.plex.agents.movie Plex Movie refreshing= False ['/mnt/felhom-drives/media_a/userdata/media/movies', '/mnt/felhom-drives/media_b/userdata/media/movies'] +2 show TV Shows tv.plex.agents.series Plex TV Series refreshing= False ['/mnt/felhom-drives/media_a/userdata/media/tv', '/mnt/felhom-drives/media_b/userdata/media/tv'] +section 1 items: 0 [] +section 2 items: 0 [] +--- what plex sees +uid=0(root) gid=0(root) groups=0(root) +/mnt/felhom-drives/media_a/userdata/media/tv: +total 12 +drwxrwsr-x 3 root plex 4096 Oct 14 19:07 . +drwxrwsr-x 16 root plex 4096 Oct 14 17:44 .. +drwxrwsr-x 3 plex plex 4096 Oct 14 19:07 Avatar - Seven Havens + +/mnt/felhom-drives/media_b/userdata/media/tv: +total 16 +drwxrwsr-x 4 root plex 4096 Oct 14 19:10 . +drwxrwsr-x 16 root plex 4096 Oct 14 15:59 .. +/mnt/felhom-drives/media_b/userdata/media/tv +/mnt/felhom-drives/media_b/userdata/media/tv/American Horror Story +/mnt/felhom-drives/media_b/userdata/media/tv/American Horror Story/Season 13 +/mnt/felhom-drives/media_b/userdata/media/tv/American Horror Story/Season 13/American.Horror.Story.S13E04.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv +/mnt/felhom-drives/media_b/userdata/media/tv/American Horror Story/Season 13/American.Horror.Story.S13E01.1080p.DSNP.WEB-DL.DDP5.1.H.264-PlayWEB.mkv +--- plex log +Oct 14, 2026 18:30:08.590 [130702724381496] DEBUG - NotificationStream: Removing because of error +Oct 14, 2026 18:35:42.304 [130702724381496] DEBUG - NotificationStream: Removing because of error +Oct 14, 2026 18:35:53.917 [130702734465848] WARN - JobManager: Could not find job for handle 725 +Oct 14, 2026 19:05:10.735 [130702611520312] WARN - NAT: PMP, got an error: Not Supported by gateway. +Oct 14, 2026 19:05:11.257 [130702677613368] WARN - NAT: PMP, got an error: Not Supported by gateway. +Oct 14, 2026 19:13:19.405 [130702673394488] WARN - [Req#532] QueryParser: Invalid field 'contentDirectoryID' found, ignoring. +Oct 14, 2026 19:13:19.405 [130702673394488] WARN - [Req#532] QueryParser: Invalid field 'pinnedContentDirectoryID' found, ignoring. +Oct 14, 2026 19:13:22.641 [130702664956728] ERROR - [Req#53e] Unknown metadata type: folder +Oct 14, 2026 19:13:29.799 [130702692379448] ERROR - [Req#542] Unknown metadata type: folder +Oct 14, 2026 19:13:45.289 [130702726490936] DEBUG - NotificationStream: Removing because of error +Oct 14, 2026 19:15:30.414 [130702724381496] DEBUG - NotificationStream: Removing because of error +Oct 14, 2026 19:15:36.833 [130702664956728] WARN - [Req#57d] Missing X-Plex-Container-Size header. This will fail with status code 400 in the future. +Oct 14, 2026 19:15:36.932 [130702664956728] WARN - [Req#580] Missing X-Plex-Container-Size header. This will fail with status code 400 in the future. +Oct 14, 2026 19:15:37.021 [130702664956728] WARN - [Req#583] Invalid library section ID 3 passed. +Oct 14, 2026 19:15:37.139 [130702664956728] WARN - [Req#586] Invalid library section ID 4 passed. + +prefs: (absent = Plex default) +refresh TV -> 200 +refresh Movies -> 200 + +section 1 items: 2 ['Hope', 'Matchbox the Movie'] +section 2 items: 3 ['American Horror Story', 'Avatar: Seven Havens', 'Slow Horses'] + diff --git a/documentation/audits/media-all-drives-2026-10-14/tools/landed.py b/documentation/audits/media-all-drives-2026-10-14/tools/landed.py new file mode 100644 index 00000000..00157f13 --- /dev/null +++ b/documentation/audits/media-all-drives-2026-10-14/tools/landed.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""landed.py — Part E1: per imported episode/film, where the download was, where the library file is, hardlink or copy, +and which download app. Source: Sonarr's and Radarr's own `downloadFolderImported` history (droppedPath, importedPath, +downloadClientName) + a stat of both files NOW. Run INSIDE the guest (run_in_guest.py landed.py). Keys read at runtime, +never printed.""" +import json, os, re, subprocess, urllib.request + + +def sh(c): + return subprocess.run(c, shell=True, capture_output=True, text=True).stdout.strip() + + +def get(app, port, path): + key = re.search(r"([^<]+)", open(f"/var/lib/docker/volumes/{app}_{app}_config/_data/config.xml").read()).group(1) + ip = sh(f"docker inspect {app} -f '{{{{range .NetworkSettings.Networks}}}}{{{{.IPAddress}}}}{{{{end}}}}'") + req = urllib.request.Request(f"http://{ip}:{port}/api/v3/{path}", headers={"X-Api-Key": key, "Host": app}) + return json.load(urllib.request.urlopen(req, timeout=60)) + + +def drive(p): + return p.split("/")[3] if p and p.startswith("/mnt/felhom-drives/") else "?" + + +def st(p): + try: + s = os.stat(p) + return (s.st_dev, s.st_ino, s.st_nlink) + except OSError: + return None + + +for app, port, kind in (("sonarr", 8989, "series"), ("radarr", 7878, "movie")): + tags = {t["id"]: t["label"] for t in get(app, port, "tag")} + items = {x["id"]: x for x in get(app, port, kind)} + hist = get(app, port, "history?pageSize=500&eventType=3")["records"] # 3 = downloadFolderImported + print(f"== {app}: {len(hist)} import(s)") + for x in items.values(): + print(f" {kind} {x['title']}: root={drive(x.get('rootFolderPath') or x.get('path'))} tags={[tags.get(i, i) for i in x['tags']]}") + for h in sorted(hist, key=lambda h: h["date"]): + d = h["data"] + src, dst = d.get("droppedPath"), d.get("importedPath") + a, b = st(src), st(dst) + if a and b and a[:2] == b[:2]: + how = "HARDLINK" + elif b and b[2] == 1: + how = "COPY" if not a or a[:2] != b[:2] else "?" + else: + how = "library file gone" if not b else "?" + title = items.get(h.get("seriesId") or h.get("movieId"), {}).get("title", "?") + print(f" {title[:24]:24} {os.path.basename(dst or '')[:46]:46} client={d.get('downloadClientName'):22} " + f"download={drive(src)} library={drive(dst)} {how}") diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index 4dffb328..625510dc 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -124,7 +124,7 @@ stopping line that lies. | **R-494** | Install & onboarding | P4 | **NARROWED 2026-09-14 by operator ruling → [P3-LOW] the hub COULD create the tunnel at customer creation, for a domain already on Cloudflare. Not blocking: every customer has their own domain and the operator creates the tunnel per day-0 A.1 (`architecture/01-topology-and-trust.md`).** *Original finding, kept:* **[P1-HIGH] A new customer's dashboard has NO reachable address unless the operator hand-makes a Cloudflare tunnel — the link in the setup-code mail is dead.** MEASURED 2026-09-14 on a fresh install from the public ISO (drill intervention **I1**): the claim mail points at `https://felhom.drill0242.felhom.eu`; that name has **no A and no AAAA** record (`dig @1.1.1.1`, control `felhom.enkisfelhom.hu` resolves); the hub has **no tunnel- or DNS-creation code** (`hub/internal/cloudflare/` holds only geo-rule removal; `cf_tunnel_token` is a pasted, optional form field, `configs.go:1478`) — day-0 runbook A.1 makes it a manual Cloudflare-dashboard step that nothing on the customer-create page asks for; the box's own split-horizon resolver on the appliance LAN IP answered `google.com` but not the dashboard name at 13:27:39Z; the agent applied the record at **13:27:44Z** (`lanresolver: applied split-horizon record … ip=192.168.0.158`, 3 m 46 s after the controller started), so the box CAN answer the name — **but only to a device that uses the box as its DNS server, and no document, screen or mail tells a household to do that**; the router and the installer-offered DNS answer nothing. The page was reachable only at the guest's LAN address with the name forced (`curl --resolve …:443:192.168.0.158`). **A volunteer could not have done that.** **What it needs:** an operator ruling — the hub creates the tunnel and DNS at customer creation, or the product gives a household a LAN address that works with no DNS change. | **READY — rank P3-LOW; owner: CC** **Re-ranked 2026-10-03: P3→P4: operator-side automation; the operator creates the tunnel by hand per the day-0 runbook.** | — | — | CC | | **R-504** | Install & onboarding | P4 | **[P3-LOW] `iso.felhom.eu` cannot show an index page on its own — its root returns 404, and the download page lives on the website instead.** MEASURED 2026-09-14: `https://iso.felhom.eu/` and `/index.html` → 404; only named objects answer. The host is an R2 bucket behind a custom domain; whether R2 would serve an uploaded `index.html` at `/` was **not measured** (uploading anything to the public bucket is a publication). The ISO v1.27.0 task puts the Hungarian download page at `felhom.eu/letoltes` (published with the ISO, after the operator's yes). **Remaining:** a redirect from `iso.felhom.eu/` to that page needs a Cloudflare rule the session has no credential for. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator (Cloudflare rule)** **Re-ranked 2026-10-03: P3→P4: households are sent to the website's download page; the bare address is cosmetic.** | — | — | operator | -## Apps & catalog — 18 rows (P2 3, P3 10, P4 5) +## Apps & catalog — 19 rows (P2 3, P3 11, P4 5) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| @@ -141,6 +141,7 @@ stopping line that lies. | **R-1028** | Apps & catalog | P3 | **Plex's claim code can run out during the install, and the box cannot recover it.** plex.tv's code lives 4 minutes from the moment the household copies it; the clock covers the wizard, the image pull (`plexinc/pms-docker` is 351 MB, measured) and the first start. Plex reads `PLEX_CLAIM` only on its first run, and the field is `locked_after_deploy` — so a late code leaves an unclaimed server and the only way back is remove + install again. Reported by the operator during the 2026-10-14 test; on Tester 1's line the pull+start took 8.5 s and the claim worked (`audits/media-all-drives-2026-10-14/``G-auth/G3-plex-claim.txt`), so it bites on a slow line or a slow hand. | **READY** — filed 2026-10-14 | — | Pull the image BEFORE asking for the code (or ask for it on a step after the pull), and give the household a „claim again” action that sets the code on the running server (Plex's `/myplex/claim?token=` call) | CC | | **R-1029** | Apps & catalog | P3 | **Plex's folder picker shows the drives as identical „media” folders.** With one bind per drive at the same path (`/mnt/felhom-drives//userdata/media`), the leaf of every library folder is `media`; the drive's name sits two levels up, so in Plex's picker the household sees several folders all called „media” (reported by the operator during the 2026-10-14 test on Tester 1). It conflicts with `15` §2 reason 2 (the same path everywhere). | **READY** — filed 2026-10-14 | the layout decision (STATUS D9) | Decide in `15` §2: the players (`:ro`, never linked) may get a readable path per drive (e.g. `/media/`) without breaking the hardlink rule, which binds only the download/library apps | CC | | **R-1036** | Apps & catalog | P3 | **The apps page lags the catalog by two apps.** `app-catalog-felhom.eu/templates/` holds **64** apps; `/alkalmazasok` and `/en/apps` render **63** cards, one of which (`filebrowser`) is built in and not a catalog template — so **62 catalog apps are listed**. Missing: **`plant-it`** and **`wger`**, both in the catalog since 2026-10-06/08. Their website assets are ALREADY present (`plant-it-logo.svg` + 3 screenshots, `wger-logo.png` + 3 screenshots, renamed to the catalog slug by `a3507761`, 2026-10-08) — only the cards were never written, so this is not a new-asset job. Found 2026-10-14 while reconciling the app count for the „felhő tárhely” page, where four places said **60** and the rest said **62**. **Done in that session:** every stated count on the site set to **62** (`index.html`, `szolgaltatasok.html`, `en/services.html` were 60), which is what the apps page actually shows — so no visitor can count the cards and find the number wrong. **62 is still not the catalog's number.** **To close:** write the two cards on both apps pages (gate 15 keeps the two pages' app sets equal, so they move together), then raise every stated count 62 → 64 in the same commit. **The operator chose this split at the 2026-10-14 STOP** over doing it inside the SEO change. | **OPEN** | — | write the `plant-it` + `wger` cards on both apps pages, then 62 → 64 everywhere, one commit | CC | +| **R-1037** | Apps & catalog | P3 | **Plex never notices new files: its automatic scan is off by default.** MEASURED 2026-10-14 on Tester 1 (`audits/media-all-drives-2026-10-14/K-plex-empty.txt`): the operator made the TV and Movies libraries with both drives' folders at ~18:35; 16 episodes and 2 films were imported from 19:07 on; at 19:15 Plex still showed 0 items, no scan running, and `Preferences.xml` carries neither `FSEventLibraryUpdatesEnabled` nor `ScheduledLibraryUpdatesEnabled` (Plex's defaults: both off). One manual `/library/sections//refresh` → 3 shows and 2 films. A household sees an empty Plex and concludes the box is broken. | **READY** — filed 2026-10-14 | — | Seed „Scan my library automatically” (and a periodic scan) at install, or let Sonarr/Radarr tell Plex after each import (their „Connect → Plex Media Server”, part of R-1024); decide with `15` §6 | CC | | **R-76** | Apps & catalog | P4 | **FileBrowser-created folders break the setgid chain, and a drop-zone's mode is not stable** **MIGRATED FROM `ROADMAP.md` 2026-08-22 (R-369) — originally filed 2026-07-26, size S, roadmap state `idea (surfaced by the R-75 spike, 2026-07-26)`.** Moved verbatim; nothing added or reinterpreted. The roadmap keeps its copy as history, marked moved. | **OPEN — migrated from ROADMAP 2026-08-22, rank unchanged** **2026-10-06 night: not a catalog fix** — the setgid chain is set by the controller's FileBrowser setup; a controller row. | — | Two related findings from `audits/SPIKE-catalog-data-paths-2026-07-26.md` P3/P5, both **pre-existing** and deliberately left alone by that spike. **(a)** FileBrowser Quantum 1.3.3 creates files `0644` and folders `0755` and does **not** propagate the setgid bit — even though the entrypoint wrapper's `umask 002` really is in effect (`/proc/1/status` `Umask: 0002`). Group inheritance itself works (a file uploaded into a 2775 group-100 dir landed group 100, not the process gid 1000), so the convention's *group* half holds and only its *mode* half is lost. The consequence is proven with a control: inside a UI-created `0755` folder a gid-1000 process's file landed group **1000**, while the identical write into the 2775 parent landed group **100**. So **any folder a customer creates through FileBrowser breaks the shared-group chain one level down.** Latent today — every userdata-touching catalog app that declares an identity declares uid/gid **1000**, the same uid FileBrowser runs as, so owner permissions mask it; it bites the day a content app runs as a different non-root uid with gid 1000. The comment at `infra/infra.go:156` is right that the image ignores `-e UMASK` but does not say t | CC | | **R-707** | Apps & catalog | P4 | **[P2] 37 apps still start with a login a stranger can take (`09` §3 decision 45).** Audit of all 53 apps: `app-catalog-felhom.eu/FIRST-ADMIN.md` (class, fix route, status, measured or read). Open: **3 hard-coded defaults** — calibre-web (`admin / admin123`, measured working on demo-hp and 9202; its own `cps.py -s` route needs a generated password WITH a special character — our generator is letters+digits, a controller change), mealie (`changeme@example.com / MyPassword`), wger (`admin / adminadmin`); **34 open first-run screens** (the first visitor creates the admin: actualbudget, adventurelog, audiobookshelf, calcom, docmost, emby, ghost, gitea, gramps-web, home-assistant, homebox, immich, jellyfin, komga, n8n, navidrome, opengist, outline, papra, plant-it, radarr, rallly, recipe-importer, romm, seerr, sonarr, sparkyfitness, tandoor, termix, uptime-kuma, vikunja, wanderer, wishlist, zipline). **Stale notes:** romm's `default_creds` `admin / admin` answers 401 on demo-hp (like a wrong password) — the page now warns with a login that does not exist; zipline's looks stale too. **Measured on demo-hp 2026-09-28 (read-only):** bookstack's default still logs in on the INSTALLED app (the fix is for new installs; the page now warns). Each fix: route (a) env or (b) the app's own CLI/API via `after_install:`, proven on 9202 with the default failing and the generated password working; route (c) a page sentence. Several sessions (operator, 2026-09-28). **2026-09-29 (controller v0.280.0, catalog `d0e7e2e`):** every class-3 app fixed — mealie, wger, calibre-web by `after_install` (calibre-web with the new `password:24:special`), proven on 9202 fresh installs (`audits/login-gate-2026-09-29/D/`); the setup gate (decision 46, spike PASSED) built and live on immich, n8n, audiobookshelf (probes measured) and uptime-kuma (button) (`…/C/`); romm's and zipline's stale notes removed. **Left: 30 class-4 apps** — gate each (probe measured on 9202 where one exists — 11 upstream candidates listed in `…/B/B-VERDICT.md` §3; the button otherwise). **2026-09-29 afternoon (controller v0.281.0, catalog `6faf432`):** 28 more class-4 apps gated — 32 of 34 — each proven on 9202 (`audits/gate-rollout-2026-09-29/`B): stranger → gate page / 401, household reached the first-setup screen, the gate opened (9 by a measured probe, the rest by the press), the app answered after. seerr, outline, rallly: gated, their opening needs a media server / e-mail (not proven). **Left:** wanderer (R-714); plant-it is not installable. | **NARROWED** (2026-10-03 triage: the row's verdict was finished, but it names open work no other row carries — seerr, outline and rallly are gated, but the gate OPENING is not proven (needs a media server / e-mail)) — **CLOSED — 2026-09-29 (the rest → R-714)** | — | — | CC | | **R-905** | Apps & catalog | P4 | **wger's collected style files (283 MB) go into every wger backup, though the app rebuilds them at every start.** Since R-762's fix (`DJANGO_DEBUG=False` + `collectstatic`, catalog `cf1ed43`) the static files sit in a named volume that the backup legs copy like data (measured 283 MB, `audits/design-build-2026-10-06/`); `collectstatic` regenerates them, so they are rebuildable bytes in every Tier-1 unit, Tier-2 copy and off-site snapshot. wger is `lifecycle: hidden` and no box runs it (hub read 2026-10-08). Options to weigh: a non-backed-up volume class for regenerable data, or an anonymous volume. Found by the R-762 helpers 2026-10-08. | **OPEN — needs a design before wger is shown** | — | Design the „regenerable volume" exclusion (catalog + controller backup legs) | CC |