test(nomercy): Phase 0 floor + baseline captured
PBS floor ct/9201/2026-06-23T17:28:25Z; baseline host/guest/container/agent state; invariant (no rootfs placeholders) PASS; Phase 2.3 (mp1 in vzdump) PASS captured opportunistically. Flagged: onboot:0, two leftover absent drive-intents. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PsnU2ASocYrvzqE82YDYW
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# TEST REPORT — NO-MERCY CAMPAIGN: stable-path model + /mnt/sys_drive + server restart
|
||||
|
||||
**Date:** 2026-06-23 · **Class:** destructive test campaign (operator-authorized, DEMO only)
|
||||
**Targets:** guest **9201** (demo-felhom) on **felhom-pve** (192.168.0.162, N100, PVE 9) ·
|
||||
controller **v0.81.0** · agent **v0.40.0** · hub `hub.felhom.eu`
|
||||
**Rule:** report-don't-fix. No product-code changes. Findings get evidence + `file:line` + a proposed
|
||||
fix direction (NOT implemented).
|
||||
|
||||
## Status legend
|
||||
PASS = effect asserted AND wrong-outcome ruled out · FAIL = wrong outcome observed ·
|
||||
INCONCLUSIVE = could not assert cleanly (reason given).
|
||||
|
||||
---
|
||||
|
||||
## Phase 0 — floor + baseline (non-destructive) — ✅ COMPLETE
|
||||
|
||||
### PBS floor (hard restore floor)
|
||||
- **Snapshot id:** `felhom-pbs:backup/ct/9201/2026-06-23T17:28:25Z` (PBS datastore `felhom-spike` @
|
||||
`felhom@pbs!n100@192.168.0.180`). Backup finished successfully (00:00:15, incremental, reused 89.9%).
|
||||
- **Used?** Not yet (recorded for restore if a later phase wedges 9201).
|
||||
- Note: `felhom-pbs` storage resolves to the PBS server on 192.168.0.180 datastore `felhom-spike`.
|
||||
Writing the floor snapshot there is normal PBS operation (the demo's nightly job already does) — it
|
||||
does **not** mutate/break 180 as a host, consistent with the guardrail.
|
||||
|
||||
### Baseline — HOST (`pct config 9201`)
|
||||
- `rootfs: local-lvm:vm-9201-disk-0,size=32G` · `mp0: vm-9201-disk-1,mp=/var/lib/docker,backup=1,size=200G`
|
||||
- `mp1: vm-9201-disk-2,mp=/mnt/sys_drive,backup=1,size=50G` · `mp8: /mnt/felhom-drives` (bind) ·
|
||||
`mp9: …/bootstrap → /etc/felhom-bootstrap,ro=1`
|
||||
- **`onboot: 0`** ⚠️ — flagged for Phase 4.1 (the spec asserts 9201 auto-starts on host reboot; with
|
||||
`onboot: 0` a plain host reboot will **not** auto-start it). Pre-existing config.
|
||||
- Drives (host `lsblk -f`): `felhom-usb` = `/dev/sdb1` UUID `da9e7089-…` (916 GB HDD);
|
||||
`felhom-flash` = `/dev/sdc1` UUID `81a26531-…` (117 GB USB). Both mounted host-side at raw
|
||||
`/mnt/<name>` AND bind-mounted to stable `/mnt/felhom-drives/<name>` under the shared parent.
|
||||
|
||||
### Baseline — GUEST
|
||||
- `findmnt /mnt`: `/mnt/sys_drive` = `pve-vm--9201--disk--2` (distinct device); `/mnt/felhom-drives/{flash,usb}`
|
||||
= `sdc1[/felhom-data]` / `sdb1[/felhom-data]`.
|
||||
- **Invariant (bug signature) — PASS:** no rootfs placeholder dirs at raw `/mnt/felhom-flash` /
|
||||
`/mnt/felhom-usb` inside the guest (`not present (good)` for both).
|
||||
|
||||
### Baseline — CONTAINER (felhom-controller)
|
||||
- `settings.json` storage paths = ONLY stable `/mnt/felhom-drives/felhom-flash` + `/mnt/felhom-drives/felhom-usb`
|
||||
(no raw entries). Both `findmnt` to the correct `sdX1[/felhom-data]`. `/mnt/sys_drive` = disk-2.
|
||||
- Container `/` = docker-data overlay (197G, the 200G mp0). `/mnt/sys_drive` separate (50G).
|
||||
|
||||
### Baseline — AGENT state (`/var/lib/felhom-agent/`)
|
||||
- `guest-binds.json` → `9201`: `[uuid:81a26531 (flash), uuid:ce9d1d81 (absent), uuid:da9e7089 (usb)]`.
|
||||
- `drive-intents.json`: `277a2179→enrolled (absent)`, `81a26531→enrolled (flash)`,
|
||||
`ce9d1d81→ejected (absent)`, `da9e7089→enrolled (usb)`. ⚠️ Two leftover intents for physically-absent
|
||||
drives (`277a2179` enrolled-absent, `ce9d1d81` ejected) — relevant to Phase 4.3 intent-gate.
|
||||
- Agent version: `felhom-agent 0.40.0`.
|
||||
|
||||
### Deployed apps at baseline
|
||||
- Only base infra running: `filebrowser`, `felhom-controller`, `cloudflared`, `traefik` (all healthy).
|
||||
**No customer apps deployed** — tests needing "an app on a drive" will deploy a small one.
|
||||
|
||||
### Scratch
|
||||
- Loop devices: **LOOP_A=`/dev/loop0`** (`/root/nomercy-scratch/loopA.img`, 2G),
|
||||
**LOOP_B=`/dev/loop1`** (`/root/nomercy-scratch/loopB.img`, 2G). For teardown in Phase 5.
|
||||
|
||||
### Phase 2.3 (opportunistic, captured during the floor vzdump) — ✅ PASS
|
||||
- The floor `vzdump 9201` log: `including mount point mp1 ('/mnt/sys_drive') in backup` and the
|
||||
`proxmox-backup-client` invocation carries `--include-dev /mnt/vzsnap0/./mnt/sys_drive`. mp1 is in the
|
||||
archive. Wrong outcome (mp1 excluded / `backup=0`) ruled out. *(Optional restore-to-scratch deferred.)*
|
||||
|
||||
---
|
||||
|
||||
## Phase 1 — stable-vs-raw path model — ⏳ IN PROGRESS
|
||||
|
||||
## Phase 2 — /mnt/sys_drive third volume — ⏳ PENDING (2.3 PASS captured)
|
||||
|
||||
## Phase 3 — server restart + retired banner — ⏳ PENDING
|
||||
|
||||
## Phase 4 — host reboot + chaos — ⏳ PENDING
|
||||
|
||||
## Phase 5 — restore to clean baseline — ⏳ PENDING
|
||||
|
||||
---
|
||||
|
||||
## Findings (running)
|
||||
_None yet beyond the flagged baseline observations (`onboot:0`, leftover absent intents)._
|
||||
|
||||
## Method notes
|
||||
- User-facing actions: method stated per test (claude-in-chrome vs exact-endpoint). The demo controller
|
||||
renders `/settings` unauthenticated and is reachable in-guest at `127.0.0.1:8080` (curl in-container).
|
||||
Reference in New Issue
Block a user