.changelog/3421.md
isDownloaded = false, requiresSync = true); games with no remote copy are hard-deleted with full related-object cleanup (save states, cheats, recent plays, screenshots); standalone save-state and BIOS file deletions mark the respective records unavailable (isDownloaded = false)fileDeletedPublisher and fileMovedPublisher let SwiftUI and UIKit subscribers react to file-lifecycle events in real time, for both the legacy and modern server backendswebUploader:didDeleteItemAtPath:, webUploader:didMoveItemFromPath:toPath:, davServer:didDeleteItemAtPath:, and davServer:didMoveItemFromPath:toPath: in PVWebServer.m were NSLog-only no-ops; they now post typed notifications consumed by PVWebFileEventObserverPVWebServer.m and PVWebServerManager.swift previously used raw string literals for delete/move notification names; they now use typed NSString *const / Notification.Name constants, eliminating the risk of silent name drift