Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
3.9 KiB
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 A–F; 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/impact→countBoxesBelowFloor, honoring per-customer overrides); an effective-floor + source line (store.ResolveGlobalFloor) shows the resolved value and WHICH source won (DBhub_settingsvs envDEFAULT_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 timestore.ResolveManagedFloor(customerID)HOLDS the controller floor for a box whosehosts.agent_versionis 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 → leafinternal/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).