Deleting a content entity translation leaves its auto-save snapshot behind; publishing resurrects the deleted translation
### Overview Deleting a translation of a Canvas page does not delete that translation's auto-save snapshot. The next publish of the entity's pending changes then silently re-creates the deleted translation from the stale snapshot — the editorial decision to delete the translation is undone without any warning or conflict. Deleting the *whole* entity correctly discards its entire pending-changes group (all per-translation snapshots). Deleting a *single translation* fires `hook_entity_translation_delete()`, which canvas does not implement, so the deleted translation's snapshot survives in the auto-save store. It is not flagged as a conflict either, so publishing proceeds normally. ### Steps to reproduce Verified with a kernel test against the auto-save HTTP API: 1. Install canvas, language and content_translation; add Spanish; enable translation for Canvas pages (the default symmetrical settings). 2. Create a Canvas page in English and publish it. 3. Add a Spanish translation and save it. 4. In the Canvas editor, edit the English and the Spanish translations, so both have auto-save snapshots. Do not publish. ← This can't happen manually, but as a result of component instance updates: add a new text prop to a component you are using in the page. 5. Delete the Spanish translation (Translate tab → Delete translation). 6. Publish the page's pending changes. Result: the publish request returns 200, and the entity has a Spanish translation again, rebuilt from the stale snapshot. No conflict is reported at any point. The resurrection happens in `ApiAutoSaveController::applyAutoSaveTranslationSnapshots()`: every stored snapshot of the entity's translation group is applied onto the freshly loaded entity, and a snapshot whose langcode no longer exists on the entity triggers the `addTranslation()` fallback. ### Proposed resolution Implement `hook_entity_translation_delete()` to discard the deleted translation's auto-save snapshot, mirroring the existing whole-entity cleanup on `hook_entity_delete()`. ### User interface changes None. ### Release notes snippet Deleting a translation of a Canvas page now also discards that translation's unpublished draft, so publishing no longer restores the deleted translation.
issue