Files
felhom-controller/REPORT.md
T

3.9 KiB

REPORT — v0.117.0: consuming-namespace NAS verification + deploy-view truth (RCA fixes 2+4)

Date: 2026-07-11 · Version: controller v0.117.0 (from v0.116.1) · MinAgent: 0.81.0 UNCHANGED (all checks controller-namespace-local; no new agent API) · Deployed: guest 9201 (0.117.0 healthy) · NOT published/vouched — Peti stays 0.113.0. Pairs with agent v0.84.0 (RCA fix 1). Commits: c0f3e12 + 4a9c54a (linux-suite test pin). Source: felhom.eu/documentation/audits/AUDIT-nas-cwa-rca-2026-07-11.md.

What shipped

  • internal/system/fsclass*.go — statfs f_type classifier for THIS process's namespace: network (nfs/cifs/smb2) | autofs (healthy idle trigger, NEVER force-mounted) | stub | unknown (error/3 s timeout → fail open). Seams: statfsFn, netProbeFSClass, Server.classifyFSPath, Router.classifyFSPath.
  • Fix 2a — probe assertion: --netprobe child creates the probe file first (legitimately triggers the automount), then REQUIRES a mounted network fs → exit 5 → category not_network_fs, new §3.2 Hungarian message, full rollback, nothing registered.
  • Fix 2b — deploy refusal: POST /api/stacks/{name}/deployrefuseNetworkStubDeploy: a registered network HDD_PATH classifying as stub refuses 409; idle autofs / live / unknown / local / unregistered / empty all proceed.
  • Fix 2c — stub badge: networkStorageWarnings → (warnings, stubs); stub leg runs even when the agent is unreachable; dashboard + stacks cards render "Hálózati tárhely hibás — az alkalmazás nem a NAS-t látja"; stub WINS over unreachable; the unreachable line stays byte-identical (template-asserted). Pure core networkStorageWarningsIn + stubNetworkPaths.
  • Fix 4 — deploy-view truth (the RCA S-C symptom): deployed-app storage select marks selected by the STORED HDD_PATH; absent stored path → extra disabled <path> (nem elérhető) option; IsDefault selects only for NEW deploys.

Tests + red-proofs

Test Result Red-proof
magic table + seam + real-local-dir-is-stub (linux) PASS
TestNetProbeChild_StubRefused / _AutofsAfterCreateRefused / _RealLocalDirRefused (linux) PASS assertion disabled → the stub VERIFIED (exit 0) → FAIL
TestNetAdd_StubProbe_RollsBackNotRegistered (rollback + not registered + Hungarian) PASS same mutation → job phase done → FAIL
TestRefuseNetworkStubDeploy_Table (7 rows) PASS mounted-only gate → idle-autofs + unknown rows FAIL (over-refusal)
TestNetworkStorageWarningsIn_StubWins / _UnreachableAloneUnchanged PASS
TestNetworkBadgeTemplates_DistinctStrings (unreachable line byte-identical) PASS
TestDeployPage_DeployedSelectShowsStoredHDDPath (real Manager + real template render) PASS IsDefault-only revert → default drive selected → FAIL (both assertions)
TestDeployPage_MissingStoredPathRendersTruthOption PASS

Full suite green on Windows AND on 180 (linux); the linux run caught the pre-existing C5 child-body suite needing the classifier pinned to network (fixed in 4a9c54a — the real statfs correctly refuses a tempdir). Gates: template_id_gate.py + emoji_gate.py OK.

Deploy + live validation

  • Image 0.117.0 built+pushed on 180, deployed to 9201 via the bootstrap mechanism; healthy.
  • Q1c reboot validation (operator GO, with agent 0.84.0): post-reboot, no manual action — CWA auto-started healthy on the NAS, health status=ok on the first cycle, dashboard renders NO stub badge (grep count 0 against the live page).
  • NOT live-validated (test-level only, by design): the stub refusal branches — producing a live stub post-fix would require breaking a healthy guest (the agent now heals it at start). Covered by the red-proven unit/render tests above.

Follow-ups

RCA fixes 3/5/6 queued as separate tasks. Peti publish train: 0.84.0 + 0.117.0.