test(nomercy): Phase 3 complete — server restart PASS; F2 FileBrowser bounce
3.3 full-server restart (live UI): drives re-bind stable, sys_drive separate (2.5 reboot-survival), all apps recreate-on-boot, registry intact, no placeholders. 3.4 controller-only restart: guest + customer apps keep running BUT FINDING F2 — SyncFileBrowserMounts force-recreates FileBrowser unconditionally (handlers.go:1543), bouncing it on every controller restart vs the "apps keep running" promise. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PsnU2ASocYrvzqE82YDYW
This commit is contained in:
@@ -239,9 +239,47 @@ finding (F1).
|
||||
uses. **Pre-existing security note (unrelated to this session):** the demo dashboard being open is the
|
||||
already-documented `controller-dashboard-public-unauth` issue.
|
||||
|
||||
### 3.3 — "Kiszolgáló újraindítása" (UI click → guest reboot) — ⏳ executing (operator-authorized)
|
||||
- Pre-reboot baseline: guest uptime 1:05; containers cloudflared/traefik (14:43), controller (16:52),
|
||||
filebrowser/navidrome (17:50), radarr (17:55).
|
||||
### 3.3 — "Kiszolgáló újraindítása" (UI click → guest reboot) — ✅ PASS (live UI, operator-authorized)
|
||||
- **Method:** claude-in-chrome on `felhom.demo-felhom.eu/settings`; the native `confirm()` was neutralized
|
||||
(overridden to return true, per browser-safety guidance against blocking dialogs) and the page's own
|
||||
click handler `restartServer()` was invoked — the full client-side flow (confirm → `fetch
|
||||
/api/server/reboot` → `pollRestart`). (A ref-coordinate click did not register the handler — UI quirk —
|
||||
so the handler was invoked directly; same code path.) **Confirms 3.2's `/api/server/reboot` → 202 live.**
|
||||
- Agent log: `requesting reboot of CT 9201` → task OK → `guest-reboot: guest back up vmid=9201`; guest
|
||||
uptime reset to 0. On return (controller healthy in **~5 s**):
|
||||
- **All apps recreated-on-boot:** filebrowser, navidrome (on flash), radarr (on sys_drive), controller,
|
||||
cloudflared, traefik — all `Up`/healthy.
|
||||
- **Drives re-bound at STABLE:** flash `sdc1[/felhom-data]`, usb `sdb1[/felhom-data]`.
|
||||
- **sys_drive still separate:** `pve-vm--9201--disk--2` (→ **2.5 reboot-survival PASS**).
|
||||
- **No rootfs placeholders** at raw `/mnt/felhom-{flash,usb}` (both "not present").
|
||||
- **Registry intact:** both stable paths. Dashboard returned.
|
||||
- Wrong outcomes (drive at raw/placeholder, sys_drive non-separate, apps don't recreate, registry
|
||||
mutated) ALL ruled out.
|
||||
|
||||
### 3.4 — "Vezérlő újraindítása" (controller-only restart) — ⚠️ PASS-with-FINDING (live UI)
|
||||
- **Method:** claude-in-chrome; invoked the page's `restartController()` handler (confirm → `fetch
|
||||
/api/selfrestart` → `pollRestart`). Controller back healthy in **~3 s**.
|
||||
- **Guest NOT rebooted** (uptime kept climbing, not reset) ✓. Per-container `StartedAt` before/after:
|
||||
cloudflared, navidrome, radarr, traefik — **UNCHANGED** (apps kept running) ✓; felhom-controller —
|
||||
changed (restarted, expected). Drives stayed bound; sys_drive unaffected.
|
||||
- ⚠️ **FINDING F2 (minor/moderate, pre-existing): the controller-only restart also force-recreates the
|
||||
FileBrowser container.** `filebrowser` `StartedAt` changed (18:00:34 → 18:01:33); controller startup log:
|
||||
`[web] FileBrowser mounts synced … config updated`. Root cause: `SyncFileBrowserMounts()`
|
||||
(`internal/web/handlers.go:1543`) runs `docker compose up -d --force-recreate` **unconditionally** on
|
||||
every call — the computed `sourcesChanged` flag (`:1504-1506`) only gates the restore-mode DB reset
|
||||
(`:1529`), **not** the recreate. The controller calls this on startup, so every controller restart (and
|
||||
every storage sync) bounces FileBrowser even when its config is byte-identical. This contradicts the
|
||||
button's promise *"Az alkalmazásai futnak tovább; csak a vezérlő indul újra"* — FileBrowser (the
|
||||
customer's file-access UI) blips for a few seconds on each controller restart.
|
||||
*Fix direction:* gate the `--force-recreate` on `sourcesChanged` (recreate only when the generated
|
||||
config/compose actually changed); a no-op sync should leave the running FileBrowser untouched.
|
||||
New-this-session: surfaced by the new restart button, but the always-recreate behavior is pre-existing
|
||||
(predates v0.81.0). Not a data-safety issue.
|
||||
|
||||
**Phase 3 verdict:** the retired banner stays gone (3.1), the route is correctly repointed
|
||||
(`/api/storage/activate`→404, `/api/server/reboot` live 202) (3.2), the full-server restart is the headline
|
||||
durability win — drives stable, sys_drive separate, apps recreated, registry intact, no placeholders (3.3).
|
||||
The controller-only restart keeps the guest + customer apps running but **does bounce FileBrowser** (F2).
|
||||
|
||||
## Phase 4 — host reboot + chaos — ⏳ PENDING
|
||||
|
||||
|
||||
Reference in New Issue
Block a user