Summary
This PR is a follow-up to #717. There was an oversight on my end around filesystems that cannot provide the durable physical identity or proven mutation semantics required for destructive operations. This can include storage such as CIFS/SMB and NFS, depending on how it is mounted and which capabilities it exposes.
These filesystems are now treated as limited rather than broken. Reading and scanning remain available when they can be performed safely, while filesystem mutation stays disabled when Listenarr cannot prove it is safe. Existing files on scan-only storage can still be registered in place without being moved or copied.
Storage that does expose the required identity and mutation guarantees, including the ext4-backed Docker storage and the NFSv4/CIFS configurations tested here, is now fixed and supports normal filesystem operations.
This PR also keeps configured root case semantics authoritative during manual import, preserves explicit Library Import destinations and existing in-place paths, fixes preview-path relative-path generation, rejects unsafe physical mutation before durable work is created, and adds a guided UX for resolving Auto case semantics when the filesystem reports a usable detected value but mutation semantics remain unproven.
Fixes #776.
Fixes #798.
Fixes #815.
Fixes #817.
Fixes #820.
Fixes #823.
Changes
Added
- Added protocol-2 durable parent-directory generation proofs for markerless file mutation recovery.
- Added pinned, no-follow, handle-relative traversal for move publication, cleanup, scanning, and generation validation.
- Added scan-only handling for
IdentityUnsupportedstorage when safe pinned reads are available. - Added guided confirmation for roots where
Autodetects a concrete case-sensitivity mode but mutation semantics remain unproven.- The UI can confirm the detected value.
- The root is updated metadata-only.
- A focused audiobook scan is run.
- The orig...
Automated Canary build