01:02:52   before: state=running hold=None
01:03:00   sink answers: 200

01:03:07   restore pressed: ['HTTP/2 302 '] snapshot helyi
01:03:12   the cut:
2026/11/03 00:03:08 restore_crash_putback.go:89: [INFO] [backup] radicale: the restore copy is recorded — a power cut from here on puts the app back on start (R-1195)
00:03:11
sec1102-blocker Created
felhom-controller Up Less than a second (health: starting)

01:03:17   login after the cut: True
01:03:51   after the start: state=stopped hold code='restore_mixed'
Traceback (most recent call last):
  File "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-2026-11-02/part3/proof1102.py", line 335, in <module>
    sys.exit(main())
             ~~~~^^
  File "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-2026-11-02/part3/proof1102.py", line 327, in main
    rc = {"boot-before": phase_boot_before, "switch": phase_switch, "boot-after": phase_boot_after, "boot-stage": phase_boot_stage, "r1347": phase_r1347, "r1347b": phase_r1347b,
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          "r1348": phase_r1348, "teardown": phase_teardown}[ph]() or 0
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-2026-11-02/part3/proof1102.py", line 295, in phase_r1348
    say("  controller log:\n" + ctl_log(t0, "crash recovery|could NOT be put back|restore hold|HELD|Notifier enabled"))
                                ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-2026-11-02/part3/proof1102.py", line 55, in ctl_log
    return guest(f"docker logs --since {since} felhom-controller 2>&1 | grep -E '{rx}' | grep -v DEBUG | cut -c1-260 | tail -40")
  File "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/security-2026-11-02/part3/proof1102.py", line 51, in guest
    return w.guest(script, timeout=timeout)
           ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts/box_walk.py", line 106, in guest
    r = sh(ssh_args() + [
            f"export LC_ALL=C; cat > {t}; pct push {GUEST} {t} {t} >/dev/null 2>&1; "
            f"pct exec {GUEST} -- bash {t}; pct exec {GUEST} -- rm -f {t}; rm -f {t}"],
           timeout=timeout, inp=script)
  File "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts/box_walk.py", line 95, in sh
    return subprocess.run(args, capture_output=True, text=True, timeout=timeout, input=inp)
           ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/subprocess.py", line 556, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
                     ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/subprocess.py", line 1222, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
                     ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/subprocess.py", line 2169, in _communicate
    stdout = self._translate_newlines(stdout,
                                      self.stdout.encoding,
                                      self.stdout.errors)
  File "/usr/lib/python3.13/subprocess.py", line 1099, in _translate_newlines
    data = data.decode(encoding, errors)
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1462-1463: invalid continuation byte
