What's new
docker pull ghcr.io/new-usemame/calibre-web-nextgen:v4.0.71
(or :latest)
Books deleted from CW now actually disappear from the Kobo device
If you've deleted books from your CW library and noticed they linger on your Kobo forever — requiring a manual long-press → archive on the device every time — this release closes the loop. The Kobo sync response now emits a DeletedEntitlement for each book hard-deleted from CW, so the device archives its local copy on the next sync without any user action.
Root cause: the Kobo protocol needs a book's UUID to address a DeletedEntitlement, but the calibre metadata.db row was destroyed before any sync handler could capture it, and kobo_synced_books only stored (user_id, book_id). The device interpreted absence-from-sync-response as "still there, nothing changed," not as deletion.
Fix: a new kobo_deleted_book tombstone table snapshots (user_id, book_uuid, deleted_at) at delete time for every user who had the book synced. The sync handler emits DeletedEntitlement for each affected user's next sync, advancing the device's archive_last_modified cursor past the tombstone so each device sees each one exactly once.
This closes the fourth and final bug from the 2026-05-17 MITM-captured Kobo sync cluster. The previous three (ghost-shelf 404 retry, two-axis cursor latent loop, magic-shelf orphan after toggle off) shipped in v4.0.70.
Upgrade notes
Existing installs get the new table automatically on first boot via a one-time idempotent migration. No manual steps required.