## 2026-06-20 09:29 UTC - Backup/Restore pilot state

- Role/context: kube-bot is operating as read-only/passive K3s diagnosis assistant. No cluster, infrastructure, firewall, service, secret, deployment, PVC, or Longhorn changes without explicit OK from Mislav.
- Backup/restore pilot direction: `platform/cluster/prod` is accepted only as a backup-strecken pilot, not a productive control-plane restore pilot. Scope is read-only cluster/platform artifacts, client-side encryption before `dmz-backup`, Synology pull without `--delete`, restore verification only via staging/parser/docs, no etcd/node/productive control-plane restore, no plaintext secrets, no PVC/Longhorn changes.
- First app pilot: Homarr is selected as the simple app pilot. Target path concept: `k3s-dmz/tenants/pidoka/prod/homarr/`.
- Homarr pilot phase 1 status: kube-bot already did a read-only local dry-run/vorlauf only. No cluster changes, no PVC data export, no Longhorn snapshots/backups, no Secret values, no push to `dmz-backup`.
- Homarr live findings from dry-run: Deployment `my-homarr` was `1/1`, pod `Running`, restarts `0`; PVCs were `my-homarr-data` local-path 100Gi, `my-homarr-icons` Longhorn 10Gi, `my-homarr-config` Longhorn 10Gi; Longhorn volumes for icons/config were healthy. Secret `my-homarr-homarr-secrets` was documented only as reference.
- Local Homarr artifact from dry-run: `/home/node/.openclaw/workspace/backups/20260620T073545Z__dmz-k3s__pidoka__homarr__metadata__pilot.tar.gz`; SHA256 `b698c3b0456c36950338838a7b98bb83d63290852a75feab44b9e803e7dc9793`.
- Push blockers before `dmz-backup`: encryption tool/recipient or Infisical path, verified SSH host key, technical target user, target path.
- Design decision: `dmz-backup` should stay simple SSH/SFTP/rsync staging and file storage, with no active backup service, no permanent keys, no MinIO/S3 for Homarr phase 1.
- Restic/Kopia decision: Homarr phase 1 does not need Restic/Kopia. Restic is preferred later for real file/PVC/app/DB backups; Kopia may be revisited if richer policy/UI features are needed. Restic/Kopia should run source-side or in an explicitly approved K3s Job/CronJob, not as backup logic on `dmz-backup`.
- Infisical Intranet project for backup/restore exists. Node: `http://192.168.1.121`; organization `cattaro_gmbh`; project `Backup_Restore`; project ID `ba0a79d9-32fe-474c-be2f-88384a3d9749`; slug `backup-restore-rb-he`; environments `dev`, `staging`, `prod`. kube-bot verified read-only access without exposing token or Secret values.
- Proposed Infisical `Backup_Restore`/`prod` naming schema from Mislav/Synology side: `DMZ_BACKUP_HOST=192.168.20.90`, `DMZ_BACKUP_SSH_HOSTKEY_ED25519_SHA256`, `DMZ_BACKUP_HOMARR_PUSH_USER`, `DMZ_BACKUP_HOMARR_PUSH_SSH_PRIVATE_KEY`, `DMZ_BACKUP_HOMARR_PUSH_SSH_PUBLIC_KEY`, `DMZ_BACKUP_HOMARR_TARGET_PATH`, `BACKUP_HOMARR_AGE_RECIPIENT`, `BACKUP_HOMARR_AGE_PRIVATE_KEY` or later `RESTIC_PASSWORD`.
- Phase 1 encryption preference: use `age` for a simple encrypted artifact first; use Restic later only when doing real file/PVC backups with a repository concept.
- Secrets rule: no plaintext secrets in Slack, metadata files, or `dmz-backup`; store values in Infisical `Backup_Restore`; Slack/local docs may contain only references, paths, fingerprints, and non-secret metadata.

## 2026-06-20 10:41 UTC - Homarr backup pilot run

- Mislav asked both bots to continue without him and perform a Homarr backup.
- kube-bot performed only the narrow safe pilot scope: read-only metadata/manifests/checksum export from DMZ-K3s via `kube-bot@192.168.20.40`; no cluster changes; no PVC payload data; no Longhorn snapshot/backup; no Secret values.
- Fresh local artifact: `/home/node/.openclaw/workspace/backups/20260620T104142Z__dmz-k3s__pidoka__homarr__metadata__pilot.tar.gz`; SHA256 `64802165be001fd7c5dab1a59bf0f97934ce47aa31863fcf0c622d0bfa66db87`.
- Working directory: `/home/node/.openclaw/workspace/backups/homarr-pilot-20260620T104142Z`.
- Secret reference captured only as `my-homarr-homarr-secrets` / `Opaque` / key name `NEXTAUTH_SECRET`; no Secret value exported.
- `dmz-backup` push was not performed because Infisical `Backup_Restore/prod` has `DMZ_BACKUP_*` SSH/target path values, but no `BACKUP_HOMARR_AGE_RECIPIENT` or equivalent encryption recipient yet, and local `age` is unavailable.
- Next step: define/install the encryption path, then encrypt the artifact client-side before pushing to `k3s-dmz/tenants/pidoka/prod/homarr/`.
- diskstation-bot prepared the `dmz-backup` side for Homarr: `/srv/dmz-backup/k3s-dmz/tenants/pidoka/prod/homarr`, owner `openclaw:openclaw`, mode `750`, write test OK; no MinIO/S3 or service changes.
- Both bots stopped correctly before push: no `BACKUP_HOMARR_AGE_RECIPIENT` or equivalent encryption key in Infisical, and `age`/`rage` unavailable in both bot runtimes. OpenSSL exists but no approved passphrase workflow is defined.
- Mislav asked at 2026-06-20 11:32 UTC to remember this state. Recommended next step remains: install/enable `age`, create/store Age keypair in Infisical `Backup_Restore/prod`, then client-side encrypt and push the existing local Homarr pilot artifact.

## 2026-06-20 17:55 UTC - Homarr encrypted push completed

- Mislav reported `age` v1.3.1 and `age-keygen` are available at `/home/node/shared/tools/age` and `/home/node/shared/tools/age-keygen`.
- kube-bot generated a Homarr Age keypair and stored only in Infisical `Backup_Restore/prod` under `BACKUP_HOMARR_AGE_RECIPIENT`, `BACKUP_HOMARR_AGE_PRIVATE_KEY`, and `BACKUP_HOMARR_ENCRYPTION_TOOL=age-v1.3.1`; no key values were posted or written to notes.
- Encrypted artifact created locally: `/home/node/.openclaw/workspace/backups/20260620T104142Z__dmz-k3s__pidoka__homarr__metadata__pilot.tar.gz.age`; encrypted SHA256 `b90154a732f756a10de218f30d28fa9afd8bd15644781aa207011188ca4a5f19`.
- Local decrypt verification with the Infisical Age identity succeeded against the original artifact.
- Encrypted artifact and `.sha256` were pushed to `dmz-backup`: `/srv/dmz-backup/k3s-dmz/tenants/pidoka/prod/homarr/20260620T104142Z__dmz-k3s__pidoka__homarr__metadata__pilot.tar.gz.age`; remote `sha256sum -c` returned OK.
- Scope remains metadata/manifests only: no Secret values, no PVC payload, no Longhorn snapshots/backups, no cluster mutation.
- Note: an initial Age private-key storage attempt had the wrong identity format; kube-bot replaced it by generating a new keypair, re-encrypting, re-pushing, and verifying. The authoritative encrypted SHA256 is `b90154a732f756a10de218f30d28fa9afd8bd15644781aa207011188ca4a5f19`.
