{{template "icon_sprite"}}

Felhom Hub

Configuration

{{if eq .Flash "assets_refreshed"}}
Assets refreshed successfully from image seed.
{{end}} {{if eq .Flash "assets_error"}}
Asset refresh failed. Check server logs for details.
{{end}} {{if eq .Flash "assets_not_configured"}}
Asset manager is not configured.
{{end}} {{if eq .Flash "floor_set"}}
Controller-version floor saved.
{{end}} {{if eq .Flash "floor_invalid"}}
Invalid version — use X.Y.Z (or blank to clear).
{{end}} {{if eq .Flash "artifacts_set"}}
Artifact manifest saved.
{{end}} {{if eq .Flash "artifact_ver_invalid"}}
Invalid artifact version — use X.Y.Z (or blank to clear).
{{end}} {{if eq .Flash "artifact_sha_invalid"}}
Couldn't set the checksum — the Gitea sha lookup failed (version missing / Gitea unreachable) or the manually-entered sha is invalid. Manifest unchanged.
{{end}}

Managed updates — global floor

The minimum controller version every box auto-updates to (unless a per-customer override is set). Saving takes effect immediately — boxes below the floor update on their next report, no customer action. Blank = no global floor. This setting is independent of the Day-0 artifact manifest below.

Effective floor: {{if .FloorRes.Effective}}v{{.FloorRes.Effective}}{{else}}none{{end}} {{if eq .FloorRes.Source "db"}} — source: DB (hub_settings){{if .FloorRes.EnvValue}}; env fallback would be v{{.FloorRes.EnvValue}}{{end}} {{else if eq .FloorRes.Source "env"}} — source: env fallback (DEFAULT_MIN_CONTROLLER_VERSION); no DB override set {{else}} — no floor from either source {{end}}

{{.CSRFField}} DB override: {{if .FloorRes.DBValue}}v{{.FloorRes.DBValue}}{{else}}none{{end}}

Day-0 artifacts — agent & golden

The current agent binary + golden archive the host-bootstrap script fetches from Gitea and verifies (sha256) before installing. The hub vouches for these checksums (a different trust root than Gitea). Pick a version — the sha256 is read from Gitea automatically (no manual copy). Choose — none — to clear an artifact.

{{.CSRFField}} {{if .AgentChoices}} {{else}} {{end}} {{if .GoldenChoices}} {{else}} {{end}} The golden's controller CHANGELOG MinAgent:. The hub HOLDS the floor for any box whose agent is below this — blank = uncoupled release, no gating.

Assets

App logos and screenshots served to controllers. Assets are seeded from the Docker image and synced to controllers daily via the asset manifest API.

Files in manifest {{.AssetCount}}
Manifest generated {{if .AssetLastSync}}{{.AssetLastSync}}{{else}}—{{end}}

Re-reads the baked-in asset seed directory and updates changed files. Controllers will pick up changes on their next daily sync or manual trigger.