263799adcd
migrateUsernamesAtRest only swept state.entries (live rows), so a soft-deleted entry kept its cleartext username in the DB until purge. Now it also fetches + decrypts the trash (GET /entries?deleted=1) and includes those rows in the sweep. The PUT updates the row's fields without touching `deleted`, so the entry stays in the trash; trashed rows aren't in the sync snapshot, so no churn. Surfaced by a lingering cleartext username on a trashed test entry. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>