Files
felhom-controller/REPORT.md
T
admin a6da64da15 controller v0.119.0: storage-health coherence F8 + mapped_uid F4 — docs + CHANGELOG + REPORT + CONTEXT
F8: share row fuses the shipped v0.117 classifier (fuseNetHealth) so it agrees with
the stacks stub badge (one classification, two surfaces). F4: mapped_uid range check
1..65533 at the door. §3 fork = option B (controller-only). Live-validated on 9201.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017CDMFpFx84pfviCTVuGGhf
2026-07-12 09:44:22 +02:00

3.8 KiB

REPORT — v0.119.0: storage-health coherence (F8) + mapped_uid validation (F4)

Date: 2026-07-12 · Version: controller v0.119.0 (from v0.118.0) · MinAgent: 0.81.0 (UNCHANGED) · Deployed: guest 9201 (0.119.0 healthy) · Source: felhom.eu/documentation/audits/CAMPAIGN-3-2026-07-11.md.

§3 design fork — decision

Took the recommended option B (controller-only): the share row reuses the shipped v0.117.0 consuming-namespace classifier (system.ClassifyPathFS) — the exact ground truth the stacks-page stub badge already reads. No agent change, no new probing surface, and by construction the row and the stacks badge can never disagree (single source). Option A (agent-side export-level probe) was not built.

What shipped

  • F8 (MED) — one classification, two surfaces. networkStorageItems now fuses the agent's health with the namespace classification via fuseNetHealth: a new stub state overrides a benign idle/ok when the consuming namespace sees local disk at Where; a whole-server unreachable still wins over stub; autofs-healthy / network / unknown leave the agent health intact (no manufactured fault, no force-mount). Row badge for stub = "Hibás — az alkalmazások nem a NAS-t látják". The share row and the stacks/dashboard badge now derive from ONE classifier.
  • F4 (LOW) — mapped_uid/gid range check at the door. handleNetStorageAdd validates the container uid/gid (1..65533) after the <=0 default, before the job — out of range → friendly Hungarian 400, nothing installed. Catches the campaign's 101000 (a host-side mapped value) that used to leak a raw agent_error.

Tests + red-proofs (all green)

  • F8 fusion table: idle+stub→stub (the contradiction resolved), ok+stub→stub, idle+autofs→idle (the over-eager autofs=stub mutant fails here), unreachable+stub→unreachable (server wins), idle+unknown→idle (no manufactured fault). End-to-end networkStorageItems stub fusion (companion: drop the fuse call → row shows raw agent health → fail).
  • F4: uid 101000 → 400 + friendly message, agent never reached (companion: drop the check → reaches the agent → fail); 65534 → 400; 1000 / 65533 / 0-defaults pass the range check.

Live validation (demo 9201, sim-NAS rails — exportfs only)

  • F8 the contradiction, killed: baseline healthy → row ok, no stub badge. exportfs -u while idle
    • drop the mount → the SHARE ROW showed health=stub ("Hibás — az alkalmazások nem a NAS-t látják") AND the stacks page showed the stub badge (4) — the two surfaces AGREE (previously: row "Készenlét" + stacks stub = contradiction). reachable:true throughout (the server-level dial is still green — the exact F8 blindness, now correctly overridden). Re-export → row cleared back to ok/"Elérhető" (healthy idle NOT downgraded — the regression).
  • F4: mapped_uid:101000 → 400 + the friendly message, registry unchanged (no c5uid), no host unit/dir residue; mapped_uid:1000 → 200, passed the range check (then failed later at the unreachable probe as designed, rolled back clean).

NOT live-validated / standing items

  • unreachable-wins live (a genuine server-down IP on a registered share) — unit-tested only; the F8 live proof used the export-level cut (the actual finding).
  • Task D remains queued: fix-3 boot-time app-start-failure alerting + the ring wrap/count revision (fix-6 6.5-min horizon under load).
  • Peti's box (controller 0.113 / agentless-on-proxmox2) reaches 0.119 (+0.85/0.118) at his next train.
  • No publish/floor movement; agent untouched (MinAgent 0.81.0).

Box state at wrap

controller 0.119.0 healthy on 9201; nas-media healthy + ok; registry = nas-media only (no test residue); all NAS apps healthy; NFS re-exported.