Files
felhom.eu/REPORT.md
T

3.9 KiB
Raw Blame History

felhom.eu — task reports

Overwrite this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in hub/CHANGELOG.md; the scripts history lives in scripts/CHANGELOG.md.

Hub v0.45.0 — floor-UI separation + per-box MinAgent conditional floor (+ DSM spike, Q1c FAIL) — 2026-07-11

felhom.eu's parts of the NAS/coupling backlog-clear task (composite AF; agent v0.82.0 + controller v0.115.0 shipped in their repos). Commits: hub bbecf05 + manifest 37222d3 + rules bbecf05; DSM findings 37e60b4; Q1c + follow-up 9b95f88.

Hub v0.45.0 (Parts C + D — LIVE, GitOps synced Healthy)

  • Part C — floor-UI separation + effective-floor source: the global controller-version floor is its own card with a type-to-confirm dialog that first shows the live blast radius (GET /configuration/global-floor/impactcountBoxesBelowFloor, honoring per-customer overrides); an effective-floor + source line (store.ResolveGlobalFloor) shows the resolved value and WHICH source won (DB hub_settings vs env DEFAULT_MIN_CONTROLLER_VERSION, both raw values). The Day-0 manifest save provably does not touch the floor (the 9-min-skew incident's root cause, now visible + isolated).
  • Part D — per-box MinAgent conditional floor: the artifact manifest gains MinAgent; at report-ACK time store.ResolveManagedFloor(customerID) HOLDS the controller floor for a box whose hosts.agent_version is below (or unknown vs) MinAgent, flags it on the Hosts dashboard (floor held: agent <v> < MinAgent <w>), and serves it once the agent qualifies. Mechanises "agent BEFORE controller floor" per box — the manual fleet check is retired (rule 3 updated).
  • THE one comparator: web.compareVersions's body → leaf internal/semver (web delegates, store reuses; no import cycle, no second comparator).
  • Red-proofs (all: mutate → predicted failure → revert → green): DB-wins precedence; manifest-save- doesn't-touch-floor; impact count with override exclusion; managed-floor hold/serve/uncoupled/ unknown-agent + a fleet discriminator + the report-ACK wire test (held box omits the floor).
  • Deployed: built 0.45.0 on 180, manifest bumped, ArgoCD hard-refresh + sync → Synced/Healthy, rollout OK, live image felhom-hub:0.45.0. Live state: demo agent 0.82.0, Peti 0.81.0, MinAgent unset (uncoupled → no holds, as expected), floor 0.113.0 (DB).

Part A — DSM spike (findings documentation/audits/SPIKE-nas-dsm-2026-07-11.md)

Real DSM 7.2 (virtual-dsm on DooPlex, macvlan .199, driven via claude-in-chrome, torn down + ports dead) validated the consumer recipes E2E through the live add pipeline: NFS "Map all users to admin" = Route A PASS (hardlink incl.); squash-off = not_writable refusal; plain-user SMB PASS with working hardlinks (Q5 caveat CLOSED for Synology); wrong-password/share classify identically. The copy edits landed in controller v0.115.0; QNAP stays a stated caveat (no emulator — nothing fabricated).

Part E — Q1c restart survival: FAIL (supervised, operator GO)

pct reboot 9201 proved a configured NAS automount trigger does NOT survive a guest reboot: the autofs trigger does not re-propagate into the guest's fresh namespace (shared→slave only carries post-bind mounts), so an in-guest access sees an empty directory and does not trigger the host mount — the dangerous case for a restarting media app. Apps otherwise recovered healthy. FAIL protocol honored (nothing repaired live); root cause + fix (agent ReassertNetworkMounts on guest reboot) spec'd at documentation/backlog/FOLLOWUP-nas-automount-guest-reboot-reassert.md.

NOT done / open

  • The follow-up NAS-reboot-reassert fix (agent) — new task, evidence attached.
  • Held-floor state never fired live (no box below MinAgent, and MinAgent is unset) — test-proven only.
  • QNAP appliance pass (no emulator).