From 93052884b20c53bcaa3a836b08f9f86db93c3880 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Fri, 2 Oct 2026 16:54:26 +0200 Subject: [PATCH] Persistence re-sweep of all 58 (R-801 closed: CLEAN 40 / UNDETERMINED 18 / BROKEN 0), R-788 + R-803 (papra) closed, R-804..R-807 opened; STATUS "Before the first paying customer"; REPORT-persistence-sweep-2026-10-02; register 442 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS --- CONTEXT.md | 8 + REPORT-persistence-sweep-2026-10-02.md | 148 + STATUS.md | 75 +- .../A/papra/SUMMARY.md | 35 + .../A/papra/bench-create.txt | 55 + .../A/papra/birth-unlimited/birth.csv | 169 + .../birth-unlimited/docker-logs-tail.txt | 41 + .../A/papra/birth-unlimited/run.log | 39 + .../A/papra/birth-unlimited/summary.json | 71 + .../A/papra/gate-evidence/papra/probe.json | 58 + .../A/papra/gate-papra-768M.txt | 8 + .../A/papra/run-768M/birth.csv | 169 + .../A/papra/run-768M/docker-logs-tail.txt | 41 + .../A/papra/run-768M/run.log | 39 + .../A/papra/run-768M/summary.json | 71 + .../A/papra/teardown.txt | 44 + .../A/papra/template.diff | 35 + .../A/sweep/TABLE.md | 211 + .../A/sweep/batch-01.txt | 38 + .../A/sweep/batch-02.txt | 42 + .../A/sweep/batch-03.txt | 35 + .../A/sweep/batch-04.txt | 40 + .../A/sweep/batch-05.txt | 33 + .../A/sweep/batch-06.txt | 39 + .../A/sweep/batch-07.txt | 39 + .../A/sweep/batch-08.txt | 47 + .../A/sweep/batch-09-papra-rerun.txt | 11 + .../A/sweep/bench-create.txt | 55 + .../A/sweep/evidence/actualbudget/probe.json | 58 + .../A/sweep/evidence/adventurelog/probe.json | 251 + .../sweep/evidence/audiobookshelf/probe.json | 120 + .../A/sweep/evidence/bentopdf/probe.json | 88 + .../A/sweep/evidence/bookstack/probe.json | 254 + .../A/sweep/evidence/calcom/probe.json | 1056 +++ .../A/sweep/evidence/calibre-web/probe.json | 3143 ++++++++ .../A/sweep/evidence/claper/probe.json | 184 + .../A/sweep/evidence/code-server/probe.json | 120 + .../evidence/crafty-controller/probe.json | 6189 +++++++++++++++ .../A/sweep/evidence/dawarich/probe.json | 361 + .../A/sweep/evidence/docmost/probe.json | 223 + .../A/sweep/evidence/emby/probe.json | 123 + .../A/sweep/evidence/ghost/probe.json | 63 + .../A/sweep/evidence/gitea/probe.json | 197 + .../A/sweep/evidence/glance/probe.json | 78 + .../A/sweep/evidence/gokapi/probe.json | 96 + .../A/sweep/evidence/grafana/probe.json | 116 + .../A/sweep/evidence/gramps-web/probe.json | 260 + .../A/sweep/evidence/grimmory/probe.json | 206 + .../sweep/evidence/home-assistant/probe.json | 119 + .../A/sweep/evidence/homebox/probe.json | 72 + .../A/sweep/evidence/homepage/probe.json | 90 + .../A/sweep/evidence/immich/probe.json | 314 + .../A/sweep/evidence/jellyfin/probe.json | 157 + .../A/sweep/evidence/karakeep/probe.json | 157 + .../A/sweep/evidence/kimai/probe.json | 266 + .../A/sweep/evidence/komga/probe.json | 90 + .../A/sweep/evidence/mealie/probe.json | 94 + .../A/sweep/evidence/metube/probe.json | 224 + .../A/sweep/evidence/n8n/probe.json | 83 + .../A/sweep/evidence/navidrome/probe.json | 85 + .../A/sweep/evidence/nextcloud/probe.json | 322 + .../A/sweep/evidence/onlyoffice/probe.json | 6646 +++++++++++++++++ .../A/sweep/evidence/opengist/probe.json | 107 + .../A/sweep/evidence/outline/probe.json | 172 + .../A/sweep/evidence/paperless-ngx/probe.json | 255 + .../A/sweep/evidence/papra/probe.json | 56 + .../evidence/papra/rerun-alone/probe.json | 56 + .../A/sweep/evidence/plant-it/probe.json | 10 + .../A/sweep/evidence/plex/probe.json | 176 + .../A/sweep/evidence/privatebin/probe.json | 104 + .../A/sweep/evidence/radarr/probe.json | 157 + .../A/sweep/evidence/radicale/probe.json | 59 + .../A/sweep/evidence/rallly/probe.json | 164 + .../sweep/evidence/recipe-importer/probe.json | 113 + .../A/sweep/evidence/romm/probe.json | 253 + .../A/sweep/evidence/seerr/probe.json | 67 + .../A/sweep/evidence/sonarr/probe.json | 159 + .../A/sweep/evidence/sparkyfitness/probe.json | 237 + .../A/sweep/evidence/tandoor/probe.json | 292 + .../A/sweep/evidence/termix/probe.json | 99 + .../A/sweep/evidence/uptime-kuma/probe.json | 80 + .../A/sweep/evidence/vaultwarden/probe.json | 62 + .../A/sweep/evidence/vikunja/probe.json | 105 + .../A/sweep/evidence/wanderer/probe.json | 202 + .../A/sweep/evidence/wger/probe.json | 73 + .../A/sweep/evidence/wishlist/probe.json | 173 + .../A/sweep/evidence/zipline/probe.json | 176 + .../A/sweep/papra-oom-diagnosis.txt | 33 + .../A/sweep/teardown.txt | 54 + documentation/backlog/OPEN-ITEMS.md | 9 +- 90 files changed, 27056 insertions(+), 48 deletions(-) create mode 100644 REPORT-persistence-sweep-2026-10-02.md create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/bench-create.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/birth.csv create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/docker-logs-tail.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/run.log create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/summary.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-evidence/papra/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-papra-768M.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/birth.csv create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/docker-logs-tail.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/run.log create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/summary.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/teardown.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/papra/template.diff create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-01.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-02.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-03.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-04.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-05.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-06.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-07.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-08.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/bench-create.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/actualbudget/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/adventurelog/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/audiobookshelf/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bentopdf/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bookstack/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calcom/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calibre-web/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/claper/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/code-server/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/crafty-controller/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/dawarich/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/docmost/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/emby/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/ghost/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gitea/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/glance/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gokapi/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grafana/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gramps-web/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grimmory/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/home-assistant/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homebox/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homepage/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/immich/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/jellyfin/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/karakeep/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/kimai/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/komga/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/mealie/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/metube/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/n8n/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/navidrome/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/nextcloud/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/onlyoffice/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/opengist/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/outline/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/paperless-ngx/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/rerun-alone/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plant-it/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plex/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/privatebin/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radarr/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radicale/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/rallly/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/recipe-importer/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/romm/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/seerr/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sonarr/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sparkyfitness/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/tandoor/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/termix/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/uptime-kuma/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vaultwarden/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vikunja/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wanderer/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wger/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wishlist/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/zipline/probe.json create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt create mode 100644 documentation/audits/persistence-sweep-2026-10-02/A/sweep/teardown.txt diff --git a/CONTEXT.md b/CONTEXT.md index f3a0b911..47779fbd 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -16,6 +16,14 @@ > and holds nothing of its own; this file does hold its own content, namely the standing rulings below. +> **2026-10-02 (afternoon) — the persistence re-sweep (R-801/R-788 CLOSED), controller v0.288.0 (R-800), golden 0.288.0.** +> Rulings `09` §3 66 (licences: Tandoor like SparkyFitness; Emby/Plex/n8n kept; lawyer review before the first paying +> customer, R-802) and 67 (userdata stays on every remove; dialog + result name it — `07` §6.5). The gate now sends +> requests (port from the label NAME), calls the app's own fixture seed when a volume stays empty, and reads an empty +> declared volume as UNDETERMINED. All 58: CLEAN 39 · UNDETERMINED 19 · BROKEN 0 (no data-loss finding). papra's +> 256M limit OOM-killed every fresh install — 768M now (R-803 closed). Open follow-ups R-804..R-807. Report: +> `REPORT-persistence-sweep-2026-10-02.md`. + > **2026-10-02 — the family gate BUILT (R-780 CLOSED), controller v0.287.0 floored, golden 0.287.0 vouched; Grimmory and > MeTube published behind it (R-767 CLOSED, R-775 narrowed).** `internal/family` + `stacks/family_gate.go` + > `web/family_gate.go`; template fields `family_gate` / `family_gate_except` (literal, anchored `^/p(/|$)`) / diff --git a/REPORT-persistence-sweep-2026-10-02.md b/REPORT-persistence-sweep-2026-10-02.md new file mode 100644 index 00000000..e58f0215 --- /dev/null +++ b/REPORT-persistence-sweep-2026-10-02.md @@ -0,0 +1,148 @@ +# REPORT — every app checked again with the fixed persistence check; the remove dialog tells the truth; licence rulings; v0.288.0 + golden (2026-10-02, afternoon) + +Architecture read: `07-backup-architecture.md` §6 (tiers) and §6.5 (kept data — now with decision 67), `09` §3 decisions +36, 65, 66, 67. Evidence root: `documentation/audits/persistence-sweep-2026-10-02/`. + +| Part | State | One line | +|---|---|---| +| **A** — the re-sweep (R-801) | **DONE** | R-788 rule + the app's own fixture seed in the gate; all 58 on the bench; **0 BROKEN**; papra's start-up defect found and fixed (R-803). | +| **B** — the remove dialog (R-800) | **DONE** | v0.288.0: `userdata_kept` in the dialog data and both results; the sentence in both languages; red-proofed; live on 9202. | +| **C** — release, floor, golden | **DONE** | Floor 0.288.0 (min_agent 0.131.0), both demo boxes in 20 s; golden 0.288.0 baked, round-tripped, vouched; currency gate OK. | +| Rulings | **RECORDED** | `09` §3 66 (licences) and 67 (userdata stays); `07` §6.5; STATUS "Before the first paying customer". | + +**Sweep headline (58 templates):** before (2026-08-02, 53 apps, + the new apps' records) CLEAN 38 · UNDETERMINED 11 · +BROKEN 4 — **every one of those decided by start-time writes alone** → now **CLEAN 40 · UNDETERMINED 18 · BROKEN 0 · +INCONCLUSIVE 0** (39 · 19 in the sweep; papra CLEAN after its fix). The August BROKEN four (gramps-web, papra, privatebin, +wishlist) were fixed in Campaign 10; none is BROKEN now. **No data-loss finding: no app writes outside a preserved folder.** + +## Claims in the brief, checked + +- **"Every stored verdict came only from start-time writes"** — RIGHT for the August sweep: 0 of 53 probes had sent a + request (`ports: []`, `exercise: []` in every `probe.json`). Not quite for today's morning runs of MeTube and + Grimmory, which ran after the R-801 fix. +- **"The upgrade fixtures can serve as exercisers"** — PARTLY. 51 of 58 apps have one; the gate called it for 16 apps; + it decided 2 (metube, privatebin). 13 seeded fine and stayed UNDETERMINED, because the seeds write only to the + database — upload / media / cache / redis volumes stay empty (R-807). plex's seed cannot run (a plex.tv claim token). +- **"Userdata is never touched by a remove"** — RIGHT, and it was already true before this session: the remove reads + `${HDD_PATH}` binds only, pinned since R-442 (`TestRemoveStack_R442_UserdataConventionFromPerAppPath`). What was + wrong was only that nothing SAID so. Measured again on 9202 (the video stayed). +- **The R-788 decoy as written ("an app that writes nothing → exit 2, red on the old rule")** — the old rule already gave + exit 2 for an app that writes nothing. The real gap was an app that writes SOMEWHERE while a declared volume stays + empty (old: CLEAN). The decoy was built for that shape and seen red (`A/RP-R788-empty-volume.txt`). + +## Part A — the sweep + +Gate changes (catalog): an empty declared volume after the exercise is UNDETERMINED (R-788, red-proofed; three old tests +pinned the old rule and changed with it); when a volume stays empty the gate calls the app's own upgrade-fixture seed +(one call through `upgrade_fixtures` / `upgrade_boxport`, as `upgrade-test.py` does — it replaces the morning's +MeTube-only exerciser). Bench 9401 on demo-hp, 200G, swap 0, Docker Hub logged in, 8 batches; full table with reasons: +`A/sweep/TABLE.md`; verdict lines in the catalog: `audits/persistence-sweep-2026-10-02/verdicts.txt`. + +| app | before | now | what made it write | notes | +|---|---|---|---|---| +| actualbudget | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| adventurelog | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| audiobookshelf | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| bentopdf | UNDETERMINED (08-02, start writes) | UNDETERMINED | deep pass | nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data | +| bookstack | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| calcom | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| calibre-web | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | calibre-web: /app/calibre-web-automated/empty_library — database file(s) touched but byte-identical to the ima | +| claper | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Claper: seed OK — claper: see | claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write | +| code-server | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| crafty-controller | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Crafty: seed OK — crafty: POS | crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to writ | +| dawarich | CLEAN (10-01, start writes) | UNDETERMINED | fixture seed OK — `fixture Dawarich: seed OK — dawarich: | dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the t | +| docmost | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Docmost: seed OK — docmost: / | docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where | +| emby | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| ghost | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| gitea | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| glance | UNDETERMINED (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| gokapi | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| grafana | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| gramps-web | BROKEN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture GrampsWeb: seed OK — gramps-w | gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the | +| grimmory | CLEAN (10-02, after R-801) | CLEAN | GET exercise (or start) | grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign whe | +| home-assistant | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| homebox | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| homepage | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| immich | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Immich: seed OK — immich: see | immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write w | +| jellyfin | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| karakeep | CLEAN (10-01, start writes) | CLEAN | GET exercise (or start) | - | +| kimai | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| komga | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| mealie | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| metube | CLEAN (10-02, after R-801) | CLEAN | fixture seed OK — `fixture MeTube: seed OK — metube: the | - | +| n8n | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| navidrome | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| nextcloud | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| onlyoffice | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24 | +| opengist | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| outline | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Outline: seed OK — outline: s | outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write wh | +| paperless-ngx | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| papra | BROKEN (08-02, start writes) | CLEAN after the fix (768M); UNDETERMINED at 256M (OOM) | nothing answered HTTP | R-803: OOM-killed at 256M; fixed | +| plant-it | UNDETERMINED (08-02, start writes) | UNDETERMINED | 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': | +| plex | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed FAILED — `fixture NoRoute: seed returned nothin | plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the templa | +| privatebin | BROKEN (08-02, start writes) | CLEAN | fixture seed OK — `fixture PrivateBin: seed OK — private | - | +| radarr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['mov | +| radicale | CLEAN (10-01, start writes) | CLEAN | GET exercise (or start) | - | +| rallly | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| recipe-importer | UNDETERMINED (08-02, start writes) | UNDETERMINED | deep pass | NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are e | +| romm | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| seerr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| sonarr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv' | +| sparkyfitness | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Sparkyfitness: seed OK — spar | sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app wa | +| tandoor | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Django: seed OK — tandoor: se | tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write | +| termix | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| uptime-kuma | UNDETERMINED (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| vaultwarden | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - | +| vikunja | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Vikunja: seed OK — vikunja: c | vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where | +| wanderer | UNDETERMINED (08-02, start writes) | UNDETERMINED | GET exercise (or start) | wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not show | +| wger | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Wger: seed OK — wger: POST /a | wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the | +| wishlist | BROKEN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Wishlist: seed OK — wishlist: | wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write wh | +| zipline | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Zipline: seed OK — zipline: / | zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where t | + +**REFUSED (BROKEN): none** — so no P1 data-loss row, no stop, no box to name. + +**UNDETERMINED, why:** 13 apps — a second volume (uploads / media / cache / redis / backup) stays empty after a +successful seed that writes only the database (claper, crafty-controller, dawarich, docmost, gramps-web, immich, outline, +sparkyfitness, tandoor, vikunja, wger, wishlist, zipline — R-807). plex — no seed route (a plex.tv claim token). +bentopdf — stateless by design (no volume; a browser-side PDF tool). recipe-importer — stateless converter (its /data is +never written). wanderer — unhealthy under the gate, no fixture. plant-it — its image is gone from Docker Hub (R-804). + +**Found and fixed on the way: papra (R-803, P1).** At its 256M limit every fresh install was OOM-killed in its +migration and crash-looped (its 26.6.2 step was proven by harness v1, without a memory watch). Measured from birth: peak +anon 405 MiB, cgroup peak 483 MiB, ~255 MiB idle. Now 768M (`mem_request` 256M): healthy in 31 s, 0 kills, the seed +read back, persistence CLEAN (`A/papra/`). No box ran papra. + +`EXISTING-APPS-GAPS.md` regenerated from the new verdicts (storage 38 → 36 of 53); records 2.1 updated (radicale, +karakeep, grimmory, metube CLEAN; dawarich done with the redis volume named; sparkyfitness and wger open). + +## Part B — the remove dialog (controller v0.288.0) + +`GET /api/stacks/{name}/hdd-data`, `POST …/remove`, `DELETE /api/stacks/{name}` carry `userdata_kept` (always a +list). Both dialogs and both results: „A fájljaid ezekben a mappákban megmaradnak — a fájlböngészőben látod őket:" / +"Your files in these folders stay — you see them in the file browser:" + the folders. The false "no data on a drive" note +is gone when userdata exists. Tests + red-proof (two mutants, `B/RP-R800-mutants.txt`); parity fixtures regenerated — +additions only, 0 deletions, 109 pages. **Live on 9202** (`B/r800-9202.txt`, endpoint-level, no browser): MeTube from the +live catalog, one download; the dialog's data names the folder; the page carries the line in hu and en (with a negative +control); remove with data → 409 on 9202 (no host agent, R-442 — the with-data result is pinned by the unit test); +remove keeping data → the result names the folder; the video still there. + +## Part C — release + +Controller v0.288.0 (`580b656`), image built from the pushed tree. Floor 0.288.0 + min_agent 0.131.0 → demo-hp and +demo-felhom on 0.288.0 in 20 s (`C/floor.txt`). Golden 0.288.0: sha `436fdfa1…`, round trip equal, vouched (golden 0.288.0 +/ agent 0.138.0 / min_agent 0.131.0), R-120 refused 0.287.0 after; `golden_currency_gate.py`: "OK — the newest released +controller has a golden" (`documentation/tests/golden-0.288.0-2026-10-02/`). + +## Rows + +Register **436 → 442**. Closed: R-788, R-790, R-791, R-792, R-795, R-801, R-803. Updated: R-789 (Tandoor — trigger), +R-800 (ruled A, built). Opened: R-802 (lawyer review), R-804 (plant-it image gone), R-805 (empty binds not judged), +R-806 (https backends / gramps-web first GET), R-807 (seeds that write only the database). + +## Teardown + +- **Bench 9401:** built and destroyed twice; `pct list` 9201 + 9202 only; nvme-scratch back to its baseline (+120 KiB). + Docker Hub credentials shredded on DooPlex, demo-hp and the bench; `docker logout` before the destroy. +- **9202:** MeTube removed (keeping data — with data refused by R-442), the harness's own test folder removed by hand; + controller 0.288.0; live catalog. +- **Hub:** the floor and the artifact manifest changed on purpose; nothing else. Tester-2: not touched. diff --git a/STATUS.md b/STATUS.md index 0beaea25..2631540f 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,69 +2,52 @@ **Ready for the first real tester (Tester-2): yes. You confirmed the tunnel route and the connect mails (2026-09-30).** -**Updated 2026-10-02. Both demo boxes run controller 0.287.0 and host agent 0.138.0. Hub 0.126.0. New installs get -golden 0.287.0 with agent 0.138.0.** +**Updated 2026-10-02 (afternoon). Both demo boxes run controller 0.288.0 and host agent 0.138.0. Hub 0.126.0. New +installs get golden 0.288.0 with agent 0.138.0.** **Tester-2 — read only, from the hub.** The customer record exists. Tester-2's box has not registered yet. -## Today: the family gate is built +## Today (afternoon): every app checked again -- **What it is:** a door in front of chosen apps. Only the family gets in. Each family member has their own name and - password. You add, reset and remove them on the dashboard: Settings → Security → **Család** card. -- **Grimmory (e-books) is published behind it.** Strangers cannot reach its login any more, so they cannot lock you out. - E-readers (Kobo, KOReader, OPDS apps) still work with Grimmory's own login. -- **MeTube (video downloads) is published behind it.** It has no login of its own, so the gate is its only door. The page - says: download only what you have the right to. -- **Measured on the scratch box and on demo-hp:** a stranger reached nothing; a stranger's wrong guesses locked only that - stranger; a removed family member was out at the next click; backup, remove and restore kept the gate. -- **Phone test: skipped** — you were not here. A 2-minute test from your phone off wifi would prove the real-internet - family sign-in by a person, not by me. +- **No data-loss fault.** I checked all 58 apps with the fixed check. It made each app really save something, then + looked where the data landed. **No app saves data where the backup does not copy it.** +- **40 apps: proven correct. 18 apps: not proven either way.** In those 18 the check could not fill every folder (for + example an upload folder stays empty because my test saves no upload). Nothing was found outside a backed-up folder. + I list them and work on them later. +- **papra was broken for new installs, now fixed.** It needs more memory than its limit, so a fresh install crashed in a + loop. I measured it and raised the limit. No box runs papra. +- **plant-it's program image is gone from Docker Hub.** It is already hidden from new installs. No box runs it. -## Licences: all 58 apps read +## Removing an app now tells the truth (your choice A) -Most are open source. These need your word (nothing was hidden or changed): +- When the household removes an app, its own files (books, videos) **stay**. The dialog and the result now say so, and + name the folder. Proven on the scratch box: the video was still there after the remove. -| App | The licence says | Choose: keep / hide / ask | I would | -|---|---|---|---| -| **Tandoor** | You may not sell a service whose value comes mostly from it (paid hosting and support named). | | ask the authors; keep meanwhile | -| **Emby** | Personal, non-commercial use only. Jellyfin does the same job. | | hide for new installs | -| **SparkyFitness** | Commercial use needs the author's written permission. (Decided: keep, ask.) | — | send the e-mail draft | -| n8n | Own or personal use is fine; giving it to others only free of charge. | | keep | -| Plex | Your household is the licensee with its own Plex account. | | keep | -| recipe-importer | Our own app — it has no licence file. | | pick one | +## Before the first paying customer -Four apps carry paid "enterprise" parts that stay switched off (Cal.com, Docmost, Outline, search in Wanderer), and seven -apps use Redis 7.4 as a private cache. Both are fine as they run; I watch them. +Everything here must be done before the first customer who pays: -**SparkyFitness e-mail:** drafted, NOT sent. The author has no public e-mail; the draft suggests their Discord. -If no written permission arrives before the first paying customer, SparkyFitness gets hidden from new installs. +1. **SparkyFitness:** written permission from the author (the e-mail draft is ready). If none → hidden from new installs. +2. **Tandoor:** written permission from the authors. If none → hidden from new installs. +3. **A lawyer reviews the licence list** (Tandoor, SparkyFitness, Emby, n8n, Plex, the paid "enterprise" parts, Redis). +4. **Agent updates:** I may sign agent updates only until the first paying customer; after that you sign them. + +Your licence decisions are recorded: Emby, Plex and n8n stay. recipe-importer needs nothing unless we share it. ## Also today -- **A new golden (0.287.0).** Baked early, because a box from the old golden would have shown the two apps without the - gate until its first update. The catalog check now refuses that case. -- **A bug in one catalog check, fixed:** the check "does the app keep its data where we back it up" never actually - talked to any app. Fixed and proven; all apps must be checked again (my next work). -- **Rows.** 3 closed, 14 opened (most are your licence choices). The list went from 422 to 436 rows. +- **New version 0.288.0 and a new golden (0.288.0).** +- **Rows.** 7 closed, 6 opened. The list went from 436 to 442 rows. ## What needs you -1. **The licence table above:** keep, hide or ask, per row. **If you say nothing:** everything stays offered. -2. **Send the SparkyFitness request** (the draft is ready). **If you do nothing:** it gets hidden before the first paying - customer. -3. **Removing an app "with data" keeps its files** (Grimmory's books, MeTube's videos) in the household folder, and - the dialog does not say so. **Choose:** keep them and say so on the dialog (I would), or delete the app's own folder - too. **If you say nothing:** files stay, the dialog stays silent. -4. **Demo box apps:** I installed Grimmory and MeTube on demo-hp for the test and removed them after. Want them kept - there for showing? **If you say nothing:** they stay removed. -5. **One phone test (2 minutes), only if you want it:** say so, and I put MeTube back on demo-hp and give you a family - login; you open `video.enkisfelhom.hu` on your phone off wifi. **If you say nothing:** the proof stays my real-internet - test from here. -6. Still open: Invidious and moonlight-web — I advise no to both. Pinchflat stays stopped (upstream paused). +1. **plant-it:** keep the hidden template as it is, or remove it entirely (its image no longer exists). **If you say + nothing:** it stays hidden; nothing runs it. +2. **Send the SparkyFitness request, and ask the Tandoor authors** (the "Before the first paying customer" list). +3. **Phone test (2 minutes), only if you want it:** say so, and I put MeTube back on demo-hp with a family login. ## Standing steps - **Monthly security re-test: last run 2026-10-01, next due ~2026-11-01.** (You start it with the standing brief.) -- **Weekly:** the golden bake (next around 9 October; today's bake was 0.287.0). -- **SparkyFitness:** written permission from the author before the first paying customer, or `lifecycle: hidden`. +- **Weekly:** the golden bake (next around 9 October; today's bake was 0.288.0). - **Registry clean-up:** only when the registry disk fills; "show me" mode first, then a person decides. diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md b/documentation/audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md new file mode 100644 index 00000000..ec07e53a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md @@ -0,0 +1,35 @@ +# R-803 — papra OOM under its 256M limit: birth measurement and proposed limit (2026-10-02, bench 9401 on demo-hp) + +Bench: LXC 9401 `r803-papra` on demo-hp (debian-13 amd64, swap 0, nesting+keyctl, 60G rootfs on nvme-scratch, +12 GiB). Code: catalog-wt febf58c + the uncommitted gate scripts. Image ghcr.io/papra-hq/papra:26.6.2-rootless. +Driver: `r803_birth.py` (scratchpad). It deploys the template the way the volume gate does (same `build_env`, same scratch +paths, `docker compose create` then `start`), samples the container's cgroup v2 every 2 s from creation +(`memory.stat` anon/file, `memory.current`, `memory.peak`, `memory.events` oom/oom_kill/max, plus docker status/health/ +restarts/OOMKilled), seeds once and reads back once with papra's own upgrade fixture (`upgrade_fixtures_box.Papra` through +`upgrade_boxport.get`), then idles 300 s. No Docker Hub login this time: the papra pull is from ghcr, and the canary base +image pulled anonymously. + +## 1. From birth, no limit (`birth-unlimited/`) +The deploy block was removed in a separate run copy of the catalog (HostConfig.Memory=0). +- healthy at 71.5 s (the image pull is included in that time), 0 restarts, `oom_kill` 0 +- **peak anon 425,029,632 B = 405.3 MiB**, sampled during first start/migration (4–28 s after start) +- peak `memory.current` 427 MiB; the cgroup's own `memory.peak` (anon + file, catches what 2-s sampling misses) **483 MiB** +- after healthy: anon ~356 MiB for ~2 min, then settles at **~254 MiB idle**, which is already near the old 256M limit +- fixture: `papra: sign-up http=200` → seed OK; `papra: sign-in as the seeded account http=200 ok=True` → read back **true** +- volume after the run: `db/db.sqlite (581632 B)` in the `/app/app-data` volume + +## 2. Proposed limit +405.3 MiB × 1.6 = 648 MiB → next catalog step **768M**. 768M also covers the highest `memory.peak` seen (483 MiB) at 1.59×. +The bench template diff is in `template.diff`. It is NOT applied to the repo. + +## 3. From birth at 768M (`run-768M/`) +- HostConfig.Memory=805306368 (768 MiB); `memory.max` = 805306368 +- healthy at 31.0 s, final status running/healthy, **restarts 0, oom_kill 0, OOMKilled false** +- fixture seed OK, read back **true** +- peak anon 297,943,040 B = 284.1 MiB, `memory.peak` 341 MiB, idle end anon 251 MiB. This run peaked lower than the + unlimited run: the start-up peak varies between runs (memory.peak 341–483 MiB over two runs), so do not size from one run. +- gate (`gate-papra-768M.txt`, probe in `gate-evidence/papra/probe.json`), verbatim: + `papra CLEAN` / `1 clean · 0 broken · 0 undetermined (of 1 in scope)` / `volume-persistence gate OK` / + `check-volume-persistence exit code = 0`. Exercise `172.18.0.2:1221/ -> 200`; `/app/app-data` holds `db/db.sqlite`. + +Note: `mem_request: "50M"` in `.felhom.yml` was left unchanged (not in scope). Measured idle is ~255 MiB. diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/bench-create.txt b/documentation/audits/persistence-sweep-2026-10-02/A/papra/bench-create.txt new file mode 100644 index 00000000..677d89d9 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/bench-create.txt @@ -0,0 +1,55 @@ ++ date -u +Fri Oct 2 14:34:42 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19536696 18829564 48.29% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 77370636 855982452 7.87% ++ pct config 9401 ++ head -1 +Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist ++ pveam list local ++ grep debian-13 +local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst 123.93MB ++ pct create 9401 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --hostname r803-papra --cores 6 --memory 12288 --swap 0 --rootfs nvme-scratch:60 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --features nesting=1,keyctl=1 --onboot 0 ++ tail -1 +done: SHA256:ZxJabA9hzMBYA+4Go9i2Ook9/pAunGUO4EgXoYQEGq0 root@r803-papra ++ pct config 9401 +arch: amd64 +cores: 6 +features: nesting=1,keyctl=1 +hostname: r803-papra +memory: 12288 +net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:FA:53:74,ip=dhcp,type=veth +onboot: 0 +ostype: debian +rootfs: nvme-scratch:9401/vm-9401-disk-0.raw,size=60G +swap: 0 +unprivileged: 1 ++ pct start 9401 ++ sleep 15 ++ pct exec 9401 -- bash -c 'dpkg --print-architecture; hostname; ip -4 -o addr show eth0 | awk "{print \$4}"; apt-get update -qq >/dev/null 2>&1; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker.io docker-compose python3 python3-yaml curl postgresql-client sqlite3 git >/dev/null 2>&1; docker --version; docker compose version; python3 --version; git --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3; df -h /' +amd64 +r803-papra +192.168.0.100/24 +Docker version 26.1.5+dfsg1, build a72d7cd +Docker Compose version 2.26.1-4 +Python 3.13.5 +git version 2.47.3 +traefik-public-net + total used free shared buff/cache available +Mem: 12288 61 10577 0 1649 12226 +Swap: 0 0 0 +Filesystem Size Used Avail Use% Mounted on +/dev/loop2 59G 1.3G 55G 3% / ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19536788 18829472 48.29% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 78967692 854385396 8.03% diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/birth.csv b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/birth.csv new file mode 100644 index 00000000..10583899 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/birth.csv @@ -0,0 +1,169 @@ +t_s,phase,status,health,restarts,oomkilled_flag,exit,limit_bytes,current_bytes,peak_bytes,anon_bytes,file_bytes,ev_oom,ev_oom_kill,ev_max,cgroup +40.8,start,created,,0,false,0,,,,,,,,,no +42.8,start,running,starting,0,false,0,,214106112,214372352,202956800,8192,0,0,0,yes +44.8,start,running,starting,0,false,0,,381394944,381628416,365441024,831488,0,0,0,yes +46.8,start,running,starting,0,false,0,,242147328,419913728,218886144,3166208,0,0,0,yes +48.8,start,running,starting,0,false,0,,447975424,506306560,425029632,3166208,0,0,0,yes +50.8,start,running,starting,0,false,0,,447565824,506306560,425029632,3166208,0,0,0,yes +52.8,start,running,starting,0,false,0,,447561728,506306560,425029632,3166208,0,0,0,yes +54.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes +56.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes +58.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes +60.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes +62.8,start,running,starting,0,false,0,,447340544,506306560,425029632,3166208,0,0,0,yes +64.8,start,running,starting,0,false,0,,447340544,506306560,425029632,3166208,0,0,0,yes +66.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes +68.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes +70.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes +72.8,idle,running,healthy,0,false,0,,393814016,506306560,372817920,3293184,0,0,0,yes +74.8,idle,running,healthy,0,false,0,,393834496,506306560,372817920,3293184,0,0,0,yes +76.8,idle,running,healthy,0,false,0,,393703424,506306560,372817920,3420160,0,0,0,yes +78.8,idle,running,healthy,0,false,0,,393703424,506306560,372817920,3420160,0,0,0,yes +80.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes +82.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes +84.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes +86.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes +88.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +90.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +92.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +94.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +96.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +98.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +100.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes +102.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes +104.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes +106.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes +108.8,idle,running,healthy,0,false,0,,394362880,506306560,372834304,4063232,0,0,0,yes +110.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +112.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +114.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +116.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +118.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +120.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +122.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +124.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +126.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +128.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +130.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes +132.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +134.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +136.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +138.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +140.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +142.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +144.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes +146.8,idle,running,healthy,0,false,0,,382656512,506306560,361402368,4063232,0,0,0,yes +148.8,idle,running,healthy,0,false,0,,382656512,506306560,361402368,4063232,0,0,0,yes +150.8,idle,running,healthy,0,false,0,,370569216,506306560,349626368,4063232,0,0,0,yes +152.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes +154.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes +156.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes +158.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes +160.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes +162.8,idle,running,healthy,0,false,0,,370638848,506306560,349786112,4063232,0,0,0,yes +164.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +166.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +168.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +170.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +172.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +174.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes +176.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +178.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +180.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +182.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +184.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +186.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +188.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +190.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes +192.8,idle,running,healthy,0,false,0,,288079872,506306560,269955072,4063232,0,0,0,yes +194.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +196.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +198.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +200.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +202.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +204.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +206.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +208.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +210.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +212.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +214.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +216.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +218.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +220.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +222.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +224.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +226.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +228.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +230.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +232.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +234.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +236.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +238.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +240.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +242.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +244.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes +246.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +248.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +250.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes +252.8,idle,running,healthy,0,false,0,,287227904,506306560,268812288,4063232,0,0,0,yes +254.8,idle,running,healthy,0,false,0,,286973952,506306560,268812288,4063232,0,0,0,yes +256.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +258.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +260.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +262.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +264.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +266.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +268.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +270.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +272.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +274.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +276.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes +278.8,idle,running,healthy,0,false,0,,285605888,506306560,267698176,4063232,0,0,0,yes +280.8,idle,running,healthy,0,false,0,,285605888,506306560,267698176,4063232,0,0,0,yes +282.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes +284.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes +286.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes +288.8,idle,running,healthy,0,false,0,,284282880,506306560,266403840,4063232,0,0,0,yes +290.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +292.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +294.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +296.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +298.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +300.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +302.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +304.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +306.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +308.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +310.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes +312.8,idle,running,healthy,0,false,0,,284483584,506306560,266600448,4063232,0,0,0,yes +314.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +316.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +318.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +320.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +322.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +324.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +326.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +328.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +330.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +332.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +334.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +336.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +338.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +340.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes +342.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes +344.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes +346.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes +348.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +350.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +352.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +354.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +356.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +358.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +360.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +362.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +364.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes +366.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes +368.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes +370.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes +372.8,end,running,healthy,0,false,0,,285491200,506306560,267022336,4063232,0,0,0,yes +374.8,end,running,healthy,0,false,0,,285114368,506306560,267022336,4063232,0,0,0,yes diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/docker-logs-tail.txt b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/docker-logs-tail.txt new file mode 100644 index 00000000..39790934 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/docker-logs-tail.txt @@ -0,0 +1,41 @@ +Error response from daemon: No such container: r803papra-papra-1 +{"level":"info","message":"Worker started","timestampMs":1790951826314,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}} +{"level":"info","message":"Task worker started","timestampMs":1790951826314,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}} +{"level":"info","message":"Worker started","timestampMs":1790951826314,"namespace":"app-server","data":{"processMode":"all"}} +{"level":"info","message":"Server started","timestampMs":1790951826320,"namespace":"app-server","data":{"processMode":"all","port":1221}} +{"level":"debug","message":"Consuming job","timestampMs":1790951826321,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents"}} +{"level":"info","message":"Expired documents deleted","timestampMs":1790951826326,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","deletedDocumentsCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790951826327,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents","nextDate":"2026-10-02T22:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790951826327,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"}} +{"level":"info","message":"Updated expired pending invitations status","timestampMs":1790951826329,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all"}} +{"level":"info","message":"Job rescheduled","timestampMs":1790951826330,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","nextDate":"2026-10-02T22:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790951826330,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations"}} +{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790951826331,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organizationCount":0}} +{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790951826331,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganizationCount":0,"totalOrganizationCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790951826332,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations","nextDate":"2026-10-02T23:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790951826332,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries"}} +{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790951826333,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790951826333,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries","nextDate":"2026-10-03T00:00:00.000Z"}} +{"level":"info","message":"Request completed","timestampMs":1790951848895,"namespace":"app","data":{"processMode":"all","requestId":"req_n19dkxtm1114laxq56pdt27e","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":30}} +{"level":"info","message":"Request completed","timestampMs":1790951849138,"namespace":"app","data":{"processMode":"all","requestId":"req_fuvh1rragvh9x4bwi23xtldw","status":200,"method":"GET","path":"/api/health","routePath":"/api/health","userAgent":"curl/8.14.1","durationMs":9}} +{"level":"warn","message":"Rate limiting skipped: could not determine client IP address. Ensure your runtime forwards a trusted client IP header and configure `advanced.ipAddress.ipAddressHeaders` if needed.","timestampMs":1790951849177,"namespace":"auth","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","args":[]}} +{"level":"info","message":"User signed up","timestampMs":1790951849366,"namespace":"auth","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","userId":"usr_bpedfbxp4su8qak8owd9dpdp"}} +{"level":"debug","message":"Event emitted","timestampMs":1790951849367,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventName":"user.created","eventId":"evt_zdo5df8yqve9uyf88pqpczef","handlerCount":2,"handlerNames":["roles.assign-admin-to-first-user","tracking.register-user-created-event"]}} +{"level":"info","message":"Request completed","timestampMs":1790951849368,"namespace":"app","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","status":200,"method":"POST","path":"/api/auth/sign-up/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":195}} +{"level":"info","message":"Event handler executed successfully","timestampMs":1790951849371,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"tracking.register-user-created-event"}} +{"level":"info","message":"Admin role assigned to first user","timestampMs":1790951849382,"namespace":"events:first-user-admin","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user","userId":"usr_bpedfbxp4su8qak8owd9dpdp"}} +{"level":"info","message":"Event handler executed successfully","timestampMs":1790951849383,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user"}} +{"level":"info","message":"Request completed","timestampMs":1790951849408,"namespace":"app","data":{"processMode":"all","requestId":"req_xesthg827fgu037234tgbykw","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"curl/8.14.1","durationMs":2}} +{"level":"error","message":"Invalid password","timestampMs":1790951849562,"namespace":"auth","data":{"processMode":"all","requestId":"req_i44cjswl1ymsd6wyjo0tcc21","args":[]}} +{"level":"info","message":"Request completed","timestampMs":1790951849565,"namespace":"app","data":{"processMode":"all","requestId":"req_i44cjswl1ymsd6wyjo0tcc21","status":401,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":122}} +{"level":"info","message":"Request completed","timestampMs":1790951849726,"namespace":"app","data":{"processMode":"all","requestId":"req_imy82mapf1d7ocrq47anw0kn","status":200,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":125}} +{"level":"info","message":"Request completed","timestampMs":1790951879011,"namespace":"app","data":{"processMode":"all","requestId":"req_aiuro4gyph5iuh1zoyx28f0a","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790951909117,"namespace":"app","data":{"processMode":"all","requestId":"req_kz6nixmhcggk34cgklgme0gc","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790951939227,"namespace":"app","data":{"processMode":"all","requestId":"req_ene5chpio70s3ft9yrvtw8av","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790951969347,"namespace":"app","data":{"processMode":"all","requestId":"req_rd77g9po617jwmediluqbmat","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790951999484,"namespace":"app","data":{"processMode":"all","requestId":"req_ujqsjgp3nns1aw6at86qo6y8","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952029581,"namespace":"app","data":{"processMode":"all","requestId":"req_vjf42i6srfie7anna1z1n8s7","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952059706,"namespace":"app","data":{"processMode":"all","requestId":"req_gwmg4mra5d9cidz6c5iyqgfn","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952089818,"namespace":"app","data":{"processMode":"all","requestId":"req_b67si316nwx7c6aoei0pdhwf","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952119931,"namespace":"app","data":{"processMode":"all","requestId":"req_bro2lsyac2l2ftgcvm9420wd","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}} +{"level":"info","message":"Request completed","timestampMs":1790952150053,"namespace":"app","data":{"processMode":"all","requestId":"req_w8ktugjx2gdzadz8u9mcwsgq","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/run.log b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/run.log new file mode 100644 index 00000000..cf15c83e --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/run.log @@ -0,0 +1,39 @@ +[ 40.8s] compose create rc=0 container=1e1ace360792 HostConfig.Memory=0 +[ 41.2s] compose start rc=0 +[ 71.5s] healthy at 71.5s +[ 71.8s] fixture seed -> OK (papra: sign-up http=200) +[ 72.2s] fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True) +[ 72.2s] idle 300s +[ 375.2s] volume files: ['db/db.sqlite (581632 B)'] +{ + "app": "papra", + "idle_s": 300, + "fixture_said": [ + "papra: sign-up http=200", + "papra: sign-in as the seeded account http=200 ok=True" + ], + "seed_ok": true, + "readback": true, + "healthy_at_s": 71.5, + "volume_files": [ + "db/db.sqlite (581632 B)" + ], + "samples": 168, + "peak_anon_bytes": 425029632, + "peak_anon_by_phase": { + "start": 425029632, + "seed": null, + "readback": null, + "idle": 372846592, + "end": 267022336 + }, + "idle_end_anon_bytes": 267022336, + "peak_current_bytes": 447975424, + "cgroup_memory_peak_bytes_max": 506306560, + "oom_kill_max": 0, + "final_status": "running", + "final_health": "healthy", + "final_restarts": "0", + "final_oomkilled_flag": "false", + "limit_bytes": null +} diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/summary.json b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/summary.json new file mode 100644 index 00000000..1a5e6eae --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/birth-unlimited/summary.json @@ -0,0 +1,71 @@ +{ + "app": "papra", + "env_keys": [ + "AUTH_SECRET", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "idle_s": 300, + "fixture_said": [ + "papra: sign-up http=200", + "papra: sign-in as the seeded account http=200 ok=True" + ], + "seed_ok": true, + "readback": true, + "healthy_at_s": 71.5, + "volume_files": [ + "db/db.sqlite (581632 B)" + ], + "samples": 168, + "peak_anon_bytes": 425029632, + "peak_anon_by_phase": { + "start": 425029632, + "seed": null, + "readback": null, + "idle": 372846592, + "end": 267022336 + }, + "idle_end_anon_bytes": 267022336, + "peak_current_bytes": 447975424, + "cgroup_memory_peak_bytes_max": 506306560, + "oom_kill_max": 0, + "final_status": "running", + "final_health": "healthy", + "final_restarts": "0", + "final_oomkilled_flag": "false", + "limit_bytes": null, + "events": [ + { + "t": 40.8, + "event": "compose create rc=0 container=1e1ace360792 HostConfig.Memory=0" + }, + { + "t": 41.2, + "event": "compose start rc=0" + }, + { + "t": 71.5, + "event": "healthy at 71.5s" + }, + { + "t": 71.8, + "event": "fixture seed -> OK (papra: sign-up http=200)" + }, + { + "t": 72.2, + "event": "fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)" + }, + { + "t": 72.2, + "event": "idle 300s" + }, + { + "t": 375.2, + "event": "volume files: ['db/db.sqlite (581632 B)']" + } + ] +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-evidence/papra/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-evidence/papra/probe.json new file mode 100644 index 00000000..fbe62ebf --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-evidence/papra/probe.json @@ -0,0 +1,58 @@ +{ + "probe": { + "app": "papra", + "containers": [ + { + "diff_added": 176, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 177, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "ghcr.io/papra-hq/papra:26.6.2-rootless", + "mounts": [ + { + "class": "named-declared", + "files": 1, + "name": "volgate-papra_papra_data", + "sample": [ + "db/db.sqlite" + ], + "source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data", + "target": "/app/app-data", + "writable_by_app": "yes" + } + ], + "name": "papra", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "papra_data" + ], + "env_keys": [ + "AUTH_SECRET", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:1221/ -> 200" + ], + "fixture": null, + "ports": [ + 1221 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-papra-768M.txt b/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-papra-768M.txt new file mode 100644 index 00000000..1c58a493 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/gate-papra-768M.txt @@ -0,0 +1,8 @@ +# check-volume-persistence.py --evidence /root/gate-ev papra — 2026-10-02T14:49:11Z, bench 9401 r803-papra, catalog-wt febf58c + uncommitted gate scripts + BENCH-ONLY papra limit 768M (template.diff) +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +papra CLEAN + +1 clean · 0 broken · 0 undetermined (of 1 in scope) +volume-persistence gate OK +check-volume-persistence exit code = 0 diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/birth.csv b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/birth.csv new file mode 100644 index 00000000..d1351ee3 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/birth.csv @@ -0,0 +1,169 @@ +t_s,phase,status,health,restarts,oomkilled_flag,exit,limit_bytes,current_bytes,peak_bytes,anon_bytes,file_bytes,ev_oom,ev_oom_kill,ev_max,cgroup +0.3,start,created,,0,false,0,,,,,,,,,no +2.3,start,running,starting,0,false,0,805306368,216780800,216780800,206794752,8192,0,0,0,yes +4.3,start,running,starting,0,false,0,805306368,305967104,305967104,291098624,770048,0,0,0,yes +6.3,start,running,starting,0,false,0,805306368,244715520,358092800,221315072,2543616,0,0,0,yes +8.3,start,running,starting,0,false,0,805306368,313176064,358092800,295247872,2543616,0,0,0,yes +10.3,start,running,starting,0,false,0,805306368,312532992,358092800,295247872,2543616,0,0,0,yes +12.3,start,running,starting,0,false,0,805306368,312352768,358092800,295247872,2543616,0,0,0,yes +14.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +16.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +18.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +20.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +22.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +24.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +26.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +28.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +30.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes +32.3,idle,running,healthy,0,false,0,805306368,315858944,358092800,297943040,2670592,0,0,0,yes +34.3,idle,running,healthy,0,false,0,805306368,315359232,358092800,297943040,2732032,0,0,0,yes +36.3,idle,running,healthy,0,false,0,805306368,315330560,358092800,297943040,2732032,0,0,0,yes +38.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +40.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +42.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +44.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +46.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +48.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +50.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +52.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +54.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +56.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +58.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +60.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes +62.3,idle,running,healthy,0,false,0,805306368,316231680,358092800,297943040,3440640,0,0,0,yes +64.3,idle,running,healthy,0,false,0,805306368,316231680,358092800,297943040,3440640,0,0,0,yes +66.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +68.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +70.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +72.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +74.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +76.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +78.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +80.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +82.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +84.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +86.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +88.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +90.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes +92.3,idle,running,healthy,0,false,0,805306368,316313600,358092800,297943040,3440640,0,0,0,yes +94.3,idle,running,healthy,0,false,0,805306368,316313600,358092800,297943040,3440640,0,0,0,yes +96.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes +98.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes +100.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes +102.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes +104.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes +106.3,idle,running,healthy,0,false,0,805306368,307179520,358092800,289411072,3440640,0,0,0,yes +108.3,idle,running,healthy,0,false,0,805306368,307179520,358092800,289411072,3440640,0,0,0,yes +110.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +112.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +114.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +116.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +118.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +120.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes +122.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +124.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +126.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +128.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +130.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +132.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +134.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes +136.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +138.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +140.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +142.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +144.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +146.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +148.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +150.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes +152.3,idle,running,healthy,0,false,0,805306368,284090368,358092800,266629120,3440640,0,0,0,yes +154.3,idle,running,healthy,0,false,0,805306368,283865088,358092800,266629120,3440640,0,0,0,yes +156.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +158.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +160.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +162.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +164.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +166.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +168.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +170.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +172.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +174.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +176.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +178.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +180.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes +182.3,idle,running,healthy,0,false,0,805306368,283774976,358092800,266637312,3440640,0,0,0,yes +184.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +186.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +188.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +190.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +192.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +194.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +196.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +198.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +200.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +202.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +204.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +206.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes +208.3,idle,running,healthy,0,false,0,805306368,283619328,358092800,266637312,3440640,0,0,0,yes +210.3,idle,running,healthy,0,false,0,805306368,283619328,358092800,266637312,3440640,0,0,0,yes +212.3,idle,running,healthy,0,false,0,805306368,282644480,358092800,265555968,3440640,0,0,0,yes +214.3,idle,running,healthy,0,false,0,805306368,282529792,358092800,265555968,3440640,0,0,0,yes +216.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +218.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +220.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +222.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +224.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +226.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +228.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +230.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +232.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +234.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +236.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +238.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +240.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes +242.3,idle,running,healthy,0,false,0,805306368,279969792,358092800,262512640,3440640,0,0,0,yes +244.3,idle,running,healthy,0,false,0,805306368,279519232,358092800,262512640,3440640,0,0,0,yes +246.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +248.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +250.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +252.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +254.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +256.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes +258.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +260.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +262.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +264.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +266.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +268.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +270.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes +272.3,idle,running,healthy,0,false,0,805306368,279535616,358092800,262713344,3440640,0,0,0,yes +274.3,idle,running,healthy,0,false,0,805306368,279535616,358092800,262713344,3440640,0,0,0,yes +276.3,idle,running,healthy,0,false,0,805306368,279531520,358092800,262713344,3440640,0,0,0,yes +278.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +280.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +282.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +284.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +286.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +288.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +290.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +292.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +294.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +296.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +298.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +300.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes +302.3,idle,running,healthy,0,false,0,805306368,280551424,358092800,262909952,3440640,0,0,0,yes +304.3,idle,running,healthy,0,false,0,805306368,279789568,358092800,262909952,3440640,0,0,0,yes +306.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +308.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +310.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +312.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +314.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +316.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +318.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +320.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +322.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +324.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +326.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +328.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +330.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes +332.3,end,running,healthy,0,false,0,805306368,280178688,358092800,263094272,3440640,0,0,0,yes +334.3,end,running,healthy,0,false,0,805306368,280158208,358092800,263094272,3440640,0,0,0,yes diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/docker-logs-tail.txt b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/docker-logs-tail.txt new file mode 100644 index 00000000..8baae2e9 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/docker-logs-tail.txt @@ -0,0 +1,41 @@ +Error response from daemon: No such container: r803papra-papra-1 +{"level":"info","message":"Worker started","timestampMs":1790952202404,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}} +{"level":"info","message":"Task worker started","timestampMs":1790952202405,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}} +{"level":"info","message":"Worker started","timestampMs":1790952202405,"namespace":"app-server","data":{"processMode":"all"}} +{"level":"info","message":"Server started","timestampMs":1790952202412,"namespace":"app-server","data":{"processMode":"all","port":1221}} +{"level":"debug","message":"Consuming job","timestampMs":1790952202412,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents"}} +{"level":"info","message":"Expired documents deleted","timestampMs":1790952202417,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","deletedDocumentsCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790952202418,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents","nextDate":"2026-10-02T22:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790952202418,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"}} +{"level":"info","message":"Updated expired pending invitations status","timestampMs":1790952202420,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all"}} +{"level":"info","message":"Job rescheduled","timestampMs":1790952202420,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","nextDate":"2026-10-02T22:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790952202420,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations"}} +{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790952202421,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organizationCount":0}} +{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790952202421,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganizationCount":0,"totalOrganizationCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790952202422,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations","nextDate":"2026-10-02T23:00:00.000Z"}} +{"level":"debug","message":"Consuming job","timestampMs":1790952202422,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries"}} +{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790952202423,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790952202424,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries","nextDate":"2026-10-03T00:00:00.000Z"}} +{"level":"info","message":"Request completed","timestampMs":1790952224957,"namespace":"app","data":{"processMode":"all","requestId":"req_mzlriaig290cp0lo1pueqg8f","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":10}} +{"level":"info","message":"Request completed","timestampMs":1790952225211,"namespace":"app","data":{"processMode":"all","requestId":"req_rbgds36k06nva5ctmyja6wa8","status":200,"method":"GET","path":"/api/health","routePath":"/api/health","userAgent":"curl/8.14.1","durationMs":10}} +{"level":"warn","message":"Rate limiting skipped: could not determine client IP address. Ensure your runtime forwards a trusted client IP header and configure `advanced.ipAddress.ipAddressHeaders` if needed.","timestampMs":1790952225255,"namespace":"auth","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","args":[]}} +{"level":"info","message":"User signed up","timestampMs":1790952225439,"namespace":"auth","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","userId":"usr_ruxg5v735iel8nz8s9lqa7tq"}} +{"level":"debug","message":"Event emitted","timestampMs":1790952225441,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventName":"user.created","eventId":"evt_ow003efa2kswbeylubj7rz7e","handlerCount":2,"handlerNames":["roles.assign-admin-to-first-user","tracking.register-user-created-event"]}} +{"level":"info","message":"Request completed","timestampMs":1790952225443,"namespace":"app","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","status":200,"method":"POST","path":"/api/auth/sign-up/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":193}} +{"level":"info","message":"Event handler executed successfully","timestampMs":1790952225446,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"tracking.register-user-created-event"}} +{"level":"info","message":"Admin role assigned to first user","timestampMs":1790952225457,"namespace":"events:first-user-admin","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user","userId":"usr_ruxg5v735iel8nz8s9lqa7tq"}} +{"level":"info","message":"Event handler executed successfully","timestampMs":1790952225457,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user"}} +{"level":"info","message":"Request completed","timestampMs":1790952225483,"namespace":"app","data":{"processMode":"all","requestId":"req_vq3wue4ynu6w2hgdioirevpy","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"curl/8.14.1","durationMs":2}} +{"level":"error","message":"Invalid password","timestampMs":1790952225645,"namespace":"auth","data":{"processMode":"all","requestId":"req_j26sizfqgcjoyehnqbqwshp7","args":[]}} +{"level":"info","message":"Request completed","timestampMs":1790952225649,"namespace":"app","data":{"processMode":"all","requestId":"req_j26sizfqgcjoyehnqbqwshp7","status":401,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":131}} +{"level":"info","message":"Request completed","timestampMs":1790952225813,"namespace":"app","data":{"processMode":"all","requestId":"req_fiszwx3skbrokcjkwy25qqqt","status":200,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":129}} +{"level":"info","message":"Request completed","timestampMs":1790952255066,"namespace":"app","data":{"processMode":"all","requestId":"req_jtvkoj6bu97qyx0vn4xlueur","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}} +{"level":"info","message":"Request completed","timestampMs":1790952285177,"namespace":"app","data":{"processMode":"all","requestId":"req_lc748l5n8pffmamuf2h1v2i2","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952315288,"namespace":"app","data":{"processMode":"all","requestId":"req_mhiebf8u6rkw5y714kvimxe0","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}} +{"level":"info","message":"Request completed","timestampMs":1790952345400,"namespace":"app","data":{"processMode":"all","requestId":"req_n8xfrzfsje6fjmdotkp7jsi6","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952375509,"namespace":"app","data":{"processMode":"all","requestId":"req_z7vnjzysymre102masesv1g7","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952405625,"namespace":"app","data":{"processMode":"all","requestId":"req_sm6dnbj50dom70gj14gtzh9l","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952435760,"namespace":"app","data":{"processMode":"all","requestId":"req_ijng1wv39gjmmt5bfy8aamjj","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}} +{"level":"info","message":"Request completed","timestampMs":1790952465867,"namespace":"app","data":{"processMode":"all","requestId":"req_uvkcg2pvsxcfqijm6o3s5666","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952495986,"namespace":"app","data":{"processMode":"all","requestId":"req_mu9yi26i6txf2ebnqgbtr3yj","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} +{"level":"info","message":"Request completed","timestampMs":1790952526097,"namespace":"app","data":{"processMode":"all","requestId":"req_xrw5zt9is0bg76uv8jhjxgr0","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}} diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/run.log b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/run.log new file mode 100644 index 00000000..035c6bbc --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/run.log @@ -0,0 +1,39 @@ +[ 0.3s] compose create rc=0 container=334b86886d75 HostConfig.Memory=805306368 +[ 0.6s] compose start rc=0 +[ 31.0s] healthy at 31.0s +[ 31.2s] fixture seed -> OK (papra: sign-up http=200) +[ 31.6s] fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True) +[ 31.6s] idle 300s +[ 334.6s] volume files: ['db/db.sqlite (581632 B)'] +{ + "app": "papra", + "idle_s": 300, + "fixture_said": [ + "papra: sign-up http=200", + "papra: sign-in as the seeded account http=200 ok=True" + ], + "seed_ok": true, + "readback": true, + "healthy_at_s": 31.0, + "volume_files": [ + "db/db.sqlite (581632 B)" + ], + "samples": 168, + "peak_anon_bytes": 297943040, + "peak_anon_by_phase": { + "start": 295247872, + "seed": null, + "readback": null, + "idle": 297943040, + "end": 263094272 + }, + "idle_end_anon_bytes": 263094272, + "peak_current_bytes": 316313600, + "cgroup_memory_peak_bytes_max": 358092800, + "oom_kill_max": 0, + "final_status": "running", + "final_health": "healthy", + "final_restarts": "0", + "final_oomkilled_flag": "false", + "limit_bytes": 805306368 +} diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/summary.json b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/summary.json new file mode 100644 index 00000000..ae948087 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/run-768M/summary.json @@ -0,0 +1,71 @@ +{ + "app": "papra", + "env_keys": [ + "AUTH_SECRET", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "idle_s": 300, + "fixture_said": [ + "papra: sign-up http=200", + "papra: sign-in as the seeded account http=200 ok=True" + ], + "seed_ok": true, + "readback": true, + "healthy_at_s": 31.0, + "volume_files": [ + "db/db.sqlite (581632 B)" + ], + "samples": 168, + "peak_anon_bytes": 297943040, + "peak_anon_by_phase": { + "start": 295247872, + "seed": null, + "readback": null, + "idle": 297943040, + "end": 263094272 + }, + "idle_end_anon_bytes": 263094272, + "peak_current_bytes": 316313600, + "cgroup_memory_peak_bytes_max": 358092800, + "oom_kill_max": 0, + "final_status": "running", + "final_health": "healthy", + "final_restarts": "0", + "final_oomkilled_flag": "false", + "limit_bytes": 805306368, + "events": [ + { + "t": 0.3, + "event": "compose create rc=0 container=334b86886d75 HostConfig.Memory=805306368" + }, + { + "t": 0.6, + "event": "compose start rc=0" + }, + { + "t": 31.0, + "event": "healthy at 31.0s" + }, + { + "t": 31.2, + "event": "fixture seed -> OK (papra: sign-up http=200)" + }, + { + "t": 31.6, + "event": "fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)" + }, + { + "t": 31.6, + "event": "idle 300s" + }, + { + "t": 334.6, + "event": "volume files: ['db/db.sqlite (581632 B)']" + } + ] +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/teardown.txt b/documentation/audits/persistence-sweep-2026-10-02/A/papra/teardown.txt new file mode 100644 index 00000000..e1987e9b --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/teardown.txt @@ -0,0 +1,44 @@ ++ date -u +Fri Oct 2 14:51:49 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch +9401 running r803-papra ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19545060 18821200 48.32% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 80190580 853162508 8.15% ++ pct exec 9401 -- bash -c 'docker ps -a --format {{.Names}} | wc -l; docker volume ls -q | wc -l; ls /root/.docker/config.json 2>&1' +0 +0 +ls: cannot access '/root/.docker/config.json': No such file or directory ++ pct stop 9401 ++ pct destroy 9401 --purge +purging CT 9401 from related configurations.. ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch ++ pct config 9401 ++ head -1 +Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist ++ ls /mnt/hdd_1/images/ +9202 ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19544988 18821272 48.31% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 77370636 855982452 7.87% +ls: cannot access '/root/r803-*': No such file or directory + +# Teardown statement (R-803), 2026-10-02 ~14:52Z +# machine: bench LXC 9401 (r803-papra): 0 containers and 0 volumes before stop (each run did `compose down -v`); no Docker Hub +# login was made this time (no config.json); destroyed with --purge. +# host: demo-hp: `pct list` = 9201 + 9202 only (both untouched); /mnt/hdd_1/images/ = 9202 only; nvme-scratch 77370636 KiB +# used before create = after destroy; local-lvm unchanged (34954734 KiB); helper scripts removed from /root. +# hub: untouched. No prune anywhere. Nothing committed or pushed; the 768M change existed only in the bench's catalog copy +# (recorded in template.diff). The DooPlex scratchpad catalog-wt was not modified. diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/papra/template.diff b/documentation/audits/persistence-sweep-2026-10-02/A/papra/template.diff new file mode 100644 index 00000000..0b13af80 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/papra/template.diff @@ -0,0 +1,35 @@ +diff --git a/templates/papra/.felhom.yml b/templates/papra/.felhom.yml +index 15c568e..9c68192 100644 +--- a/templates/papra/.felhom.yml ++++ b/templates/papra/.felhom.yml +@@ -15,7 +15,7 @@ catalog_since: "2026-09-22" + # --- Resource hints (displayed on deploy screen) --- + resources: + mem_request: "50M" +- mem_limit: "256M" ++ mem_limit: "768M" + pi_compatible: true + needs_hdd: false + +diff --git a/templates/papra/docker-compose.yml b/templates/papra/docker-compose.yml +index 44bd7c6..d79cacd 100644 +--- a/templates/papra/docker-compose.yml ++++ b/templates/papra/docker-compose.yml +@@ -1,7 +1,7 @@ + # Papra - Minimalista dokumentumtár és rendszerező + # Domain: ${SUBDOMAIN}.${DOMAIN} + # Database: None (file-based) +-# RAM: ~50M (mem_limit: 256M) | Pi-compatible: Yes ++# RAM: ~255M idle, ~405M anon at first-start migration (mem_limit: 768M, R-803) | Pi-compatible: Yes + # + # Environment variables: + # DOMAIN - Your domain (e.g., demo-felhom.eu) +@@ -38,7 +38,7 @@ services: + deploy: + resources: + limits: +- memory: 256M ++ memory: 768M + healthcheck: + # A papra képfájlban nincs wget és nincs curl — csak node. A korábbi wget + # próba ezért soha nem futott le, a konténer véglegesen unhealthy maradt, diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md new file mode 100644 index 00000000..5debee84 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md @@ -0,0 +1,211 @@ +# 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//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 +``` diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-01.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-01.txt new file mode 100644 index 00000000..9865c7be --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-01.txt @@ -0,0 +1,38 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-01 actualbudget adventurelog audiobookshelf bentopdf bookstack calcom calibre-web +# batch 01 started 2026-10-02T11:47:49Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +actualbudget CLEAN +adventurelog CLEAN +audiobookshelf CLEAN +bentopdf UNDETERMINED 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 U +bookstack CLEAN +calcom CLEAN +calibre-web CLEAN 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- + +UNDETERMINED — NOT a pass. The question was not answered for these: + bentopdf: 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 + +6 clean · 0 broken · 1 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 01 finished 2026-10-02T12:06:35Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi actualbudget/actual-server:26.9.0: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8 +rmi calcom/cal.com:v6.2.0: Deleted: sha256:ac0b59386af04eb1adb3ecce007f7bfa052e5c2da2b2ab4d683a2e73ef866825 +rmi crocodilestick/calibre-web-automated:v4.0.8: Deleted: sha256:570560e87f1fd49773f66d9023984d132b3fa6a084c9860f5e9a16cf48a77b02 +rmi ghcr.io/advplyr/audiobookshelf:2.37.1: Deleted: sha256:d1b11da75466b874d025016f2bfa1d9fd5bf0d496fcd29c3a883d71ae3813305 +rmi ghcr.io/alam00000/bentopdf:v2.8.6: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1 +rmi ghcr.io/seanmorley15/adventurelog-backend:v0.13.0: Deleted: sha256:6f94328331290cbd81edab450664d42da7b64c191416c9346cd5d28c84f76035 +rmi ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0: Deleted: sha256:dd1bd006b01b2376c14e6d53a087269594004c64f8e841c350ec83af959359a0 +rmi lscr.io/linuxserver/bookstack:26.09.1: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943 +rmi mariadb:12.3: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8 +rmi postgis/postgis:16-3.5-alpine: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.3G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-02.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-02.txt new file mode 100644 index 00000000..08fa3ec0 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-02.txt @@ -0,0 +1,42 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-02 claper code-server crafty-controller dawarich docmost emby ghost +# batch 02 started 2026-10-02T12:06:51Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +claper UNDETERMINED 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: +code-server CLEAN +crafty-controller UNDETERMINED crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it; craft +dawarich UNDETERMINED dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it +docmost UNDETERMINED 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 +emby CLEAN +ghost CLEAN + +UNDETERMINED — NOT a pass. The question was not answered for these: + claper: 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 cr + crafty-controller: 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 EM + dawarich: dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it + docmost: 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 + +3 clean · 0 broken · 4 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 4 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 02 finished 2026-10-02T12:27:29Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi docmost/docmost:0.96.0: Deleted: sha256:411a86676185cb54d695a805b238194a64e9b77e0c723f3802fbb87d333ea0b3 +rmi emby/embyserver:4.11.0.4: Deleted: sha256:0f8918d0fe4f272ce8acece89916a9ba0b240584d3c1dd1943f343f69b0d0ffb +rmi freikin/dawarich:1.15.3: Deleted: sha256:3edb2192497af6e965b9b7e57dc6dbdce1f3ea721d14a98110419d4ded523298 +rmi ghcr.io/claperco/claper:2.5: Deleted: sha256:538812a4b9bd45adaac2b5e5b967daa6999aa44eb110aa32ae7c69702b906475 +rmi ghost:6.67.0-alpine: Deleted: sha256:e63b02c2b5c761df2cb95e657d744f27d95da4e051235a13c80b88cd68eab188 +rmi lscr.io/linuxserver/code-server:4.129.0: Deleted: sha256:c3cbb340bc39ecbf4b83ee7f6a316ec0fac5da776f4c1929f5fd432d575ff9c7 +rmi postgis/postgis:17-3.5-alpine: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi postgres:17-alpine: Deleted: sha256:e1620fab5a27ab00df25b18312374e46098fd95842107fa7e3c7f52547b4f121 +rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +rmi redis:7-alpine: Untagged: redis:7-alpine +rmi redis:7.4-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839 +rmi registry.gitlab.com/crafty-controller/crafty-4:4.11.0: Deleted: sha256:65e5d715ea720349e6475f91651a0956279fc295a45fd73aa04f1cec046281a1 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.3G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-03.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-03.txt new file mode 100644 index 00000000..c3d161a1 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-03.txt @@ -0,0 +1,35 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-03 gitea glance gokapi grafana gramps-web grimmory home-assistant +# batch 03 started 2026-10-02T12:27:43Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +gitea CLEAN +glance CLEAN +gokapi CLEAN +grafana CLEAN +gramps-web UNDETERMINED 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: decl +grimmory CLEAN grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign when a sibling container holds the state, w +home-assistant CLEAN + +UNDETERMINED — NOT a pass. The question was not answered for these: + gramps-web: 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 exerc + +6 clean · 0 broken · 1 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 03 finished 2026-10-02T12:46:32Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi f0rc3/gokapi:v1.9.6: Deleted: sha256:ba79b2c0127890636a791eb3ec3993cce08a50cc01fcb1513f0e8fbae41977af +rmi ghcr.io/gramps-project/grampsweb:v25.6.0: Deleted: sha256:2f7436e79a0bc6cdec6536da54ae6a5863c8e3b5f145e0f8ac0b96306baddbc9 +rmi ghcr.io/grimmory-tools/grimmory:v3.5.0: Deleted: sha256:215c7bd754081cf750e00fb94bb99fc5dac69903300f6ec07b86c9f265b3b915 +rmi ghcr.io/home-assistant/home-assistant:2026.9.4: Deleted: sha256:77e69aa15022f2dab499f24031ca2a8c68aa8891d848518ef4817058878a1d42 +rmi gitea/gitea:1.27.3: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi glanceapp/glance:v0.8.5: Deleted: sha256:0854555d70acaa318b38ee50bc667cb51ff6bf0757624624c7ff3b6fe17459a0 +rmi grafana/grafana:13.2.3: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +rmi mariadb:11.4: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.3G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-04.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-04.txt new file mode 100644 index 00000000..1f2d1bf9 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-04.txt @@ -0,0 +1,40 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-04 homebox homepage immich jellyfin karakeep kimai komga +# batch 04 started 2026-10-02T12:46:42Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +homebox CLEAN +homepage CLEAN +immich UNDETERMINED immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it; immich-m +jellyfin CLEAN +karakeep CLEAN +kimai CLEAN +komga CLEAN + +UNDETERMINED — NOT a pass. The question was not answered for these: + immich: 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 e + +6 clean · 0 broken · 1 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 04 finished 2026-10-02T13:02:31Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi getmeili/meilisearch:v1.41.0: Deleted: sha256:cce92674e98722970ab3fdce76a2566f54db535beeb24f0b4397f070ab5f6987 +rmi ghcr.io/gethomepage/homepage:v1.13.2: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1 +rmi ghcr.io/immich-app/immich-machine-learning:v3.2.4: Deleted: sha256:8db1b4d0e54f2fbc2baf1563e57d88a8e72d3c79a72a38b9e4dee36e84f1d8ce +rmi ghcr.io/immich-app/immich-server:v3.2.4: Deleted: sha256:411a86676185cb54d695a805b238194a64e9b77e0c723f3802fbb87d333ea0b3 +rmi ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0: Deleted: sha256:eb5f13bce9936c760b9fa73aeb1b608787daa36106cc888104132e353ed37252 +rmi ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1: Deleted: sha256:f2ec4de84f559f5c7be4233b589cdbdbb5507807e05621b77320edd55a1f2a0f +rmi ghcr.io/karakeep-app/karakeep:0.33.2: Deleted: sha256:81f823b9617547261c907396f63f770deaa554748ff739bedfa650e3bb74595a +rmi ghcr.io/sysadminsmedia/homebox:0.26.2: Deleted: sha256:bc5a3fe779ad9e705b6c5d7fb7a482d1bf8b633e4e3e72152ea3f8953460cda9 +rmi gotson/komga:1.28.0: Deleted: sha256:485d137fd3bfb545f1b417ea708e2281594be7a334e8a85ab75c5332db6089e9 +rmi jellyfin/jellyfin:10.11.11: Deleted: sha256:219a998c60509502b47b97f1158067d5dd62640d2d689560d32cfd5594f6bc40 +rmi kimai/kimai2:2.67.0: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8 +rmi mariadb:11.8: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8 +rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.3G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-05.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-05.txt new file mode 100644 index 00000000..9a3d6ca1 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-05.txt @@ -0,0 +1,33 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-05 mealie metube n8n navidrome nextcloud onlyoffice opengist +# batch 05 started 2026-10-02T13:02:39Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +mealie CLEAN +metube CLEAN +n8n CLEAN +navidrome CLEAN +nextcloud CLEAN +onlyoffice CLEAN onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store (path sug +opengist CLEAN + +7 clean · 0 broken · 0 undetermined (of 7 in scope) +volume-persistence gate OK +check-volume-persistence exit code = 0 +# batch 05 finished 2026-10-02T13:19:32Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi deluan/navidrome:0.64.2: Deleted: sha256:f0dd00851e339a40ac77d88b5174441169a5052dd18fa399fc174dd710662990 +rmi ghcr.io/alexta69/metube:2026.09.29: Deleted: sha256:7eb8357547f12f331ee069361f87420db6b522e3c35e94830c50eb0c133d8d5e +rmi ghcr.io/mealie-recipes/mealie:v3.28.0: Deleted: sha256:acc27b89f4a07b2a31f349e11d761c366d19e64b7b8e08498e47a537880da6a3 +rmi ghcr.io/thomiceli/opengist:1.15: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi mariadb:12.3: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8 +rmi n8nio/n8n:2.42.1: Deleted: sha256:87e8744ef8d6da508455c6acc8b02a0f64c95d91e833e26652d9d81f6f75d521 +rmi nextcloud:34.0.4-apache: Deleted: sha256:a6dc765193a52cbaede3c93a9ff48b9540948dd0774bbe7031fcb5847606f9ac +rmi onlyoffice/documentserver:9.4.0: Deleted: sha256:538812a4b9bd45adaac2b5e5b967daa6999aa44eb110aa32ae7c69702b906475 +rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.4G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-06.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-06.txt new file mode 100644 index 00000000..725a50af --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-06.txt @@ -0,0 +1,39 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-06 outline paperless-ngx papra plant-it plex privatebin radarr +# batch 06 started 2026-10-02T13:19:43Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +outline UNDETERMINED 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-r +paperless-ngx CLEAN +papra UNDETERMINED papra: not running (status=restarting exit=137 restarts=None) +plant-it UNDETERMINED no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resourc +plex UNDETERMINED plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it +privatebin CLEAN +radarr CLEAN radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['movies'] + +UNDETERMINED — NOT a pass. The question was not answered for these: + outline: 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 exe + papra: papra: not running (status=restarting exit=137 restarts=None) + plant-it: 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 acces + plex: plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it + +3 clean · 0 broken · 4 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 4 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 06 finished 2026-10-02T13:38:47Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi ghcr.io/paperless-ngx/paperless-ngx:2.20.15: Deleted: sha256:70a290c5e58b68f39496ab93a62f21b8b2ca0502e97905131838de1b39a37cbb +rmi ghcr.io/papra-hq/papra:26.6.2-rootless: Deleted: sha256:3edb2192497af6e965b9b7e57dc6dbdce1f3ea721d14a98110419d4ded523298 +rmi lscr.io/linuxserver/radarr:6.4.4: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943 +rmi outlinewiki/outline:1.10.1: Deleted: sha256:f4f8b983b714f130e2cff99176baa26352db6a55d3622e10ada40f2b4720a4eb +rmi plexinc/pms-docker:1.41.4.9463-630c9f557: Deleted: sha256:fffe76c64ef2dee2d80a8bb3ad13d65d596d04a45510b1956a976a69215dae92 +rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +rmi privatebin/pdo:2.0.6: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.4G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-07.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-07.txt new file mode 100644 index 00000000..e901cb09 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-07.txt @@ -0,0 +1,39 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-07 radicale rallly recipe-importer romm seerr sonarr sparkyfitness +# batch 07 started 2026-10-02T13:38:54Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +radicale CLEAN +rallly CLEAN +recipe-importer UNDETERMINED 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 ['/']. +romm CLEAN +seerr CLEAN +sonarr CLEAN sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv'] +sparkyfitness UNDETERMINED sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template + +UNDETERMINED — NOT a pass. The question was not answered for these: + recipe-importer: 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 vo + sparkyfitness: 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 volum + +5 clean · 0 broken · 2 undetermined (of 7 in scope) +INCOMPLETE — no broken template among those decided, but 2 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 07 finished 2026-10-02T13:55:18Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi codewithcj/sparkyfitness:v0.17.3: Deleted: sha256:256f393e029fa2063d8c93720da36a74a032bed3355a2bc3e313ad12f8bde9d1 +rmi codewithcj/sparkyfitness_server:v0.17.3: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi fallenbagel/jellyseerr:2.7.3: Deleted: sha256:418dccb7d85a63a6aa574439840f7a6fa6fd2321b3e2394568a317735e867d35 +rmi ghcr.io/kozea/radicale:3.8.1: Deleted: sha256:068f42d7c61f0f0e344fa35ad66e109e3d089007afcc39110f9f361a75eaca24 +rmi gitea.dooplex.hu/admin/recipe-importer:v0.9.11: Deleted: sha256:a257f20c716c7b5d0474b1b5998f4d1090b573d90b82f764b8f1f1faeb4b524f +rmi lscr.io/linuxserver/sonarr:4.0.20: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943 +rmi lukevella/rallly:4.15.3: Deleted: sha256:34467cc93912af891dfee8a3902adf9b4f355a9bca4eaa46f658d1181a21de0d +rmi mariadb:11.8: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8 +rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839 +rmi rommapp/romm:5.3.1: Deleted: sha256:575af51c6d53817070d5b9e4f03a5ea98bb687c097741ea228fc8db065db558b +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.4G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-08.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-08.txt new file mode 100644 index 00000000..91e3dc42 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-08.txt @@ -0,0 +1,47 @@ +# check-volume-persistence.py --all --evidence /root/sweep/ev-08 tandoor termix uptime-kuma vaultwarden vikunja wanderer wger wishlist zipline +# batch 08 started 2026-10-02T13:55:25Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in +# catalog-wt febf58c + uncommitted: +# M scripts/check-volume-persistence.py +# M scripts/test_check_volume_persistence.py +# check-volume-persistence.py sha256 ecc6a6945f8bcdf4 +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +tandoor UNDETERMINED tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it +termix CLEAN +uptime-kuma CLEAN +vaultwarden CLEAN +vikunja UNDETERMINED vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it +wanderer UNDETERMINED wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves +wger UNDETERMINED wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it +wishlist UNDETERMINED 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 UNDETERMINED zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; zipline: decla + +UNDETERMINED — NOT a pass. The question was not answered for these: + tandoor: tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it + vikunja: vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it + wanderer: 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 + wger: wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it + wishlist: 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: 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 exer + +3 clean · 0 broken · 6 undetermined (of 9 in scope) +INCOMPLETE — no broken template among those decided, but 6 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 +# batch 08 finished 2026-10-02T14:19:38Z +# leftover volgate containers: 0 +# --- cleanup (by name; no prune) --- +rmi flomp/wanderer-db:v0.20.0: Deleted: sha256:fea850b45905deb562386275d9f75fafd2087d6ef8bc189fa2cf2ec0cfc4dd71 +rmi flomp/wanderer-web:v0.20.0: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c +rmi getmeili/meilisearch:v1.36.0: Deleted: sha256:cce92674e98722970ab3fdce76a2566f54db535beeb24f0b4397f070ab5f6987 +rmi ghcr.io/cmintey/wishlist:v0.67.1: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8 +rmi ghcr.io/diced/zipline:4.8.0: Deleted: sha256:e63b02c2b5c761df2cb95e657d744f27d95da4e051235a13c80b88cd68eab188 +rmi ghcr.io/lukegus/termix:2.8.0: Deleted: sha256:a6dc765193a52cbaede3c93a9ff48b9540948dd0774bbe7031fcb5847606f9ac +rmi ghcr.io/tandoorrecipes/recipes:2.6.15: Deleted: sha256:31ad4a471c6852bfec14d757cc75a566c82a9769f12c3918cf6bf52cc0eeb3d0 +rmi louislam/uptime-kuma:2.5.5: Deleted: sha256:b2008ac19409fa6fee4b52596271400498aebd0be04dffac5351bd1dcf230f2a +rmi postgres:16-alpine: Deleted: sha256:32034eca5c342e5e224fa97bff71b9c8d6edb64d4043660558dfed1b247cce29 +rmi postgres:17-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711 +rmi vaultwarden/server:1.36.0-alpine: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1 +rmi vikunja/vikunja:2.6.0: Deleted: sha256:3c889b99e3ccd594794c0c3738db5c8150535d0894b764667dfa041bb51c8dfe +rmi wger/server:2.7: Deleted: sha256:b9a65b3c65ab22d490085bd0bf5490e2409da8748b406870f2463bdc41cd6795 +# images now: 1; volgate volumes now: 0 +/dev/loop2 196G 1.4G 185G 1% / diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt new file mode 100644 index 00000000..88679233 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt @@ -0,0 +1,11 @@ +# papra re-run alone (exit 137 in batch 06) 2026-10-02T14:20:34Z +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +papra UNDETERMINED papra: not running (status=restarting exit=137 restarts=None) + +UNDETERMINED — NOT a pass. The question was not answered for these: + papra: papra: not running (status=restarting exit=137 restarts=None) + +0 clean · 0 broken · 1 undetermined (of 1 in scope) +INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health. +check-volume-persistence exit code = 2 diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/bench-create.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/bench-create.txt new file mode 100644 index 00000000..4ccf04a3 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/bench-create.txt @@ -0,0 +1,55 @@ ++ date -u +Fri Oct 2 11:45:45 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19503216 18863044 48.21% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 77370516 855982572 7.87% ++ pct config 9401 ++ head -1 +Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist ++ pveam list local ++ grep debian-13 +local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst 123.93MB ++ pct create 9401 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --hostname volgate-sweep --cores 6 --memory 12288 --swap 0 --rootfs nvme-scratch:200 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --features nesting=1,keyctl=1 --onboot 0 ++ tail -1 +done: SHA256:Z6wLOMGtPMNgxH7pwJ0jpFTf4llG+Hqwh1t1WMq0U2A root@volgate-sweep ++ pct config 9401 +arch: amd64 +cores: 6 +features: nesting=1,keyctl=1 +hostname: volgate-sweep +memory: 12288 +net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:D8:CF:F8,ip=dhcp,type=veth +onboot: 0 +ostype: debian +rootfs: nvme-scratch:9401/vm-9401-disk-0.raw,size=200G +swap: 0 +unprivileged: 1 ++ pct start 9401 ++ sleep 15 ++ pct exec 9401 -- bash -c 'dpkg --print-architecture; hostname; ip -4 -o addr show eth0 | awk "{print \$4}"; apt-get update -qq >/dev/null 2>&1; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker.io docker-compose python3 python3-yaml curl postgresql-client sqlite3 git >/dev/null 2>&1; docker --version; docker compose version; python3 --version; git --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3; df -h /' +amd64 +volgate-sweep +192.168.0.123/24 +Docker version 26.1.5+dfsg1, build a72d7cd +Docker Compose version 2.26.1-4 +Python 3.13.5 +git version 2.47.3 +traefik-public-net + total used free shared buff/cache available +Mem: 12288 58 10530 0 1699 12229 +Swap: 0 0 0 +Filesystem Size Used Avail Use% Mounted on +/dev/loop2 196G 1.3G 185G 1% / ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19503308 18862952 48.21% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 79803936 853549152 8.12% diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/actualbudget/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/actualbudget/probe.json new file mode 100644 index 00000000..b87fb809 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/actualbudget/probe.json @@ -0,0 +1,58 @@ +{ + "probe": { + "app": "actualbudget", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "actualbudget/actual-server:26.9.0", + "mounts": [ + { + "class": "named-declared", + "files": 2, + "name": "volgate-actualbudget_actualbudget_data", + "sample": [ + ".migrate", + "server-files/account.sqlite" + ], + "source": "/var/lib/docker/volumes/volgate-actualbudget_actualbudget_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "actualbudget", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "actualbudget_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:5006/ -> 200" + ], + "fixture": null, + "ports": [ + 5006 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/adventurelog/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/adventurelog/probe.json new file mode 100644 index 00000000..b42d51c5 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/adventurelog/probe.json @@ -0,0 +1,251 @@ +{ + "probe": { + "app": "adventurelog", + "containers": [ + { + "diff_added": 12, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/", + "files": [ + "etc", + "code", + "var", + "run" + ] + }, + { + "added": [ + "adventurelog" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc", + "files": [ + "adventurelog" + ] + }, + { + "added": [ + "cron.env" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/adventurelog", + "files": [ + "cron.env" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "lib" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/lib", + "files": [ + "nginx" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 18, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/seanmorley15/adventurelog-backend:v0.13.0", + "mounts": [ + { + "class": "named-declared", + "files": 251, + "name": "volgate-adventurelog_adventurelog_media", + "sample": [ + "countries+regions+states-v3.1.json", + "flags/gh.png", + "flags/me.png", + "flags/cf.png", + "flags/tn.png", + "flags/mm.png", + "flags/ao.png", + "flags/im.png", + "flags/af.png", + "flags/na.png", + "flags/sm.png", + "flags/bg.png", + "flags/gi.png", + "flags/is.png", + "flags/dm.png", + "flags/eg.png", + "flags/tm.png", + "flags/mq.png", + "flags/pw.png", + "flags/ge.png", + "flags/ms.png", + "flags/yt.png", + "flags/cl.png", + "flags/ga.png", + "flags/zm.png", + "flags/az.png", + "flags/gd.png", + "flags/cd.png", + "flags/so.png", + "flags/ie.png", + "flags/ht.png", + "flags/sh.png", + "flags/ee.png", + "flags/al.png", + "flags/ad.png", + "flags/uz.png", + "flags/eh.png", + "flags/bq.png", + "flags/la.png", + "flags/ki.png" + ], + "source": "/var/lib/docker/volumes/volgate-adventurelog_adventurelog_media/_data", + "target": "/code/media", + "writable_by_app": "yes" + } + ], + "name": "adventurelog", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 65532, + "health": "healthy", + "image": "ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0", + "mounts": [], + "name": "adventurelog-frontend", + "restarts": null, + "status": "running", + "uid": 65532 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgis/postgis:16-3.5-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 2313, + "name": "volgate-adventurelog_adventurelog_postgres_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/2612", + "base/5/1418", + "base/5/6117", + "base/5/2655", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm", + "base/5/6106", + "base/5/3433", + "base/5/4150", + "base/5/3606" + ], + "source": "/var/lib/docker/volumes/volgate-adventurelog_adventurelog_postgres_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "adventurelog-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "adventurelog_media", + "adventurelog_postgres_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 200", + "172.21.0.3:3000/ -> 200" + ], + "fixture": null, + "ports": [ + 80, + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/audiobookshelf/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/audiobookshelf/probe.json new file mode 100644 index 00000000..c389a9a9 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/audiobookshelf/probe.json @@ -0,0 +1,120 @@ +{ + "probe": { + "app": "audiobookshelf", + "containers": [ + { + "diff_added": 4, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "podcasts", + "audiobooks", + "metadata", + "config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "podcasts", + "audiobooks", + "metadata", + "config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/advplyr/audiobookshelf:2.37.1", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/audiobooks", + "target": "/audiobooks", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/podcasts", + "target": "/podcasts", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 16, + "name": "volgate-audiobookshelf_audiobookshelf_config", + "sample": [ + "absdatabase.sqlite", + "migrations/v2.19.1-copy-title-to-library-items.js", + "migrations/v2.17.3-fk-constraints.js", + "migrations/v2.15.2-index-creation.js", + "migrations/v2.17.5-remove-host-from-feed-urls.js", + "migrations/v2.20.0-improve-author-sort-queries.js", + "migrations/v2.17.7-add-indices.js", + "migrations/v2.15.0-series-column-unique.js", + "migrations/v2.17.0-uuid-replacement.js", + "migrations/v2.17.4-use-subfolder-for-oidc-redirect-uris.js", + "migrations/v2.26.0-create-auth-tables.js", + "migrations/v2.33.0-add-discover-query-indexes.js", + "migrations/v2.15.1-reindex-nocase.js", + "migrations/v2.17.6-share-add-isdownloadable.js", + "migrations/v2.35.0-add-last-refresh-token.js", + "migrations/v2.19.4-improve-podcast-queries.js" + ], + "source": "/var/lib/docker/volumes/volgate-audiobookshelf_audiobookshelf_config/_data", + "target": "/config", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-audiobookshelf_audiobookshelf_metadata", + "sample": [ + "logs/daily/2026-10-02.txt" + ], + "source": "/var/lib/docker/volumes/volgate-audiobookshelf_audiobookshelf_metadata/_data", + "target": "/metadata", + "writable_by_app": "yes" + } + ], + "name": "audiobookshelf", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "audiobookshelf_config", + "audiobookshelf_metadata" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 200" + ], + "fixture": null, + "ports": [ + 80 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bentopdf/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bentopdf/probe.json new file mode 100644 index 00000000..f7c22d75 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bentopdf/probe.json @@ -0,0 +1,88 @@ +{ + "probe": { + "app": "bentopdf", + "containers": [ + { + "diff_added": 6, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "var", + "etc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc", + "files": [ + "nginx" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "cache" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 14, + "diff_unresolved": [], + "exit": 0, + "gid": 101, + "health": "healthy", + "image": "ghcr.io/alam00000/bentopdf:v2.8.6", + "mounts": [], + "name": "bentopdf", + "restarts": null, + "status": "running", + "uid": 101 + } + ], + "declared_volumes": [], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8080/ -> 200", + "172.18.0.2:8080/ -> 200", + "172.18.0.2:8080/login -> 404", + "172.18.0.2:8080/setup -> 404", + "172.18.0.2:8080/signup -> 404", + "172.18.0.2:8080/register -> 404", + "172.18.0.2:8080/install -> 404", + "172.18.0.2:8080/admin -> 404", + "172.18.0.2:8080/api/health -> 404", + "172.18.0.2:8080/health -> 404", + "172.18.0.2:8080/healthz -> 404", + "172.18.0.2:8080/status -> 404", + "172.18.0.2:8080/web -> 404", + "172.18.0.2:8080/index.php -> 404", + "172.18.0.2:8080/dashboard -> 404" + ], + "fixture": null, + "ports": [ + 8080 + ] + }, + "reasons": [ + "nothing was written to any mount and nothing data-classified in any writable layer \u2014 the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bookstack/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bookstack/probe.json new file mode 100644 index 00000000..1e4d0acc --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/bookstack/probe.json @@ -0,0 +1,254 @@ +{ + "probe": { + "app": "bookstack", + "containers": [ + { + "diff_added": 248, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/", + "files": [ + "defaults", + "etc", + "usr", + "app", + "var", + "run" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/etc", + "files": [ + "crontabs", + "passwd-", + "logrotate.d", + "group-", + "s6-overlay" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/crontabs", + "files": [ + "root" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay", + "files": [ + "s6-rc.d" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d", + "files": [ + "init-adduser" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d/init-adduser", + "files": [ + "branding" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "lib" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/var", + "files": [ + "lib", + "log" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/lib", + "files": [ + "nginx" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 278, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "lscr.io/linuxserver/bookstack:26.09.1", + "mounts": [ + { + "class": "named-declared", + "files": 22, + "name": "volgate-bookstack_bookstack_config", + "sample": [ + ".migrations", + "keys/cert.crt", + "keys/cert.key", + "php/www2.conf", + "php/php-local.ini", + "log/php/error.log", + "log/nginx/access.log", + "log/nginx/error.log", + "nginx/worker_processes.conf", + "nginx/nginx.conf", + "nginx/nginx.conf.sample", + "nginx/resolver.conf", + "nginx/ssl.conf", + "nginx/ssl.conf.sample", + "nginx/site-confs/default.conf", + "nginx/site-confs/default.conf.sample", + "www/.env", + "www/index.html", + "www/framework/sessions/SLuOJjkQuFQsL6gg9CusAB8UQhSbJdCDF1aKaU1T", + "www/framework/sessions/uiYBj6sj13SEzi2Q35iTFw96jgGfPta08t7ywIhC", + "www/framework/sessions/FpHKVCsJDznfkVyK9dbd6S41422rvGKTxZshqdT6", + "www/framework/sessions/7TrTRDmQEdVh7D017tnhGndTETROnvKEa15IyHPJ" + ], + "source": "/var/lib/docker/volumes/volgate-bookstack_bookstack_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "bookstack", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "mariadb:12.3", + "mounts": [ + { + "class": "named-declared", + "files": 291, + "name": "volgate-bookstack_bookstack_db_data", + "sample": [ + "tc.log", + ".my-healthcheck.cnf", + "aria_log.00000001", + "aria_log_control", + "undo001", + "ibtmp1", + "ib_buffer_pool", + "ibdata1", + "undo002", + "multi-master.info", + "mariadb_upgrade_info", + "ddl_recovery.log", + "ib_logfile0", + "undo003", + "bookstack/role_user.frm", + "bookstack/failed_jobs.frm", + "bookstack/activities.ibd", + "bookstack/favourites.frm", + "bookstack/deletions.ibd", + "bookstack/joint_permissions.ibd", + "bookstack/api_tokens.frm", + "bookstack/cache.ibd", + "bookstack/tags.frm", + "bookstack/webhook_tracked_events.frm", + "bookstack/social_accounts.frm", + "bookstack/roles.ibd", + "bookstack/sessions.frm", + "bookstack/permission_role.frm", + "bookstack/user_invites.ibd", + "bookstack/api_tokens.ibd", + "bookstack/images.ibd", + "bookstack/users.ibd", + "bookstack/migrations.ibd", + "bookstack/permission_role.ibd", + "bookstack/references.ibd", + "bookstack/role_permissions.ibd", + "bookstack/mfa_values.ibd", + "bookstack/webhook_tracked_events.ibd", + "bookstack/entity_container_data.ibd", + "bookstack/entity_permissions.frm" + ], + "source": "/var/lib/docker/volumes/volgate-bookstack_bookstack_db_data/_data", + "target": "/var/lib/mysql", + "writable_by_app": "yes" + } + ], + "name": "bookstack-db", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "bookstack_config", + "bookstack_db_data" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "APP_KEY", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 302", + "172.22.0.3:80/ -> 302" + ], + "fixture": null, + "ports": [ + 80 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calcom/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calcom/probe.json new file mode 100644 index 00000000..7252098a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calcom/probe.json @@ -0,0 +1,1056 @@ +{ + "probe": { + "app": "calcom", + "containers": [ + { + "diff_added": 69, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "calcom", + "root" + ] + }, + { + "added": [ + ".turbo" + ], + "changed_count": 2, + "db_signature": false, + "dir": "/calcom", + "files": [ + ".turbo" + ] + }, + { + "added": [ + "cache" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/calcom/.turbo", + "files": [ + "cache" + ] + }, + { + "added": [ + "install-state.gz" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/calcom/.yarn", + "files": [ + "install-state.gz" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps", + "files": [ + "web" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/calcom/apps/web", + "files": [ + "public", + ".next" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/calcom/apps/web/.next", + "files": [ + "standalone", + "static", + "required-server-files.json", + "routes-manifest.json", + "required-server-files.js", + "server" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server", + "files": [ + "chunks", + "app", + "edge" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/app", + "files": [ + "icons.rsc", + "icons.html", + "icons.segments" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/app/icons.segments", + "files": [ + "icons", + "_full.segment.rsc", + "_index.segment.rsc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/app/icons.segments/icons", + "files": [ + "__PAGE__.segment.rsc" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/chunks", + "files": [ + "[root-of-the-server]__f12ec124._.js.map", + "[root-of-the-server]__50a48f36._.js.map", + "packages_i18n_locales_ar_common_json_1e5af418._.js", + "packages_i18n_locales_sv_common_json_aa290c64._.js", + "packages_i18n_locales_km_common_json_8a510448._.js.map", + "[root-of-the-server]__ff8d28f4._.js", + "packages_4f6339fb._.js", + "_e2ba1e62._.js.map", + "packages_i18n_locales_fi_common_json_8b3bce10._.js.map", + "packages_i18n_locales_ro_common_json_05bd7f5b._.js", + "[root-of-the-server]__72042636._.js", + "packages_i18n_locales_hu_common_json_30ecdbf5._.js.map", + "packages_434872fd._.js", + "packages_i18n_locales_pt-BR_common_json_af0d4a85._.js", + "packages_i18n_locales_ja_common_json_9618999c._.js.map", + "packages_i18n_locales_sv_common_json_aa290c64._.js.map", + "packages_i18n_locales_pt-BR_common_json_af0d4a85._.js.map", + "[root-of-the-server]__b9a70756._.js", + "packages_i18n_locales_uk_common_json_296a1d00._.js", + "[root-of-the-server]__5fbc5088._.js", + "packages_i18n_locales_bg_common_json_9a19fba6._.js.map", + "[root-of-the-server]__f12ec124._.js", + "packages_i18n_locales_zh-TW_common_json_30386da2._.js", + "node_modules_b4c7bbf3._.js.map", + "packages_i18n_locales_es_common_json_29e328fd._.js.map", + "packages_i18n_locales_ru_common_json_72f89954._.js.map", + "packages_i18n_locales_ca_common_json_47b26909._.js", + "packages_i18n_locales_zh-CN_common_json_63b9860a._.js", + "packages_i18n_locales_bn_common_json_38f4a12e._.js", + "[root-of-the-server]__3f3877b3._.js", + "_4a7f8ec5._.js", + "packages_c7792ae5._.js", + "packages_i18n_locales_pt_common_json_53d5c317._.js", + "_4a7f8ec5._.js.map", + "[root-of-the-server]__744caedd._.js.map", + "packages_i18n_locales_fr_common_json_77853058._.js", + "[root-of-the-server]__b9a70756._.js.map", + "[root-of-the-server]__c77cccb7._.js", + "packages_i18n_locales_ca_common_json_47b26909._.js.map", + "packages_i18n_locales_it_common_json_f0e11e3c._.js" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/chunks/ssr", + "files": [ + "packages_i18n_locales_ar_common_json_1e5af418._.js", + "_57259a91._.js.map", + "packages_i18n_locales_pl_common_json_8c1dd4d8._.js", + "packages_i18n_locales_ca_common_json_47b26909._.js.map", + "_57259a91._.js", + "packages_i18n_locales_pt-BR_common_json_af0d4a85._.js", + "[root-of-the-server]__13c73175._.js", + "packages_i18n_locales_es_common_json_29e328fd._.js.map", + "packages_i18n_locales_fi_common_json_8b3bce10._.js", + "[root-of-the-server]__9af231d6._.js", + "packages_i18n_locales_fr_common_json_77853058._.js.map", + "_f52de682._.js", + "packages_e3130aa4._.js", + "packages_i18n_locales_ro_common_json_05bd7f5b._.js", + "packages_i18n_locales_fr_common_json_77853058._.js", + "[root-of-the-server]__6850d047._.js", + "[root-of-the-server]__fe82c76d._.js.map", + "packages_i18n_locales_eu_common_json_111e41e9._.js.map", + "packages_i18n_locales_da_common_json_0e2d691b._.js.map", + "_964cc1b5._.js", + "packages_5ed70ad0._.js", + "_02808c2d._.js", + "packages_i18n_locales_ca_common_json_47b26909._.js", + "_caa71245._.js.map", + "packages_i18n_locales_pt-BR_common_json_af0d4a85._.js.map", + "packages_i18n_locales_en_common_json_535840c5._.js.map", + "packages_i18n_locales_hu_common_json_30ecdbf5._.js", + "packages_cfd58bda._.js.map", + "node_modules_c8de397d._.js", + "packages_i18n_locales_ko_common_json_599c8810._.js", + "packages_i18n_locales_vi_common_json_1b83912d._.js.map", + "packages_i18n_locales_sv_common_json_aa290c64._.js", + "packages_i18n_locales_et_common_json_e1fa698b._.js.map", + "packages_i18n_locales_en_common_json_535840c5._.js", + "packages_i18n_locales_no_common_json_636c999e._.js", + "packages_i18n_locales_da_common_json_0e2d691b._.js", + "packages_i18n_locales_az_common_json_3a012cbd._.js", + "[root-of-the-server]__fe82c76d._.js", + "packages_i18n_locales_ja_common_json_9618999c._.js.map", + "packages_i18n_locales_uk_common_json_296a1d00._.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/edge", + "files": [ + "chunks" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/calcom/apps/web/.next/server/edge/chunks", + "files": [ + "node_modules_cafe7152._.js", + "node_modules_cafe7152._.js.map" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone", + "files": [ + "apps", + "packages" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps", + "files": [ + "web" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web", + "files": [ + "server.js", + ".next", + "package.json" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next", + "files": [ + "routes-manifest.json", + "server", + "required-server-files.js", + "required-server-files.json" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server", + "files": [ + "app", + "chunks", + "edge" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/app", + "files": [ + "icons.segments", + "icons.html", + "icons.rsc" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/app/icons.segments", + "files": [ + "_full.segment.rsc", + "_index.segment.rsc", + "icons" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/app/icons.segments/icons", + "files": [ + "__PAGE__.segment.rsc" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/chunks", + "files": [ + "packages_i18n_locales_it_common_json_f0e11e3c._.js", + "packages_8954b52d._.js", + "packages_i18n_locales_hu_common_json_30ecdbf5._.js", + "packages_i18n_locales_uk_common_json_296a1d00._.js", + "packages_i18n_locales_tr_common_json_eb2695e6._.js", + "packages_c7792ae5._.js", + "packages_i18n_locales_zh-CN_common_json_63b9860a._.js", + "packages_i18n_locales_ro_common_json_05bd7f5b._.js", + "[root-of-the-server]__f12ec124._.js", + "packages_i18n_locales_ar_common_json_1e5af418._.js", + "packages_i18n_locales_de_common_json_3e748837._.js", + "packages_i18n_locales_pl_common_json_8c1dd4d8._.js", + "packages_i18n_locales_et_common_json_e1fa698b._.js", + "ssr", + "[root-of-the-server]__3f3877b3._.js", + "[root-of-the-server]__5e7824d2._.js", + "_e2ba1e62._.js", + "packages_i18n_locales_bn_common_json_38f4a12e._.js", + "packages_i18n_locales_he_common_json_31242d7f._.js", + "packages_i18n_locales_vi_common_json_1b83912d._.js", + "packages_i18n_locales_pt-BR_common_json_af0d4a85._.js", + "packages_ee60edfc._.js", + "packages_i18n_locales_fi_common_json_8b3bce10._.js", + "packages_i18n_locales_km_common_json_8a510448._.js", + "[root-of-the-server]__8c65fd4d._.js", + "[root-of-the-server]__c77cccb7._.js", + "packages_i18n_locales_es_common_json_29e328fd._.js", + "[root-of-the-server]__1111b53d._.js", + "packages_i18n_locales_el_common_json_3e4846a8._.js", + "packages_i18n_locales_cs_common_json_d39b1fcc._.js", + "packages_i18n_locales_fr_common_json_77853058._.js", + "packages_i18n_locales_ru_common_json_72f89954._.js", + "packages_i18n_locales_en_common_json_535840c5._.js", + "packages_i18n_locales_az_common_json_3a012cbd._.js", + "packages_i18n_locales_ja_common_json_9618999c._.js", + "[root-of-the-server]__ff8d28f4._.js", + "[root-of-the-server]__893775cf._.js", + "packages_i18n_locales_no_common_json_636c999e._.js", + "[root-of-the-server]__eb9d1662._.js", + "packages_i18n_locales_eu_common_json_111e41e9._.js" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/chunks/ssr", + "files": [ + "packages_i18n_locales_pl_common_json_8c1dd4d8._.js", + "packages_i18n_locales_it_common_json_f0e11e3c._.js", + "[root-of-the-server]__121b216a._.js", + "packages_i18n_locales_az_common_json_3a012cbd._.js", + "packages_i18n_locales_ar_common_json_1e5af418._.js", + "_888ddb11._.js", + "packages_i18n_locales_nl_common_json_b6616134._.js", + "_f52de682._.js", + "node_modules_c8de397d._.js", + "packages_i18n_locales_he_common_json_31242d7f._.js", + "packages_i18n_locales_zh-TW_common_json_30386da2._.js", + "[root-of-the-server]__9af231d6._.js", + "packages_cfd58bda._.js", + "_a49e8e25._.js", + "packages_i18n_locales_et_common_json_e1fa698b._.js", + "packages_i18n_locales_pt_common_json_53d5c317._.js", + "packages_e3130aa4._.js", + "_26fe081f._.js", + "packages_i18n_locales_fr_common_json_77853058._.js", + "_caa71245._.js", + "packages_i18n_locales_de_common_json_3e748837._.js", + "packages_i18n_locales_tr_common_json_eb2695e6._.js", + "packages_i18n_locales_ru_common_json_72f89954._.js", + "packages_i18n_locales_km_common_json_8a510448._.js", + "packages_i18n_locales_es_common_json_29e328fd._.js", + "packages_i18n_locales_sv_common_json_aa290c64._.js", + "packages_i18n_locales_ko_common_json_599c8810._.js", + "packages_i18n_locales_sk-SK_common_json_d10ea8ba._.js", + "packages_i18n_locales_hu_common_json_30ecdbf5._.js", + "packages_8a694f80._.js", + "[root-of-the-server]__fe82c76d._.js", + "packages_i18n_locales_bn_common_json_38f4a12e._.js", + "packages_i18n_locales_da_common_json_0e2d691b._.js", + "packages_i18n_locales_uk_common_json_296a1d00._.js", + "packages_i18n_locales_no_common_json_636c999e._.js", + "packages_i18n_locales_ca_common_json_47b26909._.js", + "packages_i18n_locales_ja_common_json_9618999c._.js", + "apps_web_components_apps_alby_Setup_tsx_ac56b8ae._.js", + "packages_i18n_locales_cs_common_json_d39b1fcc._.js", + "_964cc1b5._.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/edge", + "files": [ + "chunks" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/apps/web/.next/server/edge/chunks", + "files": [ + "node_modules_cafe7152._.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages", + "files": [ + "i18n" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n", + "files": [ + "locales" + ] + }, + { + "added": [], + "changed_count": 37, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales", + "files": [ + "fi", + "fr", + "ja", + "ro", + "sk-SK", + "cs", + "et", + "hu", + "pt-BR", + "uk", + "ca", + "da", + "el", + "pl", + "vi", + "zh-TW", + "it", + "pt", + "sv", + "zh-CN", + "ko", + "de", + "km", + "eu", + "no", + "ru", + "bg", + "en", + "nl", + "az", + "bn", + "he", + "sr", + "tr", + "es-419", + "ar", + "es" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ar", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/az", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/bg", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/bn", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ca", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/cs", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/da", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/de", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/el", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/en", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/es", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/es-419", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/et", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/eu", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/fi", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/fr", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/he", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/hu", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/it", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ja", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/km", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ko", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/nl", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/no", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/pl", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/pt", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/pt-BR", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ro", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/ru", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/sk-SK", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/sr", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/sv", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/tr", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/uk", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/vi", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/zh-CN", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/standalone/packages/i18n/locales/zh-TW", + "files": [ + "common.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/.next/static", + "files": [ + "chunks" + ] + }, + { + "added": [], + "changed_count": 29, + "db_signature": false, + "dir": "/calcom/apps/web/.next/static/chunks", + "files": [ + "06b0798a1ac20775.js", + "9b8259867b170934.js", + "af41f9b7b2d364b9.js", + "3ab04bdc710bad27.js", + "409e2c8a6915c62d.js", + "2f48dbd4f55dd478.js", + "3ae9469a39daf464.js.map", + "944d7159fa96470b.js.map", + "f0130b66b293b36e.js", + "25b31ecc9eb74275.js.map", + "8c127438fb495cd9.js", + "d518deaad10f8a7a.js", + "1eea3a80d000b6b0.js", + "aa5fb0f4618c9f5b.js", + "64907a4e3b230e3a.js.map", + "67e22104658d8536.js", + "a2312aa035e3e2c3.js", + "8a56a732245ecf33.js", + "412ccb430b31f67f.js.map", + "56c8dc4acf9d3fba.js", + "87004a6343d1f3eb.js.map", + "d469b3c2bf926f57.js", + "c3af3a5c67cf1a21.js", + "2fcfe704f78758f0.js.map", + "0c986acf81905e78.js", + "44242c73fbe049c7.js.map", + "a02b9d5147e11678.js.map", + "90b610e574fd1bbb.js", + "629857a336e1a88e.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/calcom/apps/web/public", + "files": [ + "embed" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/calcom/apps/web/public/embed", + "files": [ + "embed.js", + "preview.js" + ] + }, + { + "added": [ + ".config", + ".npm" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".config", + ".npm" + ] + }, + { + "added": [ + "turborepo" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config", + "files": [ + "turborepo" + ] + }, + { + "added": [ + "telemetry.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config/turborepo", + "files": [ + "telemetry.json" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 615, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "calcom/cal.com:v6.2.0", + "mounts": [], + "name": "calcom", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 2264, + "name": "volgate-calcom_calcom_postgres_data", + "sample": [ + "18/docker/pg_ident.conf", + "18/docker/pg_hba.conf", + "18/docker/postmaster.pid", + "18/docker/postgresql.conf", + "18/docker/PG_VERSION", + "18/docker/postgresql.auto.conf", + "18/docker/postmaster.opts", + "18/docker/base/5/2612", + "18/docker/base/5/1418", + "18/docker/base/5/6117", + "18/docker/base/5/13510_fsm", + "18/docker/base/5/2655", + "18/docker/base/5/3609", + "18/docker/base/5/2662", + "18/docker/base/5/2683", + "18/docker/base/5/2832", + "18/docker/base/5/2679", + "18/docker/base/5/2608_vm", + "18/docker/base/5/2673", + "18/docker/base/5/2690", + "18/docker/base/5/2336", + "18/docker/base/5/2754", + "18/docker/base/5/2701", + "18/docker/base/5/4168", + "18/docker/base/5/2650", + "18/docker/base/5/2839", + "18/docker/base/5/2688", + "18/docker/base/5/2840", + "18/docker/base/5/1247_fsm", + "18/docker/base/5/3997", + "18/docker/base/5/3456_vm", + "18/docker/base/5/2667", + "18/docker/base/5/2678", + "18/docker/base/5/2696", + "18/docker/base/5/3456", + "18/docker/base/5/2228", + "18/docker/base/5/1259_fsm", + "18/docker/base/5/6351", + "18/docker/base/5/6106", + "18/docker/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-calcom_calcom_postgres_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "calcom-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "calcom_postgres_data" + ], + "env_keys": [ + "CALENDSO_ENCRYPTION_KEY", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "NEXTAUTH_SECRET", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 307", + "172.23.0.3:3000/ -> 307" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calibre-web/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calibre-web/probe.json new file mode 100644 index 00000000..8da5b3ff --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/calibre-web/probe.json @@ -0,0 +1,3143 @@ +{ + "probe": { + "app": "calibre-web", + "containers": [ + { + "diff_added": 499, + "diff_benign_db_touches": [ + { + "db_signature": true, + "dir": "/app/calibre-web-automated/empty_library", + "files": [ + "app.db", + "metadata.db" + ], + "paths": [ + "/app/calibre-web-automated/empty_library/app.db", + "/app/calibre-web-automated/empty_library/metadata.db" + ], + "why": "byte-identical to the image copy \u2014 a chown/chmod sweep, not a write" + }, + { + "db_signature": true, + "dir": "/app/calibre-web-automated/empty_library", + "files": [ + "app.db", + "metadata.db" + ], + "paths": [ + "/app/calibre-web-automated/empty_library/app.db", + "/app/calibre-web-automated/empty_library/metadata.db" + ], + "why": "byte-identical to the image copy \u2014 a chown/chmod sweep, not a write" + } + ], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/", + "files": [ + "root", + "usr", + "app", + "defaults", + "run", + "etc" + ] + }, + { + "added": [ + "CWA_STABLE_RELEASE" + ], + "changed_count": 2, + "db_signature": false, + "dir": "/app", + "files": [ + "CWA_STABLE_RELEASE" + ] + }, + { + "added": [ + ".qt6_processed" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app/calibre", + "files": [ + ".qt6_processed" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/app/calibre-web-automated", + "files": [ + ".editorconfig", + "dirs.json", + "empty_library", + "kubernetes", + "metadata_change_logs", + "scripts", + "cps", + "cps.py", + "messages.pot", + "pyproject.toml", + "metadata_temp", + "optional-requirements.txt", + "requirements.txt", + "run_tests.sh", + "CONTRIBUTORS", + "babel.cfg", + "kobo_sync_utils.py", + "koreader" + ] + }, + { + "added": [ + "cache" + ], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps", + "files": [ + "cache" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/cw_advocate", + "files": [ + "adapters.py", + "api.py", + "connection.py", + "poolmanager.py", + "__init__.py", + "addrvalidator.py", + "connectionpool.py", + "exceptions.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/cw_login", + "files": [ + "__init__.py", + "config.py", + "login_manager.py", + "mixins.py", + "signals.py", + "utils.py" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/metadata_provider", + "files": [ + "amazonjp.py", + "comicvine.py", + "dnb.py", + "google.py", + "hardcover.py", + "ibdb.py", + "douban.py", + "kobo.py", + "litres.py", + "lubimyczytac.py", + "scholar.py", + "amazon.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/progress_syncing", + "files": [ + "README.md", + "__init__.py", + "checksums", + "models.py", + "protocols", + "settings.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/progress_syncing/checksums", + "files": [ + "koreader.py", + "manager.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/progress_syncing/protocols", + "files": [ + "__init__.py", + "kosync.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/services", + "files": [ + "Metadata.py", + "__init__.py", + "gmail.py", + "simpleldap.py", + "SyncToken.py", + "background_scheduler.py", + "goodreads_support.py", + "hardcover.py", + "worker.py" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static", + "files": [ + "locale", + "standard_fonts", + "user-profile-data", + "generic_cover.svg", + "icon.svg", + "img", + "js", + "cmaps", + "css", + "favicon.ico", + "icon.png", + "koplugin.zip" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/cmaps", + "files": [ + "UniJIS-UCS2-HW-H.bcmap", + "UniJIS2004-UTF16-V.bcmap", + "UniJIS2004-UTF32-V.bcmap", + "Adobe-GB1-UCS2.bcmap", + "EUC-H.bcmap", + "KSC-Johab-H.bcmap", + "KSCms-UHC-V.bcmap", + "UniJIS-UTF8-H.bcmap", + "UniKS-UTF16-V.bcmap", + "Adobe-CNS1-6.bcmap", + "Adobe-Japan1-6.bcmap", + "CNS1-H.bcmap", + "ETen-B5-V.bcmap", + "78-H.bcmap", + "Adobe-CNS1-3.bcmap", + "HKdla-B5-H.bcmap", + "78ms-RKSJ-V.bcmap", + "UniJIS-UTF8-V.bcmap", + "UniJISX02132004-UTF32-V.bcmap", + "Adobe-CNS1-UCS2.bcmap", + "Adobe-GB1-4.bcmap", + "Adobe-Korea1-0.bcmap", + "GBpc-EUC-H.bcmap", + "HKdlb-B5-H.bcmap", + "Roman.bcmap", + "UniCNS-UTF8-V.bcmap", + "UniKS-UTF32-H.bcmap", + "78-RKSJ-V.bcmap", + "ETen-B5-H.bcmap", + "KSC-EUC-V.bcmap", + "KSCms-UHC-H.bcmap", + "UniKS-UTF8-V.bcmap", + "78-EUC-H.bcmap", + "GBT-EUC-H.bcmap", + "H.bcmap", + "UniGB-UTF8-H.bcmap", + "UniJIS-UTF16-V.bcmap", + "UniJIS2004-UTF16-H.bcmap", + "Adobe-Japan1-4.bcmap", + "GB-V.bcmap" + ] + }, + { + "added": [], + "changed_count": 21, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css", + "files": [ + "listen.css", + "query_builder.css", + "text.css", + "layout-refresh.css", + "reader.css", + "style.css", + "login.css", + "main.css", + "caliBlur.css", + "duplicates-notifications.css", + "kthoom.css", + "query-builder.default.min.css", + "upload.css", + "images", + "img", + "libs", + "popup.css", + "caliBlur_override.css", + "cwa.css", + "epub_themes.css", + "fonts" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/fonts", + "files": [ + "glyphicons-halflings-regular.woff", + "glyphicons-halflings-regular.woff2", + "GrandHotel-Regular.ttf", + "fontello.svg", + "fontello.ttf", + "fontello.woff", + "glyphicons-halflings-regular.eot", + "glyphicons-halflings-regular.svg", + "fontello.eot", + "glyphicons-halflings-regular.ttf" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images", + "files": [ + "caliblur", + "icomoon", + "patterns", + "black-10.png", + "black-25.png", + "black-33.png" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/caliblur", + "files": [ + "blur-dark.png", + "blur-dark.webp", + "blur-light.webp", + "light-mode-light.webp", + "blur-light.png", + "blur-noise.png", + "blur-noise.webp", + "light-mode-dark.png", + "light-mode-dark.webp", + "light-mode-light.png" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon", + "files": [ + "entypo-25px-000000", + "entypo-25px-ffffff", + "free-25px-000000", + "free-25px-ffffff", + "credits.txt" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-000000", + "files": [ + "PNG", + "SVG" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-000000/PNG", + "files": [ + "first.png", + "last.png", + "list2.png", + "loop.png", + "pause.png", + "shuffle.png", + "list.png", + "music.png", + "play.png", + "volume.png", + "arrow.png", + "cart.png" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-000000/SVG", + "files": [ + "cart.svg", + "last.svg", + "list.svg", + "loop.svg", + "pause.svg", + "first.svg", + "list2.svg", + "music.svg", + "play.svg", + "shuffle.svg", + "volume.svg", + "arrow.svg" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-ffffff", + "files": [ + "PNG", + "SVG" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-ffffff/PNG", + "files": [ + "loop.png", + "music.png", + "pause.png", + "play.png", + "first.png", + "list.png", + "list2.png", + "shuffle.png", + "volume.png", + "arrow.png", + "cart.png", + "last.png" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/entypo-25px-ffffff/SVG", + "files": [ + "first.svg", + "last.svg", + "list.svg", + "list2.svg", + "music.svg", + "pause.svg", + "arrow.svg", + "cart.svg", + "loop.svg", + "play.svg", + "shuffle.svg", + "volume.svg" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-000000", + "files": [ + "PNG", + "SVG" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-000000/PNG", + "files": [ + "spinner.png" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-000000/SVG", + "files": [ + "spinner.svg" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-ffffff", + "files": [ + "PNG", + "SVG" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-ffffff/PNG", + "files": [ + "spinner.png" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/icomoon/free-25px-ffffff/SVG", + "files": [ + "spinner.svg" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/images/patterns", + "files": [ + "wood_pattern.png", + "wood_pattern_dark.png", + "woven.png", + "tasky_pattern.png", + "tweed.png", + "credits.txt", + "pinstriped_suit_vertical.png", + "pool_table.png", + "rubber_grip.png", + "textured_paper.png" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/img", + "files": [ + "clear.png", + "loading.gif" + ] + }, + { + "added": [], + "changed_count": 16, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/libs", + "files": [ + "bootstrap-editable.css", + "bootstrap-table.min.css", + "bootstrap.min.css.map", + "images", + "bootstrap-theme.min.css.map", + "bootstrap-wysihtml5-0.0.3.css", + "normalize.css", + "bar-ui.css", + "bootstrap-select.min.css", + "bootstrap.min.css", + "typeahead.css", + "viewer.css", + "Djvu_html5.css", + "bootstrap-datepicker3.css.map", + "bootstrap-datepicker3.min.css", + "bootstrap-theme.min.css" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/css/libs/images", + "files": [ + "loading-icon.gif", + "toolbarButton-presentationMode.svg", + "secondaryToolbarButton-lastPage.svg", + "toolbarButton-editorStamp.svg", + "toolbarButton-menuArrow.svg", + "toolbarButton-zoomOut.svg", + "altText_done.svg", + "annotation-pushpin.svg", + "secondaryToolbarButton-documentProperties.svg", + "toolbarButton-bookmark.svg", + "annotation-paragraph.svg", + "cursor-editorFreeHighlight.svg", + "cursor-editorFreeText.svg", + "gv-toolbarButton-download.svg", + "secondaryToolbarButton-scrollPage.svg", + "toolbarButton-currentOutlineItem.svg", + "toolbarButton-search.svg", + "annotation-insert.svg", + "annotation-note.svg", + "findbarButton-next.svg", + "findbarButton-previous.svg", + "secondaryToolbarButton-spreadOdd.svg", + "toolbarButton-secondaryToolbarToggle.svg", + "toolbarButton-viewLayers.svg", + "toolbarButton-zoomIn.svg", + "toolbarButton-pageDown.svg", + "treeitem-expanded.svg", + "annotation-help.svg", + "annotation-paperclip.svg", + "cursor-editorInk.svg", + "cursor-editorTextHighlight.svg", + "secondaryToolbarButton-scrollHorizontal.svg", + "secondaryToolbarButton-scrollVertical.svg", + "secondaryToolbarButton-spreadNone.svg", + "toolbarButton-editorHighlight.svg", + "loading.svg", + "secondaryToolbarButton-handTool.svg", + "secondaryToolbarButton-rotateCcw.svg", + "secondaryToolbarButton-rotateCw.svg", + "toolbarButton-editorFreeText.svg" + ] + }, + { + "added": [], + "changed_count": 16, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/img", + "files": [ + "annotator-icon-sprite.png", + "cwa-logo-round.svg", + "saved.png", + "settings-s.png", + "settings.png", + "cancelfullscreen.png", + "save.png", + "academicpaper.svg", + "annotator-glyph-sprite.png", + "apple-touch-icon.png", + "close.png", + "fullscreen.png", + "loader.gif", + "menu-icon.png", + "star.png", + "goodreads.svg" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js", + "files": [ + "logviewer.js", + "details.js", + "duplicate-notifier.js", + "duplicates.js", + "edit_books.js", + "filter_grid.js", + "get_meta.js", + "reading", + "compress", + "fullscreen.js", + "moment.min.js", + "query-builder.standalone.min.js", + "shelforder.js", + "table.js", + "uploadprogress.js", + "libs", + "email_selection.js", + "filter_list.js", + "caliBlur.js", + "kthoom.js", + "main.js", + "password.js", + "remote_login.js" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/compress", + "files": [ + "libunrar.js", + "libunrar.js.mem", + "libuntar.js", + "uncompress.js", + "jszip.min.js", + "jszip_epub.min.js" + ] + }, + { + "added": [], + "changed_count": 35, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs", + "files": [ + "bootstrap-datepicker", + "readmore.min.js", + "bar-ui.js", + "bootstrap-table", + "djvu_html5", + "soundmanager2.js", + "pdf.worker.mjs", + "plugins.js", + "screenfull.min.js", + "typeahead.bundle.js", + "viewer.mjs", + "bootstrap-select", + "debugger.js", + "intention.min.js", + "jquery.form.min.js", + "jquery.visible.min.js", + "pdf.mjs", + "pwstrength", + "underscore-umd-min.js", + "Sortable.min.js", + "bootstrap-wysihtml5-0.0.3.min.js", + "compromise.min.js", + "jquery.min.js", + "l10n.js", + "wysihtml5-0.0.3.js", + "bootstrap-rating-input.min.js", + "bootstrap-select.min.js", + "reader.min.js", + "tinymce", + "bootstrap.min.js", + "context.min.js", + "epub.min.js", + "jquery.min.map", + "wysihtml5-0.3.0.min.js", + "echarts.min.js" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/bootstrap-datepicker", + "files": [ + "bootstrap-datepicker.min.js", + "locales" + ] + }, + { + "added": [], + "changed_count": 27, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/bootstrap-datepicker/locales", + "files": [ + "bootstrap-datepicker.it.min.js", + "bootstrap-datepicker.ru.min.js", + "bootstrap-datepicker.sl.min.js", + "bootstrap-datepicker.uk.min.js", + "bootstrap-datepicker.zh_Hans_CN.min.js", + "bootstrap-datepicker.zh_Hant_TW.min.js", + "bootstrap-datepicker.cs.min.js", + "bootstrap-datepicker.es.min.js", + "bootstrap-datepicker.fr.min.js", + "bootstrap-datepicker.gl.min.js", + "bootstrap-datepicker.id.min.js", + "bootstrap-datepicker.ja.min.js", + "bootstrap-datepicker.no.min.js", + "bootstrap-datepicker.pt.min.js", + "bootstrap-datepicker.el.min.js", + "bootstrap-datepicker.hu.min.js", + "bootstrap-datepicker.nl.min.js", + "bootstrap-datepicker.pl.min.js", + "bootstrap-datepicker.sk.min.js", + "bootstrap-datepicker.sv.min.js", + "bootstrap-datepicker.tr.min.js", + "bootstrap-datepicker.vi.min.js", + "bootstrap-datepicker.fi.min.js", + "bootstrap-datepicker.km.min.js", + "bootstrap-datepicker.ko.min.js", + "bootstrap-datepicker.pt_BR.min.js", + "bootstrap-datepicker.de.min.js" + ] + }, + { + "added": [], + "changed_count": 15, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/bootstrap-select", + "files": [ + "defaults-cs.min.js", + "defaults-de.min.js", + "defaults-fr.min.js", + "defaults-hu.min.js", + "defaults-km.min.js", + "defaults-ru.min.js", + "defaults-zh_Hans_CN.min.js", + "defaults-pl.min.js", + "defaults-tr.min.js", + "defaults-ja.min.js", + "defaults-sv.min.js", + "defaults-es.min.js", + "defaults-fi.min.js", + "defaults-it.min.js", + "defaults-nl.min.js" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/bootstrap-table", + "files": [ + "bootstrap-table.min.js", + "locale", + "bootstrap-editable.min.js", + "bootstrap-table-editable.min.js", + "bootstrap-table-locale-all.min.js" + ] + }, + { + "added": [], + "changed_count": 32, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/bootstrap-table/locale", + "files": [ + "bootstrap-table-nl.min.js", + "bootstrap-table-el.min.js", + "bootstrap-table-fa.min.js", + "bootstrap-table-he.min.js", + "bootstrap-table-hu.min.js", + "bootstrap-table-cs.min.js", + "bootstrap-table-fr.min.js", + "bootstrap-table-it.min.js", + "bootstrap-table-sk.min.js", + "bootstrap-table-uk.min.js", + "bootstrap-table-pt_BR.min.js", + "bootstrap-table-ru.min.js", + "bootstrap-table-af.min.js", + "bootstrap-table-eu.min.js", + "bootstrap-table-hr.min.js", + "bootstrap-table-ko.min.js", + "bootstrap-table-zh_Hans_CN.min.js", + "bootstrap-table-da.min.js", + "bootstrap-table-es.min.js", + "bootstrap-table-et.min.js", + "bootstrap-table-fi.min.js", + "bootstrap-table-id.min.js", + "bootstrap-table-tr.min.js", + "bootstrap-table-ar.min.js", + "bootstrap-table-ca.min.js", + "bootstrap-table-ja.min.js", + "bootstrap-table-ka.min.js", + "bootstrap-table-pl.min.js", + "bootstrap-table-ro.min.js", + "bootstrap-table-bg.min.js", + "bootstrap-table-de.min.js", + "bootstrap-table-sv.min.js" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/djvu_html5", + "files": [ + "djvu_html5", + "djvu_worker", + "img" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/djvu_html5/djvu_html5", + "files": [ + "compilation-mappings.txt", + "djvu_html5.devmode.js", + "djvu_html5.nocache.js", + "091ECB3AE852C68866FBC86AA8FCDB1F.cache.js", + "3CFDA9D9AFA2798299BBAE243DB2E9B5.cache.js", + "clear.cache.gif", + "1A420474460884E73E3288F783AD7024.cache.js", + "564CB406D925C79CCD67EB98CA5AD4EF.cache.js", + "A8305F17E026239876FCBC730B035A55.cache.js" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/djvu_html5/djvu_worker", + "files": [ + "81EB501BD7AB47786C30D3175CE1EA2B.cache.js", + "clear.cache.gif", + "djvu_worker.nocache.js" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/djvu_html5/img", + "files": [ + "blank.jpg", + "status.png", + "toolbar-buttons.png" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/pwstrength", + "files": [ + "i18next.min.js", + "i18nextHttpBackend.min.js", + "locales", + "pwstrength-bootstrap.js", + "pwstrength-bootstrap.min.js" + ] + }, + { + "added": [], + "changed_count": 17, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/pwstrength/locales", + "files": [ + "de.json", + "pl.json", + "sk.json", + "th.json", + "tr.json", + "ar.json", + "cs.json", + "el.json", + "eo.json", + "es.json", + "it.json", + "pt.json", + "en.json", + "fr.json", + "ru.json", + "zh-TW.json", + "no.json" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce", + "files": [ + "langs", + "license.txt", + "plugins", + "skins", + "themes", + "tinymce.min.js", + "icons" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/icons", + "files": [ + "default" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/icons/default", + "files": [ + "icons.min.js" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/langs", + "files": [ + "hu.js", + "kab.js", + "ko.js", + "sk.js", + "vi.js", + "de.js", + "et.js", + "fr_FR.js", + "hy.js", + "ku.js", + "no.js", + "zh_Hant_TW.js", + "el.js", + "eo.js", + "eu.js", + "fa.js", + "sq.js", + "tr.js", + "ru.js", + "sl.js", + "sv.js", + "gl.js", + "pl.js", + "pt_BR.js", + "nl.js", + "da.js", + "fr.js", + "lt.js", + "pt.js", + "uk.js", + "zh_Hans_CN.js", + "ca.js", + "it.js", + "ja.js", + "kk.js", + "ro.js", + "ta.js", + "ug.js", + "ar.js", + "cy.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/plugins", + "files": [ + "code" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/plugins/code", + "files": [ + "plugin.min.js" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins", + "files": [ + "content", + "ui" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins/content", + "files": [ + "default" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins/content/default", + "files": [ + "content.min.css" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins/ui", + "files": [ + "oxide" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins/ui/oxide", + "files": [ + "content.min.css", + "content.mobile.min.css", + "fonts", + "skin.min.css", + "skin.mobile.min.css", + "skin.shadowdom.min.css", + "content.inline.min.css" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/skins/ui/oxide/fonts", + "files": [ + "tinymce-mobile.woff" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/themes", + "files": [ + "silver" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/libs/tinymce/themes/silver", + "files": [ + "theme.min.js" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/js/reading", + "files": [ + "djvu_reader.js", + "epub-progress.js", + "epub.js", + "txt_reader.js" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale", + "files": [ + "br", + "fi", + "kn", + "lij", + "nb-NO", + "nn-NO", + "sc", + "ur", + "af", + "it", + "pl", + "pt-PT", + "wo", + "en-CA", + "gd", + "he", + "hi-IN", + "rm", + "sr", + "te", + "vi", + "ka", + "ckb", + "hye", + "ltg", + "ru", + "xh", + "de", + "en-US", + "bo", + "fa", + "hsb", + "ia", + "lo", + "ro", + "cy", + "dsb", + "et", + "ga-IE", + "hy-AM" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ach", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/af", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/an", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ar", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ast", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/az", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/be", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/bg", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/bn", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/bo", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/br", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/brx", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/bs", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ca", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/cak", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ckb", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/cs", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/cy", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/da", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/de", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/dsb", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/el", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/en-CA", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/en-GB", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/en-US", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/eo", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/es-AR", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/es-CL", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/es-ES", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/es-MX", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/et", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/eu", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/fa", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ff", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/fi", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/fr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/fur", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/fy-NL", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ga-IE", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/gd", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/gl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/gn", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/gu-IN", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/he", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hi-IN", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hsb", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hu", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hy-AM", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/hye", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ia", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/id", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/is", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/it", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ja", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ka", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/kab", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/kk", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/km", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/kn", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ko", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/lij", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/lo", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/lt", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ltg", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/lv", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/meh", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/mk", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/mr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ms", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/my", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/nb-NO", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ne-NP", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/nl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/nn-NO", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/oc", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/pa-IN", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/pl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/pt-BR", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/pt-PT", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/rm", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ro", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ru", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sat", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sc", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/scn", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sco", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/si", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sk", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/skr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/son", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sq", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/sv-SE", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/szl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ta", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/te", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/tg", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/th", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/tl", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/tr", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/trs", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/uk", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/ur", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/uz", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/vi", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/wo", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/xh", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/zh-CN", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/locale/zh-TW", + "files": [ + "viewer.ftl" + ] + }, + { + "added": [], + "changed_count": 16, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/standard_fonts", + "files": [ + "FoxitFixedBoldItalic.pfb", + "LiberationSans-BoldItalic.ttf", + "FoxitDingbats.pfb", + "FoxitFixedBold.pfb", + "FoxitSerifBold.pfb", + "LiberationSans-Italic.ttf", + "LiberationSans-Regular.ttf", + "FoxitFixedItalic.pfb", + "FoxitSerif.pfb", + "FoxitSerifBoldItalic.pfb", + "FoxitSymbol.pfb", + "LICENSE_LIBERATION", + "LiberationSans-Bold.ttf", + "FoxitSerifItalic.pfb", + "LICENSE_FOXIT", + "FoxitFixed.pfb" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/static/user-profile-data", + "files": [ + "CWA-profile-updater.js" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/tasks", + "files": [ + "__init__.py", + "auto_hardcover_id.py", + "auto_send.py", + "convert.py", + "database.py", + "duplicate_scan.py", + "mail.py", + "clean.py", + "metadata_backup.py", + "ops.py", + "thumbnail.py", + "thumbnail_migration.py", + "upload.py" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/templates", + "files": [ + "listenmp3.html", + "modal_dialogs.html", + "cwa_epub_fixer.html", + "book_edit.html", + "remote_login.html", + "book_exists_flash.html", + "book_table.html", + "login.html", + "search.html", + "duplicates.html", + "http_error.html", + "readdjvu.html", + "readpdf.html", + "shelf.html", + "generate_kobo_auth_url.html", + "index.html", + "cwa_stats_full.html", + "cwa_stats_tabs.html", + "tasks.html", + "cwa_library_stats.html", + "grid.html", + "schedule_edit.html", + "search_form.html", + "cwa_user_activity.html", + "email_edit.html", + "index.xml", + "kosync_plugin.html", + "logviewer.html", + "magic_shelf_edit.html", + "osd.xml", + "user_table.html", + "admin.html", + "config_db.html", + "cwa_convert_library.html", + "cwa_stats.html", + "json.txt", + "stats.html", + "author.html", + "list.html", + "profile_pictures.html" + ] + }, + { + "added": [], + "changed_count": 28, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations", + "files": [ + "cs", + "es", + "it", + "pt", + "vi", + "zh_Hans_CN", + "ko", + "de", + "el", + "fr", + "gl", + "id", + "km", + "nl", + "ar", + "hu", + "no", + "ru", + "sk", + "sv", + "tr", + "uk", + "fi", + "ja", + "pl", + "pt_BR", + "sl", + "zh_Hant_TW" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ar", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ar/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/cs", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/cs/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/de", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/de/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/el", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/el/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/es", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/es/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/fi", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/fi/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/fr", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/fr/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/gl", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/gl/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/hu", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/hu/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/id", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/id/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/it", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/it/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ja", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ja/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/km", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/km/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ko", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ko/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/nl", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/nl/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/no", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/no/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pl", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pl/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pt", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pt/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pt_BR", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/pt_BR/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ru", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/ru/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sk", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sk/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sl", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sl/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sv", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/sv/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/tr", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/tr/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/uk", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/uk/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/vi", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/vi/LC_MESSAGES", + "files": [ + "messages.po", + "messages.mo" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/zh_Hans_CN", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/zh_Hans_CN/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/zh_Hant_TW", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/translations/zh_Hant_TW/LC_MESSAGES", + "files": [ + "messages.mo", + "messages.po" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/cps/utils", + "files": [ + "text_similarity.py", + "__init__.py", + "filename_sanitizer.py" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/calibre-web-automated/koreader", + "files": [ + "plugins" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/calibre-web-automated/koreader/plugins", + "files": [ + ".gitignore", + "cwasync.koplugin", + "koplugin.zip" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/app/calibre-web-automated/koreader/plugins/cwasync.koplugin", + "files": [ + "33841de50db76ace80e6505b2caf71e1411fa1a99f7db81cbb7504368eccac20.digest", + "CWASyncClient.lua", + "_meta.lua", + "api.json", + "main.lua" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/app/calibre-web-automated/kubernetes", + "files": [ + "README.md", + "deployment.yaml", + "gateway-istio.yaml", + "pvc-config.yaml", + "pvc-library.yml", + "service.yaml" + ] + }, + { + "added": [], + "changed_count": 22, + "db_signature": false, + "dir": "/app/calibre-web-automated/scripts", + "files": [ + "kindle_epub_fixer.py", + "update_spdx_headers.py", + "watch_fallback.py", + "cover_enforcer.py", + "cwa_internal_auth.py", + "generate_book_checksums.py", + "generate_contributors.py", + "update_translations.sh", + "compile_translations.sh", + "fix_po_duplicates.py", + "cwa_schema.sql", + "audiobook.py", + "auto_library.py", + "auto_zip.py", + "check_spdx_headers.py", + "combine_translations.sh", + "ingest_processor.py", + "setup-cwa.sh", + "check-cwa-services.sh", + "convert_library.py", + "cwa_db.py", + "generate_translation_status.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc", + "files": [ + "passwd-", + "group-", + "ImageMagick-6" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/ImageMagick-6", + "files": [ + "policy.xml" + ] + }, + { + "added": [ + ".config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".config" + ] + }, + { + "added": [ + "calibre" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config", + "files": [ + "calibre" + ] + }, + { + "added": [ + "global.py.json", + "plugins" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config/calibre", + "files": [ + "global.py.json", + "plugins" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/usr", + "files": [ + "share", + "bin" + ] + }, + { + "added": [ + "lrf2lrs", + "lrfviewer", + "calibre-smtp", + "markdown-calibre", + "calibre", + "calibre-uninstall", + "ebook-polish", + "calibre-server", + "ebook-edit", + "fetch-ebook-metadata", + "web2disk", + "calibre-debug", + "ebook-meta", + "ebook-viewer", + "calibre-customize", + "ebook-convert", + "ebook-device", + "lrs2lrf", + "calibredb", + "calibre-parallel" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/usr/bin", + "files": [ + "lrf2lrs", + "lrfviewer", + "calibre-smtp", + "markdown-calibre", + "calibre", + "calibre-uninstall", + "ebook-polish", + "calibre-server", + "ebook-edit", + "fetch-ebook-metadata", + "web2disk", + "calibre-debug", + "ebook-meta", + "ebook-viewer", + "calibre-customize", + "ebook-convert", + "ebook-device", + "lrs2lrf", + "calibredb", + "calibre-parallel" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 1812, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "crocodilestick/calibre-web-automated:v4.0.8", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/import/calibre", + "target": "/cwa-book-ingest", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 3, + "name": null, + "sample": [ + "metadata.db-wal", + "metadata.db", + "metadata.db-shm" + ], + "source": "/srv/felhom-gate/hdd/userdata/media/books", + "target": "/calibre-library", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 11, + "name": "volgate-calibreweb_calibre_web_config", + "sample": [ + "gdrive.db", + "cwa.db", + "app.db", + "user_profiles.json", + "cwa_ingest_retry_queue", + "client_secrets.json", + "app.db-shm", + "cwa_ingest_status", + ".key", + "app.db-wal", + ".cwa_migrations/duplicates_sidebar_v1" + ], + "source": "/var/lib/docker/volumes/volgate-calibreweb_calibre_web_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "calibre-web", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "calibre_web_config" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "ADMIN_USER", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8083/ -> 302" + ], + "fixture": null, + "ports": [ + 8083 + ] + }, + "reasons": [ + "calibre-web: /app/calibre-web-automated/empty_library \u2014 database file(s) touched but byte-identical to the image; a chown sweep, not a write", + "calibre-web: /app/calibre-web-automated/empty_library \u2014 database file(s) touched but byte-identical to the image; a chown sweep, not a write" + ], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/claper/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/claper/probe.json new file mode 100644 index 00000000..1a17455f --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/claper/probe.json @@ -0,0 +1,184 @@ +{ + "probe": { + "app": "claper", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "priv" + ] + }, + { + "added": [ + "static" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app/priv", + "files": [ + "static" + ] + }, + { + "added": [ + "uploads" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app/priv/static", + "files": [ + "uploads" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/claperco/claper:2.5", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-claper_claper_uploads", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-claper_claper_uploads/_data", + "target": "/app/priv/static/uploads", + "writable_by_app": "yes" + } + ], + "name": "claper", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:17-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1471, + "name": "volgate-claper_claper_postgres_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/2612", + "base/5/1418", + "base/5/6117", + "base/5/13510_fsm", + "base/5/2655", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/13500_vm", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm", + "base/5/6106", + "base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-claper_claper_postgres_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "claper-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "claper_postgres_data", + "claper_uploads" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY_BASE", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:4000/ -> 200", + "172.26.0.3:4000/ -> 200", + "fixture Claper: seed OK \u2014 claper: seeded user drill-f9ed4c26@gate.invalid" + ], + "fixture": "fixture Claper: seed OK \u2014 claper: seeded user drill-f9ed4c26@gate.invalid", + "ports": [ + 4000 + ] + }, + "reasons": [ + "claper: declared volume /app/priv/static/uploads is EMPTY after the exercise \u2014 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'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/code-server/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/code-server/probe.json new file mode 100644 index 00000000..a818817f --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/code-server/probe.json @@ -0,0 +1,120 @@ +{ + "probe": { + "app": "code-server", + "containers": [ + { + "diff_added": 196, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/", + "files": [ + "defaults", + "etc", + "app", + "run" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc", + "files": [ + "group-", + "passwd-", + "s6-overlay" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay", + "files": [ + "s6-rc.d" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d", + "files": [ + "init-adduser" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d/init-adduser", + "files": [ + "branding" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 208, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "lscr.io/linuxserver/code-server:4.129.0", + "mounts": [ + { + "class": "named-declared", + "files": 12, + "name": "volgate-codeserver_codeserver_config", + "sample": [ + ".profile", + ".bashrc", + ".cache/Microsoft/DeveloperTools/deviceid", + ".local/share/code-server/heartbeat", + ".local/share/code-server/coder-logs/code-server-stdout.log", + ".local/share/code-server/coder-logs/code-server-stderr.log", + "extensions/extensions.json", + ".config/code-server/config.yaml", + "data/code-server-ipc.sock", + "data/logs/20261002T141202/remoteagent.log", + "data/logs/20261002T141202/mcpGateway.log", + "data/CachedProfilesData/__default__profile__/extensions.builtin.cache" + ], + "source": "/var/lib/docker/volumes/volgate-codeserver_codeserver_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "code-server", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "codeserver_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "PASSWORD", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8443/ -> 302" + ], + "fixture": null, + "ports": [ + 8443 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/crafty-controller/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/crafty-controller/probe.json new file mode 100644 index 00000000..a40325f5 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/crafty-controller/probe.json @@ -0,0 +1,6189 @@ +{ + "probe": { + "app": "crafty-controller", + "containers": [ + { + "diff_added": 174, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "usr", + "crafty" + ] + }, + { + "added": [ + "import", + "logs", + "backups", + "servers" + ], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty", + "files": [ + "import", + "logs", + "backups", + "servers" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv", + "files": [ + "bin", + "include", + "lib", + "pyvenv.cfg" + ] + }, + { + "added": [], + "changed_count": 14, + "db_signature": false, + "dir": "/crafty/.venv/bin", + "files": [ + "httpx", + "idna", + "normalizer", + "Activate.ps1", + "activate.fish", + "pip", + "pip3", + "activate.csh", + "cffi-gen-src", + "pip3.12", + "activate", + "cbor2", + "jsonschema", + "pwiz.py" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/include", + "files": [ + "python3.12" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib", + "files": [ + "python3.12" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12", + "files": [ + "site-packages" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages", + "files": [ + "pillow-12.2.0.dist-info", + "playhouse", + "rpds", + "sniffio-1.3.1.dist-info", + "argon2_cffi_bindings-26.1.0.dist-info", + "httpcore", + "prometheus_client-0.17.1.dist-info", + "requests", + "six.py", + "urllib3", + "webauthn", + "markupsafe", + "PIL", + "cbor2", + "certifi", + "charset_normalizer-3.5.1.dist-info", + "cryptography", + "cryptography-48.0.0.dist-info", + "nh3", + "croniter", + "packaging", + "psutil-5.9.5.dist-info", + "setuptools", + "OpenSSL", + "_distutils_hack", + "asn1crypto-1.5.1.dist-info", + "attrs", + "dateutil", + "jsonschema-4.19.1.dist-info", + "libgravatar", + "nh3-0.2.14.dist-info", + "colorama", + "colorama-0.4.6.dist-info", + "markupsafe-3.0.3.dist-info", + "pyotp-2.9.0.dist-info", + "six-1.17.0.dist-info", + "typing_extensions-4.16.0.dist-info", + "tzlocal", + "tzlocal-5.1.dist-info", + "PyJWT-2.8.0.dist-info" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/APScheduler-3.10.4.dist-info", + "files": [ + "entry_points.txt", + "top_level.txt", + "INSTALLER", + "LICENSE.txt", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/OpenSSL", + "files": [ + "debug.py", + "__init__.py", + "py.typed", + "rand.py", + "version.py", + "SSL.py", + "_util.py", + "crypto.py" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/PIL", + "files": [ + "DdsImagePlugin.py", + "ImtImagePlugin.py", + "MspImagePlugin.py", + "_imagingft.pyi", + "ExifTags.py", + "FpxImagePlugin.py", + "ImageSequence.py", + "PdfImagePlugin.py", + "__main__.py", + "_avif.cpython-312-x86_64-linux-gnu.so", + "_binary.py", + "_imagingmorph.pyi", + "BdfFontFile.py", + "ImageMorph.py", + "_imagingmorph.cpython-312-x86_64-linux-gnu.so", + "CurImagePlugin.py", + "ImageDraw2.py", + "IptcImagePlugin.py", + "PsdImagePlugin.py", + "_imagingtk.pyi", + "ImageCms.py", + "DcxImagePlugin.py", + "_imagingcms.cpython-312-x86_64-linux-gnu.so", + "PSDraw.py", + "SgiImagePlugin.py", + "_imagingmath.pyi", + "GimpPaletteFile.py", + "IcoImagePlugin.py", + "McIdasImagePlugin.py", + "WebPImagePlugin.py", + "FtexImagePlugin.py", + "GbrImagePlugin.py", + "ImageMode.py", + "_imagingmath.cpython-312-x86_64-linux-gnu.so", + "GdImageFile.py", + "ImageText.py", + "WalImageFile.py", + "_imaging.pyi", + "MicImagePlugin.py", + "PcfFontFile.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/PyJWT-2.8.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "AUTHORS.rst", + "INSTALLER", + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/_argon2_cffi_bindings", + "files": [ + "__init__.py", + "_ffi.abi3.so" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/_distutils_hack", + "files": [ + "__init__.py", + "override.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/aiofiles", + "files": [ + "ospath.py", + "tempfile", + "threadpool", + "__init__.py", + "base.py", + "os.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/aiofiles-24.1.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/aiofiles-24.1.0.dist-info/licenses", + "files": [ + "LICENSE", + "NOTICE" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/aiofiles/tempfile", + "files": [ + "__init__.py", + "temptypes.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/aiofiles/threadpool", + "files": [ + "__init__.py", + "binary.py", + "text.py", + "utils.py" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio", + "files": [ + "py.typed", + "streams", + "to_interpreter.py", + "to_process.py", + "to_thread.py", + "__init__.py", + "abc", + "from_thread.py", + "lowlevel.py", + "pytest_plugin.py", + "_backends", + "_core" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio-4.9.0.dist-info", + "files": [ + "REQUESTED", + "WHEEL", + "entry_points.txt", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio/_backends", + "files": [ + "__init__.py", + "_asyncio.py", + "_trio.py" + ] + }, + { + "added": [], + "changed_count": 15, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio/_core", + "files": [ + "_asyncio_selector_thread.py", + "_fileio.py", + "_subprocesses.py", + "_exceptions.py", + "_sockets.py", + "_tasks.py", + "_testing.py", + "__init__.py", + "_eventloop.py", + "_resources.py", + "_signals.py", + "_typedattr.py", + "_streams.py", + "_synchronization.py", + "_tempfile.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio/abc", + "files": [ + "_eventloop.py", + "_resources.py", + "_subprocesses.py", + "_tasks.py", + "_testing.py", + "__init__.py", + "_sockets.py", + "_streams.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/anyio/streams", + "files": [ + "buffered.py", + "file.py", + "memory.py", + "stapled.py", + "text.py", + "tls.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler", + "files": [ + "job.py", + "jobstores", + "schedulers", + "events.py", + "executors", + "triggers", + "util.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler/executors", + "files": [ + "gevent.py", + "tornado.py", + "__init__.py", + "asyncio.py", + "base.py", + "debug.py", + "pool.py", + "twisted.py", + "base_py3.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler/jobstores", + "files": [ + "memory.py", + "redis.py", + "zookeeper.py", + "__init__.py", + "base.py", + "mongodb.py", + "rethinkdb.py", + "sqlalchemy.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler/schedulers", + "files": [ + "asyncio.py", + "background.py", + "base.py", + "gevent.py", + "qt.py", + "tornado.py", + "blocking.py", + "twisted.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler/triggers", + "files": [ + "date.py", + "interval.py", + "__init__.py", + "base.py", + "combining.py", + "cron" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/apscheduler/triggers/cron", + "files": [ + "__init__.py", + "expressions.py", + "fields.py" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/argon2", + "files": [ + "__init__.py", + "__main__.py", + "_legacy.py", + "_typing.py", + "low_level.py", + "profiles.py", + "py.typed", + "_password_hasher.py", + "_utils.py", + "exceptions.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/argon2_cffi-23.1.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/argon2_cffi-23.1.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/argon2_cffi_bindings-26.1.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "WHEEL", + "licenses", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/argon2_cffi_bindings-26.1.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/asn1crypto", + "files": [ + "core.py", + "_inet.py", + "_ordereddict.py", + "cms.py", + "pdf.py", + "tsp.py", + "__init__.py", + "algos.py", + "keys.py", + "version.py", + "x509.py", + "crl.py", + "csr.py", + "_errors.py", + "_int.py", + "_iri.py", + "_teletex_codec.py", + "pkcs12.py", + "util.py", + "_types.py", + "ocsp.py", + "parser.py", + "pem.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/asn1crypto-1.5.1.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "WHEEL", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/attr", + "files": [ + "_next_gen.py", + "converters.py", + "exceptions.py", + "filters.pyi", + "py.typed", + "setters.py", + "__init__.py", + "_version_info.pyi", + "filters.py", + "validators.py", + "__init__.pyi", + "_cmp.py", + "_cmp.pyi", + "_compat.py", + "_make.py", + "_version_info.py", + "converters.pyi", + "validators.pyi", + "_typing_compat.pyi", + "exceptions.pyi", + "setters.pyi", + "_config.py", + "_funcs.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/attrs", + "files": [ + "filters.py", + "py.typed", + "setters.py", + "validators.py", + "__init__.py", + "exceptions.py", + "__init__.pyi", + "converters.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/attrs-26.1.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/attrs-26.1.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cbor2", + "files": [ + "__init__.py", + "__init__.pyi", + "_cbor2.cpython-312-x86_64-linux-gnu.so", + "py.typed", + "tool.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cbor2-6.1.4.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "entry_points.txt", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cbor2-6.1.4.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/certifi", + "files": [ + "core.py", + "py.typed", + "tests", + "__init__.py", + "__main__.py", + "cacert.pem" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/certifi-2026.7.22.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/certifi-2026.7.22.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/certifi/tests", + "files": [ + "__init__.py", + "test_certify.py" + ] + }, + { + "added": [], + "changed_count": 24, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cffi", + "files": [ + "backend_ctypes.py", + "cffi_opcode.py", + "error.py", + "ffiplatform.py", + "parse_c_type.h", + "vengine_cpy.py", + "_cffi_gen_src.py", + "_embedding.h", + "_imp_emulation.py", + "commontypes.py", + "cparser.py", + "verifier.py", + "__init__.py", + "model.py", + "recompiler.py", + "vengine_gen.py", + "_cffi_errors.h", + "_cffi_include.h", + "gen_src.py", + "lock.py", + "pkgconfig.py", + "setuptools_ext.py", + "_shimmed_dist_utils.py", + "api.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "entry_points.txt", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cffi-2.1.1.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 14, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/charset_normalizer", + "files": [ + "api.py", + "constant.py", + "md.py", + "__main__.py", + "cd.cpython-312-x86_64-linux-gnu.so", + "legacy.py", + "md.cpython-312-x86_64-linux-gnu.so", + "version.py", + "cd.py", + "cli", + "models.py", + "__init__.py", + "py.typed", + "utils.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/charset_normalizer-3.5.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "entry_points.txt", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/charset_normalizer-3.5.1.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/charset_normalizer/cli", + "files": [ + "__main__.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/colorama", + "files": [ + "__init__.py", + "ansi.py", + "ansitowin32.py", + "initialise.py", + "tests", + "win32.py", + "winterm.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/colorama-0.4.6.dist-info", + "files": [ + "REQUESTED", + "WHEEL", + "licenses", + "INSTALLER", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/colorama-0.4.6.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/colorama/tests", + "files": [ + "initialise_test.py", + "isatty_test.py", + "utils.py", + "winterm_test.py", + "__init__.py", + "ansi_test.py", + "ansitowin32_test.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/croniter", + "files": [ + "croniter.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/croniter-1.4.1.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography", + "files": [ + "__init__.py", + "fernet.py", + "hazmat", + "py.typed", + "__about__.py", + "exceptions.py", + "utils.py", + "x509" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography-48.0.0.dist-info", + "files": [ + "sboms", + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography-48.0.0.dist-info/licenses", + "files": [ + "LICENSE", + "LICENSE.APACHE", + "LICENSE.BSD" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography-48.0.0.dist-info/sboms", + "files": [ + "cryptography-rust.cyclonedx.json", + "sbom.json" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat", + "files": [ + "_oid.py", + "asn1", + "backends", + "bindings", + "decrepit", + "primitives", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/asn1", + "files": [ + "__init__.py", + "asn1.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/backends", + "files": [ + "__init__.py", + "openssl" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl", + "files": [ + "__init__.py", + "backend.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings", + "files": [ + "_rust", + "_rust.abi3.so", + "openssl", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust", + "files": [ + "__init__.pyi", + "_openssl.pyi", + "declarative_asn1.pyi", + "exceptions.pyi", + "pkcs12.pyi", + "asn1.pyi", + "ocsp.pyi", + "openssl", + "pkcs7.pyi", + "test_support.pyi", + "x509.pyi" + ] + }, + { + "added": [], + "changed_count": 20, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl", + "files": [ + "__init__.pyi", + "aead.pyi", + "ciphers.pyi", + "hpke.pyi", + "kdf.pyi", + "cmac.pyi", + "dh.pyi", + "dsa.pyi", + "ed448.pyi", + "hmac.pyi", + "keys.pyi", + "mldsa.pyi", + "poly1305.pyi", + "ed25519.pyi", + "hashes.pyi", + "x448.pyi", + "ec.pyi", + "mlkem.pyi", + "rsa.pyi", + "x25519.pyi" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/openssl", + "files": [ + "__init__.py", + "_conditional.py", + "binding.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit", + "files": [ + "__init__.py", + "ciphers" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers", + "files": [ + "algorithms.py", + "modes.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives", + "files": [ + "_serialization.py", + "hashes.py", + "hpke.py", + "keywrap.py", + "twofactor", + "ciphers", + "cmac.py", + "constant_time.py", + "kdf", + "_asymmetric.py", + "_cipheralgorithm.py", + "_modes.py", + "asymmetric", + "hmac.py", + "padding.py", + "serialization", + "poly1305.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 14, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/asymmetric", + "files": [ + "ec.py", + "types.py", + "rsa.py", + "ed25519.py", + "ed448.py", + "mldsa.py", + "mlkem.py", + "padding.py", + "x448.py", + "dsa.py", + "utils.py", + "x25519.py", + "__init__.py", + "dh.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/ciphers", + "files": [ + "__init__.py", + "aead.py", + "algorithms.py", + "base.py", + "modes.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf", + "files": [ + "concatkdf.py", + "hkdf.py", + "kbkdf.py", + "pbkdf2.py", + "scrypt.py", + "x963kdf.py", + "__init__.py", + "argon2.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/serialization", + "files": [ + "pkcs12.py", + "pkcs7.py", + "ssh.py", + "__init__.py", + "base.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/twofactor", + "files": [ + "__init__.py", + "hotp.py", + "totp.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/cryptography/x509", + "files": [ + "__init__.py", + "ocsp.py", + "oid.py", + "base.py", + "certificate_transparency.py", + "extensions.py", + "general_name.py", + "name.py", + "verification.py" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/dateutil", + "files": [ + "_common.py", + "parser", + "rrule.py", + "tzwin.py", + "utils.py", + "__init__.py", + "_version.py", + "easter.py", + "relativedelta.py", + "tz", + "zoneinfo" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/dateutil/parser", + "files": [ + "__init__.py", + "_parser.py", + "isoparser.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/dateutil/tz", + "files": [ + "__init__.py", + "_common.py", + "_factories.py", + "tz.py", + "win.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/dateutil/zoneinfo", + "files": [ + "__init__.py", + "dateutil-zoneinfo.tar.gz", + "rebuild.py" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/h11", + "files": [ + "_readers.py", + "_receivebuffer.py", + "_util.py", + "_version.py", + "_abnf.py", + "_state.py", + "_writers.py", + "py.typed", + "__init__.py", + "_connection.py", + "_events.py", + "_headers.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/h11-0.16.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/h11-0.16.0.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore", + "files": [ + "_ssl.py", + "_sync", + "_synchronization.py", + "__init__.py", + "_api.py", + "_async", + "_backends", + "_exceptions.py", + "_trace.py", + "_utils.py", + "py.typed", + "_models.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore-1.0.9.dist-info", + "files": [ + "licenses", + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore-1.0.9.dist-info/licenses", + "files": [ + "LICENSE.md" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore/_async", + "files": [ + "connection_pool.py", + "http11.py", + "http_proxy.py", + "interfaces.py", + "socks_proxy.py", + "__init__.py", + "connection.py", + "http2.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore/_backends", + "files": [ + "anyio.py", + "auto.py", + "base.py", + "mock.py", + "sync.py", + "trio.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpcore/_sync", + "files": [ + "__init__.py", + "connection.py", + "connection_pool.py", + "http2.py", + "socks_proxy.py", + "http11.py", + "http_proxy.py", + "interfaces.py" + ] + }, + { + "added": [], + "changed_count": 19, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpx", + "files": [ + "__version__.py", + "_api.py", + "_client.py", + "_models.py", + "_status_codes.py", + "_urls.py", + "py.typed", + "__init__.py", + "_config.py", + "_content.py", + "_types.py", + "_utils.py", + "_auth.py", + "_main.py", + "_multipart.py", + "_transports", + "_urlparse.py", + "_decoders.py", + "_exceptions.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpx-0.28.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpx-0.28.1.dist-info/licenses", + "files": [ + "LICENSE.md" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/httpx/_transports", + "files": [ + "mock.py", + "wsgi.py", + "__init__.py", + "asgi.py", + "base.py", + "default.py" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/idna", + "files": [ + "__main__.py", + "cli.py", + "compat.py", + "uts46data.py", + "codec.py", + "core.py", + "idnadata.py", + "intranges.py", + "package_data.py", + "py.typed", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/idna-3.19.dist-info", + "files": [ + "WHEEL", + "entry_points.txt", + "licenses", + "INSTALLER", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/idna-3.19.dist-info/licenses", + "files": [ + "LICENSE.md" + ] + }, + { + "added": [], + "changed_count": 26, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jinja2", + "files": [ + "exceptions.py", + "loaders.py", + "tests.py", + "visitor.py", + "_identifier.py", + "bccache.py", + "debug.py", + "defaults.py", + "ext.py", + "nativetypes.py", + "optimizer.py", + "parser.py", + "__init__.py", + "async_utils.py", + "filters.py", + "lexer.py", + "meta.py", + "py.typed", + "runtime.py", + "utils.py", + "constants.py", + "environment.py", + "idtracking.py", + "nodes.py", + "sandbox.py", + "compiler.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jinja2-3.1.6.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 14, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema", + "files": [ + "__main__.py", + "_types.py", + "_typing.py", + "cli.py", + "exceptions.py", + "_keywords.py", + "validators.py", + "__init__.py", + "protocols.py", + "tests", + "_format.py", + "_legacy_keywords.py", + "_utils.py", + "benchmarks" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema-4.19.1.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema-4.19.1.dist-info/licenses", + "files": [ + "COPYING" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema/benchmarks", + "files": [ + "validator_creation.py", + "__init__.py", + "nested_schemas.py", + "unused_registry.py", + "issue232", + "issue232.py", + "json_schema_test_suite.py", + "subcomponents.py" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/issue232", + "files": [ + "issue.json" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema/tests", + "files": [ + "fuzz_validate.py", + "test_cli.py", + "test_deprecations.py", + "test_exceptions.py", + "test_jsonschema_test_suite.py", + "test_format.py", + "test_types.py", + "test_utils.py", + "test_validators.py", + "__init__.py", + "_suite.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications", + "files": [ + "__init__.py", + "_core.py", + "schemas", + "tests" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications-2025.9.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications-2025.9.1.dist-info/licenses", + "files": [ + "COPYING" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas", + "files": [ + "draft201909", + "draft202012", + "draft3", + "draft4", + "draft6", + "draft7" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft201909", + "files": [ + "metaschema.json", + "vocabularies" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies", + "files": [ + "content", + "core", + "format", + "meta-data", + "validation", + "applicator" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft202012", + "files": [ + "metaschema.json", + "vocabularies" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies", + "files": [ + "meta-data", + "unevaluated", + "validation", + "applicator", + "content", + "core", + "format-annotation", + "format-assertion" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft3", + "files": [ + "metaschema.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft4", + "files": [ + "metaschema.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft6", + "files": [ + "metaschema.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/schemas/draft7", + "files": [ + "metaschema.json" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jsonschema_specifications/tests", + "files": [ + "__init__.py", + "test_jsonschema_specifications.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/jwt", + "files": [ + "__init__.py", + "algorithms.py", + "api_jwt.py", + "exceptions.py", + "help.py", + "jwks_client.py", + "utils.py", + "api_jwk.py", + "api_jws.py", + "jwk_set_cache.py", + "py.typed", + "types.py", + "warnings.py" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/libgravatar", + "files": [ + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/libgravatar-1.0.4.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/markupsafe", + "files": [ + "_native.py", + "_speedups.c", + "_speedups.cpython-312-x86_64-linux-gnu.so", + "_speedups.pyi", + "py.typed", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info", + "files": [ + "RECORD", + "WHEEL", + "licenses", + "top_level.txt", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/markupsafe-3.0.3.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/nh3", + "files": [ + "__init__.py", + "__init__.pyi", + "nh3.abi3.so", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/nh3-0.2.14.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/orjson", + "files": [ + "__init__.py", + "__init__.pyi", + "orjson.cpython-312-x86_64-linux-gnu.so", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/orjson-3.11.4.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/orjson-3.11.4.dist-info/licenses", + "files": [ + "LICENSE-APACHE", + "LICENSE-MIT" + ] + }, + { + "added": [], + "changed_count": 16, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/packaging", + "files": [ + "__init__.py", + "_elffile.py", + "_manylinux.py", + "_musllinux.py", + "_parser.py", + "_structures.py", + "_tokenizer.py", + "markers.py", + "requirements.py", + "tags.py", + "utils.py", + "version.py", + "licenses", + "metadata.py", + "specifiers.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/packaging-24.2.dist-info", + "files": [ + "LICENSE.APACHE", + "LICENSE.BSD", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "INSTALLER", + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/packaging/licenses", + "files": [ + "__init__.py", + "_spdx.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/peewee-3.13.0.dist-info", + "files": [ + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/peewee-3.13.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "WHEEL", + "licenses", + "INSTALLER", + "REQUESTED", + "sboms", + "top_level.txt", + "zip-safe" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/sboms", + "files": [ + "auditwheel.cdx.json" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pillow.libs", + "files": [ + "libXau-154567c4.so.6.0.0", + "libbrotlicommon-785b7a00.so.1.2.0", + "libbrotlidec-08d35d18.so.1.2.0", + "libfreetype-d2d71ad9.so.6.20.6", + "libpng16-65c953c0.so.16.56.0", + "libwebpdemux-eeb71312.so.2.0.17", + "libzstd-6ea785c0.so.1.5.7", + "libjpeg-8296d2fa.so.62.4.0", + "liblzma-3c942967.so.5.8.3", + "libwebp-67ee3789.so.7.2.0", + "libharfbuzz-ef65cc8a.so.0.61321.0", + "libsharpyuv-0bacc318.so.0.1.2", + "libtiff-f4bc73ff.so.6.2.0", + "libavif-a883386a.so.16.4.1", + "liblcms2-545f6561.so.2.0.18", + "libopenjp2-f3576751.so.2.5.4", + "libwebpmux-20a90b09.so.3.1.2", + "libxcb-bac6ebc8.so.1.1.0" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip", + "files": [ + "_internal", + "_vendor", + "py.typed", + "__init__.py", + "__main__.py", + "__pip-runner__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses", + "files": [ + "LICENSE.txt", + "src", + "AUTHORS.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src", + "files": [ + "pip" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip", + "files": [ + "_vendor" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor", + "files": [ + "cachecontrol", + "certifi", + "distlib", + "distro", + "platformdirs", + "requests", + "idna", + "pygments", + "pyproject_hooks", + "rich", + "packaging", + "pkg_resources", + "tomli_w", + "urllib3", + "msgpack", + "resolvelib", + "tomli", + "truststore" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/cachecontrol", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/certifi", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/distlib", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/distro", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/idna", + "files": [ + "LICENSE.md" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/msgpack", + "files": [ + "COPYING" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/packaging", + "files": [ + "LICENSE", + "LICENSE.APACHE", + "LICENSE.BSD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/pkg_resources", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/platformdirs", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/pygments", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/pyproject_hooks", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/requests", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/resolvelib", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/rich", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/tomli", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/tomli_w", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/truststore", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip-26.2.1.dist-info/licenses/src/pip/_vendor/urllib3", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 22, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal", + "files": [ + "cli", + "configuration.py", + "index", + "network", + "pyproject.py", + "resolution", + "wheel_builder.py", + "__init__.py", + "distributions", + "exceptions.py", + "main.py", + "models", + "operations", + "req", + "cache.py", + "locations", + "build_env", + "commands", + "metadata", + "self_outdated_check.py", + "utils", + "vcs" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/build_env", + "files": [ + "virtual.py", + "__init__.py", + "base.py", + "installer.py", + "noop.py", + "venv.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/cli", + "files": [ + "__init__.py", + "autocompletion.py", + "command_context.py", + "progress_bars.py", + "req_command.py", + "status_codes.py", + "base_command.py", + "cmdoptions.py", + "index_command.py", + "main.py", + "main_parser.py", + "parser.py", + "spinners.py" + ] + }, + { + "added": [], + "changed_count": 19, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/commands", + "files": [ + "cache.py", + "debug.py", + "hash.py", + "help.py", + "index.py", + "lock.py", + "uninstall.py", + "__init__.py", + "configuration.py", + "wheel.py", + "check.py", + "completion.py", + "download.py", + "show.py", + "freeze.py", + "inspect.py", + "install.py", + "list.py", + "search.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/distributions", + "files": [ + "__init__.py", + "base.py", + "installed.py", + "sdist.py", + "wheel.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/index", + "files": [ + "collector.py", + "package_finder.py", + "sources.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/locations", + "files": [ + "_distutils.py", + "_sysconfig.py", + "base.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/metadata", + "files": [ + "__init__.py", + "_json.py", + "base.py", + "importlib", + "pkg_resources.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib", + "files": [ + "_compat.py", + "_dists.py", + "_envs.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/models", + "files": [ + "link.py", + "selection_prefs.py", + "target_python.py", + "wheel.py", + "__init__.py", + "candidate.py", + "direct_url.py", + "index.py", + "release_control.py", + "scheme.py", + "search_scope.py", + "format_control.py", + "installation_report.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/network", + "files": [ + "__init__.py", + "session.py", + "utils.py", + "auth.py", + "cache.py", + "download.py", + "lazy_wheel.py", + "xmlrpc.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/operations", + "files": [ + "install", + "prepare.py", + "__init__.py", + "build", + "check.py", + "freeze.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/operations/build", + "files": [ + "metadata.py", + "metadata_editable.py", + "wheel.py", + "wheel_editable.py", + "__init__.py", + "build_tracker.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/operations/install", + "files": [ + "__init__.py", + "wheel.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/req", + "files": [ + "constructors.py", + "req_dependency_group.py", + "req_set.py", + "__init__.py", + "pep723.py", + "req_file.py", + "req_install.py", + "req_uninstall.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/resolution", + "files": [ + "__init__.py", + "base.py", + "legacy", + "resolvelib" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy", + "files": [ + "__init__.py", + "resolver.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib", + "files": [ + "reporter.py", + "requirements.py", + "resolver.py", + "base.py", + "candidates.py", + "__init__.py", + "factory.py", + "found_candidates.py", + "provider.py" + ] + }, + { + "added": [], + "changed_count": 26, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/utils", + "files": [ + "entrypoints.py", + "filetypes.py", + "glibc.py", + "logging.py", + "subprocess.py", + "temp_dir.py", + "urls.py", + "virtualenv.py", + "_jaraco_text.py", + "appdirs.py", + "direct_url_helpers.py", + "filesystem.py", + "hashes.py", + "wheel.py", + "compat.py", + "misc.py", + "packaging.py", + "unpacking.py", + "__init__.py", + "_log.py", + "compatibility_tags.py", + "datetime.py", + "deprecation.py", + "egg_link.py", + "pylock.py", + "retry.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_internal/vcs", + "files": [ + "bazaar.py", + "git.py", + "mercurial.py", + "subversion.py", + "versioncontrol.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 22, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor", + "files": [ + "README.rst", + "distro", + "msgpack", + "rich", + "tomli", + "truststore", + "__init__.py", + "certifi", + "distlib", + "platformdirs", + "vendor.txt", + "bom.cdx.json", + "packaging", + "pkg_resources", + "pygments", + "resolvelib", + "urllib3", + "cachecontrol", + "idna", + "pyproject_hooks", + "requests", + "tomli_w" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol", + "files": [ + "_cmd.py", + "caches", + "controller.py", + "filewrapper.py", + "heuristics.py", + "py.typed", + "wrapper.py", + "LICENSE.txt", + "__init__.py", + "adapter.py", + "cache.py", + "serialize.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches", + "files": [ + "__init__.py", + "file_cache.py", + "redis_cache.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/certifi", + "files": [ + "core.py", + "py.typed", + "LICENSE", + "__init__.py", + "__main__.py", + "cacert.pem" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/distlib", + "files": [ + "util.py", + "w32.exe", + "__init__.py", + "compat.py", + "resources.py", + "scripts.py", + "w64-arm.exe", + "w64.exe", + "LICENSE.txt", + "t32.exe", + "t64-arm.exe", + "t64.exe" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/distro", + "files": [ + "LICENSE", + "__init__.py", + "__main__.py", + "distro.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/idna", + "files": [ + "cli.py", + "codec.py", + "compat.py", + "core.py", + "idnadata.py", + "__main__.py", + "intranges.py", + "package_data.py", + "py.typed", + "uts46data.py", + "LICENSE.md", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/msgpack", + "files": [ + "COPYING", + "__init__.py", + "exceptions.py", + "ext.py", + "fallback.py" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/packaging", + "files": [ + "_manylinux.py", + "errors.py", + "markers.py", + "py.typed", + "utils.py", + "LICENSE.APACHE", + "_structures.py", + "direct_url.py", + "licenses", + "version.py", + "__init__.py", + "_parser.py", + "_tokenizer.py", + "dependency_groups.py", + "metadata.py", + "pylock.py", + "requirements.py", + "specifiers.py", + "_musllinux.py", + "tags.py", + "LICENSE", + "LICENSE.BSD", + "_elffile.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/licenses", + "files": [ + "__init__.py", + "_spdx.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources", + "files": [ + "LICENSE", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/platformdirs", + "files": [ + "android.py", + "py.typed", + "version.py", + "__init__.py", + "__main__.py", + "api.py", + "macos.py", + "unix.py", + "windows.py", + "LICENSE", + "_xdg.py" + ] + }, + { + "added": [], + "changed_count": 20, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pygments", + "files": [ + "scanner.py", + "styles", + "token.py", + "unistring.py", + "util.py", + "__main__.py", + "console.py", + "modeline.py", + "sphinxext.py", + "LICENSE", + "__init__.py", + "lexer.py", + "lexers", + "plugin.py", + "regexopt.py", + "filter.py", + "filters", + "formatter.py", + "style.py", + "formatters" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters", + "files": [ + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters", + "files": [ + "__init__.py", + "_mapping.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers", + "files": [ + "__init__.py", + "_mapping.py", + "python.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles", + "files": [ + "__init__.py", + "_mapping.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks", + "files": [ + "_impl.py", + "_in_process", + "py.typed", + "LICENSE", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process", + "files": [ + "_in_process.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 21, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/requests", + "files": [ + "__version__.py", + "api.py", + "auth.py", + "exceptions.py", + "hooks.py", + "packages.py", + "status_codes.py", + "__init__.py", + "_types.py", + "models.py", + "py.typed", + "utils.py", + "help.py", + "LICENSE", + "_internal_utils.py", + "cookies.py", + "sessions.py", + "adapters.py", + "certs.py", + "compat.py", + "structures.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/resolvelib", + "files": [ + "structs.py", + "LICENSE", + "__init__.py", + "providers.py", + "py.typed", + "reporters.py", + "resolvers" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers", + "files": [ + "resolution.py", + "__init__.py", + "abstract.py", + "criterion.py", + "exceptions.py" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/rich", + "files": [ + "_palettes.py", + "ansi.py", + "default_styles.py", + "filesize.py", + "py.typed", + "_emoji_replace.py", + "_fileno.py", + "box.py", + "constrain.py", + "file_proxy.py", + "protocol.py", + "styled.py", + "syntax.py", + "_log_render.py", + "align.py", + "jupyter.py", + "panel.py", + "terminal_theme.py", + "control.py", + "emoji.py", + "scope.py", + "style.py", + "tree.py", + "padding.py", + "pager.py", + "rule.py", + "_cell_widths.py", + "_timer.py", + "color_triplet.py", + "_wrap.py", + "cells.py", + "errors.py", + "layout.py", + "markup.py", + "measure.py", + "progress_bar.py", + "prompt.py", + "__main__.py", + "region.py", + "_loop.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/tomli", + "files": [ + "LICENSE", + "__init__.py", + "_parser.py", + "_re.py", + "_types.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/tomli_w", + "files": [ + "LICENSE", + "__init__.py", + "_writer.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/truststore", + "files": [ + "_ssl_constants.py", + "LICENSE", + "_api.py", + "_openssl.py", + "_windows.py", + "py.typed", + "__init__.py", + "_macos.py" + ] + }, + { + "added": [], + "changed_count": 17, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3", + "files": [ + "filepost.py", + "response.py", + "util", + "LICENSE.txt", + "_collections.py", + "_request_methods.py", + "_version.py", + "connectionpool.py", + "exceptions.py", + "http2", + "_base_connection.py", + "poolmanager.py", + "py.typed", + "__init__.py", + "connection.py", + "contrib", + "fields.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib", + "files": [ + "__init__.py", + "emscripten", + "pyopenssl.py", + "socks.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/emscripten", + "files": [ + "__init__.py", + "connection.py", + "emscripten_fetch_worker.js", + "fetch.py", + "request.py", + "response.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/http2", + "files": [ + "__init__.py", + "connection.py", + "probe.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util", + "files": [ + "url.py", + "connection.py", + "request.py", + "retry.py", + "ssl_.py", + "util.py", + "wait.py", + "__init__.py", + "proxy.py", + "response.py", + "ssl_match_hostname.py", + "ssltransport.py", + "timeout.py" + ] + }, + { + "added": [], + "changed_count": 22, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/playhouse", + "files": [ + "__init__.py", + "db_url.py", + "kv.py", + "sqlite_changelog.py", + "sqliteq.py", + "test_utils.py", + "cockroachdb.py", + "dataset.py", + "hybrid.py", + "reflection.py", + "signals.py", + "sqlcipher_ext.py", + "sqlite_udf.py", + "apsw_ext.py", + "flask_utils.py", + "migrate.py", + "mysql_ext.py", + "pool.py", + "postgres_ext.py", + "shortcuts.py", + "fields.py", + "sqlite_ext.py" + ] + }, + { + "added": [], + "changed_count": 22, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/prometheus_client", + "files": [ + "context_managers.py", + "core.py", + "gc_collector.py", + "registry.py", + "samples.py", + "twisted", + "asgi.py", + "openmetrics", + "process_collector.py", + "py.typed", + "utils.py", + "values.py", + "metrics_core.py", + "mmap_dict.py", + "bridge", + "decorator.py", + "metrics.py", + "platform_collector.py", + "exposition.py", + "multiprocess.py", + "parser.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/prometheus_client-0.17.1.dist-info", + "files": [ + "REQUESTED", + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA", + "NOTICE", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/prometheus_client/bridge", + "files": [ + "__init__.py", + "graphite.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/prometheus_client/openmetrics", + "files": [ + "__init__.py", + "exposition.py", + "parser.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/prometheus_client/twisted", + "files": [ + "__init__.py", + "_exposition.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/psutil", + "files": [ + "_pswindows.py", + "tests", + "_psaix.py", + "_pslinux.py", + "_psosx.py", + "_psposix.py", + "_pssunos.py", + "_psutil_posix.abi3.so", + "__init__.py", + "_common.py", + "_compat.py", + "_psbsd.py", + "_psutil_linux.abi3.so" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/psutil-5.9.5.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/psutil/tests", + "files": [ + "test_aix.py", + "test_connections.py", + "test_osx.py", + "test_sunos.py", + "test_system.py", + "test_testutils.py", + "__init__.py", + "__main__.py", + "test_bsd.py", + "test_contracts.py", + "test_memleaks.py", + "test_unicode.py", + "test_windows.py", + "test_linux.py", + "test_posix.py", + "test_process.py", + "runner.py", + "test_misc.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pycparser", + "files": [ + "_c_ast.cfg", + "ast_transforms.py", + "c_ast.py", + "c_lexer.py", + "__init__.py", + "_ast_gen.py", + "c_generator.py", + "c_parser.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pycparser-3.0.dist-info", + "files": [ + "RECORD", + "WHEEL", + "licenses", + "top_level.txt", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pycparser-3.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pyopenssl-26.2.0.dist-info", + "files": [ + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pyopenssl-26.2.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pyotp", + "files": [ + "totp.py", + "utils.py", + "contrib", + "hotp.py", + "__init__.py", + "compat.py", + "otp.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pyotp/contrib", + "files": [ + "steam.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/python_dateutil-2.9.0.post0.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "WHEEL", + "top_level.txt", + "zip-safe" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz", + "files": [ + "tzfile.py", + "tzinfo.py", + "zoneinfo", + "__init__.py", + "exceptions.py", + "lazy.py", + "reference.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz-2026.3.post1.dist-info", + "files": [ + "INSTALLER", + "LICENSE.txt", + "METADATA", + "RECORD", + "WHEEL", + "top_level.txt", + "zip-safe" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo", + "files": [ + "Africa", + "EET", + "Etc", + "GB", + "GMT0", + "Iran", + "Kwajalein", + "Mexico", + "Israel", + "Libya", + "Pacific", + "UCT", + "tzdata.zi", + "Antarctica", + "Canada", + "Jamaica", + "Singapore", + "W-SU", + "EST", + "Egypt", + "Europe", + "GMT-0", + "MST", + "Zulu", + "Australia", + "GMT", + "Hongkong", + "US", + "America", + "GMT+0", + "HST", + "UTC", + "Asia", + "Indian", + "PRC", + "Portugal", + "zone1970.tab", + "ROC", + "Turkey", + "Universal" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Africa", + "files": [ + "Bangui", + "Brazzaville", + "Conakry", + "Khartoum", + "Luanda", + "Niamey", + "Addis_Ababa", + "Bamako", + "Douala", + "Freetown", + "Maputo", + "Banjul", + "Bissau", + "Dar_es_Salaam", + "Kampala", + "Mbabane", + "Mogadishu", + "Windhoek", + "Abidjan", + "Accra", + "Ceuta", + "Gaborone", + "Harare", + "Maseru", + "Nouakchott", + "Asmara", + "Asmera", + "Bujumbura", + "Cairo", + "Kinshasa", + "Lagos", + "Lubumbashi", + "Lusaka", + "Juba", + "Kigali", + "Monrovia", + "Nairobi", + "Sao_Tome", + "Blantyre", + "Dakar" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/America", + "files": [ + "Toronto", + "Buenos_Aires", + "Detroit", + "Grenada", + "Juneau", + "Yellowknife", + "Porto_Velho", + "Dawson", + "Ensenada", + "La_Paz", + "Nipigon", + "Resolute", + "Tortola", + "Bahia_Banderas", + "Halifax", + "Jujuy", + "St_Kitts", + "Curacao", + "Asuncion", + "Atka", + "Guatemala", + "Rio_Branco", + "Sao_Paulo", + "Thule", + "Iqaluit", + "Mexico_City", + "St_Vincent", + "Edmonton", + "Montserrat", + "St_Johns", + "Yakutat", + "Fort_Nelson", + "Havana", + "Merida", + "Metlakatla", + "Bogota", + "Eirunepe", + "Knox_IN", + "Virgin", + "Danmarkshavn" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/America/Argentina", + "files": [ + "Mendoza", + "San_Luis", + "Buenos_Aires", + "Catamarca", + "Rio_Gallegos", + "Salta", + "San_Juan", + "Tucuman", + "Ushuaia", + "ComodRivadavia", + "Cordoba", + "Jujuy", + "La_Rioja" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/America/Indiana", + "files": [ + "Tell_City", + "Vevay", + "Vincennes", + "Winamac", + "Indianapolis", + "Knox", + "Marengo", + "Petersburg" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/America/Kentucky", + "files": [ + "Louisville", + "Monticello" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/America/North_Dakota", + "files": [ + "Beulah", + "Center", + "New_Salem" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Antarctica", + "files": [ + "Troll", + "Vostok", + "Davis", + "Macquarie", + "McMurdo", + "Rothera", + "South_Pole", + "Casey", + "DumontDUrville", + "Mawson", + "Palmer", + "Syowa" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Arctic", + "files": [ + "Longyearbyen" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Asia", + "files": [ + "Aqtau", + "Colombo", + "Jakarta", + "Riyadh", + "Saigon", + "Shanghai", + "Yangon", + "Yekaterinburg", + "Bahrain", + "Dushanbe", + "Muscat", + "Tashkent", + "Thimbu", + "Ulaanbaatar", + "Urumqi", + "Baku", + "Istanbul", + "Kamchatka", + "Kashgar", + "Taipei", + "Vientiane", + "Ashgabat", + "Ashkhabad", + "Bishkek", + "Harbin", + "Khandyga", + "Kuala_Lumpur", + "Macau", + "Omsk", + "Pontianak", + "Rangoon", + "Tbilisi", + "Ujung_Pandang", + "Aqtobe", + "Hong_Kong", + "Krasnoyarsk", + "Aden", + "Damascus", + "Magadan", + "Qostanay" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Atlantic", + "files": [ + "Reykjavik", + "St_Helena", + "Bermuda", + "Cape_Verde", + "Faroe", + "Jan_Mayen", + "Madeira", + "South_Georgia", + "Stanley", + "Azores", + "Canary", + "Faeroe" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Australia", + "files": [ + "Melbourne", + "NSW", + "ACT", + "Adelaide", + "Brisbane", + "Darwin", + "Canberra", + "Currie", + "Eucla", + "Lord_Howe", + "Perth", + "South", + "Tasmania", + "Victoria", + "North", + "Queensland", + "Sydney", + "West", + "Yancowinna", + "Broken_Hill", + "Hobart", + "LHI", + "Lindeman" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Brazil", + "files": [ + "Acre", + "DeNoronha", + "East", + "West" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Canada", + "files": [ + "Newfoundland", + "Pacific", + "Saskatchewan", + "Yukon", + "Atlantic", + "Central", + "Eastern", + "Mountain" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Chile", + "files": [ + "Continental", + "EasterIsland" + ] + }, + { + "added": [], + "changed_count": 35, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Etc", + "files": [ + "GMT+1", + "GMT+4", + "GMT+8", + "GMT-0", + "GMT-4", + "GMT-7", + "GMT", + "GMT+0", + "GMT+12", + "GMT-9", + "GMT+5", + "GMT-2", + "GMT-8", + "GMT0", + "Universal", + "GMT+11", + "GMT+7", + "GMT-10", + "GMT-6", + "Greenwich", + "GMT+2", + "GMT+3", + "GMT-11", + "GMT-13", + "GMT-3", + "UCT", + "UTC", + "GMT+10", + "GMT+6", + "GMT+9", + "GMT-1", + "GMT-12", + "Zulu", + "GMT-14", + "GMT-5" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Europe", + "files": [ + "Saratov", + "Amsterdam", + "Vatican", + "Zaporozhye", + "Zurich", + "Guernsey", + "London", + "Mariehamn", + "Riga", + "Stockholm", + "Belgrade", + "Berlin", + "Budapest", + "Isle_of_Man", + "Luxembourg", + "Copenhagen", + "Gibraltar", + "Istanbul", + "Warsaw", + "San_Marino", + "Vaduz", + "Volgograd", + "Kiev", + "Lisbon", + "Prague", + "Rome", + "Sofia", + "Tallinn", + "Kyiv", + "Paris", + "Athens", + "Skopje", + "Tiraspol", + "Kaliningrad", + "Madrid", + "Tirane", + "Uzhgorod", + "Bucharest", + "Helsinki", + "Samara" + ] + }, + { + "added": [], + "changed_count": 11, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Indian", + "files": [ + "Mahe", + "Mayotte", + "Reunion", + "Antananarivo", + "Kerguelen", + "Maldives", + "Mauritius", + "Chagos", + "Christmas", + "Cocos", + "Comoro" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Mexico", + "files": [ + "BajaNorte", + "BajaSur", + "General" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/Pacific", + "files": [ + "Rarotonga", + "Saipan", + "Tarawa", + "Pitcairn", + "Tahiti", + "Truk", + "Midway", + "Norfolk", + "Port_Moresby", + "Tongatapu", + "Wallis", + "Chatham", + "Fakaofo", + "Guadalcanal", + "Guam", + "Johnston", + "Nauru", + "Pohnpei", + "Wake", + "Efate", + "Palau", + "Enderbury", + "Funafuti", + "Kosrae", + "Kwajalein", + "Majuro", + "Yap", + "Auckland", + "Chuuk", + "Galapagos", + "Samoa", + "Bougainville", + "Easter", + "Gambier", + "Honolulu", + "Kanton", + "Marquesas", + "Niue", + "Ponape", + "Apia" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/pytz/zoneinfo/US", + "files": [ + "Pacific", + "Alaska", + "Aleutian", + "Central", + "Hawaii", + "Mountain", + "Samoa", + "Arizona", + "East-Indiana", + "Eastern", + "Indiana-Starke", + "Michigan" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/referencing", + "files": [ + "_attrs.pyi", + "_core.py", + "jsonschema.py", + "py.typed", + "retrieval.py", + "tests", + "__init__.py", + "_attrs.py", + "exceptions.py", + "typing.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/referencing-0.37.0.dist-info", + "files": [ + "WHEEL", + "licenses", + "INSTALLER", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/referencing-0.37.0.dist-info/licenses", + "files": [ + "COPYING" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/referencing/tests", + "files": [ + "__init__.py", + "test_core.py", + "test_exceptions.py", + "test_jsonschema.py", + "test_referencing_suite.py", + "test_retrieval.py" + ] + }, + { + "added": [], + "changed_count": 18, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/requests", + "files": [ + "__init__.py", + "api.py", + "compat.py", + "cookies.py", + "exceptions.py", + "help.py", + "models.py", + "_internal_utils.py", + "packages.py", + "structures.py", + "__version__.py", + "adapters.py", + "certs.py", + "sessions.py", + "auth.py", + "hooks.py", + "status_codes.py", + "utils.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/requests-2.32.4.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/requests-2.32.4.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/rpds", + "files": [ + "__init__.py", + "__init__.pyi", + "py.typed", + "rpds.cpython-312-x86_64-linux-gnu.so" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/rpds_py-2026.6.3.dist-info", + "files": [ + "sboms", + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/rpds_py-2026.6.3.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/rpds_py-2026.6.3.dist-info/sboms", + "files": [ + "rpds-py.cyclonedx.json" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools", + "files": [ + "cli-32.exe", + "gui-arm64.exe", + "installer.py", + "warnings.py", + "__init__.py", + "build_meta.py", + "extension.py", + "glob.py", + "gui.exe", + "_shutil.py", + "_discovery.py", + "_distutils", + "_normalization.py", + "archive_util.py", + "cli.exe", + "compat", + "config", + "_core_metadata.py", + "_path.py", + "command", + "depends.py", + "errors.py", + "msvc.py", + "script (dev).tmpl", + "script.tmpl", + "_imp.py", + "_importlib.py", + "_scripts.py", + "_static.py", + "launch.py", + "logging.py", + "wheel.py", + "_itertools.py", + "_vendor", + "gui-32.exe", + "monkey.py", + "namespaces.py", + "version.py", + "dist.py", + "_reqs.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools-84.0.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses", + "top_level.txt", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools-84.0.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 33, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils", + "files": [ + "_macos_compat.py", + "compat", + "core.py", + "__init__.py", + "_msvccompiler.py", + "file_util.py", + "log.py", + "dep_util.py", + "py.typed", + "unixccompiler.py", + "version.py", + "_modified.py", + "ccompiler.py", + "sysconfig.py", + "zosccompiler.py", + "archive_util.py", + "cmd.py", + "dist.py", + "fancy_getopt.py", + "text_file.py", + "util.py", + "_dataclass.py", + "command", + "spawn.py", + "compilers", + "cygwinccompiler.py", + "debug.py", + "extension.py", + "versionpredicate.py", + "_log.py", + "dir_util.py", + "errors.py", + "filelist.py" + ] + }, + { + "added": [], + "changed_count": 20, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils/command", + "files": [ + "__init__.py", + "_framework_compat.py", + "bdist_rpm.py", + "build_ext.py", + "clean.py", + "build.py", + "build_scripts.py", + "check.py", + "install.py", + "bdist_dumb.py", + "build_clib.py", + "build_py.py", + "install_data.py", + "install_egg_info.py", + "install_lib.py", + "install_scripts.py", + "sdist.py", + "bdist.py", + "config.py", + "install_headers.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils/compat", + "files": [ + "__init__.py", + "numpy.py", + "py310.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils/compilers", + "files": [ + "platform", + "C", + "_modified.py", + "_util.py", + "errors.py", + "logging.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/C", + "files": [ + "base.py", + "cygwin.py", + "errors.py", + "msvc.py", + "py.typed", + "unix.py", + "zos.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_distutils/compilers/platform", + "files": [ + "detect.py", + "macos.py" + ] + }, + { + "added": [], + "changed_count": 23, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor", + "files": [ + "jaraco.text-4.0.0.dist-info", + "jaraco_context-6.1.0.dist-info", + "packaging", + "tomli", + "tomli-2.4.0.dist-info", + "zipp-3.23.0.dist-info", + ".lock", + "autocommand-2.2.2.dist-info", + "importlib_metadata", + "importlib_metadata-8.7.1.dist-info", + "more_itertools", + "more_itertools-10.8.0.dist-info", + "platformdirs", + "platformdirs-4.4.0.dist-info", + "autocommand", + "backports", + "packaging-26.0.dist-info", + "wheel-0.46.3.dist-info", + "zipp", + "jaraco", + "jaraco_functools-4.4.0.dist-info", + "wheel", + "backports.tarfile-1.2.0.dist-info" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/autocommand", + "files": [ + "__init__.py", + "autoasync.py", + "autocommand.py", + "automain.py", + "autoparse.py", + "errors.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/autocommand-2.2.2.dist-info", + "files": [ + "LICENSE", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/backports", + "files": [ + "__init__.py", + "tarfile" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/backports.tarfile-1.2.0.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile", + "files": [ + "__init__.py", + "__main__.py", + "compat" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/backports/tarfile/compat", + "files": [ + "__init__.py", + "py38.py" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata", + "files": [ + "_meta.py", + "compat", + "diagnose.py", + "py.typed", + "__init__.py", + "_adapters.py", + "_collections.py", + "_compat.py", + "_itertools.py", + "_text.py", + "_typing.py", + "_functools.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/importlib_metadata/compat", + "files": [ + "py39.py", + "__init__.py", + "py311.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco", + "files": [ + "context", + "functools", + "text" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco.text-4.0.0.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/context", + "files": [ + "__init__.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/functools", + "files": [ + "__init__.py", + "__init__.pyi", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco/text", + "files": [ + "to-dvorak.py", + "to-qwerty.py", + "Lorem ipsum.txt", + "__init__.py", + "layouts.py", + "show-newlines.py", + "strip-prefix.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco_context-6.1.0.dist-info", + "files": [ + "REQUESTED", + "WHEEL", + "licenses", + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco_context-6.1.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco_functools-4.4.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "top_level.txt", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/jaraco_functools-4.4.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools", + "files": [ + "more.py", + "more.pyi", + "py.typed", + "recipes.py", + "recipes.pyi", + "__init__.py", + "__init__.pyi" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools-10.8.0.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/more_itertools-10.8.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 17, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/packaging", + "files": [ + "_elffile.py", + "_musllinux.py", + "_parser.py", + "_manylinux.py", + "_structures.py", + "_tokenizer.py", + "markers.py", + "py.typed", + "requirements.py", + "specifiers.py", + "__init__.py", + "licenses", + "metadata.py", + "pylock.py", + "tags.py", + "utils.py", + "version.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/packaging-26.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/packaging-26.0.dist-info/licenses", + "files": [ + "LICENSE", + "LICENSE.APACHE", + "LICENSE.BSD" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/packaging/licenses", + "files": [ + "__init__.py", + "_spdx.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/platformdirs", + "files": [ + "__init__.py", + "__main__.py", + "android.py", + "macos.py", + "py.typed", + "version.py", + "windows.py", + "api.py", + "unix.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/platformdirs-4.4.0.dist-info", + "files": [ + "WHEEL", + "licenses", + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/platformdirs-4.4.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/tomli", + "files": [ + "py.typed", + "__init__.py", + "_parser.py", + "_re.py", + "_types.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/tomli-2.4.0.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "licenses", + "INSTALLER", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/tomli-2.4.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/wheel", + "files": [ + "_metadata.py", + "_bdist_wheel.py", + "_setuptools_logging.py", + "bdist_wheel.py", + "macosx_libfile.py", + "metadata.py", + "wheelfile.py", + "__init__.py", + "__main__.py", + "_commands" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/wheel-0.46.3.dist-info", + "files": [ + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "entry_points.txt", + "licenses", + "INSTALLER" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/wheel-0.46.3.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/wheel/_commands", + "files": [ + "convert.py", + "pack.py", + "tags.py", + "unpack.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/zipp", + "files": [ + "_functools.py", + "compat", + "glob.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/zipp-3.23.0.dist-info", + "files": [ + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/zipp-3.23.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/_vendor/zipp/compat", + "files": [ + "__init__.py", + "overlay.py", + "py310.py", + "py313.py" + ] + }, + { + "added": [], + "changed_count": 24, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/command", + "files": [ + "alias.py", + "bdist_rpm.py", + "egg_info.py", + "install_egg_info.py", + "install_scripts.py", + "sdist.py", + "setopt.py", + "build_py.py", + "dist_info.py", + "easy_install.py", + "bdist_egg.py", + "build.py", + "build_ext.py", + "install.py", + "install_lib.py", + "rotate.py", + "test.py", + "__init__.py", + "_requirestxt.py", + "bdist_wheel.py", + "build_clib.py", + "develop.py", + "editable_wheel.py", + "saveopts.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/compat", + "files": [ + "py310.py", + "py311.py", + "py312.py", + "py39.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/config", + "files": [ + "__init__.py", + "setupcfg.py", + "setuptools.schema.json", + "NOTICE", + "_apply_pyprojecttoml.py", + "_validate_pyproject", + "distutils.schema.json", + "expand.py", + "pyprojecttoml.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/setuptools/config/_validate_pyproject", + "files": [ + "__init__.py", + "error_reporting.py", + "extra_validations.py", + "fastjsonschema_exceptions.py", + "fastjsonschema_validations.py", + "formats.py", + "NOTICE" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/six-1.17.0.dist-info", + "files": [ + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/sniffio", + "files": [ + "__init__.py", + "_impl.py", + "_tests", + "_version.py", + "py.typed" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/sniffio-1.3.1.dist-info", + "files": [ + "INSTALLER", + "LICENSE", + "LICENSE.APACHE2", + "LICENSE.MIT", + "METADATA", + "RECORD", + "WHEEL", + "top_level.txt" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/sniffio/_tests", + "files": [ + "test_sniffio.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/termcolor-1.1.0.dist-info", + "files": [ + "REQUESTED", + "WHEEL", + "licenses", + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/termcolor-1.1.0.dist-info/licenses", + "files": [ + "COPYING.txt" + ] + }, + { + "added": [], + "changed_count": 37, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado", + "files": [ + "iostream.py", + "simple_httpclient.py", + "speedups.pyi", + "httputil.py", + "routing.py", + "_locale_data.py", + "autoreload.py", + "gen.py", + "http1connection.py", + "locks.py", + "netutil.py", + "web.py", + "auth.py", + "escape.py", + "options.py", + "process.py", + "py.typed", + "__init__.py", + "httpclient.py", + "ioloop.py", + "log.py", + "queues.py", + "tcpclient.py", + "test", + "testing.py", + "curl_httpclient.py", + "speedups.abi3.so", + "util.py", + "websocket.py", + "__init__.pyi", + "httpserver.py", + "platform", + "template.py", + "concurrent.py", + "locale.py", + "tcpserver.py", + "wsgi.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado-6.5.4.dist-info", + "files": [ + "top_level.txt", + "INSTALLER", + "METADATA", + "RECORD", + "REQUESTED", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado-6.5.4.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/platform", + "files": [ + "__init__.py", + "asyncio.py", + "caresresolver.py", + "twisted.py" + ] + }, + { + "added": [], + "changed_count": 40, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test", + "files": [ + "locks_test.py", + "runtests.py", + "simple_httpclient_test.py", + "tcpserver_test.py", + "template_test.py", + "test.key", + "util.py", + "escape_test.py", + "gen_test.py", + "httpclient_test.py", + "httpserver_test.py", + "import_test.py", + "iostream_test.py", + "log_test.py", + "static", + "__main__.py", + "http1connection_test.py", + "ioloop_test.py", + "locale_test.py", + "websocket_test.py", + "wsgi_test.py", + "httputil_test.py", + "util_test.py", + "web_test.py", + "circlerefs_test.py", + "netutil_test.py", + "routing_test.py", + "templates", + "asyncio_test.py", + "csv_translations", + "curl_httpclient_test.py", + "options_test_types.cfg", + "queues_test.py", + "static_foo.txt", + "testing_test.py", + "twisted_test.py", + "__init__.py", + "options_test.cfg", + "tcpclient_test.py", + "test.crt" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/csv_translations", + "files": [ + "fr_FR.csv" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/gettext_translations", + "files": [ + "fr_FR" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/gettext_translations/fr_FR", + "files": [ + "LC_MESSAGES" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/gettext_translations/fr_FR/LC_MESSAGES", + "files": [ + "tornado_test.mo", + "tornado_test.po" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/static", + "files": [ + "dir", + "robots.txt", + "sample.xml", + "sample.xml.bz2", + "sample.xml.gz" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/static/dir", + "files": [ + "index.html" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tornado/test/templates", + "files": [ + "utf8.html" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/typing_extensions-4.16.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/typing_extensions-4.16.0.dist-info/licenses", + "files": [ + "LICENSE" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tzlocal", + "files": [ + "windows_tz.py", + "__init__.py", + "unix.py", + "utils.py", + "win32.py" + ] + }, + { + "added": [], + "changed_count": 8, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/tzlocal-5.1.dist-info", + "files": [ + "RECORD", + "REQUESTED", + "WHEEL", + "top_level.txt", + "zip-safe", + "INSTALLER", + "LICENSE.txt", + "METADATA" + ] + }, + { + "added": [], + "changed_count": 16, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3", + "files": [ + "_base_connection.py", + "connection.py", + "__init__.py", + "_request_methods.py", + "_version.py", + "connectionpool.py", + "exceptions.py", + "fields.py", + "util", + "contrib", + "http2", + "py.typed", + "response.py", + "filepost.py", + "poolmanager.py", + "_collections.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3-2.8.0.dist-info", + "files": [ + "INSTALLER", + "METADATA", + "RECORD", + "WHEEL", + "licenses" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3-2.8.0.dist-info/licenses", + "files": [ + "LICENSE.txt" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3/contrib", + "files": [ + "emscripten", + "pyopenssl.py", + "socks.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3/contrib/emscripten", + "files": [ + "connection.py", + "emscripten_fetch_worker.js", + "fetch.py", + "request.py", + "response.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3/http2", + "files": [ + "connection.py", + "probe.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 13, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/urllib3/util", + "files": [ + "proxy.py", + "request.py", + "ssl_.py", + "ssl_match_hostname.py", + "ssltransport.py", + "timeout.py", + "url.py", + "util.py", + "__init__.py", + "connection.py", + "response.py", + "retry.py", + "wait.py" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn", + "files": [ + "authentication", + "helpers", + "py.typed", + "registration", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn-2.0.0.dist-info", + "files": [ + "WHEEL", + "top_level.txt", + "INSTALLER", + "LICENSE", + "METADATA", + "RECORD", + "REQUESTED" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/authentication", + "files": [ + "__init__.py", + "generate_authentication_options.py", + "verify_authentication_response.py" + ] + }, + { + "added": [], + "changed_count": 32, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/helpers", + "files": [ + "aaguid_to_string.py", + "asn1", + "structs.py", + "base64url_to_bytes.py", + "encode_cbor.py", + "parse_backup_flags.py", + "verify_signature.py", + "algorithms.py", + "byteslike_to_bytes.py", + "decoded_public_key_to_cryptography.py", + "parse_cbor.py", + "parse_registration_credential_json.py", + "cose.py", + "parse_attestation_statement.py", + "parse_authentication_credential_json.py", + "validate_certificate_chain.py", + "__init__.py", + "generate_challenge.py", + "generate_user_handle.py", + "parse_client_data_json.py", + "tpm", + "verify_safetynet_timestamp.py", + "decode_credential_public_key.py", + "hash_by_alg.py", + "options_to_json.py", + "pem_cert_bytes_to_open_ssl_x509.py", + "snake_case_to_camel_case.py", + "exceptions.py", + "known_root_certs.py", + "bytes_to_base64url.py", + "parse_attestation_object.py", + "parse_authenticator_data.py" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/helpers/asn1", + "files": [ + "__init__.py", + "android_key.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/helpers/tpm", + "files": [ + "__init__.py", + "parse_cert_info.py", + "parse_pub_area.py", + "structs.py" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/registration", + "files": [ + "formats", + "generate_registration_options.py", + "verify_registration_response.py", + "__init__.py" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/.venv/lib/python3.12/site-packages/webauthn/registration/formats", + "files": [ + "__init__.py", + "android_key.py", + "android_safetynet.py", + "apple.py", + "fido_u2f.py", + "packed.py", + "tpm.py" + ] + }, + { + "added": [ + "config" + ], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/app", + "files": [ + "config" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/crafty/app/classes", + "files": [ + "logging", + "servers", + "steamcmd", + "web", + "big_bucket", + "controllers", + "exceptions", + "installers", + "models", + "remote_stats", + "shared", + "helpers" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/classes/web", + "files": [ + "webhooks", + "routes" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes", + "files": [ + "metrics", + "api" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api", + "files": [ + "roles", + "servers", + "users", + "auth", + "crafty" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/crafty", + "files": [ + "clogs", + "imports", + "antilockout", + "config", + "stats", + "upload", + "announcements" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/roles", + "files": [ + "role" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/servers", + "files": [ + "server" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/servers/server", + "files": [ + "webhooks", + "backups", + "tasks" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/servers/server/backups", + "files": [ + "backup" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/servers/server/tasks", + "files": [ + "task" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/servers/server/webhooks", + "files": [ + "webhook" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/classes/web/routes/api/users", + "files": [ + "user" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/config_original", + "files": [ + "default.json" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/frontend", + "files": [ + "static", + "templates" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static", + "files": [ + "assets" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets", + "files": [ + "css", + "fonts", + "images", + "js", + "vendors" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/css", + "files": [ + "partial", + "themes", + "vendors", + "dark", + "internal", + "shared" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/css/shared", + "files": [ + "screens" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/fonts", + "files": [ + "Atkinson_Hyperlegible_Next", + "Roboto", + "Sarabun" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/fonts/Atkinson_Hyperlegible_Next", + "files": [ + "static" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/images", + "files": [ + "credits", + "sprites", + "faces-clipart", + "auth" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/js", + "files": [ + "shared" + ] + }, + { + "added": [], + "changed_count": 10, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors", + "files": [ + "ace-builds", + "moment", + "ti-icons", + "typicons", + "css", + "flag-icon-css", + "js", + "mdi", + "phosphoricons", + "vanilla-datetimerange-picker" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/ace-builds", + "files": [ + "src-min" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/ace-builds/src-min", + "files": [ + "snippets" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/flag-icon-css", + "files": [ + "css", + "flags" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/flag-icon-css/flags", + "files": [ + "1x1", + "4x3" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/mdi", + "files": [ + "css", + "fonts" + ] + }, + { + "added": [], + "changed_count": 6, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/phosphoricons", + "files": [ + "bold", + "duotone", + "fill", + "light", + "regular", + "thin" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/crafty/app/frontend/static/assets/vendors/ti-icons", + "files": [ + "css", + "fonts" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/app/frontend/templates", + "files": [ + "panel", + "server", + "setup", + "public" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/frontend/templates/panel", + "files": [ + "parts" + ] + }, + { + "added": [ + "status" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/app/migrations", + "files": [ + "status" + ] + }, + { + "added": [ + "20240308_multi-backup.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/crafty/app/migrations/status", + "files": [ + "20240308_multi-backup.json" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/tests", + "files": [ + "classes" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/crafty/tests/classes", + "files": [ + "models", + "shared", + "web", + "helpers" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/crafty/tests/classes/web", + "files": [ + "api" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "bin" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/bin", + "files": [ + "python3.12" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 5116, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "registry.gitlab.com/crafty-controller/crafty-4:4.11.0", + "mounts": [ + { + "class": "named-declared", + "files": 8, + "name": "volgate-craftycontroller_crafty_logs", + "sample": [ + "auth_tracker.log", + "session.log", + "auth.log", + "audit.log", + "schedule.log", + "cmd_queue.log", + "commander.log", + "tornado-access.log" + ], + "source": "/var/lib/docker/volumes/volgate-craftycontroller_crafty_logs/_data", + "target": "/crafty/logs", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-craftycontroller_crafty_servers", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-craftycontroller_crafty_servers/_data", + "target": "/crafty/servers", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 16, + "name": "volgate-craftycontroller_crafty_config", + "sample": [ + "default-creds.txt", + "bigbucket.json", + "logging.json", + "session.lock", + "version.json", + "steamapps.json", + "motd_format.json", + "hytale.json", + "config.json", + "credits.json", + "default.json", + "web/certs/commander.key.pem", + "web/certs/commander.cert.pem", + "db/crafty.sqlite", + "db/crafty.sqlite-shm", + "db/crafty.sqlite-wal" + ], + "source": "/var/lib/docker/volumes/volgate-craftycontroller_crafty_config/_data", + "target": "/crafty/app/config", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-craftycontroller_crafty_import", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-craftycontroller_crafty_import/_data", + "target": "/crafty/import", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-craftycontroller_crafty_backups", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-craftycontroller_crafty_backups/_data", + "target": "/crafty/backups", + "writable_by_app": "yes" + } + ], + "name": "crafty-controller", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "crafty_backups", + "crafty_config", + "crafty_import", + "crafty_logs", + "crafty_servers" + ], + "env_keys": [ + "CRAFTY_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "fixture Crafty: seed OK \u2014 crafty: POST /api/v2/roles http=200 {\"status\":\"ok\",\"data\":{\"role_id\":1}}" + ], + "fixture": "fixture Crafty: seed OK \u2014 crafty: POST /api/v2/roles http=200 {\"status\":\"ok\",\"data\":{\"role_id\":1}}", + "ports": [ + 8443 + ] + }, + "reasons": [ + "crafty-controller: declared volume /crafty/servers is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "crafty-controller: declared volume /crafty/import is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "crafty-controller: declared volume /crafty/backups is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/dawarich/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/dawarich/probe.json new file mode 100644 index 00000000..9bb78d8c --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/dawarich/probe.json @@ -0,0 +1,361 @@ +{ + "probe": { + "app": "dawarich", + "containers": [ + { + "diff_added": 5111, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "var" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "app" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 5116, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "freikin/dawarich:1.15.3", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-dawarich_dawarich_watched", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_watched/_data", + "target": "/var/app/tmp/imports/watched", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-dawarich_dawarich_storage", + "sample": [ + ".keep" + ], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_storage/_data", + "target": "/var/app/storage", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 646, + "name": "volgate-dawarich_dawarich_public", + "sample": [ + "400.html", + "icon.svg", + "site.webmanifest", + "favicon.ico", + "404.html", + "apple-touch-icon-precomposed.png", + "apple-touch-icon.png", + "406-unsupported-browser.html", + "icon-512.png", + "422.html", + "500.html", + "icon-192-maskable.png", + "icon-512-maskable.png", + "robots.txt", + "icon-192.png", + "icon.png", + ".well-known/assetlinks.json", + ".well-known/apple-app-site-association", + "assets/turbo.min-b86d83036ff04169e5bf3ebbc82e0ad528456259e47091b448f41a3cadabdb40.js.gz", + "assets/achievements-de86cbccec6f7fcb81e35bc8c035982f0192a543534d9d29486cd2d9cd383504.css", + "assets/application-0a04ba66afa1fa29d9079d22048b5ff5a211f1b597cc569f315784b4f21e68d6.css.gz", + "assets/application-6739e9e5befc5afb1c8035d71ddc83acb274c0ccb24a6171c1e27cc5aeb57e11.js.gz", + "assets/maps_maplibre_panel-2143bca483b257f4798b58d75803ede7d622e4479c4e0e1b7b02bb8347f65d9a.css.gz", + "assets/Inter-roman.latin-ext.var-46bc23ba7e33ea447579cd95b95f34665d7560377065b72f3a77df8bca4b0e5c.woff2", + "assets/Inter-italic.latin-ext.var-802705fb8496b82eda3f410c7e70a35c9407ba98b97cc5d9754db82750466fad.woff2", + "assets/trix-27b67936197943926cb14d19903e2a81f4ed2cb745aec0e8f198e70ddf292774.css", + "assets/posthog-e801a7c556e92fcb63d04dd9296eca08930ce3eb785518770ed3f60b84e62b02.js", + "assets/actiontext-7c6127c5682cea9debf5454351dae886079b68330ba4f5299bd31d4de53a761b.css", + "assets/mp4-muxer-3395e507185a33132f10b664d1c577e8593fec15d75b952e629d828f9b684ae4.js.gz", + "assets/Inter-roman.cyrillic.var-8aa524d3da3b8fd4a03ff2d0d41ea50520113fb2e8ae57c15079dabea44b3529.woff2", + "assets/activestorage.esm-3f2e9c040e7870f701a98bbbb1c77c979bbbdab80af967b59174f14d9388a0c1.js", + "assets/turbo.min.js-c6732dc7c1683ff78fbfb710f7dda227e58db136b253b8d07628207a5ccdb6b7.map.gz", + "assets/activestorage-540a3fb0ba30935e8ef6a0c69d58dec4561a97dcfd297908db089c4d725bb22a.js.gz", + "assets/application.tailwind-b198a91fdd7f7b90dc81a8108870b999692bb21890338a4cc47bc0c129280624.css", + "assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js", + "assets/brand_fonts-3cf2ea412ef4dfc5717c1bd2357c4f10cfcb0cfa8f2df789bad54925d8ac4d36.css", + "assets/logo-e019d04aed76f3c68a9289e687cc788067b9c0a283949e7cac9a6ba6aef8b2fc.svg.gz", + "assets/Inter-roman.alternates.var-29781a209d7978155bf343eb1653779269965fa4a43d504b1fb361ab20e8487b.woff2", + "assets/favicon-2e5b300516831fcc0f9b76243d556ca802455bb2764cf158b36ecf3c69147ca8.jpeg", + "assets/manifest-597b5199768f5efff6ec880a4180aec95099b04608cc46e56dfe4e0940ee4665.js" + ], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_public/_data", + "target": "/var/app/public", + "writable_by_app": "yes" + } + ], + "name": "dawarich", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgis/postgis:17-3.5-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 2358, + "name": "volgate-dawarich_dawarich_db_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/2612", + "base/5/1418", + "base/5/6117", + "base/5/13510_fsm", + "base/5/2655", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/13500_vm", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm", + "base/5/6106", + "base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_db_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "dawarich-db", + "restarts": null, + "status": "running", + "uid": 70 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7.4-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-dawarich_dawarich_redis", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_redis/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "dawarich-redis", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 4475, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "var" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "app" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4479, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "freikin/dawarich:1.15.3", + "mounts": [ + { + "class": "named-declared", + "files": 646, + "name": "volgate-dawarich_dawarich_public", + "sample": [ + "400.html", + "icon.svg", + "site.webmanifest", + "favicon.ico", + "404.html", + "apple-touch-icon-precomposed.png", + "apple-touch-icon.png", + "406-unsupported-browser.html", + "icon-512.png", + "422.html", + "500.html", + "icon-192-maskable.png", + "icon-512-maskable.png", + "robots.txt", + "icon-192.png", + "icon.png", + ".well-known/assetlinks.json", + ".well-known/apple-app-site-association", + "assets/turbo.min-b86d83036ff04169e5bf3ebbc82e0ad528456259e47091b448f41a3cadabdb40.js.gz", + "assets/achievements-de86cbccec6f7fcb81e35bc8c035982f0192a543534d9d29486cd2d9cd383504.css", + "assets/application-0a04ba66afa1fa29d9079d22048b5ff5a211f1b597cc569f315784b4f21e68d6.css.gz", + "assets/application-6739e9e5befc5afb1c8035d71ddc83acb274c0ccb24a6171c1e27cc5aeb57e11.js.gz", + "assets/maps_maplibre_panel-2143bca483b257f4798b58d75803ede7d622e4479c4e0e1b7b02bb8347f65d9a.css.gz", + "assets/Inter-roman.latin-ext.var-46bc23ba7e33ea447579cd95b95f34665d7560377065b72f3a77df8bca4b0e5c.woff2", + "assets/Inter-italic.latin-ext.var-802705fb8496b82eda3f410c7e70a35c9407ba98b97cc5d9754db82750466fad.woff2", + "assets/trix-27b67936197943926cb14d19903e2a81f4ed2cb745aec0e8f198e70ddf292774.css", + "assets/posthog-e801a7c556e92fcb63d04dd9296eca08930ce3eb785518770ed3f60b84e62b02.js", + "assets/actiontext-7c6127c5682cea9debf5454351dae886079b68330ba4f5299bd31d4de53a761b.css", + "assets/mp4-muxer-3395e507185a33132f10b664d1c577e8593fec15d75b952e629d828f9b684ae4.js.gz", + "assets/Inter-roman.cyrillic.var-8aa524d3da3b8fd4a03ff2d0d41ea50520113fb2e8ae57c15079dabea44b3529.woff2", + "assets/activestorage.esm-3f2e9c040e7870f701a98bbbb1c77c979bbbdab80af967b59174f14d9388a0c1.js", + "assets/turbo.min.js-c6732dc7c1683ff78fbfb710f7dda227e58db136b253b8d07628207a5ccdb6b7.map.gz", + "assets/activestorage-540a3fb0ba30935e8ef6a0c69d58dec4561a97dcfd297908db089c4d725bb22a.js.gz", + "assets/application.tailwind-b198a91fdd7f7b90dc81a8108870b999692bb21890338a4cc47bc0c129280624.css", + "assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js", + "assets/brand_fonts-3cf2ea412ef4dfc5717c1bd2357c4f10cfcb0cfa8f2df789bad54925d8ac4d36.css", + "assets/logo-e019d04aed76f3c68a9289e687cc788067b9c0a283949e7cac9a6ba6aef8b2fc.svg.gz", + "assets/Inter-roman.alternates.var-29781a209d7978155bf343eb1653779269965fa4a43d504b1fb361ab20e8487b.woff2", + "assets/favicon-2e5b300516831fcc0f9b76243d556ca802455bb2764cf158b36ecf3c69147ca8.jpeg", + "assets/manifest-597b5199768f5efff6ec880a4180aec95099b04608cc46e56dfe4e0940ee4665.js" + ], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_public/_data", + "target": "/var/app/public", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-dawarich_dawarich_watched", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_watched/_data", + "target": "/var/app/tmp/imports/watched", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-dawarich_dawarich_storage", + "sample": [ + ".keep" + ], + "source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_storage/_data", + "target": "/var/app/storage", + "writable_by_app": "yes" + } + ], + "name": "dawarich-sidekiq", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "dawarich_db_data", + "dawarich_public", + "dawarich_redis", + "dawarich_storage", + "dawarich_watched" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY_BASE", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 403", + "172.27.0.4:3000/ -> 403", + "fixture Dawarich: seed OK \u2014 dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)" + ], + "fixture": "fixture Dawarich: seed OK \u2014 dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)", + "ports": [ + 3000 + ] + }, + "reasons": [ + "dawarich-redis: declared volume /data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/docmost/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/docmost/probe.json new file mode 100644 index 00000000..05bc2f60 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/docmost/probe.json @@ -0,0 +1,223 @@ +{ + "probe": { + "app": "docmost", + "containers": [ + { + "diff_added": 5, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "apps" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/apps", + "files": [ + "client" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/apps/client", + "files": [ + "dist" + ] + }, + { + "added": [ + "index-template.html" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/app/apps/client/dist", + "files": [ + "index-template.html" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 11, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "docmost/docmost:0.96.0", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-docmost_docmost_storage", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-docmost_docmost_storage/_data", + "target": "/app/data/storage", + "writable_by_app": "yes" + } + ], + "name": "docmost", + "restarts": null, + "status": "running", + "uid": 1000 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1589, + "name": "volgate-docmost_docmost_postgres_data", + "sample": [ + "18/docker/pg_ident.conf", + "18/docker/pg_hba.conf", + "18/docker/postmaster.pid", + "18/docker/postgresql.conf", + "18/docker/PG_VERSION", + "18/docker/postgresql.auto.conf", + "18/docker/postmaster.opts", + "18/docker/base/5/2612", + "18/docker/base/5/1418", + "18/docker/base/5/6117", + "18/docker/base/5/13510_fsm", + "18/docker/base/5/2655", + "18/docker/base/5/3609", + "18/docker/base/5/2662", + "18/docker/base/5/2683", + "18/docker/base/5/2832", + "18/docker/base/5/2679", + "18/docker/base/5/2608_vm", + "18/docker/base/5/2673", + "18/docker/base/5/2690", + "18/docker/base/5/2336", + "18/docker/base/5/2754", + "18/docker/base/5/2701", + "18/docker/base/5/4168", + "18/docker/base/5/2650", + "18/docker/base/5/2839", + "18/docker/base/5/2688", + "18/docker/base/5/2840", + "18/docker/base/5/1247_fsm", + "18/docker/base/5/3997", + "18/docker/base/5/3456_vm", + "18/docker/base/5/2667", + "18/docker/base/5/2678", + "18/docker/base/5/2696", + "18/docker/base/5/3456", + "18/docker/base/5/2228", + "18/docker/base/5/1259_fsm", + "18/docker/base/5/6351", + "18/docker/base/5/6106", + "18/docker/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-docmost_docmost_postgres_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "docmost-postgres", + "restarts": null, + "status": "running", + "uid": 70 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-docmost_docmost_redis_data", + "sample": [ + "appendonlydir/appendonly.aof.1.incr.aof", + "appendonlydir/appendonly.aof.manifest", + "appendonlydir/appendonly.aof.1.base.rdb" + ], + "source": "/var/lib/docker/volumes/volgate-docmost_docmost_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "docmost-redis", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "docmost_postgres_data", + "docmost_redis_data", + "docmost_storage" + ], + "env_keys": [ + "APP_SECRET", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 200", + "172.28.0.4:3000/ -> 200", + "fixture Docmost: seed OK \u2014 docmost: /api/auth/setup http=200 rc=0" + ], + "fixture": "fixture Docmost: seed OK \u2014 docmost: /api/auth/setup http=200 rc=0", + "ports": [ + 3000 + ] + }, + "reasons": [ + "docmost: declared volume /app/data/storage is EMPTY after the exercise \u2014 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'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/emby/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/emby/probe.json new file mode 100644 index 00000000..29dbd1f4 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/emby/probe.json @@ -0,0 +1,123 @@ +{ + "probe": { + "app": "emby", + "containers": [ + { + "diff_added": 205, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "media", + "config" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "media", + "config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 207, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "emby/embyserver:4.11.0.4", + "mounts": [ + { + "class": "bind", + "files": 3, + "name": null, + "sample": [ + "books/metadata.db-wal", + "books/metadata.db", + "books/metadata.db-shm" + ], + "source": "/srv/felhom-gate/hdd/userdata/media", + "target": "/media", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 46, + "name": "volgate-emby_emby_config", + "sample": [ + "logs/hardware_detection-63926547843.txt", + "logs/readme.txt", + "logs/embyserver.txt", + "plugins/Emby.Dlna.dll", + "plugins/NfoMetadata.dll", + "plugins/OpenSubtitles.dll", + "plugins/Emby.XmlTV.dll", + "plugins/StudioImages.dll", + "plugins/Emby.Webhooks.dll", + "plugins/MBBackup.dll", + "plugins/Fanart.dll", + "plugins/Emby.Server.CinemaMode.dll", + "plugins/BlurayMounter.dll", + "plugins/Emby.M3UTuner.dll", + "plugins/DvdMounter.dll", + "plugins/OMDb.dll", + "plugins/MusicBrainz.dll", + "plugins/Emby.PortMapper.dll", + "plugins/AudioDb.dll", + "plugins/EmbyGuideData.dll", + "plugins/Tvdb.dll", + "plugins/MovieDb.dll", + "config/system.xml", + "config/users/adf1dbe640d3417fa792f025e60b6b44/policy.xml", + "cache/httpclient/0fb243ded9649ae6d18059c674a4ae00_1", + "cache/ffmpeg/hwaccels_4.11.0.4.txt", + "cache/ffmpeg/filters_4.11.0.4.txt", + "cache/ffmpeg/decoders_4.11.0.4.txt", + "cache/ffmpeg/version_4.11.0.4.txt", + "cache/ffmpeg/encoders_4.11.0.4.txt", + "cache/ffmpeg/protocols_4.11.0.4.txt", + "data/activitylog.db", + "data/lastversion.txt", + "data/library.db", + "data/library.db-wal", + "data/device.txt", + "data/activitylog.db-shm", + "data/authentication.db-wal", + "data/activitylog.db-wal", + "data/wan.dat" + ], + "source": "/var/lib/docker/volumes/volgate-emby_emby_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "emby", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "emby_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8096/ -> 302" + ], + "fixture": null, + "ports": [ + 8096 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/ghost/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/ghost/probe.json new file mode 100644 index 00000000..4df8d96e --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/ghost/probe.json @@ -0,0 +1,63 @@ +{ + "probe": { + "app": "ghost", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghost:6.67.0-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 7, + "name": "volgate-ghost_ghost_content", + "sample": [ + "logs/https___blog_gate_invalid_production.error.log", + "logs/https___blog_gate_invalid_production.log", + "themes/source", + "themes/casper", + "public/.well-known/recommendations.json", + "public/admin-auth/index.html", + "data/ghost.db" + ], + "source": "/var/lib/docker/volumes/volgate-ghost_ghost_content/_data", + "target": "/var/lib/ghost/content", + "writable_by_app": "yes" + } + ], + "name": "ghost", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "ghost_content" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:2368/ -> 301" + ], + "fixture": null, + "ports": [ + 2368 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gitea/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gitea/probe.json new file mode 100644 index 00000000..da66224e --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gitea/probe.json @@ -0,0 +1,197 @@ +{ + "probe": { + "app": "gitea", + "containers": [ + { + "diff_added": 16, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data" + ], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "data" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "gitea" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/gitea", + "files": [ + "gitea" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc", + "files": [ + "s6", + "ssh" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc/s6", + "files": [ + ".s6-svscan", + "gitea", + "openssh" + ] + }, + { + "added": [ + "control", + "lock" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/s6/.s6-svscan", + "files": [ + "control", + "lock" + ] + }, + { + "added": [ + "event", + "supervise" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/s6/gitea", + "files": [ + "event", + "supervise" + ] + }, + { + "added": [ + "control", + "death_tally", + "lock", + "status" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/s6/gitea/supervise", + "files": [ + "control", + "death_tally", + "lock", + "status" + ] + }, + { + "added": [ + "supervise", + "event" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/s6/openssh", + "files": [ + "supervise", + "event" + ] + }, + { + "added": [ + "control", + "death_tally", + "lock", + "status" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/s6/openssh/supervise", + "files": [ + "control", + "death_tally", + "lock", + "status" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/ssh", + "files": [ + "sshd_config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 27, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "gitea/gitea:1.27.3", + "mounts": [ + { + "class": "named-declared", + "files": 8, + "name": "volgate-gitea_gitea_data", + "sample": [ + "gitea/conf/app.ini", + "git/.ssh/environment", + "ssh/ssh_host_rsa_key.pub", + "ssh/ssh_host_rsa_key", + "ssh/ssh_host_ed25519_key", + "ssh/ssh_host_ecdsa_key.pub", + "ssh/ssh_host_ed25519_key.pub", + "ssh/ssh_host_ecdsa_key" + ], + "source": "/var/lib/docker/volumes/volgate-gitea_gitea_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "gitea", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "gitea_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 200" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/glance/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/glance/probe.json new file mode 100644 index 00000000..474f14b3 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/glance/probe.json @@ -0,0 +1,78 @@ +{ + "probe": { + "app": "glance", + "containers": [ + { + "diff_added": 1, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [ + "config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app", + "files": [ + "config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 2, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "glanceapp/glance:v0.8.5", + "mounts": [ + { + "class": "named-declared", + "files": 1, + "name": "volgate-glance_glance_config", + "sample": [ + "glance.yml" + ], + "source": "/var/lib/docker/volumes/volgate-glance_glance_config/_data", + "target": "/app/config", + "writable_by_app": "yes" + } + ], + "name": "glance", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "glance_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8080/ -> 200" + ], + "fixture": null, + "ports": [ + 8080 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gokapi/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gokapi/probe.json new file mode 100644 index 00000000..9f0e2034 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gokapi/probe.json @@ -0,0 +1,96 @@ +{ + "probe": { + "app": "gokapi", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [ + "config", + "data" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app", + "files": [ + "config", + "data" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 3, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "f0rc3/gokapi:v1.9.6", + "mounts": [ + { + "class": "named-declared", + "files": 4, + "name": "volgate-gokapi_gokapi_data", + "sample": [ + "gokapi.sqlite-wal", + "gokapi.sqlite", + "log.txt", + "gokapi.sqlite-shm" + ], + "source": "/var/lib/docker/volumes/volgate-gokapi_gokapi_data/_data", + "target": "/app/data", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-gokapi_gokapi_config", + "sample": [ + "config.json" + ], + "source": "/var/lib/docker/volumes/volgate-gokapi_gokapi_config/_data", + "target": "/app/config", + "writable_by_app": "yes" + } + ], + "name": "gokapi", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "gokapi_config", + "gokapi_data" + ], + "env_keys": [ + "DOMAIN", + "GOKAPI_PASSWORD", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:53842/ -> 200" + ], + "fixture": null, + "ports": [ + 53842 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grafana/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grafana/probe.json new file mode 100644 index 00000000..249c6538 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grafana/probe.json @@ -0,0 +1,116 @@ +{ + "probe": { + "app": "grafana", + "containers": [ + { + "diff_added": 13, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "usr" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "share" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 28, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "grafana/grafana:13.2.3", + "mounts": [ + { + "class": "named-declared", + "files": 939, + "name": "volgate-grafana_grafana_data", + "sample": [ + "grafana.db", + "plugins/grafana-lokiexplore-app/963.js.map", + "plugins/grafana-lokiexplore-app/8067.js.map", + "plugins/grafana-lokiexplore-app/3069.js", + "plugins/grafana-lokiexplore-app/5281.js", + "plugins/grafana-lokiexplore-app/8077.js.map", + "plugins/grafana-lokiexplore-app/3803.js", + "plugins/grafana-lokiexplore-app/2531.js", + "plugins/grafana-lokiexplore-app/1949.js", + "plugins/grafana-lokiexplore-app/8990.js", + "plugins/grafana-lokiexplore-app/6842.js", + "plugins/grafana-lokiexplore-app/9436.js.map", + "plugins/grafana-lokiexplore-app/6178.js", + "plugins/grafana-lokiexplore-app/4623.js", + "plugins/grafana-lokiexplore-app/3252.js.map", + "plugins/grafana-lokiexplore-app/75.js.map", + "plugins/grafana-lokiexplore-app/7409.js", + "plugins/grafana-lokiexplore-app/4803.js.map", + "plugins/grafana-lokiexplore-app/821.js", + "plugins/grafana-lokiexplore-app/8438.js.map", + "plugins/grafana-lokiexplore-app/2250.js", + "plugins/grafana-lokiexplore-app/3508.js", + "plugins/grafana-lokiexplore-app/4803.js", + "plugins/grafana-lokiexplore-app/087755a1246f96c42579.svg", + "plugins/grafana-lokiexplore-app/2729.js", + "plugins/grafana-lokiexplore-app/9859.js.map", + "plugins/grafana-lokiexplore-app/module.js", + "plugins/grafana-lokiexplore-app/3960.js", + "plugins/grafana-lokiexplore-app/LICENSE.txt", + "plugins/grafana-lokiexplore-app/9701.js", + "plugins/grafana-lokiexplore-app/8389.js", + "plugins/grafana-lokiexplore-app/7409.js.map", + "plugins/grafana-lokiexplore-app/4582.js.map", + "plugins/grafana-lokiexplore-app/9793.js.map", + "plugins/grafana-lokiexplore-app/8627.js.map", + "plugins/grafana-lokiexplore-app/8627.js", + "plugins/grafana-lokiexplore-app/7557.js", + "plugins/grafana-lokiexplore-app/5888.js.map", + "plugins/grafana-lokiexplore-app/85b746ba2cec564b9a89.svg", + "plugins/grafana-lokiexplore-app/8751.js.map" + ], + "source": "/var/lib/docker/volumes/volgate-grafana_grafana_data/_data", + "target": "/var/lib/grafana", + "writable_by_app": "yes" + } + ], + "name": "grafana", + "restarts": null, + "status": "running", + "uid": 472 + } + ], + "declared_volumes": [ + "grafana_data" + ], + "env_keys": [ + "DOMAIN", + "GF_SECURITY_ADMIN_PASSWORD", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 302" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gramps-web/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gramps-web/probe.json new file mode 100644 index 00000000..3e82b22b --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/gramps-web/probe.json @@ -0,0 +1,260 @@ +{ + "probe": { + "app": "gramps-web", + "containers": [ + { + "diff_added": 121, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "root", + "usr", + "app" + ] + }, + { + "added": [ + "secret" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "secret" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/src", + "files": [ + "gramps_webapi", + "alembic_users" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/src/alembic_users", + "files": [ + "versions" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/app/src/gramps_webapi", + "files": [ + "auth", + "util", + "api" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/src/gramps_webapi/api", + "files": [ + "search", + "resources" + ] + }, + { + "added": [ + ".gramps" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/root", + "files": [ + ".gramps" + ] + }, + { + "added": [ + "grampsdb" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.gramps", + "files": [ + "grampsdb" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/root/gramps", + "files": [ + "gramps60" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/root/gramps/gramps60", + "files": [ + "plugins" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/root/gramps/gramps60/plugins", + "files": [ + "FilterRules" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "lib" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 143, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/gramps-project/grampsweb:v25.6.0", + "mounts": [ + { + "class": "named-declared", + "files": 1, + "name": "volgate-grampsweb_gramps_cache", + "sample": [ + "request_cache/2029240f6d1128be89ddc32729463129" + ], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_cache/_data", + "target": "/app/cache", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-grampsweb_gramps_secret", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_secret/_data", + "target": "/app/secret", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-grampsweb_gramps_tmp", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_tmp/_data", + "target": "/tmp", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-grampsweb_gramps_users", + "sample": [ + "users.sqlite" + ], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_users/_data", + "target": "/app/users", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 2, + "name": "volgate-grampsweb_gramps_db", + "sample": [ + "a6bc6a5b-8996-4df6-aded-8af86d23f81a/name.txt", + "a6bc6a5b-8996-4df6-aded-8af86d23f81a/database.txt" + ], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_db/_data", + "target": "/root/.gramps/grampsdb", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-grampsweb_gramps_index", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_index/_data", + "target": "/app/indexdir", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-grampsweb_gramps_media", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_media/_data", + "target": "/app/media", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 1, + "name": "volgate-grampsweb_gramps_thumb_cache", + "sample": [ + "2029240f6d1128be89ddc32729463129" + ], + "source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_thumb_cache/_data", + "target": "/app/thumbnail_cache", + "writable_by_app": "yes" + } + ], + "name": "gramps-web", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "gramps_cache", + "gramps_db", + "gramps_index", + "gramps_media", + "gramps_secret", + "gramps_thumb_cache", + "gramps_tmp", + "gramps_users" + ], + "env_keys": [ + "DOMAIN", + "GRAMPSWEB_SECRET_KEY", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "fixture GrampsWeb: seed OK \u2014 gramps-web: seeded user drill1c00babf" + ], + "fixture": "fixture GrampsWeb: seed OK \u2014 gramps-web: seeded user drill1c00babf", + "ports": [ + 5000 + ] + }, + "reasons": [ + "gramps-web: declared volume /app/secret is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "gramps-web: declared volume /app/indexdir is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "gramps-web: declared volume /app/media is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grimmory/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grimmory/probe.json new file mode 100644 index 00000000..768605b7 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/grimmory/probe.json @@ -0,0 +1,206 @@ +{ + "probe": { + "app": "grimmory", + "containers": [ + { + "diff_added": 17, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "books" + ], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "books" + ] + }, + { + "added": [ + "data" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app", + "files": [ + "data" + ] + }, + { + "added": [ + "group-", + "passwd-", + "shadow-" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc", + "files": [ + "group-", + "passwd-", + "shadow-" + ] + }, + { + "added": [ + "booklore" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/home", + "files": [ + "booklore" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 24, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghcr.io/grimmory-tools/grimmory:v3.5.0", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/appdata/grimmory/data", + "target": "/app/data", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/grimmory", + "target": "/books", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/import/grimmory", + "target": "/bookdrop", + "writable_by_app": "yes" + } + ], + "name": "grimmory", + "restarts": null, + "status": "running", + "uid": 1000 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "mariadb:11.4", + "mounts": [ + { + "class": "named-declared", + "files": 355, + "name": "volgate-grimmory_grimmory_db", + "sample": [ + "tc.log", + ".my-healthcheck.cnf", + "aria_log.00000001", + "aria_log_control", + "undo001", + "ibtmp1", + "ib_buffer_pool", + "ibdata1", + "undo002", + "multi-master.info", + "mariadb_upgrade_info", + "ddl_recovery.log", + "ib_logfile0", + "undo003", + "performance_schema/db.opt", + "mysql/func.frm", + "mysql/index_stats.MAD", + "mysql/transaction_registry.ibd", + "mysql/time_zone_transition_type.frm", + "mysql/global_priv.MAD", + "mysql/time_zone_leap_second.MAI", + "mysql/column_stats.MAD", + "mysql/time_zone_transition.MAI", + "mysql/plugin.MAD", + "mysql/time_zone.MAD", + "mysql/column_stats.frm", + "mysql/db.MAD", + "mysql/help_keyword.frm", + "mysql/help_relation.frm", + "mysql/procs_priv.MAI", + "mysql/servers.frm", + "mysql/innodb_index_stats.frm", + "mysql/roles_mapping.frm", + "mysql/plugin.MAI", + "mysql/time_zone_name.MAD", + "mysql/user.frm", + "mysql/time_zone.MAI", + "mysql/global_priv.frm", + "mysql/proxies_priv.MAI", + "mysql/time_zone_transition_type.MAI" + ], + "source": "/var/lib/docker/volumes/volgate-grimmory_grimmory_db/_data", + "target": "/var/lib/mysql", + "writable_by_app": "yes" + } + ], + "name": "grimmory-db", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "grimmory_db" + ], + "env_keys": [ + "DB_PASSWORD", + "DB_ROOT_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:6060/ -> 200", + "172.31.0.3:6060/ -> 200" + ], + "fixture": null, + "ports": [ + 6060 + ] + }, + "reasons": [ + "grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/home-assistant/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/home-assistant/probe.json new file mode 100644 index 00000000..fff528d0 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/home-assistant/probe.json @@ -0,0 +1,119 @@ +{ + "probe": { + "app": "home-assistant", + "containers": [ + { + "diff_added": 2308, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "usr", + "root", + "run" + ] + }, + { + "added": [ + ".config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".config" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local", + "files": [ + "lib" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 2600, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/home-assistant/home-assistant:2026.9.4", + "mounts": [ + { + "class": "named-declared", + "files": 22, + "name": "volgate-homeassistant_homeassistant_config", + "sample": [ + "home-assistant_v2.db-shm", + "home-assistant_v2.db-wal", + "home-assistant_v2.db", + "configuration.yaml", + ".ha_run.lock", + "home-assistant.log.1", + "home-assistant.log.fault", + "home-assistant.log", + ".HA_VERSION", + ".storage/core.uuid", + ".storage/core.restore_state", + ".storage/core.entity_registry", + ".storage/http.auth", + ".storage/core.device_registry", + ".storage/http", + ".storage/auth", + ".storage/core.config_entries", + ".storage/homeassistant.exposed_entities", + ".storage/assist_pipeline.pipelines", + "blueprints/script/homeassistant/confirmable_notification.yaml", + "blueprints/automation/homeassistant/notify_leaving_zone.yaml", + "blueprints/automation/homeassistant/motion_light.yaml" + ], + "source": "/var/lib/docker/volumes/volgate-homeassistant_homeassistant_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "home-assistant", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "homeassistant_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8123/ -> 302" + ], + "fixture": null, + "ports": [ + 8123 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homebox/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homebox/probe.json new file mode 100644 index 00000000..b599d7c4 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homebox/probe.json @@ -0,0 +1,72 @@ +{ + "probe": { + "app": "homebox", + "containers": [ + { + "diff_added": 1, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "data" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 1, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/sysadminsmedia/homebox:0.26.2", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-homebox_homebox_data", + "sample": [ + "homebox.db", + "homebox.db-shm", + "homebox.db-wal" + ], + "source": "/var/lib/docker/volumes/volgate-homebox_homebox_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "homebox", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "homebox_data" + ], + "env_keys": [ + "DOMAIN", + "HBOX_AUTH_API_KEY_PEPPER", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:7745/ -> 200" + ], + "fixture": null, + "ports": [ + 7745 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homepage/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homepage/probe.json new file mode 100644 index 00000000..81ea9c02 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/homepage/probe.json @@ -0,0 +1,90 @@ +{ + "probe": { + "app": "homepage", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "app", + "run" + ] + }, + { + "added": [ + "config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app", + "files": [ + "config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/gethomepage/homepage:v1.13.2", + "mounts": [ + { + "class": "bind", + "files": -1, + "name": null, + "sample": [], + "source": "/var/run/docker.sock", + "target": "/var/run/docker.sock", + "writable_by_app": "no-source" + }, + { + "class": "named-declared", + "files": 3, + "name": "volgate-homepage_homepage_config", + "sample": [ + "kubernetes.yaml", + "settings.yaml", + "logs/homepage.log" + ], + "source": "/var/lib/docker/volumes/volgate-homepage_homepage_config/_data", + "target": "/app/config", + "writable_by_app": "yes" + } + ], + "name": "homepage", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "homepage_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 200" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/immich/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/immich/probe.json new file mode 100644 index 00000000..6e58853a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/immich/probe.json @@ -0,0 +1,314 @@ +{ + "probe": { + "app": "immich", + "containers": [ + { + "diff_added": 1, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "cache" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "cache" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 1, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/immich-app/immich-machine-learning:v3.2.4", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-immich_immich_ml_cache", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-immich_immich_ml_cache/_data", + "target": "/cache", + "writable_by_app": "yes" + } + ], + "name": "immich-machine-learning", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 3, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "run", + "etc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc", + "files": [ + "postgresql" + ] + }, + { + "added": [ + "postgresql.conf" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/etc/postgresql", + "files": [ + "postgresql.conf" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 7, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0", + "mounts": [ + { + "class": "named-declared", + "files": 1879, + "name": "volgate-immich_immich_postgres_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/13401_fsm", + "base/5/2612", + "base/5/13410", + "base/5/1418", + "base/5/6117", + "base/5/2655", + "base/5/13406_fsm", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/13401_vm", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm" + ], + "source": "/var/lib/docker/volumes/volgate-immich_immich_postgres_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "immich-postgres", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-immich_immich_redis_data", + "sample": [ + "appendonlydir/appendonly.aof.1.incr.aof", + "appendonlydir/appendonly.aof.manifest", + "appendonlydir/appendonly.aof.1.base.rdb" + ], + "source": "/var/lib/docker/volumes/volgate-immich_immich_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "immich-redis", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 4, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data", + "external" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "data", + "external" + ] + }, + { + "added": [ + "photos" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/external", + "files": [ + "photos" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "src" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/src", + "files": [ + "app" + ] + }, + { + "added": [ + "upload" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/usr/src/app", + "files": [ + "upload" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 7, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/immich-app/immich-server:v3.2.4", + "mounts": [ + { + "class": "bind", + "files": 6, + "name": null, + "sample": [ + "upload/.immich", + "backups/.immich", + "library/.immich", + "profile/.immich", + "encoded-video/.immich", + "thumbs/.immich" + ], + "source": "/srv/felhom-gate/hdd/appdata/immich", + "target": "/usr/src/app/upload", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/photos", + "target": "/external/photos", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "711f413018201c75e07a40945663b7efbf2fb99d957942f85d36d6f1ee9f2bc7", + "sample": [], + "source": "/var/lib/docker/volumes/711f413018201c75e07a40945663b7efbf2fb99d957942f85d36d6f1ee9f2bc7/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "immich-server", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "immich_ml_cache", + "immich_postgres_data", + "immich_redis_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:2283/ -> 200", + "192.168.48.5:2283/ -> 200", + "fixture Immich: seed OK \u2014 immich: seeded album drillalbuma6820f47" + ], + "fixture": "fixture Immich: seed OK \u2014 immich: seeded album drillalbuma6820f47", + "ports": [ + 2283 + ] + }, + "reasons": [ + "immich-machine-learning: declared volume /cache is EMPTY after the exercise \u2014 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 ['/'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/jellyfin/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/jellyfin/probe.json new file mode 100644 index 00000000..72708768 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/jellyfin/probe.json @@ -0,0 +1,157 @@ +{ + "probe": { + "app": "jellyfin", + "containers": [ + { + "diff_added": 7, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "root", + "jellyfin" + ] + }, + { + "added": [ + "Dictionaries" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/jellyfin", + "files": [ + "Dictionaries" + ] + }, + { + "added": [ + ".aspnet" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".aspnet" + ] + }, + { + "added": [ + "DataProtection-Keys" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.aspnet", + "files": [ + "DataProtection-Keys" + ] + }, + { + "added": [ + "key-007ed6d3-8630-4eee-8875-b3a09c521ea0.xml" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.aspnet/DataProtection-Keys", + "files": [ + "key-007ed6d3-8630-4eee-8875-b3a09c521ea0.xml" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 10, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "jellyfin/jellyfin:10.11.11", + "mounts": [ + { + "class": "bind", + "files": 3, + "name": null, + "sample": [ + "books/metadata.db-wal", + "books/metadata.db", + "books/metadata.db-shm" + ], + "source": "/srv/felhom-gate/hdd/userdata/media", + "target": "/media", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 20, + "name": "volgate-jellyfin_jellyfin_config", + "sample": [ + ".jellyfin-data", + "plugins/.jellyfin-plugin", + "plugins/configurations/Jellyfin.Plugin.MusicBrainz.xml", + "plugins/configurations/Jellyfin.Plugin.Tmdb.xml", + "config/database.xml", + "config/system.xml", + "config/.jellyfin-config", + "config/encoding.xml", + "config/logging.default.json", + "root/.jellyfin-root", + "log/log_20261002.log", + "log/.jellyfin-log", + "data/.jellyfin-data", + "data/jellyfin.db", + "data/jellyfin.db-wal", + "data/device.txt", + "data/jellyfin.db-shm", + "data/ScheduledTasks/3a025083-141d-3c17-dd96-d5f9b951287b.js", + "data/ScheduledTasks/f9b057c0-54e9-e6da-ee4a-88ffd146a403.js", + "data/ScheduledTasks/7d8088c1-0902-f1bf-4072-ded42437bcfb.js" + ], + "source": "/var/lib/docker/volumes/volgate-jellyfin_jellyfin_config/_data", + "target": "/config", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 2, + "name": "volgate-jellyfin_jellyfin_cache", + "sample": [ + ".jellyfin-cache", + "transcodes/.jellyfin-transcode" + ], + "source": "/var/lib/docker/volumes/volgate-jellyfin_jellyfin_cache/_data", + "target": "/cache", + "writable_by_app": "yes" + } + ], + "name": "jellyfin", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "jellyfin_cache", + "jellyfin_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8096/ -> 302" + ], + "fixture": null, + "ports": [ + 8096 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/karakeep/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/karakeep/probe.json new file mode 100644 index 00000000..8a037485 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/karakeep/probe.json @@ -0,0 +1,157 @@ +{ + "probe": { + "app": "karakeep", + "containers": [ + { + "diff_added": 203, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "data" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 205, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/karakeep-app/karakeep:0.33.2", + "mounts": [ + { + "class": "named-declared", + "files": 2, + "name": "volgate-karakeep_karakeep_data", + "sample": [ + "db.db", + "queue.db" + ], + "source": "/var/lib/docker/volumes/volgate-karakeep_karakeep_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "karakeep", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 1, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "usr" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "sbin" + ] + }, + { + "added": [ + "docker-init" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/usr/sbin", + "files": [ + "docker-init" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 3, + "diff_unresolved": [], + "exit": 0, + "gid": 65534, + "health": "healthy", + "image": "ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1", + "mounts": [], + "name": "karakeep-chrome", + "restarts": null, + "status": "running", + "uid": 65534 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "getmeili/meilisearch:v1.41.0", + "mounts": [ + { + "class": "named-declared", + "files": 5, + "name": "volgate-karakeep_karakeep_meili", + "sample": [ + "data.ms/VERSION", + "data.ms/tasks/lock.mdb", + "data.ms/tasks/data.mdb", + "data.ms/auth/lock.mdb", + "data.ms/auth/data.mdb" + ], + "source": "/var/lib/docker/volumes/volgate-karakeep_karakeep_meili/_data", + "target": "/meili_data", + "writable_by_app": "yes" + } + ], + "name": "karakeep-meilisearch", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "karakeep_data", + "karakeep_meili" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "MEILI_MASTER_KEY", + "NEXTAUTH_SECRET", + "OPENAI_API_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 307", + "192.168.64.4:3000/ -> 307" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/kimai/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/kimai/probe.json new file mode 100644 index 00000000..2d26dd40 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/kimai/probe.json @@ -0,0 +1,266 @@ +{ + "probe": { + "app": "kimai", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "opt", + "run", + "usr" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/opt", + "files": [ + "kimai" + ] + }, + { + "added": [ + ".env.local" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/opt/kimai", + "files": [ + ".env.local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/opt/kimai/config", + "files": [ + "packages" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/opt/kimai/config/packages", + "files": [ + "monolog.yaml" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local", + "files": [ + "etc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local/etc", + "files": [ + "php" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local/etc/php", + "files": [ + "php.ini" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 14, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "kimai/kimai2:2.67.0", + "mounts": [ + { + "class": "named-declared", + "files": 2038, + "name": "volgate-kimai_kimai_var", + "sample": [ + "installed", + "plugins/.gitkeep", + "cache/.gitkeep", + "cache/prod/annotations.map", + "cache/prod/webpack_encore.cache.php", + "cache/prod/url_generating_routes.php", + "cache/prod/url_matching_routes.php", + "cache/prod/App_KernelProdContainer.preload.php", + "cache/prod/url_generating_routes.php.meta", + "cache/prod/App_KernelProdContainer.php", + "cache/prod/url_matching_routes.php.meta", + "cache/prod/serialization.php", + "cache/prod/validation.php", + "cache/prod/App_KernelProdContainer.php.meta", + "cache/prod/App_KernelProdContainer.php.lock", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectComment.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceTemplate.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityTeamMember.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityTimesheet.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityConfiguration.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoice.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityRole.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityActivity.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityTag.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityRolePermission.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerRate.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomer.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityTimesheetMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityAccessToken.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityActivityMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceTemplateMeta.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectRate.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityTeam.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityBookmark.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerComment.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityExportTemplate.php", + "cache/prod/doctrine/orm/Proxies/__CG__AppEntityProject.php" + ], + "source": "/var/lib/docker/volumes/volgate-kimai_kimai_var/_data", + "target": "/opt/kimai/var", + "writable_by_app": "yes" + } + ], + "name": "kimai", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "mariadb:11.8", + "mounts": [ + { + "class": "named-declared", + "files": 279, + "name": "volgate-kimai_kimai_db_data", + "sample": [ + "tc.log", + ".my-healthcheck.cnf", + "aria_log.00000001", + "aria_log_control", + "undo001", + "ibtmp1", + "ib_buffer_pool", + "ibdata1", + "undo002", + "multi-master.info", + "mariadb_upgrade_info", + "ddl_recovery.log", + "ib_logfile0", + "undo003", + "performance_schema/db.opt", + "mysql/func.frm", + "mysql/index_stats.MAD", + "mysql/transaction_registry.ibd", + "mysql/time_zone_transition_type.frm", + "mysql/global_priv.MAD", + "mysql/time_zone_leap_second.MAI", + "mysql/column_stats.MAD", + "mysql/time_zone_transition.MAI", + "mysql/plugin.MAD", + "mysql/time_zone.MAD", + "mysql/column_stats.frm", + "mysql/db.MAD", + "mysql/help_keyword.frm", + "mysql/help_relation.frm", + "mysql/procs_priv.MAI", + "mysql/servers.frm", + "mysql/innodb_index_stats.frm", + "mysql/roles_mapping.frm", + "mysql/plugin.MAI", + "mysql/time_zone_name.MAD", + "mysql/user.frm", + "mysql/time_zone.MAI", + "mysql/global_priv.frm", + "mysql/proxies_priv.MAI", + "mysql/time_zone_transition_type.MAI" + ], + "source": "/var/lib/docker/volumes/volgate-kimai_kimai_db_data/_data", + "target": "/var/lib/mysql", + "writable_by_app": "yes" + } + ], + "name": "kimai-db", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "kimai_db_data", + "kimai_var" + ], + "env_keys": [ + "ADMIN_EMAIL", + "ADMIN_PASSWORD", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8001/ -> 302", + "192.168.80.3:8001/ -> 302" + ], + "fixture": null, + "ports": [ + 8001 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/komga/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/komga/probe.json new file mode 100644 index 00000000..28a570e0 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/komga/probe.json @@ -0,0 +1,90 @@ +{ + "probe": { + "app": "komga", + "containers": [ + { + "diff_added": 12, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data", + "config" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "data", + "config" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 13, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "gotson/komga:1.28.0", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/comics", + "target": "/data", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 11, + "name": "volgate-komga_komga_config", + "sample": [ + "database.sqlite", + "tasks.sqlite-wal", + "database.sqlite-shm", + "tasks.sqlite", + "database.sqlite-wal", + "tasks.sqlite-shm", + "logs/komga.log", + "lucene/_0.si", + "lucene/_0.cfs", + "lucene/segments_1", + "lucene/_0.cfe" + ], + "source": "/var/lib/docker/volumes/volgate-komga_komga_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "komga", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "komga_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:25600/ -> 200" + ], + "fixture": null, + "ports": [ + 25600 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/mealie/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/mealie/probe.json new file mode 100644 index 00000000..54e8dc7f --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/mealie/probe.json @@ -0,0 +1,94 @@ +{ + "probe": { + "app": "mealie", + "containers": [ + { + "diff_added": 1, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "app", + "etc" + ] + }, + { + "added": [ + "data" + ], + "changed_count": 3, + "db_signature": false, + "dir": "/app", + "files": [ + "data" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc", + "files": [ + "passwd-", + "group-" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 10, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghcr.io/mealie-recipes/mealie:v3.28.0", + "mounts": [ + { + "class": "named-declared", + "files": 5, + "name": "volgate-mealie_mealie_data", + "sample": [ + ".secret", + ".session_secret", + "mealie.log", + "mealie.db", + "users/aeacef6a-b1ac-4b48-9cfd-94d9a92df832/profile.webp" + ], + "source": "/var/lib/docker/volumes/volgate-mealie_mealie_data/_data", + "target": "/app/data", + "writable_by_app": "yes" + } + ], + "name": "mealie", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "mealie_data" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:9000/ -> 200" + ], + "fixture": null, + "ports": [ + 9000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/metube/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/metube/probe.json new file mode 100644 index 00000000..007aeddf --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/metube/probe.json @@ -0,0 +1,224 @@ +{ + "probe": { + "app": "metube", + "containers": [ + { + "diff_added": 13, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "downloads", + "state" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "downloads", + "state" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/app", + "files": [ + "pyproject.toml", + "ui", + "uv.lock", + "app", + "docker-entrypoint.sh" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/app/app", + "files": [ + "dl_formats.py", + "main.py", + "music_metadata.py", + "state_store.py", + "subscriptions.py", + "tests", + "ytdl.py", + "bg_tasks.py", + "url_guard.py" + ] + }, + { + "added": [], + "changed_count": 14, + "db_signature": false, + "dir": "/app/app/tests", + "files": [ + "test_persistent_queue.py", + "test_state_store.py", + "test_ytdl_utils.py", + "conftest.py", + "test_api.py", + "test_dl_formats.py", + "test_download_queue.py", + "test_main_helpers.py", + "test_nightly_update.py", + "test_subscriptions.py", + "test_url_guard.py", + "test_bg_tasks.py", + "test_config.py", + "test_music_metadata.py" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/ui", + "files": [ + "dist" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/ui/dist", + "files": [ + "metube" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/app/ui/dist/metube", + "files": [ + "3rdpartylicenses.txt", + "browser" + ] + }, + { + "added": [], + "changed_count": 12, + "db_signature": false, + "dir": "/app/ui/dist/metube/browser", + "files": [ + "manifest.webmanifest", + "ngsw.json", + "safety-worker.js", + "styles-GJAVEZGM.css", + "favicon.ico", + "index.html", + "main-CXU5VOAO.js", + "ngsw-worker.js", + "polyfills-DB62ZRJ7.js", + "worker-basic.min.js", + "assets", + "custom-service-worker.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/ui/dist/metube/browser/assets", + "files": [ + "icons" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/app/ui/dist/metube/browser/assets/icons", + "files": [ + "apple-touch-icon.png", + "browserconfig.xml", + "android-chrome-192x192.png", + "android-chrome-384x384.png", + "favicon-16x16.png", + "favicon-32x32.png", + "favicon.ico", + "mstile-150x150.png", + "safari-pinned-tab.svg" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 69, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/alexta69/metube:2026.09.29", + "mounts": [ + { + "class": "bind", + "files": 1, + "name": null, + "sample": [ + "Big_Buck_Bunny_360_10s_1MB.mp4" + ], + "source": "/srv/felhom-gate/hdd/userdata/media/metube", + "target": "/downloads", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 2, + "name": "volgate-metube_metube_state", + "sample": [ + "completed.json", + "queue.json" + ], + "source": "/var/lib/docker/volumes/volgate-metube_metube_state/_data", + "target": "/state", + "writable_by_app": "yes" + } + ], + "name": "metube", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "metube_state" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8081/ -> 200", + "172.18.0.2:8081/ -> 200", + "172.18.0.2:8081/login -> 404", + "172.18.0.2:8081/setup -> 404", + "172.18.0.2:8081/signup -> 404", + "172.18.0.2:8081/register -> 404", + "172.18.0.2:8081/install -> 404", + "172.18.0.2:8081/admin -> 404", + "172.18.0.2:8081/api/health -> 404", + "172.18.0.2:8081/health -> 404", + "172.18.0.2:8081/healthz -> 404", + "172.18.0.2:8081/status -> 404", + "172.18.0.2:8081/web -> 404", + "172.18.0.2:8081/index.php -> 404", + "172.18.0.2:8081/dashboard -> 404", + "fixture MeTube: seed OK \u2014 metube: the download finished (991017 bytes)" + ], + "fixture": "fixture MeTube: seed OK \u2014 metube: the download finished (991017 bytes)", + "ports": [ + 8081 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/n8n/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/n8n/probe.json new file mode 100644 index 00000000..f3a61c82 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/n8n/probe.json @@ -0,0 +1,83 @@ +{ + "probe": { + "app": "n8n", + "containers": [ + { + "diff_added": 503, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "home" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/home", + "files": [ + "node" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 506, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "n8nio/n8n:2.42.1", + "mounts": [ + { + "class": "named-declared", + "files": 7, + "name": "volgate-n8n_n8n_data", + "sample": [ + "crash.journal", + "database.sqlite", + "config", + "database.sqlite-shm", + "n8nEventLog.log", + "database.sqlite-wal", + "nodes/package.json" + ], + "source": "/var/lib/docker/volumes/volgate-n8n_n8n_data/_data", + "target": "/home/node/.n8n", + "writable_by_app": "yes" + } + ], + "name": "n8n", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "n8n_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "N8N_ENCRYPTION_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:5678/ -> 200" + ], + "fixture": null, + "ports": [ + 5678 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/navidrome/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/navidrome/probe.json new file mode 100644 index 00000000..c0d82178 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/navidrome/probe.json @@ -0,0 +1,85 @@ +{ + "probe": { + "app": "navidrome", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data", + "music" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "data", + "music" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 2, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "deluan/navidrome:0.64.2", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/music", + "target": "/music", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 6, + "name": "volgate-navidrome_navidrome_data", + "sample": [ + "navidrome.db-shm", + "navidrome.db", + "navidrome.db-wal", + "cache/images/.nd-migrated", + "cache/backgrounds/.nd-migrated", + "cache/transcoding/.nd-migrated" + ], + "source": "/var/lib/docker/volumes/volgate-navidrome_navidrome_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "navidrome", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "navidrome_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:4533/ -> 302" + ], + "fixture": null, + "ports": [ + 4533 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/nextcloud/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/nextcloud/probe.json new file mode 100644 index 00000000..4e34b9e2 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/nextcloud/probe.json @@ -0,0 +1,322 @@ +{ + "probe": { + "app": "nextcloud", + "containers": [ + { + "diff_added": 4, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "run", + "usr" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local", + "files": [ + "etc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local/etc", + "files": [ + "php" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local/etc/php", + "files": [ + "conf.d" + ] + }, + { + "added": [ + "redis-session.ini" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/usr/local/etc/php/conf.d", + "files": [ + "redis-session.ini" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 12, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "nextcloud:34.0.4-apache", + "mounts": [ + { + "class": "named-declared", + "files": 4001, + "name": "volgate-nextcloud_nextcloud_html", + "sample": [ + "cron.php", + "index.php", + "index.html", + "remote.php", + "package.json", + "console.php", + "AUTHORS", + "nextcloud-init-sync.lock", + "composer.lock", + "public.php", + ".user.ini", + "version.php", + "COPYING", + ".htaccess", + "status.php", + "REUSE.toml", + "occ", + "robots.txt", + "package-lock.json", + "composer.json", + "dist/index-BA6DHN8z.chunk.mjs", + "dist/common-NcUserBubble-BXR7vT0V-f2DD9EAL.chunk.css", + "dist/files_external-auth_rsa.mjs.license", + "dist/FilePicker-DcPPaTgX.chunk.mjs.license", + "dist/core-public.js.license", + "dist/1930-1930.js", + "dist/index-yD-5b5y_.chunk.mjs.license", + "dist/9811-9811.js.map.license", + "dist/2426-2426.js.license", + "dist/settings-vue-settings-admin-ai.js.map", + "dist/files_trashbin-files_trashbin-init-nOmQ7X71.chunk.css", + "dist/systemtags-init.mjs", + "dist/NcUserStatusIcon-BF5OEQFU-B7JEw9np.chunk.mjs.map.license", + "dist/core-unsupported-browser.js.map", + "dist/oauth2-settings-admin.mjs.map", + "dist/428-428.js.map", + "dist/index-Cp0kcsps.chunk.mjs.map.license", + "dist/files_external-settings.mjs.map.license", + "dist/index-CwlKovrj.chunk.mjs.map.license", + "dist/SetStatusModal-DOl5_a4J.chunk.mjs.map" + ], + "source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_html/_data", + "target": "/var/www/html", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 69, + "name": null, + "sample": [ + "nextcloud.log", + "index.html", + ".ncdata", + ".htaccess", + "admin/files/Reasons to use Nextcloud.pdf", + "admin/files/Nextcloud Manual.pdf", + "admin/files/Readme.md", + "admin/files/Nextcloud intro.mp4", + "admin/files/Templates credits.md", + "admin/files/Nextcloud.png", + "admin/files/Templates/Gotong royong.odp", + "admin/files/Templates/Business model canvas.ods", + "admin/files/Templates/Mind map.whiteboard", + "admin/files/Templates/Venn diagram.whiteboard", + "admin/files/Templates/Mother's day.odt", + "admin/files/Templates/Meeting agenda.whiteboard", + "admin/files/Templates/Meeting notes.md", + "admin/files/Templates/Business model canvas.odg", + "admin/files/Templates/Impact effort.whiteboard", + "admin/files/Templates/Report.odt", + "admin/files/Templates/Party invitation.odt", + "admin/files/Templates/Kanban board.whiteboard", + "admin/files/Templates/Invoice.ods", + "admin/files/Templates/Brainstorming.whiteboard", + "admin/files/Templates/Checklist.ods", + "admin/files/Templates/Mindmap.odg", + "admin/files/Templates/Certificate.odt", + "admin/files/Templates/Sticky notes.whiteboard", + "admin/files/Templates/Business model canvas.whiteboard", + "admin/files/Templates/Diagram & table.ods", + "admin/files/Templates/Triangle.odp", + "admin/files/Templates/Menu.odt", + "admin/files/Templates/Modern company.odp", + "admin/files/Templates/Invoice.odt", + "admin/files/Templates/Pitch deck.odp", + "admin/files/Templates/Flowchart.odg", + "admin/files/Templates/Timesheet.ods", + "admin/files/Templates/Product plan.md", + "admin/files/Templates/Syllabus.odt", + "admin/files/Templates/Onboarding.odp" + ], + "source": "/srv/felhom-gate/hdd/appdata/nextcloud", + "target": "/var/www/html/data", + "writable_by_app": "yes" + } + ], + "name": "nextcloud", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "mariadb:12.3", + "mounts": [ + { + "class": "named-declared", + "files": 471, + "name": "volgate-nextcloud_nextcloud_db_data", + "sample": [ + "tc.log", + ".my-healthcheck.cnf", + "aria_log.00000001", + "aria_log_control", + "undo001", + "ibtmp1", + "ib_buffer_pool", + "ibdata1", + "undo002", + "multi-master.info", + "mariadb_upgrade_info", + "ddl_recovery.log", + "ib_logfile0", + "undo003", + "performance_schema/db.opt", + "mysql/func.frm", + "mysql/index_stats.MAD", + "mysql/transaction_registry.ibd", + "mysql/time_zone_transition_type.frm", + "mysql/global_priv.MAD", + "mysql/time_zone_leap_second.MAI", + "mysql/column_stats.MAD", + "mysql/time_zone_transition.MAI", + "mysql/plugin.MAD", + "mysql/time_zone.MAD", + "mysql/column_stats.frm", + "mysql/db.MAD", + "mysql/help_keyword.frm", + "mysql/help_relation.frm", + "mysql/procs_priv.MAI", + "mysql/servers.frm", + "mysql/innodb_index_stats.frm", + "mysql/roles_mapping.frm", + "mysql/plugin.MAI", + "mysql/time_zone_name.MAD", + "mysql/user.frm", + "mysql/time_zone.MAI", + "mysql/global_priv.frm", + "mysql/proxies_priv.MAI", + "mysql/time_zone_transition_type.MAI" + ], + "source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_db_data/_data", + "target": "/var/lib/mysql", + "writable_by_app": "yes" + } + ], + "name": "nextcloud-db", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-nextcloud_nextcloud_redis_data", + "sample": [ + "appendonlydir/appendonly.aof.1.incr.aof", + "appendonlydir/appendonly.aof.manifest", + "appendonlydir/appendonly.aof.1.base.rdb" + ], + "source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "nextcloud-redis", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "nextcloud_db_data", + "nextcloud_html", + "nextcloud_redis_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "MYSQL_ROOT_PASSWORD", + "NEXTCLOUD_ADMIN_PASSWORD", + "NEXTCLOUD_ADMIN_USER", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 302", + "192.168.128.4:80/ -> 302" + ], + "fixture": null, + "ports": [ + 80 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/onlyoffice/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/onlyoffice/probe.json new file mode 100644 index 00000000..52a98e4a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/onlyoffice/probe.json @@ -0,0 +1,6646 @@ +{ + "probe": { + "app": "onlyoffice", + "containers": [ + { + "diff_added": 2557, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/", + "files": [ + "run", + "root", + "var", + "etc", + "usr" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc", + "files": [ + "onlyoffice", + "logrotate.conf", + "nginx" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc/onlyoffice", + "files": [ + "documentserver", + "documentserver-example" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver", + "files": [ + "local.json", + "log4js", + "nginx" + ] + }, + { + "added": [], + "changed_count": 9, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver-example", + "files": [ + "data.json", + "development-linux.json", + "development-mac.json", + "development-windows.json", + "local.json", + "production-linux.json", + "production-windows.json", + "default.json", + "nginx" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver-example/nginx", + "files": [ + "includes" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver-example/nginx/includes", + "files": [ + "ds-example.conf" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver/log4js", + "files": [ + "development.json", + "production.json" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver/nginx", + "files": [ + "ds-ssl.conf.tmpl", + "ds.conf", + "ds.conf.tmpl", + "includes" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/etc/onlyoffice/documentserver/nginx/includes", + "files": [ + "ds-docservice.conf", + "ds-letsencrypt.conf", + "ds-mime.types.conf", + "http-common.conf", + "ds-common.conf" + ] + }, + { + "added": [ + "ONLYOFFICE" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + "ONLYOFFICE" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "share" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/var", + "files": [ + "www", + "lib", + "log" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/lib", + "files": [ + "nginx" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www", + "files": [ + "onlyoffice" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/var/www/onlyoffice", + "files": [ + "documentserver", + "documentserver-example" + ] + }, + { + "added": [], + "changed_count": 5, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver", + "files": [ + "sdkjs", + "sdkjs-plugins", + "web-apps", + "fonts", + "server" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver-example", + "files": [ + "welcome" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver-example/welcome", + "files": [ + "docker.html", + "example-disabled.html" + ] + }, + { + "added": [ + "033", + "070", + "100", + "110", + "158", + "160", + "026", + "034", + "067", + "161", + "166", + "171", + "181", + "199", + "073", + "164", + "170", + "174", + "183", + "193", + "196", + "207", + "030", + "139", + "188", + "189", + "206", + "214", + "216", + "068", + "116", + "122", + "187", + "208", + "210", + "215", + "089", + "112", + "151", + "159" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/fonts", + "files": [ + "033", + "070", + "100", + "110", + "158", + "160", + "026", + "034", + "067", + "161", + "166", + "171", + "181", + "199", + "073", + "164", + "170", + "174", + "183", + "193", + "196", + "207", + "030", + "139", + "188", + "189", + "206", + "214", + "216", + "068", + "116", + "122", + "187", + "208", + "210", + "215", + "089", + "112", + "151", + "159" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs", + "files": [ + "slide", + "common" + ] + }, + { + "added": [ + "{07FD8DFA-DFE0-4089-AL24-0730933CC80A}", + "{440EBF13-9B19-4BD8-8621-05200E58140B}", + "{7327FC95-16DA-41D9-9AF2-0E7F449F6800}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}", + "{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}", + "{38E022EA-AD92-45FC-B22B-49DF39746DB4}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}", + "{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}", + "{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}", + "{D71C2EF0-F15B-47C7-80E9-86D671F9C595}" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins", + "files": [ + "{07FD8DFA-DFE0-4089-AL24-0730933CC80A}", + "{440EBF13-9B19-4BD8-8621-05200E58140B}", + "{7327FC95-16DA-41D9-9AF2-0E7F449F6800}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}", + "{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}", + "{38E022EA-AD92-45FC-B22B-49DF39746DB4}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}", + "{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}", + "{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}", + "{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}", + "{D71C2EF0-F15B-47C7-80E9-86D671F9C595}" + ] + }, + { + "added": [ + "scripts", + "style", + "vendor", + "3rd-Party.txt", + "index.html", + "index_about.html", + "translations", + "CHANGELOG.md", + "README.md", + "config.json", + "licenses", + "resources" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}", + "files": [ + "scripts", + "style", + "vendor", + "3rd-Party.txt", + "index.html", + "index_about.html", + "translations", + "CHANGELOG.md", + "README.md", + "config.json", + "licenses", + "resources" + ] + }, + { + "added": [ + "Tui.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/licenses", + "files": [ + "Tui.license", + "jQuery.license" + ] + }, + { + "added": [ + "light", + "store", + "dark", + "img" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources", + "files": [ + "light", + "store", + "dark", + "img" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/dark", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "bg.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/img", + "files": [ + "bg.png" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/light", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "black-theme.js", + "photoeditor.js", + "white-theme.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/scripts", + "files": [ + "black-theme.js", + "photoeditor.js", + "white-theme.js" + ] + }, + { + "added": [ + "black-theme.css", + "white-theme.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/style", + "files": [ + "black-theme.css", + "white-theme.css" + ] + }, + { + "added": [ + "cs-CS.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json", + "pt-BR.json", + "ru-RU.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "de-DE.json", + "fr-FR.json", + "langs.json", + "sq-AL.json", + "sr-Latn-RS.json", + "zh-ZH.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/translations", + "files": [ + "cs-CS.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json", + "pt-BR.json", + "ru-RU.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "de-DE.json", + "fr-FR.json", + "langs.json", + "sq-AL.json", + "sr-Latn-RS.json", + "zh-ZH.json" + ] + }, + { + "added": [ + "tui", + "jquery" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor", + "files": [ + "tui", + "jquery" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "tui-image-editor.min.css", + "tui-image-editor.min.js", + "vendor", + "svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/tui", + "files": [ + "tui-image-editor.min.css", + "tui-image-editor.min.js", + "vendor", + "svg" + ] + }, + { + "added": [ + "dark", + "light" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/tui/svg", + "files": [ + "dark", + "light" + ] + }, + { + "added": [ + "icon-a.svg", + "icon-b.svg", + "icon-c.svg", + "icon-d.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/tui/svg/dark", + "files": [ + "icon-a.svg", + "icon-b.svg", + "icon-c.svg", + "icon-d.svg" + ] + }, + { + "added": [ + "icon-d.svg", + "icon-a.svg", + "icon-b.svg", + "icon-c.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/tui/svg/light", + "files": [ + "icon-d.svg", + "icon-a.svg", + "icon-b.svg", + "icon-c.svg" + ] + }, + { + "added": [ + "fabric.min.js", + "tui-code-snippet.min.js", + "tui-color-picker.min.css", + "tui-color-picker.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/vendor/tui/vendor", + "files": [ + "fabric.min.js", + "tui-code-snippet.min.js", + "tui-color-picker.min.css", + "tui-color-picker.min.js" + ] + }, + { + "added": [ + "translations", + "CHANGELOG.md", + "README.md", + "config.json", + "desktop-player.html", + "index.html", + "resources", + "scripts" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}", + "files": [ + "translations", + "CHANGELOG.md", + "README.md", + "config.json", + "desktop-player.html", + "index.html", + "resources", + "scripts" + ] + }, + { + "added": [ + "img", + "store", + "styles" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources", + "files": [ + "img", + "store", + "styles" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/img", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/styles", + "files": [ + "style.css" + ] + }, + { + "added": [ + "player.js", + "utils.js", + "youtube.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/scripts", + "files": [ + "player.js", + "utils.js", + "youtube.js" + ] + }, + { + "added": [ + "cs-CS.json", + "de-DE.json", + "fr-FR.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "si-SI.json", + "sq-AL.json", + "es-ES.json", + "ja-JA.json", + "ru-RU.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "zh-ZH.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/translations", + "files": [ + "cs-CS.json", + "de-DE.json", + "fr-FR.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "si-SI.json", + "sq-AL.json", + "es-ES.json", + "ja-JA.json", + "ru-RU.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "zh-ZH.json" + ] + }, + { + "added": [ + "index_about.html", + "resources", + "scripts", + "README.md", + "index.html", + "licenses", + "translations", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "config.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}", + "files": [ + "index_about.html", + "resources", + "scripts", + "README.md", + "index.html", + "licenses", + "translations", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "config.json" + ] + }, + { + "added": [ + "Select2.license", + "Tesseract.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/licenses", + "files": [ + "Select2.license", + "Tesseract.license", + "jQuery.license" + ] + }, + { + "added": [ + "dark", + "light", + "store" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources", + "files": [ + "dark", + "light", + "store" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/dark", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/light", + "files": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ] + }, + { + "added": [ + "ocr.js", + "ocr_ie.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/scripts", + "files": [ + "ocr.js", + "ocr_ie.js" + ] + }, + { + "added": [ + "sr-Latn-RS.json", + "zh-ZH.json", + "fr-FR.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "ru-RU.json", + "si-SI.json", + "cs-CS.json", + "de-DE.json", + "es-ES.json", + "ja-JA.json", + "sq-AL.json", + "sr-Cyrl-RS.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/translations", + "files": [ + "sr-Latn-RS.json", + "zh-ZH.json", + "fr-FR.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "ru-RU.json", + "si-SI.json", + "cs-CS.json", + "de-DE.json", + "es-ES.json", + "ja-JA.json", + "sq-AL.json", + "sr-Cyrl-RS.json" + ] + }, + { + "added": [ + "select2-4.0.13", + "jquery" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/vendor", + "files": [ + "select2-4.0.13", + "jquery" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "LICENSE.md", + "README.md", + "css", + "js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/vendor/select2-4.0.13", + "files": [ + "LICENSE.md", + "README.md", + "css", + "js" + ] + }, + { + "added": [ + "select2.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/vendor/select2-4.0.13/css", + "files": [ + "select2.css" + ] + }, + { + "added": [ + "select2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/vendor/select2-4.0.13/js", + "files": [ + "select2.js" + ] + }, + { + "added": [ + "3rd-Party.txt", + "licenses", + "vendor", + "CHANGELOG.md", + "README.md", + "config.json", + "index.html", + "index_widget.html", + "resources", + "scripts", + "translations" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}", + "files": [ + "3rd-Party.txt", + "licenses", + "vendor", + "CHANGELOG.md", + "README.md", + "config.json", + "index.html", + "index_widget.html", + "resources", + "scripts", + "translations" + ] + }, + { + "added": [ + "Select2.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/licenses", + "files": [ + "Select2.license", + "jQuery.license" + ] + }, + { + "added": [ + "store", + "img" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources", + "files": [ + "store", + "img" + ] + }, + { + "added": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/img", + "files": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ] + }, + { + "added": [ + "translate.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/scripts", + "files": [ + "translate.js" + ] + }, + { + "added": [ + "fr-FR.json", + "ja-JA.json", + "pt-BR.json", + "ru-RU.json", + "sq-AL.json", + "sr-Latn-RS.json", + "cs-CZ.json", + "es-ES.json", + "it-IT.json", + "langs.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "zh-ZH.json", + "de-DE.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/translations", + "files": [ + "fr-FR.json", + "ja-JA.json", + "pt-BR.json", + "ru-RU.json", + "sq-AL.json", + "sr-Latn-RS.json", + "cs-CZ.json", + "es-ES.json", + "it-IT.json", + "langs.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "zh-ZH.json", + "de-DE.json" + ] + }, + { + "added": [ + "google", + "select2-4.0.13" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/vendor", + "files": [ + "google", + "select2-4.0.13" + ] + }, + { + "added": [ + "widjet.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/vendor/google", + "files": [ + "widjet.js" + ] + }, + { + "added": [ + "LICENSE.md", + "README.md", + "css", + "js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/vendor/select2-4.0.13", + "files": [ + "LICENSE.md", + "README.md", + "css", + "js" + ] + }, + { + "added": [ + "select2.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/vendor/select2-4.0.13/css", + "files": [ + "select2.css" + ] + }, + { + "added": [ + "select2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/vendor/select2-4.0.13/js", + "files": [ + "select2.js" + ] + }, + { + "added": [ + "aiModelEdit.html", + "aiModelsList.html", + "annotationPopup.html", + "components", + "index.html", + "resources", + "summarization.html", + "CHANGELOG.md", + "LICENSE.txt", + "chat.html", + "customAssistant.html", + "settings.html", + "translations", + "vendor", + "config.json", + "customProviders.html", + "helper.html", + "hyperlink.html", + "scripts", + "translationsettings.html" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}", + "files": [ + "aiModelEdit.html", + "aiModelsList.html", + "annotationPopup.html", + "components", + "index.html", + "resources", + "summarization.html", + "CHANGELOG.md", + "LICENSE.txt", + "chat.html", + "customAssistant.html", + "settings.html", + "translations", + "vendor", + "config.json", + "customProviders.html", + "helper.html", + "hyperlink.html", + "scripts", + "translationsettings.html" + ] + }, + { + "added": [ + "ListView", + "Tooltip" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/components", + "files": [ + "ListView", + "Tooltip" + ] + }, + { + "added": [ + "script.js", + "style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/components/ListView", + "files": [ + "script.js", + "style.css" + ] + }, + { + "added": [ + "script.js", + "style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/components/Tooltip", + "files": [ + "script.js", + "style.css" + ] + }, + { + "added": [ + "dark", + "icons", + "light", + "store", + "styles" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources", + "files": [ + "dark", + "icons", + "light", + "store", + "styles" + ] + }, + { + "added": [ + "icon.png", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/dark", + "files": [ + "icon.png", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "dark", + "light", + "theme-classic-light", + "theme-default" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons", + "files": [ + "dark", + "light", + "theme-classic-light", + "theme-default" + ] + }, + { + "added": [ + "btn-edit@1.25x.png", + "btn-password-hide@1.75x.png", + "btn-password.png", + "chevron-down.png", + "close.png", + "ai-audio@1.25x.png", + "ai-code@1.75x.png", + "ai-images@1.75x.png", + "ask-ai@2x.png", + "default@1.5x.png", + "error@1.5x.png", + "grammar@1.5x.png", + "image-ai@1.5x.png", + "btn-copy@1.5x.png", + "btn-ic-review@1.25x.png", + "btn-menu-comments@2x.png", + "close@1.5x.png", + "grammar.png", + "grammar@2x.png", + "info@1.75x.png", + "ocr@1.75x.png", + "ai-embeddings@1.25x.png", + "btn-microphone@1.75x.png", + "btn-password-hide@2x.png", + "btn-zoomup@1.5x.png", + "error@1.25x.png", + "ocr@1.25x.png", + "text-analysis-ai.png", + "vision-ai@1.5x.png", + "ai-images@1.25x.png", + "ai-realtime@1.25x.png", + "ai-texts@1.25x.png", + "btn-password@1.5x.png", + "btn-replace@1.25x.png", + "btn-select-tool@2x.png", + "copy@2x.png", + "ai-audio@2x.png", + "ai-moderations.png", + "btn-ic-review@1.5x.png", + "btn-replace.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/dark", + "files": [ + "btn-edit@1.25x.png", + "btn-password-hide@1.75x.png", + "btn-password.png", + "chevron-down.png", + "close.png", + "ai-audio@1.25x.png", + "ai-code@1.75x.png", + "ai-images@1.75x.png", + "ask-ai@2x.png", + "default@1.5x.png", + "error@1.5x.png", + "grammar@1.5x.png", + "image-ai@1.5x.png", + "btn-copy@1.5x.png", + "btn-ic-review@1.25x.png", + "btn-menu-comments@2x.png", + "close@1.5x.png", + "grammar.png", + "grammar@2x.png", + "info@1.75x.png", + "ocr@1.75x.png", + "ai-embeddings@1.25x.png", + "btn-microphone@1.75x.png", + "btn-password-hide@2x.png", + "btn-zoomup@1.5x.png", + "error@1.25x.png", + "ocr@1.25x.png", + "text-analysis-ai.png", + "vision-ai@1.5x.png", + "ai-images@1.25x.png", + "ai-realtime@1.25x.png", + "ai-texts@1.25x.png", + "btn-password@1.5x.png", + "btn-replace@1.25x.png", + "btn-select-tool@2x.png", + "copy@2x.png", + "ai-audio@2x.png", + "ai-moderations.png", + "btn-ic-review@1.5x.png", + "btn-replace.png" + ] + }, + { + "added": [ + "default@1.75x.png", + "ocr@1.25x.png", + "settings@1.25x.png", + "settings@1.5x.png", + "settings@2x.png", + "form-to-doc@1.75x.png", + "form-to-doc@2x.png", + "settings@1.75x.png", + "text-to-image@2x.png", + "translation@1.25x.png", + "translation@1.5x.png", + "written-plugin.png", + "written-plugin@1.75x.png", + "plugin-writer@1.25x.png", + "ocr.png", + "plugin-writer@1.5x.png", + "plugin-writer@2x.png", + "text-to-image@1.75x.png", + "translation@1.75x.png", + "translation@2x.png", + "written-plugin@2x.png", + "default@2x.png", + "grammar@1.25x.png", + "plugin-writer.png", + "summarization@1.5x.png", + "text-to-image.png", + "text-to-image@1.25x.png", + "text-to-image@1.5x.png", + "written-plugin@1.25x.png", + "default@1.25.png", + "grammar@1.5x.png", + "summarization@1.75x.png", + "written-plugin@1.5x.png", + "form-to-doc.png", + "grammar@1.75x.png", + "settings.png", + "translation.png", + "ask-ai.png", + "ask-ai@2x.png", + "default@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/dark/big", + "files": [ + "default@1.75x.png", + "ocr@1.25x.png", + "settings@1.25x.png", + "settings@1.5x.png", + "settings@2x.png", + "form-to-doc@1.75x.png", + "form-to-doc@2x.png", + "settings@1.75x.png", + "text-to-image@2x.png", + "translation@1.25x.png", + "translation@1.5x.png", + "written-plugin.png", + "written-plugin@1.75x.png", + "plugin-writer@1.25x.png", + "ocr.png", + "plugin-writer@1.5x.png", + "plugin-writer@2x.png", + "text-to-image@1.75x.png", + "translation@1.75x.png", + "translation@2x.png", + "written-plugin@2x.png", + "default@2x.png", + "grammar@1.25x.png", + "plugin-writer.png", + "summarization@1.5x.png", + "text-to-image.png", + "text-to-image@1.25x.png", + "text-to-image@1.5x.png", + "written-plugin@1.25x.png", + "default@1.25.png", + "grammar@1.5x.png", + "summarization@1.75x.png", + "written-plugin@1.5x.png", + "form-to-doc.png", + "grammar@1.75x.png", + "settings.png", + "translation.png", + "ask-ai.png", + "ask-ai@2x.png", + "default@1.5x.png" + ] + }, + { + "added": [ + "ai-moderations@1.25x.png", + "ai-texts@1.75x.png", + "ask-ai@2x.png", + "btn-demote@1.5x.png", + "ai-visual-analysis@2x.png", + "ask-ai.png", + "btn-copy@2x.png", + "btn-zoomup@1.5x.png", + "text-analysis-ai@1.5x.png", + "ai-code.png", + "ai-moderations@1.75x.png", + "error@1.25x.png", + "info.png", + "info@1.5x.png", + "info@2x.png", + "text-to-image@1.5x.png", + "translation@1.5x.png", + "btn-demote@1.25x.png", + "btn-edit@1.75x.png", + "btn-edit@2x.png", + "btn-ic-review@1.25x.png", + "btn-microphone@1.25x.png", + "btn-replace@2x.png", + "summarization@2x.png", + "text-to-image@1.75x.png", + "ai-realtime@1.5x.png", + "btn-menu-comments@1.75x.png", + "btn-menu-comments@2x.png", + "ocr@1.25x.png", + "btn-password@1.5x.png", + "error.png", + "grammar@2x.png", + "ai-visual-analysis@1.25x.png", + "btn-password-hide@2x.png", + "btn-remove@1.75x.png", + "btn-replace@1.5x.png", + "btn-zoomup@1.75x.png", + "image-ai.png", + "ocr.png", + "summarization@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/light", + "files": [ + "ai-moderations@1.25x.png", + "ai-texts@1.75x.png", + "ask-ai@2x.png", + "btn-demote@1.5x.png", + "ai-visual-analysis@2x.png", + "ask-ai.png", + "btn-copy@2x.png", + "btn-zoomup@1.5x.png", + "text-analysis-ai@1.5x.png", + "ai-code.png", + "ai-moderations@1.75x.png", + "error@1.25x.png", + "info.png", + "info@1.5x.png", + "info@2x.png", + "text-to-image@1.5x.png", + "translation@1.5x.png", + "btn-demote@1.25x.png", + "btn-edit@1.75x.png", + "btn-edit@2x.png", + "btn-ic-review@1.25x.png", + "btn-microphone@1.25x.png", + "btn-replace@2x.png", + "summarization@2x.png", + "text-to-image@1.75x.png", + "ai-realtime@1.5x.png", + "btn-menu-comments@1.75x.png", + "btn-menu-comments@2x.png", + "ocr@1.25x.png", + "btn-password@1.5x.png", + "error.png", + "grammar@2x.png", + "ai-visual-analysis@1.25x.png", + "btn-password-hide@2x.png", + "btn-remove@1.75x.png", + "btn-replace@1.5x.png", + "btn-zoomup@1.75x.png", + "image-ai.png", + "ocr.png", + "summarization@1.5x.png" + ] + }, + { + "added": [ + "form-to-doc@2x.png", + "plugin-writer@1.75x.png", + "settings@1.25x.png", + "translation@1.5x.png", + "ask-ai@1.75x.png", + "default@1.5x.png", + "default@1.75x.png", + "plugin-writer@1.5x.png", + "text-to-image.png", + "text-to-image@2x.png", + "written-plugin@1.75x.png", + "written-plugin@2x.png", + "default@2x.png", + "form-to-doc.svg", + "grammar.png", + "grammar@1.25x.png", + "grammar@1.75x.png", + "ocr@1.5x.png", + "summarization.png", + "summarization@1.5x.png", + "form-to-doc@1.75x.png", + "grammar@1.5x.png", + "ocr@1.25x.png", + "ocr@2x.png", + "plugin-writer@1.25x.png", + "summarization@1.25x.png", + "summarization@2x.png", + "text-to-image@1.25x.png", + "ask-ai@2x.png", + "form-to-doc@1.5x.png", + "settings@1.5x.png", + "written-plugin@1.25x.png", + "default.png", + "grammar@2x.png", + "plugin-writer.png", + "translation.png", + "translation@1.75x.png", + "written-plugin.png", + "default@1.25x.png", + "form-to-doc@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/light/big", + "files": [ + "form-to-doc@2x.png", + "plugin-writer@1.75x.png", + "settings@1.25x.png", + "translation@1.5x.png", + "ask-ai@1.75x.png", + "default@1.5x.png", + "default@1.75x.png", + "plugin-writer@1.5x.png", + "text-to-image.png", + "text-to-image@2x.png", + "written-plugin@1.75x.png", + "written-plugin@2x.png", + "default@2x.png", + "form-to-doc.svg", + "grammar.png", + "grammar@1.25x.png", + "grammar@1.75x.png", + "ocr@1.5x.png", + "summarization.png", + "summarization@1.5x.png", + "form-to-doc@1.75x.png", + "grammar@1.5x.png", + "ocr@1.25x.png", + "ocr@2x.png", + "plugin-writer@1.25x.png", + "summarization@1.25x.png", + "summarization@2x.png", + "text-to-image@1.25x.png", + "ask-ai@2x.png", + "form-to-doc@1.5x.png", + "settings@1.5x.png", + "written-plugin@1.25x.png", + "default.png", + "grammar@2x.png", + "plugin-writer.png", + "translation.png", + "translation@1.75x.png", + "written-plugin.png", + "default@1.25x.png", + "form-to-doc@1.25x.png" + ] + }, + { + "added": [ + "light" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/theme-classic-light", + "files": [ + "light" + ] + }, + { + "added": [ + "ask-ai.png", + "ask-ai_active.png", + "ask-ai_active@1.25x.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@2x.png", + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai@2x.png", + "ask-ai_active@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/theme-classic-light/light", + "files": [ + "ask-ai.png", + "ask-ai_active.png", + "ask-ai_active@1.25x.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@2x.png", + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai@2x.png", + "ask-ai_active@1.75x.png" + ] + }, + { + "added": [ + "dark", + "light" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/theme-default", + "files": [ + "dark", + "light" + ] + }, + { + "added": [ + "ask-ai_active@2x.png", + "ask-ai.png", + "ask-ai@2x.png", + "ask-ai_active.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@1.75x.png", + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai_active@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/theme-default/dark", + "files": [ + "ask-ai_active@2x.png", + "ask-ai.png", + "ask-ai@2x.png", + "ask-ai_active.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@1.75x.png", + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai_active@1.25x.png" + ] + }, + { + "added": [ + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai_active.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@1.75x.png", + "ask-ai@2x.png", + "ask-ai_active@1.25x.png", + "ask-ai_active@2x.png", + "ask-ai.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/icons/theme-default/light", + "files": [ + "ask-ai@1.25x.png", + "ask-ai@1.5x.png", + "ask-ai@1.75x.png", + "ask-ai_active.png", + "ask-ai_active@1.5x.png", + "ask-ai_active@1.75x.png", + "ask-ai@2x.png", + "ask-ai_active@1.25x.png", + "ask-ai_active@2x.png", + "ask-ai.png" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/light", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "chat.css", + "common.css", + "customAssistant.css", + "customProviders.css", + "settings.css", + "summarization.css", + "aiModelEdit.css", + "aiModelsList.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/styles", + "files": [ + "chat.css", + "common.css", + "customAssistant.css", + "customProviders.css", + "settings.css", + "summarization.css", + "aiModelEdit.css", + "aiModelsList.css" + ] + }, + { + "added": [ + "aiModelsList.js", + "chat.js", + "code.js", + "helpers", + "hyperlink.js", + "chatVoice.js", + "settings.js", + "customAssistant.js", + "customProviders.js", + "engine", + "generate.js", + "helper.js", + "utils", + "aiModelEdit.js", + "summarization.js", + "text-annotations" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts", + "files": [ + "aiModelsList.js", + "chat.js", + "code.js", + "helpers", + "hyperlink.js", + "chatVoice.js", + "settings.js", + "customAssistant.js", + "customProviders.js", + "engine", + "generate.js", + "helper.js", + "utils", + "aiModelEdit.js", + "summarization.js", + "text-annotations" + ] + }, + { + "added": [ + "providers", + "register.js", + "storage.js", + "engine.js", + "library.js", + "local_storage.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/engine", + "files": [ + "providers", + "register.js", + "storage.js", + "engine.js", + "library.js", + "local_storage.js" + ] + }, + { + "added": [ + "internal", + "preinstall-example.json", + "provider.js", + "base.js", + "config.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/engine/providers", + "files": [ + "internal", + "preinstall-example.json", + "provider.js", + "base.js", + "config.json" + ] + }, + { + "added": [ + "deepseek.js", + "google-gemini.js", + "groq.js", + "lmstudio.js", + "mistral.js", + "ollama.js", + "openai.js", + "together.ai.js", + "anthropic.js", + "gpt4all.js", + "openrouter.js", + "stabilityai.js", + "xAI.js", + "zhipu.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/engine/providers/internal", + "files": [ + "deepseek.js", + "google-gemini.js", + "groq.js", + "lmstudio.js", + "mistral.js", + "ollama.js", + "openai.js", + "together.ai.js", + "anthropic.js", + "gpt4all.js", + "openrouter.js", + "stabilityai.js", + "xAI.js", + "zhipu.js" + ] + }, + { + "added": [ + "helperFuncs.js", + "helpers.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/helpers", + "files": [ + "helperFuncs.js", + "helpers.js" + ] + }, + { + "added": [ + "custom-annotations", + "grammar.js", + "spelling.js", + "text-annotator.js", + "annotation-popup.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/text-annotations", + "files": [ + "custom-annotations", + "grammar.js", + "spelling.js", + "text-annotator.js", + "annotation-popup.js" + ] + }, + { + "added": [ + "types.js", + "README.md", + "annotation-popup.js", + "assistant-hint.js", + "assistant-replace-hint.js", + "assistant-replace.js", + "custom-annotator.js", + "manager.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/text-annotations/custom-annotations", + "files": [ + "types.js", + "README.md", + "annotation-popup.js", + "assistant-hint.js", + "assistant-replace-hint.js", + "assistant-replace.js", + "custom-annotator.js", + "manager.js" + ] + }, + { + "added": [ + "theme.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/scripts/utils", + "files": [ + "theme.js" + ] + }, + { + "added": [ + "sq-AL.json", + "de-DE.json", + "it-IT.json", + "pt-BR.json", + "ja-JA.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "ar-SA.json", + "cs-CS.json", + "fr-FR.json", + "helpers", + "langs.json", + "zh-CN.json", + "es-ES.json", + "ru-RU.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/translations", + "files": [ + "sq-AL.json", + "de-DE.json", + "it-IT.json", + "pt-BR.json", + "ja-JA.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "ar-SA.json", + "cs-CS.json", + "fr-FR.json", + "helpers", + "langs.json", + "zh-CN.json", + "es-ES.json", + "ru-RU.json" + ] + }, + { + "added": [ + "ar-SA.json", + "cs-CS.json", + "de-DE.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json", + "pt-BR.json", + "sq-AL.json", + "en.json", + "fr-FR.json", + "ru-RU.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "zh-CN.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/translations/helpers", + "files": [ + "ar-SA.json", + "cs-CS.json", + "de-DE.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json", + "pt-BR.json", + "sq-AL.json", + "en.json", + "fr-FR.json", + "ru-RU.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "zh-CN.json" + ] + }, + { + "added": [ + "GPT-3-Encoder", + "jquery", + "md", + "select2-4.0.6-rc.1" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor", + "files": [ + "GPT-3-Encoder", + "jquery", + "md", + "select2-4.0.6-rc.1" + ] + }, + { + "added": [ + "vocabulary.bpe", + "LICENSE", + "README.md", + "encoder.js", + "encoder.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/GPT-3-Encoder", + "files": [ + "vocabulary.bpe", + "LICENSE", + "README.md", + "encoder.js", + "encoder.json" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "markdown-it.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/md", + "files": [ + "markdown-it.js" + ] + }, + { + "added": [ + "LICENSE.md", + "README.md", + "dist", + "docs" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/select2-4.0.6-rc.1", + "files": [ + "LICENSE.md", + "README.md", + "dist", + "docs" + ] + }, + { + "added": [ + "css", + "js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/select2-4.0.6-rc.1/dist", + "files": [ + "css", + "js" + ] + }, + { + "added": [ + "select2.css", + "select2.min.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/select2-4.0.6-rc.1/dist/css", + "files": [ + "select2.css", + "select2.min.css" + ] + }, + { + "added": [ + "select2.full.js", + "select2.full.min.js", + "select2.js", + "select2.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/select2-4.0.6-rc.1/dist/js", + "files": [ + "select2.full.js", + "select2.full.min.js", + "select2.js", + "select2.min.js" + ] + }, + { + "added": [ + "options.html", + "README.md", + "announcements-4.0.html", + "community.html", + "examples.html", + "index.html", + "options-old.html" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/vendor/select2-4.0.6-rc.1/docs", + "files": [ + "options.html", + "README.md", + "announcements-4.0.html", + "community.html", + "examples.html", + "index.html", + "options-old.html" + ] + }, + { + "added": [ + "vendor", + "3rd-party.txt", + "index.html", + "LICENSE.txt", + "edit-window.html", + "info-window.html", + "postcss.config.mjs", + "translations", + "vite.config.mjs", + "AUTHORS.md", + "CHANGELOG.md", + "licenses", + "oauth.html", + "config.json", + "dist", + "resources" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}", + "files": [ + "vendor", + "3rd-party.txt", + "index.html", + "LICENSE.txt", + "edit-window.html", + "info-window.html", + "postcss.config.mjs", + "translations", + "vite.config.mjs", + "AUTHORS.md", + "CHANGELOG.md", + "licenses", + "oauth.html", + "config.json", + "dist", + "resources" + ] + }, + { + "added": [ + "edit-window.modern.js.map", + "styles.css", + "bundle.modern.js", + "bundle.modern.js.map", + "edit-window.css", + "edit-window.modern.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/dist", + "files": [ + "edit-window.modern.js.map", + "styles.css", + "bundle.modern.js", + "bundle.modern.js.map", + "edit-window.css", + "edit-window.modern.js" + ] + }, + { + "added": [ + "citeproc-js.license", + "core-js.license", + "mendeley-sdk.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/licenses", + "files": [ + "citeproc-js.license", + "core-js.license", + "mendeley-sdk.license" + ] + }, + { + "added": [ + "css", + "dark", + "img", + "light", + "store", + "csl" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources", + "files": [ + "css", + "dark", + "img", + "light", + "store", + "csl" + ] + }, + { + "added": [ + "locales", + "styles", + "styles.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/csl", + "files": [ + "locales", + "styles", + "styles.json" + ] + }, + { + "added": [ + "locales-ms-MY.xml", + "locales-sr-RS.xml", + "locales-bg-BG.xml", + "locales-cy-GB.xml", + "locales-la.xml", + "locales-lij-IT.xml", + "locales-lv-LV.xml", + "locales-en-GB.xml", + "locales-et-EE.xml", + "locales-hy-AM.xml", + "locales-uk-UA.xml", + "locales-de-DE.xml", + "locales-is-IS.xml", + "locales-km-KH.xml", + "locales-af-ZA.xml", + "locales-de-AT.xml", + "locales-hu-HU.xml", + "locales-pa-PK.xml", + "locales-ro-RO.xml", + "locales-zh-CN.xml", + "locales-da-DK.xml", + "locales-fa-IR.xml", + "locales-id-ID.xml", + "locales-pt-BR.xml", + "locales-th-TH.xml", + "locales-gl-ES.xml", + "locales-bal-PK.xml", + "locales-brh-PK.xml", + "locales-ru-RU.xml", + "locales-ar.xml", + "locales-nn-NO.xml", + "locales-pt-PT.xml", + "locales-nl-NL.xml", + "locales-sl-SI.xml", + "locales-en-US.xml", + "locales-es-ES.xml", + "locales-eu.xml", + "locales-he-IL.xml", + "locales-hi-IN.xml", + "locales-ko-KR.xml" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/csl/locales", + "files": [ + "locales-ms-MY.xml", + "locales-sr-RS.xml", + "locales-bg-BG.xml", + "locales-cy-GB.xml", + "locales-la.xml", + "locales-lij-IT.xml", + "locales-lv-LV.xml", + "locales-en-GB.xml", + "locales-et-EE.xml", + "locales-hy-AM.xml", + "locales-uk-UA.xml", + "locales-de-DE.xml", + "locales-is-IS.xml", + "locales-km-KH.xml", + "locales-af-ZA.xml", + "locales-de-AT.xml", + "locales-hu-HU.xml", + "locales-pa-PK.xml", + "locales-ro-RO.xml", + "locales-zh-CN.xml", + "locales-da-DK.xml", + "locales-fa-IR.xml", + "locales-id-ID.xml", + "locales-pt-BR.xml", + "locales-th-TH.xml", + "locales-gl-ES.xml", + "locales-bal-PK.xml", + "locales-brh-PK.xml", + "locales-ru-RU.xml", + "locales-ar.xml", + "locales-nn-NO.xml", + "locales-pt-PT.xml", + "locales-nl-NL.xml", + "locales-sl-SI.xml", + "locales-en-US.xml", + "locales-es-ES.xml", + "locales-eu.xml", + "locales-he-IL.xml", + "locales-hi-IN.xml", + "locales-ko-KR.xml" + ] + }, + { + "added": [ + "apa.csl", + "harvard-cite-them-right.csl", + "ieee.csl", + "modern-language-association.csl", + "nature.csl", + "american-anthropological-association.csl", + "american-medical-association.csl", + "american-sociological-association.csl", + "chicago-author-date.csl", + "chicago-notes-bibliography.csl", + "american-political-science-association.csl" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/csl/styles", + "files": [ + "apa.csl", + "harvard-cite-them-right.csl", + "ieee.csl", + "modern-language-association.csl", + "nature.csl", + "american-anthropological-association.csl", + "american-medical-association.csl", + "american-sociological-association.csl", + "chicago-author-date.csl", + "chicago-notes-bibliography.csl", + "american-political-science-association.csl" + ] + }, + { + "added": [ + "plugin_style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/css", + "files": [ + "plugin_style.css" + ] + }, + { + "added": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/dark", + "files": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ] + }, + { + "added": [ + "checkmark.png", + "checkmark.svg", + "x.png", + "x.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/img", + "files": [ + "checkmark.png", + "checkmark.svg", + "x.png", + "x.svg" + ] + }, + { + "added": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/light", + "files": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ] + }, + { + "added": [ + "es-ES.json", + "nl-NL.json", + "zh-ZH.json", + "fr-FR.json", + "pt-BR.json", + "it-IT.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "de-DE.json", + "ja-JA.json", + "langs.json", + "pt-PT.json", + "ru-RU.json", + "sq-AL.json", + "cs-CZ.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/translations", + "files": [ + "es-ES.json", + "nl-NL.json", + "zh-ZH.json", + "fr-FR.json", + "pt-BR.json", + "it-IT.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "de-DE.json", + "ja-JA.json", + "langs.json", + "pt-PT.json", + "ru-RU.json", + "sq-AL.json", + "cs-CZ.json" + ] + }, + { + "added": [ + "citeproc", + "mendeley-sdk" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/vendor", + "files": [ + "citeproc", + "mendeley-sdk" + ] + }, + { + "added": [ + "citeproc_commonjs.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/vendor/citeproc", + "files": [ + "citeproc_commonjs.js" + ] + }, + { + "added": [ + "standalone.min.js", + "standalone.min.js.map" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/vendor/mendeley-sdk", + "files": [ + "standalone.min.js", + "standalone.min.js.map" + ] + }, + { + "added": [ + "README.md", + "config.json", + "licenses", + "resources", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "index.html", + "scripts", + "translations" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}", + "files": [ + "README.md", + "config.json", + "licenses", + "resources", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "index.html", + "scripts", + "translations" + ] + }, + { + "added": [ + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/licenses", + "files": [ + "jQuery.license" + ] + }, + { + "added": [ + "css", + "dark", + "light", + "store" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources", + "files": [ + "css", + "dark", + "light", + "store" + ] + }, + { + "added": [ + "plugin_style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/css", + "files": [ + "plugin_style.css" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/dark", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/light", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "synonim.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/scripts", + "files": [ + "synonim.js" + ] + }, + { + "added": [ + "it-IT.json", + "pt-BR.json", + "sq-AL.json", + "zh-ZH.json", + "de-DE.json", + "es-ES.json", + "ja-JA.json", + "langs.json", + "ru-RU.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "cs-CS.json", + "fr-FR.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/translations", + "files": [ + "it-IT.json", + "pt-BR.json", + "sq-AL.json", + "zh-ZH.json", + "de-DE.json", + "es-ES.json", + "ja-JA.json", + "langs.json", + "ru-RU.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "cs-CS.json", + "fr-FR.json" + ] + }, + { + "added": [ + "jquery" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/vendor", + "files": [ + "jquery" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "3rd-Party.txt", + "CHANGELOG.md", + "resources", + "translations", + "vendor", + "README.md", + "config.json", + "index.html", + "licenses", + "scripts" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}", + "files": [ + "3rd-Party.txt", + "CHANGELOG.md", + "resources", + "translations", + "vendor", + "README.md", + "config.json", + "index.html", + "licenses", + "scripts" + ] + }, + { + "added": [ + "js-beautify.license", + "prettier.license", + "prettier@plugin-php.license", + "spectrum.license", + "xml-formatter.license", + "Highlight.license", + "Select2.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/licenses", + "files": [ + "js-beautify.license", + "prettier.license", + "prettier@plugin-php.license", + "spectrum.license", + "xml-formatter.license", + "Highlight.license", + "Select2.license", + "jQuery.license" + ] + }, + { + "added": [ + "css", + "dark", + "light", + "store" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources", + "files": [ + "css", + "dark", + "light", + "store" + ] + }, + { + "added": [ + "plugin_style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/css", + "files": [ + "plugin_style.css" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/dark", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/light", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "scrollable_div.js", + "highlight.js", + "highlight_ie.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/scripts", + "files": [ + "scrollable_div.js", + "highlight.js", + "highlight_ie.js" + ] + }, + { + "added": [ + "cs-CZ.json", + "es-ES.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "ru-RU.json", + "sq-AL.json", + "sr-Latn-RS.json", + "de-DE.json", + "fr-FR.json", + "ja-JA.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "zh-ZH.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/translations", + "files": [ + "cs-CZ.json", + "es-ES.json", + "it-IT.json", + "langs.json", + "pt-BR.json", + "ru-RU.json", + "sq-AL.json", + "sr-Latn-RS.json", + "de-DE.json", + "fr-FR.json", + "ja-JA.json", + "si-SI.json", + "sr-Cyrl-RS.json", + "zh-ZH.json" + ] + }, + { + "added": [ + "jquery", + "js-beautify-1.14.0", + "prettier", + "select2-4.0.13", + "spectrum", + "xml-formatter", + "highlight" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor", + "files": [ + "jquery", + "js-beautify-1.14.0", + "prettier", + "select2-4.0.13", + "spectrum", + "xml-formatter", + "highlight" + ] + }, + { + "added": [ + "LICENSE", + "README.md", + "highlight.min.js", + "styles" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/highlight", + "files": [ + "LICENSE", + "README.md", + "highlight.min.js", + "styles" + ] + }, + { + "added": [ + "xml_1.css", + "far.css", + "github.css", + "idea.css", + "qtcreator_dark.css", + "vs2015.css", + "xml_2.css", + "androidstudio.css", + "foundation.css", + "github-gist.css", + "googlecode.css", + "qtcreator_light.css", + "vs.css", + "xcode.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/highlight/styles", + "files": [ + "xml_1.css", + "far.css", + "github.css", + "idea.css", + "qtcreator_dark.css", + "vs2015.css", + "xml_2.css", + "androidstudio.css", + "foundation.css", + "github-gist.css", + "googlecode.css", + "qtcreator_light.css", + "vs.css", + "xcode.css" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "beautify-html.js", + "beautify.js", + "LICENSE", + "beautify-css.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/js-beautify-1.14.0", + "files": [ + "beautify-html.js", + "beautify.js", + "LICENSE", + "beautify-css.js" + ] + }, + { + "added": [ + "plugin-php", + "standalone@2.3.2.js", + "LICENSE", + "parser-babel@2.3.2.js", + "parser-html@2.3.2.js", + "parser-markdown@2.3.2.js", + "parser-postcss@2.3.2.js", + "parser-typescript@2.3.2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/prettier", + "files": [ + "plugin-php", + "standalone@2.3.2.js", + "LICENSE", + "parser-babel@2.3.2.js", + "parser-html@2.3.2.js", + "parser-markdown@2.3.2.js", + "parser-postcss@2.3.2.js", + "parser-typescript@2.3.2.js" + ] + }, + { + "added": [ + "LICENSE", + "plugin-php.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/prettier/plugin-php", + "files": [ + "LICENSE", + "plugin-php.js" + ] + }, + { + "added": [ + "LICENSE.md", + "README.md", + "css", + "js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/select2-4.0.13", + "files": [ + "LICENSE.md", + "README.md", + "css", + "js" + ] + }, + { + "added": [ + "select2.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/select2-4.0.13/css", + "files": [ + "select2.css" + ] + }, + { + "added": [ + "select2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/select2-4.0.13/js", + "files": [ + "select2.js" + ] + }, + { + "added": [ + "spectrum.css", + "spectrum.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/spectrum", + "files": [ + "spectrum.css", + "spectrum.js" + ] + }, + { + "added": [ + "LICENSE", + "xml-formatter.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/vendor/xml-formatter", + "files": [ + "LICENSE", + "xml-formatter.js" + ] + }, + { + "added": [ + "info-window.html", + "licenses", + "postcss.config.mjs", + "resources", + "translations", + "vite.config.mjs", + "3rd-party.txt", + "AUTHORS.md", + "LICENSE.txt", + "config.json", + "vendor", + "CHANGELOG.md", + "dist", + "edit-window.html", + "index.html" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}", + "files": [ + "info-window.html", + "licenses", + "postcss.config.mjs", + "resources", + "translations", + "vite.config.mjs", + "3rd-party.txt", + "AUTHORS.md", + "LICENSE.txt", + "config.json", + "vendor", + "CHANGELOG.md", + "dist", + "edit-window.html", + "index.html" + ] + }, + { + "added": [ + "edit-window.modern.js.map", + "styles.css", + "bundle.modern.js", + "bundle.modern.js.map", + "edit-window.css", + "edit-window.modern.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/dist", + "files": [ + "edit-window.modern.js.map", + "styles.css", + "bundle.modern.js", + "bundle.modern.js.map", + "edit-window.css", + "edit-window.modern.js" + ] + }, + { + "added": [ + "core-js.license", + "citeproc.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/licenses", + "files": [ + "core-js.license", + "citeproc.license" + ] + }, + { + "added": [ + "img", + "light", + "store", + "csl", + "dark" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources", + "files": [ + "img", + "light", + "store", + "csl", + "dark" + ] + }, + { + "added": [ + "locales", + "styles", + "styles.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/csl", + "files": [ + "locales", + "styles", + "styles.json" + ] + }, + { + "added": [ + "locales-lij-IT.xml", + "locales-uk-UA.xml", + "locales-vi-VN.xml", + "locales-es-ES.xml", + "locales-hu-HU.xml", + "locales-is-IS.xml", + "locales-lv-LV.xml", + "locales-nn-NO.xml", + "locales-ru-RU.xml", + "locales-sk-SK.xml", + "locales-eu.xml", + "locales-sl-SI.xml", + "locales-tr-TR.xml", + "locales-cs-CZ.xml", + "locales-ja-JP.xml", + "locales-de-AT.xml", + "locales-hy-AM.xml", + "locales-km-KH.xml", + "locales-pt-PT.xml", + "locales-sr-Cyrl-RS.xml", + "locales-hi-IN.xml", + "locales-pl-PL.xml", + "locales-sr-Latn-RS.xml", + "locales-es-CL.xml", + "locales-pt-BR.xml", + "locales-ro-RO.xml", + "locales-id-ID.xml", + "locales-mn-MN.xml", + "locales-ca-AD.xml", + "locales-fi-FI.xml", + "locales-ms-MY.xml", + "locales-pa-PK.xml", + "locales-sr-RS.xml", + "locales-sv-SE.xml", + "locales-cy-GB.xml", + "locales-de-CH.xml", + "locales-en-US.xml", + "locales-es-MX.xml", + "locales-fr-FR.xml", + "locales-lt-LT.xml" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/csl/locales", + "files": [ + "locales-lij-IT.xml", + "locales-uk-UA.xml", + "locales-vi-VN.xml", + "locales-es-ES.xml", + "locales-hu-HU.xml", + "locales-is-IS.xml", + "locales-lv-LV.xml", + "locales-nn-NO.xml", + "locales-ru-RU.xml", + "locales-sk-SK.xml", + "locales-eu.xml", + "locales-sl-SI.xml", + "locales-tr-TR.xml", + "locales-cs-CZ.xml", + "locales-ja-JP.xml", + "locales-de-AT.xml", + "locales-hy-AM.xml", + "locales-km-KH.xml", + "locales-pt-PT.xml", + "locales-sr-Cyrl-RS.xml", + "locales-hi-IN.xml", + "locales-pl-PL.xml", + "locales-sr-Latn-RS.xml", + "locales-es-CL.xml", + "locales-pt-BR.xml", + "locales-ro-RO.xml", + "locales-id-ID.xml", + "locales-mn-MN.xml", + "locales-ca-AD.xml", + "locales-fi-FI.xml", + "locales-ms-MY.xml", + "locales-pa-PK.xml", + "locales-sr-RS.xml", + "locales-sv-SE.xml", + "locales-cy-GB.xml", + "locales-de-CH.xml", + "locales-en-US.xml", + "locales-es-MX.xml", + "locales-fr-FR.xml", + "locales-lt-LT.xml" + ] + }, + { + "added": [ + "apa.csl", + "ieee.csl", + "nature.csl", + "american-political-science-association.csl", + "chicago-author-date.csl", + "chicago-notes-bibliography.csl", + "harvard-cite-them-right.csl", + "modern-language-association.csl", + "american-anthropological-association.csl", + "american-medical-association.csl", + "american-sociological-association.csl" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/csl/styles", + "files": [ + "apa.csl", + "ieee.csl", + "nature.csl", + "american-political-science-association.csl", + "chicago-author-date.csl", + "chicago-notes-bibliography.csl", + "harvard-cite-them-right.csl", + "modern-language-association.csl", + "american-anthropological-association.csl", + "american-medical-association.csl", + "american-sociological-association.csl" + ] + }, + { + "added": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/dark", + "files": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ] + }, + { + "added": [ + "checkmark.svg", + "x.png", + "x.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/img", + "files": [ + "checkmark.svg", + "x.png", + "x.svg" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/light", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "nl-NL.json", + "pt-PT.json", + "ru-RU.json", + "sr-Latn-RS.json", + "sr-Cyrl-RS.json", + "cs-CS.json", + "de-DE.json", + "zh-ZH.json", + "fr-FR.json", + "langs.json", + "pt-BR.json", + "sq-AL.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/translations", + "files": [ + "nl-NL.json", + "pt-PT.json", + "ru-RU.json", + "sr-Latn-RS.json", + "sr-Cyrl-RS.json", + "cs-CS.json", + "de-DE.json", + "zh-ZH.json", + "fr-FR.json", + "langs.json", + "pt-BR.json", + "sq-AL.json", + "es-ES.json", + "it-IT.json", + "ja-JA.json" + ] + }, + { + "added": [ + "citeproc" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/vendor", + "files": [ + "citeproc" + ] + }, + { + "added": [ + "citeproc_commonjs.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/vendor/citeproc", + "files": [ + "citeproc_commonjs.js" + ] + }, + { + "added": [ + "config.json", + "resources", + "settings.html", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "README.md", + "index.html", + "licenses", + "scripts", + "translations" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}", + "files": [ + "config.json", + "resources", + "settings.html", + "vendor", + "3rd-Party.txt", + "CHANGELOG.md", + "README.md", + "index.html", + "licenses", + "scripts", + "translations" + ] + }, + { + "added": [ + "Select2.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/licenses", + "files": [ + "Select2.license", + "jQuery.license" + ] + }, + { + "added": [ + "light", + "store", + "dark" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources", + "files": [ + "light", + "store", + "dark" + ] + }, + { + "added": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/dark", + "files": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/light", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "settings.js", + "speech.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/scripts", + "files": [ + "settings.js", + "speech.js" + ] + }, + { + "added": [ + "cs-CS.json", + "it-IT.json", + "nl-NL.json", + "sq-AL.json", + "zh-ZH.json", + "ja-JA.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "es-ES.json", + "fr-FR.json", + "uk-UA.json", + "de-DE.json", + "langs.json", + "pt-BR.json", + "pt-PT.json", + "ru-RU.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/translations", + "files": [ + "cs-CS.json", + "it-IT.json", + "nl-NL.json", + "sq-AL.json", + "zh-ZH.json", + "ja-JA.json", + "sr-Cyrl-RS.json", + "sr-Latn-RS.json", + "es-ES.json", + "fr-FR.json", + "uk-UA.json", + "de-DE.json", + "langs.json", + "pt-BR.json", + "pt-PT.json", + "ru-RU.json" + ] + }, + { + "added": [ + "guessLanguage", + "jquery", + "select2-4.0.13" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor", + "files": [ + "guessLanguage", + "jquery", + "select2-4.0.13" + ] + }, + { + "added": [ + "README.md", + "_languageData.js", + "guessLanguage.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor/guessLanguage", + "files": [ + "README.md", + "_languageData.js", + "guessLanguage.js" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "README.md", + "css", + "js", + "LICENSE.md" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor/select2-4.0.13", + "files": [ + "README.md", + "css", + "js", + "LICENSE.md" + ] + }, + { + "added": [ + "select2.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor/select2-4.0.13/css", + "files": [ + "select2.css" + ] + }, + { + "added": [ + "select2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/vendor/select2-4.0.13/js", + "files": [ + "select2.js" + ] + }, + { + "added": [ + "resources", + "scripts", + "translations", + "CHANGELOG.md", + "index_about.html", + "vendor", + "3rd-Party.txt", + "README.md", + "config.json", + "index.html", + "licenses" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}", + "files": [ + "resources", + "scripts", + "translations", + "CHANGELOG.md", + "index_about.html", + "vendor", + "3rd-Party.txt", + "README.md", + "config.json", + "index.html", + "licenses" + ] + }, + { + "added": [ + "Select2.license", + "jQuery.license" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/licenses", + "files": [ + "Select2.license", + "jQuery.license" + ] + }, + { + "added": [ + "light", + "store", + "css", + "dark" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources", + "files": [ + "light", + "store", + "css", + "dark" + ] + }, + { + "added": [ + "plugin_style.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/css", + "files": [ + "plugin_style.css" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/dark", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/light", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "code.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/scripts", + "files": [ + "code.js" + ] + }, + { + "added": [ + "cs-CZ.json", + "de-De.json", + "es-ES.json", + "it-IT.json", + "pt-BR.json", + "sr-Latn-RS.json", + "zh-ZH.json", + "fr-FR.json", + "langs.json", + "ru-RU.json", + "sq-AL.json", + "sr-Cyrl-RS.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/translations", + "files": [ + "cs-CZ.json", + "de-De.json", + "es-ES.json", + "it-IT.json", + "pt-BR.json", + "sr-Latn-RS.json", + "zh-ZH.json", + "fr-FR.json", + "langs.json", + "ru-RU.json", + "sq-AL.json", + "sr-Cyrl-RS.json" + ] + }, + { + "added": [ + "jquery", + "select2-4.0.6-rc.1" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor", + "files": [ + "jquery", + "select2-4.0.6-rc.1" + ] + }, + { + "added": [ + "jquery-3.7.1.min.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/jquery", + "files": [ + "jquery-3.7.1.min.js" + ] + }, + { + "added": [ + "LICENSE.md", + "README.md", + "dist", + "docs" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/select2-4.0.6-rc.1", + "files": [ + "LICENSE.md", + "README.md", + "dist", + "docs" + ] + }, + { + "added": [ + "css", + "js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/select2-4.0.6-rc.1/dist", + "files": [ + "css", + "js" + ] + }, + { + "added": [ + "select2.css", + "select2.min.css" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/select2-4.0.6-rc.1/dist/css", + "files": [ + "select2.css", + "select2.min.css" + ] + }, + { + "added": [ + "select2.min.js", + "select2.full.js", + "select2.full.min.js", + "select2.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/select2-4.0.6-rc.1/dist/js", + "files": [ + "select2.min.js", + "select2.full.js", + "select2.full.min.js", + "select2.js" + ] + }, + { + "added": [ + "examples.html", + "index.html", + "options-old.html", + "options.html", + "README.md", + "announcements-4.0.html", + "community.html" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/vendor/select2-4.0.6-rc.1/docs", + "files": [ + "examples.html", + "index.html", + "options-old.html", + "options.html", + "README.md", + "announcements-4.0.html", + "community.html" + ] + }, + { + "added": [ + "AllFonts.js" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/common", + "files": [ + "AllFonts.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide", + "files": [ + "themes" + ] + }, + { + "added": [ + "theme35", + "theme14", + "theme16", + "theme2", + "theme25", + "theme28", + "theme6", + "theme7", + "theme15", + "theme19", + "theme31", + "theme5", + "theme8", + "theme10", + "theme12", + "theme24", + "theme33", + "theme23", + "theme9", + "theme1", + "theme30", + "theme36", + "theme4", + "themes.js", + "theme11", + "theme13", + "theme17", + "theme3", + "theme32", + "theme18", + "theme21", + "theme22", + "theme26", + "theme27", + "theme34", + "theme20", + "theme29" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes", + "files": [ + "theme35", + "theme14", + "theme16", + "theme2", + "theme25", + "theme28", + "theme6", + "theme7", + "theme15", + "theme19", + "theme31", + "theme5", + "theme8", + "theme10", + "theme12", + "theme24", + "theme33", + "theme23", + "theme9", + "theme1", + "theme30", + "theme36", + "theme4", + "themes.js", + "theme11", + "theme13", + "theme17", + "theme3", + "theme32", + "theme18", + "theme21", + "theme22", + "theme26", + "theme27", + "theme34", + "theme20", + "theme29" + ] + }, + { + "added": [ + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "media" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme1", + "files": [ + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "media" + ] + }, + { + "added": [ + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme10", + "files": [ + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "media", + "theme.bin", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme11", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "media", + "theme.bin", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ] + }, + { + "added": [ + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme12", + "files": [ + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png" + ] + }, + { + "added": [ + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "theme.bin", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme13", + "files": [ + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "theme.bin", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@4.5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme14", + "files": [ + "thumbnail@4.5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png" + ] + }, + { + "added": [ + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "theme.bin", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme15", + "files": [ + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "theme.bin", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme16", + "files": [ + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail.png" + ] + }, + { + "added": [ + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@1.25x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme17", + "files": [ + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@1.25x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme18", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ] + }, + { + "added": [ + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme19", + "files": [ + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail.png" + ] + }, + { + "added": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme2", + "files": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png" + ] + }, + { + "added": [ + "thumbnail.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme20", + "files": [ + "thumbnail.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme21", + "files": [ + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "Image__6mKU1e", + "Image__8wKc74", + "Image__ea6jwW", + "Image__pSYQv0", + "Image__sI3H7d", + "Image__uegbnC", + "media", + "thumbnail.png", + "Image__FNBYVq", + "Image__aLNXDK", + "Image__tUXZSl", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@4.5x.png", + "Image__Fz1Y28", + "Image__G1PuU7", + "theme.bin", + "thumbnail@5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme22", + "files": [ + "Image__6mKU1e", + "Image__8wKc74", + "Image__ea6jwW", + "Image__pSYQv0", + "Image__sI3H7d", + "Image__uegbnC", + "media", + "thumbnail.png", + "Image__FNBYVq", + "Image__aLNXDK", + "Image__tUXZSl", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@4.5x.png", + "Image__Fz1Y28", + "Image__G1PuU7", + "theme.bin", + "thumbnail@5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "media" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme23", + "files": [ + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "media" + ] + }, + { + "added": [ + "media", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme24", + "files": [ + "media", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "theme.bin", + "thumbnail.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme25", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "theme.bin", + "thumbnail.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png" + ] + }, + { + "added": [ + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme26", + "files": [ + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme27", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme28", + "files": [ + "media", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png" + ] + }, + { + "added": [ + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme29", + "files": [ + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme3", + "files": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme30", + "files": [ + "media", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme31", + "files": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "media", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4x.png" + ] + }, + { + "added": [ + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme32", + "files": [ + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ] + }, + { + "added": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme33", + "files": [ + "theme.bin", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "media", + "thumbnail@1.25x.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme34", + "files": [ + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme35", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@4x.png", + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme36", + "files": [ + "media", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png", + "thumbnail@4.5x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme4", + "files": [ + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "thumbnail.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "theme.bin", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme5", + "files": [ + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.75x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@2.5x.png", + "thumbnail@3.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme6", + "files": [ + "thumbnail@5x.png", + "theme.bin", + "thumbnail@1.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "media", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ] + }, + { + "added": [ + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme7", + "files": [ + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3.5x.png", + "thumbnail@4.5x.png", + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3x.png", + "thumbnail@4x.png", + "thumbnail@5x.png" + ] + }, + { + "added": [ + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@5x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme8", + "files": [ + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@3x.png", + "thumbnail@5x.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png", + "thumbnail@1.75x.png", + "thumbnail@2.5x.png" + ] + }, + { + "added": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme9", + "files": [ + "thumbnail@2.5x.png", + "thumbnail@2x.png", + "thumbnail@3.5x.png", + "thumbnail@1.75x.png", + "thumbnail@3x.png", + "thumbnail@4.5x.png", + "thumbnail@4x.png", + "thumbnail@5x.png", + "media", + "theme.bin", + "thumbnail.png", + "thumbnail@1.25x.png", + "thumbnail@1.5x.png" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/server", + "files": [ + "FileConverter" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/server/FileConverter", + "files": [ + "bin" + ] + }, + { + "added": [ + "AllFonts.js", + "font_selection.bin" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/server/FileConverter/bin", + "files": [ + "AllFonts.js", + "font_selection.bin" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/web-apps", + "files": [ + "apps" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/web-apps/apps", + "files": [ + "api" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/web-apps/apps/api", + "files": [ + "documents" + ] + } + ], + "diff_token_dirs": [ + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store/icons", + "files": [ + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png" + ] + }, + { + "added": [ + "screen_3.png", + "screen_4.png", + "screen_1.png", + "screen_2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store/screenshots", + "files": [ + "screen_3.png", + "screen_4.png", + "screen_1.png", + "screen_2.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store/icons", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "screen_2.png", + "screen_1.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store/screenshots", + "files": [ + "screen_2.png", + "screen_1.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store/icons", + "files": [ + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store/icons", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store/icons", + "files": [ + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png" + ] + }, + { + "added": [ + "screen_5.png", + "screen_6.png", + "screen_1.png", + "screen_2.png", + "screen_3.png", + "screen_4.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store/screenshots", + "files": [ + "screen_5.png", + "screen_6.png", + "screen_1.png", + "screen_2.png", + "screen_3.png", + "screen_4.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store/icons", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "screen_3.png", + "screen_1.png", + "screen_2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store/screenshots", + "files": [ + "screen_3.png", + "screen_1.png", + "screen_2.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store/icons", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "screen_1.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store/screenshots", + "files": [ + "screen_1.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store/icons", + "files": [ + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png", + "screen_3.png", + "screen_4.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png", + "screen_3.png", + "screen_4.png" + ] + }, + { + "added": [ + "screenshots", + "icons" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store", + "files": [ + "screenshots", + "icons" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store/icons", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ] + }, + { + "added": [ + "icons", + "screenshots" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store", + "files": [ + "icons", + "screenshots" + ] + }, + { + "added": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store/icons", + "files": [ + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png", + "icon@1.75x.png", + "icon@2x.png" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png", + "screen_3.png" + ] + }, + { + "added": [ + "screenshots", + "icons" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store", + "files": [ + "screenshots", + "icons" + ] + }, + { + "added": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store/icons", + "files": [ + "icon@1.75x.png", + "icon@2x.png", + "icon.png", + "icon.svg", + "icon@1.25x.png", + "icon@1.5x.png" + ] + }, + { + "added": [ + "screen_1.png", + "screen_2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store/screenshots", + "files": [ + "screen_1.png", + "screen_2.png" + ] + }, + { + "added": [ + "fonts_thumbnail_ea@1.25x.png.bin", + "themes_thumbnail.png", + "themes_thumbnail@3.5x.png", + "fonts_thumbnail_ea@1.75x.png.bin", + "fonts_thumbnail.png.bin", + "fonts_thumbnail@1.5x.png.bin", + "fonts_thumbnail_ea.png.bin", + "fonts_thumbnail_ea@1.25x.png", + "fonts_thumbnail_ea@1.5x.png.bin", + "fonts_thumbnail_ea@2x.png", + "fonts_thumbnail_ea@2x.png.bin", + "themes_thumbnail@2x.png", + "fonts_thumbnail_ea.png", + "fonts_thumbnail@1.25x.png", + "fonts_thumbnail_ea@1.75x.png", + "fonts_thumbnail@1.25x.png.bin", + "fonts_thumbnail_ea@1.5x.png", + "themes_thumbnail@2.5x.png", + "themes_thumbnail@1.5x.png", + "fonts_thumbnail@1.5x.png", + "fonts_thumbnail@2x.png.bin", + "themes_thumbnail@3x.png", + "fonts_thumbnail.png", + "fonts_thumbnail@1.75x.png.bin", + "themes_thumbnail@1.25x.png", + "themes_thumbnail@1.75x.png", + "fonts_thumbnail@1.75x.png", + "fonts_thumbnail@2x.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/common/Images", + "files": [ + "fonts_thumbnail_ea@1.25x.png.bin", + "themes_thumbnail.png", + "themes_thumbnail@3.5x.png", + "fonts_thumbnail_ea@1.75x.png.bin", + "fonts_thumbnail.png.bin", + "fonts_thumbnail@1.5x.png.bin", + "fonts_thumbnail_ea.png.bin", + "fonts_thumbnail_ea@1.25x.png", + "fonts_thumbnail_ea@1.5x.png.bin", + "fonts_thumbnail_ea@2x.png", + "fonts_thumbnail_ea@2x.png.bin", + "themes_thumbnail@2x.png", + "fonts_thumbnail_ea.png", + "fonts_thumbnail@1.25x.png", + "fonts_thumbnail_ea@1.75x.png", + "fonts_thumbnail@1.25x.png.bin", + "fonts_thumbnail_ea@1.5x.png", + "themes_thumbnail@2.5x.png", + "themes_thumbnail@1.5x.png", + "fonts_thumbnail@1.5x.png", + "fonts_thumbnail@2x.png.bin", + "themes_thumbnail@3x.png", + "fonts_thumbnail.png", + "fonts_thumbnail@1.75x.png.bin", + "themes_thumbnail@1.25x.png", + "themes_thumbnail@1.75x.png", + "fonts_thumbnail@1.75x.png", + "fonts_thumbnail@2x.png" + ] + }, + { + "added": [ + "image1.jpg", + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image5.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme12/media", + "files": [ + "image1.jpg", + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image5.jpg" + ] + }, + { + "added": [ + "image2.png", + "image3.jpg", + "image4.png", + "image1.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme13/media", + "files": [ + "image2.png", + "image3.jpg", + "image4.png", + "image1.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme15/media", + "files": [ + "image1.png", + "image2.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme16/media", + "files": [ + "image1.png", + "image2.png" + ] + }, + { + "added": [ + "image1.jpg", + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image5.jpg", + "image6.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme17/media", + "files": [ + "image1.jpg", + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image5.jpg", + "image6.jpg" + ] + }, + { + "added": [ + "image7.png", + "image8.png", + "image1.png", + "image4.png", + "image5.png", + "image6.png", + "image9.png", + "image10.png", + "image11.png", + "image2.png", + "image3.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme18/media", + "files": [ + "image7.png", + "image8.png", + "image1.png", + "image4.png", + "image5.png", + "image6.png", + "image9.png", + "image10.png", + "image11.png", + "image2.png", + "image3.png" + ] + }, + { + "added": [ + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image6.png", + "image7.png", + "image1.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme19/media", + "files": [ + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image6.png", + "image7.png", + "image1.png" + ] + }, + { + "added": [ + "image1.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme20/media", + "files": [ + "image1.jpg" + ] + }, + { + "added": [ + "image2.png", + "image3.png", + "image4.png", + "image1.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme21/media", + "files": [ + "image2.png", + "image3.png", + "image4.png", + "image1.jpg" + ] + }, + { + "added": [ + "image10.png", + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image8.png", + "image1.png", + "image11.png", + "image12.png", + "image13.png", + "image6.png", + "image7.png", + "image9.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme24/media", + "files": [ + "image10.png", + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image8.png", + "image1.png", + "image11.png", + "image12.png", + "image13.png", + "image6.png", + "image7.png", + "image9.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme25/media", + "files": [ + "image1.png", + "image2.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme27/media", + "files": [ + "image1.png", + "image2.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme29/media", + "files": [ + "image1.png", + "image2.png" + ] + }, + { + "added": [ + "image1.jpg", + "image2.jpg", + "image3.png", + "image4.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme3/media", + "files": [ + "image1.jpg", + "image2.jpg", + "image3.png", + "image4.png" + ] + }, + { + "added": [ + "image2.png", + "image3.svg", + "image4.svg", + "image5.svg", + "image6.svg", + "image1.svg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme30/media", + "files": [ + "image2.png", + "image3.svg", + "image4.svg", + "image5.svg", + "image6.svg", + "image1.svg" + ] + }, + { + "added": [ + "image1.jpg", + "image2.png", + "image3.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme31/media", + "files": [ + "image1.jpg", + "image2.png", + "image3.png" + ] + }, + { + "added": [ + "image1.png", + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image6.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme32/media", + "files": [ + "image1.png", + "image2.png", + "image3.png", + "image4.png", + "image5.png", + "image6.jpg" + ] + }, + { + "added": [ + "image1.png" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme33/media", + "files": [ + "image1.png" + ] + }, + { + "added": [ + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image1.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme34/media", + "files": [ + "image2.jpg", + "image3.jpg", + "image4.jpg", + "image1.jpg" + ] + }, + { + "added": [ + "image4.png", + "image6.png", + "image8.png", + "image3.jpg", + "image5.png", + "image7.jpg", + "image9.png", + "image1.jpg", + "image2.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme35/media", + "files": [ + "image4.png", + "image6.png", + "image8.png", + "image3.jpg", + "image5.png", + "image7.jpg", + "image9.png", + "image1.jpg", + "image2.jpg" + ] + }, + { + "added": [ + "image5.jpg", + "image6.jpg", + "image7.jpg", + "image1.jpg", + "image2.png", + "image3.png", + "image4.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme36/media", + "files": [ + "image5.jpg", + "image6.jpg", + "image7.jpg", + "image1.jpg", + "image2.png", + "image3.png", + "image4.jpg" + ] + }, + { + "added": [ + "image1.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme5/media", + "files": [ + "image1.jpg" + ] + }, + { + "added": [ + "image1.jpg", + "image2.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme6/media", + "files": [ + "image1.jpg", + "image2.jpg" + ] + }, + { + "added": [ + "image3.jpg", + "image1.jpg", + "image2.jpg" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme8/media", + "files": [ + "image3.jpg", + "image1.jpg", + "image2.jpg" + ] + }, + { + "added": [ + "api.js" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/var/www/onlyoffice/documentserver/web-apps/apps/api/documents", + "files": [ + "api.js" + ] + } + ], + "diff_total": 2624, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "onlyoffice/documentserver:9.4.0", + "mounts": [ + { + "class": "named-declared", + "files": 11, + "name": "volgate-onlyoffice_onlyoffice_logs", + "sample": [ + "documentserver/nginx.error.log", + "documentserver/docservice/out.log", + "documentserver/docservice/err.log", + "documentserver/metrics/out.log", + "documentserver/metrics/err.log", + "documentserver/converter/out.log", + "documentserver/converter/err.log", + "documentserver/example/out.log", + "documentserver/example/err.log", + "documentserver-example/out.log", + "documentserver-example/err.log" + ], + "source": "/var/lib/docker/volumes/volgate-onlyoffice_onlyoffice_logs/_data", + "target": "/var/log/onlyoffice", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "e6319f5231aa443954f584a6ae487239364548797499d2366e29b9e76341caea", + "sample": [], + "source": "/var/lib/docker/volumes/e6319f5231aa443954f584a6ae487239364548797499d2366e29b9e76341caea/_data", + "target": "/usr/share/fonts/truetype/custom", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "4fe888f70a59a738797ab9c0751148bf7e857c1c25894e9b1f14017d62a9940c", + "sample": [], + "source": "/var/lib/docker/volumes/4fe888f70a59a738797ab9c0751148bf7e857c1c25894e9b1f14017d62a9940c/_data", + "target": "/var/lib/onlyoffice", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 3, + "name": "volgate-onlyoffice_onlyoffice_data", + "sample": [ + "wopi_public.key", + "wopi_private.key", + ".private/ds_release_date" + ], + "source": "/var/lib/docker/volumes/volgate-onlyoffice_onlyoffice_data/_data", + "target": "/var/www/onlyoffice/Data", + "writable_by_app": "yes" + } + ], + "name": "onlyoffice", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "onlyoffice_data", + "onlyoffice_logs" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "JWT_SECRET", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 302" + ], + "fixture": null, + "ports": [ + 80 + ] + }, + "reasons": [ + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@2x.png', 'icon.png', 'icon.svg', 'icon@1.25x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_3.png', 'screen_4.png', 'screen_1.png', 'screen_2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon.png', 'icon.svg', 'icon@1.25x.png', 'icon@1.5x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{38E022EA-AD92-45FC-B22B-49DF39746DB4}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_2.png', 'screen_1.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon.svg', 'icon@1.25x.png', 'icon@1.5x.png', 'icon@1.75x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{440EBF13-9B19-4BD8-8621-05200E58140B}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png', 'screen_3.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon.png', 'icon.svg', 'icon@1.25x.png', 'icon@1.5x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{7327FC95-16DA-41D9-9AF2-0E7F449F6800}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@1.5x.png', 'icon@1.75x.png', 'icon@2x.png', 'icon.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{9DC93CDB-B576-4F0C-B55E-FCC9C48DD007}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_5.png', 'screen_6.png', 'screen_1.png', 'screen_2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon.png', 'icon.svg', 'icon@1.25x.png', 'icon@1.5x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9441}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_3.png', 'screen_1.png', 'screen_2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@1.75x.png', 'icon@2x.png', 'icon.png', 'icon.svg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9840}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@1.25x.png', 'icon@1.5x.png', 'icon@1.75x.png', 'icon@2x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BE5CBF95-C0AD-4842-B157-AC40FEDD9841}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png', 'screen_3.png', 'screen_4.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['screenshots', 'icons']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@1.75x.png', 'icon@2x.png', 'icon.png', 'icon.svg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{BFC5D5C6-89DE-4168-9565-ABD8D1E48711}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png', 'screen_3.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['icons', 'screenshots']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon.png', 'icon.svg', 'icon@1.25x.png', 'icon@1.5x.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{D71C2EF0-F15B-47C7-80E9-86D671F9C595}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png', 'screen_3.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store (path suggests state, no database signature \u2014 judgement needed): ['screenshots', 'icons']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store/icons (path suggests state, no database signature \u2014 judgement needed): ['icon@1.75x.png', 'icon@2x.png', 'icon.png', 'icon.svg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{F30BDD79-23A0-4B05-8DE3-2AB77D03A1B4}/resources/store/screenshots (path suggests state, no database signature \u2014 judgement needed): ['screen_1.png', 'screen_2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/common/Images (path suggests state, no database signature \u2014 judgement needed): ['fonts_thumbnail_ea@1.25x.png.bin', 'themes_thumbnail.png', 'themes_thumbnail@3.5x.png', 'fonts_thumbnail_ea@1.75x.png.bin']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme12/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme13/media (path suggests state, no database signature \u2014 judgement needed): ['image2.png', 'image3.jpg', 'image4.png', 'image1.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme15/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme16/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme17/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme18/media (path suggests state, no database signature \u2014 judgement needed): ['image7.png', 'image8.png', 'image1.png', 'image4.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme19/media (path suggests state, no database signature \u2014 judgement needed): ['image2.png', 'image3.png', 'image4.png', 'image5.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme20/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme21/media (path suggests state, no database signature \u2014 judgement needed): ['image2.png', 'image3.png', 'image4.png', 'image1.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme24/media (path suggests state, no database signature \u2014 judgement needed): ['image10.png', 'image2.png', 'image3.png', 'image4.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme25/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme27/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme29/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme3/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg', 'image2.jpg', 'image3.png', 'image4.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme30/media (path suggests state, no database signature \u2014 judgement needed): ['image2.png', 'image3.svg', 'image4.svg', 'image5.svg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme31/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg', 'image2.png', 'image3.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme32/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png', 'image2.png', 'image3.png', 'image4.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme33/media (path suggests state, no database signature \u2014 judgement needed): ['image1.png']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme34/media (path suggests state, no database signature \u2014 judgement needed): ['image2.jpg', 'image3.jpg', 'image4.jpg', 'image1.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme35/media (path suggests state, no database signature \u2014 judgement needed): ['image4.png', 'image6.png', 'image8.png', 'image3.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme36/media (path suggests state, no database signature \u2014 judgement needed): ['image5.jpg', 'image6.jpg', 'image7.jpg', 'image1.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme5/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme6/media (path suggests state, no database signature \u2014 judgement needed): ['image1.jpg', 'image2.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs/slide/themes/theme8/media (path suggests state, no database signature \u2014 judgement needed): ['image3.jpg', 'image1.jpg', 'image2.jpg']", + "onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/web-apps/apps/api/documents (path suggests state, no database signature \u2014 judgement needed): ['api.js']" + ], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/opengist/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/opengist/probe.json new file mode 100644 index 00000000..8b95ffc3 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/opengist/probe.json @@ -0,0 +1,107 @@ +{ + "probe": { + "app": "opengist", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "opengist" + ], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "opengist" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc", + "files": [ + "passwd-", + "group-" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/home", + "files": [ + "opengist" + ] + }, + { + "added": [ + ".gitconfig" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/home/opengist", + "files": [ + ".gitconfig" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 10, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghcr.io/thomiceli/opengist:1.15", + "mounts": [ + { + "class": "named-declared", + "files": 9, + "name": "volgate-opengist_opengist_data", + "sample": [ + "opengist.db", + "opengist-secret.key", + "sessions/session-encrypt.key", + "opengist.index/index_meta.json", + "opengist.index/store/root.bolt", + "symlinks/config.yml", + "symlinks/opengist", + "log/opengist.log", + "ssh/opengist-ed25519" + ], + "source": "/var/lib/docker/volumes/volgate-opengist_opengist_data/_data", + "target": "/opengist", + "writable_by_app": "yes" + } + ], + "name": "opengist", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "opengist_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:6157/ -> 302" + ], + "fixture": null, + "ports": [ + 6157 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/outline/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/outline/probe.json new file mode 100644 index 00000000..97ce2fad --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/outline/probe.json @@ -0,0 +1,172 @@ +{ + "probe": { + "app": "outline", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1001, + "health": "healthy", + "image": "outlinewiki/outline:1.10.1", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-outline_outline_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-outline_outline_data/_data", + "target": "/var/lib/outline/data", + "writable_by_app": "yes" + } + ], + "name": "outline", + "restarts": null, + "status": "running", + "uid": 1001 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1669, + "name": "volgate-outline_outline_postgres_data", + "sample": [ + "18/docker/pg_ident.conf", + "18/docker/pg_hba.conf", + "18/docker/postmaster.pid", + "18/docker/postgresql.conf", + "18/docker/PG_VERSION", + "18/docker/postgresql.auto.conf", + "18/docker/postmaster.opts", + "18/docker/base/5/2612", + "18/docker/base/5/1418", + "18/docker/base/5/6117", + "18/docker/base/5/13510_fsm", + "18/docker/base/5/2655", + "18/docker/base/5/3609", + "18/docker/base/5/2662", + "18/docker/base/5/2683", + "18/docker/base/5/2832", + "18/docker/base/5/2679", + "18/docker/base/5/2608_vm", + "18/docker/base/5/2673", + "18/docker/base/5/2690", + "18/docker/base/5/2336", + "18/docker/base/5/2754", + "18/docker/base/5/2701", + "18/docker/base/5/4168", + "18/docker/base/5/2650", + "18/docker/base/5/2839", + "18/docker/base/5/2688", + "18/docker/base/5/2840", + "18/docker/base/5/1247_fsm", + "18/docker/base/5/3997", + "18/docker/base/5/3456_vm", + "18/docker/base/5/2667", + "18/docker/base/5/2678", + "18/docker/base/5/2696", + "18/docker/base/5/3456", + "18/docker/base/5/2228", + "18/docker/base/5/1259_fsm", + "18/docker/base/5/6351", + "18/docker/base/5/6106", + "18/docker/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-outline_outline_postgres_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "outline-postgres", + "restarts": null, + "status": "running", + "uid": 70 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-outline_outline_redis_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-outline_outline_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "outline-redis", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "outline_data", + "outline_postgres_data", + "outline_redis_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH", + "UTILS_SECRET" + ], + "exercise": [ + "172.18.0.2:3000/ -> 301", + "192.168.176.4:3000/ -> 301", + "fixture Outline: seed OK \u2014 outline: seeded document drilldoc-ed522bc2" + ], + "fixture": "fixture Outline: seed OK \u2014 outline: seeded document drilldoc-ed522bc2", + "ports": [ + 3000 + ] + }, + "reasons": [ + "outline: declared volume /var/lib/outline/data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "outline-redis: declared volume /data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/paperless-ngx/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/paperless-ngx/probe.json new file mode 100644 index 00000000..b96a6886 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/paperless-ngx/probe.json @@ -0,0 +1,255 @@ +{ + "probe": { + "app": "paperless-ngx", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1931, + "name": "volgate-paperlessngx_paperless_postgres_data", + "sample": [ + "18/docker/pg_ident.conf", + "18/docker/pg_hba.conf", + "18/docker/postmaster.pid", + "18/docker/postgresql.conf", + "18/docker/PG_VERSION", + "18/docker/postgresql.auto.conf", + "18/docker/postmaster.opts", + "18/docker/base/5/2612", + "18/docker/base/5/1418", + "18/docker/base/5/6117", + "18/docker/base/5/13510_fsm", + "18/docker/base/5/2655", + "18/docker/base/5/3609", + "18/docker/base/5/2662", + "18/docker/base/5/2683", + "18/docker/base/5/2832", + "18/docker/base/5/2679", + "18/docker/base/5/2608_vm", + "18/docker/base/5/2673", + "18/docker/base/5/2690", + "18/docker/base/5/2336", + "18/docker/base/5/2754", + "18/docker/base/5/2701", + "18/docker/base/5/4168", + "18/docker/base/5/2650", + "18/docker/base/5/2839", + "18/docker/base/5/2688", + "18/docker/base/5/2840", + "18/docker/base/5/1247_fsm", + "18/docker/base/5/3997", + "18/docker/base/5/3456_vm", + "18/docker/base/5/2667", + "18/docker/base/5/2678", + "18/docker/base/5/2696", + "18/docker/base/5/3456", + "18/docker/base/5/2228", + "18/docker/base/5/1259_fsm", + "18/docker/base/5/6351", + "18/docker/base/5/6106", + "18/docker/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_postgres_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "paperless-postgres", + "restarts": null, + "status": "running", + "uid": 70 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-paperlessngx_paperless_redis_data", + "sample": [ + "appendonlydir/appendonly.aof.1.incr.aof", + "appendonlydir/appendonly.aof.manifest", + "appendonlydir/appendonly.aof.1.base.rdb" + ], + "source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "paperless-redis", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 265, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "run", + "usr", + "var" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "share" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/var", + "files": [ + "log", + "cache", + "lib" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/var/lib", + "files": [ + "apt", + "dpkg" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 294, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15", + "mounts": [ + { + "class": "bind", + "files": 1, + "name": null, + "sample": [ + "media.lock" + ], + "source": "/srv/felhom-gate/hdd/appdata/paperless/media", + "target": "/usr/src/paperless/media", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/import/paperless", + "target": "/usr/src/paperless/consume", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/appdata/paperless/export", + "target": "/usr/src/paperless/export", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 9, + "name": "volgate-paperlessngx_paperless_data", + "sample": [ + "migration_lock", + ".index_version", + "celerybeat-schedule.db", + "log/celery.log", + "log/.__celery.lock", + "log/paperless.log", + "log/.__paperless.lock", + "index/MAIN_WRITELOCK", + "index/_MAIN_1.toc" + ], + "source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_data/_data", + "target": "/usr/src/paperless/data", + "writable_by_app": "yes" + } + ], + "name": "paperless-webserver", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "paperless_data", + "paperless_postgres_data", + "paperless_redis_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "PAPERLESS_ADMIN_PASSWORD", + "PAPERLESS_ADMIN_USER", + "PAPERLESS_OCR_LANGUAGE", + "PAPERLESS_SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8000/ -> 302", + "192.168.192.4:8000/ -> 302" + ], + "fixture": null, + "ports": [ + 8000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/probe.json new file mode 100644 index 00000000..e02e4dd0 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/probe.json @@ -0,0 +1,56 @@ +{ + "probe": { + "app": "papra", + "containers": [ + { + "diff_added": 176, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 177, + "diff_unresolved": [], + "exit": 137, + "gid": null, + "health": "unhealthy", + "image": "ghcr.io/papra-hq/papra:26.6.2-rootless", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-papra_papra_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data", + "target": "/app/app-data", + "writable_by_app": "unknown-uid" + } + ], + "name": "papra", + "restarts": null, + "status": "restarting", + "uid": null + } + ], + "declared_volumes": [ + "papra_data" + ], + "env_keys": [ + "AUTH_SECRET", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [], + "fixture": null, + "ports": [ + 1221 + ] + }, + "reasons": [ + "papra: not running (status=restarting exit=137 restarts=None)" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/rerun-alone/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/rerun-alone/probe.json new file mode 100644 index 00000000..b0f8bcb5 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/papra/rerun-alone/probe.json @@ -0,0 +1,56 @@ +{ + "probe": { + "app": "papra", + "containers": [ + { + "diff_added": 175, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 176, + "diff_unresolved": [], + "exit": 137, + "gid": null, + "health": "unhealthy", + "image": "ghcr.io/papra-hq/papra:26.6.2-rootless", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-papra_papra_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data", + "target": "/app/app-data", + "writable_by_app": "unknown-uid" + } + ], + "name": "papra", + "restarts": null, + "status": "restarting", + "uid": null + } + ], + "declared_volumes": [ + "papra_data" + ], + "env_keys": [ + "AUTH_SECRET", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [], + "fixture": null, + "ports": [ + 1221 + ] + }, + "reasons": [ + "papra: not running (status=restarting exit=137 restarts=None)" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plant-it/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plant-it/probe.json new file mode 100644 index 00000000..fa6edca7 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plant-it/probe.json @@ -0,0 +1,10 @@ +{ + "probe": { + "app": "plant-it", + "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\nError 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\n)" + }, + "reasons": [ + "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\nError 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\n)" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plex/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plex/probe.json new file mode 100644 index 00000000..beb91589 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/plex/probe.json @@ -0,0 +1,176 @@ +{ + "probe": { + "app": "plex", + "containers": [ + { + "diff_added": 63, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + ".firstRunComplete" + ], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + ".firstRunComplete" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc", + "files": [ + "cont-init.d", + "services.d" + ] + }, + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/etc/cont-init.d", + "files": [ + "40-plex-first-run", + "45-plex-hw-transcode-and-connected-tuner", + "50-plex-update" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/services.d", + "files": [ + "plex" + ] + }, + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/etc/services.d/plex", + "files": [ + "finish", + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 74, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "plexinc/pms-docker:1.41.4.9463-630c9f557", + "mounts": [ + { + "class": "bind", + "files": 4, + "name": null, + "sample": [ + "books/metadata.db-wal", + "books/metadata.db", + "books/metadata.db-shm", + "metube/Big_Buck_Bunny_360_10s_1MB.mp4" + ], + "source": "/srv/felhom-gate/hdd/userdata/media", + "target": "/media", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-plex_plex_transcode", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-plex_plex_transcode/_data", + "target": "/transcode", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 82, + "name": "volgate-plex_plex_config", + "sample": [ + "Library/Application Support/Plex Media Server/Preferences.xml", + "Library/Application Support/Plex Media Server/plexmediaserver.pid", + "Library/Application Support/Plex Media Server/Setup Plex.html", + "Library/Application Support/Plex Media Server/.LocalAdminToken", + "Library/Application Support/Plex Media Server/Codecs/.device-id", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml", + "Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo", + "Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict", + "Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies" + ], + "source": "/var/lib/docker/volumes/volgate-plex_plex_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "plex", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "plex_config", + "plex_transcode" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "PLEX_CLAIM", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:32400/ -> 200", + "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 for this venue) \u2014 plex: no non-browser seed route \u2014 the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue" + ], + "fixture": "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 for this venue) \u2014 plex: no non-browser seed route \u2014 the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue", + "ports": [ + 32400 + ] + }, + "reasons": [ + "plex: declared volume /transcode is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/privatebin/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/privatebin/probe.json new file mode 100644 index 00000000..9546e4eb --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/privatebin/probe.json @@ -0,0 +1,104 @@ +{ + "probe": { + "app": "privatebin", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 82, + "health": "healthy", + "image": "privatebin/pdo:2.0.6", + "mounts": [ + { + "class": "named-declared", + "files": 5, + "name": "volgate-privatebin_privatebin_data", + "sample": [ + "traffic_limiter.php", + "salt.php", + "purge_limiter.php", + ".htaccess", + "26/0c/260cce3d99910079.php" + ], + "source": "/var/lib/docker/volumes/volgate-privatebin_privatebin_data/_data", + "target": "/srv/data", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 14, + "name": "7eb4e7f20411a82cdac9c3704a0f2d963b055c0fb16b3061595d9727c140ee64", + "sample": [ + "nginx.pid", + "php-fpm.sock", + "services/nginx/run", + "services/nginx/supervise/control", + "services/nginx/supervise/death_tally", + "services/nginx/supervise/status", + "services/nginx/supervise/lock", + "services/.s6-svscan/control", + "services/.s6-svscan/lock", + "services/php-fpm85/run", + "services/php-fpm85/supervise/control", + "services/php-fpm85/supervise/death_tally", + "services/php-fpm85/supervise/status", + "services/php-fpm85/supervise/lock" + ], + "source": "/var/lib/docker/volumes/7eb4e7f20411a82cdac9c3704a0f2d963b055c0fb16b3061595d9727c140ee64/_data", + "target": "/run", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "bf4b15e53ba87a7f8a4077ecefc4fbe9956af355f85d44612981763a579b77fe", + "sample": [], + "source": "/var/lib/docker/volumes/bf4b15e53ba87a7f8a4077ecefc4fbe9956af355f85d44612981763a579b77fe/_data", + "target": "/tmp", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "24726ad13c5aae4968b89fb34d33e56f9bd4977d82b37f239790fcbd4d364128", + "sample": [], + "source": "/var/lib/docker/volumes/24726ad13c5aae4968b89fb34d33e56f9bd4977d82b37f239790fcbd4d364128/_data", + "target": "/var/lib/nginx/tmp", + "writable_by_app": "yes" + } + ], + "name": "privatebin", + "restarts": null, + "status": "running", + "uid": 65534 + } + ], + "declared_volumes": [ + "privatebin_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8080/ -> 200", + "fixture PrivateBin: seed OK \u2014 privatebin: seeded paste id=260cce3d99910079" + ], + "fixture": "fixture PrivateBin: seed OK \u2014 privatebin: seeded paste id=260cce3d99910079", + "ports": [ + 8080 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radarr/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radarr/probe.json new file mode 100644 index 00000000..90de1626 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radarr/probe.json @@ -0,0 +1,157 @@ +{ + "probe": { + "app": "radarr", + "containers": [ + { + "diff_added": 207, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "downloads" + ], + "changed_count": 5, + "db_signature": false, + "dir": "/", + "files": [ + "downloads" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/etc", + "files": [ + "crontabs", + "group-", + "s6-overlay", + "passwd-" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/crontabs", + "files": [ + "root" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay", + "files": [ + "s6-rc.d" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d", + "files": [ + "init-adduser" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d/init-adduser", + "files": [ + "branding" + ] + } + ], + "diff_token_dirs": [ + { + "added": [ + "movies" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/media", + "files": [ + "movies" + ] + } + ], + "diff_total": 222, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "lscr.io/linuxserver/radarr:6.4.4", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/movies", + "target": "/media/movies", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/downloads", + "target": "/downloads", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 9, + "name": "volgate-radarr_radarr_config", + "sample": [ + "radarr.pid", + "logs.db", + "radarr.db-wal", + "radarr.db-shm", + "radarr.db", + "config.xml", + "logs/radarr.debug.txt", + "logs/radarr.txt", + "asp/key-9e066fdb-a00e-470f-970d-5e947dfa0e1c.xml" + ], + "source": "/var/lib/docker/volumes/volgate-radarr_radarr_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "radarr", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "radarr_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:7878/ -> 200" + ], + "fixture": null, + "ports": [ + 7878 + ] + }, + "reasons": [ + "radarr: writable-layer writes at /media (path suggests state, no database signature \u2014 judgement needed): ['movies']" + ], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radicale/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radicale/probe.json new file mode 100644 index 00000000..02ff7c0a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/radicale/probe.json @@ -0,0 +1,59 @@ +{ + "probe": { + "app": "radicale", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghcr.io/kozea/radicale:3.8.1", + "mounts": [ + { + "class": "named-declared", + "files": 1, + "name": "volgate-radicale_radicale_data", + "sample": [ + "users" + ], + "source": "/var/lib/docker/volumes/volgate-radicale_radicale_data/_data", + "target": "/var/lib/radicale", + "writable_by_app": "yes" + } + ], + "name": "radicale", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "radicale_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "RADICALE_PASSWORD", + "RADICALE_USER", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:5232/ -> 302" + ], + "fixture": null, + "ports": [ + 5232 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/rallly/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/rallly/probe.json new file mode 100644 index 00000000..1752c81b --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/rallly/probe.json @@ -0,0 +1,164 @@ +{ + "probe": { + "app": "rallly", + "containers": [ + { + "diff_added": 6, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "apps" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/apps", + "files": [ + "web" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/apps/web", + "files": [ + ".next" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 11, + "diff_unresolved": [], + "exit": 0, + "gid": 101, + "health": "healthy", + "image": "lukevella/rallly:4.15.3", + "mounts": [], + "name": "rallly", + "restarts": null, + "status": "running", + "uid": 100 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1607, + "name": "volgate-rallly_rallly_postgres_data", + "sample": [ + "18/docker/pg_ident.conf", + "18/docker/pg_hba.conf", + "18/docker/postmaster.pid", + "18/docker/postgresql.conf", + "18/docker/PG_VERSION", + "18/docker/postgresql.auto.conf", + "18/docker/postmaster.opts", + "18/docker/base/5/2612", + "18/docker/base/5/1418", + "18/docker/base/5/6117", + "18/docker/base/5/13510_fsm", + "18/docker/base/5/2655", + "18/docker/base/5/3609", + "18/docker/base/5/2662", + "18/docker/base/5/2683", + "18/docker/base/5/2832", + "18/docker/base/5/2679", + "18/docker/base/5/2608_vm", + "18/docker/base/5/2673", + "18/docker/base/5/2690", + "18/docker/base/5/2336", + "18/docker/base/5/2754", + "18/docker/base/5/2701", + "18/docker/base/5/4168", + "18/docker/base/5/2650", + "18/docker/base/5/2839", + "18/docker/base/5/2688", + "18/docker/base/5/2840", + "18/docker/base/5/1247_fsm", + "18/docker/base/5/3997", + "18/docker/base/5/3456_vm", + "18/docker/base/5/2667", + "18/docker/base/5/2678", + "18/docker/base/5/2696", + "18/docker/base/5/3456", + "18/docker/base/5/2228", + "18/docker/base/5/1259_fsm", + "18/docker/base/5/6351", + "18/docker/base/5/6106", + "18/docker/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-rallly_rallly_postgres_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "rallly-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "rallly_postgres_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_PASSWORD", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 200", + "192.168.240.3:3000/ -> 200" + ], + "fixture": null, + "ports": [ + 3000 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/recipe-importer/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/recipe-importer/probe.json new file mode 100644 index 00000000..006ab810 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/recipe-importer/probe.json @@ -0,0 +1,113 @@ +{ + "probe": { + "app": "recipe-importer", + "containers": [ + { + "diff_added": 14, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "data" + ], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "data" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "app" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local", + "files": [ + "lib" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 25, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "gitea.dooplex.hu/admin/recipe-importer:v0.9.11", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-recipeimporter_recipe_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-recipeimporter_recipe_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "recipe-importer", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "recipe_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8000/ -> 302", + "172.18.0.2:8000/ -> 200", + "172.18.0.2:8000/login -> 404", + "172.18.0.2:8000/setup -> 404", + "172.18.0.2:8000/signup -> 404", + "172.18.0.2:8000/register -> 404", + "172.18.0.2:8000/install -> 404", + "172.18.0.2:8000/admin -> 404", + "172.18.0.2:8000/api/health -> 404", + "172.18.0.2:8000/health -> 200", + "172.18.0.2:8000/healthz -> 404", + "172.18.0.2:8000/status -> 404", + "172.18.0.2:8000/web -> 404", + "172.18.0.2:8000/index.php -> 404", + "172.18.0.2:8000/dashboard -> 404" + ], + "fixture": null, + "ports": [ + 8000 + ] + }, + "reasons": [ + "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 \u2014 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 ['/'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/romm/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/romm/probe.json new file mode 100644 index 00000000..bb0a2f5f --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/romm/probe.json @@ -0,0 +1,253 @@ +{ + "probe": { + "app": "romm", + "containers": [ + { + "diff_added": 14, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "etc", + "root" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc", + "files": [ + "nginx" + ] + }, + { + "added": [ + ".gunicorn" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".gunicorn" + ] + }, + { + "added": [ + "gunicorn.ctl" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.gunicorn", + "files": [ + "gunicorn.ctl" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 20, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "rommapp/romm:5.3.1", + "mounts": [ + { + "class": "named-declared", + "files": 1, + "name": "volgate-romm_romm_config", + "sample": [ + "config.yml" + ], + "source": "/var/lib/docker/volumes/volgate-romm_romm_config/_data", + "target": "/romm/config", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "31468144ed55da1c8bdb6ad0b92cb853ddb07e3fb19c331b0da029ff16059249", + "sample": [], + "source": "/var/lib/docker/volumes/31468144ed55da1c8bdb6ad0b92cb853ddb07e3fb19c331b0da029ff16059249/_data", + "target": "/redis-data", + "writable_by_app": "yes" + }, + { + "class": "anonymous", + "files": 0, + "name": "a74329f8446959f3471049d810da801e405c77cb541b14a9547c94d460307db9", + "sample": [], + "source": "/var/lib/docker/volumes/a74329f8446959f3471049d810da801e405c77cb541b14a9547c94d460307db9/_data", + "target": "/romm", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/roms", + "target": "/romm/library", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/appdata/romm/resources", + "target": "/romm/resources", + "writable_by_app": "yes" + } + ], + "name": "romm", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 999, + "health": "healthy", + "image": "mariadb:11.8", + "mounts": [ + { + "class": "named-declared", + "files": 302, + "name": "volgate-romm_romm_db_data", + "sample": [ + "tc.log", + ".my-healthcheck.cnf", + "aria_log.00000001", + "aria_log_control", + "undo001", + "ibtmp1", + "ib_buffer_pool", + "ibdata1", + "undo002", + "multi-master.info", + "mariadb_upgrade_info", + "ddl_recovery.log", + "ib_logfile0", + "undo003", + "romm/roms_facets_after_insert.TRN", + "romm/music_playlists.frm", + "romm/collections.ibd", + "romm/streaming_container_adoptions.ibd", + "romm/devices.ibd", + "romm/smart_collections.frm", + "romm/virtual_collection_roms.ibd", + "romm/FTS_000000000000009c_DELETED.ibd", + "romm/FTS_000000000000009c_BEING_DELETED_CACHE.ibd", + "romm/rom_identity_keys_au.TRN", + "romm/saves.ibd", + "romm/track_meta.frm", + "romm/screenshots.frm", + "romm/permission_group_grants.ibd", + "romm/streaming_container_adoptions.frm", + "romm/rom_user.ibd", + "romm/device_save_sync.frm", + "romm/rom_similarity.ibd", + "romm/rom_identity_keys.ibd", + "romm/users.ibd", + "romm/virtual_collections.frm", + "romm/FTS_000000000000009c_0000000000000200_INDEX_1.ibd", + "romm/firmware.ibd", + "romm/screenshots.ibd", + "romm/rom_file_doc_meta.frm", + "romm/FTS_000000000000009c_DELETED_CACHE.ibd" + ], + "source": "/var/lib/docker/volumes/volgate-romm_romm_db_data/_data", + "target": "/var/lib/mysql", + "writable_by_app": "yes" + } + ], + "name": "romm-db", + "restarts": null, + "status": "running", + "uid": 999 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "redis:7-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 4, + "name": "volgate-romm_romm_redis_data", + "sample": [ + "dump.rdb", + "appendonlydir/appendonly.aof.1.incr.aof", + "appendonlydir/appendonly.aof.manifest", + "appendonlydir/appendonly.aof.1.base.rdb" + ], + "source": "/var/lib/docker/volumes/volgate-romm_romm_redis_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "romm-redis", + "restarts": null, + "status": "running", + "uid": 999 + } + ], + "declared_volumes": [ + "romm_config", + "romm_db_data", + "romm_redis_data" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "MYSQL_ROOT_PASSWORD", + "ROMM_AUTH_SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8080/ -> 200", + "172.19.0.4:8080/ -> 200" + ], + "fixture": null, + "ports": [ + 8080 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/seerr/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/seerr/probe.json new file mode 100644 index 00000000..769ca808 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/seerr/probe.json @@ -0,0 +1,67 @@ +{ + "probe": { + "app": "seerr", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "fallenbagel/jellyseerr:2.7.3", + "mounts": [ + { + "class": "named-declared", + "files": 11, + "name": "volgate-seerr_seerr_config", + "sample": [ + "DOCKER", + "settings.json", + "logs/.20136e5b8544ec13f7fc29ce3d35150d597108bb-audit.json", + "logs/jellyseerr.log", + "logs/.machinelogs-2026-10-02.json", + "logs/.4295fcfc416647ffc3751a1d488b45a096cf2d4f-audit.json", + "logs/jellyseerr-2026-10-02.log", + "logs/.machinelogs.json", + "db/db.sqlite3", + "db/db.sqlite3-shm", + "db/db.sqlite3-wal" + ], + "source": "/var/lib/docker/volumes/volgate-seerr_seerr_config/_data", + "target": "/app/config", + "writable_by_app": "yes" + } + ], + "name": "seerr", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "seerr_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:5055/ -> 307" + ], + "fixture": null, + "ports": [ + 5055 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sonarr/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sonarr/probe.json new file mode 100644 index 00000000..587089a6 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sonarr/probe.json @@ -0,0 +1,159 @@ +{ + "probe": { + "app": "sonarr", + "containers": [ + { + "diff_added": 209, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "downloads" + ], + "changed_count": 5, + "db_signature": false, + "dir": "/", + "files": [ + "downloads" + ] + }, + { + "added": [], + "changed_count": 4, + "db_signature": false, + "dir": "/etc", + "files": [ + "passwd-", + "s6-overlay", + "crontabs", + "group-" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/crontabs", + "files": [ + "root" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay", + "files": [ + "s6-rc.d" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d", + "files": [ + "init-adduser" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc/s6-overlay/s6-rc.d/init-adduser", + "files": [ + "branding" + ] + } + ], + "diff_token_dirs": [ + { + "added": [ + "tv" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/media", + "files": [ + "tv" + ] + } + ], + "diff_total": 224, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "lscr.io/linuxserver/sonarr:4.0.20", + "mounts": [ + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/media/tv", + "target": "/media/tv", + "writable_by_app": "yes" + }, + { + "class": "bind", + "files": 0, + "name": null, + "sample": [], + "source": "/srv/felhom-gate/hdd/userdata/downloads", + "target": "/downloads", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 11, + "name": "volgate-sonarr_sonarr_config", + "sample": [ + "sonarr.db-shm", + "sonarr.pid", + "logs.db", + "sonarr.db-wal", + "config.xml", + "logs.db-shm", + "logs.db-wal", + "sonarr.db", + "logs/sonarr.txt", + "logs/sonarr.debug.txt", + "asp/key-6ffba64a-2d7f-4565-9e2c-76f140125460.xml" + ], + "source": "/var/lib/docker/volumes/volgate-sonarr_sonarr_config/_data", + "target": "/config", + "writable_by_app": "yes" + } + ], + "name": "sonarr", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "sonarr_config" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8989/ -> 200" + ], + "fixture": null, + "ports": [ + 8989 + ] + }, + "reasons": [ + "sonarr: writable-layer writes at /media (path suggests state, no database signature \u2014 judgement needed): ['tv']" + ], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sparkyfitness/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sparkyfitness/probe.json new file mode 100644 index 00000000..32480c88 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/sparkyfitness/probe.json @@ -0,0 +1,237 @@ +{ + "probe": { + "app": "sparkyfitness", + "containers": [ + { + "diff_added": 11, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "var", + "etc", + "run" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc", + "files": [ + "nginx" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "cache" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 19, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "codewithcj/sparkyfitness:v0.17.3", + "mounts": [], + "name": "sparkyfitness", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:18-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1822, + "name": "volgate-sparkyfitness_sparkyfitness_db_data", + "sample": [ + "data/pgdata/pg_ident.conf", + "data/pgdata/pg_hba.conf", + "data/pgdata/postmaster.pid", + "data/pgdata/postgresql.conf", + "data/pgdata/PG_VERSION", + "data/pgdata/postgresql.auto.conf", + "data/pgdata/postmaster.opts", + "data/pgdata/base/5/2612", + "data/pgdata/base/5/1418", + "data/pgdata/base/5/6117", + "data/pgdata/base/5/13510_fsm", + "data/pgdata/base/5/2655", + "data/pgdata/base/5/3609", + "data/pgdata/base/5/2662", + "data/pgdata/base/5/2683", + "data/pgdata/base/5/2832", + "data/pgdata/base/5/2679", + "data/pgdata/base/5/2608_vm", + "data/pgdata/base/5/2673", + "data/pgdata/base/5/2690", + "data/pgdata/base/5/2336", + "data/pgdata/base/5/2754", + "data/pgdata/base/5/2701", + "data/pgdata/base/5/4168", + "data/pgdata/base/5/2650", + "data/pgdata/base/5/2839", + "data/pgdata/base/5/2688", + "data/pgdata/base/5/2840", + "data/pgdata/base/5/1247_fsm", + "data/pgdata/base/5/3997", + "data/pgdata/base/5/3456_vm", + "data/pgdata/base/5/2667", + "data/pgdata/base/5/2678", + "data/pgdata/base/5/2696", + "data/pgdata/base/5/3456", + "data/pgdata/base/5/2228", + "data/pgdata/base/5/1259_fsm", + "data/pgdata/base/5/6351", + "data/pgdata/base/5/6106", + "data/pgdata/base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_db_data/_data", + "target": "/var/lib/postgresql", + "writable_by_app": "yes" + } + ], + "name": "sparkyfitness-db", + "restarts": null, + "status": "running", + "uid": 70 + }, + { + "diff_added": 392, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "app" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "SparkyFitnessServer" + ] + }, + { + "added": [ + "backup", + "temp_uploads", + "uploads" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app/SparkyFitnessServer", + "files": [ + "backup", + "temp_uploads", + "uploads" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 395, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "codewithcj/sparkyfitness_server:v0.17.3", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-sparkyfitness_sparkyfitness_backup", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_backup/_data", + "target": "/app/SparkyFitnessServer/backup", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-sparkyfitness_sparkyfitness_uploads", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_uploads/_data", + "target": "/app/SparkyFitnessServer/uploads", + "writable_by_app": "yes" + } + ], + "name": "sparkyfitness-server", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "sparkyfitness_backup", + "sparkyfitness_db_data", + "sparkyfitness_uploads" + ], + "env_keys": [ + "API_ENCRYPTION_KEY", + "APP_DB_PASSWORD", + "BETTER_AUTH_SECRET", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 200", + "172.20.0.4:80/ -> 200", + "fixture Sparkyfitness: seed OK \u2014 sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01" + ], + "fixture": "fixture Sparkyfitness: seed OK \u2014 sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01", + "ports": [ + 80 + ] + }, + "reasons": [ + "sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "sparkyfitness-server: declared volume /app/SparkyFitnessServer/uploads is EMPTY after the exercise \u2014 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'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/tandoor/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/tandoor/probe.json new file mode 100644 index 00000000..a7ace9c9 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/tandoor/probe.json @@ -0,0 +1,292 @@ +{ + "probe": { + "app": "tandoor", + "containers": [ + { + "diff_added": 443, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 3, + "db_signature": false, + "dir": "/", + "files": [ + "root", + "opt", + "usr" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/opt", + "files": [ + "recipes" + ] + }, + { + "added": [ + "mediafiles", + "staticfiles" + ], + "changed_count": 3, + "db_signature": false, + "dir": "/opt/recipes", + "files": [ + "mediafiles", + "staticfiles" + ] + }, + { + "added": [], + "changed_count": 7, + "db_signature": false, + "dir": "/opt/recipes/cookbook", + "files": [ + "views", + "connectors", + "migrations", + "provider", + "templatetags", + "integration", + "helper" + ] + }, + { + "added": [ + "Recipes.conf" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/opt/recipes/http.d", + "files": [ + "Recipes.conf" + ] + }, + { + "added": [ + ".gunicorn" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".gunicorn" + ] + }, + { + "added": [ + "gunicorn.ctl" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.gunicorn", + "files": [ + "gunicorn.ctl" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "local" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/local", + "files": [ + "lib" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 493, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/tandoorrecipes/recipes:2.6.15", + "mounts": [ + { + "class": "named-declared", + "files": 3359, + "name": "volgate-tandoor_tandoor_static", + "sample": [ + "staticfiles.json", + "assets/logo_color_shopping_144.png", + "assets/logo_black.svg", + "assets/logo_color_180.png", + "assets/logo_color_shopping_512.6b2e69402327.png", + "assets/brand_logo.ad2e3aa263da.svg.gz", + "assets/logo_color_180.0fcae5e85a72.png", + "assets/logo_black.dc487b18028c.svg.gz", + "assets/brand_logo.ad2e3aa263da.svg", + "assets/brand_logo_white.svg", + "assets/logo_color_svg.svg.gz", + "assets/logo_color_144.png", + "assets/logo_color_svg.d7c2e31a63b7.svg", + "assets/header.48e8ad9e7540.svg.gz", + "assets/spinner.168a09fd2600.svg.gz", + "assets/spinner.168a09fd2600.svg", + "assets/recipe_no_image.c659e2604ad6.svg", + "assets/logo_color_shopping.svg.gz", + "assets/logo_color_144.f09537dbf142.png", + "assets/brand_logo.svg.gz", + "assets/logo_color_plan.4ccbb336af9d.svg.gz", + "assets/brand_logo.6ebe02bf6707.png", + "assets/logo_black.dc487b18028c.svg", + "assets/logo_color_32.b7d9707eac91.png", + "assets/logo_color_32.png", + "assets/logo_black.svg.gz", + "assets/logo_color_plan_512.png", + "assets/header.svg", + "assets/logo_color_plan.4ccbb336af9d.svg", + "assets/logo_color_512.png", + "assets/logo_color_shopping.svg", + "assets/logo_color_shopping.fd1e81a4dcab.svg", + "assets/logo_color_shopping_144.6c05e01d07b2.png", + "assets/recipe_no_image.svg", + "assets/logo_color_shopping_512.png", + "assets/logo_color_192.c9b9177ff941.png", + "assets/logo_color_128.a90db52449d9.png", + "assets/logo_color_plan_144.png", + "assets/spinner.svg", + "assets/brand_logo.svg" + ], + "source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_static/_data", + "target": "/opt/recipes/staticfiles", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-tandoor_tandoor_media", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_media/_data", + "target": "/opt/recipes/mediafiles", + "writable_by_app": "yes" + } + ], + "name": "tandoor", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:17-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 2003, + "name": "volgate-tandoor_tandoor_postgres_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/2612", + "base/5/1418", + "base/5/6117", + "base/5/13510_fsm", + "base/5/2655", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/13500_vm", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm", + "base/5/6106", + "base/5/3433" + ], + "source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_postgres_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "tandoor-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "tandoor_media", + "tandoor_postgres_data", + "tandoor_static" + ], + "env_keys": [ + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 400", + "172.23.0.3:80/ -> 400", + "fixture Django: seed OK \u2014 tandoor: seeded superuser drill425a04" + ], + "fixture": "fixture Django: seed OK \u2014 tandoor: seeded superuser drill425a04", + "ports": [ + 80 + ] + }, + "reasons": [ + "tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/termix/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/termix/probe.json new file mode 100644 index 00000000..c1bb7398 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/termix/probe.json @@ -0,0 +1,99 @@ +{ + "probe": { + "app": "termix", + "containers": [ + { + "diff_added": 9, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "app", + "etc" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "html" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app/html", + "files": [ + "sw.js" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/etc", + "files": [ + "group-" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 17, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "ghcr.io/lukegus/termix:2.8.0", + "mounts": [ + { + "class": "named-declared", + "files": 5, + "name": "volgate-termix_termix_data", + "sample": [ + ".env", + "db.sqlite.encrypted", + "opkssh/version.txt", + "opkssh/checksum.txt", + "opkssh/opkssh-linux-amd64" + ], + "source": "/var/lib/docker/volumes/volgate-termix_termix_data/_data", + "target": "/app/data", + "writable_by_app": "yes" + } + ], + "name": "termix", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "termix_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8080/ -> 200" + ], + "fixture": null, + "ports": [ + 8080 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/uptime-kuma/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/uptime-kuma/probe.json new file mode 100644 index 00000000..1cf4836d --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/uptime-kuma/probe.json @@ -0,0 +1,80 @@ +{ + "probe": { + "app": "uptime-kuma", + "containers": [ + { + "diff_added": 4, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "var", + "run" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/var", + "files": [ + "cache" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 8, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "louislam/uptime-kuma:2.5.5", + "mounts": [ + { + "class": "named-declared", + "files": 4, + "name": "volgate-uptimekuma_uptime_kuma_data", + "sample": [ + "kuma.db", + "kuma.db-shm", + "db-config.json", + "kuma.db-wal" + ], + "source": "/var/lib/docker/volumes/volgate-uptimekuma_uptime_kuma_data/_data", + "target": "/app/data", + "writable_by_app": "yes" + } + ], + "name": "uptime-kuma", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "uptime_kuma_data" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3001/ -> 302" + ], + "fixture": null, + "ports": [ + 3001 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vaultwarden/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vaultwarden/probe.json new file mode 100644 index 00000000..2a8bb1ac --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vaultwarden/probe.json @@ -0,0 +1,62 @@ +{ + "probe": { + "app": "vaultwarden", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "vaultwarden/server:1.36.0-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 4, + "name": "volgate-vaultwarden_vaultwarden_data", + "sample": [ + "db.sqlite3", + "db.sqlite3-shm", + "rsa_key.pem", + "db.sqlite3-wal" + ], + "source": "/var/lib/docker/volumes/volgate-vaultwarden_vaultwarden_data/_data", + "target": "/data", + "writable_by_app": "yes" + } + ], + "name": "vaultwarden", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "vaultwarden_data" + ], + "env_keys": [ + "ADMIN_TOKEN", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SIGNUPS_ALLOWED", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:80/ -> 200" + ], + "fixture": null, + "ports": [ + 80 + ] + }, + "reasons": [], + "verdict": "CLEAN" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vikunja/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vikunja/probe.json new file mode 100644 index 00000000..2d5f918c --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/vikunja/probe.json @@ -0,0 +1,105 @@ +{ + "probe": { + "app": "vikunja", + "containers": [ + { + "diff_added": 4, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "db" + ], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "db" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/app", + "files": [ + "vikunja" + ] + }, + { + "added": [ + "files" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/app/vikunja", + "files": [ + "files" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 6, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": null, + "image": "vikunja/vikunja:2.6.0", + "mounts": [ + { + "class": "named-declared", + "files": 3, + "name": "volgate-vikunja_vikunja_db", + "sample": [ + "vikunja.db-wal", + "vikunja.db", + "vikunja.db-shm" + ], + "source": "/var/lib/docker/volumes/volgate-vikunja_vikunja_db/_data", + "target": "/db", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-vikunja_vikunja_data", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-vikunja_vikunja_data/_data", + "target": "/app/vikunja/files", + "writable_by_app": "yes" + } + ], + "name": "vikunja", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "vikunja_data", + "vikunja_db" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH", + "VIKUNJA_SERVICE_JWTSECRET" + ], + "exercise": [ + "172.18.0.2:3456/ -> 200", + "fixture Vikunja: seed OK \u2014 vikunja: create project http=201" + ], + "fixture": "fixture Vikunja: seed OK \u2014 vikunja: create project http=201", + "ports": [ + 3456 + ] + }, + "reasons": [ + "vikunja: declared volume /app/vikunja/files is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wanderer/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wanderer/probe.json new file mode 100644 index 00000000..049175ee --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wanderer/probe.json @@ -0,0 +1,202 @@ +{ + "probe": { + "app": "wanderer", + "containers": [ + { + "diff_added": 6, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "root" + ] + }, + { + "added": [ + ".npm" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".npm" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 8, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "unhealthy", + "image": "flomp/wanderer-web:v0.20.0", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-wanderer_wanderer_uploads", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_uploads/_data", + "target": "/app/uploads", + "writable_by_app": "yes" + } + ], + "name": "wanderer", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 3, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [ + "pb_data", + "data" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/", + "files": [ + "pb_data", + "data" + ] + } + ], + "diff_token_dirs": [ + { + "added": [ + "plugins" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/data", + "files": [ + "plugins" + ] + } + ], + "diff_total": 3, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "flomp/wanderer-db:v0.20.0", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-wanderer_wanderer_plugins", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_plugins/_data", + "target": "/data/plugins", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 6, + "name": "volgate-wanderer_wanderer_data", + "sample": [ + "auxiliary.db-shm", + "data.db-wal", + "auxiliary.db-wal", + "auxiliary.db", + "data.db-shm", + "data.db" + ], + "source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_data/_data", + "target": "/pb_data", + "writable_by_app": "yes" + } + ], + "name": "wanderer-db", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "getmeili/meilisearch:v1.36.0", + "mounts": [ + { + "class": "named-declared", + "files": 11, + "name": "volgate-wanderer_wanderer_meili_data", + "sample": [ + "data.ms/VERSION", + "data.ms/tasks/lock.mdb", + "data.ms/tasks/data.mdb", + "data.ms/auth/lock.mdb", + "data.ms/auth/data.mdb", + "data.ms/indexes/4e83ddf5-89a0-4d4e-9362-1fb63168a68a/lock.mdb", + "data.ms/indexes/4e83ddf5-89a0-4d4e-9362-1fb63168a68a/data.mdb", + "data.ms/indexes/788ef67d-3283-4fca-83ae-262af6bd7ddd/lock.mdb", + "data.ms/indexes/788ef67d-3283-4fca-83ae-262af6bd7ddd/data.mdb", + "data.ms/indexes/61e46453-f5a8-45b1-97ab-749e8ff8ed7e/lock.mdb", + "data.ms/indexes/61e46453-f5a8-45b1-97ab-749e8ff8ed7e/data.mdb" + ], + "source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_meili_data/_data", + "target": "/meili_data", + "writable_by_app": "yes" + } + ], + "name": "wanderer-search", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "wanderer_data", + "wanderer_meili_data", + "wanderer_plugins", + "wanderer_uploads" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "MEILI_MASTER_KEY", + "POCKETBASE_ENCRYPTION_KEY", + "SUBDOMAIN", + "SUBDOMAIN_DB", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.3:3000/ -> 500", + "172.24.0.4:3000/ -> 500", + "172.18.0.2:8090/ -> 404", + "172.24.0.3:8090/ -> 404" + ], + "fixture": null, + "ports": [ + 3000, + 8090 + ] + }, + "reasons": [ + "wanderer: unhealthy", + "wanderer: declared volume /app/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "wanderer-db: declared volume /data/plugins is EMPTY after the exercise \u2014 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'] \u2014 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 \u2014 judgement needed): ['plugins']" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wger/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wger/probe.json new file mode 100644 index 00000000..0b7195a4 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wger/probe.json @@ -0,0 +1,73 @@ +{ + "probe": { + "app": "wger", + "containers": [ + { + "diff_added": 0, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [], + "diff_token_dirs": [], + "diff_total": 0, + "diff_unresolved": [], + "exit": 0, + "gid": 1000, + "health": "healthy", + "image": "wger/server:2.7", + "mounts": [ + { + "class": "named-declared", + "files": 2, + "name": "volgate-wger_wger_data", + "sample": [ + "database.sqlite", + ".felhom-jwt.env" + ], + "source": "/var/lib/docker/volumes/volgate-wger_wger_data/_data", + "target": "/home/wger/db", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-wger_wger_media", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-wger_wger_media/_data", + "target": "/home/wger/media", + "writable_by_app": "yes" + } + ], + "name": "wger", + "restarts": null, + "status": "running", + "uid": 1000 + } + ], + "declared_volumes": [ + "wger_data", + "wger_media" + ], + "env_keys": [ + "ADMIN_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SECRET_KEY", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:8000/ -> 302", + "fixture Wger: seed OK \u2014 wger: POST /api/v2/weightentry/ http=201" + ], + "fixture": "fixture Wger: seed OK \u2014 wger: POST /api/v2/weightentry/ http=201", + "ports": [ + 8000 + ] + }, + "reasons": [ + "wger: declared volume /home/wger/media is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wishlist/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wishlist/probe.json new file mode 100644 index 00000000..16c2f21a --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/wishlist/probe.json @@ -0,0 +1,173 @@ +{ + "probe": { + "app": "wishlist", + "containers": [ + { + "diff_added": 40, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 2, + "db_signature": false, + "dir": "/", + "files": [ + "root", + "usr" + ] + }, + { + "added": [ + ".config", + ".local" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root", + "files": [ + ".config", + ".local" + ] + }, + { + "added": [ + "caddy", + "prisma-nodejs" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config", + "files": [ + "caddy", + "prisma-nodejs" + ] + }, + { + "added": [ + "autosave.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config/caddy", + "files": [ + "autosave.json" + ] + }, + { + "added": [ + "commands.json" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.config/prisma-nodejs", + "files": [ + "commands.json" + ] + }, + { + "added": [ + "share" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/root/.local", + "files": [ + "share" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr", + "files": [ + "src" + ] + }, + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/usr/src", + "files": [ + "app" + ] + }, + { + "added": [ + "data", + "uploads" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/usr/src/app", + "files": [ + "data", + "uploads" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 50, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/cmintey/wishlist:v0.67.1", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-wishlist_wishlist_uploads", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-wishlist_wishlist_uploads/_data", + "target": "/usr/src/app/uploads", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 3, + "name": "volgate-wishlist_wishlist_data", + "sample": [ + "prod.db-shm", + "prod.db", + "prod.db-wal" + ], + "source": "/var/lib/docker/volumes/volgate-wishlist_wishlist_data/_data", + "target": "/usr/src/app/data", + "writable_by_app": "yes" + } + ], + "name": "wishlist", + "restarts": null, + "status": "running", + "uid": 0 + } + ], + "declared_volumes": [ + "wishlist_data", + "wishlist_uploads" + ], + "env_keys": [ + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 307", + "fixture Wishlist: seed OK \u2014 wishlist: /signup http=200 type=success" + ], + "fixture": "fixture Wishlist: seed OK \u2014 wishlist: /signup http=200 type=success", + "ports": [ + 3000 + ] + }, + "reasons": [ + "wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/zipline/probe.json b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/zipline/probe.json new file mode 100644 index 00000000..14c60901 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/evidence/zipline/probe.json @@ -0,0 +1,176 @@ +{ + "probe": { + "app": "zipline", + "containers": [ + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "zipline" + ] + }, + { + "added": [ + "public", + "uploads" + ], + "changed_count": 0, + "db_signature": false, + "dir": "/zipline", + "files": [ + "public", + "uploads" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 3, + "diff_unresolved": [], + "exit": 0, + "gid": 0, + "health": "healthy", + "image": "ghcr.io/diced/zipline:4.8.0", + "mounts": [ + { + "class": "named-declared", + "files": 0, + "name": "volgate-zipline_zipline_uploads", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-zipline_zipline_uploads/_data", + "target": "/zipline/uploads", + "writable_by_app": "yes" + }, + { + "class": "named-declared", + "files": 0, + "name": "volgate-zipline_zipline_public", + "sample": [], + "source": "/var/lib/docker/volumes/volgate-zipline_zipline_public/_data", + "target": "/zipline/public", + "writable_by_app": "yes" + } + ], + "name": "zipline", + "restarts": null, + "status": "running", + "uid": 0 + }, + { + "diff_added": 2, + "diff_benign_db_touches": [], + "diff_data_dirs": [], + "diff_other_dirs": [ + { + "added": [], + "changed_count": 1, + "db_signature": false, + "dir": "/", + "files": [ + "run" + ] + } + ], + "diff_token_dirs": [], + "diff_total": 4, + "diff_unresolved": [], + "exit": 0, + "gid": 70, + "health": "healthy", + "image": "postgres:16-alpine", + "mounts": [ + { + "class": "named-declared", + "files": 1435, + "name": "volgate-zipline_zipline_postgres_data", + "sample": [ + "pg_ident.conf", + "pg_hba.conf", + "postmaster.pid", + "postgresql.conf", + "PG_VERSION", + "postgresql.auto.conf", + "postmaster.opts", + "base/5/2612", + "base/5/1418", + "base/5/6117", + "base/5/2655", + "base/5/3609", + "base/5/2662", + "base/5/2683", + "base/5/2832", + "base/5/2679", + "base/5/2608_vm", + "base/5/2673", + "base/5/2690", + "base/5/2336", + "base/5/2754", + "base/5/2701", + "base/5/4168", + "base/5/2650", + "base/5/2839", + "base/5/2688", + "base/5/2840", + "base/5/1247_fsm", + "base/5/3997", + "base/5/3456_vm", + "base/5/2667", + "base/5/2678", + "base/5/2696", + "base/5/3456", + "base/5/2228", + "base/5/1259_fsm", + "base/5/6106", + "base/5/3433", + "base/5/4150", + "base/5/3606" + ], + "source": "/var/lib/docker/volumes/volgate-zipline_zipline_postgres_data/_data", + "target": "/var/lib/postgresql/data", + "writable_by_app": "yes" + } + ], + "name": "zipline-postgres", + "restarts": null, + "status": "running", + "uid": 70 + } + ], + "declared_volumes": [ + "zipline_postgres_data", + "zipline_public", + "zipline_uploads" + ], + "env_keys": [ + "CORE_SECRET", + "DB_PASSWORD", + "DOMAIN", + "HDD_PATH", + "IMPORT_PATH", + "SUBDOMAIN", + "TZ", + "USERDATA_PATH" + ], + "exercise": [ + "172.18.0.2:3000/ -> 301", + "172.25.0.3:3000/ -> 301", + "fixture Zipline: seed OK \u2014 zipline: /api/setup http=200 :: {\"firstSetup\":false,\"user\":{\"id\":\"ay6n2g4wkn7i2kkg6dvag03n\",\"username\":\"drill52906a\",\"createdAt\":\"2026-10-02T14:18:38.794Z\"," + ], + "fixture": "fixture Zipline: seed OK \u2014 zipline: /api/setup http=200 :: {\"firstSetup\":false,\"user\":{\"id\":\"ay6n2g4wkn7i2kkg6dvag03n\",\"username\":\"drill52906a\",\"createdAt\":\"2026-10-02T14:18:38.794Z\",", + "ports": [ + 3000 + ] + }, + "reasons": [ + "zipline: declared volume /zipline/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it", + "zipline: declared volume /zipline/public is EMPTY after the exercise \u2014 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'] \u2014 benign when a sibling container holds the state, worth a look when none does" + ], + "verdict": "UNDETERMINED" +} \ No newline at end of file diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt new file mode 100644 index 00000000..7466bcba --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt @@ -0,0 +1,33 @@ +# papra diagnosis 2026-10-02 ~14:30Z, bench 9401: docker run ghcr.io/papra-hq/papra:26.6.2-rootless, named volume at /app/app-data, dummy AUTH_SECRET, 60 s each; first with --memory 256m (the template's limit), then no limit +=== memory=256m +status=exited exit=137 oomkilled=true restarts=0 +mem=0B / 0B +$ pnpm migrate:up:prod && pnpm start +$ tsx src/scripts/migrate-up.script.ts +Killed +/var/lib/docker/volumes/diagpapra-256m/_data: +db +documents + +/var/lib/docker/volumes/diagpapra-256m/_data/db: + +/var/lib/docker/volumes/diagpapra-256m/_data/documents: +=== memory=0 +status=running exit=0 oomkilled=false restarts=0 +mem=415.6MiB / 12GiB +{"level":"info","message":"Job rescheduled","timestampMs":1790951362359,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"," +{"level":"debug","message":"Consuming job","timestampMs":1790951362359,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired +{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790951362360,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organ +{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790951362360,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganiz +{"level":"info","message":"Job rescheduled","timestampMs":1790951362361,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expire +{"level":"debug","message":"Consuming job","timestampMs":1790951362361,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv +{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790951362362,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}} +{"level":"info","message":"Job rescheduled","timestampMs":1790951362363,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-k +/var/lib/docker/volumes/diagpapra-0/_data: +db +documents + +/var/lib/docker/volumes/diagpapra-0/_data/db: +db.sqlite + +/var/lib/docker/volumes/diagpapra-0/_data/documents: diff --git a/documentation/audits/persistence-sweep-2026-10-02/A/sweep/teardown.txt b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/teardown.txt new file mode 100644 index 00000000..b7824204 --- /dev/null +++ b/documentation/audits/persistence-sweep-2026-10-02/A/sweep/teardown.txt @@ -0,0 +1,54 @@ ++ date -u +Fri Oct 2 14:31:30 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch +9401 running volgate-sweep ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19536760 18829500 48.29% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 134196284 799156804 13.65% ++ pct exec 9401 -- bash -c 'docker logout 2>&1 | tail -1; ls /root/.docker/config.json 2>&1; docker ps -a --format {{.Names}} | wc -l; docker volume ls -q | grep -c ^volgate; docker volume ls -q | wc -l; docker image ls --format {{.Repository}}:{{.Tag}}' +Removing login credentials for https://index.docker.io/v1/ +/root/.docker/config.json +0 +0 +3 +felhom-volgate-canary:1 ++ pct stop 9401 ++ pct destroy 9401 --purge +purging CT 9401 from related configurations.. ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch ++ pct config 9401 ++ head -1 +Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist ++ ls /mnt/hdd_1/images/ +9202 ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 19536688 18829572 48.29% +local-lvm lvmthin active 56487936 34954734 21533201 61.88% +nvme-scratch dir active 983379700 77370636 855982452 7.87% ++ rm -f /root/volgate-create.sh ++ ls /root/volgate-teardown.sh /root/du /root/dp +ls: cannot access '/root/du': No such file or directory +ls: cannot access '/root/dp': No such file or directory +/root/volgate-teardown.sh +ls: cannot access '/root/volgate-teardown.sh': No such file or directory + +# Teardown statement, 2026-10-02 ~14:32Z +# machine: bench LXC 9401 (volgate-sweep) — docker logout done, 0 containers, 0 volgate-* volumes, 3 anonymous +# image volumes + the canary image left inside it, all removed with the rootfs by `pct destroy 9401 --purge`. +# host: demo-hp — `pct list` shows only 9201 + 9202 (both untouched all session); no 9401 config; /mnt/hdd_1/images/ +# holds only 9202; nvme-scratch used 77370516 KiB before create -> 77370636 KiB after destroy (+120 KiB, back to +# baseline). local-lvm never used (34954734 KiB before and after). Helper scripts and credential files removed from +# /root on demo-hp; the Docker Hub credential files were shredded on DooPlex, demo-hp and in the bench right after login. +# hub: untouched (nothing provisioned there). +# no prune of any kind anywhere; nothing committed or pushed in any repo; catalog-wt copy not modified. diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index 182c27dd..26f182c3 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -899,7 +899,7 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-785** | **[P3-LOW] SparkyFitness is pinned 11 releases and a major behind upstream (v0.17.3; upstream v1.7.3, v1.6.0 dated 2026-07-24).** READ 2026-10-01 (`audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt`). **Needs:** an update walk 0.17 → 1.x through the ladder (bench + box), after R-784 is decided. | **OPEN — rank P3-LOW; owner: CC (after R-784)** | | **R-786** | **[P3-LOW] SparkyFitness's onboarding record has six open rows** (`app-catalog-felhom.eu/onboarding/sparkyfitness.md`): 0.5 runtime internet (food search providers), 0.7 the phone app's sign-in route through traefik, 1.6 the env names the server reads, 1.7 the entrypoint read, 5.4 a second memory watch at another limit, 8.3 no logo/screenshots on felhom.eu (404). Everything else measured this session (bench + 9202). **Needs:** each row measured, or n/a with a reason. | **READY — rank P3-LOW; owner: CC (catalog)** | | **R-787** | **[P2-MEDIUM] No catalog app's LICENCE has been checked against Felhom being a paid service; the first look (SparkyFitness, R-784) found a non-commercial-only licence.** The new-app checklist row 0.1 binds apps opened from 2026-10-01; the 53 exempt apps were never read. **Needs:** a read of every template's licence at its pinned tag (SPDX + any custom terms), one table, and the non-open ones to the operator. **UPDATE 2026-10-02 — READ:** all 58 templates (56 published + Grimmory + MeTube), every image, at the pinned tag — one table: `audits/licences-2026-10-02/TABLE.md` (method in `read-1.md`, `read-2.md`). OSI-approved: all but the rows below. Not OSI / limiting, each now its own row: Tandoor (Commons Clause, R-789), Emby (R-790), n8n (R-791), Plex (R-792), the EE/BUSL parts of Cal.com, Docmost, Outline and meilisearch (R-793), redis 7.4 in seven apps (R-794), recipe-importer has no licence file (R-795); SparkyFitness is R-784. Nothing was hidden or changed because of the read (the brief's rule). New apps carry their licence in record row 0.1. | **CLOSED 2026-10-02 — the read (decisions are R-784, R-789..R-795)** | -| **R-788** | **[P3-LOW] The volume-persistence gate reads an EMPTY declared volume as CLEAN — MeTube's `/state` passed while the app had written nothing there.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/C-metube-bench/C2-volume-persistence-metube.txt`): "declared volume /state is EMPTY" → exit 0. The catalog's CLAUDE.md says an app that wrote nothing is UNDETERMINED (exit 2), never a pass. MeTube's real proof came from elsewhere (the history read back after a recreate and after a restore). **Needs:** the gate treats an empty declared volume as undecided, or the app gets an exerciser (MeTube: one `POST /add`); a decoy that is an app writing nothing. **UPDATE 2026-10-02:** part of the cause was R-801 (no port → no exercise at all); the catalog now also has `APP_EXERCISE` (MeTube: one `POST /add`). The empty-volume → CLEAN path itself is still to be checked. | **READY — rank P3-LOW; owner: CC** | +| **R-788** | **[P3-LOW] The volume-persistence gate reads an EMPTY declared volume as CLEAN — MeTube's `/state` passed while the app had written nothing there.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/C-metube-bench/C2-volume-persistence-metube.txt`): "declared volume /state is EMPTY" → exit 0. The catalog's CLAUDE.md says an app that wrote nothing is UNDETERMINED (exit 2), never a pass. MeTube's real proof came from elsewhere (the history read back after a recreate and after a restore). **Needs:** the gate treats an empty declared volume as undecided, or the app gets an exerciser (MeTube: one `POST /add`); a decoy that is an app writing nothing. **UPDATE 2026-10-02:** part of the cause was R-801 (no port → no exercise at all); the catalog now also has `APP_EXERCISE` (MeTube: one `POST /add`). The empty-volume → CLEAN path itself is still to be checked. **DONE 2026-10-02:** an empty declared volume after the exercise is UNDETERMINED (red-proofed: `audits/persistence-sweep-2026-10-02/A/RP-R788-empty-volume.txt`); the gate calls the app's own upgrade-fixture seed when a volume stays empty. Bind mounts: R-805. | **CLOSED 2026-10-02 — catalog** | | **R-789** | **[P2-MEDIUM] Tandoor's licence is AGPL-3.0 WITH the Commons Clause: it forbids selling "a product or service whose value derives, entirely or substantially, from the functionality of the Software" — fees for hosting or support included.** READ 2026-10-02 at 2.6.15 (`audits/licences-2026-10-02/TABLE.md`). Felhom charges for installing and caring for the household's apps; whether that value comes "substantially" from Tandoor is the question. **Needs (operator):** keep (the fee is for the box, not Tandoor), hide for new installs, or ask the authors. Nothing changed meanwhile. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** treated like SparkyFitness — stays offered; the operator asks the authors for written permission; without it before the first paying customer Tandoor is hidden (`lifecycle: hidden`). STATUS "Before the first paying customer". | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (the request; trigger: first paying customer)** | | **R-790** | **[P2-MEDIUM] Emby is proprietary: a personal, non-commercial, non-transferable licence.** READ 2026-10-02 (emby.media/terms.html; `audits/licences-2026-10-02/TABLE.md`). The household's private use fits; Felhom installs the official image from Emby (no copy distributed) as part of a paid service, a context the licence does not cover. Jellyfin (GPL) offers the same. **Needs (operator):** keep, hide, or ask Emby. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** KEPT — the household is the licensee; Felhom installs the official, unchanged image. Part of the lawyer's review (R-802). | **CLOSED 2026-10-02 — operator ruling (kept)** | | **R-791** | **[P3-LOW] n8n's Sustainable Use License allows own internal or personal use, and distribution only free of charge for non-commercial purposes.** READ 2026-10-02 at 2.42.1 (`audits/licences-2026-10-02/TABLE.md`). The household's own use is allowed; Felhom pulling the unchanged official image onto the household's box is arguably not distributing — a grey zone. **Needs (operator):** keep (recommended reading) or ask n8n. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** KEPT — the household is the user; the official, unchanged image. Part of the lawyer's review (R-802). | **CLOSED 2026-10-02 — operator ruling (kept)** | @@ -912,8 +912,13 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-798** | **[P3-LOW] Grimmory's template sets `SWAGGER_ENABLED=false`, which v3.5.0 does not read (it reads `API_DOCS_ENABLED`, default false).** READ 2026-10-02 (`audits/family-gate-2026-10-02/B/grimmory-reads/upstream-v3.5.0.txt`). Harmless today — the API docs are off by default. **Needs:** remove the dead line or set the right name, on the next Grimmory step. | **READY — rank P3-LOW; owner: CC** | | **R-799** | **[P3-LOW] The MeTube fixture's `POST /add` leaves out `download_type`, which upstream's validator lists as required.** MEASURED 2026-10-02 (`audits/family-gate-2026-10-02/C-metube-bench/`): both 2026.09.28 and .29 answered 200 and downloaded anyway. Fragile if a later tag enforces it. **Needs:** add `download_type: video` to the fixture with the next MeTube step. | **READY — rank P3-LOW; owner: CC** | | **R-800** | **[P2-MEDIUM] "Delete your data from the hard drive" keeps the app's files in the household's userdata folder — and neither the dialog nor the result says so.** MEASURED 2026-10-02. On demo-hp (live catalog, `audits/family-gate-2026-10-02/B4/grimmory-demo.txt`, `metube-demo.txt`): remove WITH data removed Grimmory's database volume, appdata and backups but KEPT the uploaded EPUB in `userdata/media/grimmory`; for MeTube the dialog offers no data checkbox at all and the result says "the app stored no data of its own on a drive" while the downloaded video stays in `userdata/media/metube`. On 9202 "keeping data" answers `hdd_paths_preserved: []` for the same reason (`audits/family-gate-2026-10-02/B/box/life.txt`): the remove reads `${HDD_PATH}` binds only. The model behind it may be right — userdata is the household's own files (a shared `media/` tree must never go with one app) — but then the dialog must say the files stay and where. **Needs (operator):** keep userdata on remove (and say so on the dialog), or delete an app's OWN userdata subfolder when the household ticks the box. **RULED 2026-10-02 afternoon (`09` §3 decision 67, option A):** the household's userdata files stay on every remove; the dialog and the result say so and name the folder. Recorded in `07` §6.5. Built in the next controller release. | **READY — rank P2-MEDIUM; owner: CC (the dialog and the result text)** | -| **R-801** | **[P2-MEDIUM] The volume-persistence gate never sent a request to ANY app: it read the routed port from label VALUES while `docker compose config --format json` puts the port in the label NAME.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/B/volume-persistence-metube-exerciser-diag.txt`: `"ports": []`, `"exercise": []` for MeTube; the label shape read on Compose 2.26.1). So every verdict since the gate exists came only from what an app writes at start by itself; the GET exercise and the deep second pass never ran. **Fixed in the catalog** (`routed_ports()`, key=value; unit tests, red-proofed: `audits/family-gate-2026-10-02/B/RP-R801-routed-ports.txt`). **Still owed:** a full re-sweep of all 58 templates on the bench with the fixed gate — an app whose data path is written only on a request may now read differently. | **READY — rank P2-MEDIUM; owner: CC (the re-sweep)** | +| **R-801** | **[P2-MEDIUM] The volume-persistence gate never sent a request to ANY app: it read the routed port from label VALUES while `docker compose config --format json` puts the port in the label NAME.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/B/volume-persistence-metube-exerciser-diag.txt`: `"ports": []`, `"exercise": []` for MeTube; the label shape read on Compose 2.26.1). So every verdict since the gate exists came only from what an app writes at start by itself; the GET exercise and the deep second pass never ran. **Fixed in the catalog** (`routed_ports()`, key=value; unit tests, red-proofed: `audits/family-gate-2026-10-02/B/RP-R801-routed-ports.txt`). **Still owed:** a full re-sweep of all 58 templates on the bench with the fixed gate — an app whose data path is written only on a request may now read differently. **DONE 2026-10-02:** the re-sweep of all 58 ran with the fixed gate (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): CLEAN 39 · UNDETERMINED 19 · BROKEN 0 (August: 38 · 11 · 4 of 53, every one of those decided by start-time writes alone — 0 of 53 probes had sent a request). Follow-ups R-805..R-807. | **CLOSED 2026-10-02 — catalog (the fixed gate + the re-sweep)** | | **R-802** | **[P2-MEDIUM] A lawyer reviews the non-OSI licence list before the first paying customer.** Operator ruling 2026-10-02 (`09` §3 decision 66): Tandoor (R-789), SparkyFitness (R-784), Emby, n8n, Plex (kept — R-790..R-792), the EE/BUSL parts (R-793), redis 7.4 (R-794); the table is `audits/licences-2026-10-02/TABLE.md`. STATUS "Before the first paying customer". | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (trigger: first paying customer)** | +| **R-803** | **[P1-HIGH] papra cannot start under its own memory limit: a fresh install is OOM-killed in its migration and crash-loops.** MEASURED 2026-10-02 on the bench (`audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt`, `audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt`): `ghcr.io/papra-hq/papra:26.6.2-rootless` at the template's 256M → `OOMKilled=true` during `tsx src/scripts/migrate-up.script.ts`; with no limit it runs at ~416 MiB after 60 s, and its database lands correctly in `/app/app-data` (the R-156 mount is right). The 26.6.1 → 26.6.2 step was proven with harness v1 (no memory watch), which is how 256M stayed. **No box runs papra** (demo-hp, demo-felhom read 2026-10-02). **Needs:** a from-birth memory watch, then the limit raised with headroom, proven on the bench (install, seed, read back, persistence CLEAN). **FIXED 2026-10-02:** measured from birth on the bench (`audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md`): peak anon 405 MiB (cgroup peak 483 MiB), ~255 MiB idle; the limit is now 768M (`mem_request` 256M); at 768M healthy in 31 s, 0 kills, the seed read back, persistence CLEAN. No image move; no box ran papra. | **CLOSED 2026-10-02 — catalog (papra 768M)** | +| **R-804** | **[P3-LOW] plant-it's image is gone from Docker Hub: `msdeluise/plant-it:0.10.0` answers "pull access denied … repository does not exist".** MEASURED 2026-10-02 on the bench, logged in (`audits/persistence-sweep-2026-10-02/A/sweep/batch-*.txt`, plant-it). The app is already `lifecycle: abandoned` (not offered for new installs); a box that runs it could no longer reinstall or restore it from images. **No box runs it** (read 2026-10-02). **Needs (operator):** keep the abandoned template as it is, or hide it entirely. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator** | +| **R-805** | **[P3-LOW] The volume-persistence gate judges an empty NAMED volume (R-788) but not an empty BIND mount.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): Grimmory's `/app/data` bind held 0 files and read CLEAN (its state is in MariaDB); komga, paperless-ngx, radarr and sonarr also carry empty binds that are not judged. **Needs:** decide whether an empty bind after the exercise is UNDETERMINED like a named volume, with a decoy. | **READY — rank P3-LOW; owner: CC** | +| **R-806** | **[P3-LOW] The gate's GET exercise speaks plain http to an HTTPS backend (crafty-controller :8443), and gramps-web did not answer on :5000.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): both reached data only through their fixture seed. **Needs:** read the `loadbalancer.server.scheme` label (upgrade_boxport already does); find why gramps-web's first GET got no answer. | **READY — rank P3-LOW; owner: CC** | +| **R-807** | **[P3-LOW] 13 apps stay UNDETERMINED because their seeds write only to the database, so their upload / media / cache / redis volumes stay empty.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): claper, crafty-controller, dawarich (redis), docmost, gramps-web, immich (ML cache), outline (+redis), sparkyfitness, tandoor, vikunja, wger, wishlist, zipline — plus plex (no seed route: a plex.tv claim token) and wanderer (no fixture; unhealthy under the gate). None is BROKEN: nothing was written outside a preserved folder. **Needs:** per app, a seed that uploads one file (or the volume named n/a with a reason: a redis cache, an ML model cache). | **READY — rank P3-LOW; owner: CC** |