From 5968cf47babb6f43fd2e329100d3df0f9c758988 Mon Sep 17 00:00:00 2001 From: "Bauer, Georg" Date: Wed, 22 Jul 2026 15:15:47 +0200 Subject: [PATCH] Drop the media translation delete button from the spec; scripting API remains the only delete path. Co-Authored-By: Claude Fable 5 --- specs/action_patterns.allium | 1 - specs/editor_media.allium | 18 ++++-------------- specs/engine_side_effects.allium | 2 ++ 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/specs/action_patterns.allium b/specs/action_patterns.allium index a59e0ac..9be282d 100644 --- a/specs/action_patterns.allium +++ b/specs/action_patterns.allium @@ -224,7 +224,6 @@ config { ConfirmationAssignment(action: "menu_item_delete", pattern: none), ConfirmationAssignment(action: "metadata_diff_field_sync", pattern: none), ConfirmationAssignment(action: "import_execute", pattern: none), - ConfirmationAssignment(action: "media_translation_delete", pattern: none), ConfirmationAssignment(action: "media_unlink", pattern: none) } } diff --git a/specs/editor_media.allium b/specs/editor_media.allium index b63a319..274e806 100644 --- a/specs/editor_media.allium +++ b/specs/editor_media.allium @@ -105,7 +105,6 @@ surface MediaEditorSurface { MediaLinkToPostRequested(editor.media_id) MediaTranslationEditClicked(editor.media_id, language) MediaTranslationRefreshClicked(editor.media_id, language) - MediaTranslationDeleteClicked(editor.media_id, language) MediaUnlinkPostRequested(editor.media_id, post_id) MediaDeleteConfirmed(editor.media_id) TranslationEditModalSaved(editor.media_id, language, title, alt, caption) @@ -140,7 +139,10 @@ surface MediaEditorSurface { @guarantee TranslationsSection -- Shown only when language is set. -- List of existing translations: flag emoji + language name + title. - -- Per-translation actions: click to edit (opens modal), refresh button, delete button. + -- Per-translation actions: click to edit (opens modal), refresh button. + -- No delete action; translations are only removed via the scripting + -- API (script.allium bds.media.delete_translation) or when the + -- media item itself is deleted. -- "No translations" message when list is empty. @guarantee TranslationEditModal @@ -306,15 +308,3 @@ rule MediaTranslationRefresh { -- overwrites the existing translation fields and rewrites the -- translated sidecar } - -rule MediaTranslationDelete { - when: MediaTranslationDeleteClicked(media_id, language) - let item = media/Media{id: media_id} - let translation = media/MediaTranslation{media: item, language: language} - -- No confirmation dialog (action_patterns.allium - -- confirmation_assignments: media_translation_delete) - ensures: not exists translation - ensures: MediaTranslationDeleted(item, language) - -- engine_side_effects.allium DeleteMediaTranslationSideEffects - -- deletes the translated sidecar {path}.{lang}.meta -} diff --git a/specs/engine_side_effects.allium b/specs/engine_side_effects.allium index 7e63c29..ba229fe 100644 --- a/specs/engine_side_effects.allium +++ b/specs/engine_side_effects.allium @@ -280,6 +280,8 @@ rule UpsertMediaTranslationSideEffects { rule DeleteMediaTranslationSideEffects { when: MediaTranslationDeleted(media, language) + -- No UI affordance; reached only via the scripting API + -- (script.allium bds.media.delete_translation) ensures: TranslatedSidecarDeleted(media, language) }