Files
felhom.eu/documentation/tests/r87-offsite-proof-2026-08-31/16-teardown.txt
T
admin 7ee25925f9
gates / gates (push) Failing after 17s
R-87 CLOSED: live evidence, capability row, architecture verdict, registers
Controller v0.231.0 + hub v0.110.0, both deployed and verified on demo-hp.

LIVE EVIDENCE (documentation/tests/r87-offsite-proof-2026-08-31/, 16 files, endpoint level
through the exact route the debug button invokes):

- THE CASE THAT MATTERS: a hollow unit - compose declaring opengist_data, manifest
  declaring nothing - was pushed to the live store and the proof returned verdict "fail"
  with volumes_expected_none_captured: opengist_data, emitted EXACTLY ONE
  offsite_proof_empty at severity error, and the hub answered HTTP 200. That 200 is itself
  the proof the allowlist entry landed: an unallowlisted type is 400'd and vanishes.
- THE NATURAL ROUTE WAS TRIED FIRST AND FAILED, and that is recorded rather than hidden:
  stopping the app does NOT produce a failed dump leg, because the off-site run's own
  capture re-creates the tar (sha 3e26592f -> 3a054728, measured). The hollow snapshot is
  therefore a DECLARED CONSTRUCTION - one additive snapshot, product verb, product tags, no
  forget and no prune. State restored: the product's own run made a healthy snapshot the
  newest again and the proof then passed opengist.
- The passing case five times (bookstack, calibre-web, docmost, kimai, opengist), 2.2-4.0s
  each, matching the spike's measured band.
- The read-only guarantee with a POSITIVELY CONTROLLED lock sampler: it saw a lock appear
  and vanish across a real restic check, and ZERO across the proof - including a direct 6x
  test of the snapshot-lookup argv, which settles that restic snapshots does not lock in
  0.14.0 either.
- Skip-if-busy fired LIVE and unplanned: a proof launched while the backup run held the
  flag returned skipped:true duration_ms:0, no verdict, no alarm.
- The customer's own verification copies were untouched throughout, which is the safety
  property the separate proof root exists for.

ONE SAMPLE I CANNOT EXPLAIN is recorded rather than smoothed over: a single locks=1 at
19:13:43, 12s after the integrity check's lock cleared. Two independent tests exclude the
proof; I did not establish what it was.

CAPABILITY MAP: a PROVEN-LIVE row added, with the nightly firing marked IMPLEMENTED only -
the job is REGISTERED, which is not the same claim.

07 section 8 MATRIX ROW 4 WAS NOT MOVED, deliberately, and section 10.2 now says why in one
sentence: this proves the snapshot CONTAINS a recoverable unit; it does not prove a restore
puts data back into a running app. Without that sentence the new green tick reads as
covering the drill.

REGISTER: R-87 CLOSED and compressed into CLOSED-ITEMS.md. OPEN 172 -> 171, CLOSED 151 ->
152. No new rows minted. R-408 and R-409 stay open and are referenced by this work.

golden-currency is RED and it is a DECLARED, EXPECTED debt: v0.231.0 is released and the
newest golden carries 0.230.0. The fleet is on 0.230.0; demo-felhom does not have this job.
A golden carrying 0.231.0 is OWED and it is Viktor's call (R-242). This push uses
--no-verify for that reason - bypass #8.
2026-08-31 21:32:06 +02:00

41 lines
1023 B
Plaintext

=== LAYER 3: container /tmp ===
tr: extra operand '"'
Try 'tr --help' for more information.
container /tmp: []
=== LAYER 3b: the constructed tree and the tar backup ===
r87-construct removed
tar backup removed (the live unit has its own healthy tar)
appdata
backups
userdata
=== proof scratch root (empty is correct; the job creates and removes per run) ===
(nothing above = clean)
=== customer verification copies, untouched throughout ===
bookstack
calibre-web
paperless-ngx
=== LAYER 2: guest /root and /tmp ===
tr: extra operand '"'
Try 'tr --help' for more information.
grep: write error: Broken pipe
guest leftovers: []
=== apps healthy ===
opengist Up 3 minutes (healthy)
felhom-controller Up 16 minutes (healthy)
=== teardown re-verified, all three layers ===
--- LAYER 3: container /tmp ---
r87-hollow
(nothing above = empty)
--- LAYER 2: guest ---
.r87-pw.sh
rc=0
--- LAYER 1: PVE host demo-hp ---
rc=1 (1 = clean)
--- container /tmp now ---
--- guest r87 leftovers now ---
grep rc=1 (1 = nothing left)