# Reboot recovery — 2026-07-16

Host **koopa** rebooted (~20:23 CEST). Containers came up via
`unless-stopped` + user units, but **Taler app processes inside** merchant/bank
did **not** (containers run `sleep infinity`).

## What was broken after boot

| Symptom | Cause | Outcome |
|---------|--------|---------|
| `taler.hacktivism.ch/intro` **502** | only `sleep infinity` in merchant | fixed manually, then **automated** |
| `bank.hacktivism.ch/intro` **502** | bank same; landing nginx off | fixed + automated |
| Bank **auto-confirm** missing | not started after boot | automated (`--loop 2`) |
| `koopa-tor-relay` crash-loop | host **`tor.service`** binds **8080**/**9051** | still open → `ISSUES.md` |
| `koopa-paivana` **502** | merchant private API down at start | unit now **After** merchant-apps |
| Exchange / forgejo / bonfire / castopod / tops / nym / prime | mostly OK | — |

## Automation (removes manual post-boot)

Installed on koopa (user **hernani**):

| Piece | Role |
|-------|------|
| `~/.local/bin/ensure-taler-apps.sh` | start base + merchant/bank apps + auto-confirm |
| `taler-merchant-apps.service` | oneshot after `container-taler-hacktivism` |
| `taler-bank-apps.service` | oneshot after `container-taler-hacktivism-bank` |
| drop-ins `container-taler-*.service.d/apps.conf` | `Wants=` the apps units |
| paivana `order.conf` | `After=taler-merchant-apps.service` |

Repo sources: `scripts/taler-shared/`, `configs/systemd/user/`.  
Install/reinstall: `scripts/taler-shared/install-ensure-taler-apps.sh`.

```bash
# status / force now
systemctl --user start taler-merchant-apps.service taler-bank-apps.service
~/.local/bin/ensure-taler-apps.sh status
```

Auto-confirm poll: **2 s** (was 4 s).

## Quick health

```bash
curl -sk -o /dev/null -w '%{http_code}\n' https://taler.hacktivism.ch/config
curl -sk -o /dev/null -w '%{http_code}\n' https://taler.hacktivism.ch/intro/
curl -sk -o /dev/null -w '%{http_code}\n' https://bank.hacktivism.ch/config
curl -sk -o /dev/null -w '%{http_code}\n' https://bank.hacktivism.ch/intro/
curl -sk -o /dev/null -w '%{http_code}\n' https://exchange.hacktivism.ch/keys
```

Expected: **200** on config/intro/keys (site root may **302** → `/intro/`).
