kept data: the choice at reinstall, the list, the read-only view, the load (09 decision 36); R-690 fixed
gates / gates (push) Successful in 26s

An install over an app's kept drive folder (appdata/<app> non-empty) asks the household:
"use my kept data" (a load from the newest copy of THIS drive's install, own unit or
second-drive mirror, then the template's after_load) or "start fresh" (the folder is
renamed into <drive>/kept/<app>/<date>/ with the removed app's unit; nothing deleted).
The install API answers 409 kept_data_choice until one is chosen; DeployStack refuses
too. New page Megorzott adatok / Kept data (/kept-data): Load / Look / Delete (typed
confirmation, the only deletion of kept data). FileBrowser gets a read-only source.
The drive-full warning names the kept folders. <drive>/kept is protected and outside
every backup leg.

R-690: the removed-app restore (R-487) never found a unit on a DATA drive — it asked
GetStackComposePath (true for every catalog app) and restored nextcloud with no env.
Now isStackDeployed; pinned with a production-shaped provider.

Red-proofs: audits/night-2026-09-26/E/redproofs/.

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-25 13:32:30 +02:00
parent 5a731b45b9
commit 43e99d160c
44 changed files with 3311 additions and 37 deletions
+38 -1
View File
@@ -2417,5 +2417,42 @@
"backup.tier.no_space_unknown": "The full system backup does not fit on the disk. Keeping fewer old backups, or a bigger disk, fixes it.",
"update.phase.converting": "Converting the database",
"err.stacks.update_convert_space": "Converting the database of %s needs %s of free space, and only %s is free. Nothing changed.",
"err.stacks.update_engine_no_test": "This step would move the main version of the database of %s, but it has no test. Nothing changed."
"err.stacks.update_engine_no_test": "This step would move the main version of the database of %s, but it has no test. Nothing changed.",
"kept.choice.title": "This app's old data is still here",
"kept.choice.body": "The old data of %s (%s, from %s) is still on the drive. What should happen to it?",
"kept.choice.use.label": "Use my kept data",
"kept.choice.use.desc": "We load the database from the backup of %s and start the app with the old files. Changes made after that time can be missing.",
"kept.choice.use_off": "There is no backup of the database, so the app cannot load the old files. You can look at the files under Kept data.",
"kept.choice.fresh.label": "Start fresh",
"kept.choice.fresh.desc": "The old data moves to a folder marked with today's date. Nothing is deleted.",
"kept.not_backed_up": "This is not backed up.",
"kept.delete.confirm": "The kept data of %s (%s) is deleted for good. This cannot be undone.",
"kept.delete.type": "To delete it, type: %s",
"kept.delete.mismatch": "The name you typed does not match (%s), so nothing was deleted.",
"kept.deleted": "The kept data of %s is deleted.",
"kept.page.title": "Kept data",
"kept.page.back": "Back",
"kept.page.intro": "Data that removed apps left on the drives. You can look at it, load it into a new install, or delete it. The server never deletes any of it by itself.",
"kept.page.link_hint": "Data that removed apps left on the drives",
"kept.list.backup": "Can be loaded from:",
"kept.list.installed": "The app is installed again.",
"kept.list.empty": "There is no kept data.",
"kept.backup.own": "its own backup, %s",
"kept.backup.second": "the second drive, %s",
"kept.backup.with": "the backup kept with it, %s",
"kept.backup.none": "no backup — the files only",
"kept.action.load": "Load",
"kept.action.look": "Look",
"kept.action.delete": "Delete",
"kept.action.delete_final": "Delete for good",
"kept.load.started": "Loading the kept data of %s has started.",
"kept.load.done": "%s runs with its kept data.",
"kept.load.failed": "Loading %s did not work: %v. The kept files stayed where they are.",
"kept.load.installed": "%s is installed already, so this cannot be loaded now.",
"kept.fb_source": "Kept data",
"kept.diskwarn": "Kept data on this storage that you can delete on the Kept data page: %s.",
"err.kept.not_listed": "This is not kept data, so nothing was touched.",
"err.kept.occupied": "The app's folder already holds data, so the kept files were not put back. Nothing changed.",
"api.kept.busy": "A backup or a restore is running now. Try again when it has finished.",
"page.title.kept_data": "Kept data"
}
+38 -1
View File
@@ -2405,5 +2405,42 @@
"backup.tier.no_space_unknown": "A teljes rendszermentés nem fér el a lemezen. Kevesebb régi mentés megtartása vagy nagyobb lemez segít.",
"update.phase.converting": "Adatbázis átalakítása",
"err.stacks.update_convert_space": "A(z) %s adatbázisának átalakításához %s szabad hely kell, de csak %s van. Nem változott semmi.",
"err.stacks.update_engine_no_test": "Ez a lépés a(z) %s adatbázisának fő verzióját váltaná, de nincs róla próba. Nem változott semmi."
"err.stacks.update_engine_no_test": "Ez a lépés a(z) %s adatbázisának fő verzióját váltaná, de nincs róla próba. Nem változott semmi.",
"kept.choice.title": "Ennek az alkalmazásnak megvannak a régi adatai",
"kept.choice.body": "A(z) %s korábbi adatai (%s, %s) még a lemezen vannak. Mit csináljunk velük?",
"kept.choice.use.label": "A megőrzött adataimat használom",
"kept.choice.use.desc": "Az adatbázist a %s-i mentésből töltjük vissza, és a régi fájlokkal indítjuk az alkalmazást. Ami ezután változott, hiányozhat.",
"kept.choice.use_off": "Az adatbázisról nincs mentés, ezért az alkalmazás nem tudja betölteni a régi fájlokat. A fájlokat megnézheted a Megőrzött adatok között.",
"kept.choice.fresh.label": "Tiszta lappal kezdem",
"kept.choice.fresh.desc": "A régi adatok egy mai dátummal jelölt mappába kerülnek. Nem törlünk semmit.",
"kept.not_backed_up": "Erről nem készül mentés.",
"kept.delete.confirm": "A(z) %s megőrzött adatai (%s) véglegesen törlődnek. Ezt nem lehet visszacsinálni.",
"kept.delete.type": "A törléshez írd be: %s",
"kept.delete.mismatch": "A beírt név nem egyezik (%s), ezért nem töröltünk semmit.",
"kept.deleted": "A(z) %s megőrzött adatai törölve.",
"kept.page.title": "Megőrzött adatok",
"kept.page.back": "Vissza",
"kept.page.intro": "Az eltávolított alkalmazások lemezen maradt adatai. Megnézheted őket, betöltheted egy új telepítésbe, vagy törölheted. Magától a szerver soha nem töröl közülük semmit.",
"kept.page.link_hint": "Eltávolított alkalmazások lemezen maradt adatai",
"kept.list.backup": "Visszatölthető innen:",
"kept.list.installed": "Az alkalmazás újra telepítve van.",
"kept.list.empty": "Nincs megőrzött adat.",
"kept.backup.own": "saját mentés, %s",
"kept.backup.second": "második meghajtó, %s",
"kept.backup.with": "a vele megőrzött mentés, %s",
"kept.backup.none": "nincs mentés — csak a fájlok",
"kept.action.load": "Betöltés",
"kept.action.look": "Megnézem",
"kept.action.delete": "Törlés",
"kept.action.delete_final": "Végleges törlés",
"kept.load.started": "A(z) %s megőrzött adatainak betöltése elindult.",
"kept.load.done": "A(z) %s a megőrzött adataival fut.",
"kept.load.failed": "A(z) %s betöltése nem sikerült: %v. A megőrzött fájlok a helyükön maradtak.",
"kept.load.installed": "A(z) %s már telepítve van, ezért ez nem tölthető be most.",
"kept.fb_source": "Megőrzött adatok",
"kept.diskwarn": "Megőrzött adatok ezen a tárolón, amelyeket te törölhetsz a Megőrzött adatok oldalon: %s.",
"err.kept.not_listed": "Ez nem megőrzött adat, ezért nem nyúltunk hozzá.",
"err.kept.occupied": "Az alkalmazás mappájában már vannak adatok, ezért a megőrzött fájlokat nem tettük vissza. Nem változott semmi.",
"api.kept.busy": "Most egy mentés vagy visszaállítás fut. Ha befejeződött, próbáld újra.",
"page.title.kept_data": "Megőrzött adatok"
}