diff --git a/STATUS.md b/STATUS.md
index 94342ae0..aa5618a6 100644
--- a/STATUS.md
+++ b/STATUS.md
@@ -1,6 +1,6 @@
# STATUS — what works, what's broken, what's next
-**Updated 2026-09-17 (evening) — English, step 1 of 3 done: the apps and settings pages.**
+**Updated 2026-09-17 (evening) — English, step 2 of 3 done: the backup pages too.**
> **Ready for a volunteer: yes, unchanged.** A Hungarian household still sees nothing new.
@@ -16,7 +16,11 @@ log lines). I switched the box to English and back with the real switch.
would quietly break the English page. I left the word Hungarian and filed it.
- A new check found two text pieces on last release's pages that no test ever showed. Fixed.
-**Rows.** One opened. The register went from **258** to **259** open rows.
+- Step 2: the seven backup pages speak English, and the Hungarian pages again did not change. The
+ check that stops a promise we cannot keep now reads English too — and English showed it had been
+ missing some Hungarian sentences (verbs split in two). Filed.
+
+**Rows.** Two opened. The register went from **258** to **260** open rows.
**Needs you.** Nothing yet. Steps 2 and 3 follow (backups; storage, sharing, sign-in, and the switch
for everyone).
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/README.md b/documentation/audits/i18n-slice1-2026-09-17/B/README.md
new file mode 100644
index 00000000..1ba0bd90
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/README.md
@@ -0,0 +1,19 @@
+# Slice 1 release B — controller v0.249.0 (backup pages), 2026-09-17
+
+Method: **endpoint-level** on demo-hp guest 9201 (no browser on DooPlex), as in `../A/README.md`.
+
+Pages: `/backups/apps`, `/backups/remote`, `/backups/restore`, `/backup/escrow`,
+`/stacks/bentopdf/backup` (2nd-backup settings), `/backups/restore/app?name=bentopdf` (restore wizard),
+`/recovery`.
+
+| step | result |
+|---|---|
+| before (0.248.0, hu) → after (0.249.0, hu) | `live/hu-before-vs-after.txt`: six pages IDENTICAL after version/token normalisation; `/backups/apps` differs only in relative ages („Utolsó: most" vs „# perce") |
+| saved `en` → back to `hu` | `live/hu-after-vs-back.txt`: identical apart from the same relative ages |
+| English pages | ``, switch shown, no marker, on every page that renders. Remaining Hungarian, all owned elsewhere: Go-built row text on `/backups/apps` (status tooltip, the unit-restore confirm, the drive-files note, the tier-2 destination and warning — slice 2, R-557); composite titles („Visszaállítás — BentoPDF", „2. mentés beállítása — BentoPDF", slice 2); „Fut…" on `/backups/remote`, kept Hungarian on purpose (R-563) |
+| `/recovery` | **302 to `/backups/remote` in both languages** — demo-hp has no recovery offer, so the page cannot be reached live. Its language routing is proven by `TestRecoveryHandlerFollowsLanguage` (the real `renderRecovery`) and `TestI18nDirectRenderPagesFollowLanguage`; the red-proof is in `redproofs.txt` |
+| hub report | `live/hub-report-language.txt`: `hu` (16:02:57), `en` (16:04:04), `hu` (16:04:28) |
+| startup parse | `lang=hu … 1266 markers expanded in 26.471929ms`; `lang=en … in 21.250419ms` |
+
+Fixture capture: felhom-controller `f8ebc47` (41 states), plus `backups_apps_stale_copy` from `f8ebc47`.
+Teardown: box left on `hu`, 0.249.0 (floor not raised); guest secrets shredded; hub DB copy shredded.
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/green-gate.txt b/documentation/audits/i18n-slice1-2026-09-17/B/green-gate.txt
new file mode 100644
index 00000000..11b630cc
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/green-gate.txt
@@ -0,0 +1,30 @@
+ok gitea.dooplex.hu/admin/felhom-controller/cmd/controller (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/agentapi (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/api (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/appbackup (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/appexport (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/backup 505.828s
+ok gitea.dooplex.hu/admin/felhom-controller/internal/backupwindow (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/bootrecon (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/bootstrap (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/channelhealth (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/config (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/fillwatch (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/i18n 0.032s
+ok gitea.dooplex.hu/admin/felhom-controller/internal/infra (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/mailrelay (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/metrics (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/monitor (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/notify 0.833s
+ok gitea.dooplex.hu/admin/felhom-controller/internal/offsiteapply (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/quiesce (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/report (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/scheduler (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/selfupdate (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/settings (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/setup 0.008s
+ok gitea.dooplex.hu/admin/felhom-controller/internal/stacks (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/sync (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/system (cached)
+ok gitea.dooplex.hu/admin/felhom-controller/internal/web 45.902s
+suite rc=0 — go build/vet/test ./... before commit 11b790e (re-run green after the last placeholder)
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/live/B-after-0.249.0-hu/backup_escrow.html b/documentation/audits/i18n-slice1-2026-09-17/B/live/B-after-0.249.0-hu/backup_escrow.html
new file mode 100644
index 00000000..aafe8cc5
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/live/B-after-0.249.0-hu/backup_escrow.html
@@ -0,0 +1,779 @@
+
+
+
+
+
+ A helyreállítási kód a mentései utolsó kulcsa. Pontosan egyszer jelenik meg — a rendszer
+ sehol nem tárolja, és a Felhom sem ismeri. Ha a szerver megsemmisül, a távoli mentések CSAK
+ ezzel a kóddal állíthatók vissza. Írja fel papírra vagy mentse jelszókezelőbe — de NE ezen a
+ szerveren tárolja.
+
+
+
+ Az új kód létrehozásával a korábbi kód a jövőbeli mentésekre érvényét veszti; a már meglévő
+ mentési előzményekhez érvényes marad.
+
+
+
3. Megerősítés
+
+
+
+
+
+
4. Létrehozás
+
A kód létrehozása folyamatban… (általában néhány másodperc)
+
+
+
+
+
+
5. A helyreállítási kód
+
+
A kód pontosan egyszer jeleníthető meg. Készítsen elő papírt és tollat, mielőtt megnyomja a gombot.
+
+
+
+
+
Ez mostantól az élő helyreállítási kód — a korábbi kód érvényét vesztette. Mentse el most: a kód többé nem jeleníthető meg.
+
+
+
6. Ellenőrzés
+
+
+
+
+
+
+
A megadott szavak nem egyeznek — ellenőrizze a felírt kódot.
+
+
+
+
7. Befejezés
+
+
+ Mi történik ezután? A helyreállítási kód elkészült, és a rendszer elküldi a központba megerősítésre — ez általában néhány másodperc, legfeljebb 15 perc. Addig a Távoli mentés oldalon a „megerősítésre vár" üzenet látható; a megerősítés után indítható az első távoli mentés.
+
+
+
+
+
+
+
+
+
+
A kód létrejött, de nem lett megjelenítve — biztonsági okból újra nem kérhető le.
+ Indítsa újra a folyamatot: az új kód a régit érvényteleníti.
Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: most
+ —
+
+
+ Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 5.6 MB
+
+
+
+ Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: most
+
+
+
+
+ DB + Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 96.5 MB
+
+
+
+ DB + Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: most
+
+
+
+
+ DB + Konfig + Adatok
+
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 193.3 MB
+ A belső SSD-n csak a konfiguráció, adatbázis és a kötelező adatok férnek el — a választható tartalom nem került másolásra.
+
+
+ DB + Konfig + Adatok
+
+
Az alkalmazás-mentések titkosított másolata egy távoli tárolóra — saját NAS vagy Felhom offsite tárhely — restic + SFTP kapcsolaton. A tároló csak titkosított adatot lát. Ez a 3-2-1 szabály „1 off-site" lába — független a helyi másodpéldánytól és a teljes rendszermentéstől.
+ A visszaállítás felülírja az alkalmazás jelenlegi adatait a kiválasztott mentés állapotával.
+ Az alkalmazás a folyamat során automatikusan leáll és újraindul.
+
Válaszd ki az alkalmazást, és a következő oldalon döntsd el, mit szeretnél: ellenőrzést külön mappába, csak a hiányzó fájlok visszahozását, vagy teljes visszaállítást. Egyik sem indul el kérdés nélkül.
+ Előkészítés
+ Megerősítés
+ Végrehajtás
+ Eredmény
+
+
+
+
+
+
+
+
+
1. Ellenőrzés külön mappába (beállítások és adatbázis)
+
+
Az alkalmazás beállításait és adatbázisát hozza vissza egy külön ellenőrző mappába. A saját fájljaidat (dokumentumok, képek, feltöltések) nem hozza vissza — azokhoz a 3. pont teljes visszaállítása kell. Az élő adataid nem változnak.
+
+
+
+
+
+
+
2. Hiányzó fájlok visszahozása
+
Csak a hiányzó fájlokat másolja vissza a meglévők közé. A meglévő fájlokat nem írja felül, adatbázist nem állít vissza — törölt tartalom ettől nem jelenik meg újra.
+
+
Ehhez előbb elő kell készíteni a teljes mentést — lásd a 3. pontot.
+
+
+
+
+
3. Teljes visszaállítás (fájlok + adatbázis)
+
A fájlokat a mentés szerinti változatra állítja vissza és az adatbázist is visszatölti. Semmit nem töröl: a mentés óta létrejött fájlok megmaradnak. A jelenlegi adatbázisról előtte biztonsági mentés készül.
+
+
+
A teljes visszaállításhoz először le kell tölteni a mentés teljes tartalmát. Az előkészítés megmutatja a méretet, mielőtt bármi elindulna — az élő adataid az előkészítés alatt nem változnak.
+ A 2. mentés egy másik fizikai meghajtóra készít másolatot az alkalmazás
+ helyreállítási csomagjáról és adatairól. Ez az egyetlen off-drive védelem a böngészhető
+ felhasználói fájlokhoz (a teljes rendszermentés/PBS nem éri el ezeket).
+
+
+
+
+ Ennek az alkalmazásnak az adatai a belső rendszerlemezen vannak, amelyek
+ már szerepelnek a teljes rendszermentésben (PBS). A 2. (off-drive) másolat
+ kiegészítő, és elsősorban a külső adatmeghajtón tárolt alkalmazásokhoz készül — ehhez az
+ alkalmazáshoz nincs külön teendő.
+
+ A helyreállítási kód a mentései utolsó kulcsa. Pontosan egyszer jelenik meg — a rendszer
+ sehol nem tárolja, és a Felhom sem ismeri. Ha a szerver megsemmisül, a távoli mentések CSAK
+ ezzel a kóddal állíthatók vissza. Írja fel papírra vagy mentse jelszókezelőbe — de NE ezen a
+ szerveren tárolja.
+
+
+
+ Az új kód létrehozásával a korábbi kód a jövőbeli mentésekre érvényét veszti; a már meglévő
+ mentési előzményekhez érvényes marad.
+
+
+
3. Megerősítés
+
+
+
+
+
+
4. Létrehozás
+
A kód létrehozása folyamatban… (általában néhány másodperc)
+
+
+
+
+
+
5. A helyreállítási kód
+
+
A kód pontosan egyszer jeleníthető meg. Készítsen elő papírt és tollat, mielőtt megnyomja a gombot.
+
+
+
+
+
Ez mostantól az élő helyreállítási kód — a korábbi kód érvényét vesztette. Mentse el most: a kód többé nem jeleníthető meg.
+
+
+
6. Ellenőrzés
+
+
+
+
+
+
+
A megadott szavak nem egyeznek — ellenőrizze a felírt kódot.
+
+
+
+
7. Befejezés
+
+
+ Mi történik ezután? A helyreállítási kód elkészült, és a rendszer elküldi a központba megerősítésre — ez általában néhány másodperc, legfeljebb 15 perc. Addig a Távoli mentés oldalon a „megerősítésre vár" üzenet látható; a megerősítés után indítható az első távoli mentés.
+
+
+
+
+
+
+
+
+
+
A kód létrejött, de nem lett megjelenítve — biztonsági okból újra nem kérhető le.
+ Indítsa újra a folyamatot: az új kód a régit érvényteleníti.
Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 1 perce
+ —
+
+
+ Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 5.6 MB
+
+
+
+ Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 1 perce
+
+
+
+
+ DB + Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 96.5 MB
+
+
+
+ DB + Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 1 perce
+
+
+
+
+ DB + Konfig + Adatok
+
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 193.3 MB
+ A belső SSD-n csak a konfiguráció, adatbázis és a kötelező adatok férnek el — a választható tartalom nem került másolásra.
+
+
+ DB + Konfig + Adatok
+
+
Az alkalmazás-mentések titkosított másolata egy távoli tárolóra — saját NAS vagy Felhom offsite tárhely — restic + SFTP kapcsolaton. A tároló csak titkosított adatot lát. Ez a 3-2-1 szabály „1 off-site" lába — független a helyi másodpéldánytól és a teljes rendszermentéstől.
+ A visszaállítás felülírja az alkalmazás jelenlegi adatait a kiválasztott mentés állapotával.
+ Az alkalmazás a folyamat során automatikusan leáll és újraindul.
+
Válaszd ki az alkalmazást, és a következő oldalon döntsd el, mit szeretnél: ellenőrzést külön mappába, csak a hiányzó fájlok visszahozását, vagy teljes visszaállítást. Egyik sem indul el kérdés nélkül.
+ Előkészítés
+ Megerősítés
+ Végrehajtás
+ Eredmény
+
+
+
+
+
+
+
+
+
1. Ellenőrzés külön mappába (beállítások és adatbázis)
+
+
Az alkalmazás beállításait és adatbázisát hozza vissza egy külön ellenőrző mappába. A saját fájljaidat (dokumentumok, képek, feltöltések) nem hozza vissza — azokhoz a 3. pont teljes visszaállítása kell. Az élő adataid nem változnak.
+
+
+
+
+
+
+
2. Hiányzó fájlok visszahozása
+
Csak a hiányzó fájlokat másolja vissza a meglévők közé. A meglévő fájlokat nem írja felül, adatbázist nem állít vissza — törölt tartalom ettől nem jelenik meg újra.
+
+
Ehhez előbb elő kell készíteni a teljes mentést — lásd a 3. pontot.
+
+
+
+
+
3. Teljes visszaállítás (fájlok + adatbázis)
+
A fájlokat a mentés szerinti változatra állítja vissza és az adatbázist is visszatölti. Semmit nem töröl: a mentés óta létrejött fájlok megmaradnak. A jelenlegi adatbázisról előtte biztonsági mentés készül.
+
+
+
A teljes visszaállításhoz először le kell tölteni a mentés teljes tartalmát. Az előkészítés megmutatja a méretet, mielőtt bármi elindulna — az élő adataid az előkészítés alatt nem változnak.
+ A 2. mentés egy másik fizikai meghajtóra készít másolatot az alkalmazás
+ helyreállítási csomagjáról és adatairól. Ez az egyetlen off-drive védelem a böngészhető
+ felhasználói fájlokhoz (a teljes rendszermentés/PBS nem éri el ezeket).
+
+
+
+
+ Ennek az alkalmazásnak az adatai a belső rendszerlemezen vannak, amelyek
+ már szerepelnek a teljes rendszermentésben (PBS). A 2. (off-drive) másolat
+ kiegészítő, és elsősorban a külső adatmeghajtón tárolt alkalmazásokhoz készül — ehhez az
+ alkalmazáshoz nincs külön teendő.
+
+ A helyreállítási kód a mentései utolsó kulcsa. Pontosan egyszer jelenik meg — a rendszer
+ sehol nem tárolja, és a Felhom sem ismeri. Ha a szerver megsemmisül, a távoli mentések CSAK
+ ezzel a kóddal állíthatók vissza. Írja fel papírra vagy mentse jelszókezelőbe — de NE ezen a
+ szerveren tárolja.
+
+
+
+ Az új kód létrehozásával a korábbi kód a jövőbeli mentésekre érvényét veszti; a már meglévő
+ mentési előzményekhez érvényes marad.
+
+
+
3. Megerősítés
+
+
+
+
+
+
4. Létrehozás
+
A kód létrehozása folyamatban… (általában néhány másodperc)
+
+
+
+
+
+
5. A helyreállítási kód
+
+
A kód pontosan egyszer jeleníthető meg. Készítsen elő papírt és tollat, mielőtt megnyomja a gombot.
+
+
+
+
+
Ez mostantól az élő helyreállítási kód — a korábbi kód érvényét vesztette. Mentse el most: a kód többé nem jeleníthető meg.
+
+
+
6. Ellenőrzés
+
+
+
+
+
+
+
A megadott szavak nem egyeznek — ellenőrizze a felírt kódot.
+
+
+
+
7. Befejezés
+
+
+ Mi történik ezután? A helyreállítási kód elkészült, és a rendszer elküldi a központba megerősítésre — ez általában néhány másodperc, legfeljebb 15 perc. Addig a Távoli mentés oldalon a „megerősítésre vár" üzenet látható; a megerősítés után indítható az első távoli mentés.
+
+
+
+
+
+
+
+
+
+
A kód létrejött, de nem lett megjelenítve — biztonsági okból újra nem kérhető le.
+ Indítsa újra a folyamatot: az új kód a régit érvényteleníti.
Az egyes alkalmazások részletes, granulált mentése — adatbázis-kiírások, beállítások és alkalmazás-fájlok. A fenti teljes mentéstől függetlenül, alkalmazásonként visszaállítható.
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 23 perce
+ —
+
+
+ Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 5.6 MB
+
+
+
+ Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 23 perce
+
+
+
+
+ DB + Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 96.5 MB
+
+
+
+ DB + Konfig + Adatok
+
+
+ 1. mentés
+ Auto
+ helyi
+
+
+ Utolsó: 23 perce
+
+
+
+
+ DB + Konfig + Adatok
+
+
+
+
+
+ 2. mentés
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Utolsó sikeres: 14 órája
+
+ Sikeres
+
+
+
+ 193.3 MB
+ A belső SSD-n csak a konfiguráció, adatbázis és a kötelező adatok férnek el — a választható tartalom nem került másolásra.
+
+
+ DB + Konfig + Adatok
+
+
Az alkalmazás-mentések titkosított másolata egy távoli tárolóra — saját NAS vagy Felhom offsite tárhely — restic + SFTP kapcsolaton. A tároló csak titkosított adatot lát. Ez a 3-2-1 szabály „1 off-site" lába — független a helyi másodpéldánytól és a teljes rendszermentéstől.
+ A visszaállítás felülírja az alkalmazás jelenlegi adatait a kiválasztott mentés állapotával.
+ Az alkalmazás a folyamat során automatikusan leáll és újraindul.
+
Válaszd ki az alkalmazást, és a következő oldalon döntsd el, mit szeretnél: ellenőrzést külön mappába, csak a hiányzó fájlok visszahozását, vagy teljes visszaállítást. Egyik sem indul el kérdés nélkül.
+ Előkészítés
+ Megerősítés
+ Végrehajtás
+ Eredmény
+
+
+
+
+
+
+
+
+
1. Ellenőrzés külön mappába (beállítások és adatbázis)
+
+
Az alkalmazás beállításait és adatbázisát hozza vissza egy külön ellenőrző mappába. A saját fájljaidat (dokumentumok, képek, feltöltések) nem hozza vissza — azokhoz a 3. pont teljes visszaállítása kell. Az élő adataid nem változnak.
+
+
+
+
+
+
+
2. Hiányzó fájlok visszahozása
+
Csak a hiányzó fájlokat másolja vissza a meglévők közé. A meglévő fájlokat nem írja felül, adatbázist nem állít vissza — törölt tartalom ettől nem jelenik meg újra.
+
+
Ehhez előbb elő kell készíteni a teljes mentést — lásd a 3. pontot.
+
+
+
+
+
3. Teljes visszaállítás (fájlok + adatbázis)
+
A fájlokat a mentés szerinti változatra állítja vissza és az adatbázist is visszatölti. Semmit nem töröl: a mentés óta létrejött fájlok megmaradnak. A jelenlegi adatbázisról előtte biztonsági mentés készül.
+
+
+
A teljes visszaállításhoz először le kell tölteni a mentés teljes tartalmát. Az előkészítés megmutatja a méretet, mielőtt bármi elindulna — az élő adataid az előkészítés alatt nem változnak.
+ A 2. mentés egy másik fizikai meghajtóra készít másolatot az alkalmazás
+ helyreállítási csomagjáról és adatairól. Ez az egyetlen off-drive védelem a böngészhető
+ felhasználói fájlokhoz (a teljes rendszermentés/PBS nem éri el ezeket).
+
+
+
+
+ Ennek az alkalmazásnak az adatai a belső rendszerlemezen vannak, amelyek
+ már szerepelnek a teljes rendszermentésben (PBS). A 2. (off-drive) másolat
+ kiegészítő, és elsősorban a külső adatmeghajtón tárolt alkalmazásokhoz készül — ehhez az
+ alkalmazáshoz nincs külön teendő.
+
+ The recovery code is the last key to your backups. It appears exactly once — the system
+ stores it nowhere, and Felhom does not know it either. If the server is destroyed, the remote backups can be restored ONLY
+ with this code. Write it on paper or keep it in a password manager — but do NOT keep it on this
+ server.
+
+
+
+ When you create a new code, the earlier code stops working for future backups; for the existing
+ backup history it stays valid.
+
+
+
3. Confirmation
+
+
+
+
+
+
4. Creation
+
Creating the code… (usually a few seconds)
+
+
+
+
+
+
5. The recovery code
+
+
The code can be shown exactly once. Have paper and a pen ready before you press the button.
+
+
+
+
+
This is now the live recovery code — the earlier code is no longer valid. Save it now: the code cannot be shown again.
+
+
+
6. Check
+
+
+
+
+
+
+
The words do not match — check the code you wrote down.
+
+
+
+
7. Finish
+
+
+ What happens next? The recovery code is ready, and the system sends it to the central system for confirmation — usually a few seconds, at most 15 minutes. Until then the Remote backup page shows „waiting for confirmation"; after the confirmation the first remote backup can start.
+
+
+
+
+
+
+
+
+
+
The code was created but not shown — for security it cannot be requested again.
+ Start the process again: the new code replaces the old one.
+ Backup 3
+ Succeeded
+ restic → u629488-sub3.your-storagebox.de
+ Last: 13 hours ago
+ Recovery unit, encrypted
+
+
+
+
+
+
+
+
+
+
+
+
+ Calibre-Web Automated
+
+
+ Config + Data
+
+
+
+ ▶
+
+
+
+
+
+
+ Backup 1
+ Auto
+ local
+
+
+ Last: 1 minute ago
+ —
+
+
+ Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ Backup 2
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Last successful: 14 hours ago
+
+ Sikeres
+
+
+
+ 5.6 MB
+
+
+
+ Konfig + Adatok
+
+
+ Backup 3
+ Succeeded
+ restic → u629488-sub3.your-storagebox.de
+ Last: 13 hours ago
+ Recovery unit, encrypted
+
+
+
+
+
+
+
+
+
+
+
+
+ Paperless-ngx
+
+
+ NVME 1TB
+ 28.1 KB
+
+
+
+ ▶
+
+
+
+
+
+
+ Backup 1
+ Auto
+ local
+
+
+ Last: 1 minute ago
+
+
+
+
+ DB + Konfig
+ Az alkalmazás fájljait a távoli másolat (és a második meghajtó) védi — ez a helyi mentés a beállításokat és az adatbázist tartalmazza.
+
+
+
+
+ Backup 2
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Last successful: 14 hours ago
+
+ Sikeres
+
+
+
+ 96.5 MB
+
+
+
+ DB + Konfig + Adatok
+
+
+ Backup 3
+ Succeeded
+ restic → u629488-sub3.your-storagebox.de
+ Last: 13 hours ago
+ Recovery unit, encrypted
+
+
+
+
+
+
+
+
+
+
+
+
+ RomM
+
+
+ NVME 1TB
+ 8.0 KB
+
+
+
+ ▶
+
+
+
+
+
+
+ Backup 1
+ Auto
+ local
+
+
+ Last: 1 minute ago
+
+
+
+
+ DB + Konfig + Adatok
+
+
+
+
+
+ Backup 2
+
+ rsync
+ → belső SSD (csak DB/konfiguráció)
+ Naponta
+
+ Last successful: 14 hours ago
+
+ Sikeres
+
+
+
+ 193.3 MB
+ A belső SSD-n csak a konfiguráció, adatbázis és a kötelező adatok férnek el — a választható tartalom nem került másolásra.
+
+
+ DB + Konfig + Adatok
+
+
An encrypted copy of the app backups on a remote store — your own NAS or Felhom offsite storage — over restic + SFTP. The store sees only encrypted data. This is the „1 off-site" leg of the 3-2-1 rule — independent of the local second copy and the full system backup.
Choose the app, and on the next page decide what you want: a check into a separate folder, bringing back only the missing files, or a full restore. None of them starts without asking.
+ Preparation
+ Confirmation
+ Execution
+ Result
+
+
+
+
+
+
+
+
+
1. Check into a separate folder (settings and database)
+
+
Brings the app’s settings and database back into a separate check folder. It does not bring back your own files (documents, pictures, uploads) — for those you need the full restore in step 3. Your live data does not change.
+
+
+
+
+
+
+
2. Bring back missing files
+
Copies back only the missing files among the existing ones. It does not overwrite existing files and does not restore the database — deleted content does not come back this way.
+
+
For this, first prepare the full backup — see step 3.
+
+
+
+
+
3. Full restore (files + database)
+
Sets the files back to the backup’s version and loads the database back too. It deletes nothing: files created since the backup stay. A backup of the current database is made first.
+
+
+
A full restore first needs the whole backup content downloaded. The preparation shows the size before anything starts — your live data does not change during the preparation.
+ Backup 2 copies the app’s recovery package and data to another physical drive.
+ This is the only off-drive protection for your browsable
+ files (the full system backup/PBS does not reach them).
+
+
+
+
+ This app’s data is on the internal system disk, which is
+ already part of the full system backup (PBS). The 2nd (off-drive) copy
+ is extra, and is made mainly for apps stored on the external data drive — nothing to do for this
+ app.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-after-vs-back.txt b/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-after-vs-back.txt
new file mode 100644
index 00000000..e62708c2
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-after-vs-back.txt
@@ -0,0 +1,27 @@
+backup_escrow.html: IDENTICAL
+backups_apps.html: 20 differing lines
+ - Utolsó: most
+ + Utolsó: # perce
+ - Utolsó: most
+ + Utolsó: # perce
+ - Utolsó: most
+ + Utolsó: # perce
+ - Utolsó: most
+ + Utolsó: # perce
+backups_remote.html: IDENTICAL
+backups_restore.html: IDENTICAL
+backups_restore_app_name_bentopdf.html: IDENTICAL
+recovery.html: IDENTICAL
+stacks_bentopdf_backup.html: IDENTICAL
+--- lines differing in more than digits (live data other than numbers), per file:
+backups_apps.html
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-before-vs-after.txt b/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-before-vs-after.txt
new file mode 100644
index 00000000..7bc552da
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/live/hu-before-vs-after.txt
@@ -0,0 +1,27 @@
+backup_escrow.html: IDENTICAL
+backups_apps.html: 20 differing lines
+ - Utolsó: # perce
+ + Utolsó: most
+ - Utolsó: # perce
+ + Utolsó: most
+ - Utolsó: # perce
+ + Utolsó: most
+ - Utolsó: # perce
+ + Utolsó: most
+backups_remote.html: IDENTICAL
+backups_restore.html: IDENTICAL
+backups_restore_app_name_bentopdf.html: IDENTICAL
+recovery.html: IDENTICAL
+stacks_bentopdf_backup.html: IDENTICAL
+--- lines differing in more than digits (live data other than numbers), per file:
+backups_apps.html
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
+ Utolsó: most
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/live/hub-report-language.txt b/documentation/audits/i18n-slice1-2026-09-17/B/live/hub-report-language.txt
new file mode 100644
index 00000000..b41d5740
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/live/hub-report-language.txt
@@ -0,0 +1,3 @@
+demo-hp 2026-09-17 16:02:57 controller 0.249.0 language='hu'
+demo-hp 2026-09-17 16:04:04 controller 0.249.0 language='en'
+demo-hp 2026-09-17 16:04:28 controller 0.249.0 language='hu'
diff --git a/documentation/audits/i18n-slice1-2026-09-17/B/redproofs.txt b/documentation/audits/i18n-slice1-2026-09-17/B/redproofs.txt
new file mode 100644
index 00000000..aec4e6cb
--- /dev/null
+++ b/documentation/audits/i18n-slice1-2026-09-17/B/redproofs.txt
@@ -0,0 +1,14 @@
+### B routing red-proof — recovery render put back on s.tmpl
+=== RUN TestRecoveryHandlerFollowsLanguage
+ i18n_wiring_test.go:329: recovery page with English saved: code 200, lang=en false, English phrase false
+--- FAIL: TestRecoveryHandlerFollowsLanguage (0.12s)
+FAIL
+FAIL gitea.dooplex.hu/admin/felhom-controller/internal/web 0.134s
+FAIL
+### B parity red-proof — backups_escrow.kod_letrehozasa one byte
+ i18n_parity_test.go:344: escrow_receremony: Hungarian page CHANGED at line 206
+ fixture: " "
+ now: " "
+ i18n_parity_test.go:344: escrow_first: Hungarian page CHANGED at line 201
+ fixture: " "
+ now: " "
diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md
index b9aaae85..f02bc365 100644
--- a/documentation/backlog/OPEN-ITEMS.md
+++ b/documentation/backlog/OPEN-ITEMS.md
@@ -734,7 +734,7 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
| **R-553** | **[P3-LOW] Four places decide BEHAVIOUR by matching Hungarian wording — each breaks the day the words change, in either language.** FOUND 2026-09-17 by the i18n inventory (`audits/I18N-INVENTORY-2026-09-17.md` §3), read at source: (1) `controller/internal/api/router.go:478` picks **400 vs 500** for a deploy error by `strings.Contains(err, "kötelező"/"memória")`; (2) `internal/backup/offbox.go:186` classifies the off-site **quota** failure by „tárhelykeretet" in a lower-cased error; (3) `internal/web/alerts.go:208` moves a disk warning inline-vs-top-banner by „meghajtón"/„adattároló"/„meghajtó"; (4) `internal/web/handlers.go:927` compares a **persisted** off-site warning against `offboxStaleWarningMarker` („nincs mentésre jelölt alkalmazás") — a warning written in one language is compared in another. (A fifth hit, `offbox_handlers.go:132`, is a detector false positive.) Templates: zero (detector decoy-tested). **Fix shape:** a typed error / sentinel / reason code at each producer, the display text derived from it, one red-proofed test per site asserting the consequence (status code, quota class, placement, substitution) with the wording changed. **Blocks localisation slice 2 (R-557)** — it goes first. | **READY - rank P3-LOW; owner: CC** |
| **R-554** | **[P3-LOW] Delete the first-boot setup wizard — obsolete by design, still reachable.** OPERATOR DECISION 2026-09-17 (localisation starter, decision 4: „out of scope, obsolete"). `02-controller-module-map.md` L56 calls `internal/setup/` obsolete; `cmd/controller/main.go` L322 still enters it when `setup.NeedsSetup(cfg)` — `customer.id` empty after bootstrap ingestion, or a `.needs-setup` marker (`internal/setup/setup.go` L17-25). Ingestion leaves `customer.id` empty on a missing/invalid `bootstrap.json`, a failed hub pull, or a failed merge/write/reload (`internal/bootstrap/bootstrap.go` L109-163) — so a box whose first boot cannot reach the hub shows a household an 8-page wizard (95 Hungarian strings, its own template set and CSRF). **Fix shape:** decide what such a box shows instead (a single „cannot reach Felhom yet, retrying" page — needs no decision beyond copy), then delete `internal/setup/` and `runSetupMode`; red-proof that a failed ingestion renders the waiting page, not a 404. **Check first** whether any drill/golden path still relies on `.needs-setup`. | **READY - rank P3-LOW; owner: CC** |
| **R-555** | **[P3-LOW] The wire-contract gate counts a field as received when its name appears in a Go COMMENT on the receiving side.** FOUND 2026-09-17 by CC adding the report's `language` field (controller v0.247.0): `scripts/wire_contract_gate.py` passed WITHOUT an allowlist entry, because `receiver_tokens()` tokenises whole files and the word „language" occurs hub-side only in a comment (`hub/internal/web/configs.go:558`, „this page's existing language"). The shape is the gate's own named failure class (name-for-fact, R-421): any English tag name that also appears in hub prose passes unread. The field was allowlisted by hand with this row named. **Fix shape:** strip `//` and `/* */` comments (and template `{{/* */}}`) before tokenising; add the decoy „a tag whose name appears only in a receiver comment must convict"; expect a handful of currently-passing tags to surface — each is a finding, not noise. | **READY - rank P3-LOW; owner: CC** |
-| **R-556** | **[P3-LOW] Localisation slice 1 — the other 31 dashboard templates in English, Hungarian byte-identical.** PLAN 2026-09-17 (`architecture/10-localisation.md` §10). ~1 500 strings, ~600 of them inside `