v0.263.0: a failed update puts the app back by itself (09 decision 15, R-637)
gates / gates (push) Successful in 26s

The guarded update gains a folder copy of the app's named volumes, taken
after the pull where the app stops anyway (decision 19, chosen by the
2026-09-23 bake-off). On a failed health check the box undoes: every copy
validated by its finished-marker first, volumes refilled, definition and pin
from the job's own pre-update copies, the old version checked with the OLD
.felhom.yml probe. It holds only if the undo fails, and the hold sentence
says so and what state the data is in. Bind-mounted folders are never
touched.

- R-637 built; R-638/R-640/R-641 do not arise with a folder copy; R-639
  (pre-update copies incl. .felhom.yml kept until the undo is over).
- journal phases copying/undoing with power-cut recovery.
- app.yaml last_update_undone + one line on the app page (hu/en).
- R-642: start/restart never answer "completed".
- Removal deletes kept undo copies.

MinAgent unchanged (0.131.0). Nine red-proofs in REPORT.md.

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 11:12:49 +02:00
parent b9deec1907
commit 8fc2b4a1a9
26 changed files with 1326 additions and 69 deletions
+11 -1
View File
@@ -156,6 +156,7 @@
"app_info.regi_adatok_torlese": "Deleting old data",
"app_info.telepites": "Install",
"app_info.ujratelepites": "Reinstalling",
"app_info.update_undone": "The update of %s at %s did not succeed. The box put back the previous version and its data automatically — nothing was lost.",
"app_info.valassz_celtarhelyet": "Choose a target storage…",
"app_info.valassz_celtarhelyet_2": "Choose a target storage.",
"backup.contents.data": "Data",
@@ -1318,6 +1319,8 @@
"err.stacks.ujratelepites_sikertelen": "the reinstall failed (%s): %s",
"err.stacks.update_downgrade": "This version is newer than the one in the catalog — moving back needs the operator.",
"err.stacks.update_self_updating": "The controller is updating. Try again in a few minutes.",
"err.stacks.update_undo_copy_failed": "The update did not start, because the copy of the data taken before an update could not be made. The app keeps running on its previous version.",
"err.stacks.update_undo_space": "The update did not start: there is not enough free space for the copy of the data taken before an update (%.1f GB needed, %.1f GB free, and at least %.0f GB must stay free). The app keeps running unchanged.",
"err.stacks.utkozes_a_celtarolon_mar_letezik_ezeknek": "clash on the target storage — these apps already have data there: %s",
"err.web.a_formazas_allapota_nem_kerdezheto_le": "the format status cannot be read: %s",
"err.web.a_formazas_nem_indult_el_az": "the format did not start on the device (%s)",
@@ -1474,6 +1477,10 @@
"func.time.tomorrow_at": "tomorrow %s",
"func.time.yesterday": "yesterday",
"health.no_probe_container": "No health check ran: no matching container.",
"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.",
"hold.update.undo_state.untouched": "The data is as the new version left it.",
"launcher.a_megosztas_jelenleg_ki_van": "Sharing is off.",
"launcher.a_megosztas_jelszoval_vedett": "The share is protected by a password.",
"launcher.alkalmazasok_telepitese": "Install apps",
@@ -2336,5 +2343,8 @@
"tier2_config.mentes": "Save",
"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"
"tier2_config.vissza_a_mentesekhez": "← Back to backups",
"update.phase.copying": "Copying the data before the update…",
"update.phase.undoing": "Putting the previous version back…",
"update.phase.undone": "Put back to the previous version"
}
+11 -1
View File
@@ -152,6 +152,7 @@
"app_info.regi_adatok_torlese": "Régi adatok törlése",
"app_info.telepites": "Telepítés",
"app_info.ujratelepites": "Újratelepítés",
"app_info.update_undone": "A(z) %s frissítése %s-kor nem sikerült. A doboz automatikusan visszaállította az előző változatot és az adatokat — semmi nem veszett el.",
"app_info.valassz_celtarhelyet": "Válassz céltárhelyet…",
"app_info.valassz_celtarhelyet_2": "Válassz céltárhelyet.",
"backup.contents.data": "Adatok",
@@ -1309,6 +1310,8 @@
"err.stacks.ujratelepites_sikertelen": "újratelepítés sikertelen (%s): %s",
"err.stacks.update_downgrade": "Ez a változat újabb a katalógusban lévőnél — visszalépés csak az üzemeltető kérésére.",
"err.stacks.update_self_updating": "A vezérlő éppen frissül. Próbáld újra néhány perc múlva.",
"err.stacks.update_undo_copy_failed": "A frissítés nem indult el, mert a frissítés előtti adatmásolat nem készült el. Az alkalmazás a korábbi verzióval fut tovább.",
"err.stacks.update_undo_space": "A frissítés nem indult el: nincs elég szabad hely a frissítés előtti adatmásolathoz (%.1f GB kell, %.1f GB szabad, és legalább %.0f GB-nak szabadon kell maradnia). Az alkalmazás változatlanul fut tovább.",
"err.stacks.utkozes_a_celtarolon_mar_letezik_ezeknek": "ütközés a céltárolón — már létezik ezeknek az alkalmazásoknak az adata: %s",
"err.web.a_formazas_allapota_nem_kerdezheto_le": "a formázás állapota nem kérdezhető le: %s",
"err.web.a_formazas_nem_indult_el_az": "a formázás nem indult el az eszközön (%s)",
@@ -1462,6 +1465,10 @@
"func.time.tomorrow_at": "holnap %s",
"func.time.yesterday": "tegnap",
"health.no_probe_container": "Nem futott egészségellenőrzés: nincs hozzá tartozó konténer.",
"hold.update.undo_failed": "A frissítés nem sikerült, és az automatikus visszaállítás sem.",
"hold.update.undo_state.half": "Az adatok visszamásolása félbeszakadt, ezért az adatok vegyes állapotban vannak; a frissítés előtti másolat megmaradt.",
"hold.update.undo_state.not_started": "Az adatok a frissítés előtti állapotba kerültek vissza, de az előző változat nem indult el.",
"hold.update.undo_state.untouched": "Az adatok az új változat által hagyott állapotban vannak.",
"launcher.a_megosztas_jelenleg_ki_van": "A megosztás jelenleg ki van kapcsolva.",
"launcher.a_megosztas_jelszoval_vedett": "A megosztás jelszóval védett.",
"launcher.alkalmazasok_telepitese": "Alkalmazások telepítése",
@@ -2324,5 +2331,8 @@
"tier2_config.mentes": "Mentés",
"tier2_config.nincs_elerheto_off_drive_cel": "Nincs elérhető off-drive cél",
"tier2_config.nincs_masik_adatmeghajto_automatikus_cel": "Nincs másik adatmeghajtó — automatikus cél a belső SSD (csak DB/konfiguráció). Egy 2.\n adatmeghajtó hozzáadásával a teljes adat is off-drive menthető.",
"tier2_config.vissza_a_mentesekhez": "← Vissza a mentésekhez"
"tier2_config.vissza_a_mentesekhez": "← Vissza a mentésekhez",
"update.phase.copying": "Az adatok másolása a frissítés előtt…",
"update.phase.undoing": "Visszaállítás az előző változatra…",
"update.phase.undone": "Visszaállítva az előző változatra"
}