Files
felhom.eu/documentation/tests/campaign10-evidence-2026-07-31/r156-papra-volume.txt
T
admin 4691aa1a35 Campaign 10: Phase A complete + gated; Phase B not run; R-156 filed
Phase A passed every gate on a fresh box built from the PUBLISHED ISO 1.26.1:
install, claim, two drives enrolled through the real endpoints with the backup
target healthy, four apps spanning both sides of D5's secret split, and a
working discriminator across all four.

Isolation gate: both denials captured, each with a positive control. The PBS
control FAILED first — four clean-looking 403s were worthless because the token
was denied on its own datastore too (PBS token privilege separation). Fixed and
re-run; the denials stand.

R-156 (new, register grepped): papra's data is neither persisted nor backed up,
and it reports healthy. The template mounts papra_data:/app/data; the app writes
/app/app-data/db/db.sqlite. Volume empty and root-owned against a -rootless
image, real DB in the container writable layer, healthcheck only probes the HTTP
port. Its Tier-1/2 backup is real, verifiable and contains nothing. Not fixed.

Tier 3 could not be isolated so it was not run: offsite hard-requires the DR
tier (configs.go:1300) and the DR tier only provisions on ep0 (per-endpoint
allocation deferred, hub/README.md:260). Both are recorded deliberate positions,
so no R-n minted. The campaign touched neither ep0 nor the Storage Box.

Phase B did not start. Phase A was budgeted at ~1h and took ~5.5h (1.26.1 is a
public release image with no auto-install path, so the install was a blind
screendump+sendkey walk). That left the runner — which judges eleven invariants
and fires destructive atoms unattended — to be written at 04:00 with ~3h of
night left. Stopped on the brief's own fence: a rig producing false negatives is
worse than no rig. The rig is built and idle; teardown is OWED and itemised,
including hub customer c10-soak (disposition: DELETE).
2026-07-31 23:22:25 +02:00

21 lines
952 B
Plaintext

# R-156 evidence papra persists OUTSIDE the volume the compose mounts
## 1. compose mounts papra_data at /app/data
volume papra_papra_data -> /app/data
## 2. the container runs as nonroot and CANNOT write there
uid=999(nonroot) gid=999(nonroot) groups=999(nonroot)
drwxr-xr-x 2 root root 4096 Jul 31 23:18 /app/data
touch: cannot touch '/app/data/.w': Permission denied
## 3. the volume is empty apart from the canary this campaign wrote AS ROOT
total 12
drwxr-xr-x 2 root root 4096 Jul 31 23:18 .
drwxr-xr-x 1 nonroot nonroot 4096 Jul 31 23:12 ..
-rw-r--r-- 1 root root 19 Jul 31 23:18 cc_proof.txt
## 4. the REAL database is in the container writable layer, not in any volume
total 472
drwxr-xr-x 1 nonroot nonroot 4096 Jul 31 23:12 .
drwxr-xr-x 1 nonroot nonroot 4096 Jul 4 22:19 ..
-rw-r--r-- 1 nonroot nonroot 475136 Jul 31 23:12 db.sqlite
## 5. healthcheck only probes the HTTP port, so this reads healthy
"healthy"