a6da64da15
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
3.8 KiB
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.
networkStorageItemsnow fuses the agent's health with the namespace classification viafuseNetHealth: a newstubstate overrides a benign idle/ok when the consuming namespace sees local disk atWhere; a whole-serverunreachablestill wins over stub; autofs-healthy / network /unknownleave the agent health intact (no manufactured fault, no force-mount). Row badge forstub= "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.
handleNetStorageAddvalidates the container uid/gid (1..65533) after the<=0default, before the job — out of range → friendly Hungarian 400, nothing installed. Catches the campaign's101000(a host-side mapped value) that used to leak a rawagent_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
networkStorageItemsstub 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 -uwhile 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:truethroughout (the server-level dial is still green — the exact F8 blindness, now correctly overridden). Re-export → row cleared back took/"Elérhető" (healthy idle NOT downgraded — the regression).
- drop the mount → the SHARE ROW showed
- F4:
mapped_uid:101000→ 400 + the friendly message, registry unchanged (noc5uid), 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.