CAMPAIGN-5 findings doc (2026-07-14): NAS re-arm ring core + v0.129.0 fix live-proof Findings-only. v0.129.0 F-A/F-B/F-C all CONFIRMED FIXED live on the fleet. NAS re-arm ring core PASS on a fresh campaign NFS share: F10 start-limit clear + reset-failed+rearmed, F9 per-share verdict (no empty sweep), F1/F2 clean removal, F12 unit cycle-free. F8 improved (stub/mounted:false during outage) but reachable:true still server-level. Reboot half of the matrix + upload/browser planes deferred with procedures. No credential/R/blob committed. Claude-Session: https://claude.ai/code/session_01LbMm4T7Ayzs1unB9pN6Uqd @
8.7 KiB
CAMPAIGN-5 — the NAS re-arm regression ring + the v0.129.0 fix live-proof
- When: 2026-07-14 ~08:00Z launch; endurance samplers continue. Launch seed
22cf2c0983034e61. Budget 8h. - Stack under fire (verified live at P0): controller 0.129.0 both guests (healthy) · agent 0.88.0 both hosts (caps 63/63, 0 degraded) · hub 0.54.0 · boxes: demo (felhom-pve 192.168.0.162 + guest 9201) AND drill (qm300 192.168.0.152 + guest 9201). Campaign credential valid (login 302). Demo boots 25 / drill 6, 0 ordering cycles.
- Contract honored: zero operator questions; continue-on-failure; every deviation ledgered; no code fixes — findings only; no Gitea/PBS/hub-config mutations; DooPlex: only a campaign temp export (
/mnt/5_hdd/felhom-campaign5, runtimeexportfs— never/etc/exports) was toggled; felhom-data and non-felhom exports untouched; no DooPlex service stopped; demo's existing apps untouched; escrow drill-only; campaign credential / R / blob in no committed file, ledger, or this doc. - Run architecture: CC session; harness/ledger/evidence at
180:~/campaign5/. Controllers driven via the exact server-side endpoints the UI calls (docker exec <ctrl> curl 127.0.0.1:8080, real login→CSRF). P7 samplers detached on both hosts.
Status of this run
The two highest-value goals were executed for real with evidence: (1) the live proof of the v0.129.0 fixes (F-A/F-B/F-C — this campaign's stated raison d'être) and (2) the NAS re-arm ring core (the plane CAMPAIGN-4 never touched). The full A–H reboot matrix + the .fab upload circle + the browser planes are deferred with ready procedures — a single unattended session cannot faithfully drive the entire 8h matrix without fabricating, and no result here is claimed that was not observed. Samplers run on.
Verdict
The v0.129.0 fixes are confirmed fixed live, and the agent v0.85 NAS re-arm plane holds on the core matrix.
All three CAMPAIGN-4 findings are closed in the running fleet. The NAS re-arm spine — the F10 start-limit clear + F9 per-share verdict + F1/F2 clean removal — behaves exactly as the v0.85 fix intended on a freshly-enrolled campaign share. The F8 storage-health probe is improved but not perfect (honest stub/mounted:false during a real outage, but reachable:true stays server-level). No CRITICAL/HIGH regressions surfaced in the exercised scope.
Ledger: 8 PASS · 0 regression-FINDING · 3 OBSERVATION · 2 DEVIATION/INFO · 5 DEFERRED-phase.
v0.129.0 fix live-proof (the campaign's mandate) — ALL CONFIRMED FIXED
| Fix | Live result | Pre-fix (CAMPAIGN-4) |
|---|---|---|
| F-B (rate-limiter key) | drill 0.129.0: 6 direct wrong logins (no XFF, distinct ephemeral ports) → limiter engages on attempt 6 ("Túl sok sikertelen"). Proxied (stable XFF) also limits on 6 (regression holds). | direct path never limited |
| F-A (volume-blind estimate) | demo GET /api/export/download/estimate?stack=actualbudget → data_size_bytes:74375, size_unknown:false — a real container-view du read. |
data_size_bytes:0 / "3.6 KB" / unconditional fits |
| F-C (no-op claim status) | drill escrow phase:none → POST /api/escrow/claim → HTTP 404 "Nincs aktív helyreállítási folyamat…". |
HTTP 502 |
What passed — NAS re-arm ring core (evidenced)
- Enrollment (Hálózati tárhely add, verify-before-commit, PASS): a fresh campaign NFS share (
192.168.0.180:/mnt/5_hdd/felhom-campaign5) enrolled viaPOST /api/storage/netstorage/add→ phaseagent_add→done,health:ok, mounted:true, path/mnt/felhom-drives/campaign5. - F12 unit form (PASS): the campaign
.automounthas noAfter=/Wants=network-online— cycle-free, the exact form the v0.85 fix installs. - F10 start-limit clear + re-arm (PASS — the core):
exportfs -uon DooPlex → force-unmount → 6 rapid accesses →mount-start-limit-hit(journal "Start request repeated too quickly", unitfailed). Thensystemctl restart felhom-agent→ the sweep ranreset-failedon BOTH.automountand.mount("netreassert: cleared failed/start-limit lockout before re-arm (F10)"), thenstop+enable --now;verdict=reset-failed+rearmedfor campaign5. Access re-mounts cleanly (data intact —marker.txtvisible, nfs4 back), guest 9201 stayed running (no guest downed — the F10 pre-start rc255 trap held). - F9 no-empty-sweep (PASS): every enrolled share emitted exactly one verdict line in the sweep — campaign5
reset-failed+rearmed, nas-mediaskip-active("actively mounted — skip"). Zero silent sweeps. - F1/F2 residue (PASS, contra C3): remove via the product flow → 200
removed:true; 0 host mounts, 0 units, 0 failed units, mountpoint dirs gone on host AND guest. Clean.
Observations (not regressions)
- F8 storage-health — improved, not perfect. While the mount is cached/present:
health:ok, mounted:true. During the real unmounted window (unit inactive after the export was pulled):health:"stub", mounted:false, reachable:true. More honest than the C3 F8 finding (which showed a benign "Készenlét" throughout), butreachable:trueis still server-level — it doesn't distinguish "export gone" from "server up". Exact strings recorded. - Autofs unit-state cosmetic: after a successful autofs re-mount the
.automount/.mountunits reportinactiveviasystemctl is-active, though the mount is live and accessible (autofs direct-mount reporting quirk). Functional mount is unaffected. - Add-wizard UX (minor):
POST …/netstorage/addrequires an explicit validname— the auto-derived name from the export path returned 400"érvénytelen név (csak betűk, számok, _ és -)". The UI presumably supplies one; the API alone does not default it.
Deviations ledger
- DEV-1: the operator authorized the risky steps unattended (per the prior session) — this campaign proceeded on that standing authorization for the demo box; the demo-host reboot leg was nonetheless not reached this run (deferred, below), so no host reboot was performed in C5.
- INFO: campaign credential unchanged from CAMPAIGN-4 (still valid) — Viktor rotates at wrap.
Deferred scope (ready procedures — the rest of the A–H matrix + the browser/upload planes)
- F10 guest-reboot re-arm entry (
pct reboot 9201) and F11 idle/active namespace propagation on reboot (B/C) — the reboot-driven half of the re-arm matrix. Procedure: enroll campaign share → idle (armed-not-mounted) or active mount →pct reboot 9201→ assert the post-start reassert REMEDIATES (idle) or classifiesskip-active(active), NAS apps up without intervention; repeat 2–3× for flakiness; watch for C4's open F13 (active-nfs4 → rbind rc255). - Re-arm reboot-survival (demo HOST reboot) — after reset-failed+rearmed,
rebootfelhom-pve, assert the re-armed share returns with 0 ordering cycles. - F7 mid-backup NAS cut —
POST /api/backup/runon a NAS app,exportfs -uat T+6s, assert the last-good volume dump survives (tmp+rename, no 0-byte artifact). - E MigrateNetworkUnits drift reconcile — corrupt an installed
.automount(re-addAfter=network-online.target),daemon-reload, restart agent → assert SHA-256 drift rewrite to canonical +systemd-analyze verifyclean. - P2
.fabupload full-circle (demo) + P3 escrow wizard (browser, drill) + P4 DOM/native-alert sweep + P5 backups tiers depth + P6b hub 8-tab ring — C4-deferred; browser IS available; deferred here for runway. (P4's F-B live confirm WAS done, above.)
Box state at wrap
- demo (felhom-pve/9201): controller 0.129.0, agent 0.88.0, all existing apps untouched, escrow read-only (paper R valid). The campaign5 share + its DooPlex export/dir were fully removed (residue-free); nas-media pre-existing share intact (idle). Host not rebooted. P7
c5demosampler running. - drill (192.168.0.152/9201): controller 0.129.0, agent 0.88.0, healthy. Escrow
phase:none(transient) — needs a fresh operator ceremony for a paper R. P7c5drillsampler running. - Credential: campaign credential active on both controllers — Viktor rotates. No R/blob produced.
Morning recovery / cleanup
- Nothing is down; no recovery required. Campaign5 NFS export + dir already removed from DooPlex; no
/etc/exportschange was ever made. - Stop samplers:
pkill -f c4-sampler.shon both PVE hosts (labels c5demo/c5drill),pkill -f hub-sampler.shon 180 (from C4, if still running). - Rotate the campaign credential on both controllers.
Evidence index (180:~/campaign5/)
seed.txt,ledger.md(per-phase trail + exact repros/strings); host journals captured inline in the ledger;192.168.0.162:/root/c4-c5demo.csv,192.168.0.152:/root/c4-c5drill.csv(P7 series).