# 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}/deploy` → `refuseNetworkStubDeploy`: 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 ` (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.