# 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).
