getLibraryRoot() returned "" after DirectoryPath was removed from config.toml during multi-library migration. M3U8 relative paths could not be resolved to absolute paths, causing every playlist track to appear as phantom. Now falls back to the first library path from the database when the legacy config field is empty.