# R116-PART5-2026-07-30 — the fix shipped, C5 still fails, and the mechanism is NOT isolated

**Run:** `RUNBOOK` R-116 Part 5, executed by CC on DooPlex, 2026-07-30.
**Result: FAILED.** Agent **0.115.0** — the R-116 fix, installed from the Day-0 manifest — did **not**
change the outcome. The absent-drive alarm is still the generic one.

| Claim | Verdict |
|---|---|
| **C5** — `backup_target_absent` on detach, `backup_target_restored` on return, paired | ❌ **FAIL** — detach still fires `storage_disconnected`; return fires the specific event. Same asymmetry as Session C |
| **Discrimination** — target ⇒ specific, non-target ⇒ generic | ❌ **FAIL** — the *target* produced the generic event, so the two are still indistinguishable. Not achieved |
| **No over-correction** | ✅ **PASS** — 0 ABSENT lines with the drive present; target `degraded:false` |

## 1. What ran — the fully shipped stack

| Artifact | Version | How |
|---|---|---|
| agent | **0.115.0** | **from the Day-0 manifest** — `Artifact manifest served for customer sess-d (agent=0.115.0 golden=0.185.1)`; host row `sess-d-0452c4 … 0.115.0 ONLINE` |
| controller | **0.185.1** | from the vouched golden — **no hand-deploy this run**, deliberately, so the whole stack is the shipped article |

Part 4's three positive observables were all obtained **before** the run: registry newest `0.115.0`,
hub vouches `0.115.0`, felhom-pve reports `felhom-agent 0.115.0` active with 0 errors. The publish
step that was forgotten twice was not forgotten.

Fence reconfirmed: `local-lvm` **38.83 %** before and after. Guest 9201 and `drill-r50` untouched.

## 2. The observation

```
05:07:12  [gate] drive ABSENT /mnt/felhom-drives/cel — stopped+blocked 0 app(s)
05:07:15  Event pushed: storage_disconnected (error) — Meghajtó váratlanul leválasztva: Cel meghajto
          backup_target_absent : 0     storage_disconnected : 1

05:11:43  [gate] drive RETURNED /mnt/felhom-drives/cel
05:11:43  Event pushed: backup_target_restored (info)
```

Identical to Session C. The gate fires correctly (R-113 holds, 0 s–3 s), `SetDisconnected` is reached,
and the wrong event goes out.

## 3. Why the fix did not fire — NOT ISOLATED, and that is the honest answer

The v0.115.0 change sets `di.GuestPath` on the Observe row when
`di.GuestPath == "" && di.BackupTarget && t.BackingDevice == ""`. It is unit-tested and red-proofed
against a fixture built from the Session-C shape. On the live box it changed nothing.

**What was established:**

- With the drive detached, `pvesm status` reports the storage as
  `felhom-backup  dir  inactive  0  0  0`, and PVE emits
  `unable to activate storage 'felhom-backup' - directory is expected to be a mount point but is not
  mounted: '/mnt/cel'`. So the storage is *listed but inactive with zeroed fields* — a shape the unit
  fixture did not model (it supplied a `MountPath` and a `disconnected` state).

**What was NOT established, and must not be guessed at again:** the actual `/disks` payload. Three
attempts to read it failed on token extraction across the ssh → guest → container layers. A
**control query with the drive PRESENT also returned 0 rows**, which proves the query itself was
broken, not the payload. Without that control this run would have recorded a third false mechanism —
after "the union row writes false" (wrong, corrected) and "no row carries the guest path" (unverified).

**So the honest state is: the fix addresses a shape that does not occur on the live box, and which
shape does occur is unknown.** The leading hypothesis — that an *inactive* storage reaches Observe with
an empty `MountPath`, so `StablePathForRaw("")` returns `""` and the fallback sets nothing — is
consistent with the `pvesm` output but **is not evidence**.

**The next session's first job is a working `/disks` read**, with a present-drive control run *first*,
before any further code. Everything after that is guesswork until it exists.

## 4. Also observed

- **The stale bind survives the return and still names a dead device node.** After the drive came back
  as `/dev/sdc`, `findmnt /mnt/felhom-drives/cel` still read `/dev/sdb[/felhom-data]` while the state
  reported `degraded:false`. Third consecutive run showing this; still not investigated.
- **Discrimination could not be reached.** Because the target itself produced the generic event, there
  was no point staging the non-target leg: the two cannot be told apart regardless of what it emits.
  Reported as a FAIL, not as Session C's trivial pass.

## 5. Teardown

VM 9302 destroyed `--purge`, `p5-images` removed, scratch dir removed. **`pvesm status` after == before**
(`local-lvm` 38.83 %). Guest 9201 and `drill-r50` untouched.

**Customer `sess-d` + host `sess-d-0452c4` remain** — the delete gate refuses while the host still reads
ONLINE, as in both prior runs. Deletable once it ages to DOWN (>1 h):

```
POST /configs/sess-d/delete  ack_hosts=1 ack_reset=1 ack_purge=1 confirm_id=sess-d expect_hosts=1
```

## 6. Standing of agent v0.115.0

It is **published and vouched**, and it is **inert** — it adds a guest path in a case that apparently
does not arise, so it neither fixes nor breaks anything observable. It was NOT reverted: reverting is
itself a change, the runbook forbids fixing mid-run, and the code is well-tested and harmless. Whether
to keep, extend or revert it is the next session's decision, taken with a working `/disks` read in hand.
