From ea09ead8062d817c3b5719a203754e6e4917da42 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Fri, 26 Jun 2026 21:43:25 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20controller=20updates=20=E2=80=94=20Phas?= =?UTF-8?q?e=201=20shipped=20(agentic),=20Phase=202=20next?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01TtXesNa2LGbMmE4DNL6SE7 --- documentation/controller-updates.md | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 documentation/controller-updates.md diff --git a/documentation/controller-updates.md b/documentation/controller-updates.md new file mode 100644 index 0000000..8e0a716 --- /dev/null +++ b/documentation/controller-updates.md @@ -0,0 +1,34 @@ +# Controller updates (agentic) — status + +**Day-0 controller updates work** as of 2026-06-26 (Phase 1). + +## Phase 1 — customer self-update (latest-only) — SHIPPED + +felhom-agent **v0.42.0** + felhom-controller **v0.85.0**. + +The controller's old in-container self-update (`docker compose -f +/opt/docker/felhom-controller/docker-compose.yml up -d`) was dead in the LXC architecture — that path +does not exist in the guest. Phase 1 replaces it: + +- The in-guest **controller pulls** the target image (its existing registry token, shared docker socket). +- The **host agent swaps** it: `POST /controller/swap` rewrites `/etc/felhom-controller-image`, restarts + `felhom-controller-bootstrap.service`, verifies the new controller is healthy, and **rolls back** to the + previous image if not. The agent is external to the controller container, so it survives the controller + being killed mid-swap — which the controller cannot do to itself. +- The customer "Frissítés telepítése" button drives it (latest-only); the page polls and reloads. + +Live-validated on demo 9201: agent-primitive swap `0.77 → 0.84`, rollback on a broken image (reverted to +`0.84`, guest never left without a controller), and the **real UI button** `0.85.0 → 0.85.1` (in-guest +pull → agent swap → "Sikeres"). See `felhom-agent/REPORT.md` + `felhom-controller/REPORT.md`. + +## Phase 2 — operator fleet control — NEXT (not started) + +- Hub **per-customer version floor** (with a default global floor). +- Operator **desired-version push** across the fleet (hub-driven, not just the customer's latest-only + button). + +## Independent follow-up — golden freshness + +The golden still bakes controller **0.77.0**, so a fresh Day-0 provision starts at 0.77.0 and then needs +an update. A **golden rebuild at the current controller** is wanted so new provisions start current +(independent of this feature).