From 09ae93db05318b561a54e2b9d57650d90f2a6676 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Thu, 1 Oct 2026 22:05:24 +0200 Subject: [PATCH] =?UTF-8?q?Golden=200.286.1=20baked=20+=20vouched=20(recor?= =?UTF-8?q?d);=2001=20=C2=A75=20visitor=20addresses=20+=20=C2=A77=20cloudf?= =?UTF-8?q?lared=20in=20the=20guest=20(R-754);=20register:=20R-753/754/772?= =?UTF-8?q?/773=20closed,=20R-775=20narrowed,=20R-776..R-782=20opened=20(4?= =?UTF-8?q?10=20=E2=86=92=20417);=20live=20evidence=20(demo-hp=20real=20tu?= =?UTF-8?q?nnel,=209202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS --- .../architecture/01-topology-and-trust.md | 28 +- .../A/L2-demo-hp-real-tunnel.txt | 18 + .../A/M5-after-release.txt | 17 + .../visitors-2026-10-01/A/bookstack-3.6.txt | 12 + .../C/bench/C0-bench-create.txt | 60 + .../C/bench/C1-previous-tag.txt | 30 + .../C2-volume-persistence-sparkyfitness.txt | 8 + .../bench/C3-catalog-gates-sparkyfitness.txt | 100 ++ .../C/bench/C9-teardown.txt | 38 + .../C/bench/birth/BIRTH/birth.log | 12 + .../C/bench/birth/BIRTH/birth.py | 38 + .../C/bench/birth/BIRTH/sampler.sh | 12 + .../C/bench/birth/BIRTH/server-full.log | 413 +++++ .../C/bench/birth/BIRTH/server-startlines.txt | 40 + .../C/bench/birth/mem-birth.csv | 507 ++++++ .../C/bench/birth/mem-summary.txt | 4 + .../C/bench/move/MV-sparkyfitness.log | 147 ++ .../MV-sparkyfitness/abort-states.json | 20 + .../MV-sparkyfitness/burst-sparkyfitness.log | 23 + .../move/evidence/MV-sparkyfitness/burst.py | 63 + .../MV-sparkyfitness/compose-final.log | 237 +++ .../MV-sparkyfitness/engine-state.json | 8 + .../MV-sparkyfitness/files-after-detail.json | 1 + .../MV-sparkyfitness/files-after.json | 1 + .../MV-sparkyfitness/files-before-detail.json | 1 + .../MV-sparkyfitness/files-before.json | 1 + .../MV-sparkyfitness/memory-samples.json | 1562 +++++++++++++++++ .../MV-sparkyfitness/migration-lines.txt | 6 + .../move/evidence/MV-sparkyfitness/run.log | 61 + .../move/evidence/MV-sparkyfitness/sampler.sh | 12 + .../evidence/MV-sparkyfitness/to-full.log | 242 +++ .../evidence/MV-sparkyfitness/to-states.json | 20 + .../evidence/MV-sparkyfitness/verdict.json | 86 + .../C/bench/move/mem-sparkyfitness.csv | 1063 +++++++++++ .../C/bench/move/mem-summary.txt | 8 + .../visitors-2026-10-01/C/box/sparky-box.txt | 1 + .../D/L-D1b-r772-live-0.286.1.txt | 20 + .../visitors-2026-10-01/D/r773-live.txt | 11 + .../E/demo-felhom-reset-restarts.txt | 1 + .../E/demo-hp-reset-restarts.txt | 6 + .../E/docmost-reset-tunnel.txt | 2 + .../E/rollout-felhom-pve.txt | 8 + .../visitors-2026-10-01/E/rollout-hp.txt | 8 + .../E/smoke-demo-hp-tunnel.txt | 13 + .../visitors-2026-10-01/tools/bookstack_36.py | 38 + .../visitors-2026-10-01/tools/bslogin.sh | 14 + .../visitors-2026-10-01/tools/sparky_box.py | 121 ++ documentation/backlog/OPEN-ITEMS.md | 17 +- .../01-bake-driver.txt | 27 + .../02-round-trip.txt | 3 + .../golden-0.286.1-2026-10-01/05-vouch.txt | 17 + .../tests/golden-0.286.1-2026-10-01/README.md | 9 + .../golden-0.286.1-2026-10-01/bake-driver.sh | 48 + .../tests/golden-0.286.1-2026-10-01/bake.log | 323 ++++ 54 files changed, 5577 insertions(+), 9 deletions(-) create mode 100644 documentation/audits/visitors-2026-10-01/A/L2-demo-hp-real-tunnel.txt create mode 100644 documentation/audits/visitors-2026-10-01/A/M5-after-release.txt create mode 100644 documentation/audits/visitors-2026-10-01/A/bookstack-3.6.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/C0-bench-create.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/C2-volume-persistence-sparkyfitness.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/C3-catalog-gates-sparkyfitness.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/C9-teardown.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.py create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/sampler.sh create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-full.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-startlines.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/mem-birth.csv create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/birth/mem-summary.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/MV-sparkyfitness.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/abort-states.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst-sparkyfitness.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst.py create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/compose-final.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/engine-state.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after-detail.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before-detail.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/memory-samples.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/migration-lines.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/run.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/sampler.sh create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-full.log create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-states.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/verdict.json create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/mem-sparkyfitness.csv create mode 100644 documentation/audits/visitors-2026-10-01/C/bench/move/mem-summary.txt create mode 100644 documentation/audits/visitors-2026-10-01/C/box/sparky-box.txt create mode 100644 documentation/audits/visitors-2026-10-01/D/L-D1b-r772-live-0.286.1.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/demo-felhom-reset-restarts.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/demo-hp-reset-restarts.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/docmost-reset-tunnel.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/rollout-felhom-pve.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/rollout-hp.txt create mode 100644 documentation/audits/visitors-2026-10-01/E/smoke-demo-hp-tunnel.txt create mode 100644 documentation/audits/visitors-2026-10-01/tools/bookstack_36.py create mode 100755 documentation/audits/visitors-2026-10-01/tools/bslogin.sh create mode 100644 documentation/audits/visitors-2026-10-01/tools/sparky_box.py create mode 100644 documentation/tests/golden-0.286.1-2026-10-01/01-bake-driver.txt create mode 100644 documentation/tests/golden-0.286.1-2026-10-01/02-round-trip.txt create mode 100644 documentation/tests/golden-0.286.1-2026-10-01/05-vouch.txt create mode 100644 documentation/tests/golden-0.286.1-2026-10-01/README.md create mode 100755 documentation/tests/golden-0.286.1-2026-10-01/bake-driver.sh create mode 100644 documentation/tests/golden-0.286.1-2026-10-01/bake.log diff --git a/documentation/architecture/01-topology-and-trust.md b/documentation/architecture/01-topology-and-trust.md index 7ea35309..f72b6589 100644 --- a/documentation/architecture/01-topology-and-trust.md +++ b/documentation/architecture/01-topology-and-trust.md @@ -124,6 +124,21 @@ a trust boundary too: a default password, or a "first visitor creates the admin" household acts. Rule and per-app status: `09` §3 decision 45 and `app-catalog-felhom.eu/FIRST-ADMIN.md` (the audit of all 53 apps, 2026-09-28). +**Who is the visitor — the address (recorded 2026-10-01, R-753, `09` §3 decision 63, controller ≥ 0.286.0).** Rule: +*never believe an address a client can write.* Through the tunnel every visitor used to reach traefik as cloudflared's +one docker-assigned address, so every per-address guard (the dashboard's login counter, an app's lock) was an +"everyone" guard a stranger could aim at the household. Now cloudflared has a fixed address and traefik trusts forwarded +headers from that one address only: an app receives `X-Forwarded-For: , , 172.16.253.2` +(Cloudflare APPENDS to a client's own chain — measured), a LAN visitor arrives as itself, and every other peer's chain is +dropped. traefik's entrypoint middleware `felhom-forwarded` removes every header a client could write a host, a path or +an address into (`X-Forwarded-Host`, `Forwarded`, `True-Client-Ip`, …) and fixes `X-Forwarded-Port: 443`. **Readers take +the visitor from the RIGHT.** The controller (`clientaddr.go`) believes the chain only from traefik, takes the hop +traefik saw, and for the tunnel's hop reads `CF-Connecting-IP` (the edge refuses a client-sent one). Catalog apps that +read the LEFTMOST entry have the chain removed on their router. Design and measurements: +`audits/visitors-2026-10-01/A/DESIGN.md`. A permanent household gate with family accounts in front of an app (Grimmory, +MeTube) was SPIKED on this base and passed (`audits/permanent-gate-2026-10-01/VERDICT.md`); it is not built — the +operator decides. + **Who may reach an app, and through what (recorded 2026-09-29 — no document said it before; spike finding F1).** Every app is reached only through the box's traefik (no catalog app publishes a host port except crafty-controller's game ports; none uses host networking — read from the catalog 2026-09-29). traefik routes by host name: the tunnel's @@ -182,10 +197,15 @@ the same way. on Cloudflare) is register row R-494, P3, not blocking. Measured reason this was ruled now: the 2026-09-14 first-hour drill used a `*.felhom.eu` customer domain with no tunnel, and the dashboard link in the setup-code mail did not resolve. -- **Tunnel placement: host** (resolved, Part 3 §3/§5). `cloudflared` runs on the Proxmox host - as its own **agent-managed systemd service** — not inside the guest — so the data path - survives control-plane death by construction. Geo-restriction WAF is **hub-enforced** (the - hub holds the CF API token; the controller only reports geo desired-state). +- **Tunnel placement: INSIDE the guest** (corrected 2026-10-01, R-754 — the operator's brief of that evening: the build is + right, correct the document). `cloudflared` is a container the CONTROLLER renders and keeps up (`internal/infra`, + `EnsureBaseStack`, a protected stack), with the tunnel token from `controller.yaml`. *This page used to say it ran on + the Proxmox host as an agent-managed systemd service; no box has ever been built that way* (read: the controller's + template; seen running in demo-hp's guest 9201 and in R-505's VM 331). Consequence, stated: the data path is NOT + independent of the guest — a dead guest is an unreachable box, and the controller (not the agent) restarts the + tunnel. Since controller v0.286.0 it sits ALONE on the `felhom-tunnel` network at the fixed address `172.16.253.2` + (traefik at `.3`), so traefik can believe forwarded headers from it and from nothing else (§5). Geo-restriction WAF + is **hub-enforced** (the hub holds the CF API token; the controller only reports geo desired-state). --- diff --git a/documentation/audits/visitors-2026-10-01/A/L2-demo-hp-real-tunnel.txt b/documentation/audits/visitors-2026-10-01/A/L2-demo-hp-real-tunnel.txt new file mode 100644 index 00000000..0737e6ff --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/A/L2-demo-hp-real-tunnel.txt @@ -0,0 +1,18 @@ +# L2 — demo-hp (controller 0.286.1) through its REAL Cloudflare tunnel, POST /login on felhom.enkisfelhom.hu (the form's endpoint), 2026-10-01T19:51:32Z +stranger = DooPlex's public address 37.191.56.193, 6 wrong passwords, each with a NEW forged X-Forwarded-For: + try 1 -> Hibás jelszó. + try 2 -> Hibás jelszó. + try 3 -> Hibás jelszó. + try 4 -> Hibás jelszó. + try 5 -> Hibás jelszó. + try 6 -> Túl sok hibás próbálkozás erről a címről. Próbáld újra egy perc múlva. +household = ep0 (a second outside address), ONE request, the right password from stdin (never on ep0's disk or command line), with a forged X-Forwarded-For 6.6.6.6: +HTTP/2 403 +controller log (demo-hp 9201): +2026/10/01 19:51:22 auth.go:222: [INFO] [web] Login from 37.191.56.193 +2026/10/01 19:51:32 auth.go:184: [WARN] [web] Failed login from 37.191.56.193 +2026/10/01 19:51:32 auth.go:184: [WARN] [web] Failed login from 37.191.56.193 +2026/10/01 19:51:32 auth.go:184: [WARN] [web] Failed login from 37.191.56.193 +2026/10/01 19:51:33 auth.go:184: [WARN] [web] Failed login from 37.191.56.193 +2026/10/01 19:51:33 auth.go:184: [WARN] [web] Failed login from 37.191.56.193 +2026/10/01 19:51:33 auth.go:176: [WARN] [web] Login rate limited for 37.191.56.193 (5 attempts) diff --git a/documentation/audits/visitors-2026-10-01/A/M5-after-release.txt b/documentation/audits/visitors-2026-10-01/A/M5-after-release.txt new file mode 100644 index 00000000..e1b7df4d --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/A/M5-after-release.txt @@ -0,0 +1,17 @@ +## M5 AFTER the release (0.286.1 on demo-hp: traefik trusts 172.16.253.2 only), from DooPlex public 37.191.56.193 — plain, 2026-10-01T19:50:56Z +RemoteAddr: 172.18.0.3:59296 +Cf-Connecting-Ip: 37.191.56.193 +X-Forwarded-For: 37.191.56.193, 172.16.253.2 +X-Forwarded-Port: 443 +X-Forwarded-Proto: https +X-Forwarded-Server: ca3fb49f8b7d +X-Real-Ip: 172.16.253.2 +## M5 AFTER the release (0.286.1 on demo-hp: traefik trusts 172.16.253.2 only), from DooPlex public 37.191.56.193 — forged: XFF 6.6.6.6, X-Real-IP 8.8.4.4, True-Client-IP 9.9.9.9, X-Forwarded-Host evil.example, X-Forwarded-Port 8443, X-Forwarded-Proto http, Forwarded for=5.5.5.5 +RemoteAddr: 172.18.0.3:59296 +Cf-Connecting-Ip: 37.191.56.193 +X-Forwarded-For: 6.6.6.6,37.191.56.193, 172.16.253.2 +X-Forwarded-Port: 443 +X-Forwarded-Proto: https +X-Forwarded-Server: ca3fb49f8b7d +X-Real-Ip: 172.16.253.2 +## M5 AFTER the release (0.286.1 on demo-hp: traefik trusts 172.16.253.2 only), from DooPlex public 37.191.56.193 — forged CF-Connecting-IP 7.7.7.7 alone: HTTP 403 (Cloudflare's edge answers; the request never reaches the box) diff --git a/documentation/audits/visitors-2026-10-01/A/bookstack-3.6.txt b/documentation/audits/visitors-2026-10-01/A/bookstack-3.6.txt new file mode 100644 index 00000000..20f42091 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/A/bookstack-3.6.txt @@ -0,0 +1,12 @@ +##### BookStack 3.6 on 9202 — controller gitea.dooplex.hu/admin/felhom-controller:0.286.1 +deploy -> True +## phase 1 — the live template (no APP_PROXIES): control — 2026-10-01T19:57:01Z + stranger 198.51.100.66, 6 wrong for admin@admin.com (a new forged leftmost each): ['wrong', 'wrong', 'wrong', 'wrong', 'wrong', 'THROTTLED'] + household 203.0.113.10, the right password, at once: ['THROTTLED'] + waiting 75 s for BookStack's 60-second throttle to pass +restart through the product -> 200 + the running container's env: 172.16.0.0/12 +## phase 2 — APP_PROXIES=172.16.0.0/12 — 2026-10-01T19:59:09Z + stranger 198.51.100.66, 6 wrong for admin@admin.com (a new forged leftmost each): ['wrong', 'wrong', 'wrong', 'wrong', 'wrong', 'THROTTLED'] + household 203.0.113.10, the right password, at once: ['ok'] + LAN household (192.168.0.180), right password, while the stranger is throttled: diff --git a/documentation/audits/visitors-2026-10-01/C/bench/C0-bench-create.txt b/documentation/audits/visitors-2026-10-01/C/bench/C0-bench-create.txt new file mode 100644 index 00000000..7bc8e775 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/C0-bench-create.txt @@ -0,0 +1,60 @@ ++ date -u +Thu Oct 1 19:28:33 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch ++ free -g ++ head -2 + total used free shared buff/cache available +Mem: 29 5 5 0 18 23 ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 24681632 13684628 61.01% +local-lvm lvmthin active 56487936 34813514 21674421 61.63% +nvme-scratch dir active 983379700 77325832 856027256 7.86% ++ pct config 9401 ++ head -1 +Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist ++ ls /var/lib/vz/template/cache/ +debian-13-standard_13.6-1_amd64.tar.zst ++ 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 upgrade-harness --cores 6 --memory 10240 --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:zhshT1KXLEd4DFcu6x7t1YnHzoIKQHGEPk7qwkEXNXI root@upgrade-harness ++ pct config 9401 +arch: amd64 +cores: 6 +features: nesting=1,keyctl=1 +hostname: upgrade-harness +memory: 10240 +net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:3E:71:6B,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 >/dev/null 2>&1; docker --version; docker compose version; python3 --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3; df -h /' +amd64 +upgrade-harness +192.168.0.135/24 +Docker version 26.1.5+dfsg1, build a72d7cd +Docker Compose version 2.26.1-4 +Python 3.13.5 +traefik-public-net + total used free shared buff/cache available +Mem: 10240 58 8488 0 1692 10181 +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 24681740 13684520 61.01% +local-lvm lvmthin active 56487936 34813514 21674421 61.63% +nvme-scratch dir active 983379700 78964756 854388332 8.03% diff --git a/documentation/audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt b/documentation/audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt new file mode 100644 index 00000000..179a3fcd --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt @@ -0,0 +1,30 @@ +Thu Oct 1 19:27:26 UTC 2026 +== docker manifest inspect codewithcj/sparkyfitness_server:v0.17.2 + amd64 sha256:5e6b51eb0f8df7b19b17f2687d4afa91581f82f29d364d80cf2d4622bf8f5d95 + arm64 sha256:eea9d5213f26bd0c94771a4e399108ab169974517d6296a741ef409747f0d506 + rc=0 +== docker manifest inspect codewithcj/sparkyfitness:v0.17.2 + amd64 sha256:82fa5fb00d1d5c6379307ad61955a2af7648de6603d2537162e12c83c33ad73f + arm64 sha256:28019e831dbaffdd1689e3c87a1be013f15a755b7f3eb70eec9b22d63200dec3 + rc=0 +== docker manifest inspect codewithcj/sparkyfitness_server:v0.17.3 + amd64 sha256:d16c593650c975b9c6c044363fd7bfe95b6cee311fb8af2bc49079a42072e333 + arm64 sha256:f985d2bb85ee788b1f84d55cca2901e0addb5c49a2e55324a7942385ed7fbc18 + rc=0 +== docker manifest inspect codewithcj/sparkyfitness:v0.17.3 + amd64 sha256:93e2efccb4d0111c045d9f46c27343df0114faa050e210d2f95b50671eb98529 + arm64 sha256:0508c10f2d348c2b69c089131641bf2b443acf9d102dc84f683a41cdc45c24d1 + rc=0 +== docker manifest inspect postgres:18-alpine + amd64 sha256:d8703cd7fba306b9fec9268ecedfa8a966846c053036a60e3635791957eb2f66 + arm v6 sha256:548908d20dac4a46d489f436b744901a64c48b93999223dbd804d59bc62bec74 + arm v7 sha256:4b876a8e668b72c43573a999eee6a06cde0042dcea0b378caaa71bd999f40a8e + arm64 v8 sha256:89f747171c4b0af0eacf5984550060be79786dbe286eb60cfa691d79d1e8b23f + 386 sha256:1d22739c0a64fae400b80b9b7bc66c793915541c6a65977bbe9b8c88d22b3569 + ppc64le sha256:7193bcd502992934d36436b3bee8019760af1cd81fcda938e2586e264dac5d5e + riscv64 sha256:c403bc6b4326fdb6771784116e08bd234d8a7918e753ba4268e1e8b66687dfb9 + s390x sha256:b82b13bd4cb10ae4c9a55c8ac6304248d8b82a629b598c934c05ebf4f49d522d + rc=0 +== Docker Hub tag order (last_updated) around the pin: + codewithcj/sparkyfitness_server ['dev', 'latest', 'v1.7.3', 'v1.7.2', 'v1.7.1', 'v1.7.0', 'v1.6.5', 'v1.6.4', 'v1.6.3', 'v1.6.2', 'v1.6.1', 'v1.6.0', 'v0.17.3', 'v0.17.2', 'v0.17.1', 'v0.17.0', 'v0.16.9'] + codewithcj/sparkyfitness ['latest', 'v1.7.3', 'v1.7.2', 'dev', 'v1.7.1', 'v1.7.0', 'v1.6.5', 'v1.6.4', 'v1.6.3', 'v1.6.2', 'v1.6.1', 'v1.6.0', 'v0.17.3', 'v0.17.2', 'v0.17.1', 'v0.17.0', 'v0.16.9'] diff --git a/documentation/audits/visitors-2026-10-01/C/bench/C2-volume-persistence-sparkyfitness.txt b/documentation/audits/visitors-2026-10-01/C/bench/C2-volume-persistence-sparkyfitness.txt new file mode 100644 index 00000000..6c24f8ab --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/C2-volume-persistence-sparkyfitness.txt @@ -0,0 +1,8 @@ +# check-volume-persistence.py sparkyfitness — bench 9401 (demo-hp, swap 0), catalog 9b3b859, 2026-10-01T19:55:42Z +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +sparkyfitness CLEAN sparkyfitness-server: this container's mounts are all empty while it created entries in ['/app/SparkyFitnessServer'] — benign when a sibling container + +1 clean · 0 broken · 0 undetermined (of 1 in scope) +volume-persistence gate OK +gate exit code = 0 diff --git a/documentation/audits/visitors-2026-10-01/C/bench/C3-catalog-gates-sparkyfitness.txt b/documentation/audits/visitors-2026-10-01/C/bench/C3-catalog-gates-sparkyfitness.txt new file mode 100644 index 00000000..d4c80a70 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/C3-catalog-gates-sparkyfitness.txt @@ -0,0 +1,100 @@ +# catalog_gates.py sparkyfitness — full clone (not shallow) on bench 9401 (demo-hp, swap 0), catalog 9b3b859, 2026-10-01T19:58:42Z +catalog_gates — apps: sparkyfitness + +============================================================================== +== gate: image-pins (check-image-pins.py) +============================================================================== +image-pin gate OK — 56 templates, 0 unpinned images + +============================================================================== +== gate: image-resolvable (check-image-resolvable.py sparkyfitness) +============================================================================== +resolving 3 unique image pin(s)… +image-resolvability gate OK — 3 unique pins, all resolve + +============================================================================== +== gate: volume-persistence (check-volume-persistence.py sparkyfitness) +============================================================================== +self-testing the prober (both directions)… + prober flags the R-156 signature and clears a correct template — trustworthy +sparkyfitness CLEAN sparkyfitness-server: this container's mounts are all empty while it created entries in ['/app/SparkyFitnessServer'] — benign when a sibling container + +1 clean · 0 broken · 0 undetermined (of 1 in scope) +volume-persistence gate OK + +============================================================================== +== gate: engine-major (check-engine-major.py) +============================================================================== +engine-major gate — range origin/main..HEAD: 0 compose file(s) changed, 0 engine pin(s) compared +engine-major gate OK — no forbidden engine major, and no engine major bundled with another image move (rule: CLAUDE.md, amended by R-469 2026-09-21) + +============================================================================== +== gate: catalog-since (check-catalog-since.py) +============================================================================== +catalog-since gate — range origin/main..HEAD: 0 compose file(s) changed, 0 image move(s) dated +catalog-since gate OK — every image move in the range carries a catalog_since on or after its commit day + +============================================================================== +== gate: copy-i18n (check-copy-i18n.py sparkyfitness) +============================================================================== +copy-i18n: matcher controls OK (positive „Jelentkezz be…" convicts, negative „Encrypted notes…" does not) +copy-i18n: 56 apps · 1112 Hungarian copy strings frozen · 1111 with English +copy-i18n: translated so far — actualbudget 15/15, adventurelog 18/18, audiobookshelf 21/21, bentopdf 14/14, bookstack 21/21, calcom 22/22, calibre-web 27/27, claper 20/20, code-server 20/20, crafty-controller 24/24, dawarich 21/21, docmost 19/19, emby 22/22, ghost 16/16, gitea 17/17, glance 15/15, gokapi 19/19, grafana 19/19, gramps-web 17/17, home-assistant 18/18, homebox 17/17, homepage 15/15, immich 24/24, jellyfin 22/22, karakeep 19/19, kimai 20/20, komga 21/21, mealie 19/19, n8n 17/17, navidrome 21/21, nextcloud 28/28, onlyoffice 24/24, opengist 16/16, outline 21/21, paperless-ngx 33/33, papra 14/15, plant-it 16/16, plex 25/25, privatebin 14/14, radarr 22/22, radicale 19/19, rallly 17/17, recipe-importer 19/19, romm 41/41, seerr 18/18, sonarr 22/22, sparkyfitness 21/21, tandoor 18/18, termix 12/12, uptime-kuma 16/16, vaultwarden 23/23, vikunja 18/18, wanderer 20/20, wger 20/20, wishlist 16/16, zipline 18/18 +copy-i18n: OK + +============================================================================== +== gate: probe-matches-compose (check-probe-matches-compose.py sparkyfitness) +============================================================================== +probe-matches-compose: 1 app(s), mode: full + +probe-matches-compose: OK — every probe dials the port (and, where it can fail, the path) that the app's own compose healthcheck dials + +============================================================================== +== gate: probe-measured (check-probe-measured.py sparkyfitness) +============================================================================== +probe-measured: OK — 0 probes, each with a measured before/after + +============================================================================== +== gate: test-record (check-test-record.py sparkyfitness) +============================================================================== +test-record gate — 1 template(s) read, 1 carry a ladder, 0 convicted + +============================================================================== +== gate: test-record-move (check-test-record-move.py) +============================================================================== +test-record-move gate — range origin/main..HEAD: 0 compose file(s) changed + +============================================================================== +== gate: onboarding (check-onboarding.py) +============================================================================== +onboarding gate — 61 checklist ids; 56 template dirs: 53 exempt (published before 2026-10-01), 3 new; 1 exempt app(s) with a record (shape-checked): wger + NOT CHECKED here (sibling repository absent — the pre-push hook on DooPlex checks them): 181 path(s) + felhom.eu/documentation/audits/new-apps-2026-10-01/A/A1-github-facts.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/A/A1-github-facts.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/FIT.md + felhom.eu/documentation/audits/new-apps-2026-10-01/box/dawarich/checks.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/shots/dawarich/1.png + felhom.eu/documentation/audits/new-apps-2026-10-01/box/dawarich/install.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/box/dawarich/install.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/bench/dawarich/evidence/MV-dawarich/verdict.json + felhom.eu/documentation/audits/new-apps-2026-10-01/G/gates-dawarich.txt + felhom.eu/documentation/audits/new-apps-2026-10-01/A/compose/dawarich.yml +onboarding gate OK + +============================================================================== +== summary +============================================================================== + image-pins OK (exit 0) + image-resolvable OK (exit 0) + volume-persistence OK (exit 0) + engine-major OK (exit 0) + catalog-since OK (exit 0) + copy-i18n OK (exit 0) + probe-matches-compose OK (exit 0) + probe-measured OK (exit 0) + test-record OK (exit 0) + test-record-move OK (exit 0) + onboarding OK (exit 0) + +all catalog gates OK +runner exit code = 0 diff --git a/documentation/audits/visitors-2026-10-01/C/bench/C9-teardown.txt b/documentation/audits/visitors-2026-10-01/C/bench/C9-teardown.txt new file mode 100644 index 00000000..aac1dde0 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/C9-teardown.txt @@ -0,0 +1,38 @@ ++ date -u +Thu Oct 1 20:02:04 UTC 2026 ++ pct list +VMID Status Lock Name +9201 running demo-hp +9202 running demo-hp-scratch +9401 running upgrade-harness ++ pvesm status +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +felhom-pbs pbs active 0 0 0 0.00% +local dir active 40453376 24690388 13675872 61.03% +local-lvm lvmthin active 56487936 34819163 21668772 61.64% +nvme-scratch dir active 983379700 80790424 852562664 8.22% ++ pct exec 9401 -- bash -c 'docker ps -a --format {{.Names}} | wc -l; docker volume ls -q | wc -l' +0 +0 ++ 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 24690316 13675944 61.03% +local-lvm lvmthin active 56487936 34819163 21668772 61.64% +nvme-scratch dir active 983379700 77326100 856026988 7.86% ++ ls /tmp ++ grep -E 'b9401|upg-sync|catclone|burst|birth|sampler' +tmp-leftovers=1 ++ echo tmp-leftovers=1 diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.log b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.log new file mode 100644 index 00000000..6ad5289a --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.log @@ -0,0 +1,12 @@ +[19:31:57] images: {"sparkyfitness-db": "postgres:18-alpine", "sparkyfitness-server": "codewithcj/sparkyfitness_server:v0.17.3", "sparkyfitness-frontend": "codewithcj/sparkyfitness:v0.17.3"} +[19:31:57] swap on the bench: none +[19:32:40] up -d rc=0 in 42.3s +[19:33:11] settled=True in 73.4s after up -d (settle loop 31.1s) :: {"sparkyfitness": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-db": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}} +[19:33:11] sparkyfitness-db: 2026-10-01T19:31:59.146819574Z healthy rc=0 mem=536870912 +[19:33:11] sparkyfitness-server: 2026-10-01T19:32:09.915521757Z healthy rc=0 mem=1073741824 +[19:33:11] sparkyfitness: 2026-10-01T19:32:40.767837794Z healthy rc=0 mem=268435456 +[19:33:11] holding 300s idle for the from-birth sampler +[19:38:11] end sparkyfitness-db: running healthy rc=0 OOMKilled(not-used)=false +[19:38:12] end sparkyfitness-server: running healthy rc=0 OOMKilled(not-used)=false +[19:38:12] end sparkyfitness: running healthy rc=0 OOMKilled(not-used)=false +[19:38:12] server start lines saved (migrat|error|listening|started), 40 lines diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.py b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.py new file mode 100644 index 00000000..516fc57c --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/birth.py @@ -0,0 +1,38 @@ +"""birth.py — checklist 5.1 / 4.3 (bench half) for sparkyfitness at the PIN, from birth, swap 0. +Renders the catalog template exactly as upgrade-test.py does (its own render/build_env/settle), starts the +from-birth sampler BEFORE `up -d`, times up -d -> every container healthy, then keeps sampling idle for HOLD s. +Images are pre-pulled, so the time is start time, not download time. Prints no secret.""" +import importlib.util, json, os, subprocess, sys, time +sys.path.insert(0, "/opt/upg"); os.chdir("/opt/upg") +spec = importlib.util.spec_from_file_location("ut", "/opt/upg/upgrade-test.py"); ut = importlib.util.module_from_spec(spec) +sys.argv = ["upgrade-test.py"]; spec.loader.exec_module(ut) +from pathlib import Path +HOLD = int(os.environ.get("HOLD", "300")) +app, project = "sparkyfitness", "birth" +wd = Path("/opt/upg/work/BIRTH"); ev = Path("/opt/upg/evidence/BIRTH"); ev.mkdir(parents=True, exist_ok=True) +tdir = ut.TEMPLATES / app +env = ut.cvp.build_env(app, (tdir / ".felhom.yml").read_text(), (tdir / "docker-compose.yml").read_text()) +ut.render(app, {}, wd, env) +log = open(ev / "birth.log", "w", buffering=1) +def say(m): + l = time.strftime("[%H:%M:%S] ", time.gmtime()) + m; print(l, flush=True); log.write(l + "\n") +say("images: " + json.dumps(ut.template_images(app, ut.TEMPLATES))) +say("swap on the bench: " + (subprocess.run(["swapon", "--show"], capture_output=True, text=True).stdout.strip() or "none")) +subprocess.run("rm -f /root/mem-birth.csv.stop; (NAMES='sparkyfitness-db sparkyfitness-server sparkyfitness' OUT=/root/mem-birth.csv DUR=1200 nohup bash /opt/upg/sampler.sh >/dev/null 2>&1 &)", shell=True) +time.sleep(1) +t0 = time.time() +up = ut.compose(wd, project, "up", "-d") +say(f"up -d rc={up.returncode} in {time.time()-t0:.1f}s") +ok, secs, states = ut.settle(project, wd, wait=600) +say(f"settled={ok} in {time.time()-t0:.1f}s after up -d (settle loop {secs}s) :: {json.dumps(states)}") +for c in ("sparkyfitness-db", "sparkyfitness-server", "sparkyfitness"): + r = subprocess.run(["docker", "inspect", "-f", "{{.State.StartedAt}} {{.State.Health.Status}} rc={{.RestartCount}} mem={{.HostConfig.Memory}}", c], capture_output=True, text=True) + say(f" {c}: {r.stdout.strip()}") +say(f"holding {HOLD}s idle for the from-birth sampler") +time.sleep(HOLD) +for c in ("sparkyfitness-db", "sparkyfitness-server", "sparkyfitness"): + r = subprocess.run(["docker", "inspect", "-f", "{{.State.Status}} {{.State.Health.Status}} rc={{.RestartCount}} OOMKilled(not-used)={{.State.OOMKilled}}", c], capture_output=True, text=True) + say(f" end {c}: {r.stdout.strip()}") +r = subprocess.run(f"docker logs sparkyfitness-server 2>&1 | grep -i -E 'migrat|error|listening|started' | head -40", shell=True, capture_output=True, text=True) +(ev / "server-startlines.txt").write_text(r.stdout) +say("server start lines saved (migrat|error|listening|started), %d lines" % len(r.stdout.splitlines())) diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/sampler.sh b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/sampler.sh new file mode 100644 index 00000000..85fe5898 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/sampler.sh @@ -0,0 +1,12 @@ +# sampler.sh (run INSIDE the bench or the box): sample the cgroup of each named container from its birth, every 2 s. +# usage: NAMES="a b c" OUT=/root/mem.csv DUR=900 bash sampler.sh & — stops at DUR or when $OUT.stop exists +: > $OUT; t0=$(date +%s) +while [ $(( $(date +%s) - t0 )) -lt ${DUR:-900} ] && [ ! -f $OUT.stop ]; do + for n in $NAMES; do + id=$(docker ps -q --no-trunc --filter name=^$n$ | head -1); [ -z "$id" ] && continue + cg=$(ls -d /sys/fs/cgroup/system.slice/docker-$id.scope 2>/dev/null || find /sys/fs/cgroup -maxdepth 4 -type d -name "*$id*" 2>/dev/null | head -1) + [ -f "$cg/memory.stat" ] || continue + echo "$(date +%s),$n,${id:0:12},$(awk '$1=="anon"{print $2}' $cg/memory.stat),$(cat $cg/memory.current),$(cat $cg/memory.swap.current 2>/dev/null || echo NA),$(awk '$1=="oom_kill"{print $2}' $cg/memory.events),$(cat $cg/memory.max),$(docker inspect -f '{{.RestartCount}}' $id)" >> $OUT + done + sleep 2 +done diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-full.log b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-full.log new file mode 100644 index 00000000..7229ceee --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-full.log @@ -0,0 +1,413 @@ +[dotenv@17.3.1] injecting env (0) from ../.env -- tip: ⚙️ enable debug logging with { debug: true } +[Secrets] Checking for secret files to load... +[Secrets] No secrets loaded from files. +[2026-10-01T19:32:10.816Z] [INFO] Environment variable pre-flight checks passed successfully. +Starting server... +[2026-10-01T19:32:19.367Z] [INFO] [withingsService] Withings data source configured to: withings +[2026-10-01T19:32:19.369Z] [INFO] [fitbitService] Fitbit data source configured to: fitbit +[2026-10-01T19:32:19.369Z] [INFO] [googleHealthService] Google Health data source: googlehealth +[2026-10-01T19:32:19.370Z] [INFO] [polarService] Polar data source configured to: polar +[2026-10-01T19:32:19.371Z] [INFO] [stravaService] Strava data source configured to: strava +[2026-10-01T19:32:19.371Z] [INFO] [hevyService] Hevy data source configured to: hevy +[2026-10-01T19:32:20.011Z] [INFO] UserProfileRoutes UPLOADS_DIR: /app/SparkyFitnessServer/uploads/avatars +DEBUG: SPARKY_FITNESS_FRONTEND_URL is: https://sparky.gate.invalid +[SECURITY] Private network CORS is ENABLED. Ensure this is only on self-hosted/private networks. +SparkyFitnessServer UPLOADS_BASE_DIR: /app/SparkyFitnessServer/uploads +[2026-10-01T19:32:20.138Z] [INFO] Ensured temporary upload directory exists: /app/SparkyFitnessServer/temp_uploads/ +[2026-10-01T19:32:20.162Z] [INFO] Creating role: "sparkyapp" +[2026-10-01T19:32:20.173Z] [INFO] Successfully created role: "sparkyapp" +[2026-10-01T19:32:20.185Z] [INFO] Ensured schema_migrations table exists. +[2026-10-01T19:32:20.187Z] [INFO] Applied migrations: [] +[2026-10-01T19:32:20.189Z] [INFO] Applying migration: 20250703170640_InitialDB.sql +[2026-10-01T19:32:20.283Z] [INFO] Successfully applied migration: 20250703170640_InitialDB.sql +[2026-10-01T19:32:20.283Z] [INFO] Applying migration: 20250710062500_create_goal_presets_table.sql +[2026-10-01T19:32:20.306Z] [INFO] Successfully applied migration: 20250710062500_create_goal_presets_table.sql +[2026-10-01T19:32:20.306Z] [INFO] Applying migration: 20250711173824_meal_features.sql +[2026-10-01T19:32:20.359Z] [INFO] Successfully applied migration: 20250711173824_meal_features.sql +[2026-10-01T19:32:20.359Z] [INFO] Applying migration: 20250712163617_refactor_data_providers_and_add_exercise_source_id.sql +[2026-10-01T19:32:20.368Z] [INFO] Successfully applied migration: 20250712163617_refactor_data_providers_and_add_exercise_source_id.sql +[2026-10-01T19:32:20.368Z] [INFO] Applying migration: 20250713125323_create_oidc_settings_and_update_users_table.sql +[2026-10-01T19:32:20.381Z] [INFO] Successfully applied migration: 20250713125323_create_oidc_settings_and_update_users_table.sql +[2026-10-01T19:32:20.381Z] [INFO] Applying migration: 20250713135900_add_role_to_users_table.sql +[2026-10-01T19:32:20.387Z] [INFO] Successfully applied migration: 20250713135900_add_role_to_users_table.sql +[2026-10-01T19:32:20.387Z] [INFO] Applying migration: 20250713142300_add_oidc_config_fields.sql +[2026-10-01T19:32:20.395Z] [INFO] Successfully applied migration: 20250713142300_add_oidc_config_fields.sql +[2026-10-01T19:32:20.395Z] [INFO] Applying migration: 20250714000000_create_session_table.sql +[2026-10-01T19:32:20.409Z] [INFO] Successfully applied migration: 20250714000000_create_session_table.sql +[2026-10-01T19:32:20.409Z] [INFO] Applying migration: 20250714175824_add_api_key_tag_to_ai_service_settings.sql +[2026-10-01T19:32:20.414Z] [INFO] Successfully applied migration: 20250714175824_add_api_key_tag_to_ai_service_settings.sql +[2026-10-01T19:32:20.414Z] [INFO] Applying migration: 20250717190700_add_cascading_deletes.sql +[2026-10-01T19:32:20.444Z] [INFO] Successfully applied migration: 20250717190700_add_cascading_deletes.sql +[2026-10-01T19:32:20.444Z] [INFO] Applying migration: 20250717233929_add_is_quick_food_to_foods.sql +[2026-10-01T19:32:20.450Z] [INFO] Successfully applied migration: 20250717233929_add_is_quick_food_to_foods.sql +[2026-10-01T19:32:20.450Z] [INFO] Applying migration: 20250718190226_add_food_display_limit_to_user_preferences.sql +[2026-10-01T19:32:20.456Z] [INFO] Successfully applied migration: 20250718190226_add_food_display_limit_to_user_preferences.sql +[2026-10-01T19:32:20.456Z] [INFO] Applying migration: 20250719131500_add_meal_percentages.sql +[2026-10-01T19:32:20.466Z] [INFO] Successfully applied migration: 20250719131500_add_meal_percentages.sql +[2026-10-01T19:32:20.466Z] [INFO] Applying migration: 20250719215400_add_login_management_to_oidc_settings.sql +[2026-10-01T19:32:20.472Z] [INFO] Successfully applied migration: 20250719215400_add_login_management_to_oidc_settings.sql +[2026-10-01T19:32:20.472Z] [INFO] Applying migration: 20250720010000_create_user_nutrient_display_preferences.sql +[2026-10-01T19:32:20.485Z] [INFO] Successfully applied migration: 20250720010000_create_user_nutrient_display_preferences.sql +[2026-10-01T19:32:20.485Z] [INFO] Applying migration: 20250720201800_rename_food_display_limit_to_item_display_limit.sql +[2026-10-01T19:32:20.490Z] [INFO] Successfully applied migration: 20250720201800_rename_food_display_limit_to_item_display_limit.sql +[2026-10-01T19:32:20.490Z] [INFO] Applying migration: 20250720220000_add_water_tracking_features.sql +[2026-10-01T19:32:20.504Z] [INFO] Successfully applied migration: 20250720220000_add_water_tracking_features.sql +[2026-10-01T19:32:20.504Z] [INFO] Applying migration: 20250720233836_alter_water_goal_ml_to_numeric.sql +[2026-10-01T19:32:20.516Z] [INFO] Successfully applied migration: 20250720233836_alter_water_goal_ml_to_numeric.sql +[2026-10-01T19:32:20.516Z] [INFO] Applying migration: 20250721000000_add_servings_per_container_to_water_containers.sql +[2026-10-01T19:32:20.521Z] [INFO] Successfully applied migration: 20250721000000_add_servings_per_container_to_water_containers.sql +[2026-10-01T19:32:20.522Z] [INFO] Applying migration: 20250721000000_alter_water_container_volume_to_numeric.sql +[2026-10-01T19:32:20.530Z] [INFO] Successfully applied migration: 20250721000000_alter_water_container_volume_to_numeric.sql +[2026-10-01T19:32:20.530Z] [INFO] Applying migration: 20250721014900_alter_water_ml_to_numeric.sql +[2026-10-01T19:32:20.540Z] [INFO] Successfully applied migration: 20250721014900_alter_water_ml_to_numeric.sql +[2026-10-01T19:32:20.540Z] [INFO] Applying migration: 20250819062400_add_mealie_provider_type.sql +[2026-10-01T19:32:20.546Z] [INFO] Successfully applied migration: 20250819062400_add_mealie_provider_type.sql +[2026-10-01T19:32:20.546Z] [INFO] Applying migration: 20250819083500_add_base_url_to_external_data_providers.sql +[2026-10-01T19:32:20.550Z] [INFO] Successfully applied migration: 20250819083500_add_base_url_to_external_data_providers.sql +[2026-10-01T19:32:20.550Z] [INFO] Applying migration: 202508201215_add_garmin_integration_schema.sql +[2026-10-01T19:32:20.557Z] [INFO] Successfully applied migration: 202508201215_add_garmin_integration_schema.sql +[2026-10-01T19:32:20.557Z] [INFO] Applying migration: 20250821090000_update_external_data_providers_provider_type_check.sql +[2026-10-01T19:32:20.563Z] [INFO] Successfully applied migration: 20250821090000_update_external_data_providers_provider_type_check.sql +[2026-10-01T19:32:20.563Z] [INFO] Applying migration: 20250821091500_add_garth_token_dump_to_external_data_providers.sql +[2026-10-01T19:32:20.568Z] [INFO] Successfully applied migration: 20250821091500_add_garth_token_dump_to_external_data_providers.sql +[2026-10-01T19:32:20.568Z] [INFO] Applying migration: 20250821102000_remove_redundant_token_fields_from_external_data_providers.sql +[2026-10-01T19:32:20.575Z] [INFO] Successfully applied migration: 20250821102000_remove_redundant_token_fields_from_external_data_providers.sql +[2026-10-01T19:32:20.575Z] [INFO] Applying migration: 20250831063900_create_mood_entries_table.sql +[2026-10-01T19:32:20.587Z] [INFO] Successfully applied migration: 20250831063900_create_mood_entries_table.sql +[2026-10-01T19:32:20.587Z] [INFO] Applying migration: 20250927180257_alter_exercises_table.sql +[2026-10-01T19:32:20.597Z] [INFO] Successfully applied migration: 20250927180257_alter_exercises_table.sql +[2026-10-01T19:32:20.598Z] [INFO] Applying migration: 20250927212000_add_free_exercise_db_to_provider_type_check.sql +[2026-10-01T19:32:20.603Z] [INFO] Successfully applied migration: 20250927212000_add_free_exercise_db_to_provider_type_check.sql +[2026-10-01T19:32:20.603Z] [INFO] Applying migration: 20250930002100_add_sets_reps_weight_to_exercise_entries.sql +[2026-10-01T19:32:20.608Z] [INFO] Successfully applied migration: 20250930002100_add_sets_reps_weight_to_exercise_entries.sql +[2026-10-01T19:32:20.608Z] [INFO] Applying migration: 20251001232600_add_gender_to_users_table.sql +[2026-10-01T19:32:20.612Z] [INFO] Successfully applied migration: 20251001232600_add_gender_to_users_table.sql +[2026-10-01T19:32:20.612Z] [INFO] Applying migration: 20251002182306_create_backup_settings_table.sql +[2026-10-01T19:32:20.623Z] [INFO] Successfully applied migration: 20251002182306_create_backup_settings_table.sql +[2026-10-01T19:32:20.623Z] [INFO] Applying migration: 20251002224500_add_password_reset_to_users_table.sql +[2026-10-01T19:32:20.630Z] [INFO] Successfully applied migration: 20251002224500_add_password_reset_to_users_table.sql +[2026-10-01T19:32:20.631Z] [INFO] Applying migration: 20251006021609_add_glycemic_index_to_foods_and_food_variants.sql +[2026-10-01T19:32:20.636Z] [INFO] Successfully applied migration: 20251006021609_add_glycemic_index_to_foods_and_food_variants.sql +[2026-10-01T19:32:20.636Z] [INFO] Applying migration: 20251006220500_create_admin_activity_logs_table.sql +[2026-10-01T19:32:20.649Z] [INFO] Successfully applied migration: 20251006220500_create_admin_activity_logs_table.sql +[2026-10-01T19:32:20.649Z] [INFO] Applying migration: 20251008224256_add_workout_features.sql +[2026-10-01T19:32:20.693Z] [INFO] Successfully applied migration: 20251008224256_add_workout_features.sql +[2026-10-01T19:32:20.693Z] [INFO] Applying migration: 20251012225400_add_primary_keys_to_workout_tables.sql +[2026-10-01T19:32:20.700Z] [INFO] Successfully applied migration: 20251012225400_add_primary_keys_to_workout_tables.sql +[2026-10-01T19:32:20.700Z] [INFO] Applying migration: 20251012225500_add_multiple_sets_to_presets.sql +[2026-10-01T19:32:20.717Z] [INFO] Successfully applied migration: 20251012225500_add_multiple_sets_to_presets.sql +[2026-10-01T19:32:20.717Z] [INFO] Applying migration: 20251012225900_add_multiple_sets_to_plans.sql +[2026-10-01T19:32:20.735Z] [INFO] Successfully applied migration: 20251012225900_add_multiple_sets_to_plans.sql +[2026-10-01T19:32:20.735Z] [INFO] Applying migration: 20251012230000_add_multiple_sets_to_exercise_entries.sql +[2026-10-01T19:32:20.749Z] [INFO] Successfully applied migration: 20251012230000_add_multiple_sets_to_exercise_entries.sql +[2026-10-01T19:32:20.749Z] [INFO] Applying migration: 20251015223200_convert_weights_to_kg_and_set_default.sql +[2026-10-01T19:32:20.756Z] [INFO] Successfully applied migration: 20251015223200_convert_weights_to_kg_and_set_default.sql +[2026-10-01T19:32:20.756Z] [INFO] Applying migration: 202510170132_add_text_measurements.sql +[2026-10-01T19:32:20.772Z] [INFO] Successfully applied migration: 202510170132_add_text_measurements.sql +[2026-10-01T19:32:20.772Z] [INFO] Applying migration: 20251017200900_add_multiple_oidc_providers.sql +[2026-10-01T19:32:20.811Z] [INFO] Successfully applied migration: 20251017200900_add_multiple_oidc_providers.sql +[2026-10-01T19:32:20.811Z] [INFO] Applying migration: 20251017204200_create_global_settings.sql +[2026-10-01T19:32:20.819Z] [INFO] Successfully applied migration: 20251017204200_create_global_settings.sql +[2026-10-01T19:32:20.819Z] [INFO] Applying migration: 20251018001151_add_bmr_and_bodyfat_preferences.sql +[2026-10-01T19:32:20.827Z] [INFO] Successfully applied migration: 20251018001151_add_bmr_and_bodyfat_preferences.sql +[2026-10-01T19:32:20.827Z] [INFO] Applying migration: 20251018223700_add_signing_alg_to_oidc_providers.sql +[2026-10-01T19:32:20.833Z] [INFO] Successfully applied migration: 20251018223700_add_signing_alg_to_oidc_providers.sql +[2026-10-01T19:32:20.833Z] [INFO] Applying migration: 20251019013200_merged_schema_and_data.sql +[2026-10-01T19:32:20.871Z] [INFO] Successfully applied migration: 20251019013200_merged_schema_and_data.sql +[2026-10-01T19:32:20.871Z] [INFO] Applying migration: 20251019013300_merged_rls_policies.sql +[2026-10-01T19:32:20.909Z] [INFO] Successfully applied migration: 20251019013300_merged_rls_policies.sql +[2026-10-01T19:32:20.909Z] [INFO] Applying migration: 20251019154515_update_rls_policies_for_shared_items.sql +[2026-10-01T19:32:20.918Z] [INFO] Successfully applied migration: 20251019154515_update_rls_policies_for_shared_items.sql +[2026-10-01T19:32:20.918Z] [INFO] Applying migration: 20251019203500_fix_rls_permissions_for_public_foods.sql +[2026-10-01T19:32:20.924Z] [INFO] Successfully applied migration: 20251019203500_fix_rls_permissions_for_public_foods.sql +[2026-10-01T19:32:20.924Z] [INFO] Applying migration: 20251019204000_correct_variant_rls_policy.sql +[2026-10-01T19:32:20.930Z] [INFO] Successfully applied migration: 20251019204000_correct_variant_rls_policy.sql +[2026-10-01T19:32:20.930Z] [INFO] Applying migration: 20251019212500_update_measurement_rls_policies.sql +[2026-10-01T19:32:20.943Z] [INFO] Successfully applied migration: 20251019212500_update_measurement_rls_policies.sql +[2026-10-01T19:32:20.943Z] [INFO] Applying migration: 20251019222100_add_audit_columns_to_measurements.sql +[2026-10-01T19:32:20.977Z] [INFO] Successfully applied migration: 20251019222100_add_audit_columns_to_measurements.sql +[2026-10-01T19:32:20.977Z] [INFO] Applying migration: 20251020001000_fix_family_access_insert_policy.sql +[2026-10-01T19:32:20.982Z] [INFO] Successfully applied migration: 20251020001000_fix_family_access_insert_policy.sql +[2026-10-01T19:32:20.982Z] [INFO] Applying migration: 20251020022000_set_default_shared_with_public.sql +[2026-10-01T19:32:20.987Z] [INFO] Successfully applied migration: 20251020022000_set_default_shared_with_public.sql +[2026-10-01T19:32:20.987Z] [INFO] Applying migration: 20251020022200_update_rls_policies.sql +[2026-10-01T19:32:20.992Z] [INFO] Successfully applied migration: 20251020022200_update_rls_policies.sql +[2026-10-01T19:32:20.992Z] [INFO] Applying migration: 20251020022500_fix_food_select_policy.sql +[2026-10-01T19:32:20.997Z] [INFO] Successfully applied migration: 20251020022500_fix_food_select_policy.sql +[2026-10-01T19:32:20.997Z] [INFO] Applying migration: 20251020030000_simplify_food_select_policy.sql +[2026-10-01T19:32:21.002Z] [INFO] Successfully applied migration: 20251020030000_simplify_food_select_policy.sql +[2026-10-01T19:32:21.003Z] [INFO] Applying migration: 20251020031000_update_food_select_policy_with_sharing.sql +[2026-10-01T19:32:21.007Z] [INFO] Successfully applied migration: 20251020031000_update_food_select_policy_with_sharing.sql +[2026-10-01T19:32:21.007Z] [INFO] Applying migration: 20251020032200_add_all_owner_centric_policies.sql +[2026-10-01T19:32:21.030Z] [INFO] Successfully applied migration: 20251020032200_add_all_owner_centric_policies.sql +[2026-10-01T19:32:21.030Z] [INFO] Applying migration: 20251020033400_add_food_variants_rls_policy.sql +[2026-10-01T19:32:21.038Z] [INFO] Successfully applied migration: 20251020033400_add_food_variants_rls_policy.sql +[2026-10-01T19:32:21.038Z] [INFO] Applying migration: 20251020033700_fix_food_variants_rls_policy.sql +[2026-10-01T19:32:21.046Z] [INFO] Successfully applied migration: 20251020033700_fix_food_variants_rls_policy.sql +[2026-10-01T19:32:21.046Z] [INFO] Applying migration: 20251020230839_fix_family_access_rls_policies.sql +[2026-10-01T19:32:21.055Z] [INFO] Successfully applied migration: 20251020230839_fix_family_access_rls_policies.sql +[2026-10-01T19:32:21.055Z] [INFO] Applying migration: 20251021025423_restrict_family_access_select_policy.sql +[2026-10-01T19:32:21.062Z] [INFO] Successfully applied migration: 20251021025423_restrict_family_access_select_policy.sql +[2026-10-01T19:32:21.062Z] [INFO] Applying migration: 20251021034700_add_public_sharing_to_external_providers.sql +[2026-10-01T19:32:21.073Z] [INFO] Successfully applied migration: 20251021034700_add_public_sharing_to_external_providers.sql +[2026-10-01T19:32:21.073Z] [INFO] Applying migration: 20251022201000_fix_exercise_rls_policy.sql +[2026-10-01T19:32:21.079Z] [INFO] Successfully applied migration: 20251022201000_fix_exercise_rls_policy.sql +[2026-10-01T19:32:21.079Z] [INFO] Applying migration: 20251022203000_snapshot_exercise_details_in_entries.sql +[2026-10-01T19:32:21.091Z] [INFO] Successfully applied migration: 20251022203000_snapshot_exercise_details_in_entries.sql +[2026-10-01T19:32:21.091Z] [INFO] Applying migration: 20251023120500_update_external_providers_select_policy_for_public.sql +[2026-10-01T19:32:21.098Z] [INFO] Successfully applied migration: 20251023120500_update_external_providers_select_policy_for_public.sql +[2026-10-01T19:32:21.098Z] [INFO] Applying migration: 20251023221000_update_meals_rls_policy.sql +[2026-10-01T19:32:21.105Z] [INFO] Successfully applied migration: 20251023221000_update_meals_rls_policy.sql +[2026-10-01T19:32:21.105Z] [INFO] Applying migration: 20251023221500_update_meal_plan_template_assignments_rls_policy.sql +[2026-10-01T19:32:21.115Z] [INFO] Successfully applied migration: 20251023221500_update_meal_plan_template_assignments_rls_policy.sql +[2026-10-01T19:32:21.115Z] [INFO] Applying migration: 20251023221501_add_meal_id_to_food_entries.sql +[2026-10-01T19:32:21.133Z] [INFO] Successfully applied migration: 20251023221501_add_meal_id_to_food_entries.sql +[2026-10-01T19:32:21.133Z] [INFO] Applying migration: 20251024230330_add_withings_fields_to_external_data_providers.sql +[2026-10-01T19:32:21.143Z] [INFO] Successfully applied migration: 20251024230330_add_withings_fields_to_external_data_providers.sql +[2026-10-01T19:32:21.143Z] [INFO] Applying migration: 20251025210900_add_source_to_custom_measurements.sql +[2026-10-01T19:32:21.159Z] [INFO] Successfully applied migration: 20251025210900_add_source_to_custom_measurements.sql +[2026-10-01T19:32:21.159Z] [INFO] Applying migration: 20251026125900_add_distance_and_hr_to_exercise_entries_activity_details.sql +[2026-10-01T19:32:21.177Z] [INFO] Successfully applied migration: 20251026125900_add_distance_and_hr_to_exercise_entries_activity_details.sql +[2026-10-01T19:32:21.177Z] [INFO] Applying migration: 202510310132_add_language_to_user_preferences.sql +[2026-10-01T19:32:21.182Z] [INFO] Successfully applied migration: 202510310132_add_language_to_user_preferences.sql +[2026-10-01T19:32:21.182Z] [INFO] Applying migration: 20251101151100_create_sleep_entries_table.sql +[2026-10-01T19:32:21.202Z] [INFO] Successfully applied migration: 20251101151100_create_sleep_entries_table.sql +[2026-10-01T19:32:21.202Z] [INFO] Applying migration: 20251103000000_add_onboarding_schema.sql +[2026-10-01T19:32:21.217Z] [INFO] Successfully applied migration: 20251103000000_add_onboarding_schema.sql +[2026-10-01T19:32:21.217Z] [INFO] Applying migration: 20251112000000_add_display_name_to_custom_categories.sql +[2026-10-01T19:32:21.222Z] [INFO] Successfully applied migration: 20251112000000_add_display_name_to_custom_categories.sql +[2026-10-01T19:32:21.222Z] [INFO] Applying migration: 20251114205134_create_exercise_preset_entries_table.sql +[2026-10-01T19:32:21.239Z] [INFO] Successfully applied migration: 20251114205134_create_exercise_preset_entries_table.sql +[2026-10-01T19:32:21.239Z] [INFO] Applying migration: 20251115003147_add_source_to_exercise_preset_entries.sql +[2026-10-01T19:32:21.244Z] [INFO] Successfully applied migration: 20251115003147_add_source_to_exercise_preset_entries.sql +[2026-10-01T19:32:21.245Z] [INFO] Applying migration: 20251115003301_add_exercise_preset_entry_id_to_activity_details.sql +[2026-10-01T19:32:21.251Z] [INFO] Successfully applied migration: 20251115003301_add_exercise_preset_entry_id_to_activity_details.sql +[2026-10-01T19:32:21.251Z] [INFO] Applying migration: 20251115004027_alter_exercise_entry_id_nullable_in_activity_details.sql +[2026-10-01T19:32:21.256Z] [INFO] Successfully applied migration: 20251115004027_alter_exercise_entry_id_nullable_in_activity_details.sql +[2026-10-01T19:32:21.256Z] [INFO] Applying migration: 20251120011100_add_mfa_magic_link_columns.sql +[2026-10-01T19:32:21.269Z] [INFO] Successfully applied migration: 20251120011100_add_mfa_magic_link_columns.sql +[2026-10-01T19:32:21.269Z] [INFO] Applying migration: 20251121011500_add_email_mfa_columns_to_users.sql +[2026-10-01T19:32:21.273Z] [INFO] Successfully applied migration: 20251121011500_add_email_mfa_columns_to_users.sql +[2026-10-01T19:32:21.273Z] [INFO] Applying migration: 202511220110_add_default_external_data_providers.sql +[2026-10-01T19:32:21.281Z] [INFO] Successfully applied migration: 202511220110_add_default_external_data_providers.sql +[2026-10-01T19:32:21.281Z] [INFO] Applying migration: 202511232110_delete_raw_stress_data_categories.sql +[2026-10-01T19:32:21.285Z] [INFO] Successfully applied migration: 202511232110_delete_raw_stress_data_categories.sql +[2026-10-01T19:32:21.285Z] [INFO] Applying migration: 202511270109_add_calorie_goal_adjustment_mode_to_user_preferences.sql +[2026-10-01T19:32:21.290Z] [INFO] Successfully applied migration: 202511270109_add_calorie_goal_adjustment_mode_to_user_preferences.sql +[2026-10-01T19:32:21.290Z] [INFO] Applying migration: 20251127194107_create_food_entry_meals_and_link_food_entries.sql +[2026-10-01T19:32:21.310Z] [INFO] Successfully applied migration: 20251127194107_create_food_entry_meals_and_link_food_entries.sql +[2026-10-01T19:32:21.310Z] [INFO] Applying migration: 20251127194108_migrate_aggregated_food_entries_to_food_entry_meals.sql +[2026-10-01T19:32:21.319Z] [INFO] Successfully applied migration: 20251127194108_migrate_aggregated_food_entries_to_food_entry_meals.sql +[2026-10-01T19:32:21.319Z] [INFO] Applying migration: 20251128030115_add_tandoor_provider_type.sql +[2026-10-01T19:32:21.324Z] [INFO] Successfully applied migration: 20251128030115_add_tandoor_provider_type.sql +[2026-10-01T19:32:21.324Z] [INFO] Applying migration: 20251205000000_add_energy_unit_to_user_preferences.sql +[2026-10-01T19:32:21.330Z] [INFO] Successfully applied migration: 20251205000000_add_energy_unit_to_user_preferences.sql +[2026-10-01T19:32:21.330Z] [INFO] Applying migration: 20251206000000_add_nutrient_calculation_algorithms.sql +[2026-10-01T19:32:21.338Z] [INFO] Successfully applied migration: 20251206000000_add_nutrient_calculation_algorithms.sql +[2026-10-01T19:32:21.338Z] [INFO] Applying migration: 20251206000001_add_serving_size_to_meals.sql +[2026-10-01T19:32:21.346Z] [INFO] Successfully applied migration: 20251206000001_add_serving_size_to_meals.sql +[2026-10-01T19:32:21.347Z] [INFO] Applying migration: 20251207000001_add_default_meal_quantity.sql +[2026-10-01T19:32:21.350Z] [INFO] Successfully applied migration: 20251207000001_add_default_meal_quantity.sql +[2026-10-01T19:32:21.350Z] [INFO] Applying migration: 20251215005329_add_usda_to_provider_type_check.sql +[2026-10-01T19:32:21.356Z] [INFO] Successfully applied migration: 20251215005329_add_usda_to_provider_type_check.sql +[2026-10-01T19:32:21.356Z] [INFO] Applying migration: 20251221000000_create_fasting_logs.sql +[2026-10-01T19:32:21.367Z] [INFO] Successfully applied migration: 20251221000000_create_fasting_logs.sql +[2026-10-01T19:32:21.367Z] [INFO] Applying migration: 20251221010000_drop_mood_weight_from_fasting_logs.sql +[2026-10-01T19:32:21.373Z] [INFO] Successfully applied migration: 20251221010000_drop_mood_weight_from_fasting_logs.sql +[2026-10-01T19:32:21.373Z] [INFO] Applying migration: 20251226150700_add_mobile_health_data_features.sql +[2026-10-01T19:32:21.385Z] [INFO] Successfully applied migration: 20251226150700_add_mobile_health_data_features.sql +[2026-10-01T19:32:21.385Z] [INFO] Applying migration: 20251228000000_add_custom_nutrients_tables.sql +[2026-10-01T19:32:21.398Z] [INFO] Successfully applied migration: 20251228000000_add_custom_nutrients_tables.sql +[2026-10-01T19:32:21.398Z] [INFO] Applying migration: 20252317234000_add_is_quick_exercise_to_exercises.sql +[2026-10-01T19:32:21.404Z] [INFO] Successfully applied migration: 20252317234000_add_is_quick_exercise_to_exercises.sql +[2026-10-01T19:32:21.404Z] [INFO] Applying migration: 20260105000000_add_auto_scale_open_food_facts_imports.sql +[2026-10-01T19:32:21.409Z] [INFO] Successfully applied migration: 20260105000000_add_auto_scale_open_food_facts_imports.sql +[2026-10-01T19:32:21.409Z] [INFO] Applying migration: 20260108010449_add_cascading_delete_to_check_in_measurements.sql +[2026-10-01T19:32:21.418Z] [INFO] Successfully applied migration: 20260108010449_add_cascading_delete_to_check_in_measurements.sql +[2026-10-01T19:32:21.418Z] [INFO] Applying migration: 20260108011953_add_cascading_delete_to_food_entries.sql +[2026-10-01T19:32:21.428Z] [INFO] Successfully applied migration: 20260108011953_add_cascading_delete_to_food_entries.sql +[2026-10-01T19:32:21.428Z] [INFO] Applying migration: 20260108012051_add_comprehensive_cascading_deletes.sql +[2026-10-01T19:32:21.476Z] [INFO] Successfully applied migration: 20260108012051_add_comprehensive_cascading_deletes.sql +[2026-10-01T19:32:21.476Z] [INFO] Applying migration: 20260108223108_alter_water_goal_to_numeric.sql +[2026-10-01T19:32:21.489Z] [INFO] Successfully applied migration: 20260108223108_alter_water_goal_to_numeric.sql +[2026-10-01T19:32:21.489Z] [INFO] Applying migration: 20260111180656_custom_meal_feature.sql +[2026-10-01T19:32:21.547Z] [INFO] Successfully applied migration: 20260111180656_custom_meal_feature.sql +[2026-10-01T19:32:21.547Z] [INFO] Applying migration: 20260122201500_refactor_provider_type_to_lookup_table.sql +[2026-10-01T19:32:21.563Z] [INFO] Successfully applied migration: 20260122201500_refactor_provider_type_to_lookup_table.sql +[2026-10-01T19:32:21.563Z] [INFO] Applying migration: 20260123115500_add_privacy_flag_to_provider_types.sql +[2026-10-01T19:32:21.569Z] [INFO] Successfully applied migration: 20260123115500_add_privacy_flag_to_provider_types.sql +[2026-10-01T19:32:21.569Z] [INFO] Applying migration: 20260125000000_better_auth_migration.sql +[2026-10-01T19:32:21.805Z] [INFO] Successfully applied migration: 20260125000000_better_auth_migration.sql +[2026-10-01T19:32:21.805Z] [INFO] Applying migration: 20260127040000_family_access_audit_fix.sql +[2026-10-01T19:32:21.842Z] [INFO] Successfully applied migration: 20260127040000_family_access_audit_fix.sql +[2026-10-01T19:32:21.842Z] [INFO] Applying migration: 202601280001_add_show_hide_to_meals.sql +[2026-10-01T19:32:21.856Z] [INFO] Successfully applied migration: 202601280001_add_show_hide_to_meals.sql +[2026-10-01T19:32:21.856Z] [INFO] Applying migration: 20260201121400_add_api_key_table.sql +[2026-10-01T19:32:21.874Z] [INFO] Successfully applied migration: 20260201121400_add_api_key_table.sql +[2026-10-01T19:32:21.874Z] [INFO] Applying migration: 20260201184000_add_missing_api_key_columns.sql +[2026-10-01T19:32:21.882Z] [INFO] Successfully applied migration: 20260201184000_add_missing_api_key_columns.sql +[2026-10-01T19:32:21.882Z] [INFO] Applying migration: 20260202023713_add_oidc_config_to_sso_provider.sql +[2026-10-01T19:32:21.889Z] [INFO] Successfully applied migration: 20260202023713_add_oidc_config_to_sso_provider.sql +[2026-10-01T19:32:21.889Z] [INFO] Applying migration: 20260205200200_add_exercise_sorting.sql +[2026-10-01T19:32:21.908Z] [INFO] Successfully applied migration: 20260205200200_add_exercise_sorting.sql +[2026-10-01T19:32:21.908Z] [INFO] Applying migration: 20260206132000_ensure_first_user_is_admin.sql +[2026-10-01T19:32:21.912Z] [INFO] Successfully applied migration: 20260206132000_ensure_first_user_is_admin.sql +[2026-10-01T19:32:21.913Z] [INFO] Applying migration: 20260206215500_add_mfa_totp_enabled_column.sql +[2026-10-01T19:32:21.921Z] [INFO] Successfully applied migration: 20260206215500_add_mfa_totp_enabled_column.sql +[2026-10-01T19:32:21.921Z] [INFO] Applying migration: 20260207110000_mfa_triggers.sql +[2026-10-01T19:32:21.928Z] [INFO] Successfully applied migration: 20260207110000_mfa_triggers.sql +[2026-10-01T19:32:21.928Z] [INFO] Applying migration: 20260208120000_fix_api_key_rate_limit_defaults.sql +[2026-10-01T19:32:21.933Z] [INFO] Successfully applied migration: 20260208120000_fix_api_key_rate_limit_defaults.sql +[2026-10-01T19:32:21.933Z] [INFO] Applying migration: 20260208194543_fix_user_meal_visibilities_fkey.sql +[2026-10-01T19:32:21.940Z] [INFO] Successfully applied migration: 20260208194543_fix_user_meal_visibilities_fkey.sql +[2026-10-01T19:32:21.940Z] [INFO] Applying migration: 20260208_fix_user_creation_trigger.sql +[2026-10-01T19:32:21.946Z] [INFO] Successfully applied migration: 20260208_fix_user_creation_trigger.sql +[2026-10-01T19:32:21.946Z] [INFO] Applying migration: 20260214223000_add_polar_provider_type.sql +[2026-10-01T19:32:21.951Z] [INFO] Successfully applied migration: 20260214223000_add_polar_provider_type.sql +[2026-10-01T19:32:21.951Z] [INFO] Applying migration: 20260215144500_add_hevy_provider_type.sql +[2026-10-01T19:32:21.956Z] [INFO] Successfully applied migration: 20260215144500_add_hevy_provider_type.sql +[2026-10-01T19:32:21.956Z] [INFO] Applying migration: 20260216012235_add_global_ai_settings.sql +[2026-10-01T19:32:21.965Z] [INFO] Successfully applied migration: 20260216012235_add_global_ai_settings.sql +[2026-10-01T19:32:21.965Z] [INFO] Applying migration: 20260216020134_add_allow_user_ai_config.sql +[2026-10-01T19:32:21.970Z] [INFO] Successfully applied migration: 20260216020134_add_allow_user_ai_config.sql +[2026-10-01T19:32:21.970Z] [INFO] Applying migration: 20260216030000_rename_is_global_to_is_public.sql +[2026-10-01T19:32:21.978Z] [INFO] Successfully applied migration: 20260216030000_rename_is_global_to_is_public.sql +[2026-10-01T19:32:21.978Z] [INFO] Applying migration: 20260216140000_add_custom_nutrients_to_goals_and_presets.sql +[2026-10-01T19:32:21.984Z] [INFO] Successfully applied migration: 20260216140000_add_custom_nutrients_to_goals_and_presets.sql +[2026-10-01T19:32:21.984Z] [INFO] Applying migration: 20260216195500_prune_empty_custom_nutrients.sql +[2026-10-01T19:32:21.989Z] [INFO] Successfully applied migration: 20260216195500_prune_empty_custom_nutrients.sql +[2026-10-01T19:32:21.989Z] [INFO] Applying migration: 20260221210000_oidc_config_jsonb.sql +[2026-10-01T19:32:22.003Z] [INFO] Successfully applied migration: 20260221210000_oidc_config_jsonb.sql +[2026-10-01T19:32:22.003Z] [INFO] Applying migration: 20260222100000_add_strava_provider_type.sql +[2026-10-01T19:32:22.010Z] [INFO] Successfully applied migration: 20260222100000_add_strava_provider_type.sql +[2026-10-01T19:32:22.010Z] [INFO] Applying migration: 20260224000000_add_sleep_science.sql +[2026-10-01T19:32:22.042Z] [INFO] Successfully applied migration: 20260224000000_add_sleep_science.sql +[2026-10-01T19:32:22.042Z] [INFO] Applying migration: 20260224120000_add_show_in_quick_log_to_meal_visibilities.sql +[2026-10-01T19:32:22.048Z] [INFO] Successfully applied migration: 20260224120000_add_show_in_quick_log_to_meal_visibilities.sql +[2026-10-01T19:32:22.048Z] [INFO] Applying migration: 20260226000000_add_exercise_calorie_preferences.sql +[2026-10-01T19:32:22.055Z] [INFO] Successfully applied migration: 20260226000000_add_exercise_calorie_preferences.sql +[2026-10-01T19:32:22.055Z] [INFO] Applying migration: 20260228120000_fix_sleep_entry_date_to_wake_up_date.sql +[2026-10-01T19:32:22.058Z] [INFO] Successfully applied migration: 20260228120000_fix_sleep_entry_date_to_wake_up_date.sql +[2026-10-01T19:32:22.058Z] [INFO] Applying migration: 20260302000000_add_default_barcode_provider_id.sql +[2026-10-01T19:32:22.067Z] [INFO] Successfully applied migration: 20260302000000_add_default_barcode_provider_id.sql +[2026-10-01T19:32:22.068Z] [INFO] Applying migration: 20260302120000_normalize_barcodes.sql +[2026-10-01T19:32:22.071Z] [INFO] Successfully applied migration: 20260302120000_normalize_barcodes.sql +[2026-10-01T19:32:22.071Z] [INFO] Applying migration: 20260313100000_add_source_to_water_intake.sql +[2026-10-01T19:32:22.088Z] [INFO] Successfully applied migration: 20260313100000_add_source_to_water_intake.sql +[2026-10-01T19:32:22.088Z] [INFO] Applying migration: 20260314175000_add_image_to_user_table.sql +[2026-10-01T19:32:22.092Z] [INFO] Successfully applied migration: 20260314175000_add_image_to_user_table.sql +[2026-10-01T19:32:22.092Z] [INFO] Applying migration: 20260315192200_fix_oidc_config_keys.sql +[2026-10-01T19:32:22.095Z] [INFO] Successfully applied migration: 20260315192200_fix_oidc_config_keys.sql +[2026-10-01T19:32:22.096Z] [INFO] Applying migration: 20260315200000_better_auth_1_5_upgrade.sql +[2026-10-01T19:32:22.100Z] [INFO] Successfully applied migration: 20260315200000_better_auth_1_5_upgrade.sql +[2026-10-01T19:32:22.100Z] [INFO] Applying migration: 20260321000000_add_auto_scale_online_imports.sql +[2026-10-01T19:32:22.105Z] [INFO] Successfully applied migration: 20260321000000_add_auto_scale_online_imports.sql +[2026-10-01T19:32:22.105Z] [INFO] Applying migration: 20260322130000_mfa_better_auth_optimization.sql +[2026-10-01T19:32:22.112Z] [INFO] Successfully applied migration: 20260322130000_mfa_better_auth_optimization.sql +[2026-10-01T19:32:22.112Z] [INFO] Applying migration: 20260322141500_mfa_triggers_sync_fix.sql +[2026-10-01T19:32:22.118Z] [INFO] Successfully applied migration: 20260322141500_mfa_triggers_sync_fix.sql +[2026-10-01T19:32:22.118Z] [INFO] Applying migration: 20260322154230_add_first_day_of_week_to_preferences.sql +[2026-10-01T19:32:22.127Z] [INFO] Successfully applied migration: 20260322154230_add_first_day_of_week_to_preferences.sql +[2026-10-01T19:32:22.127Z] [INFO] Applying migration: 20260323122741_add_steps_column.sql +[2026-10-01T19:32:22.131Z] [INFO] Successfully applied migration: 20260323122741_add_steps_column.sql +[2026-10-01T19:32:22.131Z] [INFO] Applying migration: 20260328120000_add_timezone_check_constraint.sql +[2026-10-01T19:32:22.137Z] [INFO] Successfully applied migration: 20260328120000_add_timezone_check_constraint.sql +[2026-10-01T19:32:22.137Z] [INFO] Applying migration: 20260406120000_add_barcode_fallback_open_food_facts.sql +[2026-10-01T19:32:22.142Z] [INFO] Successfully applied migration: 20260406120000_add_barcode_fallback_open_food_facts.sql +[2026-10-01T19:32:22.142Z] [INFO] Applying migration: 20260420230132_scope_exercises_source_unique_to_user.sql +[2026-10-01T19:32:22.149Z] [INFO] Successfully applied migration: 20260420230132_scope_exercises_source_unique_to_user.sql +[2026-10-01T19:32:22.149Z] [INFO] Applying migration: 20260423120000_sleep_entry_stages_unique_natural_key.sql +[2026-10-01T19:32:22.154Z] [INFO] Successfully applied migration: 20260423120000_sleep_entry_stages_unique_natural_key.sql +[2026-10-01T19:32:22.155Z] [INFO] Applying migration: 20260426120000_provider_sort_order.sql +[2026-10-01T19:32:22.160Z] [INFO] Successfully applied migration: 20260426120000_provider_sort_order.sql +[2026-10-01T19:32:22.160Z] [INFO] Applying migration: 20260426120001_custom_meal_percentages.sql +[2026-10-01T19:32:22.166Z] [INFO] Successfully applied migration: 20260426120001_custom_meal_percentages.sql +[2026-10-01T19:32:22.166Z] [INFO] Applying migration: 20260509120000_add_water_intake_entries.sql +[2026-10-01T19:32:22.330Z] [INFO] Successfully applied migration: 20260509120000_add_water_intake_entries.sql +[2026-10-01T19:32:22.330Z] [INFO] Applying migration: 20260515120000_add_show_net_carbs_to_user_preferences.sql +[2026-10-01T19:32:22.335Z] [INFO] Successfully applied migration: 20260515120000_add_show_net_carbs_to_user_preferences.sql +[2026-10-01T19:32:22.335Z] [INFO] Applying migration: 20260515174155_serving_size_model.sql +[2026-10-01T19:32:22.344Z] [INFO] Successfully applied migration: 20260515174155_serving_size_model.sql +[2026-10-01T19:32:22.344Z] [INFO] Applying migration: 20260523120000_ai_assisted_conversions.sql +[2026-10-01T19:32:22.354Z] [INFO] Successfully applied migration: 20260523120000_ai_assisted_conversions.sql +[2026-10-01T19:32:22.354Z] [INFO] Applying migration: 20260527120000_add_allergen_tracking.sql +[2026-10-01T19:32:22.369Z] [INFO] Successfully applied migration: 20260527120000_add_allergen_tracking.sql +[2026-10-01T19:32:22.369Z] [INFO] Applying migration: 20260529140000_add_multimodal_support_to_chat_history.sql +[2026-10-01T19:32:22.374Z] [INFO] Successfully applied migration: 20260529140000_add_multimodal_support_to_chat_history.sql +[2026-10-01T19:32:22.374Z] [INFO] Applying migration: 20260531120000_add_nutrition_snapshot_to_meal_foods.sql +[2026-10-01T19:32:22.387Z] [INFO] Successfully applied migration: 20260531120000_add_nutrition_snapshot_to_meal_foods.sql +[2026-10-01T19:32:22.387Z] [INFO] Applying migration: 20260531120000_add_source_to_food_entries.sql +[2026-10-01T19:32:22.395Z] [INFO] Successfully applied migration: 20260531120000_add_source_to_food_entries.sql +[2026-10-01T19:32:22.395Z] [INFO] Applying migration: 20260604120000_add_checkin_mood_unique_indexes.sql +[2026-10-01T19:32:22.403Z] [INFO] Successfully applied migration: 20260604120000_add_checkin_mood_unique_indexes.sql +[2026-10-01T19:32:22.403Z] [INFO] Applying migration: 20260604120600_add_user_last_login_at.sql +[2026-10-01T19:32:22.409Z] [INFO] Successfully applied migration: 20260604120600_add_user_last_login_at.sql +[2026-10-01T19:32:22.409Z] [INFO] Applying migration: 20260606132000_add_yazio_provider_type.sql +[2026-10-01T19:32:22.417Z] [INFO] Successfully applied migration: 20260606132000_add_yazio_provider_type.sql +[2026-10-01T19:32:22.417Z] [INFO] Applying migration: 20260606164200_add_norish_provider_type.sql +[2026-10-01T19:32:22.421Z] [INFO] Successfully applied migration: 20260606164200_add_norish_provider_type.sql +[2026-10-01T19:32:22.421Z] [INFO] Applying migration: 20260607000000_add_googlehealth_provider_type.sql +[2026-10-01T19:32:22.425Z] [INFO] Successfully applied migration: 20260607000000_add_googlehealth_provider_type.sql +[2026-10-01T19:32:22.425Z] [INFO] Applying migration: 20260607114000_add_swissfood_provider_type.sql +[2026-10-01T19:32:22.431Z] [INFO] Successfully applied migration: 20260607114000_add_swissfood_provider_type.sql +[2026-10-01T19:32:22.431Z] [INFO] Applying migration: 20260610120000_add_garmin_nutrition_index.sql +[2026-10-01T19:32:22.437Z] [INFO] Successfully applied migration: 20260610120000_add_garmin_nutrition_index.sql +[2026-10-01T19:32:22.437Z] [INFO] Applying migration: 20260612120000_add_use_external_bmr_preference.sql +[2026-10-01T19:32:22.443Z] [INFO] Successfully applied migration: 20260612120000_add_use_external_bmr_preference.sql +[2026-10-01T19:32:22.443Z] [INFO] Applying migration: 20260612153000_add_goal_mode_to_user_preferences.sql +[2026-10-01T19:32:22.453Z] [INFO] Successfully applied migration: 20260612153000_add_goal_mode_to_user_preferences.sql +[2026-10-01T19:32:22.453Z] [INFO] Applying migration: 20260614000000_add_checkin_photos.sql +[2026-10-01T19:32:22.472Z] [INFO] Successfully applied migration: 20260614000000_add_checkin_photos.sql +[2026-10-01T19:32:22.473Z] [INFO] Applying migration: 20260618000000_remove_superuser_extensions.sql +[2026-10-01T19:32:22.489Z] [INFO] Successfully applied migration: 20260618000000_remove_superuser_extensions.sql +[2026-10-01T19:32:22.489Z] [INFO] Applying migration: 20260620143300_public_sharing_and_dynamic_provider_types.sql +[2026-10-01T19:32:22.511Z] [INFO] Successfully applied migration: 20260620143300_public_sharing_and_dynamic_provider_types.sql +[2026-10-01T19:32:22.511Z] [INFO] Applying migration: 20260621000000_create_user_dashboard_layouts.sql +[2026-10-01T19:32:22.522Z] [INFO] Successfully applied migration: 20260621000000_create_user_dashboard_layouts.sql +[2026-10-01T19:32:22.522Z] [INFO] Applying migration: 20260622120000_add_water_estimated_to_exercise_entries.sql +[2026-10-01T19:32:22.530Z] [INFO] Successfully applied migration: 20260622120000_add_water_estimated_to_exercise_entries.sql +[2026-10-01T19:32:22.530Z] [INFO] Applying migration: 20260623000000_add_measurement_decimal_places.sql +[2026-10-01T19:32:22.536Z] [INFO] Successfully applied migration: 20260623000000_add_measurement_decimal_places.sql +[2026-10-01T19:32:22.536Z] [INFO] Applying migration: 20260624000000_add_medication_glp1_schema.sql +[2026-10-01T19:32:22.642Z] [INFO] Successfully applied migration: 20260624000000_add_medication_glp1_schema.sql +[2026-10-01T19:32:22.642Z] [INFO] Applying migration: 20260625000000_add_chat_tool_profile_to_ai_service_settings.sql +[2026-10-01T19:32:22.647Z] [INFO] Successfully applied migration: 20260625000000_add_chat_tool_profile_to_ai_service_settings.sql +[2026-10-01T19:32:22.648Z] [INFO] Applying migration: 20260628000000_convert_exercise_durations_to_numeric.sql +[2026-10-01T19:32:22.674Z] [INFO] Successfully applied migration: 20260628000000_convert_exercise_durations_to_numeric.sql +[2026-10-01T19:32:22.674Z] [INFO] Applying migration: 20260628120000_add_vision_ai_service_pointers.sql +[2026-10-01T19:32:22.682Z] [INFO] Successfully applied migration: 20260628120000_add_vision_ai_service_pointers.sql +[2026-10-01T19:32:22.682Z] [INFO] Applying migration: 20260630000000_add_custom_nutrient_aliases.sql +[2026-10-01T19:32:22.687Z] [INFO] Successfully applied migration: 20260630000000_add_custom_nutrient_aliases.sql +[2026-10-01T19:32:22.687Z] [INFO] Applying migration: 20260630000000_add_onboarding_skipped.sql +[2026-10-01T19:32:22.692Z] [INFO] Successfully applied migration: 20260630000000_add_onboarding_skipped.sql +[2026-10-01T19:32:22.692Z] [INFO] Applying migration: 20260701000000_add_child_meal_to_meal_foods.sql +[2026-10-01T19:32:22.703Z] [INFO] Successfully applied migration: 20260701000000_add_child_meal_to_meal_foods.sql +[2026-10-01T19:32:22.703Z] [INFO] Applying migration: 20260702180000_add_cycle_tracking_schema.sql +[2026-10-01T19:32:22.821Z] [INFO] Successfully applied migration: 20260702180000_add_cycle_tracking_schema.sql +[2026-10-01T19:32:22.821Z] [INFO] Applying migration: 20260705000000_fix_googlehealth_sleep_date_anchor.sql +[2026-10-01T19:32:22.826Z] [INFO] Successfully applied migration: 20260705000000_fix_googlehealth_sleep_date_anchor.sql +[2026-10-01T19:32:22.840Z] [INFO] Ensuring permissions for role: "sparkyapp" +[2026-10-01T19:32:22.893Z] [INFO] Successfully ensured permissions for role: "sparkyapp" +[2026-10-01T19:32:22.895Z] [INFO] Permissions granted to application user. +[2026-10-01T19:32:22.896Z] [INFO] Applying all RLS policies from rls_policies.sql... +[2026-10-01T19:32:23.081Z] [INFO] Successfully applied all RLS policies. +[AUTH] Starting Better Auth mounting phase... +[AUTH] Better Auth handler successfully mounted. +[AUTH] Synced trusted SSO providers for auto-linking: [] +DEBUG: Server started and listening on port 3010 +[2026-10-01T19:32:23.166Z] [INFO] SparkyFitnessServer listening on port 3010 +View API documentation at: /api/api-docs/swagger +[2026-10-01T19:32:23.167Z] [INFO] No backup settings found, creating default entry. +[2026-10-01T19:32:23.171Z] [INFO] [CRON] Scheduled backups disabled — skipping schedule +[2026-10-01T19:32:40.046Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:33:10.179Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:33:40.305Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:34:10.437Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:34:40.556Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:35:10.679Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:35:40.791Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:36:10.922Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:36:41.051Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:37:11.184Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:37:41.343Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +[2026-10-01T19:38:11.466Z] [INFO] Incoming request: GET /api/health (Path: /api/health) diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-startlines.txt b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-startlines.txt new file mode 100644 index 00000000..1e60c8e8 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/BIRTH/server-startlines.txt @@ -0,0 +1,40 @@ +[2026-10-01T19:32:20.185Z] [INFO] Ensured schema_migrations table exists. +[2026-10-01T19:32:20.187Z] [INFO] Applied migrations: [] +[2026-10-01T19:32:20.189Z] [INFO] Applying migration: 20250703170640_InitialDB.sql +[2026-10-01T19:32:20.283Z] [INFO] Successfully applied migration: 20250703170640_InitialDB.sql +[2026-10-01T19:32:20.283Z] [INFO] Applying migration: 20250710062500_create_goal_presets_table.sql +[2026-10-01T19:32:20.306Z] [INFO] Successfully applied migration: 20250710062500_create_goal_presets_table.sql +[2026-10-01T19:32:20.306Z] [INFO] Applying migration: 20250711173824_meal_features.sql +[2026-10-01T19:32:20.359Z] [INFO] Successfully applied migration: 20250711173824_meal_features.sql +[2026-10-01T19:32:20.359Z] [INFO] Applying migration: 20250712163617_refactor_data_providers_and_add_exercise_source_id.sql +[2026-10-01T19:32:20.368Z] [INFO] Successfully applied migration: 20250712163617_refactor_data_providers_and_add_exercise_source_id.sql +[2026-10-01T19:32:20.368Z] [INFO] Applying migration: 20250713125323_create_oidc_settings_and_update_users_table.sql +[2026-10-01T19:32:20.381Z] [INFO] Successfully applied migration: 20250713125323_create_oidc_settings_and_update_users_table.sql +[2026-10-01T19:32:20.381Z] [INFO] Applying migration: 20250713135900_add_role_to_users_table.sql +[2026-10-01T19:32:20.387Z] [INFO] Successfully applied migration: 20250713135900_add_role_to_users_table.sql +[2026-10-01T19:32:20.387Z] [INFO] Applying migration: 20250713142300_add_oidc_config_fields.sql +[2026-10-01T19:32:20.395Z] [INFO] Successfully applied migration: 20250713142300_add_oidc_config_fields.sql +[2026-10-01T19:32:20.395Z] [INFO] Applying migration: 20250714000000_create_session_table.sql +[2026-10-01T19:32:20.409Z] [INFO] Successfully applied migration: 20250714000000_create_session_table.sql +[2026-10-01T19:32:20.409Z] [INFO] Applying migration: 20250714175824_add_api_key_tag_to_ai_service_settings.sql +[2026-10-01T19:32:20.414Z] [INFO] Successfully applied migration: 20250714175824_add_api_key_tag_to_ai_service_settings.sql +[2026-10-01T19:32:20.414Z] [INFO] Applying migration: 20250717190700_add_cascading_deletes.sql +[2026-10-01T19:32:20.444Z] [INFO] Successfully applied migration: 20250717190700_add_cascading_deletes.sql +[2026-10-01T19:32:20.444Z] [INFO] Applying migration: 20250717233929_add_is_quick_food_to_foods.sql +[2026-10-01T19:32:20.450Z] [INFO] Successfully applied migration: 20250717233929_add_is_quick_food_to_foods.sql +[2026-10-01T19:32:20.450Z] [INFO] Applying migration: 20250718190226_add_food_display_limit_to_user_preferences.sql +[2026-10-01T19:32:20.456Z] [INFO] Successfully applied migration: 20250718190226_add_food_display_limit_to_user_preferences.sql +[2026-10-01T19:32:20.456Z] [INFO] Applying migration: 20250719131500_add_meal_percentages.sql +[2026-10-01T19:32:20.466Z] [INFO] Successfully applied migration: 20250719131500_add_meal_percentages.sql +[2026-10-01T19:32:20.466Z] [INFO] Applying migration: 20250719215400_add_login_management_to_oidc_settings.sql +[2026-10-01T19:32:20.472Z] [INFO] Successfully applied migration: 20250719215400_add_login_management_to_oidc_settings.sql +[2026-10-01T19:32:20.472Z] [INFO] Applying migration: 20250720010000_create_user_nutrient_display_preferences.sql +[2026-10-01T19:32:20.485Z] [INFO] Successfully applied migration: 20250720010000_create_user_nutrient_display_preferences.sql +[2026-10-01T19:32:20.485Z] [INFO] Applying migration: 20250720201800_rename_food_display_limit_to_item_display_limit.sql +[2026-10-01T19:32:20.490Z] [INFO] Successfully applied migration: 20250720201800_rename_food_display_limit_to_item_display_limit.sql +[2026-10-01T19:32:20.490Z] [INFO] Applying migration: 20250720220000_add_water_tracking_features.sql +[2026-10-01T19:32:20.504Z] [INFO] Successfully applied migration: 20250720220000_add_water_tracking_features.sql +[2026-10-01T19:32:20.504Z] [INFO] Applying migration: 20250720233836_alter_water_goal_ml_to_numeric.sql +[2026-10-01T19:32:20.516Z] [INFO] Successfully applied migration: 20250720233836_alter_water_goal_ml_to_numeric.sql +[2026-10-01T19:32:20.516Z] [INFO] Applying migration: 20250721000000_add_servings_per_container_to_water_containers.sql +[2026-10-01T19:32:20.521Z] [INFO] Successfully applied migration: 20250721000000_add_servings_per_container_to_water_containers.sql diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-birth.csv b/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-birth.csv new file mode 100644 index 00000000..f46eecbb --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-birth.csv @@ -0,0 +1,507 @@ +epoch,name,id,anon,current,swap,oom_kill,limit,restarts +1790883119,sparkyfitness-db,a02c25033ce3,6344704,49041408,0,0,536870912,0 +1790883121,sparkyfitness-db,a02c25033ce3,5169152,119238656,0,0,536870912,0 +1790883123,sparkyfitness-db,a02c25033ce3,5169152,118706176,0,0,536870912,0 +1790883125,sparkyfitness-db,a02c25033ce3,5169152,118710272,0,0,536870912,0 +1790883127,sparkyfitness-db,a02c25033ce3,5169152,118710272,0,0,536870912,0 +1790883130,sparkyfitness-db,a02c25033ce3,5218304,119824384,0,0,536870912,0 +1790883130,sparkyfitness-server,d242936eb3a7,31965184,36077568,0,0,1073741824,0 +1790883132,sparkyfitness-db,a02c25033ce3,5218304,119824384,0,0,536870912,0 +1790883132,sparkyfitness-server,d242936eb3a7,124657664,133730304,0,0,1073741824,0 +1790883134,sparkyfitness-db,a02c25033ce3,5218304,119824384,0,0,536870912,0 +1790883134,sparkyfitness-server,d242936eb3a7,168407040,182247424,0,0,1073741824,0 +1790883136,sparkyfitness-db,a02c25033ce3,5230592,119836672,0,0,536870912,0 +1790883136,sparkyfitness-server,d242936eb3a7,167100416,182276096,0,0,1073741824,0 +1790883138,sparkyfitness-db,a02c25033ce3,5230592,119836672,0,0,536870912,0 +1790883138,sparkyfitness-server,d242936eb3a7,248242176,270376960,0,0,1073741824,0 +1790883140,sparkyfitness-db,a02c25033ce3,8830976,129462272,0,0,536870912,0 +1790883140,sparkyfitness-server,d242936eb3a7,343142400,370241536,0,0,1073741824,0 +1790883142,sparkyfitness-db,a02c25033ce3,14315520,182599680,0,0,536870912,0 +1790883142,sparkyfitness-server,d242936eb3a7,342450176,375562240,0,0,1073741824,0 +1790883145,sparkyfitness-db,a02c25033ce3,14589952,183816192,0,0,536870912,0 +1790883145,sparkyfitness-server,d242936eb3a7,350523392,381837312,0,0,1073741824,0 +1790883147,sparkyfitness-db,a02c25033ce3,14589952,183558144,0,0,536870912,0 +1790883147,sparkyfitness-server,d242936eb3a7,350523392,381771776,0,0,1073741824,0 +1790883149,sparkyfitness-db,a02c25033ce3,14589952,183558144,0,0,536870912,0 +1790883149,sparkyfitness-server,d242936eb3a7,350531584,381775872,0,0,1073741824,0 +1790883151,sparkyfitness-db,a02c25033ce3,14598144,184635392,0,0,536870912,0 +1790883151,sparkyfitness-server,d242936eb3a7,350531584,381779968,0,0,1073741824,0 +1790883153,sparkyfitness-db,a02c25033ce3,14598144,184053760,0,0,536870912,0 +1790883153,sparkyfitness-server,d242936eb3a7,350531584,381521920,0,0,1073741824,0 +1790883155,sparkyfitness-db,a02c25033ce3,14598144,184053760,0,0,536870912,0 +1790883155,sparkyfitness-server,d242936eb3a7,350593024,381526016,0,0,1073741824,0 +1790883157,sparkyfitness-db,a02c25033ce3,14598144,184053760,0,0,536870912,0 +1790883157,sparkyfitness-server,d242936eb3a7,350539776,382050304,0,0,1073741824,0 +1790883159,sparkyfitness-db,a02c25033ce3,14598144,184254464,0,0,536870912,0 +1790883160,sparkyfitness-server,d242936eb3a7,355352576,387665920,0,0,1073741824,0 +1790883162,sparkyfitness-db,a02c25033ce3,14598144,184254464,0,0,536870912,0 +1790883162,sparkyfitness-server,d242936eb3a7,350773248,381771776,0,0,1073741824,0 +1790883162,sparkyfitness,fa7ab69c7918,5115904,6574080,0,0,268435456,0 +1790883164,sparkyfitness-db,a02c25033ce3,14598144,184254464,0,0,536870912,0 +1790883164,sparkyfitness-server,d242936eb3a7,350777344,381775872,0,0,1073741824,0 +1790883164,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883166,sparkyfitness-db,a02c25033ce3,14598144,184516608,0,0,536870912,0 +1790883166,sparkyfitness-server,d242936eb3a7,350785536,382038016,0,0,1073741824,0 +1790883166,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883168,sparkyfitness-db,a02c25033ce3,14598144,184254464,0,0,536870912,0 +1790883168,sparkyfitness-server,d242936eb3a7,350785536,382042112,0,0,1073741824,0 +1790883168,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883170,sparkyfitness-db,a02c25033ce3,14598144,184254464,0,0,536870912,0 +1790883170,sparkyfitness-server,d242936eb3a7,350789632,381779968,0,0,1073741824,0 +1790883170,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883172,sparkyfitness-db,a02c25033ce3,14606336,187039744,0,0,536870912,0 +1790883172,sparkyfitness-server,d242936eb3a7,350810112,382291968,0,0,1073741824,0 +1790883172,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883175,sparkyfitness-db,a02c25033ce3,5283840,179376128,0,0,536870912,0 +1790883175,sparkyfitness-server,d242936eb3a7,350892032,382394368,0,0,1073741824,0 +1790883175,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883177,sparkyfitness-db,a02c25033ce3,5283840,179376128,0,0,536870912,0 +1790883177,sparkyfitness-server,d242936eb3a7,350892032,381878272,0,0,1073741824,0 +1790883177,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883179,sparkyfitness-db,a02c25033ce3,5283840,179372032,0,0,536870912,0 +1790883179,sparkyfitness-server,d242936eb3a7,350900224,382140416,0,0,1073741824,0 +1790883179,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883181,sparkyfitness-db,a02c25033ce3,5283840,179580928,0,0,536870912,0 +1790883181,sparkyfitness-server,d242936eb3a7,350908416,382660608,0,0,1073741824,0 +1790883181,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883183,sparkyfitness-db,a02c25033ce3,5283840,179834880,0,0,536870912,0 +1790883183,sparkyfitness-server,d242936eb3a7,350908416,382148608,0,0,1073741824,0 +1790883183,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883185,sparkyfitness-db,a02c25033ce3,5283840,179691520,0,0,536870912,0 +1790883185,sparkyfitness-server,d242936eb3a7,350912512,382148608,0,0,1073741824,0 +1790883185,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883188,sparkyfitness-db,a02c25033ce3,5283840,179691520,0,0,536870912,0 +1790883188,sparkyfitness-server,d242936eb3a7,350916608,381894656,0,0,1073741824,0 +1790883188,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883190,sparkyfitness-db,a02c25033ce3,5287936,179703808,0,0,536870912,0 +1790883190,sparkyfitness-server,d242936eb3a7,351002624,382926848,0,0,1073741824,0 +1790883190,sparkyfitness,fa7ab69c7918,5115904,6569984,0,0,268435456,0 +1790883192,sparkyfitness-db,a02c25033ce3,5308416,180719616,0,0,536870912,0 +1790883192,sparkyfitness-server,d242936eb3a7,351092736,382595072,0,0,1073741824,0 +1790883192,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883194,sparkyfitness-db,a02c25033ce3,5308416,180719616,0,0,536870912,0 +1790883194,sparkyfitness-server,d242936eb3a7,351092736,382074880,0,0,1073741824,0 +1790883194,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883196,sparkyfitness-db,a02c25033ce3,5308416,180719616,0,0,536870912,0 +1790883196,sparkyfitness-server,d242936eb3a7,351096832,382599168,0,0,1073741824,0 +1790883196,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883198,sparkyfitness-db,a02c25033ce3,5308416,180719616,0,0,536870912,0 +1790883198,sparkyfitness-server,d242936eb3a7,351096832,382341120,0,0,1073741824,0 +1790883198,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883200,sparkyfitness-db,a02c25033ce3,5308416,180723712,0,0,536870912,0 +1790883201,sparkyfitness-server,d242936eb3a7,351100928,382341120,0,0,1073741824,0 +1790883201,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883203,sparkyfitness-db,a02c25033ce3,5308416,180723712,0,0,536870912,0 +1790883203,sparkyfitness-server,d242936eb3a7,351105024,382537728,0,0,1073741824,0 +1790883203,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883205,sparkyfitness-db,a02c25033ce3,5308416,180781056,0,0,536870912,0 +1790883205,sparkyfitness-server,d242936eb3a7,351039488,382279680,0,0,1073741824,0 +1790883205,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883207,sparkyfitness-db,a02c25033ce3,5308416,180781056,0,0,536870912,0 +1790883207,sparkyfitness-server,d242936eb3a7,351039488,382287872,0,0,1073741824,0 +1790883207,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883209,sparkyfitness-db,a02c25033ce3,5308416,180781056,0,0,536870912,0 +1790883209,sparkyfitness-server,d242936eb3a7,351047680,382287872,0,0,1073741824,0 +1790883209,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883211,sparkyfitness-db,a02c25033ce3,5308416,180633600,0,0,536870912,0 +1790883211,sparkyfitness-server,d242936eb3a7,351051776,382283776,0,0,1073741824,0 +1790883211,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883213,sparkyfitness-db,a02c25033ce3,5308416,180633600,0,0,536870912,0 +1790883214,sparkyfitness-server,d242936eb3a7,351051776,382029824,0,0,1073741824,0 +1790883214,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883216,sparkyfitness-db,a02c25033ce3,5308416,180629504,0,0,536870912,0 +1790883216,sparkyfitness-server,d242936eb3a7,351055872,382033920,0,0,1073741824,0 +1790883216,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883218,sparkyfitness-db,a02c25033ce3,5308416,180629504,0,0,536870912,0 +1790883218,sparkyfitness-server,d242936eb3a7,351059968,382365696,0,0,1073741824,0 +1790883218,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883220,sparkyfitness-db,a02c25033ce3,5308416,180842496,0,0,536870912,0 +1790883220,sparkyfitness-server,d242936eb3a7,350973952,382717952,0,0,1073741824,0 +1790883220,sparkyfitness,fa7ab69c7918,5160960,6631424,0,0,268435456,0 +1790883222,sparkyfitness-db,a02c25033ce3,5308416,180830208,0,0,536870912,0 +1790883222,sparkyfitness-server,d242936eb3a7,350973952,381972480,0,0,1073741824,0 +1790883222,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883224,sparkyfitness-db,a02c25033ce3,5308416,181092352,0,0,536870912,0 +1790883224,sparkyfitness-server,d242936eb3a7,350973952,382238720,0,0,1073741824,0 +1790883224,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883226,sparkyfitness-db,a02c25033ce3,5308416,180830208,0,0,536870912,0 +1790883227,sparkyfitness-server,d242936eb3a7,350973952,382230528,0,0,1073741824,0 +1790883227,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883229,sparkyfitness-db,a02c25033ce3,5308416,180830208,0,0,536870912,0 +1790883229,sparkyfitness-server,d242936eb3a7,350973952,382234624,0,0,1073741824,0 +1790883229,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883231,sparkyfitness-db,a02c25033ce3,5308416,181604352,0,0,536870912,0 +1790883231,sparkyfitness-server,d242936eb3a7,350973952,381972480,0,0,1073741824,0 +1790883231,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883233,sparkyfitness-db,a02c25033ce3,5308416,180883456,0,0,536870912,0 +1790883233,sparkyfitness-server,d242936eb3a7,350973952,382754816,0,0,1073741824,0 +1790883233,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883235,sparkyfitness-db,a02c25033ce3,5308416,180879360,0,0,536870912,0 +1790883235,sparkyfitness-server,d242936eb3a7,350973952,382234624,0,0,1073741824,0 +1790883235,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883237,sparkyfitness-db,a02c25033ce3,5308416,180879360,0,0,536870912,0 +1790883237,sparkyfitness-server,d242936eb3a7,350973952,381972480,0,0,1073741824,0 +1790883237,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883239,sparkyfitness-db,a02c25033ce3,5308416,180879360,0,0,536870912,0 +1790883239,sparkyfitness-server,d242936eb3a7,350973952,382230528,0,0,1073741824,0 +1790883240,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883242,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883242,sparkyfitness-server,d242936eb3a7,350978048,381972480,0,0,1073741824,0 +1790883242,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883244,sparkyfitness-db,a02c25033ce3,5308416,181080064,0,0,536870912,0 +1790883244,sparkyfitness-server,d242936eb3a7,315281408,345255936,0,0,1073741824,0 +1790883244,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883246,sparkyfitness-db,a02c25033ce3,5308416,181080064,0,0,536870912,0 +1790883246,sparkyfitness-server,d242936eb3a7,265515008,294002688,0,0,1073741824,0 +1790883246,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883248,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883248,sparkyfitness-server,d242936eb3a7,265621504,294326272,0,0,1073741824,0 +1790883248,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883250,sparkyfitness-db,a02c25033ce3,5308416,181002240,0,0,536870912,0 +1790883250,sparkyfitness-server,d242936eb3a7,265822208,294289408,0,0,1073741824,0 +1790883250,sparkyfitness,fa7ab69c7918,5206016,6676480,0,0,268435456,0 +1790883252,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883252,sparkyfitness-server,d242936eb3a7,266002432,293814272,0,0,1073741824,0 +1790883253,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883255,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883255,sparkyfitness-server,d242936eb3a7,265592832,294862848,0,0,1073741824,0 +1790883255,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883257,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883257,sparkyfitness-server,d242936eb3a7,265592832,294014976,0,0,1073741824,0 +1790883257,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883259,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883259,sparkyfitness-server,d242936eb3a7,264359936,292581376,0,0,1073741824,0 +1790883259,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883261,sparkyfitness-db,a02c25033ce3,5308416,181112832,0,0,536870912,0 +1790883261,sparkyfitness-server,d242936eb3a7,264359936,292581376,0,0,1073741824,0 +1790883261,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883263,sparkyfitness-db,a02c25033ce3,5308416,180985856,0,0,536870912,0 +1790883263,sparkyfitness-server,d242936eb3a7,264359936,292843520,0,0,1073741824,0 +1790883263,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883265,sparkyfitness-db,a02c25033ce3,5308416,180985856,0,0,536870912,0 +1790883265,sparkyfitness-server,d242936eb3a7,264359936,292585472,0,0,1073741824,0 +1790883266,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883268,sparkyfitness-db,a02c25033ce3,5308416,180977664,0,0,536870912,0 +1790883268,sparkyfitness-server,d242936eb3a7,264359936,292839424,0,0,1073741824,0 +1790883268,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883270,sparkyfitness-db,a02c25033ce3,5308416,181399552,0,0,536870912,0 +1790883270,sparkyfitness-server,d242936eb3a7,264359936,292585472,0,0,1073741824,0 +1790883270,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883272,sparkyfitness-db,a02c25033ce3,5308416,181010432,0,0,536870912,0 +1790883272,sparkyfitness-server,d242936eb3a7,264364032,293105664,0,0,1073741824,0 +1790883272,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883274,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883274,sparkyfitness-server,d242936eb3a7,264364032,293109760,0,0,1073741824,0 +1790883274,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883276,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883276,sparkyfitness-server,d242936eb3a7,264368128,292589568,0,0,1073741824,0 +1790883276,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883278,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883279,sparkyfitness-server,d242936eb3a7,264368128,292597760,0,0,1073741824,0 +1790883279,sparkyfitness,fa7ab69c7918,5251072,6725632,0,0,268435456,0 +1790883281,sparkyfitness-db,a02c25033ce3,5308416,181112832,0,0,536870912,0 +1790883281,sparkyfitness-server,d242936eb3a7,264384512,292827136,0,0,1073741824,0 +1790883281,sparkyfitness,fa7ab69c7918,5296128,7405568,0,0,268435456,0 +1790883283,sparkyfitness-db,a02c25033ce3,5308416,181010432,0,0,536870912,0 +1790883283,sparkyfitness-server,d242936eb3a7,264388608,292614144,0,0,1073741824,0 +1790883283,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883285,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883285,sparkyfitness-server,d242936eb3a7,264388608,293134336,0,0,1073741824,0 +1790883285,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883287,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883287,sparkyfitness-server,d242936eb3a7,264392704,292880384,0,0,1073741824,0 +1790883287,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883289,sparkyfitness-db,a02c25033ce3,5308416,181006336,0,0,536870912,0 +1790883289,sparkyfitness-server,d242936eb3a7,264396800,292880384,0,0,1073741824,0 +1790883289,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883291,sparkyfitness-db,a02c25033ce3,5308416,181215232,0,0,536870912,0 +1790883291,sparkyfitness-server,d242936eb3a7,264396800,292618240,0,0,1073741824,0 +1790883292,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883294,sparkyfitness-db,a02c25033ce3,5308416,181215232,0,0,536870912,0 +1790883294,sparkyfitness-server,d242936eb3a7,264400896,292626432,0,0,1073741824,0 +1790883294,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883296,sparkyfitness-db,a02c25033ce3,5308416,181215232,0,0,536870912,0 +1790883296,sparkyfitness-server,d242936eb3a7,264400896,292630528,0,0,1073741824,0 +1790883296,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883298,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883298,sparkyfitness-server,d242936eb3a7,264404992,292888576,0,0,1073741824,0 +1790883298,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883300,sparkyfitness-db,a02c25033ce3,5308416,181391360,0,0,536870912,0 +1790883300,sparkyfitness-server,d242936eb3a7,264404992,292630528,0,0,1073741824,0 +1790883300,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883302,sparkyfitness-db,a02c25033ce3,5308416,181211136,0,0,536870912,0 +1790883302,sparkyfitness-server,d242936eb3a7,264409088,292634624,0,0,1073741824,0 +1790883302,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883304,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883304,sparkyfitness-server,d242936eb3a7,264413184,292896768,0,0,1073741824,0 +1790883305,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883307,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883307,sparkyfitness-server,d242936eb3a7,264413184,292896768,0,0,1073741824,0 +1790883307,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883309,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883309,sparkyfitness-server,d242936eb3a7,264417280,293163008,0,0,1073741824,0 +1790883309,sparkyfitness,fa7ab69c7918,5296128,6770688,0,0,268435456,0 +1790883311,sparkyfitness-db,a02c25033ce3,5308416,181211136,0,0,536870912,0 +1790883311,sparkyfitness-server,d242936eb3a7,264425472,292921344,0,0,1073741824,0 +1790883311,sparkyfitness,fa7ab69c7918,5341184,7438336,0,0,268435456,0 +1790883313,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883313,sparkyfitness-server,d242936eb3a7,264429568,293433344,0,0,1073741824,0 +1790883313,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883315,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883315,sparkyfitness-server,d242936eb3a7,264429568,292921344,0,0,1073741824,0 +1790883315,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883317,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883317,sparkyfitness-server,d242936eb3a7,264433664,292917248,0,0,1073741824,0 +1790883318,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883320,sparkyfitness-db,a02c25033ce3,5308416,181207040,0,0,536870912,0 +1790883320,sparkyfitness-server,d242936eb3a7,264433664,292655104,0,0,1073741824,0 +1790883320,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883322,sparkyfitness-db,a02c25033ce3,5308416,181473280,0,0,536870912,0 +1790883322,sparkyfitness-server,d242936eb3a7,264437760,292921344,0,0,1073741824,0 +1790883322,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883324,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883324,sparkyfitness-server,d242936eb3a7,264441856,293179392,0,0,1073741824,0 +1790883324,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883326,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883326,sparkyfitness-server,d242936eb3a7,264441856,293187584,0,0,1073741824,0 +1790883326,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883328,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883328,sparkyfitness-server,d242936eb3a7,264445952,292929536,0,0,1073741824,0 +1790883328,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883330,sparkyfitness-db,a02c25033ce3,5308416,181510144,0,0,536870912,0 +1790883330,sparkyfitness-server,d242936eb3a7,264445952,292929536,0,0,1073741824,0 +1790883330,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883333,sparkyfitness-db,a02c25033ce3,5308416,181379072,0,0,536870912,0 +1790883333,sparkyfitness-server,d242936eb3a7,264450048,292675584,0,0,1073741824,0 +1790883333,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883335,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883335,sparkyfitness-server,d242936eb3a7,264450048,292679680,0,0,1073741824,0 +1790883335,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883337,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883337,sparkyfitness-server,d242936eb3a7,264454144,292675584,0,0,1073741824,0 +1790883337,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883339,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883339,sparkyfitness-server,d242936eb3a7,264458240,292941824,0,0,1073741824,0 +1790883339,sparkyfitness,fa7ab69c7918,5341184,6815744,0,0,268435456,0 +1790883341,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883341,sparkyfitness-server,d242936eb3a7,264499200,292986880,0,0,1073741824,0 +1790883341,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883343,sparkyfitness-db,a02c25033ce3,5308416,181374976,0,0,536870912,0 +1790883343,sparkyfitness-server,d242936eb3a7,264499200,292982784,0,0,1073741824,0 +1790883343,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883346,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883346,sparkyfitness-server,d242936eb3a7,264503296,292728832,0,0,1073741824,0 +1790883346,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883348,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883348,sparkyfitness-server,d242936eb3a7,264503296,292720640,0,0,1073741824,0 +1790883348,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883350,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883350,sparkyfitness-server,d242936eb3a7,262643712,290828288,0,0,1073741824,0 +1790883350,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883352,sparkyfitness-db,a02c25033ce3,5308416,181551104,0,0,536870912,0 +1790883352,sparkyfitness-server,d242936eb3a7,255213568,283484160,0,0,1073741824,0 +1790883352,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883354,sparkyfitness-db,a02c25033ce3,5308416,181358592,0,0,536870912,0 +1790883354,sparkyfitness-server,d242936eb3a7,255225856,283435008,0,0,1073741824,0 +1790883354,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883356,sparkyfitness-db,a02c25033ce3,5308416,181358592,0,0,536870912,0 +1790883356,sparkyfitness-server,d242936eb3a7,255234048,283443200,0,0,1073741824,0 +1790883356,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883358,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883359,sparkyfitness-server,d242936eb3a7,255483904,283947008,0,0,1073741824,0 +1790883359,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883361,sparkyfitness-db,a02c25033ce3,5308416,181903360,0,0,536870912,0 +1790883361,sparkyfitness-server,d242936eb3a7,255225856,283176960,0,0,1073741824,0 +1790883361,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883363,sparkyfitness-db,a02c25033ce3,5308416,181452800,0,0,536870912,0 +1790883363,sparkyfitness-server,d242936eb3a7,255234048,283185152,0,0,1073741824,0 +1790883363,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883365,sparkyfitness-db,a02c25033ce3,5308416,181358592,0,0,536870912,0 +1790883365,sparkyfitness-server,d242936eb3a7,255242240,283459584,0,0,1073741824,0 +1790883365,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883367,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883367,sparkyfitness-server,d242936eb3a7,255250432,283205632,0,0,1073741824,0 +1790883367,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883369,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883369,sparkyfitness-server,d242936eb3a7,255258624,283217920,0,0,1073741824,0 +1790883369,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883372,sparkyfitness-db,a02c25033ce3,5308416,181448704,0,0,536870912,0 +1790883372,sparkyfitness-server,d242936eb3a7,255393792,283348992,0,0,1073741824,0 +1790883372,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883374,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883374,sparkyfitness-server,d242936eb3a7,255397888,283619328,0,0,1073741824,0 +1790883374,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883376,sparkyfitness-db,a02c25033ce3,5308416,181354496,0,0,536870912,0 +1790883376,sparkyfitness-server,d242936eb3a7,255406080,283369472,0,0,1073741824,0 +1790883376,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883378,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883378,sparkyfitness-server,d242936eb3a7,255426560,283639808,0,0,1073741824,0 +1790883378,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883380,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883380,sparkyfitness-server,d242936eb3a7,254459904,282673152,0,0,1073741824,0 +1790883380,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883382,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883382,sparkyfitness-server,d242936eb3a7,254464000,282685440,0,0,1073741824,0 +1790883382,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883385,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883385,sparkyfitness-server,d242936eb3a7,254476288,282693632,0,0,1073741824,0 +1790883385,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883387,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883387,sparkyfitness-server,d242936eb3a7,254484480,282701824,0,0,1073741824,0 +1790883387,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883389,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883389,sparkyfitness-server,d242936eb3a7,254509056,282460160,0,0,1073741824,0 +1790883389,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883391,sparkyfitness-db,a02c25033ce3,5308416,181526528,0,0,536870912,0 +1790883391,sparkyfitness-server,d242936eb3a7,254517248,282734592,0,0,1073741824,0 +1790883391,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883393,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883393,sparkyfitness-server,d242936eb3a7,254533632,282738688,0,0,1073741824,0 +1790883393,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883395,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883395,sparkyfitness-server,d242936eb3a7,254545920,282497024,0,0,1073741824,0 +1790883395,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883398,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883398,sparkyfitness-server,d242936eb3a7,254554112,282509312,0,0,1073741824,0 +1790883398,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883400,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883400,sparkyfitness-server,d242936eb3a7,254566400,282513408,0,0,1073741824,0 +1790883400,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883402,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883402,sparkyfitness-server,d242936eb3a7,254701568,282652672,0,0,1073741824,0 +1790883402,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883404,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883404,sparkyfitness-server,d242936eb3a7,254722048,282935296,0,0,1073741824,0 +1790883404,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883406,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883406,sparkyfitness-server,d242936eb3a7,254730240,282951680,0,0,1073741824,0 +1790883406,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883408,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883408,sparkyfitness-server,d242936eb3a7,254742528,282697728,0,0,1073741824,0 +1790883408,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883411,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883411,sparkyfitness-server,d242936eb3a7,254754816,282968064,0,0,1073741824,0 +1790883411,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883413,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883413,sparkyfitness-server,d242936eb3a7,254758912,282714112,0,0,1073741824,0 +1790883413,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883415,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883415,sparkyfitness-server,d242936eb3a7,254771200,283246592,0,0,1073741824,0 +1790883415,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883417,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883417,sparkyfitness-server,d242936eb3a7,254779392,283009024,0,0,1073741824,0 +1790883417,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883419,sparkyfitness-db,a02c25033ce3,5308416,181284864,0,0,536870912,0 +1790883419,sparkyfitness-server,d242936eb3a7,254791680,283013120,0,0,1073741824,0 +1790883419,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883421,sparkyfitness-db,a02c25033ce3,5369856,181366784,0,0,536870912,0 +1790883421,sparkyfitness-server,d242936eb3a7,254799872,282763264,0,0,1073741824,0 +1790883421,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883423,sparkyfitness-db,a02c25033ce3,5431296,181723136,0,0,536870912,0 +1790883424,sparkyfitness-server,d242936eb3a7,254812160,282775552,0,0,1073741824,0 +1790883424,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883426,sparkyfitness-db,a02c25033ce3,5431296,181723136,0,0,536870912,0 +1790883426,sparkyfitness-server,d242936eb3a7,254824448,283045888,0,0,1073741824,0 +1790883426,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883428,sparkyfitness-db,a02c25033ce3,5431296,181727232,0,0,536870912,0 +1790883428,sparkyfitness-server,d242936eb3a7,254853120,283066368,0,0,1073741824,0 +1790883428,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883430,sparkyfitness-db,a02c25033ce3,5431296,181727232,0,0,536870912,0 +1790883430,sparkyfitness-server,d242936eb3a7,254865408,282824704,0,0,1073741824,0 +1790883430,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883432,sparkyfitness-db,a02c25033ce3,5431296,181469184,0,0,536870912,0 +1790883432,sparkyfitness-server,d242936eb3a7,254918656,283136000,0,0,1073741824,0 +1790883432,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883434,sparkyfitness-db,a02c25033ce3,5431296,181997568,0,0,536870912,0 +1790883434,sparkyfitness-server,d242936eb3a7,254926848,282894336,0,0,1073741824,0 +1790883434,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883436,sparkyfitness-db,a02c25033ce3,5431296,181997568,0,0,536870912,0 +1790883437,sparkyfitness-server,d242936eb3a7,254943232,283156480,0,0,1073741824,0 +1790883437,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883439,sparkyfitness-db,a02c25033ce3,5431296,181743616,0,0,536870912,0 +1790883439,sparkyfitness-server,d242936eb3a7,254955520,282820608,0,0,1073741824,0 +1790883439,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883441,sparkyfitness-db,a02c25033ce3,5431296,181485568,0,0,536870912,0 +1790883441,sparkyfitness-server,d242936eb3a7,254963712,283078656,0,0,1073741824,0 +1790883441,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883443,sparkyfitness-db,a02c25033ce3,5431296,182333440,0,0,536870912,0 +1790883443,sparkyfitness-server,d242936eb3a7,254976000,282836992,0,0,1073741824,0 +1790883443,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883445,sparkyfitness-db,a02c25033ce3,5431296,182595584,0,0,536870912,0 +1790883445,sparkyfitness-server,d242936eb3a7,254988288,283115520,0,0,1073741824,0 +1790883445,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883447,sparkyfitness-db,a02c25033ce3,5435392,182599680,0,0,536870912,0 +1790883447,sparkyfitness-server,d242936eb3a7,254996480,283123712,0,0,1073741824,0 +1790883447,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883449,sparkyfitness-db,a02c25033ce3,5435392,182349824,0,0,536870912,0 +1790883450,sparkyfitness-server,d242936eb3a7,255008768,282873856,0,0,1073741824,0 +1790883450,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883452,sparkyfitness-db,a02c25033ce3,5435392,182714368,0,0,536870912,0 +1790883452,sparkyfitness-server,d242936eb3a7,255016960,282886144,0,0,1073741824,0 +1790883452,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883454,sparkyfitness-db,a02c25033ce3,5435392,182628352,0,0,536870912,0 +1790883454,sparkyfitness-server,d242936eb3a7,255033344,282902528,0,0,1073741824,0 +1790883454,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883456,sparkyfitness-db,a02c25033ce3,5435392,182366208,0,0,536870912,0 +1790883456,sparkyfitness-server,d242936eb3a7,255041536,282914816,0,0,1073741824,0 +1790883456,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883458,sparkyfitness-db,a02c25033ce3,5435392,182370304,0,0,536870912,0 +1790883458,sparkyfitness-server,d242936eb3a7,255057920,283193344,0,0,1073741824,0 +1790883458,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883460,sparkyfitness-db,a02c25033ce3,5435392,182632448,0,0,536870912,0 +1790883460,sparkyfitness-server,d242936eb3a7,255066112,282939392,0,0,1073741824,0 +1790883460,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883462,sparkyfitness-db,a02c25033ce3,5435392,182370304,0,0,536870912,0 +1790883463,sparkyfitness-server,d242936eb3a7,255131648,283009024,0,0,1073741824,0 +1790883463,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883465,sparkyfitness-db,a02c25033ce3,5435392,182894592,0,0,536870912,0 +1790883465,sparkyfitness-server,d242936eb3a7,255143936,283529216,0,0,1073741824,0 +1790883465,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883467,sparkyfitness-db,a02c25033ce3,5447680,182386688,0,0,536870912,0 +1790883467,sparkyfitness-server,d242936eb3a7,255152128,283029504,0,0,1073741824,0 +1790883467,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883469,sparkyfitness-db,a02c25033ce3,5447680,182386688,0,0,536870912,0 +1790883469,sparkyfitness-server,d242936eb3a7,255172608,283291648,0,0,1073741824,0 +1790883469,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883471,sparkyfitness-db,a02c25033ce3,5451776,182595584,0,0,536870912,0 +1790883471,sparkyfitness-server,d242936eb3a7,255188992,283566080,0,0,1073741824,0 +1790883471,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883473,sparkyfitness-db,a02c25033ce3,5451776,182755328,0,0,536870912,0 +1790883473,sparkyfitness-server,d242936eb3a7,255197184,283578368,0,0,1073741824,0 +1790883473,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883475,sparkyfitness-db,a02c25033ce3,5451776,182665216,0,0,536870912,0 +1790883475,sparkyfitness-server,d242936eb3a7,255205376,284110848,0,0,1073741824,0 +1790883476,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883478,sparkyfitness-db,a02c25033ce3,5451776,182665216,0,0,536870912,0 +1790883478,sparkyfitness-server,d242936eb3a7,255221760,283340800,0,0,1073741824,0 +1790883478,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883480,sparkyfitness-db,a02c25033ce3,5451776,182407168,0,0,536870912,0 +1790883480,sparkyfitness-server,d242936eb3a7,255234048,283099136,0,0,1073741824,0 +1790883480,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883482,sparkyfitness-db,a02c25033ce3,5451776,182636544,0,0,536870912,0 +1790883482,sparkyfitness-server,d242936eb3a7,255242240,283107328,0,0,1073741824,0 +1790883482,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883484,sparkyfitness-db,a02c25033ce3,5451776,182935552,0,0,536870912,0 +1790883484,sparkyfitness-server,d242936eb3a7,255254528,283639808,0,0,1073741824,0 +1790883484,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883486,sparkyfitness-db,a02c25033ce3,5455872,183197696,0,0,536870912,0 +1790883486,sparkyfitness-server,d242936eb3a7,255262720,283906048,0,0,1073741824,0 +1790883486,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883488,sparkyfitness-db,a02c25033ce3,5455872,182947840,0,0,536870912,0 +1790883488,sparkyfitness-server,d242936eb3a7,255275008,283144192,0,0,1073741824,0 +1790883489,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883491,sparkyfitness-db,a02c25033ce3,5455872,182435840,0,0,536870912,0 +1790883491,sparkyfitness-server,d242936eb3a7,255283200,283152384,0,0,1073741824,0 +1790883491,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883493,sparkyfitness-db,a02c25033ce3,5550080,182427648,0,0,536870912,0 +1790883493,sparkyfitness-server,d242936eb3a7,255332352,283197440,0,0,1073741824,0 +1790883493,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883495,sparkyfitness-db,a02c25033ce3,5550080,182427648,0,0,536870912,0 +1790883495,sparkyfitness-server,d242936eb3a7,255344640,283471872,0,0,1073741824,0 +1790883495,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883497,sparkyfitness-db,a02c25033ce3,5550080,182427648,0,0,536870912,0 +1790883497,sparkyfitness-server,d242936eb3a7,255352832,283738112,0,0,1073741824,0 +1790883497,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 +1790883499,sparkyfitness-db,a02c25033ce3,5550080,182427648,0,0,536870912,0 +1790883499,sparkyfitness-server,d242936eb3a7,255365120,284049408,0,0,1073741824,0 +1790883499,sparkyfitness,fa7ab69c7918,5386240,6864896,0,0,268435456,0 diff --git a/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-summary.txt b/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-summary.txt new file mode 100644 index 00000000..547a2fe9 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/birth/mem-summary.txt @@ -0,0 +1,4 @@ +5.1 from birth at the pin (postgres:18-alpine + v0.17.3 x2), bench 9401 swap 0, 2 s cgroup sampler started before up -d; idle 300 s after healthy +sparkyfitness-db a02c25033ce3 19:31:59-19:38:19 n= 177 peak anon 13.9 MiB = 2.7 % of 512 MiB; peak current 178.4 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness-server d242936eb3a7 19:32:10-19:38:19 n= 172 peak anon 338.9 MiB = 33.1 % of 1024 MiB; peak current 369.7 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness fa7ab69c7918 19:32:42-19:38:19 n= 157 peak anon 5.1 MiB = 2.0 % of 256 MiB; peak current 7.1 MiB; oom_kill 0; restarts 0; swap.current ['0'] diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/MV-sparkyfitness.log b/documentation/audits/visitors-2026-10-01/C/bench/move/MV-sparkyfitness.log new file mode 100644 index 00000000..9ca9702f --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/MV-sparkyfitness.log @@ -0,0 +1,147 @@ +[19:40:25] scratch drive folders cleared before FROM (R-656): none existed +[19:40:25] MV-sparkyfitness: deploying sparkyfitness at FROM {'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.2', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.2'} +[19:41:39] FROM settled=True in 31.1s :: {"sparkyfitness": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-db": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}} +[19:41:39] fixture: the BOX walk's own (Sparkyfitness), through upgrade_boxport +[19:41:39] sparkyfitness: sign-up http=200 +[19:41:39] sparkyfitness: check-in http=200 +[19:41:39] sparkyfitness: seeded user drillc52c98 with a weight of 78.96 on 2026-09-01 +[19:41:40] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:41:40] C1 (seed reads back BEFORE): True +[19:41:40] MV-sparkyfitness: swapping to TO {'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.3', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.3'} +[19:42:12] TO up -d rc=0 +[19:42:43] TO settled=True in 31.1s :: {"sparkyfitness": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-db": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}} +[19:42:44] engine state sparkyfitness-db: 18 +[19:42:44] migration lines observed: 6 +[19:42:44] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:42:44] RESULT (seed reads back AFTER): True +[19:42:45] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:80 +[19:43:00] + 15s sparkyfitness=8M/256M peak=8M kills=0 rs=0 sparkyfitness-db=159M/512M peak=163M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=387M kills=0 rs=0 reqs=304 +[19:43:15] + 30s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=160M/512M peak=163M kills=0 rs=0 sparkyfitness-server=415M/1024M peak=426M kills=0 rs=0 reqs=604 +[19:43:30] + 46s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=159M/512M peak=163M kills=0 rs=0 sparkyfitness-server=415M/1024M peak=426M kills=0 rs=0 reqs=904 +[19:43:45] + 61s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=164M/512M peak=166M kills=0 rs=0 sparkyfitness-server=387M/1024M peak=426M kills=0 rs=0 reqs=1208 +[19:44:00] + 76s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=182M/512M peak=185M kills=0 rs=0 sparkyfitness-server=384M/1024M peak=426M kills=0 rs=0 reqs=1508 +[19:44:16] + 91s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=206M/512M peak=207M kills=0 rs=0 sparkyfitness-server=388M/1024M peak=426M kills=0 rs=0 reqs=1812 +[19:44:31] + 106s sparkyfitness=8M/256M peak=10M kills=0 rs=0 sparkyfitness-db=227M/512M peak=231M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=2112 +[19:44:46] + 121s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=232M/512M peak=236M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=2412 +[19:45:01] + 136s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=214M/512M peak=236M kills=0 rs=0 sparkyfitness-server=390M/1024M peak=426M kills=0 rs=0 reqs=2716 +[19:45:16] + 152s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=216M/512M peak=236M kills=0 rs=0 sparkyfitness-server=391M/1024M peak=426M kills=0 rs=0 reqs=3016 +[19:45:31] + 167s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=219M/512M peak=236M kills=0 rs=0 sparkyfitness-server=387M/1024M peak=426M kills=0 rs=0 reqs=3320 +[19:45:47] + 182s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=235M/512M peak=238M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=3620 +[19:46:02] + 197s sparkyfitness=8M/256M peak=11M kills=0 rs=0 sparkyfitness-db=234M/512M peak=238M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=3920 +[19:46:17] + 212s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=220M/512M peak=243M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=4224 +[19:46:32] + 227s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=226M/512M peak=243M kills=0 rs=0 sparkyfitness-server=403M/1024M peak=426M kills=0 rs=0 reqs=4524 +[19:46:47] + 243s sparkyfitness=8M/256M peak=11M kills=0 rs=0 sparkyfitness-db=240M/512M peak=243M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=4827 +[19:47:02] + 258s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=242M/512M peak=246M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=5128 +[19:47:18] + 273s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=250M/512M peak=255M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=5429 +[19:47:33] + 288s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=249M/512M peak=258M kills=0 rs=0 sparkyfitness-server=393M/1024M peak=426M kills=0 rs=0 reqs=5732 +[19:47:48] + 303s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=247M/512M peak=258M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=6036 +[19:48:03] + 319s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=241M/512M peak=258M kills=0 rs=0 sparkyfitness-server=400M/1024M peak=426M kills=0 rs=0 reqs=6336 +[19:48:18] + 334s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=340M/512M peak=349M kills=0 rs=0 sparkyfitness-server=401M/1024M peak=426M kills=0 rs=0 reqs=6640 +[19:48:34] + 349s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=326M/512M peak=349M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=6941 +[19:48:49] + 364s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=348M/512M peak=352M kills=0 rs=0 sparkyfitness-server=398M/1024M peak=426M kills=0 rs=0 reqs=7244 +[19:49:04] + 380s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=348M/512M peak=354M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=7546 +[19:49:19] + 395s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=349M/512M peak=358M kills=0 rs=0 sparkyfitness-server=402M/1024M peak=426M kills=0 rs=0 reqs=7848 +[19:49:35] + 410s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=356M/512M peak=359M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=8154 +[19:49:50] + 425s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=358M/512M peak=363M kills=0 rs=0 sparkyfitness-server=400M/1024M peak=426M kills=0 rs=0 reqs=8454 +[19:50:05] + 440s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=354M/512M peak=363M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=8756 +[19:50:20] + 456s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=359M/512M peak=364M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=9058 +[19:50:36] + 471s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=385M/512M peak=391M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=9360 +[19:50:51] + 486s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=404M/512M peak=412M kills=0 rs=0 sparkyfitness-server=411M/1024M peak=426M kills=0 rs=0 reqs=9660 +[19:51:06] + 501s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=351M/512M peak=412M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=9964 +[19:51:21] + 516s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=351M/512M peak=412M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=10267 +[19:51:36] + 532s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=334M/512M peak=412M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=10568 +[19:51:52] + 547s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=344M/512M peak=412M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=10870 +[19:52:07] + 562s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=339M/512M peak=412M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=11172 +[19:52:22] + 577s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=162M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=11472 +[19:52:37] + 592s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=161M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=11774 +[19:52:52] + 608s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=133M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=12076 +[19:52:53] memory watch: killed=False tight=[] requests=12076 codes={'200': 12076} +[19:52:53] MV-sparkyfitness: ABORT — putting the FROM images back +[19:53:57] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:53:57] ABORT: app came back in 31.3s; data present=True +{ + "harness_version": 4, + "edge": "MV-sparkyfitness", + "app": "sparkyfitness", + "note": "night 2026-09-23 within-a-major move: sparkyfitness-server=codewithcj/sparkyfitness_server:v0.17.3, sparkyfitness-frontend=codewithcj/sparkyfitness:v0.17.3", + "from": { + "sparkyfitness-db": "postgres:18-alpine", + "sparkyfitness-server": "codewithcj/sparkyfitness_server:v0.17.2", + "sparkyfitness-frontend": "codewithcj/sparkyfitness:v0.17.2" + }, + "to": { + "sparkyfitness-db": "postgres:18-alpine", + "sparkyfitness-server": "codewithcj/sparkyfitness_server:v0.17.3", + "sparkyfitness-frontend": "codewithcj/sparkyfitness:v0.17.3" + }, + "verdict": "proven", + "seed_read_before": true, + "seed_read_after": true, + "healthy_after": true, + "migration_observed": "\u001b[2Ksparkyfitness-server | [2026-10-01T19:41:51.644Z] [INFO] Ensured schema_migrations table exists.", + "abort": "starts-and-serves", + "abort_detail": null, + "engine_state_after": { + "sparkyfitness-db": { + "image": "postgres:18-alpine", + "probe": "datadir major version", + "answer": "18", + "probe_rc": 0 + } + }, + "memory": { + "soak_s": 607.9, + "requested_s": 600, + "requests": 12076, + "codes": { + "200": 12076 + }, + "first_kill": null, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "peak": 13131776, + "peak_pct": 0.049, + "anon_peak_sampled": 6139904, + "anon_peak_pct": 0.023, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "peak": 432951296, + "peak_pct": 0.806, + "anon_peak_sampled": 283111424, + "anon_peak_pct": 0.527, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "peak": 447664128, + "peak_pct": 0.417, + "anon_peak_sampled": 404697088, + "anon_peak_pct": 0.377, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + } + }, + "unmeasured": [], + "load": "reached" + }, + "marks": [], + "bench_overrides": null, + "duration_s": 31.1, + "measured_at": "2026-10-01T19:53:57Z", + "evidence": "evidence/MV-sparkyfitness", + "scratch_cleared": [], + "files_changed": [], + "files_changed_detail": [], + "total_s": 811.7 +} diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/abort-states.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/abort-states.json new file mode 100644 index 00000000..1f30e9d3 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/abort-states.json @@ -0,0 +1,20 @@ +{ + "sparkyfitness": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + }, + "sparkyfitness-db": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + }, + "sparkyfitness-server": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + } +} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst-sparkyfitness.log b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst-sparkyfitness.log new file mode 100644 index 00000000..12a79f38 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst-sparkyfitness.log @@ -0,0 +1,23 @@ +sign-up 200 +sign-in 200 cookie True ++ 30s {"create_food": {"201": 378}, "search": {"200": 376}, "add_entry": {"201": 376}, "read_day": {"200": 376}, "export_csv": {"200": 36}} ++ 60s {"create_food": {"201": 709}, "search": {"200": 709}, "add_entry": {"201": 709}, "read_day": {"200": 709}, "export_csv": {"200": 68}} ++ 90s {"create_food": {"201": 1004}, "search": {"200": 1004}, "add_entry": {"201": 1004}, "read_day": {"200": 1003}, "export_csv": {"200": 99}} ++ 120s {"create_food": {"201": 1264}, "search": {"200": 1264}, "add_entry": {"201": 1264}, "read_day": {"200": 1262}, "export_csv": {"200": 124}} ++ 150s {"create_food": {"201": 1509}, "search": {"200": 1509}, "add_entry": {"201": 1509}, "read_day": {"200": 1508}, "export_csv": {"200": 148}} ++ 180s {"create_food": {"201": 1731}, "search": {"200": 1731}, "add_entry": {"201": 1730}, "read_day": {"200": 1729}, "export_csv": {"200": 172}} ++ 210s {"create_food": {"201": 1938}, "search": {"200": 1937}, "add_entry": {"201": 1937}, "read_day": {"200": 1935}, "export_csv": {"200": 192}} ++ 240s {"create_food": {"201": 2128}, "search": {"200": 2126}, "add_entry": {"201": 2126}, "read_day": {"200": 2125}, "export_csv": {"200": 212}} ++ 270s {"create_food": {"201": 2312}, "search": {"200": 2311}, "add_entry": {"201": 2311}, "read_day": {"200": 2309}, "export_csv": {"200": 228}} ++ 300s {"create_food": {"201": 2482}, "search": {"200": 2481}, "add_entry": {"201": 2481}, "read_day": {"200": 2481}, "export_csv": {"200": 247}} ++ 330s {"create_food": {"201": 2616}, "search": {"200": 2614}, "add_entry": {"201": 2614}, "read_day": {"200": 2614}, "export_csv": {"200": 260}} ++ 360s {"create_food": {"201": 2723}, "search": {"200": 2722}, "add_entry": {"201": 2722}, "read_day": {"200": 2720}, "export_csv": {"200": 270}} ++ 390s {"create_food": {"201": 2825}, "search": {"200": 2823}, "add_entry": {"201": 2823}, "read_day": {"200": 2821}, "export_csv": {"200": 280}} ++ 420s {"create_food": {"201": 2905}, "search": {"200": 2903}, "add_entry": {"201": 2903}, "read_day": {"200": 2902}, "export_csv": {"200": 288}} ++ 450s {"create_food": {"201": 2999}, "search": {"200": 2998}, "add_entry": {"201": 2998}, "read_day": {"200": 2997}, "export_csv": {"200": 296}} ++ 480s {"create_food": {"201": 3088}, "search": {"200": 3086}, "add_entry": {"201": 3086}, "read_day": {"200": 3086}, "export_csv": {"200": 307}} ++ 510s {"create_food": {"201": 3178}, "search": {"200": 3174}, "add_entry": {"201": 3174}, "read_day": {"200": 3174}, "export_csv": {"200": 316}} ++ 540s {"create_food": {"201": 3269}, "search": {"200": 3267}, "add_entry": {"201": 3267}, "read_day": {"200": 3266}, "export_csv": {"200": 325}} ++ 570s {"create_food": {"201": 3269}, "search": {"200": 3269}, "add_entry": {"201": 3269}, "read_day": {"200": 3269}, "export_csv": {"200": 326}} +diary entries for today at the end: 3269 http 200 +FINAL {"create_food": {"201": 3269}, "search": {"200": 3269}, "add_entry": {"201": 3269}, "read_day": {"200": 3269}, "export_csv": {"200": 326}} diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst.py b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst.py new file mode 100644 index 00000000..11b86a8d --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/burst.py @@ -0,0 +1,63 @@ +"""burst.py — checklist 5.2's "heaviest ordinary act" for SparkyFitness on the bench: a household logging its +food diary at once. One account signed up through the app's own better-auth route (sign-up is open on the bench, +as on a box before the first admin), then WORKERS callers for DUR seconds, each looping: create a custom food +(+ its default variant), search foods by name, add it to today's diary at a meal, read the day's diary back, and +every 10th turn export the whole diary as CSV. Everything goes through the frontend (nginx :80 -> server), the path +traefik uses. Prints counts and status codes only — never the password or the cookie.""" +import json, os, random, secrets, subprocess, threading, time, urllib.request, urllib.error, re, http.cookiejar +DUR = int(os.environ.get("DUR", "540")); WORKERS = int(os.environ.get("WORKERS", "4")); PAUSE = float(os.environ.get("PAUSE", "0.2")) +ip = subprocess.run(["docker", "inspect", "-f", "{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}", "sparkyfitness"], + capture_output=True, text=True).stdout.split()[0] +HOST = "sparky.gate.invalid"; BASE = f"http://{ip}:80" +def req(method, path, body=None, cookie=None, raw=False): + h = {"Host": HOST, "Origin": f"https://{HOST}", "X-Forwarded-Proto": "https", "Content-Type": "application/json"} + if cookie: h["Cookie"] = cookie + r = urllib.request.Request(BASE + path, data=json.dumps(body).encode() if body is not None else None, headers=h, method=method) + try: + with urllib.request.urlopen(r, timeout=60) as resp: + data = resp.read(); return resp.status, data if raw else (json.loads(data) if data[:1] in (b"{", b"[") else data), resp.headers + except urllib.error.HTTPError as e: + return e.code, e.read()[:300], e.headers + except Exception as e: + return "err", str(e)[:200], {} +email = "burst" + secrets.token_hex(3) + "@gate.invalid"; pw = "Burst-" + secrets.token_hex(10) +c, b, _ = req("POST", "/api/auth/sign-up/email", {"email": email, "password": pw, "name": "Burst"}) +print("sign-up", c, flush=True) +c, b, hd = req("POST", "/api/auth/sign-in/email", {"email": email, "password": pw}) +ck = "; ".join(x.split(";")[0] for x in (hd.get_all("Set-Cookie") or [])) if hd else "" +print("sign-in", c, "cookie", bool(ck), flush=True) +if c != 200 or not ck: raise SystemExit(2) +stats = {}; lock = threading.Lock(); stop = time.time() + DUR; today = time.strftime("%Y-%m-%d") +def count(k, code): + with lock: stats.setdefault(k, {}); stats[k][str(code)] = stats[k].get(str(code), 0) + 1 +WORDS = ["alma", "korte", "kenyer", "tejfol", "csirke", "rizs", "paprika", "turo", "zab", "bab", "lencse", "sajt"] +def worker(i): + n = 0 + while time.time() < stop: + n += 1; w = random.choice(WORDS) + c, food, _ = req("POST", "/api/foods", {"name": f"{w} {i}-{n}", "brand": "bench", "is_custom": True, "serving_size": 100, + "serving_unit": "g", "calories": random.randint(20, 600), "protein": 5, "carbs": 20, "fat": 3}, ck) + count("create_food", c) + c, res, _ = req("GET", f"/api/foods/search?name={w}&broadMatch=true&checkCustom=true", None, ck); count("search", c) + fid = food.get("id") if isinstance(food, dict) else None + vid = (food.get("default_variant") or {}).get("id") if isinstance(food, dict) else None + if fid and not vid: + c2, vs, _ = req("GET", f"/api/foods/food-variants?food_id={fid}", None, ck) + if isinstance(vs, list) and vs: vid = vs[0].get("id") + if fid: + c, e, _ = req("POST", "/api/food-entries", {"food_id": fid, "variant_id": vid, "meal_type": random.choice(["breakfast", "lunch", "dinner", "snacks"]), + "quantity": random.randint(50, 300), "unit": "g", "entry_date": today}, ck) + count("add_entry", c) + if c not in (200, 201) and stats["add_entry"].get(str(c), 0) <= 2: print("add_entry", c, e if isinstance(e, bytes) else "", flush=True) + c, d, _ = req("GET", f"/api/food-entries/by-date/{today}", None, ck); count("read_day", c) + if n % 10 == 0: + c, d, _ = req("GET", "/api/food-entries/export/csv", None, ck, raw=True); count("export_csv", c) + time.sleep(PAUSE) +threads = [threading.Thread(target=worker, args=(i,), daemon=True) for i in range(WORKERS)] +t0 = time.time(); [t.start() for t in threads] +while any(t.is_alive() for t in threads): + time.sleep(30) + with lock: print(f"+{time.time()-t0:4.0f}s", json.dumps(stats), flush=True) +c, d, _ = req("GET", f"/api/food-entries/by-date/{today}", None, ck) +print("diary entries for today at the end:", len(d) if isinstance(d, list) else d, "http", c, flush=True) +print("FINAL", json.dumps(stats), flush=True) diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/compose-final.log b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/compose-final.log new file mode 100644 index 00000000..330ea66e --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/compose-final.log @@ -0,0 +1,237 @@ +sparkyfitness-db | The files belonging to this database system will be owned by user "postgres". +sparkyfitness-db | This user must also own the server process. +sparkyfitness-db | +sparkyfitness-db | The database cluster will be initialized with locale "en_US.utf8". +sparkyfitness-db | The default database encoding has accordingly been set to "UTF8". +sparkyfitness-db | The default text search configuration will be set to "english". +sparkyfitness-db | +sparkyfitness-db | Data page checksums are enabled. +sparkyfitness-db | +sparkyfitness-db | fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok +sparkyfitness-db | creating subdirectories ... ok +sparkyfitness-db | selecting dynamic shared memory implementation ... posix +sparkyfitness-db | selecting default "max_connections" ... 100 +sparkyfitness-db | selecting default "shared_buffers" ... 128MB +sparkyfitness-db | selecting default time zone ... Europe/Budapest +sparkyfitness-db | creating configuration files ... ok +sparkyfitness-db | running bootstrap script ... ok +sparkyfitness-db | sh: locale: not found +sparkyfitness-db | 2026-10-01 21:40:26.926 CEST [36] WARNING: no usable system locales were found +sparkyfitness-db | performing post-bootstrap initialization ... ok +sparkyfitness-db | syncing data to disk ... ok +sparkyfitness-db | +sparkyfitness-db | +sparkyfitness-db | Success. You can now start the database server using: +sparkyfitness-db | +sparkyfitness-db | pg_ctl -D /var/lib/postgresql/data/pgdata -l logfile start +sparkyfitness-db | initdb: warning: enabling "trust" authentication for local connections +sparkyfitness-db | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. +sparkyfitness-db | +sparkyfitness-db | waiting for server to start....2026-10-01 21:40:27.841 CEST [42] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit +sparkyfitness-db | 2026-10-01 21:40:27.848 CEST [42] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +sparkyfitness-db | 2026-10-01 21:40:27.861 CEST [48] LOG: database system was shut down at 2026-10-01 21:40:27 CEST +sparkyfitness-db | 2026-10-01 21:40:27.870 CEST [42] LOG: database system is ready to accept connections +sparkyfitness-db | done +sparkyfitness-db | server started +sparkyfitness-db | CREATE DATABASE +sparkyfitness-db | +sparkyfitness-db | +sparkyfitness-db | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* +sparkyfitness-db | +sparkyfitness-db | waiting for server to shut down....2026-10-01 21:40:28.062 CEST [42] LOG: received fast shutdown request +sparkyfitness-db | 2026-10-01 21:40:28.074 CEST [42] LOG: aborting any active transactions +sparkyfitness-db | 2026-10-01 21:40:28.077 CEST [42] LOG: background worker "logical replication launcher" (PID 51) exited with exit code 1 +sparkyfitness-db | 2026-10-01 21:40:28.078 CEST [46] LOG: shutting down +sparkyfitness-db | 2026-10-01 21:40:28.081 CEST [46] LOG: checkpoint starting: shutdown immediate +sparkyfitness-server | [dotenv@17.3.1] injecting env (0) from ../.env -- tip: ⚡️ secrets for agents: https://dotenvx.com/as2 +sparkyfitness-server | [Secrets] Checking for secret files to load... +sparkyfitness-server | [Secrets] No secrets loaded from files. +sparkyfitness-server | [2026-10-01T19:52:55.763Z] [INFO] Environment variable pre-flight checks passed successfully. +sparkyfitness-server | Starting server... +sparkyfitness-server | [2026-10-01T19:53:06.129Z] [INFO] [withingsService] Withings data source configured to: withings +sparkyfitness-server | [2026-10-01T19:53:06.130Z] [INFO] [fitbitService] Fitbit data source configured to: fitbit +sparkyfitness-server | [2026-10-01T19:53:06.131Z] [INFO] [googleHealthService] Google Health data source: googlehealth +sparkyfitness-server | [2026-10-01T19:53:06.132Z] [INFO] [polarService] Polar data source configured to: polar +sparkyfitness-server | [2026-10-01T19:53:06.133Z] [INFO] [stravaService] Strava data source configured to: strava +sparkyfitness-server | [2026-10-01T19:53:06.133Z] [INFO] [hevyService] Hevy data source configured to: hevy +sparkyfitness-server | [2026-10-01T19:53:06.971Z] [INFO] UserProfileRoutes UPLOADS_DIR: /app/SparkyFitnessServer/uploads/avatars +sparkyfitness-server | DEBUG: SPARKY_FITNESS_FRONTEND_URL is: https://sparky.gate.invalid +sparkyfitness | Starting SparkyFitness Frontend as root with environment variables: +sparkyfitness | SPARKY_FITNESS_SERVER_HOST=sparkyfitness-server +sparkyfitness | SPARKY_FITNESS_SERVER_PORT=3010 +sparkyfitness | NGINX_RATE_LIMIT=5r/s +sparkyfitness | NGINX_LISTEN_PORT=80 +sparkyfitness | NGINX_ACCESS_LOG=/var/log/nginx/access.log +sparkyfitness | NGINX_ERROR_LOG=/var/log/nginx/error.log +sparkyfitness | NGINX_DUMP_CONFIG=false +sparkyfitness | SPARKY_FITNESS_FRONTEND_URL=https://sparky.gate.invalid +sparkyfitness | Generating nginx configuration from template... +sparkyfitness | Testing nginx configuration substitution... +sparkyfitness | Validating nginx configuration syntax... +sparkyfitness | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +sparkyfitness | nginx: configuration file /etc/nginx/nginx.conf test is successful +sparkyfitness | Configuration validated successfully. Starting nginx... +sparkyfitness | Backend will be proxied to: sparkyfitness-server:3010 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: using the "epoll" event method +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: nginx/1.29.3 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: built by gcc 14.2.0 (Alpine 14.2.0) +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: OS: Linux 7.0.2-6-pve +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 524288:524288 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker processes +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 11 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 12 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 13 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 14 +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 15 +sparkyfitness-server | [SECURITY] Private network CORS is ENABLED. Ensure this is only on self-hosted/private networks. +sparkyfitness | 2026/10/01 21:53:25 [notice] 1#1: start worker process 16 +sparkyfitness-server | SparkyFitnessServer UPLOADS_BASE_DIR: /app/SparkyFitnessServer/uploads +sparkyfitness-server | [2026-10-01T19:53:07.152Z] [INFO] Ensured temporary upload directory exists: /app/SparkyFitnessServer/temp_uploads/ +sparkyfitness-server | [2026-10-01T19:53:07.182Z] [INFO] Role "sparkyapp" already exists. +sparkyfitness-server | [2026-10-01T19:53:07.184Z] [INFO] Ensured schema_migrations table exists. +sparkyfitness-server | [2026-10-01T19:53:07.191Z] [INFO] Applied migrations: [ +sparkyfitness-server | '20250703170640_InitialDB.sql', +sparkyfitness-server | '20250710062500_create_goal_presets_table.sql', +sparkyfitness-server | '20250711173824_meal_features.sql', +sparkyfitness-server | '20250712163617_refactor_data_providers_and_add_exercise_source_id.sql', +sparkyfitness-server | '20250713125323_create_oidc_settings_and_update_users_table.sql', +sparkyfitness-server | '20250713135900_add_role_to_users_table.sql', +sparkyfitness-server | '20250713142300_add_oidc_config_fields.sql', +sparkyfitness | 127.0.0.1 - - [01/Oct/2026:21:53:55 +0200] "GET / HTTP/1.1" 200 2666 "-" "Wget" +sparkyfitness | 172.18.0.1 - - [01/Oct/2026:21:53:56 +0200] "GET / HTTP/1.1" 200 2666 "-" "curl/8.14.1" +sparkyfitness | 172.18.0.1 - - [01/Oct/2026:21:53:57 +0200] "POST /api/auth/sign-in/email HTTP/1.1" 401 85 "-" "curl/8.14.1" +sparkyfitness | 172.18.0.1 - - [01/Oct/2026:21:53:57 +0200] "POST /api/auth/sign-in/email HTTP/1.1" 200 432 "-" "curl/8.14.1" +sparkyfitness | 172.18.0.1 - - [01/Oct/2026:21:53:57 +0200] "GET /api/measurements/check-in/1999-01-01 HTTP/1.1" 200 2 "-" "curl/8.14.1" +sparkyfitness | 172.18.0.1 - - [01/Oct/2026:21:53:57 +0200] "GET /api/measurements/check-in/2026-09-01 HTTP/1.1" 200 426 "-" "curl/8.14.1" +sparkyfitness-db | 2026-10-01 21:40:28.197 CEST [46] LOG: checkpoint complete: wrote 943 buffers (5.8%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.031 s, sync=0.072 s, total=0.119 s; sync files=303, longest=0.038 s, average=0.001 s; distance=4362 kB, estimate=4362 kB; lsn=0/1BA8868, redo lsn=0/1BA8868 +sparkyfitness-db | 2026-10-01 21:40:28.224 CEST [42] LOG: database system is shut down +sparkyfitness-db | done +sparkyfitness-db | server stopped +sparkyfitness-db | +sparkyfitness-db | PostgreSQL init process complete; ready for start up. +sparkyfitness-db | +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: listening on IPv6 address "::", port 5432 +sparkyfitness-db | 2026-10-01 21:40:28.311 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +sparkyfitness-db | 2026-10-01 21:40:28.325 CEST [64] LOG: database system was shut down at 2026-10-01 21:40:28 CEST +sparkyfitness-db | 2026-10-01 21:40:28.332 CEST [1] LOG: database system is ready to accept connections +sparkyfitness-db | 2026-10-01 21:45:28.380 CEST [62] LOG: checkpoint starting: time +sparkyfitness-db | 2026-10-01 21:47:00.684 CEST [62] LOG: checkpoint complete: wrote 921 buffers (5.6%), wrote 6 SLRU buffers; 0 WAL file(s) added, 0 removed, 1 recycled; write=92.206 s, sync=0.073 s, total=92.305 s; sync files=654, longest=0.004 s, average=0.001 s; distance=9984 kB, estimate=9984 kB; lsn=0/26A9C28, redo lsn=0/2568AD0 +sparkyfitness-db | 2026-10-01 21:50:28.783 CEST [62] LOG: checkpoint starting: time +sparkyfitness-db | 2026-10-01 21:50:53.006 CEST [62] LOG: checkpoint complete: wrote 241 buffers (1.5%), wrote 4 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=24.188 s, sync=0.016 s, total=24.223 s; sync files=23, longest=0.006 s, average=0.001 s; distance=2573 kB, estimate=9243 kB; lsn=0/285DD38, redo lsn=0/27EC1E0 +sparkyfitness-server | '20250714000000_create_session_table.sql', +sparkyfitness-server | '20250714175824_add_api_key_tag_to_ai_service_settings.sql', +sparkyfitness-server | '20250717190700_add_cascading_deletes.sql', +sparkyfitness-server | '20250717233929_add_is_quick_food_to_foods.sql', +sparkyfitness-server | '20250718190226_add_food_display_limit_to_user_preferences.sql', +sparkyfitness-server | '20250719131500_add_meal_percentages.sql', +sparkyfitness-server | '20250719215400_add_login_management_to_oidc_settings.sql', +sparkyfitness-server | '20250720010000_create_user_nutrient_display_preferences.sql', +sparkyfitness-server | '20250720201800_rename_food_display_limit_to_item_display_limit.sql', +sparkyfitness-server | '20250720220000_add_water_tracking_features.sql', +sparkyfitness-server | '20250720233836_alter_water_goal_ml_to_numeric.sql', +sparkyfitness-server | '20250721000000_add_servings_per_container_to_water_containers.sql', +sparkyfitness-server | '20250721000000_alter_water_container_volume_to_numeric.sql', +sparkyfitness-server | '20250721014900_alter_water_ml_to_numeric.sql', +sparkyfitness-server | '20250819062400_add_mealie_provider_type.sql', +sparkyfitness-server | '20250819083500_add_base_url_to_external_data_providers.sql', +sparkyfitness-server | '202508201215_add_garmin_integration_schema.sql', +sparkyfitness-server | '20250821090000_update_external_data_providers_provider_type_check.sql', +sparkyfitness-server | '20250821091500_add_garth_token_dump_to_external_data_providers.sql', +sparkyfitness-server | '20250821102000_remove_redundant_token_fields_from_external_data_providers.sql', +sparkyfitness-server | '20250831063900_create_mood_entries_table.sql', +sparkyfitness-server | '20250927180257_alter_exercises_table.sql', +sparkyfitness-server | '20250927212000_add_free_exercise_db_to_provider_type_check.sql', +sparkyfitness-server | '20250930002100_add_sets_reps_weight_to_exercise_entries.sql', +sparkyfitness-server | '20251001232600_add_gender_to_users_table.sql', +sparkyfitness-server | '20251002182306_create_backup_settings_table.sql', +sparkyfitness-server | '20251002224500_add_password_reset_to_users_table.sql', +sparkyfitness-server | '20251006021609_add_glycemic_index_to_foods_and_food_variants.sql', +sparkyfitness-server | '20251006220500_create_admin_activity_logs_table.sql', +sparkyfitness-server | '20251008224256_add_workout_features.sql', +sparkyfitness-server | '20251012225400_add_primary_keys_to_workout_tables.sql', +sparkyfitness-server | '20251012225500_add_multiple_sets_to_presets.sql', +sparkyfitness-server | '20251012225900_add_multiple_sets_to_plans.sql', +sparkyfitness-server | '20251012230000_add_multiple_sets_to_exercise_entries.sql', +sparkyfitness-server | '20251015223200_convert_weights_to_kg_and_set_default.sql', +sparkyfitness-server | '202510170132_add_text_measurements.sql', +sparkyfitness-server | '20251017200900_add_multiple_oidc_providers.sql', +sparkyfitness-server | '20251017204200_create_global_settings.sql', +sparkyfitness-server | '20251018001151_add_bmr_and_bodyfat_preferences.sql', +sparkyfitness-server | '20251018223700_add_signing_alg_to_oidc_providers.sql', +sparkyfitness-server | '20251019013200_merged_schema_and_data.sql', +sparkyfitness-server | '20251019013300_merged_rls_policies.sql', +sparkyfitness-server | '20251019154515_update_rls_policies_for_shared_items.sql', +sparkyfitness-server | '20251019203500_fix_rls_permissions_for_public_foods.sql', +sparkyfitness-server | '20251019204000_correct_variant_rls_policy.sql', +sparkyfitness-server | '20251019212500_update_measurement_rls_policies.sql', +sparkyfitness-server | '20251019222100_add_audit_columns_to_measurements.sql', +sparkyfitness-server | '20251020001000_fix_family_access_insert_policy.sql', +sparkyfitness-server | '20251020022000_set_default_shared_with_public.sql', +sparkyfitness-server | '20251020022200_update_rls_policies.sql', +sparkyfitness-server | '20251020022500_fix_food_select_policy.sql', +sparkyfitness-server | '20251020030000_simplify_food_select_policy.sql', +sparkyfitness-server | '20251020031000_update_food_select_policy_with_sharing.sql', +sparkyfitness-server | '20251020032200_add_all_owner_centric_policies.sql', +sparkyfitness-server | '20251020033400_add_food_variants_rls_policy.sql', +sparkyfitness-server | '20251020033700_fix_food_variants_rls_policy.sql', +sparkyfitness-server | '20251020230839_fix_family_access_rls_policies.sql', +sparkyfitness-server | '20251021025423_restrict_family_access_select_policy.sql', +sparkyfitness-server | '20251021034700_add_public_sharing_to_external_providers.sql', +sparkyfitness-server | '20251022201000_fix_exercise_rls_policy.sql', +sparkyfitness-server | '20251022203000_snapshot_exercise_details_in_entries.sql', +sparkyfitness-server | '20251023120500_update_external_providers_select_policy_for_public.sql', +sparkyfitness-server | '20251023221000_update_meals_rls_policy.sql', +sparkyfitness-server | '20251023221500_update_meal_plan_template_assignments_rls_policy.sql', +sparkyfitness-server | '20251023221501_add_meal_id_to_food_entries.sql', +sparkyfitness-server | '20251024230330_add_withings_fields_to_external_data_providers.sql', +sparkyfitness-server | '20251025210900_add_source_to_custom_measurements.sql', +sparkyfitness-server | '20251026125900_add_distance_and_hr_to_exercise_entries_activity_details.sql', +sparkyfitness-server | '202510310132_add_language_to_user_preferences.sql', +sparkyfitness-server | '20251101151100_create_sleep_entries_table.sql', +sparkyfitness-server | '20251103000000_add_onboarding_schema.sql', +sparkyfitness-server | '20251112000000_add_display_name_to_custom_categories.sql', +sparkyfitness-server | '20251114205134_create_exercise_preset_entries_table.sql', +sparkyfitness-server | '20251115003147_add_source_to_exercise_preset_entries.sql', +sparkyfitness-server | '20251115003301_add_exercise_preset_entry_id_to_activity_details.sql', +sparkyfitness-server | '20251115004027_alter_exercise_entry_id_nullable_in_activity_details.sql', +sparkyfitness-server | '20251120011100_add_mfa_magic_link_columns.sql', +sparkyfitness-server | '20251121011500_add_email_mfa_columns_to_users.sql', +sparkyfitness-server | '202511220110_add_default_external_data_providers.sql', +sparkyfitness-server | '202511232110_delete_raw_stress_data_categories.sql', +sparkyfitness-server | '202511270109_add_calorie_goal_adjustment_mode_to_user_preferences.sql', +sparkyfitness-server | '20251127194107_create_food_entry_meals_and_link_food_entries.sql', +sparkyfitness-server | '20251127194108_migrate_aggregated_food_entries_to_food_entry_meals.sql', +sparkyfitness-server | '20251128030115_add_tandoor_provider_type.sql', +sparkyfitness-server | '20251205000000_add_energy_unit_to_user_preferences.sql', +sparkyfitness-server | '20251206000000_add_nutrient_calculation_algorithms.sql', +sparkyfitness-server | '20251206000001_add_serving_size_to_meals.sql', +sparkyfitness-server | '20251207000001_add_default_meal_quantity.sql', +sparkyfitness-server | '20251215005329_add_usda_to_provider_type_check.sql', +sparkyfitness-server | '20251221000000_create_fasting_logs.sql', +sparkyfitness-server | '20251221010000_drop_mood_weight_from_fasting_logs.sql', +sparkyfitness-server | '20251226150700_add_mobile_health_data_features.sql', +sparkyfitness-server | '20251228000000_add_custom_nutrients_tables.sql', +sparkyfitness-server | ... 84 more items +sparkyfitness-server | ] +sparkyfitness-server | [2026-10-01T19:53:07.208Z] [INFO] Ensuring permissions for role: "sparkyapp" +sparkyfitness-server | [2026-10-01T19:53:07.260Z] [INFO] Successfully ensured permissions for role: "sparkyapp" +sparkyfitness-server | [2026-10-01T19:53:07.261Z] [INFO] Permissions granted to application user. +sparkyfitness-server | [2026-10-01T19:53:07.261Z] [INFO] Applying all RLS policies from rls_policies.sql... +sparkyfitness-server | [2026-10-01T19:53:07.410Z] [INFO] Successfully applied all RLS policies. +sparkyfitness-server | [AUTH] Starting Better Auth mounting phase... +sparkyfitness-server | [AUTH] Better Auth handler successfully mounted. +sparkyfitness-server | [AUTH] Synced trusted SSO providers for auto-linking: [] +sparkyfitness-server | DEBUG: Server started and listening on port 3010 +sparkyfitness-server | [2026-10-01T19:53:07.482Z] [INFO] SparkyFitnessServer listening on port 3010 +sparkyfitness-server | View API documentation at: /api/api-docs/swagger +sparkyfitness-server | [2026-10-01T19:53:07.485Z] [INFO] [CRON] Scheduled backups disabled — skipping schedule +sparkyfitness-server | [2026-10-01T19:53:24.905Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +sparkyfitness-server | [2026-10-01T19:53:55.035Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +sparkyfitness-server | [AUTH HANDLER] Intercepted request: POST /api/auth/sign-in/email +sparkyfitness-server | 2026-10-01T19:53:57.085Z ERROR [Better Auth]: Invalid password +sparkyfitness-server | [AUTH HANDLER] Intercepted request: POST /api/auth/sign-in/email +sparkyfitness-server | [2026-10-01T19:53:57.241Z] [INFO] [AUTH] Hook: Session created for user 55263b9a-8a7a-4759-b884-6183f5d58a02. Updating last login and checking group sync. +sparkyfitness-server | [2026-10-01T19:53:57.296Z] [INFO] Incoming request: GET /api/measurements/check-in/1999-01-01 (Path: /api/measurements/check-in/1999-01-01) +sparkyfitness-server | [2026-10-01T19:53:57.400Z] [INFO] Incoming request: GET /api/measurements/check-in/2026-09-01 (Path: /api/measurements/check-in/2026-09-01) diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/engine-state.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/engine-state.json new file mode 100644 index 00000000..4821dd33 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/engine-state.json @@ -0,0 +1,8 @@ +{ + "sparkyfitness-db": { + "image": "postgres:18-alpine", + "probe": "datadir major version", + "answer": "18", + "probe_rc": 0 + } +} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after-detail.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after-detail.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after-detail.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-after.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before-detail.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before-detail.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before-detail.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/files-before.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/memory-samples.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/memory-samples.json new file mode 100644 index 00000000..9b0ca0dd --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/memory-samples.json @@ -0,0 +1,1562 @@ +[ + { + "t": 15.2, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8466432, + "peak": 8777728, + "anon": 5640192, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 167006208, + "peak": 171339776, + "anon": 46206976, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 405676032, + "peak": 406638592, + "anon": 375377920, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 304 + }, + { + "t": 30.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8392704, + "peak": 9867264, + "anon": 5763072, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 168554496, + "peak": 171339776, + "anon": 46727168, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 435654656, + "peak": 447664128, + "anon": 404029440, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 604 + }, + { + "t": 45.5, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8568832, + "peak": 9867264, + "anon": 5754880, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 167358464, + "peak": 171339776, + "anon": 44961792, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 435789824, + "peak": 447664128, + "anon": 404697088, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 904 + }, + { + "t": 60.6, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8765440, + "peak": 10244096, + "anon": 5816320, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 172322816, + "peak": 174723072, + "anon": 49958912, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 406753280, + "peak": 447664128, + "anon": 376299520, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 1208 + }, + { + "t": 75.8, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8404992, + "peak": 10244096, + "anon": 5816320, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 191848448, + "peak": 194334720, + "anon": 63160320, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 403337216, + "peak": 447664128, + "anon": 373182464, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 1508 + }, + { + "t": 91.0, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8273920, + "peak": 10797056, + "anon": 5795840, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 216584192, + "peak": 217993216, + "anon": 86921216, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 407199744, + "peak": 447664128, + "anon": 376885248, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 1812 + }, + { + "t": 106.1, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8499200, + "peak": 10797056, + "anon": 5849088, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 238321664, + "peak": 243077120, + "anon": 106541056, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 404910080, + "peak": 447664128, + "anon": 374427648, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 2112 + }, + { + "t": 121.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8335360, + "peak": 10833920, + "anon": 5812224, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 244051968, + "peak": 247631872, + "anon": 111501312, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 405262336, + "peak": 447664128, + "anon": 374603776, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 2412 + }, + { + "t": 136.4, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7933952, + "peak": 10833920, + "anon": 5824512, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 224759808, + "peak": 248340480, + "anon": 93294592, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 409604096, + "peak": 447664128, + "anon": 378978304, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 2716 + }, + { + "t": 151.6, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7921664, + "peak": 11730944, + "anon": 5812224, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 226861056, + "peak": 248340480, + "anon": 95469568, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 410161152, + "peak": 447664128, + "anon": 379752448, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 3016 + }, + { + "t": 166.8, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7700480, + "peak": 11730944, + "anon": 5849088, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 230035456, + "peak": 248340480, + "anon": 97710080, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 406171648, + "peak": 447664128, + "anon": 375562240, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 3320 + }, + { + "t": 182.0, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8212480, + "peak": 11927552, + "anon": 5890048, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 246710272, + "peak": 249577472, + "anon": 113000448, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 405483520, + "peak": 447664128, + "anon": 374923264, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 3620 + }, + { + "t": 197.1, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8720384, + "peak": 11927552, + "anon": 5853184, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 245719040, + "peak": 249815040, + "anon": 111624192, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 415182848, + "peak": 447664128, + "anon": 384737280, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 3920 + }, + { + "t": 212.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8171520, + "peak": 11927552, + "anon": 5804032, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 231452672, + "peak": 255643648, + "anon": 97800192, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 413265920, + "peak": 447664128, + "anon": 382111744, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 4224 + }, + { + "t": 227.4, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7938048, + "peak": 11927552, + "anon": 5869568, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 237215744, + "peak": 255643648, + "anon": 101851136, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 423604224, + "peak": 447664128, + "anon": 392810496, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 4524 + }, + { + "t": 242.6, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8396800, + "peak": 11927552, + "anon": 6074368, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 252055552, + "peak": 255643648, + "anon": 115335168, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416940032, + "peak": 447664128, + "anon": 386064384, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 4827 + }, + { + "t": 257.8, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8609792, + "peak": 13131776, + "anon": 5906432, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 254316544, + "peak": 258048000, + "anon": 116764672, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 415215616, + "peak": 447664128, + "anon": 384696320, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 5128 + }, + { + "t": 273.0, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8220672, + "peak": 13131776, + "anon": 5844992, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 262144000, + "peak": 268111872, + "anon": 123875328, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 415596544, + "peak": 447664128, + "anon": 385118208, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 5429 + }, + { + "t": 288.2, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8220672, + "peak": 13131776, + "anon": 5959680, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 261259264, + "peak": 271200256, + "anon": 122363904, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 412831744, + "peak": 447664128, + "anon": 381894656, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 5732 + }, + { + "t": 303.4, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8802304, + "peak": 13131776, + "anon": 5959680, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 259948544, + "peak": 271200256, + "anon": 120954880, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 415789056, + "peak": 447664128, + "anon": 385138688, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 6036 + }, + { + "t": 318.6, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8450048, + "peak": 13131776, + "anon": 5869568, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 253079552, + "peak": 271200256, + "anon": 114040832, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 420356096, + "peak": 447664128, + "anon": 389615616, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 6336 + }, + { + "t": 333.8, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8146944, + "peak": 13131776, + "anon": 5869568, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 357187584, + "peak": 366895104, + "anon": 217341952, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 421191680, + "peak": 447664128, + "anon": 390270976, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 6640 + }, + { + "t": 349.0, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8564736, + "peak": 13131776, + "anon": 5971968, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 342654976, + "peak": 366960640, + "anon": 203608064, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 413798400, + "peak": 447664128, + "anon": 383180800, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 6941 + }, + { + "t": 364.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7761920, + "peak": 13131776, + "anon": 5853184, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 365903872, + "peak": 369270784, + "anon": 227180544, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 418201600, + "peak": 447664128, + "anon": 388046848, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 7244 + }, + { + "t": 379.5, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8437760, + "peak": 13131776, + "anon": 5849088, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 365363200, + "peak": 371941376, + "anon": 226398208, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416169984, + "peak": 447664128, + "anon": 385318912, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 7546 + }, + { + "t": 394.7, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8536064, + "peak": 13131776, + "anon": 5853184, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 366874624, + "peak": 375402496, + "anon": 227762176, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 422440960, + "peak": 447664128, + "anon": 391639040, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 7848 + }, + { + "t": 410.1, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8122368, + "peak": 13131776, + "anon": 5853184, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 374157312, + "peak": 376475648, + "anon": 234979328, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416124928, + "peak": 447664128, + "anon": 385703936, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 8154 + }, + { + "t": 425.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8114176, + "peak": 13131776, + "anon": 5857280, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 375390208, + "peak": 381575168, + "anon": 236068864, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 419909632, + "peak": 447664128, + "anon": 389361664, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 8454 + }, + { + "t": 440.5, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8265728, + "peak": 13131776, + "anon": 5844992, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 371761152, + "peak": 381587456, + "anon": 232157184, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 419311616, + "peak": 447664128, + "anon": 388661248, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 8756 + }, + { + "t": 455.7, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8851456, + "peak": 13131776, + "anon": 6111232, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 377065472, + "peak": 381939712, + "anon": 236879872, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 414130176, + "peak": 447664128, + "anon": 383442944, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 9058 + }, + { + "t": 470.9, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8421376, + "peak": 13131776, + "anon": 5775360, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 403959808, + "peak": 410443776, + "anon": 263176192, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416731136, + "peak": 447664128, + "anon": 386109440, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 9360 + }, + { + "t": 486.1, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8765440, + "peak": 13131776, + "anon": 6139904, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 424599552, + "peak": 432951296, + "anon": 283111424, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 431820800, + "peak": 447664128, + "anon": 401711104, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 9660 + }, + { + "t": 501.3, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8474624, + "peak": 13131776, + "anon": 5906432, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 368865280, + "peak": 432951296, + "anon": 229007360, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416559104, + "peak": 447664128, + "anon": 386052096, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 9964 + }, + { + "t": 516.5, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8765440, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 368115712, + "peak": 432951296, + "anon": 227561472, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 416772096, + "peak": 447664128, + "anon": 386232320, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 10267 + }, + { + "t": 531.7, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8482816, + "peak": 13131776, + "anon": 5918720, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 350908416, + "peak": 432951296, + "anon": 210067456, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 414109696, + "peak": 447664128, + "anon": 383660032, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 10568 + }, + { + "t": 546.9, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8110080, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 361578496, + "peak": 432951296, + "anon": 221646848, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 418623488, + "peak": 447664128, + "anon": 388726784, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 10870 + }, + { + "t": 562.1, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7897088, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 355598336, + "peak": 432951296, + "anon": 216383488, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 418422784, + "peak": 447664128, + "anon": 388538368, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 11172 + }, + { + "t": 577.2, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7823360, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 170831872, + "peak": 432951296, + "anon": 35680256, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 414457856, + "peak": 447664128, + "anon": 384606208, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 11472 + }, + { + "t": 592.4, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 8069120, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 168828928, + "peak": 432951296, + "anon": 33918976, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 414441472, + "peak": 447664128, + "anon": 384606208, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 11774 + }, + { + "t": 607.6, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "current": 7782400, + "peak": 13131776, + "anon": 5840896, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "current": 139599872, + "peak": 432951296, + "anon": 5595136, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "current": 414453760, + "peak": 447664128, + "anon": 384622592, + "oom_kill": 0, + "restarts": 0, + "oomkilled_flag": false, + "status": "running", + "cgroup": true + } + }, + "requests": 12076 + } +] \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/migration-lines.txt b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/migration-lines.txt new file mode 100644 index 00000000..828e547a --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/migration-lines.txt @@ -0,0 +1,6 @@ +sparkyfitness-server | [2026-10-01T19:41:51.644Z] [INFO] Ensured schema_migrations table exists. +sparkyfitness-server | [2026-10-01T19:41:51.649Z] [INFO] Applied migrations: [ +sparkyfitness-server | '202508201215_add_garmin_integration_schema.sql', +sparkyfitness-server | '20251019013200_merged_schema_and_data.sql', +sparkyfitness-server | '20251103000000_add_onboarding_schema.sql', +sparkyfitness-server | '20251127194108_migrate_aggregated_food_entries_to_food_entry_meals.sql', \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/run.log b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/run.log new file mode 100644 index 00000000..606d920d --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/run.log @@ -0,0 +1,61 @@ +[19:40:25] scratch drive folders cleared before FROM (R-656): none existed +[19:40:25] MV-sparkyfitness: deploying sparkyfitness at FROM {'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.2', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.2'} +[19:41:39] FROM settled=True in 31.1s :: {"sparkyfitness": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-db": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}} +[19:41:39] fixture: the BOX walk's own (Sparkyfitness), through upgrade_boxport +[19:41:39] sparkyfitness: sign-up http=200 +[19:41:39] sparkyfitness: check-in http=200 +[19:41:39] sparkyfitness: seeded user drillc52c98 with a weight of 78.96 on 2026-09-01 +[19:41:40] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:41:40] C1 (seed reads back BEFORE): True +[19:41:40] MV-sparkyfitness: swapping to TO {'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.3', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.3'} +[19:42:12] TO up -d rc=0 +[19:42:43] TO settled=True in 31.1s :: {"sparkyfitness": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-db": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "sparkyfitness-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}} +[19:42:44] engine state sparkyfitness-db: 18 +[19:42:44] migration lines observed: 6 +[19:42:44] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:42:44] RESULT (seed reads back AFTER): True +[19:42:45] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:80 +[19:43:00] + 15s sparkyfitness=8M/256M peak=8M kills=0 rs=0 sparkyfitness-db=159M/512M peak=163M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=387M kills=0 rs=0 reqs=304 +[19:43:15] + 30s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=160M/512M peak=163M kills=0 rs=0 sparkyfitness-server=415M/1024M peak=426M kills=0 rs=0 reqs=604 +[19:43:30] + 46s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=159M/512M peak=163M kills=0 rs=0 sparkyfitness-server=415M/1024M peak=426M kills=0 rs=0 reqs=904 +[19:43:45] + 61s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=164M/512M peak=166M kills=0 rs=0 sparkyfitness-server=387M/1024M peak=426M kills=0 rs=0 reqs=1208 +[19:44:00] + 76s sparkyfitness=8M/256M peak=9M kills=0 rs=0 sparkyfitness-db=182M/512M peak=185M kills=0 rs=0 sparkyfitness-server=384M/1024M peak=426M kills=0 rs=0 reqs=1508 +[19:44:16] + 91s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=206M/512M peak=207M kills=0 rs=0 sparkyfitness-server=388M/1024M peak=426M kills=0 rs=0 reqs=1812 +[19:44:31] + 106s sparkyfitness=8M/256M peak=10M kills=0 rs=0 sparkyfitness-db=227M/512M peak=231M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=2112 +[19:44:46] + 121s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=232M/512M peak=236M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=2412 +[19:45:01] + 136s sparkyfitness=7M/256M peak=10M kills=0 rs=0 sparkyfitness-db=214M/512M peak=236M kills=0 rs=0 sparkyfitness-server=390M/1024M peak=426M kills=0 rs=0 reqs=2716 +[19:45:16] + 152s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=216M/512M peak=236M kills=0 rs=0 sparkyfitness-server=391M/1024M peak=426M kills=0 rs=0 reqs=3016 +[19:45:31] + 167s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=219M/512M peak=236M kills=0 rs=0 sparkyfitness-server=387M/1024M peak=426M kills=0 rs=0 reqs=3320 +[19:45:47] + 182s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=235M/512M peak=238M kills=0 rs=0 sparkyfitness-server=386M/1024M peak=426M kills=0 rs=0 reqs=3620 +[19:46:02] + 197s sparkyfitness=8M/256M peak=11M kills=0 rs=0 sparkyfitness-db=234M/512M peak=238M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=3920 +[19:46:17] + 212s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=220M/512M peak=243M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=4224 +[19:46:32] + 227s sparkyfitness=7M/256M peak=11M kills=0 rs=0 sparkyfitness-db=226M/512M peak=243M kills=0 rs=0 sparkyfitness-server=403M/1024M peak=426M kills=0 rs=0 reqs=4524 +[19:46:47] + 243s sparkyfitness=8M/256M peak=11M kills=0 rs=0 sparkyfitness-db=240M/512M peak=243M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=4827 +[19:47:02] + 258s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=242M/512M peak=246M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=5128 +[19:47:18] + 273s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=250M/512M peak=255M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=5429 +[19:47:33] + 288s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=249M/512M peak=258M kills=0 rs=0 sparkyfitness-server=393M/1024M peak=426M kills=0 rs=0 reqs=5732 +[19:47:48] + 303s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=247M/512M peak=258M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=6036 +[19:48:03] + 319s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=241M/512M peak=258M kills=0 rs=0 sparkyfitness-server=400M/1024M peak=426M kills=0 rs=0 reqs=6336 +[19:48:18] + 334s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=340M/512M peak=349M kills=0 rs=0 sparkyfitness-server=401M/1024M peak=426M kills=0 rs=0 reqs=6640 +[19:48:34] + 349s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=326M/512M peak=349M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=6941 +[19:48:49] + 364s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=348M/512M peak=352M kills=0 rs=0 sparkyfitness-server=398M/1024M peak=426M kills=0 rs=0 reqs=7244 +[19:49:04] + 380s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=348M/512M peak=354M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=7546 +[19:49:19] + 395s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=349M/512M peak=358M kills=0 rs=0 sparkyfitness-server=402M/1024M peak=426M kills=0 rs=0 reqs=7848 +[19:49:35] + 410s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=356M/512M peak=359M kills=0 rs=0 sparkyfitness-server=396M/1024M peak=426M kills=0 rs=0 reqs=8154 +[19:49:50] + 425s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=358M/512M peak=363M kills=0 rs=0 sparkyfitness-server=400M/1024M peak=426M kills=0 rs=0 reqs=8454 +[19:50:05] + 440s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=354M/512M peak=363M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=8756 +[19:50:20] + 456s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=359M/512M peak=364M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=9058 +[19:50:36] + 471s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=385M/512M peak=391M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=9360 +[19:50:51] + 486s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=404M/512M peak=412M kills=0 rs=0 sparkyfitness-server=411M/1024M peak=426M kills=0 rs=0 reqs=9660 +[19:51:06] + 501s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=351M/512M peak=412M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=9964 +[19:51:21] + 516s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=351M/512M peak=412M kills=0 rs=0 sparkyfitness-server=397M/1024M peak=426M kills=0 rs=0 reqs=10267 +[19:51:36] + 532s sparkyfitness=8M/256M peak=12M kills=0 rs=0 sparkyfitness-db=334M/512M peak=412M kills=0 rs=0 sparkyfitness-server=394M/1024M peak=426M kills=0 rs=0 reqs=10568 +[19:51:52] + 547s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=344M/512M peak=412M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=10870 +[19:52:07] + 562s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=339M/512M peak=412M kills=0 rs=0 sparkyfitness-server=399M/1024M peak=426M kills=0 rs=0 reqs=11172 +[19:52:22] + 577s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=162M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=11472 +[19:52:37] + 592s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=161M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=11774 +[19:52:52] + 608s sparkyfitness=7M/256M peak=12M kills=0 rs=0 sparkyfitness-db=133M/512M peak=412M kills=0 rs=0 sparkyfitness-server=395M/1024M peak=426M kills=0 rs=0 reqs=12076 +[19:52:53] memory watch: killed=False tight=[] requests=12076 codes={'200': 12076} +[19:52:53] MV-sparkyfitness: ABORT — putting the FROM images back +[19:53:57] sparkyfitness: readback of the seeded weight http=200 equal=True +[19:53:57] ABORT: app came back in 31.3s; data present=True \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/sampler.sh b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/sampler.sh new file mode 100644 index 00000000..85fe5898 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/sampler.sh @@ -0,0 +1,12 @@ +# sampler.sh (run INSIDE the bench or the box): sample the cgroup of each named container from its birth, every 2 s. +# usage: NAMES="a b c" OUT=/root/mem.csv DUR=900 bash sampler.sh & — stops at DUR or when $OUT.stop exists +: > $OUT; t0=$(date +%s) +while [ $(( $(date +%s) - t0 )) -lt ${DUR:-900} ] && [ ! -f $OUT.stop ]; do + for n in $NAMES; do + id=$(docker ps -q --no-trunc --filter name=^$n$ | head -1); [ -z "$id" ] && continue + cg=$(ls -d /sys/fs/cgroup/system.slice/docker-$id.scope 2>/dev/null || find /sys/fs/cgroup -maxdepth 4 -type d -name "*$id*" 2>/dev/null | head -1) + [ -f "$cg/memory.stat" ] || continue + echo "$(date +%s),$n,${id:0:12},$(awk '$1=="anon"{print $2}' $cg/memory.stat),$(cat $cg/memory.current),$(cat $cg/memory.swap.current 2>/dev/null || echo NA),$(awk '$1=="oom_kill"{print $2}' $cg/memory.events),$(cat $cg/memory.max),$(docker inspect -f '{{.RestartCount}}' $id)" >> $OUT + done + sleep 2 +done diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-full.log b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-full.log new file mode 100644 index 00000000..2672443d --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-full.log @@ -0,0 +1,242 @@ +sparkyfitness-db | The files belonging to this database system will be owned by user "postgres". +sparkyfitness-db | This user must also own the server process. +sparkyfitness-db | +sparkyfitness-db | The database cluster will be initialized with locale "en_US.utf8". +sparkyfitness-db | The default database encoding has accordingly been set to "UTF8". +sparkyfitness-db | The default text search configuration will be set to "english". +sparkyfitness-db | +sparkyfitness-db | Data page checksums are enabled. +sparkyfitness-db | +sparkyfitness-db | fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok +sparkyfitness-db | creating subdirectories ... ok +sparkyfitness-db | selecting dynamic shared memory implementation ... posix +sparkyfitness-db | selecting default "max_connections" ... 100 +sparkyfitness-db | selecting default "shared_buffers" ... 128MB +sparkyfitness-db | selecting default time zone ... Europe/Budapest +sparkyfitness-db | creating configuration files ... ok +sparkyfitness-db | running bootstrap script ... ok +sparkyfitness-db | sh: locale: not found +sparkyfitness-db | 2026-10-01 21:40:26.926 CEST [36] WARNING: no usable system locales were found +sparkyfitness-db | performing post-bootstrap initialization ... ok +sparkyfitness-db | syncing data to disk ... ok +sparkyfitness-db | +sparkyfitness-db | +sparkyfitness-db | Success. You can now start the database server using: +sparkyfitness-db | +sparkyfitness-db | pg_ctl -D /var/lib/postgresql/data/pgdata -l logfile start +sparkyfitness-db | initdb: warning: enabling "trust" authentication for local connections +sparkyfitness-db | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. +sparkyfitness-db | +sparkyfitness-db | waiting for server to start....2026-10-01 21:40:27.841 CEST [42] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit +sparkyfitness-db | 2026-10-01 21:40:27.848 CEST [42] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +sparkyfitness-db | 2026-10-01 21:40:27.861 CEST [48] LOG: database system was shut down at 2026-10-01 21:40:27 CEST +sparkyfitness-db | 2026-10-01 21:40:27.870 CEST [42] LOG: database system is ready to accept connections +sparkyfitness-db | done +sparkyfitness-db | server started +sparkyfitness-db | CREATE DATABASE +sparkyfitness-db | +sparkyfitness-db | +sparkyfitness-db | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* +sparkyfitness-server | [dotenv@17.3.1] injecting env (0) from ../.env -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit +sparkyfitness-server | [Secrets] Checking for secret files to load... +sparkyfitness-server | [Secrets] No secrets loaded from files. +sparkyfitness-db | +sparkyfitness-db | waiting for server to shut down....2026-10-01 21:40:28.062 CEST [42] LOG: received fast shutdown request +sparkyfitness-db | 2026-10-01 21:40:28.074 CEST [42] LOG: aborting any active transactions +sparkyfitness-db | 2026-10-01 21:40:28.077 CEST [42] LOG: background worker "logical replication launcher" (PID 51) exited with exit code 1 +sparkyfitness-db | 2026-10-01 21:40:28.078 CEST [46] LOG: shutting down +sparkyfitness-db | 2026-10-01 21:40:28.081 CEST [46] LOG: checkpoint starting: shutdown immediate +sparkyfitness-db | 2026-10-01 21:40:28.197 CEST [46] LOG: checkpoint complete: wrote 943 buffers (5.8%), wrote 3 SLRU buffers; 0 WAL file(s) added, 0 removed, 0 recycled; write=0.031 s, sync=0.072 s, total=0.119 s; sync files=303, longest=0.038 s, average=0.001 s; distance=4362 kB, estimate=4362 kB; lsn=0/1BA8868, redo lsn=0/1BA8868 +sparkyfitness-db | 2026-10-01 21:40:28.224 CEST [42] LOG: database system is shut down +sparkyfitness-db | done +sparkyfitness-db | server stopped +sparkyfitness-db | +sparkyfitness-db | PostgreSQL init process complete; ready for start up. +sparkyfitness-db | +sparkyfitness-server | [2026-10-01T19:41:42.803Z] [INFO] Environment variable pre-flight checks passed successfully. +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: starting PostgreSQL 18.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 +sparkyfitness-db | 2026-10-01 21:40:28.305 CEST [1] LOG: listening on IPv6 address "::", port 5432 +sparkyfitness-db | 2026-10-01 21:40:28.311 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" +sparkyfitness-db | 2026-10-01 21:40:28.325 CEST [64] LOG: database system was shut down at 2026-10-01 21:40:28 CEST +sparkyfitness-db | 2026-10-01 21:40:28.332 CEST [1] LOG: database system is ready to accept connections +sparkyfitness-server | Starting server... +sparkyfitness-server | [2026-10-01T19:41:50.834Z] [INFO] [withingsService] Withings data source configured to: withings +sparkyfitness-server | [2026-10-01T19:41:50.836Z] [INFO] [fitbitService] Fitbit data source configured to: fitbit +sparkyfitness-server | [2026-10-01T19:41:50.837Z] [INFO] [googleHealthService] Google Health data source: googlehealth +sparkyfitness-server | [2026-10-01T19:41:50.838Z] [INFO] [polarService] Polar data source configured to: polar +sparkyfitness-server | [2026-10-01T19:41:50.838Z] [INFO] [stravaService] Strava data source configured to: strava +sparkyfitness-server | [2026-10-01T19:41:50.839Z] [INFO] [hevyService] Hevy data source configured to: hevy +sparkyfitness-server | [2026-10-01T19:41:51.483Z] [INFO] UserProfileRoutes UPLOADS_DIR: /app/SparkyFitnessServer/uploads/avatars +sparkyfitness-server | DEBUG: SPARKY_FITNESS_FRONTEND_URL is: https://sparky.gate.invalid +sparkyfitness | Starting SparkyFitness Frontend as root with environment variables: +sparkyfitness | SPARKY_FITNESS_SERVER_HOST=sparkyfitness-server +sparkyfitness | SPARKY_FITNESS_SERVER_PORT=3010 +sparkyfitness | NGINX_RATE_LIMIT=5r/s +sparkyfitness | NGINX_LISTEN_PORT=80 +sparkyfitness | NGINX_ACCESS_LOG=/var/log/nginx/access.log +sparkyfitness | NGINX_ERROR_LOG=/var/log/nginx/error.log +sparkyfitness | NGINX_DUMP_CONFIG=false +sparkyfitness | SPARKY_FITNESS_FRONTEND_URL=https://sparky.gate.invalid +sparkyfitness | Generating nginx configuration from template... +sparkyfitness | Testing nginx configuration substitution... +sparkyfitness | Validating nginx configuration syntax... +sparkyfitness | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +sparkyfitness | nginx: configuration file /etc/nginx/nginx.conf test is successful +sparkyfitness | Configuration validated successfully. Starting nginx... +sparkyfitness | Backend will be proxied to: sparkyfitness-server:3010 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: using the "epoll" event method +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: nginx/1.29.3 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: built by gcc 14.2.0 (Alpine 14.2.0) +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: OS: Linux 7.0.2-6-pve +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 524288:524288 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker processes +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 12 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 13 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 14 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 15 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 16 +sparkyfitness | 2026/10/01 21:42:12 [notice] 1#1: start worker process 17 +sparkyfitness | 127.0.0.1 - - [01/Oct/2026:21:42:42 +0200] "GET / HTTP/1.1" 200 2666 "-" "Wget" +sparkyfitness-server | [SECURITY] Private network CORS is ENABLED. Ensure this is only on self-hosted/private networks. +sparkyfitness-server | SparkyFitnessServer UPLOADS_BASE_DIR: /app/SparkyFitnessServer/uploads +sparkyfitness-server | [2026-10-01T19:41:51.617Z] [INFO] Ensured temporary upload directory exists: /app/SparkyFitnessServer/temp_uploads/ +sparkyfitness-server | [2026-10-01T19:41:51.643Z] [INFO] Role "sparkyapp" already exists. +sparkyfitness-server | [2026-10-01T19:41:51.644Z] [INFO] Ensured schema_migrations table exists. +sparkyfitness-server | [2026-10-01T19:41:51.649Z] [INFO] Applied migrations: [ +sparkyfitness-server | '20250703170640_InitialDB.sql', +sparkyfitness-server | '20250710062500_create_goal_presets_table.sql', +sparkyfitness-server | '20250711173824_meal_features.sql', +sparkyfitness-server | '20250712163617_refactor_data_providers_and_add_exercise_source_id.sql', +sparkyfitness-server | '20250713125323_create_oidc_settings_and_update_users_table.sql', +sparkyfitness-server | '20250713135900_add_role_to_users_table.sql', +sparkyfitness-server | '20250713142300_add_oidc_config_fields.sql', +sparkyfitness-server | '20250714000000_create_session_table.sql', +sparkyfitness-server | '20250714175824_add_api_key_tag_to_ai_service_settings.sql', +sparkyfitness-server | '20250717190700_add_cascading_deletes.sql', +sparkyfitness-server | '20250717233929_add_is_quick_food_to_foods.sql', +sparkyfitness-server | '20250718190226_add_food_display_limit_to_user_preferences.sql', +sparkyfitness-server | '20250719131500_add_meal_percentages.sql', +sparkyfitness-server | '20250719215400_add_login_management_to_oidc_settings.sql', +sparkyfitness-server | '20250720010000_create_user_nutrient_display_preferences.sql', +sparkyfitness-server | '20250720201800_rename_food_display_limit_to_item_display_limit.sql', +sparkyfitness-server | '20250720220000_add_water_tracking_features.sql', +sparkyfitness-server | '20250720233836_alter_water_goal_ml_to_numeric.sql', +sparkyfitness-server | '20250721000000_add_servings_per_container_to_water_containers.sql', +sparkyfitness-server | '20250721000000_alter_water_container_volume_to_numeric.sql', +sparkyfitness-server | '20250721014900_alter_water_ml_to_numeric.sql', +sparkyfitness-server | '20250819062400_add_mealie_provider_type.sql', +sparkyfitness-server | '20250819083500_add_base_url_to_external_data_providers.sql', +sparkyfitness-server | '202508201215_add_garmin_integration_schema.sql', +sparkyfitness-server | '20250821090000_update_external_data_providers_provider_type_check.sql', +sparkyfitness-server | '20250821091500_add_garth_token_dump_to_external_data_providers.sql', +sparkyfitness-server | '20250821102000_remove_redundant_token_fields_from_external_data_providers.sql', +sparkyfitness-server | '20250831063900_create_mood_entries_table.sql', +sparkyfitness-server | '20250927180257_alter_exercises_table.sql', +sparkyfitness-server | '20250927212000_add_free_exercise_db_to_provider_type_check.sql', +sparkyfitness-server | '20250930002100_add_sets_reps_weight_to_exercise_entries.sql', +sparkyfitness-server | '20251001232600_add_gender_to_users_table.sql', +sparkyfitness-server | '20251002182306_create_backup_settings_table.sql', +sparkyfitness-server | '20251002224500_add_password_reset_to_users_table.sql', +sparkyfitness-server | '20251006021609_add_glycemic_index_to_foods_and_food_variants.sql', +sparkyfitness-server | '20251006220500_create_admin_activity_logs_table.sql', +sparkyfitness-server | '20251008224256_add_workout_features.sql', +sparkyfitness-server | '20251012225400_add_primary_keys_to_workout_tables.sql', +sparkyfitness-server | '20251012225500_add_multiple_sets_to_presets.sql', +sparkyfitness-server | '20251012225900_add_multiple_sets_to_plans.sql', +sparkyfitness-server | '20251012230000_add_multiple_sets_to_exercise_entries.sql', +sparkyfitness-server | '20251015223200_convert_weights_to_kg_and_set_default.sql', +sparkyfitness-server | '202510170132_add_text_measurements.sql', +sparkyfitness-server | '20251017200900_add_multiple_oidc_providers.sql', +sparkyfitness-server | '20251017204200_create_global_settings.sql', +sparkyfitness-server | '20251018001151_add_bmr_and_bodyfat_preferences.sql', +sparkyfitness-server | '20251018223700_add_signing_alg_to_oidc_providers.sql', +sparkyfitness-server | '20251019013200_merged_schema_and_data.sql', +sparkyfitness-server | '20251019013300_merged_rls_policies.sql', +sparkyfitness-server | '20251019154515_update_rls_policies_for_shared_items.sql', +sparkyfitness-server | '20251019203500_fix_rls_permissions_for_public_foods.sql', +sparkyfitness-server | '20251019204000_correct_variant_rls_policy.sql', +sparkyfitness-server | '20251019212500_update_measurement_rls_policies.sql', +sparkyfitness-server | '20251019222100_add_audit_columns_to_measurements.sql', +sparkyfitness-server | '20251020001000_fix_family_access_insert_policy.sql', +sparkyfitness-server | '20251020022000_set_default_shared_with_public.sql', +sparkyfitness-server | '20251020022200_update_rls_policies.sql', +sparkyfitness-server | '20251020022500_fix_food_select_policy.sql', +sparkyfitness-server | '20251020030000_simplify_food_select_policy.sql', +sparkyfitness-server | '20251020031000_update_food_select_policy_with_sharing.sql', +sparkyfitness-server | '20251020032200_add_all_owner_centric_policies.sql', +sparkyfitness-server | '20251020033400_add_food_variants_rls_policy.sql', +sparkyfitness-server | '20251020033700_fix_food_variants_rls_policy.sql', +sparkyfitness-server | '20251020230839_fix_family_access_rls_policies.sql', +sparkyfitness-server | '20251021025423_restrict_family_access_select_policy.sql', +sparkyfitness-server | '20251021034700_add_public_sharing_to_external_providers.sql', +sparkyfitness-server | '20251022201000_fix_exercise_rls_policy.sql', +sparkyfitness-server | '20251022203000_snapshot_exercise_details_in_entries.sql', +sparkyfitness-server | '20251023120500_update_external_providers_select_policy_for_public.sql', +sparkyfitness-server | '20251023221000_update_meals_rls_policy.sql', +sparkyfitness-server | '20251023221500_update_meal_plan_template_assignments_rls_policy.sql', +sparkyfitness-server | '20251023221501_add_meal_id_to_food_entries.sql', +sparkyfitness-server | '20251024230330_add_withings_fields_to_external_data_providers.sql', +sparkyfitness-server | '20251025210900_add_source_to_custom_measurements.sql', +sparkyfitness-server | '20251026125900_add_distance_and_hr_to_exercise_entries_activity_details.sql', +sparkyfitness-server | '202510310132_add_language_to_user_preferences.sql', +sparkyfitness-server | '20251101151100_create_sleep_entries_table.sql', +sparkyfitness-server | '20251103000000_add_onboarding_schema.sql', +sparkyfitness-server | '20251112000000_add_display_name_to_custom_categories.sql', +sparkyfitness-server | '20251114205134_create_exercise_preset_entries_table.sql', +sparkyfitness-server | '20251115003147_add_source_to_exercise_preset_entries.sql', +sparkyfitness-server | '20251115003301_add_exercise_preset_entry_id_to_activity_details.sql', +sparkyfitness-server | '20251115004027_alter_exercise_entry_id_nullable_in_activity_details.sql', +sparkyfitness-server | '20251120011100_add_mfa_magic_link_columns.sql', +sparkyfitness-server | '20251121011500_add_email_mfa_columns_to_users.sql', +sparkyfitness-server | '202511220110_add_default_external_data_providers.sql', +sparkyfitness-server | '202511232110_delete_raw_stress_data_categories.sql', +sparkyfitness-server | '202511270109_add_calorie_goal_adjustment_mode_to_user_preferences.sql', +sparkyfitness-server | '20251127194107_create_food_entry_meals_and_link_food_entries.sql', +sparkyfitness-server | '20251127194108_migrate_aggregated_food_entries_to_food_entry_meals.sql', +sparkyfitness-server | '20251128030115_add_tandoor_provider_type.sql', +sparkyfitness-server | '20251205000000_add_energy_unit_to_user_preferences.sql', +sparkyfitness-server | '20251206000000_add_nutrient_calculation_algorithms.sql', +sparkyfitness-server | '20251206000001_add_serving_size_to_meals.sql', +sparkyfitness-server | '20251207000001_add_default_meal_quantity.sql', +sparkyfitness-server | '20251215005329_add_usda_to_provider_type_check.sql', +sparkyfitness-server | '20251221000000_create_fasting_logs.sql', +sparkyfitness-server | '20251221010000_drop_mood_weight_from_fasting_logs.sql', +sparkyfitness-server | '20251226150700_add_mobile_health_data_features.sql', +sparkyfitness-server | '20251228000000_add_custom_nutrients_tables.sql', +sparkyfitness-server | ... 74 more items +sparkyfitness-server | ] +sparkyfitness-server | [2026-10-01T19:41:51.653Z] [INFO] Applying migration: 20260623000000_add_measurement_decimal_places.sql +sparkyfitness-server | [2026-10-01T19:41:51.663Z] [INFO] Successfully applied migration: 20260623000000_add_measurement_decimal_places.sql +sparkyfitness-server | [2026-10-01T19:41:51.663Z] [INFO] Applying migration: 20260624000000_add_medication_glp1_schema.sql +sparkyfitness-server | [2026-10-01T19:41:51.790Z] [INFO] Successfully applied migration: 20260624000000_add_medication_glp1_schema.sql +sparkyfitness-server | [2026-10-01T19:41:51.790Z] [INFO] Applying migration: 20260625000000_add_chat_tool_profile_to_ai_service_settings.sql +sparkyfitness-server | [2026-10-01T19:41:51.800Z] [INFO] Successfully applied migration: 20260625000000_add_chat_tool_profile_to_ai_service_settings.sql +sparkyfitness-server | [2026-10-01T19:41:51.800Z] [INFO] Applying migration: 20260628000000_convert_exercise_durations_to_numeric.sql +sparkyfitness-server | [2026-10-01T19:41:51.829Z] [INFO] Successfully applied migration: 20260628000000_convert_exercise_durations_to_numeric.sql +sparkyfitness-server | [2026-10-01T19:41:51.829Z] [INFO] Applying migration: 20260628120000_add_vision_ai_service_pointers.sql +sparkyfitness-server | [2026-10-01T19:41:51.838Z] [INFO] Successfully applied migration: 20260628120000_add_vision_ai_service_pointers.sql +sparkyfitness-server | [2026-10-01T19:41:51.838Z] [INFO] Applying migration: 20260630000000_add_custom_nutrient_aliases.sql +sparkyfitness-server | [2026-10-01T19:41:51.843Z] [INFO] Successfully applied migration: 20260630000000_add_custom_nutrient_aliases.sql +sparkyfitness-server | [2026-10-01T19:41:51.844Z] [INFO] Applying migration: 20260630000000_add_onboarding_skipped.sql +sparkyfitness-server | [2026-10-01T19:41:51.849Z] [INFO] Successfully applied migration: 20260630000000_add_onboarding_skipped.sql +sparkyfitness-server | [2026-10-01T19:41:51.849Z] [INFO] Applying migration: 20260701000000_add_child_meal_to_meal_foods.sql +sparkyfitness-server | [2026-10-01T19:41:51.867Z] [INFO] Successfully applied migration: 20260701000000_add_child_meal_to_meal_foods.sql +sparkyfitness-server | [2026-10-01T19:41:51.867Z] [INFO] Applying migration: 20260702180000_add_cycle_tracking_schema.sql +sparkyfitness-server | [2026-10-01T19:41:51.989Z] [INFO] Successfully applied migration: 20260702180000_add_cycle_tracking_schema.sql +sparkyfitness-server | [2026-10-01T19:41:51.989Z] [INFO] Applying migration: 20260705000000_fix_googlehealth_sleep_date_anchor.sql +sparkyfitness-server | [2026-10-01T19:41:51.995Z] [INFO] Successfully applied migration: 20260705000000_fix_googlehealth_sleep_date_anchor.sql +sparkyfitness-server | [2026-10-01T19:41:52.006Z] [INFO] Ensuring permissions for role: "sparkyapp" +sparkyfitness-server | [2026-10-01T19:41:52.042Z] [INFO] Successfully ensured permissions for role: "sparkyapp" +sparkyfitness-server | [2026-10-01T19:41:52.042Z] [INFO] Permissions granted to application user. +sparkyfitness-server | [2026-10-01T19:41:52.043Z] [INFO] Applying all RLS policies from rls_policies.sql... +sparkyfitness-server | [2026-10-01T19:41:52.184Z] [INFO] Successfully applied all RLS policies. +sparkyfitness-server | [AUTH] Starting Better Auth mounting phase... +sparkyfitness-server | [AUTH] Better Auth handler successfully mounted. +sparkyfitness-server | [AUTH] Synced trusted SSO providers for auto-linking: [] +sparkyfitness-server | DEBUG: Server started and listening on port 3010 +sparkyfitness-server | [2026-10-01T19:41:52.250Z] [INFO] SparkyFitnessServer listening on port 3010 +sparkyfitness-server | View API documentation at: /api/api-docs/swagger +sparkyfitness-server | [2026-10-01T19:41:52.258Z] [INFO] [CRON] Scheduled backups disabled — skipping schedule +sparkyfitness-server | [2026-10-01T19:42:12.021Z] [INFO] Incoming request: GET /api/health (Path: /api/health) +sparkyfitness-server | [2026-10-01T19:42:42.150Z] [INFO] Incoming request: GET /api/health (Path: /api/health) diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-states.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-states.json new file mode 100644 index 00000000..1f30e9d3 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/to-states.json @@ -0,0 +1,20 @@ +{ + "sparkyfitness": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + }, + "sparkyfitness-db": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + }, + "sparkyfitness-server": { + "status": "running", + "health": "healthy", + "restarts": 0, + "exit": 0 + } +} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/verdict.json b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/verdict.json new file mode 100644 index 00000000..c526a151 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/evidence/MV-sparkyfitness/verdict.json @@ -0,0 +1,86 @@ +{ + "harness_version": 4, + "edge": "MV-sparkyfitness", + "app": "sparkyfitness", + "note": "night 2026-09-23 within-a-major move: sparkyfitness-server=codewithcj/sparkyfitness_server:v0.17.3, sparkyfitness-frontend=codewithcj/sparkyfitness:v0.17.3", + "from": { + "sparkyfitness-db": "postgres:18-alpine", + "sparkyfitness-server": "codewithcj/sparkyfitness_server:v0.17.2", + "sparkyfitness-frontend": "codewithcj/sparkyfitness:v0.17.2" + }, + "to": { + "sparkyfitness-db": "postgres:18-alpine", + "sparkyfitness-server": "codewithcj/sparkyfitness_server:v0.17.3", + "sparkyfitness-frontend": "codewithcj/sparkyfitness:v0.17.3" + }, + "verdict": "proven", + "seed_read_before": true, + "seed_read_after": true, + "healthy_after": true, + "migration_observed": "\u001b[2Ksparkyfitness-server | [2026-10-01T19:41:51.644Z] [INFO] Ensured schema_migrations table exists.", + "abort": "starts-and-serves", + "abort_detail": null, + "engine_state_after": { + "sparkyfitness-db": { + "image": "postgres:18-alpine", + "probe": "datadir major version", + "answer": "18", + "probe_rc": 0 + } + }, + "memory": { + "soak_s": 607.9, + "requested_s": 600, + "requests": 12076, + "codes": { + "200": 12076 + }, + "first_kill": null, + "containers": { + "sparkyfitness": { + "limit": 268435456, + "peak": 13131776, + "peak_pct": 0.049, + "anon_peak_sampled": 6139904, + "anon_peak_pct": 0.023, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + }, + "sparkyfitness-db": { + "limit": 536870912, + "peak": 432951296, + "peak_pct": 0.806, + "anon_peak_sampled": 283111424, + "anon_peak_pct": 0.527, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + }, + "sparkyfitness-server": { + "limit": 1073741824, + "peak": 447664128, + "peak_pct": 0.417, + "anon_peak_sampled": 404697088, + "anon_peak_pct": 0.377, + "oom_kills": 0, + "restarts": 0, + "oomkilled_flag": false, + "measured": true + } + }, + "unmeasured": [], + "load": "reached" + }, + "marks": [], + "bench_overrides": null, + "duration_s": 31.1, + "measured_at": "2026-10-01T19:53:57Z", + "evidence": "evidence/MV-sparkyfitness", + "scratch_cleared": [], + "files_changed": [], + "files_changed_detail": [], + "total_s": 811.7 +} \ No newline at end of file diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/mem-sparkyfitness.csv b/documentation/audits/visitors-2026-10-01/C/bench/move/mem-sparkyfitness.csv new file mode 100644 index 00000000..481f8b5c --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/mem-sparkyfitness.csv @@ -0,0 +1,1063 @@ +epoch,name,id,anon,current,swap,oom_kill,limit,restarts +1790883626,sparkyfitness-db,7150f7f09c31,5181440,50188288,0,0,536870912,0 +1790883628,sparkyfitness-db,7150f7f09c31,5210112,81104896,0,0,536870912,0 +1790883630,sparkyfitness-db,7150f7f09c31,5210112,81104896,0,0,536870912,0 +1790883633,sparkyfitness-db,7150f7f09c31,5210112,81100800,0,0,536870912,0 +1790883635,sparkyfitness-db,7150f7f09c31,5210112,81100800,0,0,536870912,0 +1790883637,sparkyfitness-db,7150f7f09c31,5259264,82227200,0,0,536870912,0 +1790883637,sparkyfitness-server,fc73a15b1520,25825280,28921856,0,0,1073741824,0 +1790883639,sparkyfitness-db,7150f7f09c31,5259264,82219008,0,0,536870912,0 +1790883639,sparkyfitness-server,fc73a15b1520,113143808,122548224,0,0,1073741824,0 +1790883641,sparkyfitness-db,7150f7f09c31,5259264,82219008,0,0,536870912,0 +1790883641,sparkyfitness-server,fc73a15b1520,151384064,165408768,0,0,1073741824,0 +1790883643,sparkyfitness-db,7150f7f09c31,5271552,82481152,0,0,536870912,0 +1790883643,sparkyfitness-server,fc73a15b1520,164077568,179339264,0,0,1073741824,0 +1790883645,sparkyfitness-db,7150f7f09c31,5271552,82235392,0,0,536870912,0 +1790883645,sparkyfitness-server,fc73a15b1520,256995328,279044096,0,0,1073741824,0 +1790883647,sparkyfitness-db,7150f7f09c31,10022912,95522816,0,0,536870912,0 +1790883647,sparkyfitness-server,fc73a15b1520,338108416,363765760,0,0,1073741824,0 +1790883650,sparkyfitness-db,7150f7f09c31,14237696,121262080,0,0,536870912,0 +1790883650,sparkyfitness-server,fc73a15b1520,343478272,368320512,0,0,1073741824,0 +1790883652,sparkyfitness-db,7150f7f09c31,14237696,121262080,0,0,536870912,0 +1790883652,sparkyfitness-server,fc73a15b1520,343478272,368824320,0,0,1073741824,0 +1790883654,sparkyfitness-db,7150f7f09c31,14237696,121221120,0,0,536870912,0 +1790883654,sparkyfitness-server,fc73a15b1520,343478272,368316416,0,0,1073741824,0 +1790883656,sparkyfitness-db,7150f7f09c31,14237696,121221120,0,0,536870912,0 +1790883656,sparkyfitness-server,fc73a15b1520,343478272,368316416,0,0,1073741824,0 +1790883658,sparkyfitness-db,7150f7f09c31,14245888,122040320,0,0,536870912,0 +1790883658,sparkyfitness-server,fc73a15b1520,343478272,369090560,0,0,1073741824,0 +1790883660,sparkyfitness-db,7150f7f09c31,14245888,121675776,0,0,536870912,0 +1790883660,sparkyfitness-server,fc73a15b1520,344064000,369356800,0,0,1073741824,0 +1790883662,sparkyfitness-db,7150f7f09c31,14245888,122064896,0,0,536870912,0 +1790883662,sparkyfitness-server,fc73a15b1520,343486464,368816128,0,0,1073741824,0 +1790883664,sparkyfitness-db,7150f7f09c31,14245888,122056704,0,0,536870912,0 +1790883665,sparkyfitness-server,fc73a15b1520,343486464,368582656,0,0,1073741824,0 +1790883667,sparkyfitness-db,7150f7f09c31,14245888,122662912,0,0,536870912,0 +1790883667,sparkyfitness-server,fc73a15b1520,343486464,368324608,0,0,1073741824,0 +1790883669,sparkyfitness-db,7150f7f09c31,14245888,122257408,0,0,536870912,0 +1790883669,sparkyfitness-server,fc73a15b1520,343695360,368529408,0,0,1073741824,0 +1790883669,sparkyfitness,66426a76164e,5095424,6430720,0,0,268435456,0 +1790883671,sparkyfitness-db,7150f7f09c31,14245888,122257408,0,0,536870912,0 +1790883671,sparkyfitness-server,fc73a15b1520,343695360,368533504,0,0,1073741824,0 +1790883671,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883673,sparkyfitness-db,7150f7f09c31,14245888,122519552,0,0,536870912,0 +1790883673,sparkyfitness-server,fc73a15b1520,343695360,370573312,0,0,1073741824,0 +1790883673,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883675,sparkyfitness-db,7150f7f09c31,14245888,122261504,0,0,536870912,0 +1790883675,sparkyfitness-server,fc73a15b1520,343695360,370823168,0,0,1073741824,0 +1790883675,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883677,sparkyfitness-db,7150f7f09c31,14245888,123310080,0,0,536870912,0 +1790883677,sparkyfitness-server,fc73a15b1520,343695360,370319360,0,0,1073741824,0 +1790883678,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883680,sparkyfitness-db,7150f7f09c31,5324800,116318208,0,0,536870912,0 +1790883680,sparkyfitness-server,fc73a15b1520,343703552,370499584,0,0,1073741824,0 +1790883680,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883682,sparkyfitness-db,7150f7f09c31,5324800,116318208,0,0,536870912,0 +1790883682,sparkyfitness-server,fc73a15b1520,343703552,370532352,0,0,1073741824,0 +1790883682,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883684,sparkyfitness-db,7150f7f09c31,5324800,116142080,0,0,536870912,0 +1790883684,sparkyfitness-server,fc73a15b1520,343707648,370307072,0,0,1073741824,0 +1790883684,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883686,sparkyfitness-db,7150f7f09c31,5324800,116076544,0,0,536870912,0 +1790883686,sparkyfitness-server,fc73a15b1520,343707648,370540544,0,0,1073741824,0 +1790883686,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883688,sparkyfitness-db,7150f7f09c31,5324800,116109312,0,0,536870912,0 +1790883688,sparkyfitness-server,fc73a15b1520,343707648,370307072,0,0,1073741824,0 +1790883688,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883690,sparkyfitness-db,7150f7f09c31,5324800,116109312,0,0,536870912,0 +1790883690,sparkyfitness-server,fc73a15b1520,343707648,370581504,0,0,1073741824,0 +1790883690,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883693,sparkyfitness-db,7150f7f09c31,5324800,116097024,0,0,536870912,0 +1790883693,sparkyfitness-server,fc73a15b1520,343707648,370319360,0,0,1073741824,0 +1790883693,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883695,sparkyfitness-db,7150f7f09c31,5324800,116097024,0,0,536870912,0 +1790883695,sparkyfitness-server,fc73a15b1520,343707648,370831360,0,0,1073741824,0 +1790883695,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883697,sparkyfitness-db,7150f7f09c31,5328896,116649984,0,0,536870912,0 +1790883697,sparkyfitness-server,fc73a15b1520,343851008,370733056,0,0,1073741824,0 +1790883697,sparkyfitness,66426a76164e,5095424,6426624,0,0,268435456,0 +1790883699,sparkyfitness-db,7150f7f09c31,12771328,126259200,0,0,536870912,0 +1790883699,sparkyfitness-server,fc73a15b1520,344616960,371589120,0,0,1073741824,0 +1790883699,sparkyfitness,66426a76164e,5226496,6836224,0,0,268435456,0 +1790883701,sparkyfitness-db,7150f7f09c31,5349376,117989376,0,0,536870912,0 +1790883703,sparkyfitness-db,7150f7f09c31,5349376,117989376,0,0,536870912,0 +1790883703,sparkyfitness-server,92ea34048581,110911488,119500800,0,0,1073741824,0 +1790883705,sparkyfitness-db,7150f7f09c31,5349376,117989376,0,0,536870912,0 +1790883705,sparkyfitness-server,92ea34048581,161239040,174600192,0,0,1073741824,0 +1790883708,sparkyfitness-db,7150f7f09c31,5349376,118104064,0,0,536870912,0 +1790883708,sparkyfitness-server,92ea34048581,161665024,176009216,0,0,1073741824,0 +1790883710,sparkyfitness-db,7150f7f09c31,5349376,117997568,0,0,536870912,0 +1790883710,sparkyfitness-server,92ea34048581,248139776,268984320,0,0,1073741824,0 +1790883712,sparkyfitness-db,7150f7f09c31,11395072,127848448,0,0,536870912,0 +1790883712,sparkyfitness-server,92ea34048581,340537344,365748224,0,0,1073741824,0 +1790883714,sparkyfitness-db,7150f7f09c31,11395072,127545344,0,0,536870912,0 +1790883714,sparkyfitness-server,92ea34048581,340537344,365121536,0,0,1073741824,0 +1790883716,sparkyfitness-db,7150f7f09c31,11395072,127545344,0,0,536870912,0 +1790883716,sparkyfitness-server,92ea34048581,340537344,365379584,0,0,1073741824,0 +1790883718,sparkyfitness-db,7150f7f09c31,11395072,127434752,0,0,536870912,0 +1790883718,sparkyfitness-server,92ea34048581,340537344,365350912,0,0,1073741824,0 +1790883720,sparkyfitness-db,7150f7f09c31,11395072,127426560,0,0,536870912,0 +1790883720,sparkyfitness-server,92ea34048581,340537344,365379584,0,0,1073741824,0 +1790883722,sparkyfitness-db,7150f7f09c31,11395072,127684608,0,0,536870912,0 +1790883723,sparkyfitness-server,92ea34048581,340537344,365117440,0,0,1073741824,0 +1790883725,sparkyfitness-db,7150f7f09c31,11395072,127422464,0,0,536870912,0 +1790883725,sparkyfitness-server,92ea34048581,340537344,365649920,0,0,1073741824,0 +1790883727,sparkyfitness-db,7150f7f09c31,11395072,128024576,0,0,536870912,0 +1790883727,sparkyfitness-server,92ea34048581,340541440,365125632,0,0,1073741824,0 +1790883729,sparkyfitness-db,7150f7f09c31,11395072,127631360,0,0,536870912,0 +1790883729,sparkyfitness-server,92ea34048581,340545536,365649920,0,0,1073741824,0 +1790883731,sparkyfitness-db,7150f7f09c31,11395072,127627264,0,0,536870912,0 +1790883731,sparkyfitness-server,92ea34048581,340549632,365129728,0,0,1073741824,0 +1790883733,sparkyfitness-db,7150f7f09c31,11395072,127627264,0,0,536870912,0 +1790883733,sparkyfitness-server,92ea34048581,340692992,365535232,0,0,1073741824,0 +1790883733,sparkyfitness,44fb9597d34d,5115904,6508544,0,0,268435456,0 +1790883735,sparkyfitness-db,7150f7f09c31,11395072,127627264,0,0,536870912,0 +1790883735,sparkyfitness-server,92ea34048581,340692992,365604864,0,0,1073741824,0 +1790883735,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883737,sparkyfitness-db,7150f7f09c31,11395072,127844352,0,0,536870912,0 +1790883737,sparkyfitness-server,92ea34048581,340697088,365858816,0,0,1073741824,0 +1790883738,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883740,sparkyfitness-db,7150f7f09c31,11395072,127688704,0,0,536870912,0 +1790883740,sparkyfitness-server,92ea34048581,340697088,367493120,0,0,1073741824,0 +1790883740,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883742,sparkyfitness-db,7150f7f09c31,9900032,126205952,0,0,536870912,0 +1790883742,sparkyfitness-server,92ea34048581,340701184,367763456,0,0,1073741824,0 +1790883742,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883744,sparkyfitness-db,7150f7f09c31,5349376,121102336,0,0,536870912,0 +1790883744,sparkyfitness-server,92ea34048581,340717568,369926144,0,0,1073741824,0 +1790883744,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883746,sparkyfitness-db,7150f7f09c31,5349376,121364480,0,0,536870912,0 +1790883746,sparkyfitness-server,92ea34048581,340717568,369926144,0,0,1073741824,0 +1790883746,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883748,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883748,sparkyfitness-server,92ea34048581,340721664,369930240,0,0,1073741824,0 +1790883748,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883750,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883750,sparkyfitness-server,92ea34048581,340848640,369868800,0,0,1073741824,0 +1790883750,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883753,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883753,sparkyfitness-server,92ea34048581,340725760,369614848,0,0,1073741824,0 +1790883753,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883755,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883755,sparkyfitness-server,92ea34048581,340725760,370139136,0,0,1073741824,0 +1790883755,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883757,sparkyfitness-db,7150f7f09c31,5349376,121552896,0,0,536870912,0 +1790883757,sparkyfitness-server,92ea34048581,340729856,369876992,0,0,1073741824,0 +1790883757,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883759,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883759,sparkyfitness-server,92ea34048581,340733952,370143232,0,0,1073741824,0 +1790883759,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883761,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883761,sparkyfitness-server,92ea34048581,340733952,370143232,0,0,1073741824,0 +1790883761,sparkyfitness,44fb9597d34d,5115904,6504448,0,0,268435456,0 +1790883763,sparkyfitness-db,7150f7f09c31,5349376,121348096,0,0,536870912,0 +1790883763,sparkyfitness-server,92ea34048581,340815872,370081792,0,0,1073741824,0 +1790883763,sparkyfitness,44fb9597d34d,5160960,6815744,0,0,268435456,0 +1790883766,sparkyfitness-db,7150f7f09c31,11571200,128364544,0,0,536870912,0 +1790883766,sparkyfitness-server,92ea34048581,345391104,374906880,0,0,1073741824,0 +1790883766,sparkyfitness,44fb9597d34d,5386240,7344128,0,0,268435456,0 +1790883768,sparkyfitness-db,7150f7f09c31,12750848,130138112,0,0,536870912,0 +1790883768,sparkyfitness-server,92ea34048581,348393472,377921536,0,0,1073741824,0 +1790883768,sparkyfitness,44fb9597d34d,5472256,8335360,0,0,268435456,0 +1790883770,sparkyfitness-db,7150f7f09c31,29233152,148705280,0,0,536870912,0 +1790883770,sparkyfitness-server,92ea34048581,350658560,380092416,0,0,1073741824,0 +1790883770,sparkyfitness,44fb9597d34d,5611520,8081408,0,0,268435456,0 +1790883772,sparkyfitness-db,7150f7f09c31,43638784,164495360,0,0,536870912,0 +1790883772,sparkyfitness-server,92ea34048581,351232000,380964864,0,0,1073741824,0 +1790883772,sparkyfitness,44fb9597d34d,5558272,7397376,0,0,268435456,0 +1790883774,sparkyfitness-db,7150f7f09c31,45371392,166039552,0,0,536870912,0 +1790883774,sparkyfitness-server,92ea34048581,351690752,381534208,0,0,1073741824,0 +1790883774,sparkyfitness,44fb9597d34d,5558272,8048640,0,0,268435456,0 +1790883776,sparkyfitness-db,7150f7f09c31,45678592,167215104,0,0,536870912,0 +1790883776,sparkyfitness-server,92ea34048581,359305216,389951488,0,0,1073741824,0 +1790883777,sparkyfitness,44fb9597d34d,5591040,7725056,0,0,268435456,0 +1790883779,sparkyfitness-db,7150f7f09c31,46051328,167292928,0,0,536870912,0 +1790883779,sparkyfitness-server,92ea34048581,369459200,399736832,0,0,1073741824,0 +1790883779,sparkyfitness,44fb9597d34d,5574656,7991296,0,0,268435456,0 +1790883781,sparkyfitness-db,7150f7f09c31,46284800,167383040,0,0,536870912,0 +1790883781,sparkyfitness-server,92ea34048581,380149760,410591232,0,0,1073741824,0 +1790883781,sparkyfitness,44fb9597d34d,5681152,8196096,0,0,268435456,0 +1790883783,sparkyfitness-db,7150f7f09c31,46235648,167624704,0,0,536870912,0 +1790883783,sparkyfitness-server,92ea34048581,388567040,419213312,0,0,1073741824,0 +1790883783,sparkyfitness,44fb9597d34d,5722112,7954432,0,0,268435456,0 +1790883785,sparkyfitness-db,7150f7f09c31,46157824,167530496,0,0,536870912,0 +1790883785,sparkyfitness-server,92ea34048581,397815808,428998656,0,0,1073741824,0 +1790883785,sparkyfitness,44fb9597d34d,5734400,8462336,0,0,268435456,0 +1790883787,sparkyfitness-db,7150f7f09c31,46456832,167731200,0,0,536870912,0 +1790883787,sparkyfitness-server,92ea34048581,403644416,435101696,0,0,1073741824,0 +1790883787,sparkyfitness,44fb9597d34d,5808128,8515584,0,0,268435456,0 +1790883789,sparkyfitness-db,7150f7f09c31,46399488,168304640,0,0,536870912,0 +1790883789,sparkyfitness-server,92ea34048581,403218432,434257920,0,0,1073741824,0 +1790883790,sparkyfitness,44fb9597d34d,5783552,7954432,0,0,268435456,0 +1790883792,sparkyfitness-db,7150f7f09c31,46641152,167944192,0,0,536870912,0 +1790883792,sparkyfitness-server,92ea34048581,403845120,435449856,0,0,1073741824,0 +1790883792,sparkyfitness,44fb9597d34d,5738496,8486912,0,0,268435456,0 +1790883794,sparkyfitness-db,7150f7f09c31,46534656,167968768,0,0,536870912,0 +1790883794,sparkyfitness-server,92ea34048581,405467136,436686848,0,0,1073741824,0 +1790883794,sparkyfitness,44fb9597d34d,5791744,8744960,0,0,268435456,0 +1790883796,sparkyfitness-db,7150f7f09c31,46444544,168308736,0,0,536870912,0 +1790883796,sparkyfitness-server,92ea34048581,404254720,435769344,0,0,1073741824,0 +1790883796,sparkyfitness,44fb9597d34d,5791744,8732672,0,0,268435456,0 +1790883798,sparkyfitness-db,7150f7f09c31,47140864,169418752,0,0,536870912,0 +1790883798,sparkyfitness-server,92ea34048581,405577728,436912128,0,0,1073741824,0 +1790883798,sparkyfitness,44fb9597d34d,5742592,7581696,0,0,268435456,0 +1790883800,sparkyfitness-db,7150f7f09c31,46546944,168235008,0,0,536870912,0 +1790883800,sparkyfitness-server,92ea34048581,405463040,437092352,0,0,1073741824,0 +1790883800,sparkyfitness,44fb9597d34d,5791744,8527872,0,0,268435456,0 +1790883803,sparkyfitness-db,7150f7f09c31,40218624,162316288,0,0,536870912,0 +1790883803,sparkyfitness-server,92ea34048581,406872064,438579200,0,0,1073741824,0 +1790883803,sparkyfitness,44fb9597d34d,5799936,8253440,0,0,268435456,0 +1790883805,sparkyfitness-db,7150f7f09c31,44929024,166920192,0,0,536870912,0 +1790883805,sparkyfitness-server,92ea34048581,406315008,437772288,0,0,1073741824,0 +1790883805,sparkyfitness,44fb9597d34d,5820416,8867840,0,0,268435456,0 +1790883807,sparkyfitness-db,7150f7f09c31,44953600,167366656,0,0,536870912,0 +1790883807,sparkyfitness-server,92ea34048581,406732800,438091776,0,0,1073741824,0 +1790883807,sparkyfitness,44fb9597d34d,5771264,8708096,0,0,268435456,0 +1790883809,sparkyfitness-db,7150f7f09c31,45096960,167677952,0,0,536870912,0 +1790883809,sparkyfitness-server,92ea34048581,404631552,436473856,0,0,1073741824,0 +1790883809,sparkyfitness,44fb9597d34d,5828608,8892416,0,0,268435456,0 +1790883811,sparkyfitness-db,7150f7f09c31,49258496,172150784,0,0,536870912,0 +1790883811,sparkyfitness-server,92ea34048581,408027136,439566336,0,0,1073741824,0 +1790883811,sparkyfitness,44fb9597d34d,5869568,8896512,0,0,268435456,0 +1790883813,sparkyfitness-db,7150f7f09c31,48750592,171618304,0,0,536870912,0 +1790883813,sparkyfitness-server,92ea34048581,410521600,441757696,0,0,1073741824,0 +1790883813,sparkyfitness,44fb9597d34d,5832704,7909376,0,0,268435456,0 +1790883816,sparkyfitness-db,7150f7f09c31,48635904,171356160,0,0,536870912,0 +1790883816,sparkyfitness-server,92ea34048581,374231040,404619264,0,0,1073741824,0 +1790883816,sparkyfitness,44fb9597d34d,5844992,8597504,0,0,268435456,0 +1790883818,sparkyfitness-db,7150f7f09c31,48832512,171679744,0,0,536870912,0 +1790883818,sparkyfitness-server,92ea34048581,374452224,405082112,0,0,1073741824,0 +1790883818,sparkyfitness,44fb9597d34d,5869568,8400896,0,0,268435456,0 +1790883820,sparkyfitness-db,7150f7f09c31,49123328,172130304,0,0,536870912,0 +1790883820,sparkyfitness-server,92ea34048581,378134528,408449024,0,0,1073741824,0 +1790883820,sparkyfitness,44fb9597d34d,5869568,8503296,0,0,268435456,0 +1790883822,sparkyfitness-db,7150f7f09c31,49430528,172363776,0,0,536870912,0 +1790883822,sparkyfitness-server,92ea34048581,374575104,405221376,0,0,1073741824,0 +1790883822,sparkyfitness,44fb9597d34d,5849088,8581120,0,0,268435456,0 +1790883824,sparkyfitness-db,7150f7f09c31,49049600,171814912,0,0,536870912,0 +1790883824,sparkyfitness-server,92ea34048581,373452800,404152320,0,0,1073741824,0 +1790883824,sparkyfitness,44fb9597d34d,5795840,8638464,0,0,268435456,0 +1790883826,sparkyfitness-db,7150f7f09c31,50114560,172765184,0,0,536870912,0 +1790883826,sparkyfitness-server,92ea34048581,374218752,404520960,0,0,1073741824,0 +1790883826,sparkyfitness,44fb9597d34d,5812224,8949760,0,0,268435456,0 +1790883829,sparkyfitness-db,7150f7f09c31,50135040,173264896,0,0,536870912,0 +1790883829,sparkyfitness-server,92ea34048581,376692736,407269376,0,0,1073741824,0 +1790883829,sparkyfitness,44fb9597d34d,5763072,7925760,0,0,268435456,0 +1790883831,sparkyfitness-db,7150f7f09c31,50143232,173023232,0,0,536870912,0 +1790883831,sparkyfitness-server,92ea34048581,376307712,406962176,0,0,1073741824,0 +1790883831,sparkyfitness,44fb9597d34d,5849088,8970240,0,0,268435456,0 +1790883833,sparkyfitness-db,7150f7f09c31,50450432,173674496,0,0,536870912,0 +1790883833,sparkyfitness-server,92ea34048581,372387840,403058688,0,0,1073741824,0 +1790883833,sparkyfitness,44fb9597d34d,5869568,9035776,0,0,268435456,0 +1790883835,sparkyfitness-db,7150f7f09c31,50458624,173625344,0,0,536870912,0 +1790883835,sparkyfitness-server,92ea34048581,376725504,407445504,0,0,1073741824,0 +1790883835,sparkyfitness,44fb9597d34d,5828608,8777728,0,0,268435456,0 +1790883837,sparkyfitness-db,7150f7f09c31,50139136,173420544,0,0,536870912,0 +1790883837,sparkyfitness-server,92ea34048581,373035008,403214336,0,0,1073741824,0 +1790883837,sparkyfitness,44fb9597d34d,5795840,8171520,0,0,268435456,0 +1790883839,sparkyfitness-db,7150f7f09c31,60952576,189284352,0,0,536870912,0 +1790883839,sparkyfitness-server,92ea34048581,372346880,403193856,0,0,1073741824,0 +1790883840,sparkyfitness,44fb9597d34d,5824512,8511488,0,0,268435456,0 +1790883842,sparkyfitness-db,7150f7f09c31,66998272,195645440,0,0,536870912,0 +1790883842,sparkyfitness-server,92ea34048581,373809152,404881408,0,0,1073741824,0 +1790883842,sparkyfitness,44fb9597d34d,5816320,8515584,0,0,268435456,0 +1790883844,sparkyfitness-db,7150f7f09c31,72851456,202014720,0,0,536870912,0 +1790883844,sparkyfitness-server,92ea34048581,373956608,404353024,0,0,1073741824,0 +1790883844,sparkyfitness,44fb9597d34d,5783552,8544256,0,0,268435456,0 +1790883846,sparkyfitness-db,7150f7f09c31,74162176,203694080,0,0,536870912,0 +1790883846,sparkyfitness-server,92ea34048581,373997568,404217856,0,0,1073741824,0 +1790883846,sparkyfitness,44fb9597d34d,5787648,8568832,0,0,268435456,0 +1790883848,sparkyfitness-db,7150f7f09c31,74149888,203530240,0,0,536870912,0 +1790883848,sparkyfitness-server,92ea34048581,377516032,408416256,0,0,1073741824,0 +1790883848,sparkyfitness,44fb9597d34d,5804032,8310784,0,0,268435456,0 +1790883850,sparkyfitness-db,7150f7f09c31,80371712,209674240,0,0,536870912,0 +1790883850,sparkyfitness-server,92ea34048581,374108160,404217856,0,0,1073741824,0 +1790883850,sparkyfitness,44fb9597d34d,5804032,7892992,0,0,268435456,0 +1790883852,sparkyfitness-db,7150f7f09c31,79351808,209350656,0,0,536870912,0 +1790883852,sparkyfitness-server,92ea34048581,376705024,406687744,0,0,1073741824,0 +1790883853,sparkyfitness,44fb9597d34d,5857280,8839168,0,0,268435456,0 +1790883855,sparkyfitness-db,7150f7f09c31,85692416,215793664,0,0,536870912,0 +1790883855,sparkyfitness-server,92ea34048581,374038528,404353024,0,0,1073741824,0 +1790883855,sparkyfitness,44fb9597d34d,5783552,8630272,0,0,268435456,0 +1790883857,sparkyfitness-db,7150f7f09c31,85737472,215871488,0,0,536870912,0 +1790883857,sparkyfitness-server,92ea34048581,373387264,403972096,0,0,1073741824,0 +1790883857,sparkyfitness,44fb9597d34d,5771264,8294400,0,0,268435456,0 +1790883859,sparkyfitness-db,7150f7f09c31,99024896,229908480,0,0,536870912,0 +1790883859,sparkyfitness-server,92ea34048581,376176640,406827008,0,0,1073741824,0 +1790883859,sparkyfitness,44fb9597d34d,5816320,8572928,0,0,268435456,0 +1790883861,sparkyfitness-db,7150f7f09c31,99512320,230752256,0,0,536870912,0 +1790883861,sparkyfitness-server,92ea34048581,375300096,405217280,0,0,1073741824,0 +1790883861,sparkyfitness,44fb9597d34d,5828608,8314880,0,0,268435456,0 +1790883863,sparkyfitness-db,7150f7f09c31,100810752,231829504,0,0,536870912,0 +1790883863,sparkyfitness-server,92ea34048581,378359808,409047040,0,0,1073741824,0 +1790883863,sparkyfitness,44fb9597d34d,5849088,8749056,0,0,268435456,0 +1790883865,sparkyfitness-db,7150f7f09c31,103043072,234758144,0,0,536870912,0 +1790883866,sparkyfitness-server,92ea34048581,375189504,405491712,0,0,1073741824,0 +1790883866,sparkyfitness,44fb9597d34d,5857280,8585216,0,0,268435456,0 +1790883868,sparkyfitness-db,7150f7f09c31,109330432,240414720,0,0,536870912,0 +1790883868,sparkyfitness-server,92ea34048581,372350976,402620416,0,0,1073741824,0 +1790883868,sparkyfitness,44fb9597d34d,5828608,8589312,0,0,268435456,0 +1790883870,sparkyfitness-db,7150f7f09c31,105934848,237051904,0,0,536870912,0 +1790883870,sparkyfitness-server,92ea34048581,373301248,403664896,0,0,1073741824,0 +1790883870,sparkyfitness,44fb9597d34d,5828608,8601600,0,0,268435456,0 +1790883872,sparkyfitness-db,7150f7f09c31,106770432,237957120,0,0,536870912,0 +1790883872,sparkyfitness-server,92ea34048581,374284288,404717568,0,0,1073741824,0 +1790883872,sparkyfitness,44fb9597d34d,5791744,8237056,0,0,268435456,0 +1790883874,sparkyfitness-db,7150f7f09c31,109154304,240758784,0,0,536870912,0 +1790883874,sparkyfitness-server,92ea34048581,378621952,408977408,0,0,1073741824,0 +1790883874,sparkyfitness,44fb9597d34d,5808128,8568832,0,0,268435456,0 +1790883876,sparkyfitness-db,7150f7f09c31,114003968,245940224,0,0,536870912,0 +1790883876,sparkyfitness-server,92ea34048581,372400128,402976768,0,0,1073741824,0 +1790883876,sparkyfitness,44fb9597d34d,5840896,8151040,0,0,268435456,0 +1790883879,sparkyfitness-db,7150f7f09c31,110006272,241766400,0,0,536870912,0 +1790883879,sparkyfitness-server,92ea34048581,376598528,407367680,0,0,1073741824,0 +1790883879,sparkyfitness,44fb9597d34d,5869568,8585216,0,0,268435456,0 +1790883881,sparkyfitness-db,7150f7f09c31,110936064,242647040,0,0,536870912,0 +1790883881,sparkyfitness-server,92ea34048581,374673408,405065728,0,0,1073741824,0 +1790883881,sparkyfitness,44fb9597d34d,5922816,8331264,0,0,268435456,0 +1790883883,sparkyfitness-db,7150f7f09c31,111390720,243085312,0,0,536870912,0 +1790883883,sparkyfitness-server,92ea34048581,374579200,405078016,0,0,1073741824,0 +1790883883,sparkyfitness,44fb9597d34d,5849088,8421376,0,0,268435456,0 +1790883885,sparkyfitness-db,7150f7f09c31,112033792,244101120,0,0,536870912,0 +1790883885,sparkyfitness-server,92ea34048581,379019264,409833472,0,0,1073741824,0 +1790883885,sparkyfitness,44fb9597d34d,5791744,8556544,0,0,268435456,0 +1790883887,sparkyfitness-db,7150f7f09c31,89563136,221724672,0,0,536870912,0 +1790883887,sparkyfitness-server,92ea34048581,373841920,403697664,0,0,1073741824,0 +1790883887,sparkyfitness,44fb9597d34d,5861376,8671232,0,0,268435456,0 +1790883889,sparkyfitness-db,7150f7f09c31,91480064,222126080,0,0,536870912,0 +1790883889,sparkyfitness-server,92ea34048581,374386688,405512192,0,0,1073741824,0 +1790883890,sparkyfitness,44fb9597d34d,6217728,8515584,0,0,268435456,0 +1790883892,sparkyfitness-db,7150f7f09c31,90464256,221528064,0,0,536870912,0 +1790883892,sparkyfitness-server,92ea34048581,375726080,405757952,0,0,1073741824,0 +1790883892,sparkyfitness,44fb9597d34d,5869568,8740864,0,0,268435456,0 +1790883894,sparkyfitness-db,7150f7f09c31,91738112,223436800,0,0,536870912,0 +1790883894,sparkyfitness-server,92ea34048581,377245696,407269376,0,0,1073741824,0 +1790883894,sparkyfitness,44fb9597d34d,5836800,8142848,0,0,268435456,0 +1790883896,sparkyfitness-db,7150f7f09c31,93130752,224382976,0,0,536870912,0 +1790883896,sparkyfitness-server,92ea34048581,377368576,408178688,0,0,1073741824,0 +1790883896,sparkyfitness,44fb9597d34d,5840896,8192000,0,0,268435456,0 +1790883898,sparkyfitness-db,7150f7f09c31,92491776,224182272,0,0,536870912,0 +1790883898,sparkyfitness-server,92ea34048581,374935552,405770240,0,0,1073741824,0 +1790883898,sparkyfitness,44fb9597d34d,5812224,8155136,0,0,268435456,0 +1790883900,sparkyfitness-db,7150f7f09c31,92733440,224403456,0,0,536870912,0 +1790883900,sparkyfitness-server,92ea34048581,376188928,406970368,0,0,1073741824,0 +1790883900,sparkyfitness,44fb9597d34d,5758976,7962624,0,0,268435456,0 +1790883902,sparkyfitness-db,7150f7f09c31,94052352,225177600,0,0,536870912,0 +1790883902,sparkyfitness-server,92ea34048581,377892864,408989696,0,0,1073741824,0 +1790883903,sparkyfitness,44fb9597d34d,5844992,8261632,0,0,268435456,0 +1790883905,sparkyfitness-db,7150f7f09c31,94187520,225587200,0,0,536870912,0 +1790883905,sparkyfitness-server,92ea34048581,373878784,404455424,0,0,1073741824,0 +1790883905,sparkyfitness,44fb9597d34d,6123520,8925184,0,0,268435456,0 +1790883907,sparkyfitness-db,7150f7f09c31,93913088,225288192,0,0,536870912,0 +1790883907,sparkyfitness-server,92ea34048581,376119296,406323200,0,0,1073741824,0 +1790883907,sparkyfitness,44fb9597d34d,5820416,8478720,0,0,268435456,0 +1790883909,sparkyfitness-db,7150f7f09c31,94384128,225681408,0,0,536870912,0 +1790883909,sparkyfitness-server,92ea34048581,373764096,404070400,0,0,1073741824,0 +1790883909,sparkyfitness,44fb9597d34d,5705728,8372224,0,0,268435456,0 +1790883911,sparkyfitness-db,7150f7f09c31,96776192,228687872,0,0,536870912,0 +1790883911,sparkyfitness-server,92ea34048581,377630720,408125440,0,0,1073741824,0 +1790883911,sparkyfitness,44fb9597d34d,5808128,8392704,0,0,268435456,0 +1790883913,sparkyfitness-db,7150f7f09c31,95305728,226701312,0,0,536870912,0 +1790883913,sparkyfitness-server,92ea34048581,377753600,407986176,0,0,1073741824,0 +1790883913,sparkyfitness,44fb9597d34d,5775360,8081408,0,0,268435456,0 +1790883915,sparkyfitness-db,7150f7f09c31,95301632,226422784,0,0,536870912,0 +1790883915,sparkyfitness-server,92ea34048581,375238656,406040576,0,0,1073741824,0 +1790883916,sparkyfitness,44fb9597d34d,5787648,8187904,0,0,268435456,0 +1790883918,sparkyfitness-db,7150f7f09c31,95453184,226947072,0,0,536870912,0 +1790883918,sparkyfitness-server,92ea34048581,376602624,407277568,0,0,1073741824,0 +1790883918,sparkyfitness,44fb9597d34d,5820416,8192000,0,0,268435456,0 +1790883920,sparkyfitness-db,7150f7f09c31,97124352,228655104,0,0,536870912,0 +1790883920,sparkyfitness-server,92ea34048581,376737792,407584768,0,0,1073741824,0 +1790883920,sparkyfitness,44fb9597d34d,5959680,8605696,0,0,268435456,0 +1790883922,sparkyfitness-db,7150f7f09c31,96149504,227561472,0,0,536870912,0 +1790883922,sparkyfitness-server,92ea34048581,373321728,403492864,0,0,1073741824,0 +1790883922,sparkyfitness,44fb9597d34d,5836800,8171520,0,0,268435456,0 +1790883924,sparkyfitness-db,7150f7f09c31,97939456,229744640,0,0,536870912,0 +1790883924,sparkyfitness-server,92ea34048581,371875840,402268160,0,0,1073741824,0 +1790883924,sparkyfitness,44fb9597d34d,5849088,8294400,0,0,268435456,0 +1790883926,sparkyfitness-db,7150f7f09c31,97460224,229306368,0,0,536870912,0 +1790883926,sparkyfitness-server,92ea34048581,373329920,403464192,0,0,1073741824,0 +1790883926,sparkyfitness,44fb9597d34d,5804032,8298496,0,0,268435456,0 +1790883928,sparkyfitness-db,7150f7f09c31,97513472,229994496,0,0,536870912,0 +1790883928,sparkyfitness-server,92ea34048581,375066624,405106688,0,0,1073741824,0 +1790883928,sparkyfitness,44fb9597d34d,5853184,8466432,0,0,268435456,0 +1790883931,sparkyfitness-db,7150f7f09c31,97415168,230051840,0,0,536870912,0 +1790883931,sparkyfitness-server,92ea34048581,375005184,405610496,0,0,1073741824,0 +1790883931,sparkyfitness,44fb9597d34d,5873664,8474624,0,0,268435456,0 +1790883933,sparkyfitness-db,7150f7f09c31,98054144,229896192,0,0,536870912,0 +1790883933,sparkyfitness-server,92ea34048581,377917440,407760896,0,0,1073741824,0 +1790883933,sparkyfitness,44fb9597d34d,5840896,8261632,0,0,268435456,0 +1790883935,sparkyfitness-db,7150f7f09c31,98189312,231440384,0,0,536870912,0 +1790883935,sparkyfitness-server,92ea34048581,374415360,405188608,0,0,1073741824,0 +1790883935,sparkyfitness,44fb9597d34d,5775360,8290304,0,0,268435456,0 +1790883937,sparkyfitness-db,7150f7f09c31,99262464,231825408,0,0,536870912,0 +1790883937,sparkyfitness-server,92ea34048581,373088256,403759104,0,0,1073741824,0 +1790883937,sparkyfitness,44fb9597d34d,5754880,8220672,0,0,268435456,0 +1790883939,sparkyfitness-db,7150f7f09c31,99549184,231968768,0,0,536870912,0 +1790883939,sparkyfitness-server,92ea34048581,379133952,408829952,0,0,1073741824,0 +1790883939,sparkyfitness,44fb9597d34d,5832704,8085504,0,0,268435456,0 +1790883941,sparkyfitness-db,7150f7f09c31,110284800,243802112,0,0,536870912,0 +1790883942,sparkyfitness-server,92ea34048581,373141504,403738624,0,0,1073741824,0 +1790883942,sparkyfitness,44fb9597d34d,6041600,8921088,0,0,268435456,0 +1790883944,sparkyfitness-db,7150f7f09c31,110628864,244441088,0,0,536870912,0 +1790883944,sparkyfitness-server,92ea34048581,376041472,406724608,0,0,1073741824,0 +1790883944,sparkyfitness,44fb9597d34d,5885952,8376320,0,0,268435456,0 +1790883946,sparkyfitness-db,7150f7f09c31,111108096,244752384,0,0,536870912,0 +1790883946,sparkyfitness-server,92ea34048581,371781632,401969152,0,0,1073741824,0 +1790883946,sparkyfitness,44fb9597d34d,5881856,8814592,0,0,268435456,0 +1790883948,sparkyfitness-db,7150f7f09c31,112685056,246276096,0,0,536870912,0 +1790883948,sparkyfitness-server,92ea34048581,371978240,402591744,0,0,1073741824,0 +1790883948,sparkyfitness,44fb9597d34d,5918720,8499200,0,0,268435456,0 +1790883950,sparkyfitness-db,7150f7f09c31,110682112,245039104,0,0,536870912,0 +1790883950,sparkyfitness-server,92ea34048581,376348672,406790144,0,0,1073741824,0 +1790883950,sparkyfitness,44fb9597d34d,5910528,8388608,0,0,268435456,0 +1790883952,sparkyfitness-db,7150f7f09c31,109039616,242438144,0,0,536870912,0 +1790883952,sparkyfitness-server,92ea34048581,372117504,402640896,0,0,1073741824,0 +1790883953,sparkyfitness,44fb9597d34d,6008832,8134656,0,0,268435456,0 +1790883955,sparkyfitness-db,7150f7f09c31,108826624,242585600,0,0,536870912,0 +1790883955,sparkyfitness-server,92ea34048581,383246336,413716480,0,0,1073741824,0 +1790883955,sparkyfitness,44fb9597d34d,5881856,8372224,0,0,268435456,0 +1790883957,sparkyfitness-db,7150f7f09c31,110170112,243900416,0,0,536870912,0 +1790883957,sparkyfitness-server,92ea34048581,379506688,410361856,0,0,1073741824,0 +1790883957,sparkyfitness,44fb9597d34d,6094848,8593408,0,0,268435456,0 +1790883959,sparkyfitness-db,7150f7f09c31,110682112,244785152,0,0,536870912,0 +1790883959,sparkyfitness-server,92ea34048581,386711552,417132544,0,0,1073741824,0 +1790883959,sparkyfitness,44fb9597d34d,5914624,8384512,0,0,268435456,0 +1790883961,sparkyfitness-db,7150f7f09c31,110895104,245612544,0,0,536870912,0 +1790883961,sparkyfitness-server,92ea34048581,389574656,419807232,0,0,1073741824,0 +1790883961,sparkyfitness,44fb9597d34d,5885952,8220672,0,0,268435456,0 +1790883963,sparkyfitness-db,7150f7f09c31,111296512,245903360,0,0,536870912,0 +1790883963,sparkyfitness-server,92ea34048581,387997696,418451456,0,0,1073741824,0 +1790883963,sparkyfitness,44fb9597d34d,5869568,8036352,0,0,268435456,0 +1790883966,sparkyfitness-db,7150f7f09c31,117653504,252219392,0,0,536870912,0 +1790883966,sparkyfitness-server,92ea34048581,380579840,411238400,0,0,1073741824,0 +1790883966,sparkyfitness,44fb9597d34d,5873664,8269824,0,0,268435456,0 +1790883968,sparkyfitness-db,7150f7f09c31,116928512,251240448,0,0,536870912,0 +1790883968,sparkyfitness-server,92ea34048581,385314816,415825920,0,0,1073741824,0 +1790883968,sparkyfitness,44fb9597d34d,5828608,8577024,0,0,268435456,0 +1790883970,sparkyfitness-db,7150f7f09c31,116133888,250171392,0,0,536870912,0 +1790883970,sparkyfitness-server,92ea34048581,382681088,413736960,0,0,1073741824,0 +1790883970,sparkyfitness,44fb9597d34d,5951488,8450048,0,0,268435456,0 +1790883972,sparkyfitness-db,7150f7f09c31,94994432,228360192,0,0,536870912,0 +1790883972,sparkyfitness-server,92ea34048581,387219456,418205696,0,0,1073741824,0 +1790883972,sparkyfitness,44fb9597d34d,5861376,8654848,0,0,268435456,0 +1790883974,sparkyfitness-db,7150f7f09c31,96911360,230420480,0,0,536870912,0 +1790883974,sparkyfitness-server,92ea34048581,387215360,418246656,0,0,1073741824,0 +1790883974,sparkyfitness,44fb9597d34d,5971968,8396800,0,0,268435456,0 +1790883976,sparkyfitness-db,7150f7f09c31,97640448,231419904,0,0,536870912,0 +1790883976,sparkyfitness-server,92ea34048581,382111744,412868608,0,0,1073741824,0 +1790883976,sparkyfitness,44fb9597d34d,5840896,8617984,0,0,268435456,0 +1790883979,sparkyfitness-db,7150f7f09c31,97665024,230936576,0,0,536870912,0 +1790883979,sparkyfitness-server,92ea34048581,389042176,419483648,0,0,1073741824,0 +1790883979,sparkyfitness,44fb9597d34d,5816320,8392704,0,0,268435456,0 +1790883981,sparkyfitness-db,7150f7f09c31,97198080,230895616,0,0,536870912,0 +1790883981,sparkyfitness-server,92ea34048581,382210048,412925952,0,0,1073741824,0 +1790883981,sparkyfitness,44fb9597d34d,5828608,8552448,0,0,268435456,0 +1790883983,sparkyfitness-db,7150f7f09c31,93581312,227475456,0,0,536870912,0 +1790883983,sparkyfitness-server,92ea34048581,385781760,416768000,0,0,1073741824,0 +1790883983,sparkyfitness,44fb9597d34d,5820416,8343552,0,0,268435456,0 +1790883985,sparkyfitness-db,7150f7f09c31,94793728,229376000,0,0,536870912,0 +1790883985,sparkyfitness-server,92ea34048581,391827456,422674432,0,0,1073741824,0 +1790883985,sparkyfitness,44fb9597d34d,5869568,8679424,0,0,268435456,0 +1790883987,sparkyfitness-db,7150f7f09c31,94879744,229646336,0,0,536870912,0 +1790883987,sparkyfitness-server,92ea34048581,392384512,423100416,0,0,1073741824,0 +1790883987,sparkyfitness,44fb9597d34d,5869568,7704576,0,0,268435456,0 +1790883989,sparkyfitness-db,7150f7f09c31,106786816,241938432,0,0,536870912,0 +1790883989,sparkyfitness-server,92ea34048581,386781184,417820672,0,0,1073741824,0 +1790883989,sparkyfitness,44fb9597d34d,6123520,9232384,0,0,268435456,0 +1790883992,sparkyfitness-db,7150f7f09c31,103514112,238825472,0,0,536870912,0 +1790883992,sparkyfitness-server,92ea34048581,384028672,415158272,0,0,1073741824,0 +1790883992,sparkyfitness,44fb9597d34d,5914624,8871936,0,0,268435456,0 +1790883994,sparkyfitness-db,7150f7f09c31,107802624,243744768,0,0,536870912,0 +1790883994,sparkyfitness-server,92ea34048581,391204864,422576128,0,0,1073741824,0 +1790883994,sparkyfitness,44fb9597d34d,5898240,8642560,0,0,268435456,0 +1790883996,sparkyfitness-db,7150f7f09c31,110878720,246939648,0,0,536870912,0 +1790883996,sparkyfitness-server,92ea34048581,380559360,411287552,0,0,1073741824,0 +1790883996,sparkyfitness,44fb9597d34d,5906432,8171520,0,0,268435456,0 +1790883998,sparkyfitness-db,7150f7f09c31,108851200,245129216,0,0,536870912,0 +1790883998,sparkyfitness-server,92ea34048581,382320640,412925952,0,0,1073741824,0 +1790883998,sparkyfitness,44fb9597d34d,5869568,8663040,0,0,268435456,0 +1790884000,sparkyfitness-db,7150f7f09c31,110288896,246439936,0,0,536870912,0 +1790884000,sparkyfitness-server,92ea34048581,383496192,414605312,0,0,1073741824,0 +1790884000,sparkyfitness,44fb9597d34d,5963776,8642560,0,0,268435456,0 +1790884002,sparkyfitness-db,7150f7f09c31,112082944,248066048,0,0,536870912,0 +1790884003,sparkyfitness-server,92ea34048581,389619712,421646336,0,0,1073741824,0 +1790884003,sparkyfitness,44fb9597d34d,6623232,9101312,0,0,268435456,0 +1790884005,sparkyfitness-db,7150f7f09c31,113729536,250310656,0,0,536870912,0 +1790884005,sparkyfitness-server,92ea34048581,391344128,421855232,0,0,1073741824,0 +1790884005,sparkyfitness,44fb9597d34d,5894144,8568832,0,0,268435456,0 +1790884007,sparkyfitness-db,7150f7f09c31,113266688,251473920,0,0,536870912,0 +1790884007,sparkyfitness-server,92ea34048581,391413760,422313984,0,0,1073741824,0 +1790884007,sparkyfitness,44fb9597d34d,5980160,8749056,0,0,268435456,0 +1790884009,sparkyfitness-db,7150f7f09c31,117952512,254791680,0,0,536870912,0 +1790884009,sparkyfitness-server,92ea34048581,389849088,420450304,0,0,1073741824,0 +1790884009,sparkyfitness,44fb9597d34d,5853184,8581120,0,0,268435456,0 +1790884011,sparkyfitness-db,7150f7f09c31,113483776,250535936,0,0,536870912,0 +1790884011,sparkyfitness-server,92ea34048581,393609216,424374272,0,0,1073741824,0 +1790884011,sparkyfitness,44fb9597d34d,5820416,8536064,0,0,268435456,0 +1790884013,sparkyfitness-db,7150f7f09c31,116482048,253579264,0,0,536870912,0 +1790884013,sparkyfitness-server,92ea34048581,382976000,413548544,0,0,1073741824,0 +1790884013,sparkyfitness,44fb9597d34d,6127616,8568832,0,0,268435456,0 +1790884016,sparkyfitness-db,7150f7f09c31,114790400,252129280,0,0,536870912,0 +1790884016,sparkyfitness-server,92ea34048581,382693376,412946432,0,0,1073741824,0 +1790884016,sparkyfitness,44fb9597d34d,5947392,8220672,0,0,268435456,0 +1790884018,sparkyfitness-db,7150f7f09c31,115306496,252784640,0,0,536870912,0 +1790884018,sparkyfitness-server,92ea34048581,382693376,413655040,0,0,1073741824,0 +1790884018,sparkyfitness,44fb9597d34d,5910528,8716288,0,0,268435456,0 +1790884020,sparkyfitness-db,7150f7f09c31,115908608,253272064,0,0,536870912,0 +1790884020,sparkyfitness-server,92ea34048581,386945024,417353728,0,0,1073741824,0 +1790884020,sparkyfitness,44fb9597d34d,5955584,8114176,0,0,268435456,0 +1790884022,sparkyfitness-db,7150f7f09c31,116977664,254791680,0,0,536870912,0 +1790884022,sparkyfitness-server,92ea34048581,386736128,417161216,0,0,1073741824,0 +1790884022,sparkyfitness,44fb9597d34d,5885952,8278016,0,0,268435456,0 +1790884024,sparkyfitness-db,7150f7f09c31,118222848,255934464,0,0,536870912,0 +1790884024,sparkyfitness-server,92ea34048581,380899328,411619328,0,0,1073741824,0 +1790884024,sparkyfitness,44fb9597d34d,5877760,8781824,0,0,268435456,0 +1790884026,sparkyfitness-db,7150f7f09c31,120582144,258699264,0,0,536870912,0 +1790884027,sparkyfitness-server,92ea34048581,384786432,415768576,0,0,1073741824,0 +1790884027,sparkyfitness,44fb9597d34d,6414336,9646080,0,0,268435456,0 +1790884029,sparkyfitness-db,7150f7f09c31,120410112,258740224,0,0,536870912,0 +1790884029,sparkyfitness-server,92ea34048581,382803968,413605888,0,0,1073741824,0 +1790884029,sparkyfitness,44fb9597d34d,5844992,8265728,0,0,268435456,0 +1790884031,sparkyfitness-db,7150f7f09c31,120250368,257953792,0,0,536870912,0 +1790884031,sparkyfitness-server,92ea34048581,388710400,419598336,0,0,1073741824,0 +1790884031,sparkyfitness,44fb9597d34d,5890048,8527872,0,0,268435456,0 +1790884033,sparkyfitness-db,7150f7f09c31,126595072,265076736,0,0,536870912,0 +1790884033,sparkyfitness-server,92ea34048581,384880640,415731712,0,0,1073741824,0 +1790884033,sparkyfitness,44fb9597d34d,5922816,8069120,0,0,268435456,0 +1790884035,sparkyfitness-db,7150f7f09c31,124506112,263127040,0,0,536870912,0 +1790884035,sparkyfitness-server,92ea34048581,380936192,411869184,0,0,1073741824,0 +1790884035,sparkyfitness,44fb9597d34d,5787648,8839168,0,0,268435456,0 +1790884037,sparkyfitness-db,7150f7f09c31,123420672,261668864,0,0,536870912,0 +1790884037,sparkyfitness-server,92ea34048581,380936192,411283456,0,0,1073741824,0 +1790884037,sparkyfitness,44fb9597d34d,5853184,8523776,0,0,268435456,0 +1790884040,sparkyfitness-db,7150f7f09c31,126279680,264675328,0,0,536870912,0 +1790884040,sparkyfitness-server,92ea34048581,385175552,415834112,0,0,1073741824,0 +1790884040,sparkyfitness,44fb9597d34d,5988352,8269824,0,0,268435456,0 +1790884042,sparkyfitness-db,7150f7f09c31,126091264,264491008,0,0,536870912,0 +1790884042,sparkyfitness-server,92ea34048581,384827392,415064064,0,0,1073741824,0 +1790884042,sparkyfitness,44fb9597d34d,5861376,8658944,0,0,268435456,0 +1790884044,sparkyfitness-db,7150f7f09c31,122544128,261562368,0,0,536870912,0 +1790884044,sparkyfitness-server,92ea34048581,387112960,417767424,0,0,1073741824,0 +1790884044,sparkyfitness,44fb9597d34d,5844992,8204288,0,0,268435456,0 +1790884046,sparkyfitness-db,7150f7f09c31,123822080,262000640,0,0,536870912,0 +1790884046,sparkyfitness-server,92ea34048581,382902272,413634560,0,0,1073741824,0 +1790884046,sparkyfitness,44fb9597d34d,6037504,8470528,0,0,268435456,0 +1790884048,sparkyfitness-db,7150f7f09c31,123060224,261795840,0,0,536870912,0 +1790884048,sparkyfitness-server,92ea34048581,389836800,420028416,0,0,1073741824,0 +1790884048,sparkyfitness,44fb9597d34d,5844992,8343552,0,0,268435456,0 +1790884050,sparkyfitness-db,7150f7f09c31,124411904,263176192,0,0,536870912,0 +1790884050,sparkyfitness-server,92ea34048581,388272128,418856960,0,0,1073741824,0 +1790884051,sparkyfitness,44fb9597d34d,5877760,8708096,0,0,268435456,0 +1790884053,sparkyfitness-db,7150f7f09c31,122761216,261795840,0,0,536870912,0 +1790884053,sparkyfitness-server,92ea34048581,386179072,417525760,0,0,1073741824,0 +1790884053,sparkyfitness,44fb9597d34d,5914624,8159232,0,0,268435456,0 +1790884055,sparkyfitness-db,7150f7f09c31,122122240,260648960,0,0,536870912,0 +1790884055,sparkyfitness-server,92ea34048581,385011712,415940608,0,0,1073741824,0 +1790884055,sparkyfitness,44fb9597d34d,5877760,8519680,0,0,268435456,0 +1790884057,sparkyfitness-db,7150f7f09c31,125456384,264200192,0,0,536870912,0 +1790884057,sparkyfitness-server,92ea34048581,388210688,418660352,0,0,1073741824,0 +1790884057,sparkyfitness,44fb9597d34d,5890048,8376320,0,0,268435456,0 +1790884059,sparkyfitness-db,7150f7f09c31,119971840,259129344,0,0,536870912,0 +1790884059,sparkyfitness-server,92ea34048581,389550080,420728832,0,0,1073741824,0 +1790884059,sparkyfitness,44fb9597d34d,5885952,8151040,0,0,268435456,0 +1790884061,sparkyfitness-db,7150f7f09c31,120127488,259661824,0,0,536870912,0 +1790884061,sparkyfitness-server,92ea34048581,383012864,413392896,0,0,1073741824,0 +1790884061,sparkyfitness,44fb9597d34d,5746688,8622080,0,0,268435456,0 +1790884064,sparkyfitness-db,7150f7f09c31,120750080,260489216,0,0,536870912,0 +1790884064,sparkyfitness-server,92ea34048581,383025152,413741056,0,0,1073741824,0 +1790884064,sparkyfitness,44fb9597d34d,5853184,8290304,0,0,268435456,0 +1790884066,sparkyfitness-db,7150f7f09c31,120766464,259846144,0,0,536870912,0 +1790884066,sparkyfitness-server,92ea34048581,385130496,415854592,0,0,1073741824,0 +1790884066,sparkyfitness,44fb9597d34d,5824512,8183808,0,0,268435456,0 +1790884068,sparkyfitness-db,7150f7f09c31,121495552,260620288,0,0,536870912,0 +1790884068,sparkyfitness-server,92ea34048581,383127552,413757440,0,0,1073741824,0 +1790884068,sparkyfitness,44fb9597d34d,5959680,8802304,0,0,268435456,0 +1790884070,sparkyfitness-db,7150f7f09c31,109531136,247320576,0,0,536870912,0 +1790884070,sparkyfitness-server,92ea34048581,389660672,419811328,0,0,1073741824,0 +1790884070,sparkyfitness,44fb9597d34d,5890048,8540160,0,0,268435456,0 +1790884072,sparkyfitness-db,7150f7f09c31,112365568,250773504,0,0,536870912,0 +1790884072,sparkyfitness-server,92ea34048581,389558272,419983360,0,0,1073741824,0 +1790884072,sparkyfitness,44fb9597d34d,5890048,8495104,0,0,268435456,0 +1790884074,sparkyfitness-db,7150f7f09c31,112238592,250855424,0,0,536870912,0 +1790884074,sparkyfitness-server,92ea34048581,389963776,420347904,0,0,1073741824,0 +1790884075,sparkyfitness,44fb9597d34d,6131712,8413184,0,0,268435456,0 +1790884077,sparkyfitness-db,7150f7f09c31,113037312,251932672,0,0,536870912,0 +1790884077,sparkyfitness-server,92ea34048581,382971904,413618176,0,0,1073741824,0 +1790884077,sparkyfitness,44fb9597d34d,6135808,9064448,0,0,268435456,0 +1790884079,sparkyfitness-db,7150f7f09c31,113917952,252878848,0,0,536870912,0 +1790884079,sparkyfitness-server,92ea34048581,385028096,415866880,0,0,1073741824,0 +1790884079,sparkyfitness,44fb9597d34d,5902336,8527872,0,0,268435456,0 +1790884081,sparkyfitness-db,7150f7f09c31,112848896,251674624,0,0,536870912,0 +1790884081,sparkyfitness-server,92ea34048581,385179648,416251904,0,0,1073741824,0 +1790884081,sparkyfitness,44fb9597d34d,5971968,8396800,0,0,268435456,0 +1790884083,sparkyfitness-db,7150f7f09c31,113123328,251596800,0,0,536870912,0 +1790884083,sparkyfitness-server,92ea34048581,389615616,420356096,0,0,1073741824,0 +1790884083,sparkyfitness,44fb9597d34d,5869568,8216576,0,0,268435456,0 +1790884085,sparkyfitness-db,7150f7f09c31,111996928,250322944,0,0,536870912,0 +1790884085,sparkyfitness-server,92ea34048581,394223616,424792064,0,0,1073741824,0 +1790884085,sparkyfitness,44fb9597d34d,5849088,8445952,0,0,268435456,0 +1790884088,sparkyfitness-db,7150f7f09c31,183402496,323362816,0,0,536870912,0 +1790884088,sparkyfitness-server,92ea34048581,386707456,417685504,0,0,1073741824,0 +1790884088,sparkyfitness,44fb9597d34d,5865472,8634368,0,0,268435456,0 +1790884090,sparkyfitness-db,7150f7f09c31,188362752,327684096,0,0,536870912,0 +1790884090,sparkyfitness-server,92ea34048581,389386240,420405248,0,0,1073741824,0 +1790884090,sparkyfitness,44fb9597d34d,5869568,8720384,0,0,268435456,0 +1790884092,sparkyfitness-db,7150f7f09c31,219418624,358883328,0,0,536870912,0 +1790884092,sparkyfitness-server,92ea34048581,389644288,420192256,0,0,1073741824,0 +1790884092,sparkyfitness,44fb9597d34d,5885952,8548352,0,0,268435456,0 +1790884094,sparkyfitness-db,7150f7f09c31,221839360,361316352,0,0,536870912,0 +1790884094,sparkyfitness-server,92ea34048581,387575808,418152448,0,0,1073741824,0 +1790884094,sparkyfitness,44fb9597d34d,5853184,8650752,0,0,268435456,0 +1790884096,sparkyfitness-db,7150f7f09c31,222269440,361828352,0,0,536870912,0 +1790884096,sparkyfitness-server,92ea34048581,387534848,418324480,0,0,1073741824,0 +1790884096,sparkyfitness,44fb9597d34d,5869568,8163328,0,0,268435456,0 +1790884098,sparkyfitness-db,7150f7f09c31,217264128,356704256,0,0,536870912,0 +1790884098,sparkyfitness-server,92ea34048581,390270976,421191680,0,0,1073741824,0 +1790884099,sparkyfitness,44fb9597d34d,5869568,8622080,0,0,268435456,0 +1790884101,sparkyfitness-db,7150f7f09c31,223170560,362385408,0,0,536870912,0 +1790884101,sparkyfitness-server,92ea34048581,387813376,418070528,0,0,1073741824,0 +1790884101,sparkyfitness,44fb9597d34d,5877760,8224768,0,0,268435456,0 +1790884103,sparkyfitness-db,7150f7f09c31,219127808,358043648,0,0,536870912,0 +1790884103,sparkyfitness-server,92ea34048581,390516736,421371904,0,0,1073741824,0 +1790884103,sparkyfitness,44fb9597d34d,5885952,9134080,0,0,268435456,0 +1790884105,sparkyfitness-db,7150f7f09c31,199749632,337883136,0,0,536870912,0 +1790884105,sparkyfitness-server,92ea34048581,388632576,419237888,0,0,1073741824,0 +1790884105,sparkyfitness,44fb9597d34d,5795840,8097792,0,0,268435456,0 +1790884107,sparkyfitness-db,7150f7f09c31,202792960,341225472,0,0,536870912,0 +1790884107,sparkyfitness-server,92ea34048581,385216512,415899648,0,0,1073741824,0 +1790884107,sparkyfitness,44fb9597d34d,5758976,8732672,0,0,268435456,0 +1790884109,sparkyfitness-db,7150f7f09c31,201564160,339738624,0,0,536870912,0 +1790884110,sparkyfitness-server,92ea34048581,388771840,419168256,0,0,1073741824,0 +1790884110,sparkyfitness,44fb9597d34d,5775360,8433664,0,0,268435456,0 +1790884112,sparkyfitness-db,7150f7f09c31,203595776,342388736,0,0,536870912,0 +1790884112,sparkyfitness-server,92ea34048581,384073728,414941184,0,0,1073741824,0 +1790884112,sparkyfitness,44fb9597d34d,5812224,8314880,0,0,268435456,0 +1790884114,sparkyfitness-db,7150f7f09c31,202940416,341577728,0,0,536870912,0 +1790884114,sparkyfitness-server,92ea34048581,385413120,415473664,0,0,1073741824,0 +1790884114,sparkyfitness,44fb9597d34d,5832704,8187904,0,0,268435456,0 +1790884116,sparkyfitness-db,7150f7f09c31,204324864,343367680,0,0,536870912,0 +1790884116,sparkyfitness-server,92ea34048581,381014016,411504640,0,0,1073741824,0 +1790884116,sparkyfitness,44fb9597d34d,6041600,8736768,0,0,268435456,0 +1790884118,sparkyfitness-db,7150f7f09c31,223932416,362332160,0,0,536870912,0 +1790884118,sparkyfitness-server,92ea34048581,381034496,412012544,0,0,1073741824,0 +1790884118,sparkyfitness,44fb9597d34d,5853184,8581120,0,0,268435456,0 +1790884120,sparkyfitness-db,7150f7f09c31,222359552,361975808,0,0,536870912,0 +1790884120,sparkyfitness-server,92ea34048581,382861312,413523968,0,0,1073741824,0 +1790884121,sparkyfitness,44fb9597d34d,5836800,8212480,0,0,268435456,0 +1790884123,sparkyfitness-db,7150f7f09c31,219762688,358862848,0,0,536870912,0 +1790884123,sparkyfitness-server,92ea34048581,382922752,413855744,0,0,1073741824,0 +1790884123,sparkyfitness,44fb9597d34d,5795840,8142848,0,0,268435456,0 +1790884125,sparkyfitness-db,7150f7f09c31,224784384,363966464,0,0,536870912,0 +1790884125,sparkyfitness-server,92ea34048581,385232896,416231424,0,0,1073741824,0 +1790884125,sparkyfitness,44fb9597d34d,5828608,8118272,0,0,268435456,0 +1790884127,sparkyfitness-db,7150f7f09c31,224051200,362381312,0,0,536870912,0 +1790884127,sparkyfitness-server,92ea34048581,387694592,417972224,0,0,1073741824,0 +1790884127,sparkyfitness,44fb9597d34d,5865472,8769536,0,0,268435456,0 +1790884129,sparkyfitness-db,7150f7f09c31,225210368,363180032,0,0,536870912,0 +1790884129,sparkyfitness-server,92ea34048581,387739648,417984512,0,0,1073741824,0 +1790884129,sparkyfitness,44fb9597d34d,5853184,7901184,0,0,268435456,0 +1790884131,sparkyfitness-db,7150f7f09c31,221769728,360361984,0,0,536870912,0 +1790884131,sparkyfitness-server,92ea34048581,382910464,413904896,0,0,1073741824,0 +1790884132,sparkyfitness,44fb9597d34d,5865472,8626176,0,0,268435456,0 +1790884134,sparkyfitness-db,7150f7f09c31,226263040,364650496,0,0,536870912,0 +1790884134,sparkyfitness-server,92ea34048581,387883008,413749248,0,0,1073741824,0 +1790884134,sparkyfitness,44fb9597d34d,5844992,8491008,0,0,268435456,0 +1790884136,sparkyfitness-db,7150f7f09c31,222842880,362164224,0,0,536870912,0 +1790884136,sparkyfitness-server,92ea34048581,385376256,416374784,0,0,1073741824,0 +1790884136,sparkyfitness,44fb9597d34d,5955584,8704000,0,0,268435456,0 +1790884138,sparkyfitness-db,7150f7f09c31,222109696,361050112,0,0,536870912,0 +1790884138,sparkyfitness-server,92ea34048581,390389760,421085184,0,0,1073741824,0 +1790884138,sparkyfitness,44fb9597d34d,6012928,9023488,0,0,268435456,0 +1790884140,sparkyfitness-db,7150f7f09c31,227426304,366460928,0,0,536870912,0 +1790884140,sparkyfitness-server,92ea34048581,385466368,415834112,0,0,1073741824,0 +1790884140,sparkyfitness,44fb9597d34d,5984256,8159232,0,0,268435456,0 +1790884142,sparkyfitness-db,7150f7f09c31,225062912,363704320,0,0,536870912,0 +1790884142,sparkyfitness-server,92ea34048581,382955520,413995008,0,0,1073741824,0 +1790884142,sparkyfitness,44fb9597d34d,5853184,8339456,0,0,268435456,0 +1790884144,sparkyfitness-db,7150f7f09c31,224546816,363368448,0,0,536870912,0 +1790884145,sparkyfitness-server,92ea34048581,390250496,420954112,0,0,1073741824,0 +1790884145,sparkyfitness,44fb9597d34d,5832704,8269824,0,0,268435456,0 +1790884147,sparkyfitness-db,7150f7f09c31,229171200,368676864,0,0,536870912,0 +1790884147,sparkyfitness-server,92ea34048581,382988288,413118464,0,0,1073741824,0 +1790884147,sparkyfitness,44fb9597d34d,5992448,8138752,0,0,268435456,0 +1790884149,sparkyfitness-db,7150f7f09c31,223514624,362459136,0,0,536870912,0 +1790884149,sparkyfitness-server,92ea34048581,385433600,415911936,0,0,1073741824,0 +1790884149,sparkyfitness,44fb9597d34d,5967872,8687616,0,0,268435456,0 +1790884151,sparkyfitness-db,7150f7f09c31,226508800,364732416,0,0,536870912,0 +1790884151,sparkyfitness-server,92ea34048581,390553600,422010880,0,0,1073741824,0 +1790884151,sparkyfitness,44fb9597d34d,5828608,7958528,0,0,268435456,0 +1790884153,sparkyfitness-db,7150f7f09c31,225607680,365563904,0,0,536870912,0 +1790884153,sparkyfitness-server,92ea34048581,390336512,420872192,0,0,1073741824,0 +1790884153,sparkyfitness,44fb9597d34d,5849088,7999488,0,0,268435456,0 +1790884155,sparkyfitness-db,7150f7f09c31,227319808,366473216,0,0,536870912,0 +1790884156,sparkyfitness-server,92ea34048581,396718080,427442176,0,0,1073741824,0 +1790884156,sparkyfitness,44fb9597d34d,5959680,8511488,0,0,268435456,0 +1790884158,sparkyfitness-db,7150f7f09c31,230821888,370409472,0,0,536870912,0 +1790884158,sparkyfitness-server,92ea34048581,394006528,424476672,0,0,1073741824,0 +1790884158,sparkyfitness,44fb9597d34d,5869568,8818688,0,0,268435456,0 +1790884160,sparkyfitness-db,7150f7f09c31,227409920,366731264,0,0,536870912,0 +1790884160,sparkyfitness-server,92ea34048581,391639040,422019072,0,0,1073741824,0 +1790884160,sparkyfitness,44fb9597d34d,5881856,8802304,0,0,268435456,0 +1790884162,sparkyfitness-db,7150f7f09c31,228597760,367820800,0,0,536870912,0 +1790884162,sparkyfitness-server,92ea34048581,399593472,430465024,0,0,1073741824,0 +1790884162,sparkyfitness,44fb9597d34d,5849088,8540160,0,0,268435456,0 +1790884164,sparkyfitness-db,7150f7f09c31,231575552,370208768,0,0,536870912,0 +1790884164,sparkyfitness-server,92ea34048581,382947328,413450240,0,0,1073741824,0 +1790884164,sparkyfitness,44fb9597d34d,5865472,8245248,0,0,268435456,0 +1790884166,sparkyfitness-db,7150f7f09c31,231723008,371134464,0,0,536870912,0 +1790884167,sparkyfitness-server,92ea34048581,382967808,413700096,0,0,1073741824,0 +1790884167,sparkyfitness,44fb9597d34d,5869568,8380416,0,0,268435456,0 +1790884169,sparkyfitness-db,7150f7f09c31,228970496,368066560,0,0,536870912,0 +1790884169,sparkyfitness-server,92ea34048581,390422528,421339136,0,0,1073741824,0 +1790884169,sparkyfitness,44fb9597d34d,5836800,8638464,0,0,268435456,0 +1790884171,sparkyfitness-db,7150f7f09c31,230592512,369614848,0,0,536870912,0 +1790884171,sparkyfitness-server,92ea34048581,385437696,415432704,0,0,1073741824,0 +1790884171,sparkyfitness,44fb9597d34d,5861376,8056832,0,0,268435456,0 +1790884174,sparkyfitness-db,7150f7f09c31,236019712,374870016,0,0,536870912,0 +1790884174,sparkyfitness-server,92ea34048581,380567552,411082752,0,0,1073741824,0 +1790884174,sparkyfitness,44fb9597d34d,5853184,7872512,0,0,268435456,0 +1790884176,sparkyfitness-db,7150f7f09c31,230400000,369037312,0,0,536870912,0 +1790884176,sparkyfitness-server,92ea34048581,385769472,416165888,0,0,1073741824,0 +1790884176,sparkyfitness,44fb9597d34d,5853184,8204288,0,0,268435456,0 +1790884179,sparkyfitness-db,7150f7f09c31,232083456,371224576,0,0,536870912,0 +1790884179,sparkyfitness-server,92ea34048581,380743680,411090944,0,0,1073741824,0 +1790884179,sparkyfitness,44fb9597d34d,5816320,8142848,0,0,268435456,0 +1790884181,sparkyfitness-db,7150f7f09c31,233312256,372445184,0,0,536870912,0 +1790884181,sparkyfitness-server,92ea34048581,383172608,414191616,0,0,1073741824,0 +1790884181,sparkyfitness,44fb9597d34d,5910528,8314880,0,0,268435456,0 +1790884183,sparkyfitness-db,7150f7f09c31,240214016,379138048,0,0,536870912,0 +1790884183,sparkyfitness-server,92ea34048581,385830912,416661504,0,0,1073741824,0 +1790884183,sparkyfitness,44fb9597d34d,7077888,9900032,0,0,268435456,0 +1790884185,sparkyfitness-db,7150f7f09c31,232800256,372744192,0,0,536870912,0 +1790884185,sparkyfitness-server,92ea34048581,391200768,421830656,0,0,1073741824,0 +1790884185,sparkyfitness,44fb9597d34d,5881856,8273920,0,0,268435456,0 +1790884187,sparkyfitness-db,7150f7f09c31,236564480,376057856,0,0,536870912,0 +1790884188,sparkyfitness-server,92ea34048581,386969600,418144256,0,0,1073741824,0 +1790884188,sparkyfitness,44fb9597d34d,5898240,8900608,0,0,268435456,0 +1790884190,sparkyfitness-db,7150f7f09c31,238571520,378294272,0,0,536870912,0 +1790884190,sparkyfitness-server,92ea34048581,389357568,419663872,0,0,1073741824,0 +1790884190,sparkyfitness,44fb9597d34d,5865472,8540160,0,0,268435456,0 +1790884192,sparkyfitness-db,7150f7f09c31,236552192,375873536,0,0,536870912,0 +1790884192,sparkyfitness-server,92ea34048581,386994176,417820672,0,0,1073741824,0 +1790884192,sparkyfitness,44fb9597d34d,5959680,8470528,0,0,268435456,0 +1790884194,sparkyfitness-db,7150f7f09c31,228089856,367087616,0,0,536870912,0 +1790884194,sparkyfitness-server,92ea34048581,384397312,414941184,0,0,1073741824,0 +1790884194,sparkyfitness,44fb9597d34d,5967872,8359936,0,0,268435456,0 +1790884196,sparkyfitness-db,7150f7f09c31,226590720,366936064,0,0,536870912,0 +1790884196,sparkyfitness-server,92ea34048581,387108864,415793152,0,0,1073741824,0 +1790884196,sparkyfitness,44fb9597d34d,6496256,9060352,0,0,268435456,0 +1790884198,sparkyfitness-db,7150f7f09c31,229396480,368750592,0,0,536870912,0 +1790884198,sparkyfitness-server,92ea34048581,391897088,422248448,0,0,1073741824,0 +1790884199,sparkyfitness,44fb9597d34d,5853184,7901184,0,0,268435456,0 +1790884201,sparkyfitness-db,7150f7f09c31,228786176,368062464,0,0,536870912,0 +1790884201,sparkyfitness-server,92ea34048581,391868416,422367232,0,0,1073741824,0 +1790884201,sparkyfitness,44fb9597d34d,5795840,8503296,0,0,268435456,0 +1790884203,sparkyfitness-db,7150f7f09c31,234733568,373620736,0,0,536870912,0 +1790884203,sparkyfitness-server,92ea34048581,388665344,419225600,0,0,1073741824,0 +1790884203,sparkyfitness,44fb9597d34d,5922816,8548352,0,0,268435456,0 +1790884205,sparkyfitness-db,7150f7f09c31,229507072,369127424,0,0,536870912,0 +1790884205,sparkyfitness-server,92ea34048581,388661248,419188736,0,0,1073741824,0 +1790884205,sparkyfitness,44fb9597d34d,5844992,8282112,0,0,268435456,0 +1790884207,sparkyfitness-db,7150f7f09c31,229126144,369758208,0,0,536870912,0 +1790884207,sparkyfitness-server,92ea34048581,389099520,419905536,0,0,1073741824,0 +1790884207,sparkyfitness,44fb9597d34d,5853184,8486912,0,0,268435456,0 +1790884209,sparkyfitness-db,7150f7f09c31,233897984,373800960,0,0,536870912,0 +1790884210,sparkyfitness-server,92ea34048581,388681728,418963456,0,0,1073741824,0 +1790884210,sparkyfitness,44fb9597d34d,5832704,8589312,0,0,268435456,0 +1790884212,sparkyfitness-db,7150f7f09c31,230936576,370491392,0,0,536870912,0 +1790884212,sparkyfitness-server,92ea34048581,388624384,419713024,0,0,1073741824,0 +1790884212,sparkyfitness,44fb9597d34d,5832704,8425472,0,0,268435456,0 +1790884214,sparkyfitness-db,7150f7f09c31,230473728,369852416,0,0,536870912,0 +1790884214,sparkyfitness-server,92ea34048581,393707520,424562688,0,0,1073741824,0 +1790884214,sparkyfitness,44fb9597d34d,5840896,8392704,0,0,268435456,0 +1790884216,sparkyfitness-db,7150f7f09c31,232996864,371826688,0,0,536870912,0 +1790884216,sparkyfitness-server,92ea34048581,391012352,421191680,0,0,1073741824,0 +1790884216,sparkyfitness,44fb9597d34d,5836800,8318976,0,0,268435456,0 +1790884218,sparkyfitness-db,7150f7f09c31,234352640,376705024,0,0,536870912,0 +1790884219,sparkyfitness-server,92ea34048581,391286784,421687296,0,0,1073741824,0 +1790884219,sparkyfitness,44fb9597d34d,6127616,8192000,0,0,268435456,0 +1790884221,sparkyfitness-db,7150f7f09c31,235032576,374734848,0,0,536870912,0 +1790884221,sparkyfitness-server,92ea34048581,386179072,414613504,0,0,1073741824,0 +1790884221,sparkyfitness,44fb9597d34d,5988352,8380416,0,0,268435456,0 +1790884223,sparkyfitness-db,7150f7f09c31,244432896,384843776,0,0,536870912,0 +1790884223,sparkyfitness-server,92ea34048581,385966080,416399360,0,0,1073741824,0 +1790884223,sparkyfitness,44fb9597d34d,5865472,8609792,0,0,268435456,0 +1790884225,sparkyfitness-db,7150f7f09c31,246693888,386715648,0,0,536870912,0 +1790884225,sparkyfitness-server,92ea34048581,385982464,416632832,0,0,1073741824,0 +1790884225,sparkyfitness,44fb9597d34d,5849088,8503296,0,0,268435456,0 +1790884227,sparkyfitness-db,7150f7f09c31,258600960,398888960,0,0,536870912,0 +1790884227,sparkyfitness-server,92ea34048581,391413760,422461440,0,0,1073741824,0 +1790884228,sparkyfitness,44fb9597d34d,5812224,8208384,0,0,268435456,0 +1790884230,sparkyfitness-db,7150f7f09c31,262746112,403591168,0,0,536870912,0 +1790884230,sparkyfitness-server,92ea34048581,386326528,417738752,0,0,1073741824,0 +1790884230,sparkyfitness,44fb9597d34d,5832704,8167424,0,0,268435456,0 +1790884232,sparkyfitness-db,7150f7f09c31,260505600,401448960,0,0,536870912,0 +1790884232,sparkyfitness-server,92ea34048581,383479808,414101504,0,0,1073741824,0 +1790884232,sparkyfitness,44fb9597d34d,5795840,8589312,0,0,268435456,0 +1790884234,sparkyfitness-db,7150f7f09c31,262565888,402960384,0,0,536870912,0 +1790884234,sparkyfitness-server,92ea34048581,386437120,416600064,0,0,1073741824,0 +1790884234,sparkyfitness,44fb9597d34d,6107136,8794112,0,0,268435456,0 +1790884236,sparkyfitness-db,7150f7f09c31,285417472,426991616,0,0,536870912,0 +1790884236,sparkyfitness-server,92ea34048581,380981248,411140096,0,0,1073741824,0 +1790884236,sparkyfitness,44fb9597d34d,5804032,8466432,0,0,268435456,0 +1790884238,sparkyfitness-db,7150f7f09c31,284377088,425701376,0,0,536870912,0 +1790884238,sparkyfitness-server,92ea34048581,394346496,424816640,0,0,1073741824,0 +1790884239,sparkyfitness,44fb9597d34d,5824512,8564736,0,0,268435456,0 +1790884241,sparkyfitness-db,7150f7f09c31,284622848,426463232,0,0,536870912,0 +1790884241,sparkyfitness-server,92ea34048581,391811072,422576128,0,0,1073741824,0 +1790884241,sparkyfitness,44fb9597d34d,5840896,8536064,0,0,268435456,0 +1790884243,sparkyfitness-db,7150f7f09c31,282988544,424214528,0,0,536870912,0 +1790884243,sparkyfitness-server,92ea34048581,398073856,429350912,0,0,1073741824,0 +1790884243,sparkyfitness,44fb9597d34d,6000640,7970816,0,0,268435456,0 +1790884245,sparkyfitness-db,7150f7f09c31,279277568,420900864,0,0,536870912,0 +1790884245,sparkyfitness-server,92ea34048581,395808768,426295296,0,0,1073741824,0 +1790884245,sparkyfitness,44fb9597d34d,6025216,8785920,0,0,268435456,0 +1790884247,sparkyfitness-db,7150f7f09c31,281677824,423350272,0,0,536870912,0 +1790884247,sparkyfitness-server,92ea34048581,390463488,421093376,0,0,1073741824,0 +1790884247,sparkyfitness,44fb9597d34d,5902336,8273920,0,0,268435456,0 +1790884249,sparkyfitness-db,7150f7f09c31,279871488,421662720,0,0,536870912,0 +1790884249,sparkyfitness-server,92ea34048581,396255232,426696704,0,0,1073741824,0 +1790884249,sparkyfitness,44fb9597d34d,6082560,8577024,0,0,268435456,0 +1790884251,sparkyfitness-db,7150f7f09c31,282165248,423776256,0,0,536870912,0 +1790884252,sparkyfitness-server,92ea34048581,390770688,421011456,0,0,1073741824,0 +1790884252,sparkyfitness,44fb9597d34d,5885952,8159232,0,0,268435456,0 +1790884254,sparkyfitness-db,7150f7f09c31,282722304,424325120,0,0,536870912,0 +1790884254,sparkyfitness-server,92ea34048581,386220032,416718848,0,0,1073741824,0 +1790884254,sparkyfitness,44fb9597d34d,5939200,8683520,0,0,268435456,0 +1790884256,sparkyfitness-db,7150f7f09c31,281247744,423186432,0,0,536870912,0 +1790884256,sparkyfitness-server,92ea34048581,380784640,411758592,0,0,1073741824,0 +1790884256,sparkyfitness,44fb9597d34d,5931008,8876032,0,0,268435456,0 +1790884258,sparkyfitness-db,7150f7f09c31,286191616,427884544,0,0,536870912,0 +1790884258,sparkyfitness-server,92ea34048581,383508480,413929472,0,0,1073741824,0 +1790884258,sparkyfitness,44fb9597d34d,5931008,8499200,0,0,268435456,0 +1790884260,sparkyfitness-db,7150f7f09c31,283717632,425586688,0,0,536870912,0 +1790884260,sparkyfitness-server,92ea34048581,383762432,414613504,0,0,1073741824,0 +1790884260,sparkyfitness,44fb9597d34d,5963776,8437760,0,0,268435456,0 +1790884262,sparkyfitness-db,7150f7f09c31,282284032,424120320,0,0,536870912,0 +1790884263,sparkyfitness-server,92ea34048581,383381504,414081024,0,0,1073741824,0 +1790884263,sparkyfitness,44fb9597d34d,5922816,8421376,0,0,268435456,0 +1790884265,sparkyfitness-db,7150f7f09c31,282013696,423587840,0,0,536870912,0 +1790884265,sparkyfitness-server,92ea34048581,386187264,417554432,0,0,1073741824,0 +1790884265,sparkyfitness,44fb9597d34d,6201344,9687040,0,0,268435456,0 +1790884267,sparkyfitness-db,7150f7f09c31,225009664,365383680,0,0,536870912,0 +1790884267,sparkyfitness-server,92ea34048581,391720960,421871616,0,0,1073741824,0 +1790884267,sparkyfitness,44fb9597d34d,5922816,8413184,0,0,268435456,0 +1790884269,sparkyfitness-db,7150f7f09c31,226082816,366743552,0,0,536870912,0 +1790884269,sparkyfitness-server,92ea34048581,389058560,419381248,0,0,1073741824,0 +1790884269,sparkyfitness,44fb9597d34d,5988352,8392704,0,0,268435456,0 +1790884271,sparkyfitness-db,7150f7f09c31,225808384,366317568,0,0,536870912,0 +1790884271,sparkyfitness-server,92ea34048581,391589888,421519360,0,0,1073741824,0 +1790884271,sparkyfitness,44fb9597d34d,5890048,8417280,0,0,268435456,0 +1790884273,sparkyfitness-db,7150f7f09c31,228274176,368898048,0,0,536870912,0 +1790884273,sparkyfitness-server,92ea34048581,383455232,413511680,0,0,1073741824,0 +1790884274,sparkyfitness,44fb9597d34d,5885952,8323072,0,0,268435456,0 +1790884276,sparkyfitness-db,7150f7f09c31,228077568,368787456,0,0,536870912,0 +1790884276,sparkyfitness-server,92ea34048581,383475712,414203904,0,0,1073741824,0 +1790884276,sparkyfitness,44fb9597d34d,6189056,9449472,0,0,268435456,0 +1790884278,sparkyfitness-db,7150f7f09c31,232542208,373075968,0,0,536870912,0 +1790884278,sparkyfitness-server,92ea34048581,386187264,416858112,0,0,1073741824,0 +1790884278,sparkyfitness,44fb9597d34d,5873664,8175616,0,0,268435456,0 +1790884280,sparkyfitness-db,7150f7f09c31,227532800,368672768,0,0,536870912,0 +1790884280,sparkyfitness-server,92ea34048581,393326592,424210432,0,0,1073741824,0 +1790884280,sparkyfitness,44fb9597d34d,5820416,8069120,0,0,268435456,0 +1790884282,sparkyfitness-db,7150f7f09c31,225927168,366637056,0,0,536870912,0 +1790884282,sparkyfitness-server,92ea34048581,386682880,419520512,0,0,1073741824,0 +1790884282,sparkyfitness,44fb9597d34d,5967872,8249344,0,0,268435456,0 +1790884284,sparkyfitness-db,7150f7f09c31,231776256,372199424,0,0,536870912,0 +1790884284,sparkyfitness-server,92ea34048581,389173248,419745792,0,0,1073741824,0 +1790884285,sparkyfitness,44fb9597d34d,6197248,10010624,0,0,268435456,0 +1790884287,sparkyfitness-db,7150f7f09c31,229892096,370495488,0,0,536870912,0 +1790884287,sparkyfitness-server,92ea34048581,389124096,419475456,0,0,1073741824,0 +1790884287,sparkyfitness,44fb9597d34d,5849088,8261632,0,0,268435456,0 +1790884289,sparkyfitness-db,7150f7f09c31,227422208,367996928,0,0,536870912,0 +1790884289,sparkyfitness-server,92ea34048581,383574016,414134272,0,0,1073741824,0 +1790884289,sparkyfitness,44fb9597d34d,5820416,8650752,0,0,268435456,0 +1790884291,sparkyfitness-db,7150f7f09c31,235409408,376467456,0,0,536870912,0 +1790884291,sparkyfitness-server,92ea34048581,386322432,417206272,0,0,1073741824,0 +1790884291,sparkyfitness,44fb9597d34d,5836800,8437760,0,0,268435456,0 +1790884293,sparkyfitness-db,7150f7f09c31,234397696,374882304,0,0,536870912,0 +1790884293,sparkyfitness-server,92ea34048581,383606784,413667328,0,0,1073741824,0 +1790884293,sparkyfitness,44fb9597d34d,5832704,8220672,0,0,268435456,0 +1790884295,sparkyfitness-db,7150f7f09c31,230875136,371654656,0,0,536870912,0 +1790884295,sparkyfitness-server,92ea34048581,381923328,413442048,0,0,1073741824,0 +1790884295,sparkyfitness,44fb9597d34d,6225920,8347648,0,0,268435456,0 +1790884298,sparkyfitness-db,7150f7f09c31,226074624,366759936,0,0,536870912,0 +1790884298,sparkyfitness-server,92ea34048581,386453504,416714752,0,0,1073741824,0 +1790884298,sparkyfitness,44fb9597d34d,5869568,7888896,0,0,268435456,0 +1790884300,sparkyfitness-db,7150f7f09c31,225591296,366333952,0,0,536870912,0 +1790884300,sparkyfitness-server,92ea34048581,386625536,417619968,0,0,1073741824,0 +1790884300,sparkyfitness,44fb9597d34d,6037504,8622080,0,0,268435456,0 +1790884302,sparkyfitness-db,7150f7f09c31,223883264,364281856,0,0,536870912,0 +1790884302,sparkyfitness-server,92ea34048581,387530752,419430400,0,0,1073741824,0 +1790884302,sparkyfitness,44fb9597d34d,6029312,9089024,0,0,268435456,0 +1790884304,sparkyfitness-db,7150f7f09c31,223256576,364171264,0,0,536870912,0 +1790884304,sparkyfitness-server,92ea34048581,391458816,422617088,0,0,1073741824,0 +1790884304,sparkyfitness,44fb9597d34d,5988352,8577024,0,0,268435456,0 +1790884306,sparkyfitness-db,7150f7f09c31,221143040,361979904,0,0,536870912,0 +1790884306,sparkyfitness-server,92ea34048581,391024640,421556224,0,0,1073741824,0 +1790884306,sparkyfitness,44fb9597d34d,5869568,8384512,0,0,268435456,0 +1790884308,sparkyfitness-db,7150f7f09c31,224083968,364843008,0,0,536870912,0 +1790884308,sparkyfitness-server,92ea34048581,388558848,419106816,0,0,1073741824,0 +1790884309,sparkyfitness,44fb9597d34d,5902336,8339456,0,0,268435456,0 +1790884311,sparkyfitness-db,7150f7f09c31,221646848,361951232,0,0,536870912,0 +1790884311,sparkyfitness-server,92ea34048581,388726784,418623488,0,0,1073741824,0 +1790884311,sparkyfitness,44fb9597d34d,5840896,8130560,0,0,268435456,0 +1790884313,sparkyfitness-db,7150f7f09c31,221646848,361578496,0,0,536870912,0 +1790884313,sparkyfitness-server,92ea34048581,388726784,418889728,0,0,1073741824,0 +1790884313,sparkyfitness,44fb9597d34d,5840896,8400896,0,0,268435456,0 +1790884315,sparkyfitness-db,7150f7f09c31,221646848,361840640,0,0,536870912,0 +1790884315,sparkyfitness-server,92ea34048581,388726784,418881536,0,0,1073741824,0 +1790884315,sparkyfitness,44fb9597d34d,5840896,8368128,0,0,268435456,0 +1790884317,sparkyfitness-db,7150f7f09c31,219885568,359780352,0,0,536870912,0 +1790884317,sparkyfitness-server,92ea34048581,388538368,418693120,0,0,1073741824,0 +1790884317,sparkyfitness,44fb9597d34d,5840896,8134656,0,0,268435456,0 +1790884319,sparkyfitness-db,7150f7f09c31,218124288,358379520,0,0,536870912,0 +1790884319,sparkyfitness-server,92ea34048581,388538368,418680832,0,0,1073741824,0 +1790884319,sparkyfitness,44fb9597d34d,5840896,8605696,0,0,268435456,0 +1790884321,sparkyfitness-db,7150f7f09c31,216383488,356061184,0,0,536870912,0 +1790884321,sparkyfitness-server,92ea34048581,388538368,418938880,0,0,1073741824,0 +1790884322,sparkyfitness,44fb9597d34d,5840896,7925760,0,0,268435456,0 +1790884324,sparkyfitness-db,7150f7f09c31,216383488,355872768,0,0,536870912,0 +1790884324,sparkyfitness-server,92ea34048581,388538368,418676736,0,0,1073741824,0 +1790884324,sparkyfitness,44fb9597d34d,5840896,7897088,0,0,268435456,0 +1790884326,sparkyfitness-db,7150f7f09c31,216383488,355598336,0,0,536870912,0 +1790884326,sparkyfitness-server,92ea34048581,388538368,418418688,0,0,1073741824,0 +1790884326,sparkyfitness,44fb9597d34d,5840896,8183808,0,0,268435456,0 +1790884328,sparkyfitness-db,7150f7f09c31,216383488,355598336,0,0,536870912,0 +1790884328,sparkyfitness-server,92ea34048581,388538368,418418688,0,0,1073741824,0 +1790884328,sparkyfitness,44fb9597d34d,5840896,8347648,0,0,268435456,0 +1790884330,sparkyfitness-db,7150f7f09c31,216383488,355598336,0,0,536870912,0 +1790884330,sparkyfitness-server,92ea34048581,388538368,418418688,0,0,1073741824,0 +1790884330,sparkyfitness,44fb9597d34d,5840896,8384512,0,0,268435456,0 +1790884332,sparkyfitness-db,7150f7f09c31,216383488,355598336,0,0,536870912,0 +1790884332,sparkyfitness-server,92ea34048581,388538368,418414592,0,0,1073741824,0 +1790884332,sparkyfitness,44fb9597d34d,5840896,8093696,0,0,268435456,0 +1790884334,sparkyfitness-db,7150f7f09c31,216383488,355598336,0,0,536870912,0 +1790884334,sparkyfitness-server,92ea34048581,388538368,418738176,0,0,1073741824,0 +1790884335,sparkyfitness,44fb9597d34d,5840896,8409088,0,0,268435456,0 +1790884337,sparkyfitness-db,7150f7f09c31,214642688,353873920,0,0,536870912,0 +1790884337,sparkyfitness-server,92ea34048581,388538368,418672640,0,0,1073741824,0 +1790884337,sparkyfitness,44fb9597d34d,5840896,8331264,0,0,268435456,0 +1790884339,sparkyfitness-db,7150f7f09c31,159584256,297447424,0,0,536870912,0 +1790884339,sparkyfitness-server,92ea34048581,384606208,414724096,0,0,1073741824,0 +1790884339,sparkyfitness,44fb9597d34d,5840896,8069120,0,0,268435456,0 +1790884341,sparkyfitness-db,7150f7f09c31,35680256,170831872,0,0,536870912,0 +1790884341,sparkyfitness-server,92ea34048581,384606208,414453760,0,0,1073741824,0 +1790884341,sparkyfitness,44fb9597d34d,5840896,8110080,0,0,268435456,0 +1790884343,sparkyfitness-db,7150f7f09c31,35680256,170831872,0,0,536870912,0 +1790884343,sparkyfitness-server,92ea34048581,384606208,414453760,0,0,1073741824,0 +1790884343,sparkyfitness,44fb9597d34d,5840896,8073216,0,0,268435456,0 +1790884345,sparkyfitness-db,7150f7f09c31,35680256,170831872,0,0,536870912,0 +1790884345,sparkyfitness-server,92ea34048581,384606208,414711808,0,0,1073741824,0 +1790884345,sparkyfitness,44fb9597d34d,5840896,7876608,0,0,268435456,0 +1790884347,sparkyfitness-db,7150f7f09c31,35680256,170831872,0,0,536870912,0 +1790884347,sparkyfitness-server,92ea34048581,384606208,414711808,0,0,1073741824,0 +1790884348,sparkyfitness,44fb9597d34d,5840896,8421376,0,0,268435456,0 +1790884350,sparkyfitness-db,7150f7f09c31,33918976,168837120,0,0,536870912,0 +1790884350,sparkyfitness-server,92ea34048581,384606208,414707712,0,0,1073741824,0 +1790884350,sparkyfitness,44fb9597d34d,5840896,8175616,0,0,268435456,0 +1790884352,sparkyfitness-db,7150f7f09c31,33918976,168943616,0,0,536870912,0 +1790884352,sparkyfitness-server,92ea34048581,384606208,414449664,0,0,1073741824,0 +1790884352,sparkyfitness,44fb9597d34d,5840896,8265728,0,0,268435456,0 +1790884354,sparkyfitness-db,7150f7f09c31,33918976,168828928,0,0,536870912,0 +1790884354,sparkyfitness-server,92ea34048581,384606208,414965760,0,0,1073741824,0 +1790884354,sparkyfitness,44fb9597d34d,5840896,8589312,0,0,268435456,0 +1790884356,sparkyfitness-db,7150f7f09c31,33918976,168828928,0,0,536870912,0 +1790884356,sparkyfitness-server,92ea34048581,384606208,414703616,0,0,1073741824,0 +1790884356,sparkyfitness,44fb9597d34d,5840896,8048640,0,0,268435456,0 +1790884358,sparkyfitness-db,7150f7f09c31,33918976,169046016,0,0,536870912,0 +1790884358,sparkyfitness-server,92ea34048581,384606208,414441472,0,0,1073741824,0 +1790884358,sparkyfitness,44fb9597d34d,5840896,8327168,0,0,268435456,0 +1790884360,sparkyfitness-db,7150f7f09c31,33918976,168828928,0,0,536870912,0 +1790884360,sparkyfitness-server,92ea34048581,384606208,414707712,0,0,1073741824,0 +1790884361,sparkyfitness,44fb9597d34d,5840896,8269824,0,0,268435456,0 +1790884363,sparkyfitness-db,7150f7f09c31,33918976,168833024,0,0,536870912,0 +1790884363,sparkyfitness-server,92ea34048581,384606208,414441472,0,0,1073741824,0 +1790884363,sparkyfitness,44fb9597d34d,5840896,8536064,0,0,268435456,0 +1790884365,sparkyfitness-db,7150f7f09c31,33918976,168828928,0,0,536870912,0 +1790884365,sparkyfitness-server,92ea34048581,384606208,415080448,0,0,1073741824,0 +1790884365,sparkyfitness,44fb9597d34d,5840896,8335360,0,0,268435456,0 +1790884367,sparkyfitness-db,7150f7f09c31,33918976,168828928,0,0,536870912,0 +1790884367,sparkyfitness-server,92ea34048581,384606208,414441472,0,0,1073741824,0 +1790884367,sparkyfitness,44fb9597d34d,5840896,8568832,0,0,268435456,0 +1790884369,sparkyfitness-db,7150f7f09c31,5595136,139599872,0,0,536870912,0 +1790884369,sparkyfitness-server,92ea34048581,384618496,414441472,0,0,1073741824,0 +1790884369,sparkyfitness,44fb9597d34d,5840896,7782400,0,0,268435456,0 +1790884371,sparkyfitness-db,7150f7f09c31,5595136,140255232,0,0,536870912,0 +1790884371,sparkyfitness-server,92ea34048581,384618496,414441472,0,0,1073741824,0 +1790884371,sparkyfitness,44fb9597d34d,5840896,7782400,0,0,268435456,0 +1790884373,sparkyfitness-db,7150f7f09c31,5595136,139599872,0,0,536870912,0 +1790884375,sparkyfitness-db,7150f7f09c31,5595136,139599872,0,0,536870912,0 +1790884376,sparkyfitness-server,8b8eba39eb95,76718080,83709952,0,0,1073741824,0 +1790884378,sparkyfitness-db,7150f7f09c31,5595136,139587584,0,0,536870912,0 +1790884378,sparkyfitness-server,8b8eba39eb95,126332928,136646656,0,0,1073741824,0 +1790884380,sparkyfitness-db,7150f7f09c31,5595136,139571200,0,0,536870912,0 +1790884380,sparkyfitness-server,8b8eba39eb95,160112640,173379584,0,0,1073741824,0 +1790884382,sparkyfitness-db,7150f7f09c31,5595136,139759616,0,0,536870912,0 +1790884382,sparkyfitness-server,8b8eba39eb95,161632256,175644672,0,0,1073741824,0 +1790884384,sparkyfitness-db,7150f7f09c31,5595136,139571200,0,0,536870912,0 +1790884384,sparkyfitness-server,8b8eba39eb95,188768256,206675968,0,0,1073741824,0 +1790884386,sparkyfitness-db,7150f7f09c31,5595136,139571200,0,0,536870912,0 +1790884386,sparkyfitness-server,8b8eba39eb95,326746112,350871552,0,0,1073741824,0 +1790884388,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884389,sparkyfitness-server,8b8eba39eb95,334954496,358354944,0,0,1073741824,0 +1790884391,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884391,sparkyfitness-server,8b8eba39eb95,334954496,359129088,0,0,1073741824,0 +1790884393,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884393,sparkyfitness-server,8b8eba39eb95,334954496,358359040,0,0,1073741824,0 +1790884395,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884395,sparkyfitness-server,8b8eba39eb95,334954496,358866944,0,0,1073741824,0 +1790884397,sparkyfitness-db,7150f7f09c31,10629120,146632704,0,0,536870912,0 +1790884397,sparkyfitness-server,8b8eba39eb95,334954496,358350848,0,0,1073741824,0 +1790884399,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884399,sparkyfitness-server,8b8eba39eb95,334954496,358350848,0,0,1073741824,0 +1790884401,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884401,sparkyfitness-server,8b8eba39eb95,334954496,358604800,0,0,1073741824,0 +1790884404,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884404,sparkyfitness-server,8b8eba39eb95,334954496,358350848,0,0,1073741824,0 +1790884406,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884406,sparkyfitness-server,8b8eba39eb95,335171584,359088128,0,0,1073741824,0 +1790884406,sparkyfitness,bf56c1b7bcfc,5091328,6901760,0,0,268435456,0 +1790884408,sparkyfitness-db,7150f7f09c31,10629120,146632704,0,0,536870912,0 +1790884408,sparkyfitness-server,8b8eba39eb95,335171584,358817792,0,0,1073741824,0 +1790884408,sparkyfitness,bf56c1b7bcfc,5091328,6529024,0,0,268435456,0 +1790884410,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884410,sparkyfitness-server,8b8eba39eb95,335171584,359084032,0,0,1073741824,0 +1790884410,sparkyfitness,bf56c1b7bcfc,5091328,6410240,0,0,268435456,0 +1790884412,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884412,sparkyfitness-server,8b8eba39eb95,335171584,359997440,0,0,1073741824,0 +1790884412,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884415,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884415,sparkyfitness-server,8b8eba39eb95,335171584,360259584,0,0,1073741824,0 +1790884415,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884417,sparkyfitness-db,7150f7f09c31,10629120,146370560,0,0,536870912,0 +1790884417,sparkyfitness-server,8b8eba39eb95,335175680,361656320,0,0,1073741824,0 +1790884417,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884419,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884419,sparkyfitness-server,8b8eba39eb95,335196160,362184704,0,0,1073741824,0 +1790884419,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884421,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884421,sparkyfitness-server,8b8eba39eb95,335196160,361943040,0,0,1073741824,0 +1790884421,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884423,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884423,sparkyfitness-server,8b8eba39eb95,335196160,362196992,0,0,1073741824,0 +1790884423,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884425,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884425,sparkyfitness-server,8b8eba39eb95,335196160,362205184,0,0,1073741824,0 +1790884425,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884428,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884428,sparkyfitness-server,8b8eba39eb95,335196160,362192896,0,0,1073741824,0 +1790884428,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884430,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884430,sparkyfitness-server,8b8eba39eb95,335196160,362192896,0,0,1073741824,0 +1790884430,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884432,sparkyfitness-db,7150f7f09c31,5595136,141217792,0,0,536870912,0 +1790884432,sparkyfitness-server,8b8eba39eb95,335196160,362201088,0,0,1073741824,0 +1790884432,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884434,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884434,sparkyfitness-server,8b8eba39eb95,335196160,361709568,0,0,1073741824,0 +1790884434,sparkyfitness,bf56c1b7bcfc,5091328,6406144,0,0,268435456,0 +1790884436,sparkyfitness-db,7150f7f09c31,5595136,140845056,0,0,536870912,0 +1790884436,sparkyfitness-server,8b8eba39eb95,335290368,362045440,0,0,1073741824,0 +1790884436,sparkyfitness,bf56c1b7bcfc,5136384,7254016,0,0,268435456,0 diff --git a/documentation/audits/visitors-2026-10-01/C/bench/move/mem-summary.txt b/documentation/audits/visitors-2026-10-01/C/bench/move/mem-summary.txt new file mode 100644 index 00000000..4c7fb09a --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/bench/move/mem-summary.txt @@ -0,0 +1,8 @@ +from-birth 2 s sampler, MV-sparkyfitness (one row per container INSTANCE: FROM v0.17.2, TO v0.17.3, ABORT v0.17.2); swap 0 bench +sparkyfitness-db 7150f7f09c31 19:40:26-19:53:56 n= 373 peak anon 272.9 MiB = 53.3 % of 512 MiB; peak current 408.1 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness-server fc73a15b1520 19:40:37-19:41:39 n= 30 peak anon 328.7 MiB = 32.1 % of 1024 MiB; peak current 354.4 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness 66426a76164e 19:41:09-19:41:39 n= 15 peak anon 5.0 MiB = 1.9 % of 256 MiB; peak current 6.5 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness-server 92ea34048581 19:41:43-19:52:51 n= 307 peak anon 391.5 MiB = 38.2 % of 1024 MiB; peak current 421.3 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness 44fb9597d34d 19:42:13-19:52:51 n= 293 peak anon 6.8 MiB = 2.6 % of 256 MiB; peak current 9.5 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness-server 8b8eba39eb95 19:52:56-19:53:56 n= 29 peak anon 319.8 MiB = 31.2 % of 1024 MiB; peak current 345.4 MiB; oom_kill 0; restarts 0; swap.current ['0'] +sparkyfitness bf56c1b7bcfc 19:53:26-19:53:56 n= 15 peak anon 4.9 MiB = 1.9 % of 256 MiB; peak current 6.9 MiB; oom_kill 0; restarts 0; swap.current ['0'] diff --git a/documentation/audits/visitors-2026-10-01/C/box/sparky-box.txt b/documentation/audits/visitors-2026-10-01/C/box/sparky-box.txt new file mode 100644 index 00000000..cac05030 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/C/box/sparky-box.txt @@ -0,0 +1 @@ +##### SparkyFitness on 9202 — controller gitea.dooplex.hu/admin/felhom-controller:0.286.1 | catalog ca144ea b | 2026-10-01T20:05:23Z diff --git a/documentation/audits/visitors-2026-10-01/D/L-D1b-r772-live-0.286.1.txt b/documentation/audits/visitors-2026-10-01/D/L-D1b-r772-live-0.286.1.txt new file mode 100644 index 00000000..1a091467 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/D/L-D1b-r772-live-0.286.1.txt @@ -0,0 +1,20 @@ +# R-772 live on 9202, controller 0.286.1: stop paperless-webserver (the probe's container), poll GET /api/stacks/paperless-ngx every 5 s +before: running healthy= True not_checked= None last_check= 2026-10-01T19:47:47.114216049Z +stopped at 19:48:33 +19:48:38 degraded healthy= True not_checked= None last_check= 2026-10-01T19:47:47.114216049Z +19:48:43 degraded healthy= True not_checked= None last_check= 2026-10-01T19:47:47.114216049Z +19:48:48 degraded healthy= False not_checked= True last_check= 2026-10-01T19:48:47.114422945Z +19:48:53 degraded healthy= False not_checked= True last_check= 2026-10-01T19:48:47.114422945Z +19:48:58 degraded healthy= False not_checked= True last_check= 2026-10-01T19:48:57.14391394Z +19:49:03 degraded healthy= False not_checked= True last_check= 2026-10-01T19:48:57.14391394Z +started at 19:49:05 +19:49:10 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:15 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:20 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:25 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:30 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:35 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:41 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:46 starting healthy= False not_checked= True last_check= 2026-10-01T19:49:07.183669754Z +19:49:51 running healthy= True not_checked= None last_check= 2026-10-01T19:49:47.157383205Z +the app page line (ASCII fragment 'egeszsegellenorzes' is accented; checked by data attribute): diff --git a/documentation/audits/visitors-2026-10-01/D/r773-live.txt b/documentation/audits/visitors-2026-10-01/D/r773-live.txt index 7f39858e..851cb339 100644 --- a/documentation/audits/visitors-2026-10-01/D/r773-live.txt +++ b/documentation/audits/visitors-2026-10-01/D/r773-live.txt @@ -7,3 +7,14 @@ BEFORE remove — lock record + files: setup_gate: | state: open | since: "2026- BEFORE remove — a stranger: {'GET /signup': '403', 'POST users.create': '403'} night chain (debug action) -> 202 {'data': {'legs': ['db-dump', 'tier2', 'update-leg']}, 'message': 'started', 'ok': True} restore points offered: [(None, '2026-10-01T19:15:29Z')] +remove KEEPING backups -> 200 {'ok': True, 'data': {'removed': 'karakeep', 'volumes_removed': ['karakeep_karakeep_data', 'karakeep_karakeep_meili'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'verified': True}, 'message': +AFTER remove — lock record + files: --- | no block/gate file +restore: {'ok': True, 'snapshot_id': 'helyi', 'http': 'HTTP/2 302', 'seconds': 79.0, 'state_after': 'running', 'hold_after': None, 'why': None} +AFTER remove + restore — lock record + files: setup_gate: | state: open | since: "2026-10-01T19:36:20Z" | hosts: | - bookmarks.enkisfelhom.hu | opened_at: "2026-10-01T19:36:20Z" | opened_by: restore | native_lock: applied | after_setup: | --- | signup-block-karakeep.yml +AFTER remove + restore — a stranger: {'GET /signup': '403', 'POST users.create': '403'} + karakeep: readback http=200 found=True (controls: no key 401, wrong 401, absent 404) +the household's data back: True +controller log: 2026/10/01 19:12:39 setup_gate.go:232: [INFO] [web] setup gate karakeep: the household passed (a dashboard session vouched for this browser) — visitor 192.168.0.180 +2026/10/01 19:36:17 signup_block.go:175: [INFO] [stacks] karakeep: sign-up block removed (window open, app removed, or no block wanted) +2026/10/01 19:36:20 after_setup.go:253: [INFO] [stacks] karakeep: restored after a removal — sign-up closed again as after its setup (hosts [bookmarks.enkisfelhom.hu]) + diff --git a/documentation/audits/visitors-2026-10-01/E/demo-felhom-reset-restarts.txt b/documentation/audits/visitors-2026-10-01/E/demo-felhom-reset-restarts.txt new file mode 100644 index 00000000..f2370d2c --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/demo-felhom-reset-restarts.txt @@ -0,0 +1 @@ +# demo-felhom (N100): its one installed reset app restarted, 2026-10-01T19:53:48Z: opengist -> 200 diff --git a/documentation/audits/visitors-2026-10-01/E/demo-hp-reset-restarts.txt b/documentation/audits/visitors-2026-10-01/E/demo-hp-reset-restarts.txt new file mode 100644 index 00000000..803ec494 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/demo-hp-reset-restarts.txt @@ -0,0 +1,6 @@ +# demo-hp: the 5 installed apps with the router reset restarted through the product (POST /api/stacks//restart), 2026-10-01T19:52:45Z +adventurelog restart -> 200 +docmost restart -> 200 +opengist restart -> 200 +paperless-ngx restart -> 200 +romm restart -> 200 diff --git a/documentation/audits/visitors-2026-10-01/E/docmost-reset-tunnel.txt b/documentation/audits/visitors-2026-10-01/E/docmost-reset-tunnel.txt new file mode 100644 index 00000000..62e4b780 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/docmost-reset-tunnel.txt @@ -0,0 +1,2 @@ +# docmost (router reset) through the REAL tunnel, 12 wrong logins, each with a NEW forged X-Forwarded-For — the limit must still bite (not dodgeable), 2026-10-01T19:53:22Z +401 401 401 401 401 401 401 401 401 401 429 429 diff --git a/documentation/audits/visitors-2026-10-01/E/rollout-felhom-pve.txt b/documentation/audits/visitors-2026-10-01/E/rollout-felhom-pve.txt new file mode 100644 index 00000000..c5728116 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/rollout-felhom-pve.txt @@ -0,0 +1,8 @@ +/traefik running started=2026-10-01T19:50:19.666854369Z felhom-tunnel=172.16.253.3 traefik-public=172.18.0.4 +/cloudflared running started=2026-10-01T19:50:20.305417716Z felhom-tunnel=172.16.253.2 +[{"Subnet":"172.16.253.0/29","IPRange":"172.16.253.4/30","Gateway":"172.16.253.1"}] +2026/10/01 19:50:15 [INFO] [infra] creating docker network felhom-tunnel (172.16.253.0/29) +2026/10/01 19:50:15 [INFO] [infra] wrote the forwarded-header clean-up → /opt/docker/stacks/traefik/dynamic/forwarded.yml (felhom-forwarded) +2026/10/01 19:50:15 [INFO] [infra] traefik config changed (docker-compose.yml, traefik.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds) +2026/10/01 19:50:19 [INFO] [infra] connected felhom-controller to traefik-public +2026/10/01 19:50:19 [INFO] [infra] cloudflared compose changed (tunnel network true) — recreating cloudflared (the tunnel reconnects in seconds) diff --git a/documentation/audits/visitors-2026-10-01/E/rollout-hp.txt b/documentation/audits/visitors-2026-10-01/E/rollout-hp.txt new file mode 100644 index 00000000..9036c67b --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/rollout-hp.txt @@ -0,0 +1,8 @@ +/traefik running started=2026-10-01T19:50:22.93261322Z felhom-tunnel=172.16.253.3 traefik-public=172.18.0.3 +/cloudflared running started=2026-10-01T19:50:24.171175191Z felhom-tunnel=172.16.253.2 +[{"Subnet":"172.16.253.0/29","IPRange":"172.16.253.4/30","Gateway":"172.16.253.1"}] +2026/10/01 19:50:18 infra.go:207: [INFO] [infra] creating docker network felhom-tunnel (172.16.253.0/29) +2026/10/01 19:50:18 infra.go:233: [INFO] [infra] wrote the forwarded-header clean-up → /opt/docker/stacks/traefik/dynamic/forwarded.yml (felhom-forwarded) +2026/10/01 19:50:18 infra.go:141: [INFO] [infra] traefik config changed (docker-compose.yml, traefik.yml, tunnel trust true) — rewriting and recreating traefik (routing pauses a few seconds) +2026/10/01 19:50:23 infra.go:338: [INFO] [infra] connected felhom-controller to traefik-public +2026/10/01 19:50:23 infra.go:182: [INFO] [infra] cloudflared compose changed (tunnel network true) — recreating cloudflared (the tunnel reconnects in seconds) diff --git a/documentation/audits/visitors-2026-10-01/E/smoke-demo-hp-tunnel.txt b/documentation/audits/visitors-2026-10-01/E/smoke-demo-hp-tunnel.txt new file mode 100644 index 00000000..98a6a22e --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/E/smoke-demo-hp-tunnel.txt @@ -0,0 +1,13 @@ +# smoke after 0.286.1 on demo-hp: every routed host, GET / through the REAL tunnel from DooPlex, 2026-10-01T19:51:07Z +a1-echo.enkisfelhom.hu 200 +books.enkisfelhom.hu 302 +docs.enkisfelhom.hu 200 +files.enkisfelhom.hu 200 +gist.enkisfelhom.hu 302 +jatek.enkisfelhom.hu 200 +papir.enkisfelhom.hu 302 +paste.enkisfelhom.hu 200 +pdf.enkisfelhom.hu 200 +time.enkisfelhom.hu 302 +travel.enkisfelhom.hu 200 +wiki.enkisfelhom.hu 302 diff --git a/documentation/audits/visitors-2026-10-01/tools/bookstack_36.py b/documentation/audits/visitors-2026-10-01/tools/bookstack_36.py new file mode 100644 index 00000000..cda598f6 --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/tools/bookstack_36.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +"""bookstack_36.py — checklist 3.6 for BookStack with and without APP_PROXIES=172.16.0.0/12, on 9202 through the SIMULATED +tunnel (bslogin.sh in a curl container at 172.16.253.2). Phase 1 = the live template (control); phase 2 = the same box +with APP_PROXIES added by hand to the stack's compose and the app restarted through the product. Env: SC, EV.""" +import os, subprocess, sys, time +sys.path.insert(0, "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts") +import box_walk as w +APP, SUB, EMAIL = "bookstack", "wiki", "admin@admin.com" +log = open(f"{w.EV}/bookstack-3.6.txt", "a", buffering=1) +def say(*a): + w.say(*a); log.write(" ".join(map(str, a)) + "\n") +def login(visitor, forged, pw): + return w.guest(f"docker run --rm --network felhom-tunnel --ip 172.16.253.2 -v /root/bslogin.sh:/s.sh:ro -v /root/.bspw:/pw:ro " + f"curlimages/curl:8.11.1 sh /s.sh {visitor} {forged} {EMAIL} {pw}").strip().splitlines()[-1:] +def round_(label): + say(f"## {label} — {time.strftime('%FT%TZ', time.gmtime())}") + r = [login("198.51.100.66", f"10.5.0.{i}", "-wrong")[0] for i in range(1, 7)] + say(f" stranger 198.51.100.66, 6 wrong for {EMAIL} (a new forged leftmost each): {r}") + say(f" household 203.0.113.10, the right password, at once: {login('203.0.113.10', '203.0.113.10', '/pw')}") +w.login() +say(f"##### BookStack 3.6 on 9202 — controller {w.guest('docker inspect felhom-controller --format {{.Config.Image}}').strip()}") +say("deploy ->", w.deploy(APP, SUB)) +pw = (w.GENERATED.get(APP) or {}).get("ADMIN_PASSWORD") +if not pw: sys.exit("no generated ADMIN_PASSWORD") +w.guest(f"umask 077; cat > /root/.bspw <<'PEOF'\n{pw}\nPEOF\ntruncate -s -1 /root/.bspw; chmod 644 /root/.bspw") +for _ in range(60): # after_install replaces the login, then the hold opens + if "install_hold" not in w.guest("grep -A2 '^install_hold:' /opt/docker/stacks/bookstack/app.yaml | grep -c 'state: open' | sed 's/^1$/open/;s/^0$/install_hold/'"): break + time.sleep(5) +w.wait_app(SUB, "/login", tries=40) +round_("phase 1 — the live template (no APP_PROXIES): control") +say(" waiting 75 s for BookStack's 60-second throttle to pass"); time.sleep(75) +w.guest("cd /opt/docker/stacks/bookstack && grep -q APP_PROXIES docker-compose.yml || sed -i 's#^\\(\\s*\\)- APP_URL=#\\1- APP_PROXIES=172.16.0.0/12\\n\\1- APP_URL=#' docker-compose.yml; grep -n APP_PROXIES docker-compose.yml") +code, d = w.ctl("POST", f"/api/stacks/{APP}/restart"); say("restart through the product ->", code) +w.wait_app(SUB, "/login", tries=40) +say(" the running container's env:", w.guest("docker exec bookstack printenv APP_PROXIES").strip()) +round_("phase 2 — APP_PROXIES=172.16.0.0/12") +say(" LAN household (192.168.0.180), right password, while the stranger is throttled:") +w.guest("true") diff --git a/documentation/audits/visitors-2026-10-01/tools/bslogin.sh b/documentation/audits/visitors-2026-10-01/tools/bslogin.sh new file mode 100755 index 00000000..c80eda4c --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/tools/bslogin.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# bslogin.sh — ONE BookStack form login through the SIMULATED tunnel +# (run in a curl container at 172.16.253.2). Prints: ok | wrong | THROTTLED | ? +V=$1; F=$2; E=$3; P=$4; H=wiki.enkisfelhom.hu; J=/tmp/jar.$$ +x="X-Forwarded-For: $F, $V"; c="CF-Connecting-IP: $V" +curl -sk -c $J -b $J "https://traefik/login" -H "Host: $H" -H "$x" -H "$c" -o /tmp/p.$$ +T=$(grep -o 'name="_token" value="[^"]*"' /tmp/p.$$ | head -1 | sed 's/.*value="//;s/"$//') +if [ "$P" = "-wrong" ]; then PW="wrong-$$"; else PW=$(cat "$P"); fi +L=$(curl -sk -c $J -b $J -o /dev/null -w '%{redirect_url}' "https://traefik/login" -H "Host: $H" -H "$x" -H "$c" \ + --data-urlencode "_token=$T" --data-urlencode "email=$E" --data-urlencode "password=$PW") +case "$L" in */login) curl -sk -c $J -b $J "https://traefik/login" -H "Host: $H" -H "$x" -H "$c" -o /tmp/q.$$ + if grep -qiE 'too many|sok .*k.s.rlet|throttle' /tmp/q.$$; then echo THROTTLED; else echo wrong; fi;; + *) echo "ok"; esac +rm -f $J /tmp/p.$$ /tmp/q.$$ diff --git a/documentation/audits/visitors-2026-10-01/tools/sparky_box.py b/documentation/audits/visitors-2026-10-01/tools/sparky_box.py new file mode 100644 index 00000000..4c0d323c --- /dev/null +++ b/documentation/audits/visitors-2026-10-01/tools/sparky_box.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +"""sparky_box.py — SparkyFitness's checklist rows on scratch 9202 (live catalog, controller 0.286.1), through the product's +own endpoints. Strangers through traefik with no session and no gate cookie; the tunnel SIMULATED by a curl container at +172.16.253.2 (Part A's method). Secrets never printed. Env: SC, EV.""" +import json, os, re, subprocess, sys, time +sys.path.insert(0, "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts") +import box_walk as w +import upgrade_fixtures_box as fixtures +APP, SUB = "sparkyfitness", "sparky" +HOST = f"{SUB}.{w.DOMAIN}"; FX = fixtures.FIXTURES[APP] +log = open(f"{w.EV}/sparky-box.txt", "a", buffering=1) +def say(*a): + w.say(*a); log.write(" ".join(map(str, a)) + "\n") +def lan(path, *a): + r = subprocess.run(["curl", "-sk", "--max-time", "10", "-o", "/dev/null", "-w", "%{http_code}", "-H", f"Host: {HOST}"] + list(a) + [f"{w.BASE}{path}"], + capture_output=True, text=True) + return r.stdout.strip() +def tun(visitor, forged, path, data): + cmd = (f"docker run --rm --network felhom-tunnel --ip 172.16.253.2 curlimages/curl:8.11.1 -sk -o /dev/null -w '%{{http_code}}' " + f"'https://traefik{path}' -H 'Host: {HOST}' -H 'X-Forwarded-For: {forged}, {visitor}' -H 'CF-Connecting-IP: {visitor}' " + f"-H 'Origin: https://{HOST}' -H 'Content-Type: application/json' --data '{data}'") + return w.guest(cmd).strip()[-3:] +def state(): return w.stack(APP).get("state") + +w.login() +say(f"##### SparkyFitness on 9202 — controller {w.guest('docker inspect felhom-controller --format {{.Config.Image}}').strip()} | catalog " + + w.guest("cd /var/lib/docker/volumes/felhom-controller-data/_data/data/catalog-cache && git log --oneline -1").strip()[:9] + + f" | {time.strftime('%FT%TZ', time.gmtime())}") +# 3.5 / 4.3 — a stranger polls from the press; the install timed +w.guest(f"""cat > /root/sp-poll.sh <<'PEOF' +out=/root/sp-poll.txt; : > $out; t0=$(date +%s) +while [ $(( $(date +%s) - t0 )) -lt 240 ]; do + r=$(curl -sk --max-time 4 -o /root/sp-poll.body -w '%{{http_code}}' -H 'Host: {HOST}' -H 'Content-Type: application/json' -X POST --data '{{"email":"s@x.hu","password":"Stranger-1234","name":"s"}}' https://127.0.0.1/api/auth/sign-up/email) + echo "$(date +%H:%M:%S) $r $(head -c 60 /root/sp-poll.body | tr '\\n' ' ')" >> $out; sleep 1 +done +PEOF +(nohup sh /root/sp-poll.sh >/dev/null 2>&1 &)""") +t0 = time.time(); ok = w.deploy(APP, SUB); say(f"deploy -> {ok} ({round(time.time()-t0)} s to `deployed`)") +healthy = None +for _ in range(150): + hs = w.guest("for c in sparkyfitness sparkyfitness-server sparkyfitness-db; do docker inspect -f '{{if .State.Health}}{{.State.Health.Status}}{{else}}nohc{{end}}' $c; done").split() + if hs and all(h in ("healthy", "nohc") for h in hs): healthy = time.time() - t0; break + time.sleep(2) +say(f"4.3 every container healthy {round(healthy) if healthy else 'NEVER'} s after the press; restarts:", + w.guest("for c in sparkyfitness sparkyfitness-server sparkyfitness-db; do echo -n \"$c=$(docker inspect -f '{{.RestartCount}}' $c) \"; done").strip(), + "| state:", state()) +say("3.3 before the setup, a stranger (LAN) on / , /api/auth/sign-up/email:", lan("/", "-H", "Accept: text/html"), lan("/api/auth/sign-up/email", "-X", "POST", "-H", "Content-Type: application/json", "--data", "{}")) +tok = FX.seed(w, SUB, say) # 3.1: the household through the gate, the first account +say("3.1 the household's first account through the gate ->", "ok" if tok else "FAILED " + str(getattr(FX, "tried", ""))) +time.sleep(3); w.guest("pkill -f sp-poll.sh || true") +poll = w.guest("cat /root/sp-poll.txt").strip().splitlines(); codes = {} +for l in poll: codes[l.split(" ")[1]] = codes.get(l.split(" ")[1], 0) + 1 +say(f"3.5 a stranger's {len(poll)} sign-up tries (1/s) from the press until the household's account: codes {codes}; any 200: {any(' 200 ' in l for l in poll)}") +# the household's 'Done, I set it up' (no probe in the template) +csrf = open(f"{w.SC}/csrf{os.getpid()}.txt").read().strip(); sess = open(f"{w.SC}/sess{os.getpid()}.txt").read().strip() +r = subprocess.run(["curl", "-sk", "-o", "/dev/null", "-w", "%{http_code}", "-H", w.HOSTHDR, "-H", f"Cookie: {sess}", "-H", f"X-CSRF-Token: {csrf}", + "-X", "POST", f"{w.BASE}/apps/{APP}/setup-gate/open"], capture_output=True, text=True) +say("the household presses 'Done, I set it up' ->", r.stdout) +for _ in range(40): + if "native_lock: applied" in w.guest(f"grep -A8 '^setup_gate:' /opt/docker/stacks/{APP}/app.yaml"): break + time.sleep(5) +say("3.4 lock record:", " | ".join(x.strip() for x in w.guest(f"grep -A8 '^setup_gate:' /opt/docker/stacks/{APP}/app.yaml").splitlines()), + "| app env SPARKY_FITNESS_DISABLE_SIGNUP =", w.guest("docker exec sparkyfitness-server printenv SPARKY_FITNESS_DISABLE_SIGNUP").strip()) +w.wait_app(SUB, "/", want=("200",), tries=40) +body = json.dumps({"email": "stranger@example.com", "password": "Stranger-pass-1234", "name": "S"}) +for p in ("/api/auth/sign-up/email", "/API/Auth/Sign-Up/email", "//api//auth/sign-up/email"): + say(f"3.4 a stranger signs up at {p} (LAN) ->", lan(p, "-X", "POST", "-H", "Content-Type: application/json", "-H", f"Origin: https://{HOST}", "--data", body)) +say("3.4 the same straight at the server (behind the block — the app's own switch):", + w.guest("docker run --rm --network traefik-public curlimages/curl:8.11.1 -s -o /dev/null -w '%{http_code}' http://sparkyfitness-server:3010/api/auth/sign-up/email " + f"-H 'Content-Type: application/json' -H 'Origin: https://{HOST}' --data '{body}' || true").strip()[-3:]) +say("3.9 browser-shaped sign-in (Origin, JSON) right / wrong:", FX._signin(w, SUB, tok["email"], tok["pw"])[0], FX._signin(w, SUB, tok["email"], "wrong-x")[0]) +# 3.6 — lock-out through the simulated tunnel +say("3.6 waiting 20 s (better-auth's own window)"); time.sleep(20) +seq = [] +for i in range(1, 9): + seq.append(tun("198.51.100.66", f"10.6.0.{i}", "/api/auth/sign-in/email", json.dumps({"email": tok["email"], "password": f"wrong-{i}"}))) +say(f"3.6 stranger 198.51.100.66, 8 wrong sign-ins for the household's e-mail, a new forged leftmost each: {seq}") +t1 = time.time(); hh = [] +for _ in range(20): + c = tun("203.0.113.10", "203.0.113.10", "/api/auth/sign-in/email", json.dumps({"email": tok["email"], "password": tok["pw"]})) + hh.append((round(time.time() - t1), c)) + if c == "200": break + time.sleep(3) +say(f"3.6 the household from 203.0.113.10, right password, from the stranger's last try on (s, code): {hh}") +# 1.5 / 1.8 / 0.4 +say("1.5 processes:", w.guest("for c in sparkyfitness-server sparkyfitness; do echo -n \"$c: \"; docker exec $c sh -c 'cat /proc/1/cmdline | tr \"\\000\" \" \"'; echo; done").strip()) +say("1.8 an unknown page ->", lan("/felhom-no-such-page-xyz/", "-H", "Accept: text/html"), "| an unknown API ->", lan("/api/felhom-no-such")) +say("0.4 outbound hosts named in the server's first-start log:", sorted(set(re.findall(r"https?://([a-z0-9.-]+\.[a-z]{2,})", w.guest("docker logs sparkyfitness-server 2>&1 | head -400"))))[:12]) +# 4.4 — negative control +w.guest("docker stop sparkyfitness-server >/dev/null"); seen = [] +for i in range(9): + time.sleep(5); s = state() + if not seen or seen[-1][1] != s: seen.append((5 * (i + 1), s)) +say(f"4.4 sparkyfitness-server STOPPED — states (s, state): {seen}; the front door / -> {lan('/')} ; /api/health -> {lan('/api/health')}") +w.guest("docker start sparkyfitness-server >/dev/null") +for i in range(40): + time.sleep(5) + if state() == "running": say(f" running again {5*(i+1)} s after docker start"); break +# 2.7 size +say("2.7 volumes after the seed:", w.guest("for v in $(docker volume ls -q | grep sparkyfitness); do echo -n \"$v=$(du -sh /var/lib/docker/volumes/$v/_data | cut -f1) \"; done").strip()) +# 2.5 backup → remove keeping backups → restore → read back +code, d = w.ctl("POST", "/api/debug/backup/night-chain"); say("2.5 the night chain (debug action) ->", code) +for _ in range(60): + if "finished in" in w.guest("docker logs --since 3m felhom-controller 2>&1 | grep 'night-chain\\] finished' | tail -1"): break + time.sleep(5) +say(" restore points:", [(s.get("id") or s.get("snapshot_id"), s.get("time") or s.get("created")) for s in w.snapshots(APP)][:2]) +w.ctl("POST", f"/api/stacks/{APP}/stop"); time.sleep(10) +code, d = w.ctl("POST", f"/api/stacks/{APP}/remove", {"remove_hdd_data": False, "remove_backups": False}) +say(f"2.6 remove KEEPING backups -> {code} {str(d)[:220]}") +time.sleep(6); say(" left after:", w.guest(f"docker ps -a --format '{{{{.Names}}}}' | grep -E '^{APP}'; docker volume ls -q | grep -i {APP}").strip() or "nothing") +r = w.restore(APP); say("2.5 restore:", {k: r.get(k) for k in ("ok", "snapshot_id", "seconds", "state_after", "hold_after")}) +w.wait_app(SUB, "/", want=("200",), tries=60) +say("2.5 the seed reads back after remove + restore:", FX.verify(w, SUB, tok, say)) +say(" R-773 on a restored sparkyfitness: record", " | ".join(x.strip() for x in w.guest(f"grep -A8 '^setup_gate:' /opt/docker/stacks/{APP}/app.yaml").splitlines()[:7]), + "| a stranger signs up ->", lan("/api/auth/sign-up/email", "-X", "POST", "-H", "Content-Type: application/json", "-H", f"Origin: https://{HOST}", "--data", body)) +# 2.6 remove with data +w.ctl("POST", f"/api/stacks/{APP}/stop"); time.sleep(10) +code, d = w.ctl("POST", f"/api/stacks/{APP}/remove", {"remove_hdd_data": True, "remove_backups": True}) +say(f"2.6 remove WITH data and backups -> {code} {str(d)[:220]}") +time.sleep(6); say(" left after:", w.guest(f"ls -d /opt/docker/stacks/{APP} 2>/dev/null; docker ps -a --format '{{{{.Names}}}}' | grep -E '^{APP}'; docker volume ls -q | grep -i {APP}").strip() or "nothing") +w.guest("rm -f /root/sp-poll.sh /root/sp-poll.txt /root/sp-poll.body") diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index 5c30c040..2e16b2aa 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -864,8 +864,8 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-750** | **[P3-LOW] The registry no longer holds controller releases older than 0.213.0 (2026-08-12) — something removed them, and nothing records what.** MEASURED 2026-10-01 (anonymous registry API, `audits/rulings-2026-10-01/B/`): `felhom-controller` has 91 tags, the oldest release 0.213.0; `0.201.0` answers 404; Gitea's package list starts 2026-08-12. No runbook, row or memory names a clean-up. Today nothing needs those versions: a box runs a newer one, a whole-guest restore brings the guest's own Docker store back (mp0 `backup=1`), and decision 56 deletes only on the box. **But** a box or a backup that names a removed version cannot pull it again (R-698's shape, for the controller). **Needs:** find what removed them (a Gitea clean-up rule?), and record the rule — or say it was a one-time act. Read-only on DooPlex. **-- 2026-10-01 (afternoon):** **Answered (read only, `audits/lockouts-2026-10-01/C/C1-registry-read.txt`).** Not a Gitea rule: `package_cleanup_rule` is EMPTY (READ ONLY query on the shared CNPG); `[cron.cleanup_packages]` only runs rules and Gitea's own expired-data clean-up. The cause is a MANUAL run of DooPlex's `~/git/misc-scripts/gitea-image-prune.sh --all --keep 7 --apply --reclaim` on the night of 2026-08-22/23, recorded in homelab-manifests HM-024 (the Gitea volume was full: `felhom-golden` 22 → 3 versions, /data 14.8 → 4.4 G); `--keep 7` per container package explains controller 0.213.0 (2026-08-12) as the oldest left. Nothing schedules it (crontabs, timers, cluster CronJobs read). If run again as its usage text says, it keeps 7 controller releases (about a day) and `--type generic --keep 3` would cut the agent to 3; it protects no vouched version. **Needs:** the operator's word on a written rule (STATUS). **-- 2026-10-01 (late afternoon):** The rule built (`09` §3 decision 62, operator): `admin/misc-scripts` `c9d5ed5` — `gitea-image-prune.sh` keeps the newest 20 + every version in use (floor, vouched golden, vouched agent, `min_agent`, the golden's baked images, the running hub), refuses (exit 3) when that list is unreadable; `tests/test-prune-plan.sh` red-proofed. Live dry-run: protected controller 0.285.0, golden 0.285.0, agent 0.138.0 + 0.131.0, hub 0.126.0, felhom-samba 1.1.0; would delete 70 controller and 8 hub tags — nothing deleted (no `--apply`). `audits/calibre-name-and-prune-2026-10-01/B/` | **CLOSED 2026-10-01 — decision 62, misc-scripts c9d5ed5** | | **R-751** | **[P2] The image clean-up after an app update could crash the whole controller: it re-read the app after a rescan and dereferenced a nil stack when the app was gone.** FOUND 2026-10-01 by the full test suite (controller v0.284.2): `RetainImagesAfterUpdate` runs in a goroutine; `TestR705_TheManualLegRunsByDay` removed its temp dir under it → `panic: invalid memory address` at `image_retention.go:291`. In a box the same happens when an app is removed (or its compose vanishes) between an update's end and the clean-up — a panic in a goroutine ends the process (the agent's supervisor restarts it). Fixed in v0.285.0 the same session: it returns when the app is gone; `TestRetainImagesAfterUpdate_AppGoneDoesNotPanic` seen panicking on the old code; both retention seams are no-ops in the stacks tests (`TestMain`), so no test leaves the goroutine running. `audits/rulings-2026-10-01/B/B1-red-proofs.txt` **-- 2026-10-01:** Delivered: floor 0.285.0 reached both demo boxes in ~6 s (hub `managed floor SERVED … from declared`). | **CLOSED 2026-10-01 — controller v0.285.0, floor 0.285.0** | | **R-752** | **[P3-LOW] Four more catalog apps let a stranger lock the household out with wrong passwords for a known login name — like mealie (R-747).** READ 2026-10-01 in each app's source at its pinned tag (not measured live): **calibre-web-automated v4.0.8** — Flask-Limiter on the login keyed on the lowercased USERNAME, 3/minute and 40/day, checked before the password; the default login is `admin` → up to a day; no env switch (a database setting). **wger 2.7** — django-axes keyed on IP, 10 failures, 30 min, each failure restarts it; behind traefik every client has traefik's IP → everyone is locked out (`AXES_*` env vars exist; `AXES_IPWARE_PROXY_COUNT` 0). **Grafana 13.2.3** — per-account, 5 failures in a sliding 5 minutes; a slow trickle keeps it closed (`GF_SECURITY_*`). **BookStack 26.09.1** — key `email|ip`, 5 tries, 60 s, hard-coded; `APP_PROXIES` empty, so the key is the e-mail alone. gokapi (3 s delay, no lock) and claper (per-IP 10/min, no account lock) cannot. **Needs:** per app, the smallest fix that keeps a guessing guard (calibre-web-automated and wger first — longest and broadest), each proven on 9202 as R-747's was. **-- 2026-10-01 (afternoon):** **Measured on 9202, each through traefik as a stranger with the public name** (`audits/lockouts-2026-10-01/B/`): **wger** — control: 10 wrong on `admin` locked the second member too; FIXED (decision 58, catalog `82fff32`): username, 5 min, database handler — the second member unaffected, admin in again at 7.5 min (each try during a lock restarts it — measured: 8-minute retries kept a 15-minute lock closed 40+ min). **BookStack** — 1.0 min, kept (decision 59). **Grafana** — 5.0 min, kept (decision 60); a trickle did not hold the household out once the burst aged. **calibre-web-automated** — the form locks 3/min (1.2 min measured) and **40/day per name: after 40 wrong tries in 14 min the right password was refused 2 min later still; only an app restart cleared it** (in-memory store); OPDS has its own 3/min per name (`cps/main.py:75`), no daily limit. No knob for the daily length; both fixes have a household cost — operator decision in STATUS. Installed apps: a settings-only change reaches the stack file at the next sync (images equal, ≤15 min) and the running app at the next `compose up -d` — Restart/Start (measured: the env changed only at Restart), an Update, or a backup's restart (`backup.go:972`, read). **-- 2026-10-01 (late afternoon):** calibre-web done by operator ruling `09` §3 decision 61 (catalog `e9f50b5`): a generated `ADMIN_USER` (`secret`, `hex:5`); `after_install` renames `admin` to it and proves it. 9202: 40 wrong tries on `admin`, the household in at once with its own name (form and OPDS). demo-hp renamed by hand; its name is in the operator's credentials file. All four apps answered (wger 58, BookStack 59, Grafana 60, calibre-web 61). An installed calibre-web is given a made-up name by the box — R-757. | **CLOSED 2026-10-01 — decisions 58–61** | -| **R-753** | **[P3-LOW] Behind the tunnel every visitor reaches an app with the SAME address — the tunnel container's — so every per-address guard is an "everyone" guard and every app's log is blind.** MEASURED 2026-10-01 (`audits/lockouts-2026-10-01/A/A1-client-address.txt`): on demo-hp through its real tunnel, a request from DooPlex's public address reached traefik as `172.18.0.5` (cloudflared, in the guest on `traefik-public`) and BookStack as `172.18.0.3` (traefik); on 9202 an echo container showed `X-Forwarded-For`/`X-Real-Ip` = the sending container for the tunnel's hop (traefik DROPS the incoming chain — good: a client cannot forge it) and the real address from the LAN; `CF-Connecting-IP` passes untouched and is FORGEABLE from the LAN. **No box-wide fix taken:** trusting cloudflared in traefik passes Cloudflare's appended chain, whose LEFTMOST entry the client writes — every app reading the leftmost address would believe it; cloudflared's address is docker-assigned; a single-address rewrite needs a traefik plugin (a new dependency). Per-app fixes trust no header (R-752). **Needs (operator):** whether to build a safe version (cloudflared on a fixed-address network + traefik trusting only it + per-app proxy counts), or keep "one address" and fix per app. Only ONE outside address was available (DooPlex has no IPv6); a second was not measured. | **OPEN — rank P3-LOW; owner: operator (direction), CC measures** | -| **R-754** | **[P3-LOW] `01-topology-and-trust.md` §7 says cloudflared runs on the Proxmox HOST as an agent-managed service; on every box it runs INSIDE the guest as a container the controller renders.** READ 2026-10-01: `felhom-controller` `internal/infra/templates/cloudflared-compose.yml.tmpl` (`container_name: cloudflared`, network `traefik-public`); demo-hp's guest 9201 runs `cloudflared` (ingress `*.enkisfelhom.hu -> https://traefik`); R-505 saw the same in VM 331. A design decision that the build does not follow — the document or the build is wrong, and only the operator decides which (R-370: a design decision is not a defect). | **OPEN — rank P3-LOW; owner: operator (which is right)** | +| **R-753** | **[P3-LOW] Behind the tunnel every visitor reaches an app with the SAME address — the tunnel container's — so every per-address guard is an "everyone" guard and every app's log is blind.** MEASURED 2026-10-01 (`audits/lockouts-2026-10-01/A/A1-client-address.txt`): on demo-hp through its real tunnel, a request from DooPlex's public address reached traefik as `172.18.0.5` (cloudflared, in the guest on `traefik-public`) and BookStack as `172.18.0.3` (traefik); on 9202 an echo container showed `X-Forwarded-For`/`X-Real-Ip` = the sending container for the tunnel's hop (traefik DROPS the incoming chain — good: a client cannot forge it) and the real address from the LAN; `CF-Connecting-IP` passes untouched and is FORGEABLE from the LAN. **No box-wide fix taken:** trusting cloudflared in traefik passes Cloudflare's appended chain, whose LEFTMOST entry the client writes — every app reading the leftmost address would believe it; cloudflared's address is docker-assigned; a single-address rewrite needs a traefik plugin (a new dependency). Per-app fixes trust no header (R-752). **Needs (operator):** whether to build a safe version (cloudflared on a fixed-address network + traefik trusting only it + per-app proxy counts), or keep "one address" and fix per app. Only ONE outside address was available (DooPlex has no IPv6); a second was not measured. **-- 2026-10-01 (evening): operator ruling `09` §3 decision 63 (extend the box's own gate; first the box tells visitors apart). BUILT, controller v0.286.1 (v0.286.0 never floored):** cloudflared alone on `felhom-tunnel` at the fixed `172.16.253.2`, traefik trusts forwarded headers from it only, an entrypoint middleware removes client-writable host/path/address headers (measured: Cloudflare passes a client's `X-Forwarded-Host`/`-Port` and APPENDS to its `X-Forwarded-For`); the controller reads the hop traefik saw (`clientaddr.go`). 19 catalog apps that read the LEFTMOST entry have the chain removed on their router (catalog `04e9516`..`50e4fb4`). **Live:** demo-hp's REAL tunnel — the app sees `6.6.6.6,37.191.56.193, 172.16.253.2`; the stranger's 5 wrong dashboard logins (rotating forged XFF) locked only `37.191.56.193`; docmost (reset) still throttles a rotating forger at try 11; every demo-hp app answers through the tunnel; 9202 simulated tunnel: the household from another address in at once, LAN/impostor forgeries counted as themselves. Both demo boxes reconciled traefik + cloudflared by themselves. Design + sweep of all 56: `audits/visitors-2026-10-01/A/`. Left: settings for right-walking apps (R-776), Emby/Jellyfin LAN rights (R-777), the roll-back window (R-778), a second outside address on the real tunnel (R-779). | **CLOSED 2026-10-01 — controller v0.286.1 (rows R-776..R-779 carry what is left)** | +| **R-754** | **[P3-LOW] `01-topology-and-trust.md` §7 says cloudflared runs on the Proxmox HOST as an agent-managed service; on every box it runs INSIDE the guest as a container the controller renders.** READ 2026-10-01: `felhom-controller` `internal/infra/templates/cloudflared-compose.yml.tmpl` (`container_name: cloudflared`, network `traefik-public`); demo-hp's guest 9201 runs `cloudflared` (ingress `*.enkisfelhom.hu -> https://traefik`); R-505 saw the same in VM 331. A design decision that the build does not follow — the document or the build is wrong, and only the operator decides which (R-370: a design decision is not a defect). **-- 2026-10-01 (evening):** the operator's brief: the build is right, correct the document. `01-topology-and-trust.md` §7 now says cloudflared runs INSIDE the guest as a controller-rendered container (and, since v0.286.0, at a fixed address on `felhom-tunnel`), and states the consequence: the data path is not independent of the guest. | **CLOSED 2026-10-01 — document corrected** | | **R-755** | **[P3-LOW] wger runs Django's DEVELOPMENT server in production: `manage.py runserver`, because the template does not set `WGER_USE_GUNICORN=True`.** MEASURED 2026-10-01 on 9202 (`ps` in the wger container: `python3 manage.py runserver 0.0.0.0:8000`); wger 2.7's `extras/docker/production/entrypoint.sh:81-87` runs gunicorn only with that switch. Django's own documentation says runserver is not for production (one process, not hardened). Not changed this session (a different change from R-752's; needs its own bench + box proof, memory watch included). **-- 2026-10-01 (checklist pilot):** re-measured on 9202 at the live template: still `manage.py runserver` (`audits/new-app-checklist-2026-10-01/C/C2-static-reads.txt`). The same server question now carries R-762 — runserver with DEBUG off serves no `/static` and no `/media`, so the fix for both is one decision (upstream's nginx front, or gunicorn + a static server). | **OPEN — rank P3-LOW; owner: CC (catalog)** | | **R-756** | **[P3-LOW] On 9202, "remove with drive data" refuses calibre-web with 409 „…/scratch_hdd/userdata/calibre-web tárhely jelenleg nem elérhető", while the controller container lists that folder.** MEASURED twice on 2026-10-01 (`audits/lockouts-2026-10-01/B/B1…`, `audits/calibre-name-and-prune-2026-10-01/A/A1…`): `POST /api/stacks/calibre-web/remove` with `remove_hdd_data` → 409; `docker exec felhom-controller ls -ld /mnt/felhom-drives/scratch_hdd/userdata/calibre-web` → the directory (dated 2026-09-22). The walk then removed the app keeping the data (R-442's fail-closed answer). Either the drive is not a registered drive on this scratch box (a test-venue artefact) or the resolver reads another path than the one it names. Not measured which. **-- 2026-10-01 (night, new apps):** the same 409 for Grimmory (`remove_hdd_data`), and a drive app's per-app backup is NOT offered for restore after a remove — the controller logged `drive … not mounted — skipping ensure (held by drive gate)`; the unit lives on that drive. So on 9202 checklist row 2.5 cannot be shown for any drive app until its scratch drive is a registered drive (`audits/new-apps-2026-10-01/box/grimmory/restore-why.txt`). | **OPEN — rank P3-LOW; owner: CC** | | **R-757** | **[P3-LOW] A template that gains a generated `secret` field makes the box INVENT that value for apps already installed — for calibre-web a login name the app never got.** MEASURED 2026-10-01 on demo-hp: 9 minutes after catalog `e9f50b5` (decision 61) synced, the controller logged `InjectMissingFields … injected missing fields: ADMIN_USER` (deploy.go:1337) and the app page's reveal returned a 10-character name that was NOT calibre-web's login (the app had kept its own name; `after_install` runs only after a fresh install). The page did not list the field, but the reveal answers it, and the password field's text now says "the user name above". demo-hp was fixed by renaming the app's user to the box's recorded name (credentials file updated). Any other installed calibre-web gets the same made-up name at its next sync while its login stays `admin` (no other box has one today: N100 none, Tester-2 not registered). **Needs:** InjectMissingFields must not invent a value an app has to have been GIVEN (a field consumed only by `after_install`), or such a field needs an "installed apps: ask" path. `audits/calibre-name-and-prune-2026-10-01/A/A2…, A3…` | **OPEN — rank P3-LOW; owner: CC (controller)** | @@ -883,10 +883,17 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-769** | **[P3-LOW] Pinchflat is not built: upstream is paused (no release in 2026, last push 2025-12-16) and its last release has no image tag.** READ 2026-10-01: ghcr's newest version tag `v2025.6.6`, `latest` amd64 only; runs as root by default; an unanswered 30 GB yt-dlp memory report (#866); third parties call it unmaintained (community-scripts #15968). Forks with images exist (Pinchflat-NGX, MorganKryze). **Needs:** the operator's word on a fork (a new upstream), after the YouTube sentence (R-767). `audits/new-apps-2026-10-01/FIT.md` | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator** | | **R-770** | **[P3-LOW] Invidious — fit check only; the recommendation is not to build it.** READ 2026-10-01: playback needs `invidious-companion` (rolling `latest`, no version tags); PostgreSQL 14 (EOL 2026-11); `registration_enabled: true` by default; upstream: a bot check means „your IP is blocked from YouTube”, a 429 can last 24 h, triggered by „someone on your network” — on our boxes that IP is the household's. One bad period in 2026 (March, ~2 weeks). No report found of a family's other devices being bot-checked (inference). **Needs:** the operator's go / no-go. `audits/new-apps-2026-10-01/FIT.md` | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator** | | **R-771** | **[P3-LOW] moonlight-web — fit check only; not buildable through an HTTP-only tunnel at usable latency.** READ 2026-10-01: two unrelated projects (MrCreativ3001/moonlight-web-stream, the original; linckosz/moonlight-web); both need Sunshine/Apollo/Wolf on a gaming PC on the LAN and WebRTC over UDP (40000-40100/udp; linckosz recommends host networking and sends telemetry by default); both have a WebSocket fallback (high latency, all video through the tunnel); a logged-in user controls the PC's desktop. **Needs:** the operator's go / no-go (LAN-only use would need a different publishing model). `audits/new-apps-2026-10-01/FIT.md` | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator** | -| **R-772** | **[P3-LOW] A health probe that finds NO container to probe records `healthy: true` — and the next check is 5 minutes away.** MEASURED 2026-10-01 on 9202 (controller 0.285.0, Karakeep): with the app container stopped, the probe's record read `{type: none, target: karakeep, healthy: true, message_key: health.no_probe_container}` and stayed so 4+ minutes (`RunHealthProbes: skipping karakeep — last check …, effective interval 5m0s, healthy=true`). The app's STATE did read `degraded` within 10 s, so the household saw it; the probe record alone says healthy about a check that did not run (the presence-is-not-success shape). Not checked: which readers use `health_probe.healthy` (the guarded Update's `verifying`? the hub report?). **Needs:** a not-run probe recorded as not-healthy (or `unknown`), with a test that pins it. `audits/new-apps-2026-10-01/box/karakeep-768M/neg-and-crawl.txt` | **READY — rank P3-LOW; owner: CC (controller)** | -| **R-773** | **[P3-LOW] After a remove + restore, an app's sign-up route block (decision 47) is gone; only the app's own switch still refuses.** MEASURED 2026-10-01 on 9202 (Karakeep): before — `/signup` 403 and tRPC `users.create` 403; after the household removed the app (keeping backups) and pressed restore — `/signup` answers 200, `users.create` still 403 (the restored env keeps `DISABLE_SIGNUPS=true`). For an app with NO own switch (opengist, wishlist: block only) a remove + restore would reopen sign-up entirely — not measured. **Needs:** the restore re-applies the lock record's block (or the gate) for an app whose template has `signup_block`, with a test; then measured on a block-only app. `audits/new-apps-2026-10-01/box/karakeep/restore.txt` | **READY — rank P3-LOW; owner: CC (controller)** | +| **R-772** | **[P3-LOW] A health probe that finds NO container to probe records `healthy: true` — and the next check is 5 minutes away.** MEASURED 2026-10-01 on 9202 (controller 0.285.0, Karakeep): with the app container stopped, the probe's record read `{type: none, target: karakeep, healthy: true, message_key: health.no_probe_container}` and stayed so 4+ minutes (`RunHealthProbes: skipping karakeep — last check …, effective interval 5m0s, healthy=true`). The app's STATE did read `degraded` within 10 s, so the household saw it; the probe record alone says healthy about a check that did not run (the presence-is-not-success shape). Not checked: which readers use `health_probe.healthy` (the guarded Update's `verifying`? the hub report?). **Needs:** a not-run probe recorded as not-healthy (or `unknown`), with a test that pins it. `audits/new-apps-2026-10-01/box/karakeep-768M/neg-and-crawl.txt` **-- FIXED controller v0.286.1:** a not-run probe records `healthy: false, not_checked: true`, is looked at on the next tick (0.286.0 still waited out the last healthy record's 5-minute interval — found live, fixed in .1), the state stays the containers' (R-630 holds), the app page says so. Readers checked: `health_probe` feeds only the state override and the API/page; the hub gets container states, never the probe record. **Live on 9202 (0.286.1):** paperless-webserver stopped 19:48:33 → `healthy false, not_checked true` at 19:48:47; started 19:49:05 → healthy at 19:49:47. Red-proofs RP-D1, RP-D1b. `audits/visitors-2026-10-01/D/`. | **CLOSED 2026-10-01 — controller v0.286.1** | +| **R-773** | **[P3-LOW] After a remove + restore, an app's sign-up route block (decision 47) is gone; only the app's own switch still refuses.** MEASURED 2026-10-01 on 9202 (Karakeep): before — `/signup` 403 and tRPC `users.create` 403; after the household removed the app (keeping backups) and pressed restore — `/signup` answers 200, `users.create` still 403 (the restored env keeps `DISABLE_SIGNUPS=true`). For an app with NO own switch (opengist, wishlist: block only) a remove + restore would reopen sign-up entirely — not measured. **Needs:** the restore re-applies the lock record's block (or the gate) for an app whose template has `signup_block`, with a test; then measured on a block-only app. `audits/new-apps-2026-10-01/box/karakeep/restore.txt` **-- FIXED controller v0.286.0:** a REMOVED app restored from its backup gets the lock record (`opened_by: restore`) and the block written before anything starts; the loop sets the app's own switch; an installed app the household never closed keeps what it had (decision 49). **Live on 9202:** Karakeep — before: `/signup` 403, `users.create` 403; removed keeping backups; restored → record `opened_by: restore`, `native_lock: applied`, block file present, a stranger's `/signup` 403 and `users.create` 403, the bookmark read back. Red-proof RP-D2. Block-only apps (opengist, wishlist) share the code path, not measured. `audits/visitors-2026-10-01/D/r773-live.txt`. | **CLOSED 2026-10-01 — controller v0.286.0** | | **R-774** | **[P3-LOW] Two things the new apps' pages do not show yet: Karakeep's mail-ON path is unproven, and its official phone app reports crashes to its makers.** READ/MEASURED 2026-10-01: Karakeep's `smtp_mapping` (plaintext :2526, as Cal.com) was proven only with mail OFF (a fresh install boots) — 9202 has no hub, so the relay cannot be exercised there; the official mobile app ships Sentry crash reporting with a hard-coded DSN (`apps/mobile/app/_layout.tsx`, FIT.md). **Needs:** one password-reset mail from Karakeep on a hub-enabled box (demo-hp 9201, a throwaway install); and a sentence on the page about the phone app (copy, freeze). `audits/new-apps-2026-10-01/bench/karakeep-mail-off-boot.txt` | **READY — rank P3-LOW; owner: CC (catalog)** | -| **R-775** | **[P2-MEDIUM] Grimmory: a stranger's 5 wrong sign-ins lock EVERY visitor out of the web login for 15 minutes — so Grimmory was not published.** MEASURED 2026-10-01 on 9202 (drill catalog, v3.4.1, through traefik): after 5 wrong tries for `admin` every further sign-in answered 429 — the household's right password AND a different name — and stayed 429 for 10+ minutes of retries. Read in the jar: `AuthRateLimitService` — Caffeine `expireAfterWrite(ofMinutes(15))`, `MAX_ATTEMPTS 5`, keys `login:ip:` and `login:user:`; Spring `forward-headers-strategy: native` takes the address from X-Forwarded-For, and behind the tunnel every visitor is the tunnel container's address (R-753) — the wger shape (R-752), with no setting to change it. Everything else in the checklist passed (bench + box step v3.4.1 → v3.5.0, gate by its own probe, OPDS through traefik); two smaller findings for the publishing session: on a reinstall over the first install's kept books, a new upload was saved to the drive but not added to the library (`box/grimmory/reinstall-c1.txt`, not investigated); and the remove + restore round trip (2.5) cannot be shown on 9202 for a drive app — its backup lives on the scratch drive, which is not a registered drive (R-756). The template waits in `audits/new-apps-2026-10-01/wip/grimmory/`. **Needs (operator):** (A) publish with a sentence on the page that wrong guesses by others can lock the login for 15 minutes (MEASURED: during the lock an e-reader's OPDS feed still answered 200 with its own login, wrong 401 — `box/grimmory/opds-under-lock.txt`), or (B) wait until the box passes each visitor's real address (R-753). `audits/new-apps-2026-10-01/box/grimmory/throttle.txt` | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (A/B), CC publishes** | +| **R-775** | **[P2-MEDIUM] Grimmory: a stranger's 5 wrong sign-ins lock EVERY visitor out of the web login for 15 minutes — so Grimmory was not published.** MEASURED 2026-10-01 on 9202 (drill catalog, v3.4.1, through traefik): after 5 wrong tries for `admin` every further sign-in answered 429 — the household's right password AND a different name — and stayed 429 for 10+ minutes of retries. Read in the jar: `AuthRateLimitService` — Caffeine `expireAfterWrite(ofMinutes(15))`, `MAX_ATTEMPTS 5`, keys `login:ip:` and `login:user:`; Spring `forward-headers-strategy: native` takes the address from X-Forwarded-For, and behind the tunnel every visitor is the tunnel container's address (R-753) — the wger shape (R-752), with no setting to change it. Everything else in the checklist passed (bench + box step v3.4.1 → v3.5.0, gate by its own probe, OPDS through traefik); two smaller findings for the publishing session: on a reinstall over the first install's kept books, a new upload was saved to the drive but not added to the library (`box/grimmory/reinstall-c1.txt`, not investigated); and the remove + restore round trip (2.5) cannot be shown on 9202 for a drive app — its backup lives on the scratch drive, which is not a registered drive (R-756). The template waits in `audits/new-apps-2026-10-01/wip/grimmory/`. **Needs (operator):** (A) publish with a sentence on the page that wrong guesses by others can lock the login for 15 minutes (MEASURED: during the lock an e-reader's OPDS feed still answered 200 with its own login, wrong 401 — `box/grimmory/opds-under-lock.txt`), or (B) wait until the box passes each visitor's real address (R-753). `audits/new-apps-2026-10-01/box/grimmory/throttle.txt` **-- 2026-10-01 (evening):** option B's precondition SHIPPED (controller v0.286.1, R-753): Grimmory's Tomcat RemoteIpValve walks from the right and counts `172.16.0.0/12` as a proxy (READ in source, Spring Boot 4.1.1 — not yet measured with Grimmory's own lock), so `login:ip:` becomes per visitor; `login:user:` still lets a stranger lock the public name `admin` 15 min. A third route was spiked and passed: Grimmory behind the permanent family gate with its e-reader paths excepted (R-780). Recommendation: publish behind the family gate if R-780 is built; otherwise B with a measured 3.6. | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (A / B / behind R-780), CC publishes** | +| **R-776** | **[P3-LOW] Right-walking catalog apps need ONE setting to see each visitor since v0.286 (R-753); without it they keep the tunnel's one address (a stranger can still trip their per-address limits for everyone).** READ in source (`audits/visitors-2026-10-01/A/sweep/`): kimai `TRUSTED_PROXIES=127.0.0.1,172.16.0.0/12`; zipline `CORE_TRUST_PROXY=true` + `CORE_TRUSTED_PROXIES=172.16.0.0/12`; vikunja `VIKUNJA_SERVICE_IPEXTRACTIONMETHOD=xff`; nextcloud `TRUSTED_PROXIES=172.16.0.0/12`; n8n `N8N_PROXY_HOPS=2` (optional). BookStack `APP_PROXIES` measured this session (see its catalog commit). **Needs:** per app, the setting + checklist 3.6 re-measured on 9202 through the simulated tunnel (the BookStack shape, `audits/visitors-2026-10-01/tools/bookstack_36.py`). Count readers (calibre-web, tandoor, wger) stay as they are — a fixed count is wrong for one of the two paths. | **READY — rank P3-LOW; owner: CC (catalog)** | +| **R-777** | **[P2-MEDIUM] Emby and Jellyfin treat every internet visitor as being on the LAN — users with "remote access" off can sign in from the internet, IP filters and remote limits are skipped.** READ in source (`audits/visitors-2026-10-01/A/sweep/sweep-1.md`, `sweep-2.md`), not measured live: Jellyfin with `KnownProxies` empty uses the TCP peer (traefik, private) → "LAN"; Emby reads the leftmost XFF (its chain is now removed by the R-753 reset, so it sees cloudflared's private address → "LAN", as before). True before R-753 too; R-753 neither caused nor fixed it. **Needs:** measure on 9202 (a user with remote access off, through the simulated tunnel); Jellyfin: `KnownProxies` `172.16.0.0/12` in `network.xml` (no env — an `after_install` or a seed file); Emby: no setting fixes it (its `LocalNetworkSubnets` still counts private ranges) — a page sentence or a decision. | **READY — rank P2-MEDIUM; owner: CC (measure), operator (Emby route)** | +| **R-778** | **[P3-LOW] A box that rolls back to a controller ≤ 0.285 after v0.286 keeps the new traefik (an old controller never rewrites a running traefik) — and the old `clientIP` believes the LEFTMOST X-Forwarded-For, which a stranger then writes: the dashboard's login counter becomes dodgeable until the box moves forward again.** Reasoned from the code (old `claim.go` clientIP + v0.286 traefik trust), not measured. The floor never moves back; the window is the self-update's crash roll-back. **Needs:** decide whether that window matters (it closes at the next floor); if it does, a 0.285.x patch that reads the rightmost hop, or the self-update refusing to roll back across v0.286. | **OPEN — rank P3-LOW; owner: CC** | +| **R-779** | **[P3-LOW] Part A's "two outside addresses seen as two" is proven through the simulated tunnel only; on the REAL tunnel the second outside address (ep0, one request allowed) was refused by Cloudflare's edge with 403 and never reached the box.** Measured 2026-10-01 19:51 UTC (`audits/visitors-2026-10-01/A/L2-demo-hp-real-tunnel.txt`): no log line on demo-hp; demo-hp's box has no geo restriction in its settings, so a Cloudflare ZONE rule (country or bot, not read) refused a German datacenter address. DooPlex's own address on the real tunnel was seen as itself. **Needs:** one sign-in from a second Hungarian address (the operator's phone off wifi) while DooPlex is locked out — 2 minutes; and say which Cloudflare rule refused ep0. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator (a phone), CC reads the logs** | +| **R-780** | **[P2-MEDIUM] A permanent household gate with family accounts — the spike PASSED; the build waits for the operator's go (`09` §3 decision 63).** Measured on 9202 2026-10-01 (`audits/permanent-gate-2026-10-01/VERDICT.md`, exit test committed before): a stranger reached nothing of Grimmory or MeTube (36 requests incl. websockets); family members with their own logins got in for 30 days, logout worked; a stranger's guesses locked only the stranger; Grimmory's OPDS/Kobo/KOReader worked through anchored path exceptions with the app's own login; the family login never opened the dashboard; +0.4 ms per request; the gate down → apps refuse (500). **Build requirement F1:** exceptions must be anchored (`PathPrefix(/api/v1/opds)` also matched `/api/v1/opdsx`). **Cost:** 2 sessions (controller release; catalog — Grimmory and MeTube published behind it). If nothing is decided: Grimmory stays held (R-775) and MeTube unpublished (R-767). | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (go/no-go), CC builds** | +| **R-781** | **[P3-LOW] The catalog's `scripts/test_gate_decoys.py` fails 4 of its own "genuine" onboarding cases — on the untouched tree.** Measured 2026-10-01 (same 4 FAIL lines before and after this session's checklist edit): the harness copies the catalog into a temp tree with a fake sibling `felhom.eu`, and the REAL published records (radicale, karakeep, dawarich) name evidence that the fake sibling lacks, so a complete record reads incomplete. The gate itself (`onboarding`) is green on the real tree. **Needs:** the genuine cases build their own records, or the fake sibling mirrors the cited evidence. | **READY — rank P3-LOW; owner: CC (catalog)** | +| **R-782** | **[P3-LOW] Two side observations of the R-753 sweep, inferred, not measured:** glance's seeded `glance.yml` has no `auth:` block (the dashboard is public to anyone with the address), and homepage's `/api/*` refuses a Host not in `HOMEPAGE_ALLOWED_HOSTS`, which the template does not set (widgets may 400). **Needs:** measure both on 9202; glance: decide whether a public link dashboard is intended (the setup gate does not cover it after setup). | **READY — rank P3-LOW; owner: CC (catalog)** |