controller v0.264.0: the household is told when an update is undone or held, in its language
gates / gates (push) Successful in 25s

app_update_undone / app_update_held events (09 decision 15), on by
default and seeded once on existing boxes; R-606 update sentences as
key+args rendered per reader; R-646 startup applied-meta backfill for
apps current with the catalog; R-620 a disabled notifier WARNs once per
event type. Needs hub v0.120.0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-23 13:51:21 +02:00
parent c3a2aba0d2
commit bc278944a3
27 changed files with 1086 additions and 86 deletions
+38 -1
View File
@@ -1356,6 +1356,7 @@
"event.app_deploy_started": "App install started: %s",
"event.app_deployed": "App installed: %s",
"event.app_removed": "App removed: %s",
"event.app_update_undone": "The update of %s at %s did not work. The box put back the previous version and its data automatically — nothing was lost, and there is nothing you need to do.",
"event.backup_target_absent": "The whole-system backup drive is not available: %s (%s)",
"event.backup_target_restored": "The whole-system backup drive is available again: %s (%s)",
"event.controller_started": "Controller started (%s)",
@@ -1477,6 +1478,15 @@
"func.time.tomorrow_at": "tomorrow %s",
"func.time.yesterday": "yesterday",
"health.no_probe_container": "No health check ran: no matching container.",
"hold.copy_holds.db_only": "holds only the settings and the database, not the files",
"hold.copy_holds.files": "holds the settings, the database and the files",
"hold.copy_holds.volumes": "holds the settings, the database and the data volumes",
"hold.update.sentence": "The update of %s at %s did not succeed, and the app did not start on the new version. The app stays stopped for safety, so that its data is not damaged. It can be restored on the Backups page from this backup: %s, %s — this copy %s.",
"hold.update.sentence_legacy": "The update of %s at %s did not succeed, and the app did not start on the new version. The app stays stopped for safety, so that its data is not damaged. It can be restored on the Backups page from the backup of %s.",
"hold.update.sentence_tier": "The update of %s at %s did not succeed, and the app did not start on the new version. The app stays stopped for safety, so that its data is not damaged. It can be restored on the Backups page from this backup: %s, %s.",
"hold.update.tier.1": "own drive",
"hold.update.tier.2": "second drive",
"hold.update.tier.3": "remote backup",
"hold.update.undo_failed": "The update did not succeed, and the automatic undo did not either.",
"hold.update.undo_state.half": "Putting the data back stopped part-way, so the data is in a mixed state; the copy taken before the update is kept.",
"hold.update.undo_state.not_started": "The data is back as it was before the update, but the previous version did not start.",
@@ -1808,6 +1818,8 @@
"settings_notifications.alkalmazas_email": "App e-mail",
"settings_notifications.alkalmazas_email_engedelyezese": "Allow app e-mail",
"settings_notifications.alkalmazas_nem_fut": "App not running",
"settings_notifications.app_update_held": "Update failed, the app is stopped",
"settings_notifications.app_update_undone": "Update undone (the app runs on its previous version)",
"settings_notifications.az_alkalmazasok_a_felhom_on": "Apps can send e-mail through Felhom (for example password resets, invitations),\n without setting up a separate e-mail provider. Each app’s sender address is its own\n <em>&lt;app&gt;@felhom.eu</em> address.",
"settings_notifications.az_ertesitesek_a_kozponti_rendszeren": "Notifications work through the central system, which is not turned on right now.",
"settings_notifications.beallitasok_ertesitesek": "Settings — Notifications",
@@ -2344,7 +2356,32 @@
"tier2_config.nincs_elerheto_off_drive_cel": "No off-drive target available",
"tier2_config.nincs_masik_adatmeghajto_automatikus_cel": "No other data drive — the automatic target is the internal SSD (database/configuration only). Add a 2nd\n data drive to back up all data off-drive too.",
"tier2_config.vissza_a_mentesekhez": "← Back to backups",
"update.error.backup_failed": "The update did not start, because the backup before the update did not succeed: %v. The app keeps running unchanged.",
"update.error.backup_no_unit": "The update did not start: the backup before the update ran, but no fresh copy that can be restored was made. The app keeps running unchanged.",
"update.error.dump_failed": "The update did not start, because the database snapshot was not made: %v. The app keeps running unchanged.",
"update.error.hold_unsaved": "The update did not succeed and the app was stopped, but saving that it is stopped did not succeed. Do not start it again — contact us.",
"update.error.interrupted": "The update was interrupted, because the controller restarted before the new version started. The app keeps running on its previous version.",
"update.error.journal_failed": "The update did not start: the update's journal cannot be saved. The app keeps running unchanged.",
"update.error.no_guards": "The update cannot start: the safety check before an update is not available on this server.",
"update.error.pin_failed": "The update did not start: the description of the new version cannot be read. The app keeps running unchanged.",
"update.error.pull_failed": "Downloading the new version did not succeed, so the update did not happen. The app keeps running on its previous version.",
"update.phase.backing-up": "Making a backup before the update…",
"update.phase.checking": "Checking…",
"update.phase.copying": "Copying the data before the update…",
"update.phase.done": "Updated",
"update.phase.failed": "The update did not succeed",
"update.phase.pinning": "Downloading the new version…",
"update.phase.pulling": "Downloading the new version…",
"update.phase.safety-dump": "Database snapshot…",
"update.phase.starting": "Starting the new version…",
"update.phase.undoing": "Putting the previous version back…",
"update.phase.undone": "Put back to the previous version"
"update.phase.undone": "Put back to the previous version",
"update.phase.verifying": "Checking that it works…",
"update.refusal.already": "An update of %s is already in progress.",
"update.refusal.busy": "The update cannot start right now: a backup or restore is running. Try again when it has finished.",
"update.refusal.deploying": "%s is still being installed — the update can start after that.",
"update.refusal.disk": "Not enough free space for the update: %.1f GB free, and at least %.0f GB is needed to download the new version.",
"update.refusal.migrating": "The update cannot start right now: data is being moved.",
"update.refusal.no_backup": "%s cannot be updated, because it has no backup it could be restored from, and no new backup can be made of it now. Check on the Backups page that the app's drive is available — after that the update can start.",
"update.refusal.not_deployed": "The app is not installed, so it cannot be updated."
}