Files
felhom.eu/documentation/audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md
T

212 lines
29 KiB
Markdown

# Volume-persistence sweep — all 58 templates, 2026-10-02 (bench LXC 9401 on demo-hp)
Gate: `scripts/check-volume-persistence.py --all --evidence` (catalog-wt febf58c + UNCOMMITTED R-801/R-788/fixture-seed
change), 8 batches, Docker Hub logged in. Raw stdout: `batch-NN.txt`; per-app probe: `evidence/<app>/probe.json`.
## Headline
**CLEAN** 39 · **UNDETERMINED** 19 · **BROKEN** 0 · **INCONCLUSIVE** 0
(of 58). BROKEN = the gate REFUSED. Apps where the gate called the app's own fixture seed: **16**.
"What made it write" is read off the probe: `fixture …` = the gate's third step ran (field `fixture`); `deep pass` = the
second (wider, redirect-following) GET pass produced answers (inferred: >1 hit per ip:port or a non-`/` path); `GET exercise
(or start)` = the first `/` GET answered and nothing further was needed — the probe cannot separate data written at start from
data written because of that GET. A `fixture` field of null on an UNDETERMINED app means the app has no fixture (or the module
did not load), so the gate had nothing to call.
## Reading the headline (added by hand after the generator)
- **Fixture seed: called for 16 apps.** It turned 2 into CLEAN (metube, privatebin). 13 seeded OK and still stay
UNDETERMINED, because a *second* declared volume (uploads / media / cache / redis / backup) stays empty after a
seed that writes only to the database: claper, crafty-controller, dawarich, docmost, gramps-web, immich, outline,
sparkyfitness, tandoor, vikunja, wger, wishlist, zipline. 1 seed could not run: plex (`NoRoute` — the first-run claim
needs a plex.tv token). No fixture crashed the gate.
- **5 UNDETERMINED apps had no fixture to call:** bentopdf (stateless, declares no volume), papra (crash-loop, see
below), plant-it (image gone), recipe-importer (writes nothing; the only `/` entry is its own `/data` mount point),
wanderer (web container **unhealthy**; its pocketbase and meilisearch volumes hold data, `/app/uploads` and
`/data/plugins` are empty).
- **papra does not start under its own memory limit.** Exit 137 in batch 06 and again alone
(`batch-09-papra-rerun.txt`). Separate diagnosis (`papra-oom-diagnosis.txt`): `docker run --memory 256m` (the
template's `deploy.resources.limits.memory`) → `OOMKilled=true` during `tsx src/scripts/migrate-up.script.ts`; no
limit → running at ~416 MiB after 60 s, `db/db.sqlite` written INTO the `/app/app-data` volume. So the R-156 mount
is right; the 256M limit (header comment says "RAM ~50M") is too low for papra 26.6.2. Not a persistence verdict —
a start-up defect. Template not edited.
- **plant-it** (`lifecycle: abandoned`, run only because of `--all`): `msdeluise/plant-it` cannot be pulled
("repository does not exist"), while logged in to Docker Hub. Not throttling, so not INCONCLUSIVE.
- **No pull was throttled** — no `toomanyrequests` / rate-limit text in any batch, so INCONCLUSIVE is 0.
- **Blind spot, not a verdict:** grimmory is CLEAN while its `/app/data` (a BIND to the data drive) holds 0 files;
the R-788 empty-volume rule covers only *named declared* volumes, and grimmory's state is in its MariaDB volume
(355 files). Same shape: komga `/data`, paperless `consume`/`export`, radarr/sonarr media binds — empty binds are
not judged by the gate.
- **No GET answer** on crafty-controller (port 8443 is HTTPS; the gate curls `http://`) and gramps-web (port 5000)
— both reached data only through the fixture.
- `--all` was used so the hidden (wger) and abandoned (plant-it) apps are in scope; 56 are `available`.
| app | verdict now | ports | what made it write | gate's reasons (short) | notes |
|---|---|---|---|---|---|
| actualbudget | CLEAN | 5006 | GET exercise (or start) | - | declared volumes: actualbudget_data · mounts actualbudget:/data=2(named-declared) |
| adventurelog | CLEAN | 80,3000 | GET exercise (or start) | - | declared volumes: adventurelog_media, adventurelog_postgres_data · mounts adventurelog:/code/media=251(named-declared); adventurelog-postgres:/var/lib/postgresql/data=2313(named-declared) |
| audiobookshelf | CLEAN | 80 | GET exercise (or start) | - | declared volumes: audiobookshelf_config, audiobookshelf_metadata · mounts audiobookshelf:/audiobooks=0(bind); audiobookshelf:/podcasts=0(bind); audiobookshelf:/config=16(named-declared); audiobookshelf:/metadata=1(named-declared) |
| bentopdf | UNDETERMINED | 8080 | deep pass | nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN | declared volumes: NONE · fixture: none called (app has no fixture, or step not reached) · mounts |
| bookstack | CLEAN | 80 | GET exercise (or start) | - | declared volumes: bookstack_config, bookstack_db_data · mounts bookstack:/config=22(named-declared); bookstack-db:/var/lib/mysql=291(named-declared) |
| calcom | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: calcom_postgres_data · mounts calcom-postgres:/var/lib/postgresql=2264(named-declared) |
| calibre-web | CLEAN | 8083 | GET exercise (or start) | calibre-web: /app/calibre-web-automated/empty_library — database file(s) touched but byte-identical to the image; a chown sweep, not a write; calibre-web: /app/calibre-web-automated/empty_library — database file(s) touch | declared volumes: calibre_web_config · mounts calibre-web:/cwa-book-ingest=0(bind); calibre-web:/calibre-library=3(bind); calibre-web:/config=11(named-declared) |
| claper | UNDETERMINED | 4000 | fixture seed OK — `fixture Claper: seed OK — claper: seeded user drill-f9ed4c26@gate.invalid` | claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; claper: this container's mounts are all empty while it created entries in ['/ | declared volumes: claper_postgres_data, claper_uploads · mounts claper:/app/priv/static/uploads=0(named-declared); claper-postgres:/var/lib/postgresql/data=1471(named-declared) |
| code-server | CLEAN | 8443 | GET exercise (or start) | - | declared volumes: codeserver_config · mounts code-server:/config=12(named-declared) |
| crafty-controller | UNDETERMINED | 8443 | fixture seed OK — `fixture Crafty: seed OK — crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}}` | crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it; crafty-controller: declared volume /crafty/import is EMPTY after the exerci | declared volumes: crafty_backups, crafty_config, crafty_import, crafty_logs, crafty_servers · mounts crafty-controller:/crafty/logs=8(named-declared); crafty-controller:/crafty/servers=0(named-declared); crafty-controller:/crafty/app/config=16(named-declared); crafty-controller:/crafty/import=0(named-declared); crafty-controller:/crafty/backups=0(named-declared) |
| dawarich | UNDETERMINED | 3000 | fixture seed OK — `fixture Dawarich: seed OK — dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)` | dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: dawarich_db_data, dawarich_public, dawarich_redis, dawarich_storage, dawarich_watched · mounts dawarich:/var/app/tmp/imports/watched=0(named-declared); dawarich:/var/app/storage=1(named-declared); dawarich:/var/app/public=646(named-declared); dawarich-db:/var/lib/postgresql/data=2358(named-declared); dawarich-redis:/data=0(named-declared); dawarich-sidekiq:/var/app/public=646(named-declared); |
| docmost | UNDETERMINED | 3000 | fixture seed OK — `fixture Docmost: seed OK — docmost: /api/auth/setup http=200 rc=0` | docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it; docmost: this container's mounts are all empty while it created entries in ['/app/a | declared volumes: docmost_postgres_data, docmost_redis_data, docmost_storage · mounts docmost:/app/data/storage=0(named-declared); docmost-postgres:/var/lib/postgresql=1589(named-declared); docmost-redis:/data=3(named-declared) |
| emby | CLEAN | 8096 | GET exercise (or start) | - | declared volumes: emby_config · mounts emby:/media=3(bind); emby:/config=46(named-declared) |
| ghost | CLEAN | 2368 | GET exercise (or start) | - | declared volumes: ghost_content · mounts ghost:/var/lib/ghost/content=7(named-declared) |
| gitea | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: gitea_data · mounts gitea:/data=8(named-declared) |
| glance | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: glance_config · mounts glance:/app/config=1(named-declared) |
| gokapi | CLEAN | 53842 | GET exercise (or start) | - | declared volumes: gokapi_config, gokapi_data · mounts gokapi:/app/data=4(named-declared); gokapi:/app/config=1(named-declared) |
| grafana | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: grafana_data · mounts grafana:/var/lib/grafana=939(named-declared) |
| gramps-web | UNDETERMINED | 5000 | fixture seed OK — `fixture GrampsWeb: seed OK — gramps-web: seeded user drill1c00babf` | gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it; gramps-web: declared volume /app/indexdir is EMPTY after the exercise — the app was no | declared volumes: gramps_cache, gramps_db, gramps_index, gramps_media, gramps_secret, gramps_thumb_cache, gramps_tmp, gramps_users · mounts gramps-web:/app/cache=1(named-declared); gramps-web:/app/secret=0(named-declared); gramps-web:/tmp=0(named-declared); gramps-web:/app/users=1(named-declared); gramps-web:/root/.gramps/grampsdb=2(named-declared); gramps-web:/app/indexdir=0(named-declared); gramps-web:/app/media=0(named-declared); gra |
| grimmory | CLEAN | 6060 | GET exercise (or start) | grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign when a sibling container holds the state, worth a look when none does | declared volumes: grimmory_db · mounts grimmory:/app/data=0(bind); grimmory:/books=0(bind); grimmory:/bookdrop=0(bind); grimmory-db:/var/lib/mysql=355(named-declared) |
| home-assistant | CLEAN | 8123 | GET exercise (or start) | - | declared volumes: homeassistant_config · mounts home-assistant:/config=22(named-declared) |
| homebox | CLEAN | 7745 | GET exercise (or start) | - | declared volumes: homebox_data · mounts homebox:/data=3(named-declared) |
| homepage | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: homepage_config · mounts homepage:/var/run/docker.sock=-1(bind); homepage:/app/config=3(named-declared) |
| immich | UNDETERMINED | 2283 | fixture seed OK — `fixture Immich: seed OK — immich: seeded album drillalbuma6820f47` | immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it; immich-machine-learning: this container's mounts are all empty while it create | declared volumes: immich_ml_cache, immich_postgres_data, immich_redis_data · mounts immich-machine-learning:/cache=0(named-declared); immich-postgres:/var/lib/postgresql/data=1879(named-declared); immich-redis:/data=3(named-declared); immich-server:/usr/src/app/upload=6(bind); immich-server:/external/photos=0(bind); immich-server:/data=0(anonymous) |
| jellyfin | CLEAN | 8096 | GET exercise (or start) | - | declared volumes: jellyfin_cache, jellyfin_config · mounts jellyfin:/media=3(bind); jellyfin:/config=20(named-declared); jellyfin:/cache=2(named-declared) |
| karakeep | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: karakeep_data, karakeep_meili · mounts karakeep:/data=2(named-declared); karakeep-meilisearch:/meili_data=5(named-declared) |
| kimai | CLEAN | 8001 | GET exercise (or start) | - | declared volumes: kimai_db_data, kimai_var · mounts kimai:/opt/kimai/var=2038(named-declared); kimai-db:/var/lib/mysql=279(named-declared) |
| komga | CLEAN | 25600 | GET exercise (or start) | - | declared volumes: komga_config · mounts komga:/data=0(bind); komga:/config=11(named-declared) |
| mealie | CLEAN | 9000 | GET exercise (or start) | - | declared volumes: mealie_data · mounts mealie:/app/data=5(named-declared) |
| metube | CLEAN | 8081 | fixture seed OK — `fixture MeTube: seed OK — metube: the download finished (991017 bytes)` | - | declared volumes: metube_state · mounts metube:/downloads=1(bind); metube:/state=2(named-declared) |
| n8n | CLEAN | 5678 | GET exercise (or start) | - | declared volumes: n8n_data · mounts n8n:/home/node/.n8n=7(named-declared) |
| navidrome | CLEAN | 4533 | GET exercise (or start) | - | declared volumes: navidrome_data · mounts navidrome:/music=0(bind); navidrome:/data=6(named-declared) |
| nextcloud | CLEAN | 80 | GET exercise (or start) | - | declared volumes: nextcloud_db_data, nextcloud_html, nextcloud_redis_data · mounts nextcloud:/var/www/html=4001(named-declared); nextcloud:/var/www/html/data=69(bind); nextcloud-db:/var/lib/mysql=471(named-declared); nextcloud-redis:/data=3(named-declared) |
| onlyoffice | CLEAN | 80 | GET exercise (or start) | onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store (path suggests state, no database signature — judgement needed): ['icons', 'scr | declared volumes: onlyoffice_data, onlyoffice_logs · mounts onlyoffice:/var/log/onlyoffice=11(named-declared); onlyoffice:/usr/share/fonts/truetype/custom=0(anonymous); onlyoffice:/var/lib/onlyoffice=0(anonymous); onlyoffice:/var/www/onlyoffice/Data=3(named-declared) |
| opengist | CLEAN | 6157 | GET exercise (or start) | - | declared volumes: opengist_data · mounts opengist:/opengist=9(named-declared) |
| outline | UNDETERMINED | 3000 | fixture seed OK — `fixture Outline: seed OK — outline: seeded document drilldoc-ed522bc2` | outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it; outline-redis: declared volume /data is EMPTY after the exercise — the app was | declared volumes: outline_data, outline_postgres_data, outline_redis_data · mounts outline:/var/lib/outline/data=0(named-declared); outline-postgres:/var/lib/postgresql=1669(named-declared); outline-redis:/data=0(named-declared) |
| paperless-ngx | CLEAN | 8000 | GET exercise (or start) | - | declared volumes: paperless_data, paperless_postgres_data, paperless_redis_data · mounts paperless-postgres:/var/lib/postgresql=1931(named-declared); paperless-redis:/data=3(named-declared); paperless-webserver:/usr/src/paperless/media=1(bind); paperless-webserver:/usr/src/paperless/consume=0(bind); paperless-webserver:/usr/src/paperless/export=0(bind); paperless-webserver:/usr/src/pape |
| papra | UNDETERMINED | 1221 | nothing answered HTTP | papra: not running (status=restarting exit=137 restarts=None) | not running: papra=restarting · declared volumes: papra_data · fixture: none called (app has no fixture, or step not reached) · mounts papra:/app/app-data=0(named-declared) |
| plant-it | UNDETERMINED | none | start only (no routed port, no HTTP exercise) | no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Error response from daemon: pull access denied for msdelui | probe error: no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denie · declared volumes: NONE · fixture: none called (app has no fixture, or step not reached) · mounts |
| plex | UNDETERMINED | 32400 | fixture seed FAILED — `fixture NoRoute: seed returned nothing (tried: the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists` | plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: plex_config, plex_transcode · mounts plex:/media=4(bind); plex:/transcode=0(named-declared); plex:/config=82(named-declared) |
| privatebin | CLEAN | 8080 | fixture seed OK — `fixture PrivateBin: seed OK — privatebin: seeded paste id=260cce3d99910079` | - | declared volumes: privatebin_data · mounts privatebin:/srv/data=5(named-declared); privatebin:/run=14(anonymous); privatebin:/tmp=0(anonymous); privatebin:/var/lib/nginx/tmp=0(anonymous) |
| radarr | CLEAN | 7878 | GET exercise (or start) | radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['movies'] | declared volumes: radarr_config · mounts radarr:/media/movies=0(bind); radarr:/downloads=0(bind); radarr:/config=9(named-declared) |
| radicale | CLEAN | 5232 | GET exercise (or start) | - | declared volumes: radicale_data · mounts radicale:/var/lib/radicale=1(named-declared) |
| rallly | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: rallly_postgres_data · mounts rallly-postgres:/var/lib/postgresql=1607(named-declared) |
| recipe-importer | UNDETERMINED | 8000 | deep pass | NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.; recipe-importer: declared volume /data is EMPTY | declared volumes: recipe_data · fixture: none called (app has no fixture, or step not reached) · mounts recipe-importer:/data=0(named-declared) |
| romm | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: romm_config, romm_db_data, romm_redis_data · mounts romm:/romm/config=1(named-declared); romm:/redis-data=0(anonymous); romm:/romm=0(anonymous); romm:/romm/library=0(bind); romm:/romm/resources=0(bind); romm-db:/var/lib/mysql=302(named-declared); romm-redis:/data=4(named-declared) |
| seerr | CLEAN | 5055 | GET exercise (or start) | - | declared volumes: seerr_config · mounts seerr:/app/config=11(named-declared) |
| sonarr | CLEAN | 8989 | GET exercise (or start) | sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv'] | declared volumes: sonarr_config · mounts sonarr:/media/tv=0(bind); sonarr:/downloads=0(bind); sonarr:/config=11(named-declared) |
| sparkyfitness | UNDETERMINED | 80 | fixture seed OK — `fixture Sparkyfitness: seed OK — sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01` | sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template preserves it; sparkyfitness-server: declared volume /app/SparkyFitness | declared volumes: sparkyfitness_backup, sparkyfitness_db_data, sparkyfitness_uploads · mounts sparkyfitness-db:/var/lib/postgresql=1822(named-declared); sparkyfitness-server:/app/SparkyFitnessServer/backup=0(named-declared); sparkyfitness-server:/app/SparkyFitnessServer/uploads=0(named-declared) |
| tandoor | UNDETERMINED | 80 | fixture seed OK — `fixture Django: seed OK — tandoor: seeded superuser drill425a04` | tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: tandoor_media, tandoor_postgres_data, tandoor_static · mounts tandoor:/opt/recipes/staticfiles=3359(named-declared); tandoor:/opt/recipes/mediafiles=0(named-declared); tandoor-postgres:/var/lib/postgresql/data=2003(named-declared) |
| termix | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: termix_data · mounts termix:/app/data=5(named-declared) |
| uptime-kuma | CLEAN | 3001 | GET exercise (or start) | - | declared volumes: uptime_kuma_data · mounts uptime-kuma:/app/data=4(named-declared) |
| vaultwarden | CLEAN | 80 | GET exercise (or start) | - | declared volumes: vaultwarden_data · mounts vaultwarden:/data=4(named-declared) |
| vikunja | UNDETERMINED | 3456 | fixture seed OK — `fixture Vikunja: seed OK — vikunja: create project http=201` | vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: vikunja_data, vikunja_db · mounts vikunja:/db=3(named-declared); vikunja:/app/vikunja/files=0(named-declared) |
| wanderer | UNDETERMINED | 3000,8090 | GET exercise (or start) | wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; wanderer-db: declared volume /data/plugins is EMPTY after the exer | declared volumes: wanderer_data, wanderer_meili_data, wanderer_plugins, wanderer_uploads · fixture: none called (app has no fixture, or step not reached) · mounts wanderer:/app/uploads=0(named-declared); wanderer-db:/data/plugins=0(named-declared); wanderer-db:/pb_data=6(named-declared); wanderer-search:/meili_data=11(named-declared) |
| wger | UNDETERMINED | 8000 | fixture seed OK — `fixture Wger: seed OK — wger: POST /api/v2/weightentry/ http=201` | wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: wger_data, wger_media · mounts wger:/home/wger/db=2(named-declared); wger:/home/wger/media=0(named-declared) |
| wishlist | UNDETERMINED | 3000 | fixture seed OK — `fixture Wishlist: seed OK — wishlist: /signup http=200 type=success` | wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: wishlist_data, wishlist_uploads · mounts wishlist:/usr/src/app/uploads=0(named-declared); wishlist:/usr/src/app/data=3(named-declared) |
| zipline | UNDETERMINED | 3000 | fixture seed OK — `fixture Zipline: seed OK — zipline: /api/setup http=200 :: {"firstSetup":false,"user":{"id":"ay6n2g4wkn7i2kkg6dvag03n","username":"drill` | zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; zipline: declared volume /zipline/public is EMPTY after the exercise — the app was n | declared volumes: zipline_postgres_data, zipline_public, zipline_uploads · mounts zipline:/zipline/uploads=0(named-declared); zipline:/zipline/public=0(named-declared); zipline-postgres:/var/lib/postgresql/data=1435(named-declared) |
## BROKEN — reasons verbatim (0)
none
## UNDETERMINED — reasons verbatim (19)
### bentopdf (batch-01.txt)
```
nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN
```
### claper (batch-02.txt)
```
claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
claper: this container's mounts are all empty while it created entries in ['/app/priv', '/app/priv/static'] — benign when a sibling container holds the state, worth a look when none does
```
### crafty-controller (batch-02.txt)
```
crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it
crafty-controller: declared volume /crafty/import is EMPTY after the exercise — the app was not shown to write where the template preserves it
crafty-controller: declared volume /crafty/backups is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### dawarich (batch-02.txt)
```
dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### docmost (batch-02.txt)
```
docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it
docmost: this container's mounts are all empty while it created entries in ['/app/apps/client/dist'] — benign when a sibling container holds the state, worth a look when none does
```
### gramps-web (batch-03.txt)
```
gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it
gramps-web: declared volume /app/indexdir is EMPTY after the exercise — the app was not shown to write where the template preserves it
gramps-web: declared volume /app/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### immich (batch-04.txt)
```
immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it
immich-machine-learning: this container's mounts are all empty while it created entries in ['/'] — benign when a sibling container holds the state, worth a look when none does
```
### outline (batch-06.txt)
```
outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it
outline-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### papra (batch-09-papra-rerun.txt)
```
papra: not running (status=restarting exit=137 restarts=None)
```
### plant-it (batch-06.txt)
```
no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Error response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
)
probe error: no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Error response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
)
```
### plex (batch-06.txt)
```
plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### recipe-importer (batch-07.txt)
```
NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.
recipe-importer: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
recipe-importer: this container's mounts are all empty while it created entries in ['/'] — benign when a sibling container holds the state, worth a look when none does
```
### sparkyfitness (batch-07.txt)
```
sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template preserves it
sparkyfitness-server: declared volume /app/SparkyFitnessServer/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
sparkyfitness-server: this container's mounts are all empty while it created entries in ['/app/SparkyFitnessServer'] — benign when a sibling container holds the state, worth a look when none does
```
### tandoor (batch-08.txt)
```
tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### vikunja (batch-08.txt)
```
vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### wanderer (batch-08.txt)
```
wanderer: unhealthy
wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
wanderer-db: declared volume /data/plugins is EMPTY after the exercise — the app was not shown to write where the template preserves it
wanderer: this container's mounts are all empty while it created entries in ['/root'] — benign when a sibling container holds the state, worth a look when none does
wanderer-db: writable-layer writes at /data (path suggests state, no database signature — judgement needed): ['plugins']
```
### wger (batch-08.txt)
```
wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### wishlist (batch-08.txt)
```
wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
```
### zipline (batch-08.txt)
```
zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
zipline: declared volume /zipline/public is EMPTY after the exercise — the app was not shown to write where the template preserves it
zipline: this container's mounts are all empty while it created entries in ['/zipline'] — benign when a sibling container holds the state, worth a look when none does
```