diff --git a/REPORT-catalog-sweep-2026-10-24.md b/REPORT-catalog-sweep-2026-10-24.md new file mode 100644 index 00000000..6f215425 --- /dev/null +++ b/REPORT-catalog-sweep-2026-10-24.md @@ -0,0 +1,67 @@ +# REPORT — every catalog app on a fresh box, the way a family uses it (2026-10-24 → 25 night, unattended) + +**Plain words first.** +- 65 apps: **52 work, 10 work with a problem, 0 broken**; 2 are not offered for a new install (by design); Wanderer + cannot run on a box without DNS (known, R-739). +- **The three worst:** (1) after „remove — keep backups" and a reinstall, restoring that backup breaks the app — the + household's item is gone from view (Tandoor, AdventureLog; R-1269, P2); (2) that restore still says it worked (R-1270, + P2); (3) „use my kept data" loaded another box's newer-dated database for Paperless-ngx, Nextcloud and Immich, and + Immich never answered again (R-1271, P2). In all three the data is not deleted. +- **Fixes made in the drill catalog, not live:** n8n stops sending usage data out; OpenGist gets 256 MB (at 128 MB one + sign-in hit the limit 443 times and swapped 98 MB). Both proven on the sweep box pointed at the drill. +- **Morning:** say yes to the two catalog fixes (in Monday's release list); decide D46 (Homepage behind the family gate — + CC's pick: yes); delete hub host Tester4-aa9466. + +**Safest readings taken (the brief allowed no question):** ISO 1.30.0 (the current public one, not 1.36.0); 12 GiB VM +(the brief's minimum; demo-hp had 14 free); the kept-data question exists only for drive-folder apps, so volume apps +were checked by a unit restore after the reinstall (that made a unit restore on every seeded app, not every fifth); +„Mentés most" is local-only by design; backup/storage findings filed in their own category, not „Apps & catalog". All in +the audit's head. + +**Table and evidence:** `documentation/audits/catalog-sweep-2026-10-24/README.md` (the 65-row table, the findings, the +R-1269 proof, D22 put-back PASS on PrivateBin and Vikunja, the drill proofs, teardown). + +**Architecture read:** `07-backup-architecture.md` §6.5 (kept data) and §8, `16-storage-physical-identity.md` §5 (the +internal place is the default drive — F3 NOT-A-FINDING), `10-localisation.md`. + +**Two mistakes of this session, both caught and kept in the evidence:** +1. The first drill pass ran on the live templates: I had believed the drill repo public; the box's clone failed and the + controller kept its templates. Re-run through the box's local mirror (R-992's method) with a positive check before + any install (`DRILL-CONFIRMED`). Memory note written. +2. I reverted the OpenGist fix on a wrong reading („it grows into its limit"); an automated security review flagged the + lowered cap; a cgroup measurement proved the fix needed and it went back in. + +**Commits:** drill catalog (never live) `a601950` (n8n), `fd23571` → `c420053` (wrong revert) → `405077f` + `492a17f` +(OpenGist). felhom.eu: this commit (audit + tools + evidence, register, STATUS, STATUS-HISTORY, capability map B1 + +detail). CI by hash: in the final report. + +**Register:** at the sweep's start 190 (other sessions filed 18 since); before this commit 208, after 217; opened 9 +(R-1269–R-1277), closed 0. Notes added to R-739 (Wanderer, no DNS) and R-1267 (anonymous volumes: OnlyOffice and RomM +too; 52 left after every app was removed with data). + +**Observations:** +- FILED: R-1269 (reinstall's capture rewrites the kept unit), R-1270 (restore says ok while the app never starts), + R-1271 (kept data loads another box's future-dated database), R-1272 (Homepage has no gate — operator, D46), R-1273 + (registry rate limit shown as „exit code 1"), R-1274 (restore refusal advice when tiers exist but have not copied), + R-1275 (drive names in Hungarian on English pages), R-1276 (empty parent folder after remove with data), R-1277 (box + fixtures drifted: OpenGist, Calibre-Web, Mealie, Papra, Rallly, Vaultwarden 1.37). +- FIXED (drill, morning list): n8n usage data (`a601950`); OpenGist memory (`405077f`, `492a17f`). +- NOTE on existing rows: R-739 (Wanderer), R-1267 (anonymous volumes). +- NOT-A-FINDING: F3 install default is the internal place (`16` §5, by design); F4 English guide labels (the app's own + words; the Hungarian copy is frozen by the copy gate); F5 Kimai in English (a Hungarian browser lands on `/hu/`); F6 + AdventureLog 95 % (docker stats with cache; anon 75 %); database first-start lines in SparkyFitness and Dawarich (no + restart, item back); Radicale IP redirect (curl without Host); NZBGet/Transmission basic-auth prompt in screenshots (the + apps' own login); Vaultwarden stranger 200 (its own login page; sign-up closed). + +**Teardown:** machine — VM 9360 and LXC 9361 (both this session's) destroyed with `--purge`, no disk left on +`nvme-scratch`; Tester 1, 9201, 9202, the thin pool and the ISO untouched; the box's logs copied off first. Host — +DooPlex: the session's secret files shredded. Hub — host Tester4-aa9466 left for the operator to delete. ep0 — listed, +nothing removed: the host's PBS link was set up, no whole-box copy went to it; the app copies went to the Tester4 restic +repository on the storage box. + +**Secrets:** read by name through `sec`; the evidence was scanned for every known secret value (positive control seen) and +for token shapes; one Actual Budget session token (a throwaway app) was blanked; screenshots spot-checked (passwords sit +behind „Show", never pressed). No password, key or token is in this commit. + +**System poster:** no fact on it changed. **Instruction files:** none edited. **No** release, deploy, floor, vouch, +publish or live catalog push. diff --git a/STATUS.md b/STATUS.md index 0f6a4722..baa8ae84 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,7 +2,7 @@ **Ready for Tester 2? Yes — tell the friend go (hand-over list: `documentation/pilot/TESTER2-handover.md`).** -**Updated 2026-10-24 (night, unattended fix run).** Four restore and backup holes are fixed on main (three proven on test boxes); BYO hosts keep their SSH settings (D43 = A). Nothing is released — see Monday's list. +**Updated 2026-10-25 (night).** 65 catalog apps walked on a fresh box: 52 work, 10 with a problem, 0 broken; worst: a restore after a reinstall breaks an app (R-1269). ## What works - **The Plex attack (10-17 → 10-23) did not reach Felhom's secrets** (R-1241). @@ -32,6 +32,7 @@ Newest first. CC's pick is in the „Pick" column. Each row also has its full te | # | Row | Question | Pick (why) | The other option costs | If you do nothing | Blocked | |---|---|---|---|---|---|---| +| D46 | R-1272 | Put Homepage behind the family gate, like Glance? | **Yes** (a stranger now sees the box's CPU, memory and disk, and later the family's links; one line in the template, tried on the drill first) | leave it open: anyone who finds the address sees those | it stays open to strangers | — | | D45 | R-1266 | Seven places where a design document says one thing and the code does another. One line each, with a pick: `documentation/audits/review-round-2-2026-10-24/D44-D45-picks.md`. Answer „all picks" or name the ones you disagree with. | **Yes — the text follows the code** (each is how the system works today; you read every changed sentence) | the code follows the text: six code changes, one of them to the box's door for you | the documents keep saying what is not true | — | | D44 | R-1265 | 25 behaviours the code has but no document named. One line each, with a pick (21 confirm, 4 small changes): the same file. Answer „all picks" or name the ones you disagree with. | **All picks** (each was read in the code) | name the ones to change; each becomes a row | the notes stay marked „undocumented" | — | | D38 | R-1235 | Put the newest golden (637 MB) into the nightly release copy on ep0 too? | **Yes** (a new install after a DooPlex loss needs it; it fits under the 3 GB cap) | leave it out: after a loss, no new install until a golden is rebuilt and vouched | the same | — | @@ -50,10 +51,10 @@ Newest first. CC's pick is in the „Pick" column. Each row also has its full te 6. BIOS: on the N100, read „After Power Loss"; on the HP, set „Bypass F1 Prompt on Configuration Changes" to Enable. Since 2026-10-14. 7. Pin the first Facebook post (R-917), and look at the new cover in the Facebook phone app (R-919). Since 2026-10-12. -**Monday 2026-10-26, release list (attended).** 1. Controller v0.343.0: the restore and backup fixes (R-1251–R-1253), R-1250. If not: the P1 stays open. 2. Agent v0.165.0 + your vouch: BYO keeps its SSH (R-1257). 3. Hub v0.170.0: the recovery package in one step (R-1254). +**Monday 2026-10-26, release list (attended).** 1. Controller v0.343.0: the restore and backup fixes (R-1251–R-1253), R-1250. If not: the P1 stays open. 2. Agent v0.165.0 + your vouch: BYO keeps its SSH (R-1257). 3. Hub v0.170.0: the recovery package in one step (R-1254). 4. Catalog: n8n usage data off; OpenGist 256 MB. **Day, 2026-10-23 — your do list.** 1. Print the break-glass sheet (`documentation/runbooks/break-glass-sheet.md`, the part from „The sheet”, one A4), fill it by hand, keep it outside the home (D32; R-923, R-924). If not: after a DooPlex loss no off-site copy opens. -2. On the hub's Hosts page: Discard appliance 49, and delete host Tester4-16fdef. If not: two dead entries alarm. +2. On the hub's Hosts page: Discard appliance 49, and delete host Tester4-aa9466. If not: two dead entries alarm. 3. Give the homelab session R-1241, R-1242, the lists at the end of `documentation/audits/plex2shell-felhom-impact-2026-10-23/README.md` and `documentation/audits/dooplex-alarms-2026-10-24/README.md`, and an upload alarm on DooPlex's `eno1` (~100 Mbit/s line; the flood peaked at 905). If not: the next hacked app on DooPlex can read the hub's backups. **The rest** - System poster needs a refresh: the new 01:40 „release copy” arrow from DooPlex to ep0 (D33); the hub-database label already says every 6 hours. If not: the drawing misses one copy. diff --git a/documentation/architecture/00-capability-map.md b/documentation/architecture/00-capability-map.md index a838f3b0..ff8b8e54 100644 --- a/documentation/architecture/00-capability-map.md +++ b/documentation/architecture/00-capability-map.md @@ -102,7 +102,7 @@ | ID | Capability | Component | Status | Scope | Evidence | |---|---|---|---|---|---| -| [B1](capability-map-detail/B.md#b1) | Deploy an app from the catalog (env config, memory guard, health-aware progress) | controller, catalog (~52 apps, images pinned) | **PROVEN-LIVE** | **re-check (2026-10-24):** mechanism changed after its evidence — 6d90374 + 2fe6341 (allow-list R-971, appdata R-1142) | `tests/CAMPAIGN-2-2026-07-07.md` (2026-07-07); `audits/RERUN-p1p3-2026-07-06.md` (2026-07-06) | +| [B1](capability-map-detail/B.md#b1) | Deploy an app from the catalog (env config, memory guard, health-aware progress) | controller, catalog (65 apps, images pinned) | **PROVEN-LIVE** | **re-checked 2026-10-24** on controller 0.342.0 (after 6d90374 + 2fe6341): all 65 apps through the deploy request on a fresh box — 62 installed and answered, Wanderer installed but cannot run without DNS (R-739), 2 not offered by lifecycle; the memory guard did not fire (one app at a time) | `audits/catalog-sweep-2026-10-24/README.md` (2026-10-24); `tests/CAMPAIGN-2-2026-07-07.md` (2026-07-07); `audits/RERUN-p1p3-2026-07-06.md` (2026-07-06) | | [B2](capability-map-detail/B.md#b2) | App lifecycle: start/stop/restart/update/logs/remove/redeploy | controller | **PROVEN-LIVE** | the actions; remove-with-data re-proven 2026-09-13; **re-check (2026-10-24):** mechanism changed after its evidence — 8ae9178 (removal deletes labelled volumes, R-1117) | `audits/R442-2026-09-13/` (2026-09-13); `tests/CAMPAIGN-2-2026-07-07.md` (2026-07-07) | | [B3](capability-map-detail/B.md#b3) | Update is GUARDED: it refuses without a restorable backup, backs up first when the copy is stale, and HOLDS an app that does not come up — on ANY backup tier, and the release itself arrives by the managed floor | controller v0.237.0 + v0.238.0 + v0.238.1 + v0.239.0, hub v0.112.0 | **PROVEN-LIVE** | — | `audits/slice4-2026-09-13/` (2026-09-13); `audits/rulings-r472-r475-2026-09-13/` (2026-09-13) | | [B4](capability-map-detail/B.md#b4) | A failed update is UNDONE by the box itself — the previous version back with its data from seconds before the update; the app is held only if that undo fails too | controller v0.263.2 (the undo), v0.264.0 + hub v0.120.0 (the mail) | **PROVEN-LIVE** | scratch 9202 | `audits/undo-live-2026-09-23/README.md` (2026-09-23) | diff --git a/documentation/architecture/capability-map-detail/B.md b/documentation/architecture/capability-map-detail/B.md index bdef2ed3..a7687d7d 100644 --- a/documentation/architecture/capability-map-detail/B.md +++ b/documentation/architecture/capability-map-detail/B.md @@ -25,6 +25,8 @@ **Gap / roadmap (as written):** Memory-guard FIRING is not live-shown (T-RES-MEMGUARD never fired: ample RAM / auth-walled) — implemented + unit-level only +**Re-checked 2026-10-24 (catalog sweep, `audits/catalog-sweep-2026-10-24/README.md`):** a fresh box from the public ISO 1.30.0, controller 0.342.0, Tester4. Every catalog app through `POST /api/stacks//deploy` one at a time, timed to the front door (median 61 s, Cal.com 278 s), then first login, one item, backup, keep-data remove, reinstall, unit restore, remove with data. 62 installed and answered; Wanderer installed but cannot reach its database without DNS (R-739); plant-it and wger are not offered (lifecycle, by design). 52 work, 10 work with a problem (R-1269–R-1277), 0 broken. The memory guard still did not fire (one app at a time) — the gap above stands. + --- diff --git a/documentation/audits/catalog-sweep-2026-10-24/README.md b/documentation/audits/catalog-sweep-2026-10-24/README.md new file mode 100644 index 00000000..399c50f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/README.md @@ -0,0 +1,236 @@ +# Catalog sweep 2026-10-24 — every catalog app on a fresh box, the way a family uses it + +Unattended validation sweep (Saturday 12:30Z → Sunday ~00:00Z). Brief: the operator's „every catalog app, one by one, on +a fresh box" prompt. Venue: demo-hp (Tier 0). Method: endpoint-level — every step is the request the dashboard or the +app's own page sends (no browser click-through except the screenshot harness; no `docker exec` to make state). + +## Safest readings taken (the brief allows no question) + +1. **ISO 1.30.0, not 1.36.0.** The brief said „1.36.0 or the current one"; the current one on felhom.eu/letoltes was + 1.30.0 (sha256 checked against the published `.sha256`). See `_box/README.md`. +2. **12 GiB for the VM, not 16.** demo-hp had 14 GiB free beside 9201, 9202 and Tester 1; 12 is the brief's minimum. + The guest itself is 7.7 GiB (the golden's size); the box's own memory admission decided what could run. +3. **„Remove keeping data → install again with use my kept data" is a drive-folder question.** By design (`07` §6.5) + the question is asked only for an app that keeps a folder on a drive (`HDD_PATH`). For the 40+ apps that keep their + data in Docker volumes, „keep my data" keeps the recovery unit; the reinstall starts empty, and the item comes back by + the unit restore („Visszaállítás"). So step 5 + 6 ran as: keep-remove → reinstall → read (empty, expected) → unit + restore → read. That is a unit restore on **every** app with a seed, not only every fifth. +4. **„Mentés most" is the local copy only** (`07` §8, by design); the second-drive and off-site copies run in the night. + The sweep did not wait for a night, so „the right tiers ran" is checked as „the local unit holds the app". +5. **Categories:** the brief names „Apps & catalog" for bigger issues; a row whose harm is in backup/restore or storage is + filed in that category instead (`register_shape_gate` has one category per row, and the owner reads it there). +6. **Sev:** the brief's scale (data at risk P1/P2, a broken app P2, a confusing step P3). R-1269, R-1271 are P2 by that rule (the data is not deleted in either; the household loses access to it). +7. **The sweep box reads the LIVE catalog** (main `5e196e1`, then `227a544` — rules only, no template moved). The drill + catalog was used only for the three apps whose fix needed proving; the box was pointed back after (`_drill-repoint.txt`). +8. **Harness fixes live in the sweep's copy** (`tools/`), not in the catalog's scripts; porting them is R-1277. + +## The box (Part 0) + +`_box/README.md`: VM **9360** `sweep1024-box` (6 cores, 12 GiB, disks 256 + 200 + 150 GB on `nvme-scratch`), ISO 1.30.0, +customer Tester4 (hub host `Tester4-aa9466`), guest 9201, domain `tester4.test` (no DNS: the browser LXC maps the +names). Bind 12:42:18Z, day-0 SUCCESS 12:45:40Z, claim, recovery code escrowed (stored out-of-band), drives `hdd_1` +(210 GB) and `hdd_2` (157 GB) plus the installer's internal place `belso`. Versions at the start: controller 0.342.0, +agent 0.164.0, hub 0.169.0. Browser: LXC **9361** `sweep1024-browser` (Chromium + Playwright), 60 dashboard screens +(15 pages × phone/computer × HU/EN) in `_box/screens-dashboard/`. + +## Method per app (Part 1) + +`tools/sweep.py ` — one app at a time, small first, heavy last (`tools/order.txt`); the next starts after the last +is removed with its data. Each `/` holds `record.json` (the measured facts), `walk.log`, the page texts +(`page-{install,guide,overview}-{hu,en}.txt`) and `screens/` (phone + computer, HU + EN, install page and the app after +first login). Steps: install through `POST /api/stacks//deploy` (timed to the front door answering); a stranger +request without the family cookie (must be refused where the template gates); one item through the app's own API (the +catalog's fixture where one exists, a new one in `tools/sweep_fixtures.py` for seven more); „Mentés most"; remove +keeping data; reinstall (the kept-data question answered „use" where it is asked); read; unit restore; read; remove with +data; leftovers checked (containers, volumes, `app.yaml`, `appdata`, `kept`, the subdomain → 404). Memory: the peak of +each container's **anon** memory from its cgroup (`memory.stat`; the file cache is not counted — project rule) against +its compose limit; a `*` in the table means only `docker stats` was read for that app (it includes the cache). The anon reading joined mid-sweep, so 22 apps carry it and 40 carry the `docker stats` upper bound; of those 40 none passed 79 % of its limit (Tandoor 1009/1280) and none restarted. Above 80 % on anon: only OpenGist (F14). + +## Results + + +| App | Verdict | Peak memory / limit (MiB) | Install → answering (s) | What we saw | Row / fix | +|---|---|---|---|---|---| +| actualbudget | **works** | 49* / 256 | 30 | the seeded item back after the restore | | +| adventurelog | **works with a problem** | 381 / 896 | 207 | works; but the keep-backups → reinstall → restore path breaks it (DB password from the new install over the old data) — reproduced in its re-run | R-1269, R-1270 | +| audiobookshelf | **works** | 56* / 512 | 41 | the seeded item back after the restore | drive names: R-1275 | +| bentopdf | **works** | 3* / 384 | 30 | stateless (nothing to keep); installs, answers, removes clean | | +| bookstack | **works** | 167* / 768 | 71 | the seeded item back after the restore | | +| calcom | **works** | 807 / 1792 | 278 | the seeded item back after the restore; 2 start-up messages of the image itself | | +| calibre-web | **works** | 211 / 768 | 76 | the book (its own upload) is listed again after the keep-data reinstall; the fixture's download check gets 401 (its sign-in for /download, not the app); the admin name is the box's generated one (re-run 2) | R-1277 | +| claper | **works** | 267* / 640 | 86 | the seeded item back after the restore | | +| code-server | **works** | 81 / 1024 | 46 | first install refused by the registry's rate limit, told as „exit code 1”; the re-run installed and worked (no seed: the editor has no API) | R-1273 | +| crafty-controller | **works** | 79* / 2048 | 76 | the seeded item back after the restore | | +| dawarich | **works** | 835* / 2688 | 136 | the seeded item back after the restore (every-5th: restore also before the reinstall) | | +| docmost | **works** | 528* / 1152 | 126 | the seeded item back after the restore | | +| emby | **works** | 95 / 2048 | 41 | installs, answers, removes clean; no seed (no fixture for its wizard) | | +| ghost | **works** | 167* / 512 | 121 | the seeded item back after the restore | | +| gitea | **works** | 112 / 512 | 25 | the seeded item back after the restore | | +| glance | **works** | 7* / 128 | 15 | family gate holds a stranger; config-only (nothing to keep); the app's own headings are English | | +| gokapi | **works** | 6 / 128 | 15 | installs, own login, removes clean; no seed (API key only in its UI) | | +| grafana | **works** | 383* / 768 | 61 | the seeded item back after the restore | | +| gramps-web | **works** | 347* / 1024 | 206 | installs, answers, removes clean; no seed fixture | | +| grimmory | **works with a problem** | 594 / 1408 | 96 | first admin, library and an EPUB upload work; setup gate then family gate work as designed; the read-back through the family gate stayed inconclusive (the harness's gate logic, R-1277); remove-with-data leaves the empty parent folder | R-1276, R-1277 | +| grocy | **works** | 34* / 384 | 36 | the seeded item back after the restore | | +| home-assistant | **works** | 311 / 1024 | 161 | the seeded item back after the restore | | +| homebox | **works** | 205 / 256 | 20 | the seeded item back after the restore | | +| homepage | **works with a problem** | 91* / 256 | 25 | no gate at all: a stranger sees the box's CPU/RAM/disk (and later the family's links); still the upstream sample page | R-1272 | +| immich | **works with a problem** | 1845 / 6016 | 121 | album (new fixture) in; „use my kept data” loaded the rehearsal's future-dated database and Immich never answered again (404, 20 min) | R-1271 | +| jellyfin | **works** | 110 / 2048 | 41 | first user (new fixture, its wizard API) back after the restore | | +| karakeep | **works** | 649* / 2816 | 107 | the seeded item back after the restore | | +| kimai | **works** | 303* / 640 | 111 | own login; a Hungarian browser lands on /hu/ (curl without a language gets /en/) | | +| komga | **works** | 473* / 768 | 46 | the seeded item back after the restore | drive names: R-1275 | +| lubelogger | **works** | 60* / 512 | 25 | the seeded item back after the restore | | +| mealie | **works** | 322 / 1000 | 72 | the seeded item back after the restore (the fixture raced after_install on the first run) | | +| metube | **works** | 90* / 768 | 61 | family gate holds a stranger; download queue entry back | | +| n8n | **works with a problem** | 346 / 1536 | 151 | the owner back after the restore; on the live template it tries to send usage data out ([Rudder] lines, 6 in the live re-run) — the drill fix: the variable in the running container, 0 error lines | drill a601950 (morning list) | +| navidrome | **works** | 23* / 256 | 25 | the seeded item back after the restore | drive names: R-1275 | +| nextcloud | **works with a problem** | 298 / 1664 | 122 | user in; „use my kept data” loaded the rehearsal's future-dated database beside today's files — the user was not there | R-1271 | +| nzbget | **works** | 6* / 512 | 25 | the seeded item back after the restore; „no news server” until the family adds one (the guide says so) | | +| onlyoffice | **works** | 464 / 2048 | 71 | document server (no household data to keep); installs, answers, removes clean (every-5th restore) | | +| opengist | **works with a problem** | 125 / 128 | 15 | the gist owner back after the restore; but 128M is too small: one sign-up + sign-in hit the limit 443 times and swapped 98 MiB (memprobe-128M.txt); at 256M (drill) anon 216 MiB | drill 405077f (morning list) | +| outline | **works** | 327 / 1152 | 151 | the seeded item back after the restore | | +| paperless-ngx | **works with a problem** | 669* / 1664 | 146 | account in; „use my kept data” loaded the rehearsal's future-dated database — the account was not there | R-1271, R-1276 | +| papra | **works** | 320 / 768 | 76 | the seeded item back after the restore (Papra 26.6 needs an Origin header — a browser sends it) | | +| plant-it | **not installed** | – | – | lifecycle: abandoned — not offered for a new install (by design) | | +| plex | **works** | 223 / 2048 | 30 | installs, answers, removes clean; no seed (a server is claimed with a plex.tv account) | | +| privatebin | **works** | 31* / 128 | 15 | the seeded item back after the restore; D22 put-back PASS | | +| prowlarr | **works** | 114* / 512 | 21 | the seeded item back after the restore | | +| qbittorrent | **works** | 77* / 1024 | 15 | the seeded item back after the restore | | +| radarr | **works** | 100* / 512 | 41 | the seeded item back after the restore | | +| radicale | **works** | 33* / 128 | 25 | the seeded item back after the restore | | +| rallly | **works** | 346 / 1024 | 71 | installs, answers, removes clean; no seed: Rallly 4.15 closed password sign-up (login by e-mail code); the guide's polls need no account | R-1277 | +| recipe-importer | **works** | 67* / 128 | 25 | stateless helper; installs, answers, removes clean (every-5th restore) | | +| romm | **works with a problem** | 748* / 1536 | 116 | item back through „use my kept data” (its own copy); remove-with-data left the empty parent folder | R-1276 | +| sabnzbd | **works** | 69* / 1024 | 25 | the seeded item back after the restore | | +| seerr | **works** | 166 / 384 | 92 | installs, answers (307 to its setup), removes clean; no seed (needs a media server) | | +| sonarr | **works** | 80* / 512 | 41 | the seeded item back after the restore | | +| sparkyfitness | **works** | 417* / 1792 | 91 | the seeded item back after the restore | | +| tandoor | **works with a problem** | 1052* / 1536 | 177 | works; but the keep-backups → reinstall → restore path breaks it (DB password from the new install over the old data), and the restore still said success — reproduced on its own | R-1269, R-1270 | +| termix | **works** | 111* / 256 | 61 | installs, answers, removes clean (every-5th restore); no seed fixture | | +| transmission | **works** | 6* / 512 | 20 | the seeded item back after the restore | | +| uptime-kuma | **works** | 120* / 384 | 76 | the seeded item back after the restore | | +| vaultwarden | **works** | 37 / 256 | 25 | installs in 25 s, its own login page, sign-up closed (404); the box admin's invite works (run-live-2), but 1.37.4 has no route for the fixture's invited sign-up, so no item was seeded | R-1277 | +| vikunja | **works** | 37* / 256 | 10 | the seeded item back after the restore; D22 put-back PASS | | +| wanderer | **not testable on this box** | 140* / 1024 | 605 | not testable on this box: its web part calls its database at the PUBLIC name, which tester4.test cannot resolve (known, R-739) — unhealthy, 404 | R-739 | +| wger | **not installed** | – | – | lifecycle: hidden — not offered for a new install (by design) | | +| wishlist | **works** | 200* / 512 | 71 | the seeded item back after the restore | | +| zipline | **works** | 233* / 768 | 81 | the seeded item back after the restore | | + +works: 52, works with a problem: 10, not installed: 2, not testable on this box: 1 (of 65) + + +## Findings — each a row, a fix or NOT-A-FINDING + +| # | What | Disposition | +|---|---|---| +| F10 | A reinstall's own capture rewrites the unit that „remove — keep backups" kept; restoring it pairs the NEW install's DB password with the OLD data — the app never starts, the item is gone (Tandoor ×2, AdventureLog) | R-1269 (P2) | +| F11 | The unit restore reports `ok: true` „…az alkalmazás újraindult" while the controller logged „health check failed … did not reach running state" | R-1270 (P2) | +| F12 | „Use my kept data" loaded the rehearsal box's future-dated off-site database (2026-10-28) for Paperless-ngx, Nextcloud and Immich — another drive's install, which `07` §6.5 says is refused; Immich then never answered | R-1271 (P2) | +| F1 | Homepage has no gate: a stranger sees the box's CPU/RAM/disk (Glance, same class, is gated) | R-1272 (operator decision) | +| F7 | An install refused by the registry's rate limit (`toomanyrequests`) tells the household only „exit code 1" | R-1273 | +| F8 | The restore refusal says „turn on remote backup, or connect a second drive" when both exist but have not copied yet | R-1274 | +| F2 | English pages show the drive names in Hungarian („Belső tárhely", „Külső tárhely (hdd_1)") | R-1275 | +| F9 | „Remove with data" leaves the empty parent folder `appdata/` (Grimmory, RomM, Paperless-ngx) | R-1276 | +| — | The catalog's box fixtures drifted from the apps (OpenGist, Calibre-Web, Mealie, Papra, Rallly; seven apps had none) | R-1277 | +| F13 | n8n sends usage data (`[Rudder]` lines; no `N8N_DIAGNOSTICS_ENABLED=false`) | **fixed in the drill** `a601950`, proven below; morning list | +| F14 | OpenGist at 125.8 of 128 MiB anon after one sign-up + sign-in; at 128M it hits the limit 443 times and swaps 98 MiB | **fixed in the drill** `405077f` + `492a17f` (256M), proven below; morning list | +| — | 52 anonymous Docker volumes stayed after every app was removed with data (PrivateBin, OnlyOffice, RomM, Immich: the images' own `VOLUME` paths; 4–72 KB, no household data). The sweep's own leftover check filters by the app's label and missed them; found in the end-state read (`_box/anon-volumes.txt`) | known: note on R-1267 (widened to OnlyOffice and RomM) | +| — | Wanderer unhealthy, 404: its web part calls its database by the public name, which a box without DNS cannot resolve | known: note on R-739 | +| F3 | The install page's default place is the internal place `belso`, not the 210 GB drive | NOT-A-FINDING: by design — `16` §5 registers the internal place as the default drive | +| F4 | Guide labels in English (LubeLogger „Settings", NZBGet „Settings / News-Servers") | NOT-A-FINDING: they are the app's own on-screen labels, and the Hungarian catalog copy is frozen by the copy-i18n gate (measured on the drill) | +| F5 | Kimai opens in English | NOT-A-FINDING: a Hungarian browser lands on `/hu/`; only a request with no language gets `/en/` | +| F6 | AdventureLog backend 95 % of its limit | NOT-A-FINDING: that was `docker stats` with the cache; on anon 288.7/384 MiB (75 %), = the ladder's 73 % | +| — | Database error lines (SparkyFitness `database "sparky" does not exist`, Dawarich `database "dawarich" already exists`; SparkyFitness `Invalid password` = the harness's wrong-password control) | NOT-A-FINDING: the images' own first-start and restore-time checks; no restart, the item read back after the restore | +| — | Radicale redirects to an IP | NOT-A-FINDING: a curl artefact (no Host on the redirect probe); the browser lands right | +| — | NZBGet / Transmission screenshots show the browser's basic-auth prompt | NOT-A-FINDING: the app's own login, by design | +| — | code-server's first install failed (`toomanyrequests`) | the failed install was removed through the product (`code-server.failed-remove.txt`); the re-run worked; the message is R-1273 | + +## F10 proof — the kept unit is rewritten by the reinstall (`_unitprobe/tandoor/`) + +`tools/unitprobe.py tandoor`: install, one account, „Mentés most" (unit 19:45:14–20), remove keeping data and +backups, install again (a volume app: no kept-data question), wait for the controller's next capture, „Visszaállítás". + +- 19:50:32 `Recovery unit captured for tandoor` — the unit's `app.yaml` checksum `0f366c97…` → `4438c1c5…`, + `created_at` 19:45:26 → 19:50:32; the data files unchanged (`unit-1/2/3*.txt`). +- The restore: `ok: true`, „A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult." +- After: state `starting`, the account not there, `password authentication failed` ×42 (app) and ×22 (postgres). +- The comment at `felhom-controller/controller/internal/backup/recovery_unit.go:101-103` says the refresh never rewrites + the definition away from its data; after a remove + reinstall it does. + +Seen three times: the sweep's own Tandoor cycle (17:27:41 reinstall → 17:30:34 capture → 17:30:47 restore), this probe, +and AdventureLog's re-run (20:03:18 → 20:05:32 → restore). AdventureLog's first run worked only because no capture fell +between its reinstall and its restore. + +## D22 put-back — PASS on two apps (`_putback/`) + +`tools/putback.py `: the largest volume tar of the app's unit truncated to half, then „Visszaállítás". PrivateBin +and Vikunja: the restore failed honestly („Nem változott semmi…"), the pre-restore data was put back, the app ran, and the +seeded item read back through the front door. + +## Drill fixes, proven on the sweep box pointed at the drill (Part 2) + +Drill catalog `app-catalog-drill` (never the live catalog): `742a354` (merge of live main), then: + +- `a601950` **n8n** — `N8N_DIAGNOSTICS_ENABLED=false` in the compose (usage data stays home). +- `405077f` + `492a17f` **OpenGist** — memory 128M → 256M (compose + `.felhom.yml` `mem_limit`), the comment carries the + measured need. + +**How the box was pointed at the drill.** The drill repo on Gitea is private (R-992) and the box holds no catalog +credential, so the box reads a local mirror: a bare repository in the controller's data volume, loaded from a git bundle, +`repo_url: file:///opt/docker/felhom-controller/drill-catalog.git` (the method of +`audits/burndown-3-2026-10-17/tools/repoint.py`; loading the mirror is a `docker exec git fetch` into the controller — +catalog plumbing, not app state). Only `repo_url` changes; `tools/repoint.py live` puts the saved `controller.yaml` back +and checks it byte for byte (`RESTORED-IDENTICAL`, twice in `_drill-repoint.txt`). The box ended on the live catalog +`227a544`. + +**What went wrong first, and is kept as evidence.** The first drill pass (chain 3, 21:18Z) set `repo_url` to the Gitea +URL in the belief that the repo was public. The box's clone failed (`fatal: could not read Username`), the controller kept +the templates it had, and n8n, OpenGist and Vaultwarden ran on the LIVE templates. The leftover `[Rudder]` lines in that +n8n run showed it. Those three runs are kept as `run-live-2/` (valid live re-runs). The second pass (chain 4) refused to +install anything until the box's catalog cache read the drill's commit and the changed lines were in the box's copy of +both templates: `drill main fd23571, box cache fd23571: DRILL-CONFIRMED`. (The drill also carries a six-line Plex +ladder entry from an earlier session's test; Plex was not installed in this pass.) + +**n8n proof.** The running container carried `N8N_DIAGNOSTICS_ENABLED=false` (read at 21:37:58, that line only); error +lines 0 against 6 `[Rudder]` lines in the live re-run just before it (the control); the owner account read back after the +unit restore. + +**OpenGist proof — and a wrong turn.** At 256M (drill) OpenGist took 215.8 MiB anon. I first read that as „it grows into +its limit" and reverted the fix (`c420053`); an automated security review flagged the revert as a lowered resource cap. +A measurement settled it (`tools/memprobe-guest.sh`, `opengist/memprobe-128M.txt`): on the live 128M template one +sign-up + sign-in hit `memory.max` 443 times and pushed 98 MiB into swap (anon 125 MiB, 0 `oom_kill`, 0 restarts). The +real need is ~220 MiB; the fix went back in (`405077f`). Where the box has no swap room left, the same sign-up would end in a kill (not measured here). + +Drill gates: `catalog_gates.py --fast opengist n8n` from the drill clone — all OK except `security-scan`, which looks for +a `felhom.eu` clone beside the drill and found none; the shared scanner run by hand on the drill clone: 0 hits. + +## Teardown + +Three layers, 2026-10-25 ~00:05Z: + +- **Machine (demo-hp):** VM **9360** `sweep1024-box` and LXC **9361** `sweep1024-browser` — both created by this session — + stopped and destroyed with `--purge`; no disk of either is left on `nvme-scratch`. Untouched: Tester 1 (VM 341), 9201, + 9202, 9401, the thin pool, and the 1.30.0 ISO in `local:iso` (there since 2026-10-22). Before the destroy, the box's + controller log, the agent journal, its end state and its anonymous-volume list were copied here (`_box/`). +- **Host (DooPlex):** the session's secret files (`/run/user/1000/sweep-sc`: the dashboard password copy, cookies, CSRF + tokens) shredded. The drill catalog keeps its commits (`a601950`, `405077f`, `492a17f`, and the reverted turn + `c420053`) for the morning list; nothing went to the live catalog. +- **Hub:** host **Tester4-aa9466** stays for the operator to delete (CC holds no delete). Until then it reads as a box + that stopped reporting. +- **ep0:** listed, nothing removed. The host's PBS link to ep0 (`felhom-pbs`) was set up at day-0 (`pbsdr: converged`, + 14:44:48 CEST, `_box/agent-journal.log.gz`); no whole-box copy went to it (weekly cadence — only the local copy ran, + 14:51). The app copies the box sent off-site went to the Tester4 restic repository on the storage box (unlocked with + the rehearsal's recovery code; a new code escrowed — stored out-of-band), not to ep0. + +## Evidence map + +- `_box/` — Part 0 (VM, ISO, bind, day-0, claim, recovery, drives, dashboard screens). +- `/` — one per app; re-run apps keep the earlier run in `first-run/`, `run-2/` or `run-drill-pre/`. +- `.console.txt`, `progress.log`, `batch.out`, `chain2.out`, `chain3.out` — the runner's own output. +- `_unitprobe/tandoor/` — F10. `_putback/{privatebin,vikunja}/` — D22. +- `tools/` — the harness (sweep copies of the catalog's `box_walk.py` and `upgrade_fixtures_box.py`, marked SWEEP COPY; + `sweep.py`, `sweep_fixtures.py`, `unitprobe.py`, `putback.py`, `repoint.py`, `table.py`, the rehearsal's VM and browser + helpers). Secrets were read by name through `sec` and never written here; the evidence was scanned for every known + secret value and for token shapes (one app session token found and blanked: Actual Budget's), with a positive control. +- Screenshots were reduced with `pngquant` (lossy palette) to keep the repository small. diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/README.md b/documentation/audits/catalog-sweep-2026-10-24/_box/README.md new file mode 100644 index 00000000..a8fcb6fb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/README.md @@ -0,0 +1,20 @@ +# Part 0 — the sweep box (2026-10-24, from 12:33Z) + +| | | +|---|---| +| VM | **9360 `sweep1024-box`** on demo-hp: 6 cores (`cpu host`), **12 GiB** (demo-hp had 14 GiB available of 29; 9201, 9202 and Tester 1 untouched — the brief's minimum, not its 16 GiB aim), 256 GB system disk + 200 GB + 150 GB data disks, all raw on `nvme-scratch` (the dir storage), never the thin pool (`vm-create.txt`) | +| ISO | `felhom-installer-1.30.0-pve9.2-1.iso` — the current one on felhom.eu/letoltes; sha256 `590d7b9b…74d5cc1` = the published `.sha256` | +| Installer | graphical, Hungarian keyboard kept, driven by `qm sendkey` (`tools/vmctl.sh`), screens in `install/`. Install pressed **12:37:33Z**; pairing code on the console **12:41** (blacked out in `install/11-console.png`) | +| Bind | Tester4's old host deleted by the operator (12:32, asked by CC); the hub mailed a new bind link 12:31:57Z; bound through the real page in Chromium 12:42:18Z, first try (`screens/b-bind-*`) | +| Day-0 | 8/8 steps, **SUCCESS 12:45:40Z** — host `Tester4-aa9466`, guest 9201, golden imported and verified; Install → done **8 min 7 s** | +| Claim | setup-code mail 12:43:14Z („Új beállító kód — újratelepült a szervered", right for a customer who had a box before); claimed 302 → `/` (`claim.txt`) | +| Recovery | the box found Tester4's sealed off-site package (2026-10-20 14:16) and asked for the old code first (`/recovery`): the 2026-10-20 code, typed as it was written down (ten words joined by hyphens), unlocked it — controller „the offsite repository key was recovered and placed" 12:47:41Z. Then the dashboard asked for a NEW code: the ceremony in Chromium (words 4 and 9 asked), escrowed; „Távoli mentés: Aktív" (`screens/box-escrow-*`, the code blacked out) | +| Drives | `/dev/sdb` → `hdd_1` (210 GB, the apps' data), `/dev/sdc` → `hdd_2` (157 GB), both through `POST /api/storage/init` (`drive-init.txt`); the installer's internal place `belso` (59 GB) | +| Versions | controller **0.342.0**, agent **0.164.0**, hub **0.169.0**; the box syncs the LIVE catalog (`app-catalog-felhom.eu` main, `5e196e1` at the start; it re-syncs every 15 min) | +| Guest | 9201 at 192.168.0.157, 7.7 GiB RAM (the golden's size), domain `tester4.test` (no DNS — the browser LXC maps the names; TLS not verified) | +| Browser | LXC **9361 `sweep1024-browser`** (2 cores, 2 GB, nvme-scratch): Chromium 156.0.8078.47 + Playwright 1.52.0; the household's session stored in the LXC (`/root/work/state-dash.json`) | +| Dashboard | every menu page at phone and computer size, HU and EN (`screens-dashboard/`, 60): no sideways scroll reported; a signed-in household reads its OWN language setting whatever the browser asks — by design (`langFor`), the page texts were read with `?lang=` | + +Secrets used (names only, `sec`): SWEEP_2026_10_24_ROOTPW (the typed root password — day-0 replaced it with the vaulted +one; DooPlex's key was added before the bind), SWEEP_2026_10_24_BIND_TOKEN, _PAIRING_CODE, _SETUP_CODE, _DASH_PW, +_RECOVERY_CODE, and the existing REHEARSAL_2026_10_20_PASSPHRASE / _RECOVERY_CODE. diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/agent-journal.log.gz b/documentation/audits/catalog-sweep-2026-10-24/_box/agent-journal.log.gz new file mode 100644 index 00000000..628dc684 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/agent-journal.log.gz differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/anon-volumes.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/anon-volumes.txt new file mode 100644 index 00000000..f37aee6d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/anon-volumes.txt @@ -0,0 +1,52 @@ +2026-10-24T17:15:18Z 28 assets,config,library, +2026-10-24T12:51:57Z 24 client_body,fastcgi,proxy, +2026-10-24T13:08:14Z 24 client_body,fastcgi,proxy, +2026-10-24T19:54:35Z 4 +2026-10-24T17:15:18Z 4 +2026-10-24T12:51:49Z 24 client_body,fastcgi,proxy, +2026-10-24T19:54:18Z 4 +2026-10-24T13:06:43Z 24 client_body,fastcgi,proxy, +2026-10-24T13:08:05Z 72 lock,nginx,nginx.pid, +2026-10-24T19:06:36Z 36 documentserver,documentserver-example, +2026-10-24T13:06:43Z 4 +2026-10-24T13:08:05Z 24 client_body,fastcgi,proxy, +2026-10-24T13:06:43Z 72 lock,nginx,nginx.pid, +2026-10-24T19:54:18Z 24 client_body,fastcgi,proxy, +2026-10-24T17:18:02Z 4 +2026-10-24T13:07:11Z 24 client_body,fastcgi,proxy, +2026-10-24T12:50:39Z 72 lock,nginx,nginx.pid, +2026-10-24T13:07:11Z 72 lock,nginx,nginx.pid, +2026-10-24T19:09:38Z 36 documentserver,documentserver-example, +2026-10-24T17:20:41Z 28 assets,config,library, +2026-10-24T19:54:35Z 24 client_body,fastcgi,proxy, +2026-10-24T12:50:39Z 24 client_body,fastcgi,proxy, +2026-10-24T12:51:57Z 72 lock,nginx,nginx.pid, +2026-10-24T19:07:30Z 4 +2026-10-24T12:50:57Z 24 client_body,fastcgi,proxy, +2026-10-24T19:21:09Z 4 +2026-10-24T19:09:38Z 4 +2026-10-24T12:50:57Z 72 lock,nginx,nginx.pid, +2026-10-24T19:20:01Z 4 +2026-10-24T19:55:03Z 4 +2026-10-24T12:51:57Z 4 +2026-10-24T19:54:18Z 72 lock,nginx,nginx.pid, +2026-10-24T17:18:02Z 28 assets,config,library, +2026-10-24T19:24:43Z 4 +2026-10-24T12:50:39Z 4 +2026-10-24T13:08:05Z 4 +2026-10-24T12:51:49Z 4 +2026-10-24T19:07:30Z 32 documentserver,documentserver-example, +2026-10-24T19:06:36Z 4 +2026-10-24T19:07:39Z 4 +2026-10-24T13:08:14Z 4 +2026-10-24T17:17:24Z 4 +2026-10-24T12:50:57Z 4 +2026-10-24T17:17:24Z 28 assets,config,library, +2026-10-24T19:55:03Z 24 client_body,fastcgi,proxy, +2026-10-24T19:55:03Z 72 lock,nginx,nginx.pid, +2026-10-24T13:08:14Z 72 lock,nginx,nginx.pid, +2026-10-24T19:07:39Z 36 documentserver,documentserver-example, +2026-10-24T19:54:35Z 72 lock,nginx,nginx.pid, +2026-10-24T17:20:41Z 4 +2026-10-24T12:51:49Z 72 lock,nginx,nginx.pid, +2026-10-24T13:07:11Z 4 diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/claim.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/claim.txt new file mode 100644 index 00000000..5304ff61 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/claim.txt @@ -0,0 +1,3 @@ +GET /claim HTTP/2 200 +csrf_len 64 cookie_present yes +POST /claim HTTP/2 302 location: / diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/controller.log.gz b/documentation/audits/catalog-sweep-2026-10-24/_box/controller.log.gz new file mode 100644 index 00000000..9efec3cc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/controller.log.gz differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/drive-init.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/drive-init.txt new file mode 100644 index 00000000..0593ef8d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/drive-init.txt @@ -0,0 +1,11 @@ +candidates 200 {"data": {"vmid": 9201, "initialize": [{"device": "/dev/sdb", "size_bytes": 214748364800, "model": "QEMU HARDDISK", "data_bearing": false, "mountable": false}, {"device": "/dev/sdc", "size_bytes": 161061273600, "model": "QEMU HARDDISK", "data_bearing": false, "mountable": false}], "attach": []}, "ok": true} +12:50:04Z init /dev/sdb hdd_1 200 {"data": {"phase": "formatting", "started": true}, "ok": true} + status 200 {"device": "/dev/sdb", "durable_id": "", "error": "", "opsign": "", "phase": "done", "reason": "", "started_at": "2026-10-24T12:50:04.496400956Z", "updated_at": "2026-10-24T12:50:06.691612961Z", "where": "/mnt/felhom-drives/hdd_1"} +12:50:09Z init /dev/sdc hdd_2 200 {"data": {"phase": "formatting", "started": true}, "ok": true} + status 200 {"device": "/dev/sdc", "durable_id": "", "error": "", "opsign": "", "phase": "done", "reason": "", "started_at": "2026-10-24T12:50:09.550638661Z", "updated_at": "2026-10-24T12:50:11.762283786Z", "where": "/mnt/felhom-drives/hdd_2"} + 9dcbe7bf-098d-4d99-9c43-f39fe2b20f42 disk user-data attached 157 GB /mnt/felhom-drives/hdd_2 + belso internal user-data attached 59 GB /mnt/felhom-drives/belso + e8b4f4a0-7aca-4829-9220-b394948b9368 disk user-data attached 210 GB /mnt/felhom-drives/hdd_1 + local system system attached 77 GB None backup_target + local-lvm system system attached 165 GB None + felhom-pbs network backup attached 0 GB None diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/end-state.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/end-state.txt new file mode 100644 index 00000000..eee60dd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/end-state.txt @@ -0,0 +1,8 @@ +filebrowser gtstef/filebrowser:1.5.6-stable Up 9 hours (healthy) +felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.342.0 Up 6 minutes (healthy) +traefik traefik:v3.7.13 Up 9 hours +54 +Filesystem Size Used Avail Use% Mounted on +/dev/sdb 196G 268M 186G 1% /mnt/felhom-drives/hdd_1 +/dev/sdc 147G 2.2M 140G 1% /mnt/felhom-drives/hdd_2 +/dev/mapper/pve-vm--9201--disk--0 32G 1.2G 29G 4% / diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/01-boot.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/01-boot.png new file mode 100644 index 00000000..ae031c15 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/01-boot.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/02-disk.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/02-disk.png new file mode 100644 index 00000000..d1a02c3e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/02-disk.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/03-location.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/03-location.png new file mode 100644 index 00000000..da9f1395 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/03-location.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/04-password.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/04-password.png new file mode 100644 index 00000000..7f9fa92b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/04-password.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/05-pw-email.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/05-pw-email.png new file mode 100644 index 00000000..5f241099 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/05-pw-email.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/06-network.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/06-network.png new file mode 100644 index 00000000..80c3ddf3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/06-network.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/07-summary.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/07-summary.png new file mode 100644 index 00000000..31982a90 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/07-summary.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/08-installing.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/08-installing.png new file mode 100644 index 00000000..f7f995d6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/08-installing.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/09-progress.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/09-progress.png new file mode 100644 index 00000000..1ad00a9c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/09-progress.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/10-now.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/10-now.png new file mode 100644 index 00000000..c23d394d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/10-now.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/11-console.png b/documentation/audits/catalog-sweep-2026-10-24/_box/install/11-console.png new file mode 100644 index 00000000..a83eb9e2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/install/11-console.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/install/install-pressed.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/install/install-pressed.txt new file mode 100644 index 00000000..e5bb1d61 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/install/install-pressed.txt @@ -0,0 +1 @@ +Install pressed 12:37:33 diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-en.png new file mode 100644 index 00000000..4ee729e2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-hu.png new file mode 100644 index 00000000..cd6335e8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-en.png new file mode 100644 index 00000000..9a1a0033 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-hu.png new file mode 100644 index 00000000..ef8dede7 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-apps-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-en.png new file mode 100644 index 00000000..a04b0d57 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-hu.png new file mode 100644 index 00000000..79fc3f1d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-en.png new file mode 100644 index 00000000..0bdbd5e4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-hu.png new file mode 100644 index 00000000..af66ab2c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-en.png new file mode 100644 index 00000000..a95c17a9 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-hu.png new file mode 100644 index 00000000..30c8d686 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-en.png new file mode 100644 index 00000000..992e3874 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-hu.png new file mode 100644 index 00000000..574b2ca5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-remote-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-en.png new file mode 100644 index 00000000..53a52987 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-hu.png new file mode 100644 index 00000000..14fff360 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-en.png new file mode 100644 index 00000000..eff6deb9 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-hu.png new file mode 100644 index 00000000..fb5683b4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-backups-restore-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-en.png new file mode 100644 index 00000000..db82960c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-hu.png new file mode 100644 index 00000000..e96ffb5b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-en.png new file mode 100644 index 00000000..f0bc536f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-hu.png new file mode 100644 index 00000000..81e2fe81 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-dashboard-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-en.png new file mode 100644 index 00000000..251a3208 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-hu.png new file mode 100644 index 00000000..251a3208 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-en.png new file mode 100644 index 00000000..489804cf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-hu.png new file mode 100644 index 00000000..489804cf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-debug-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-en.png new file mode 100644 index 00000000..e8aed9fd Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-hu.png new file mode 100644 index 00000000..ed250524 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-en.png new file mode 100644 index 00000000..3a40141a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-hu.png new file mode 100644 index 00000000..f450563f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-launcher-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-en.png new file mode 100644 index 00000000..31131321 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-hu.png new file mode 100644 index 00000000..33be6849 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-en.png new file mode 100644 index 00000000..08afdc94 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-hu.png new file mode 100644 index 00000000..060fc623 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-monitoring-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-en.png new file mode 100644 index 00000000..9a4401ed Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-hu.png new file mode 100644 index 00000000..2bd8ed7b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-en.png new file mode 100644 index 00000000..6fae0fc0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-hu.png new file mode 100644 index 00000000..6fae0fc0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-en.png new file mode 100644 index 00000000..14566a22 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-hu.png new file mode 100644 index 00000000..14566a22 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-notifications-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-en.png new file mode 100644 index 00000000..c926a557 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-hu.png new file mode 100644 index 00000000..24672511 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-en.png new file mode 100644 index 00000000..a383236e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-hu.png new file mode 100644 index 00000000..a383236e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-en.png new file mode 100644 index 00000000..055a6aff Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-hu.png new file mode 100644 index 00000000..055a6aff Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-settings-security-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-en.png new file mode 100644 index 00000000..b07fb754 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-hu.png new file mode 100644 index 00000000..b07fb754 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-en.png new file mode 100644 index 00000000..2f8ea7ef Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-hu.png new file mode 100644 index 00000000..2f8ea7ef Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-sharing-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-en.png new file mode 100644 index 00000000..cee0285c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-hu.png new file mode 100644 index 00000000..01c7d5bd Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-en.png new file mode 100644 index 00000000..48094373 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-hu.png new file mode 100644 index 00000000..06b87143 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-stacks-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-en.png new file mode 100644 index 00000000..44610d7e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-hu.png new file mode 100644 index 00000000..44610d7e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-en.png new file mode 100644 index 00000000..7110fb3d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-hu.png new file mode 100644 index 00000000..7110fb3d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-en.png new file mode 100644 index 00000000..28059c64 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-hu.png new file mode 100644 index 00000000..28059c64 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-network-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-en.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-en.png new file mode 100644 index 00000000..33deab36 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-hu.png new file mode 100644 index 00000000..33deab36 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens-dashboard/p0-storage-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-1-open-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-1-open-phone-hu.png new file mode 100644 index 00000000..780ea2b5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-1-open-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-2-answer-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-2-answer-phone-hu.png new file mode 100644 index 00000000..a99f647e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/b-bind-2-answer-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-2-progress-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-2-progress-phone-hu.png new file mode 100644 index 00000000..6aa6fc19 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-2-progress-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-3-reveal-gate-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-3-reveal-gate-phone-hu.png new file mode 100644 index 00000000..8601dfa3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-3-reveal-gate-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-4-code-shown-REDACTED-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-4-code-shown-REDACTED-phone-hu.png new file mode 100644 index 00000000..1abd9723 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-4-code-shown-REDACTED-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-5-words-ok-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-5-words-ok-phone-hu.png new file mode 100644 index 00000000..73b1bd5e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-5-words-ok-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-6-after-finish-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-6-after-finish-phone-hu.png new file mode 100644 index 00000000..992e3874 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-escrow-6-after-finish-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-login-1-launcher-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-login-1-launcher-phone-hu.png new file mode 100644 index 00000000..b145ae71 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-login-1-launcher-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-recovery-1-page-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-recovery-1-page-phone-hu.png new file mode 100644 index 00000000..140b0df0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/_box/screens/box-recovery-1-page-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/_box/vm-create.txt b/documentation/audits/catalog-sweep-2026-10-24/_box/vm-create.txt new file mode 100644 index 00000000..c19b49ac --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_box/vm-create.txt @@ -0,0 +1,24 @@ +Formatting '/mnt/hdd_1/images/9360/vm-9360-disk-0.raw', fmt=raw size=274877906944 preallocation=off +scsi0: successfully created disk 'nvme-scratch:9360/vm-9360-disk-0.raw,size=256G' +Formatting '/mnt/hdd_1/images/9360/vm-9360-disk-1.raw', fmt=raw size=214748364800 preallocation=off +scsi1: successfully created disk 'nvme-scratch:9360/vm-9360-disk-1.raw,size=200G' +Formatting '/mnt/hdd_1/images/9360/vm-9360-disk-2.raw', fmt=raw size=161061273600 preallocation=off +scsi2: successfully created disk 'nvme-scratch:9360/vm-9360-disk-2.raw,size=150G' +update VM 9360: -boot order=scsi0;ide2 +boot: order=scsi0;ide2 +cores: 6 +cpu: host +ide2: local:iso/felhom-installer-1.30.0-pve9.2-1.iso,media=cdrom,size=1665356K +memory: 12288 +meta: creation-qemu=11.0.3,ctime=1792845199 +name: sweep1024-box +net0: virtio=BC:24:11:9A:87:20,bridge=vmbr0 +ostype: l26 +scsi0: nvme-scratch:9360/vm-9360-disk-0.raw,size=256G +scsi1: nvme-scratch:9360/vm-9360-disk-1.raw,size=200G +scsi2: nvme-scratch:9360/vm-9360-disk-2.raw,size=150G +scsihw: virtio-scsi-single +smbios1: uuid=4b362477-61db-4351-ad94-f99cb082060f +vga: std +vmgenid: 28c510f8-d855-441b-981e-4a56d7b3b6d7 +12:33:24 diff --git a/documentation/audits/catalog-sweep-2026-10-24/_drill-repoint.txt b/documentation/audits/catalog-sweep-2026-10-24/_drill-repoint.txt new file mode 100644 index 00000000..e88c1cba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_drill-repoint.txt @@ -0,0 +1,52 @@ +24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-drill.git + +2026/10/24 21:18:11 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-drill.git, interval: 15m0s) +2026/10/24 21:18:11 [INFO] [sync] Starting catalog sync +2026/10/24 21:18:11 [ERROR] [sync] Catalog sync failed: git clone --depth 1 --branch main https://gitea.dooplex.hu/admin/app-catalog-drill.git /opt/docker/felhom-controller/data/catalog-cache: exit status 128 +RESTORED-IDENTICAL +24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git + +2026/10/24 21:33:19 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s) +2026/10/24 21:33:19 [INFO] [sync] Starting catalog sync +2026/10/24 21:33:19 [INFO] [sync] Cloning https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git → /opt/docker/felhom-controller/data/catalog-cache +2026/10/24 21:33:20 [INFO] [sync] catalog moved (none) -> 227a54498f76 (0 new, 0 stack dir(s) changed) +2026/10/24 21:33:21 [INFO] [sync] Catalog sync complete +2026/10/24 21:33:21 [INFO] [sync] Initial sync: Sablonok frissítve — a katalógus új változata betöltve; a telepített alkalmazások fájljai nem változtak + +24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git +-rw------- 1 root root 2787 Oct 24 12:44 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-sweep-drill +fatal: cannot change to '/opt/docker/felhom-controller/drill-catalog.git': No such file or directory +cache HEAD 227a544 +https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git + +mirror main fd23571 + +24: repo_url: file:///opt/docker/felhom-controller/drill-catalog.git + +2026/10/24 21:34:31 [INFO] [sync] Updated opengist/.felhom.yml +2026/10/24 21:34:31 [INFO] [sync] Updated plex/docker-compose.yml +2026/10/24 21:34:31 [INFO] [sync] Updated plex/.felhom.yml +2026/10/24 21:34:31 [INFO] [sync] catalog moved 227a54498f76 -> fd23571597a8 (0 new, 3 stack dir(s) changed) +2026/10/24 21:34:31 [INFO] [sync] Catalog sync complete +2026/10/24 21:34:31 [INFO] [sync] Initial sync: Sablonok frissítve — frissítve: n8n, opengist, plex + + expect n8n/docker-compose.yml ∋ N8N_DIAGNOSTICS_ENABLED=false: 1 + expect opengist/docker-compose.yml ∋ 256M: 2 +drill main fd23571, box cache fd23571: DRILL-CONFIRMED +21:37:58 n8n container env: N8N_DIAGNOSTICS_ENABLED=false +RESTORED-IDENTICAL +24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git + +2026/10/24 21:49:36 [INFO] [sync] Updated opengist/.felhom.yml +2026/10/24 21:49:36 [INFO] [sync] Updated plex/docker-compose.yml +2026/10/24 21:49:36 [INFO] [sync] Updated plex/.felhom.yml +2026/10/24 21:49:36 [INFO] [sync] catalog moved fd23571597a8 -> 227a54498f76 (0 new, 3 stack dir(s) changed) +2026/10/24 21:49:36 [INFO] [sync] Catalog sync complete +2026/10/24 21:49:36 [INFO] [sync] Initial sync: Sablonok frissítve — frissítve: n8n, opengist, plex + +24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git +-rw------- 1 root root 2787 Oct 24 12:44 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-sweep-drill +mirror main fd23571 +cache HEAD 227a544 +https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git + diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback-privatebin.console.txt b/documentation/audits/catalog-sweep-2026-10-24/_putback-privatebin.console.txt new file mode 100644 index 00000000..e4cb7348 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback-privatebin.console.txt @@ -0,0 +1,18 @@ +19:54:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:54:34Z [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'} +19:54:34Z privatebin: seeded paste id=d895e53013696ba1 +19:54:34Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:54:48Z unit before the fault: +total 20 +drwxr-xr-x 2 root root 4096 19:54:35 . +drwxr-xr-x 4 root root 4096 19:54:35 .. +-rw-r--r-- 1 root root 8704 19:54:35 privatebin_privatebin_data.tar + +19:55:01Z THE FAULT: /mnt/sys_drive/felhom-data/backups/primary/privatebin/volume-dumps/privatebin_privatebin_data.tar 8704 -> 4352 +19:55:01Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:55:11Z privatebin: readback http=200 marker_present=True +19:55:14Z controller: 2026/10/24 19:50:54 [INFO] [offbox] tandoor: the live volumes are copied before the restore (3 copied, 0 new from the snapshot) in 2.669s — /mnt/sys_drive/felhom-data/backups/restore-undo/tandoor/20261024T195052Z (R-893) +2026/10/24 19:55:02 [INFO] [offbox] privatebin: the live volumes are copied before the restore (1 copied, 0 new from the snapshot) in 347ms — /mnt/sys_drive/felhom-data/backups/restore-undo/privatebin/20261024T195501Z (R-893) +2026/10/24 19:55:03 [WARN] [offbox] privatebin: the restore failed (failed to restore 1 volume(s): [privatebin_privatebin_data]) — the live volumes and d +19:55:47Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot +19:55:55Z == putback {"seed": true, "state_after": "starting", "item_after": true} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback-vikunja.console.txt b/documentation/audits/catalog-sweep-2026-10-24/_putback-vikunja.console.txt new file mode 100644 index 00000000..74bd97cc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback-vikunja.console.txt @@ -0,0 +1,21 @@ +19:55:56Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:56:01Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'} +19:56:01Z gate: tasks is gated — passed as the household (cookie set) +19:56:01Z vikunja: register http=200 +19:56:01Z vikunja: create project http=201 +19:56:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:56:16Z unit before the fault: +total 2568 +drwxr-xr-x 2 root root 4096 19:56:03 . +drwxr-xr-x 4 root root 4096 19:56:03 .. +-rw-r--r-- 1 root root 1536 19:56:02 vikunja_vikunja_data.tar +-rw-r--r-- 1 root root 2615296 19:56:02 vikunja_vikunja_db.tar + +19:56:29Z THE FAULT: /mnt/sys_drive/felhom-data/backups/primary/vikunja/volume-dumps/vikunja_vikunja_db.tar 2615296 -> 1307648 +19:56:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:56:40Z vikunja: readback of the seeded project http=200 ok=True +19:56:43Z controller: 2026/10/24 19:55:03 [ERROR] [web] Restore failed (async): stack=privatebin: a(z) privatebin visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut +2026/10/24 19:56:31 [INFO] [offbox] vikunja: the live volumes are copied before the restore (2 copied, 0 new from the snapshot) in 775ms — /mnt/sys_drive/felhom-data/backups/restore-undo/vikunja/20261024T195630Z (R-893) +2026/10/24 19:56:33 [WARN] [offbox] vikunja: the restore failed (failed to restore 1 volume(s): [vikunja_vikunja_db]) — the live volumes and def +19:57:16Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +19:57:24Z == putback {"seed": true, "state_after": "running", "item_after": true} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/record.json b/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/record.json new file mode 100644 index 00000000..977a4541 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/record.json @@ -0,0 +1,35 @@ +{ + "app": "privatebin", + "install": true, + "seed": true, + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.465525975s\", \"last_run\": \"2026-10-24T19:54:35.791259113Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "fault": { + "file": "/mnt/sys_drive/felhom-data/backups/primary/privatebin/volume-dumps/privatebin_privatebin_data.tar", + "from": "8704", + "to": "4352" + }, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"privatebin\", \"started_at\": \"2026-10-24T19:55:01.085750365Z\", \"last\": {\"op\": \"restore\", \"stack\": \"privatebin\", \"ok\": false, \"message\": \"Visszaállítás sikertelen: a(z) privatebin visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut\", \"finished_at\": \"2026-10-24T19:55:03.845276539Z\"}, \"last_recent\": true}", + "state": "starting" + }, + "state_after": "starting", + "item_after": true, + "controller_log": "2026/10/24 19:50:54 [INFO] [offbox] tandoor: the live volumes are copied before the restore (3 copied, 0 new from the snapshot) in 2.669s — /mnt/sys_drive/felhom-data/backups/restore-undo/tandoor/20261024T195052Z (R-893)\n2026/10/24 19:55:02 [INFO] [offbox] privatebin: the live volumes are copied before the restore (1 copied, 0 new from the snapshot) in 347ms — /mnt/sys_drive/felhom-data/backups/restore-undo/privatebin/20261024T195501Z (R-893)\n2026/10/24 19:55:03 [WARN] [offbox] privatebin: the restore failed (failed to restore 1 volume(s): [privatebin_privatebin_data]) — the live volumes and definition are put back; starting the app (R-893)\n2026/10/24 19:55:03 [INFO] Event pushed: backup_run_failures (error) [hu-only] — App \"privatebin\": its off-site restore FAILED and was undone — the live volumes and definition from just before the restore were put back and the app was started (R-893). No support step is needed; the household was told. Error: failed to restore 1 volume(s): [privatebin_privatebin_data]\n2026/10/24 19:55:03 [ERROR] [web] Restore failed (async): stack=privatebin: a(z) privatebin visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut\n", + "after_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + } +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/walk.log b/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/walk.log new file mode 100644 index 00000000..e4cb7348 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback/privatebin/walk.log @@ -0,0 +1,18 @@ +19:54:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:54:34Z [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'} +19:54:34Z privatebin: seeded paste id=d895e53013696ba1 +19:54:34Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:54:48Z unit before the fault: +total 20 +drwxr-xr-x 2 root root 4096 19:54:35 . +drwxr-xr-x 4 root root 4096 19:54:35 .. +-rw-r--r-- 1 root root 8704 19:54:35 privatebin_privatebin_data.tar + +19:55:01Z THE FAULT: /mnt/sys_drive/felhom-data/backups/primary/privatebin/volume-dumps/privatebin_privatebin_data.tar 8704 -> 4352 +19:55:01Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:55:11Z privatebin: readback http=200 marker_present=True +19:55:14Z controller: 2026/10/24 19:50:54 [INFO] [offbox] tandoor: the live volumes are copied before the restore (3 copied, 0 new from the snapshot) in 2.669s — /mnt/sys_drive/felhom-data/backups/restore-undo/tandoor/20261024T195052Z (R-893) +2026/10/24 19:55:02 [INFO] [offbox] privatebin: the live volumes are copied before the restore (1 copied, 0 new from the snapshot) in 347ms — /mnt/sys_drive/felhom-data/backups/restore-undo/privatebin/20261024T195501Z (R-893) +2026/10/24 19:55:03 [WARN] [offbox] privatebin: the restore failed (failed to restore 1 volume(s): [privatebin_privatebin_data]) — the live volumes and d +19:55:47Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot +19:55:55Z == putback {"seed": true, "state_after": "starting", "item_after": true} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/record.json b/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/record.json new file mode 100644 index 00000000..f030a99e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/record.json @@ -0,0 +1,35 @@ +{ + "app": "vikunja", + "install": true, + "seed": true, + "backup": { + "code": "200", + "seconds": 11, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.727555353s\", \"last_run\": \"2026-10-24T19:56:03.597363181Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "fault": { + "file": "/mnt/sys_drive/felhom-data/backups/primary/vikunja/volume-dumps/vikunja_vikunja_db.tar", + "from": "2615296", + "to": "1307648" + }, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-24T19:56:29.913870108Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": false, \"message\": \"Visszaállítás sikertelen: a(z) vikunja visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut\", \"finished_at\": \"2026-10-24T19:56:34.555556083Z\"}, \"last_recent\": true}", + "state": "running" + }, + "state_after": "running", + "item_after": true, + "controller_log": "2026/10/24 19:55:03 [ERROR] [web] Restore failed (async): stack=privatebin: a(z) privatebin visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut\n2026/10/24 19:56:31 [INFO] [offbox] vikunja: the live volumes are copied before the restore (2 copied, 0 new from the snapshot) in 775ms — /mnt/sys_drive/felhom-data/backups/restore-undo/vikunja/20261024T195630Z (R-893)\n2026/10/24 19:56:33 [WARN] [offbox] vikunja: the restore failed (failed to restore 1 volume(s): [vikunja_vikunja_db]) — the live volumes and definition are put back; starting the app (R-893)\n2026/10/24 19:56:33 [INFO] Event pushed: backup_run_failures (error) [hu-only] — App \"vikunja\": its off-site restore FAILED and was undone — the live volumes and definition from just before the restore were put back and the app was started (R-893). No support step is needed; the household was told. Error: failed to restore 1 volume(s): [vikunja_vikunja_db]\n2026/10/24 19:56:34 [ERROR] [web] Restore failed (async): stack=vikunja: a(z) vikunja visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut\n", + "after_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + } +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/walk.log b/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/walk.log new file mode 100644 index 00000000..74bd97cc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_putback/vikunja/walk.log @@ -0,0 +1,21 @@ +19:55:56Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:56:01Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'} +19:56:01Z gate: tasks is gated — passed as the household (cookie set) +19:56:01Z vikunja: register http=200 +19:56:01Z vikunja: create project http=201 +19:56:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:56:16Z unit before the fault: +total 2568 +drwxr-xr-x 2 root root 4096 19:56:03 . +drwxr-xr-x 4 root root 4096 19:56:03 .. +-rw-r--r-- 1 root root 1536 19:56:02 vikunja_vikunja_data.tar +-rw-r--r-- 1 root root 2615296 19:56:02 vikunja_vikunja_db.tar + +19:56:29Z THE FAULT: /mnt/sys_drive/felhom-data/backups/primary/vikunja/volume-dumps/vikunja_vikunja_db.tar 2615296 -> 1307648 +19:56:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:56:40Z vikunja: readback of the seeded project http=200 ok=True +19:56:43Z controller: 2026/10/24 19:55:03 [ERROR] [web] Restore failed (async): stack=privatebin: a(z) privatebin visszaállítása sikertelen. Nem változott semmi: az alkalmazás adatai visszakerültek a visszaállítás előtti állapotba, és az alkalmazás újra fut +2026/10/24 19:56:31 [INFO] [offbox] vikunja: the live volumes are copied before the restore (2 copied, 0 new from the snapshot) in 775ms — /mnt/sys_drive/felhom-data/backups/restore-undo/vikunja/20261024T195630Z (R-893) +2026/10/24 19:56:33 [WARN] [offbox] vikunja: the restore failed (failed to restore 1 volume(s): [vikunja_vikunja_db]) — the live volumes and def +19:57:16Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +19:57:24Z == putback {"seed": true, "state_after": "running", "item_after": true} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe-tandoor.console.txt b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe-tandoor.console.txt new file mode 100644 index 00000000..d87d4146 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe-tandoor.console.txt @@ -0,0 +1,16 @@ +19:42:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:44:56Z [1] deployed, controller state=unhealthy, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +19:44:56Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +19:44:56Z gate: recipes is gated — passed as the household (cookie set) +19:45:09Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully. +19:45:13Z tandoor: seeded superuser drill49542f +19:45:13Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:46:06Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +19:46:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:48:56Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +19:50:44Z capture after the reinstall: 2026/10/24 19:50:32 [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld +19:50:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:53:08Z tandoor: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: n3.13/site-packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "tandoo +19:53:14Z state after restore: starting, item: False, db auth errors: tandoor: 42 +tandoor-postgres: 22 +19:53:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/record.json b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/record.json new file mode 100644 index 00000000..82f3840f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/record.json @@ -0,0 +1,33 @@ +{ + "app": "tandoor", + "install": true, + "seed": true, + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"12.675635563s\", \"last_run\": \"2026-10-24T19:45:26.650951013Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "reinstall": true, + "capture_after_reinstall": "2026/10/24 19:50:32 [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0)", + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 116, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"tandoor\", \"started_at\": \"2026-10-24T19:50:47.857439195Z\", \"last\": {\"op\": \"restore\", \"stack\": \"tandoor\", \"ok\": true, \"message\": \"A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T19:52:38.571786756Z\"}, \"last_recent\": true}", + "state": "starting" + }, + "state_after_restore": "starting", + "item_after_restore": false, + "db_auth_errors_after_restore": "tandoor: 42\ntandoor-postgres: 22", + "controller_restore_lines": "2026/10/24 19:47:38 [INFO] [stacks] tandoor ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72 running Up 3 seconds (health: starting)\n2026/10/24 19:47:38 [INFO] [stacks] tandoor-postgres postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24 running Up 9 seconds (healthy)\n2026/10/24 19:50:32 [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0)\n2026/10/24 19:50:47 [WARN] [web] Restore requested (async): stack=tandoor, snapshot=helyi from 172.18.0.2:51686\n2026/10/24 19:50:47 [INFO] [backup] Restore tandoor: database password(s) [DB_PASSWORD] come from the backup, [] stay as installed (older than the data) — values not logged (R-1106)\n2026/10/24 19:50:47 [INFO] [backup] Restoring tandoor from recovery unit /mnt/sys_drive/felhom-data/backups/primary/tandoor: images=2, secrets recovered=2/2, data_keys=0\n2026/10/24 19:50:54 [INFO] [offbox] tandoor: the live volumes are copied before the restore (3 copied, 0 new from the snapshot) in 2.669s — /mnt/sys_drive/felhom-data/backups/restore-undo/tandoor/20261024T195052Z (R-893)\n2026/10/24 19:50:54 [INFO] [backup] tandoor: the restore copy is recorded — a power cut from here on puts the app back on start (R-1195)\n2026/10/24 19:50:55 [INFO] [backup] Restoring Docker volume tandoor_tandoor_media for tandoor\n2026/10/24 19:50:55 [INFO] [backup] Restoring Docker volume tandoor_tandoor_postgres_data for tandoor\n2026/10/24 19:50:56 [INFO] [backup] Restoring Docker volume tandoor_tandoor_static for tandoor\n2026/10/24 19:50:58 [INFO] [backup] Restored 3 Docker volume(s) for tandoor\n2026/10/24 19:50:59 [INFO] [backup] Restore tandoor: replaying DB dump into tandoor-postgres (postgres)\n2026/10/24 19:51:01 [INFO] [backup] Restore tandoor: replayed 1 DB dump(s)\n2026/10/24 19:51:07 [INFO] [stacks] tandoor ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72 running Up 3 seconds (health: starting)\n2026/10/24 19:51:07 [INFO] [stacks] tandoor-postgres postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24 running Up 8 seconds (healthy)\n2026/10/24 19:52:38 [WARN] [backup] tandoor restored but health check failed: stack tandoor did not reach running state within 1m30s after restore\n2026/10/24 19:52:38 [INFO] [backup] Restore-from-unit completed: tandoor — 3 volume(s) of 3 listed, 1 database(s) of 1 listed\n2026/10/24 19:52:38 [INFO] [web] Restore completed (async): stack=tandoor in 1m50.713622392s (volumes 3/3, dbs 1/1)\n", + "after_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + } +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-1-after-backup.txt b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-1-after-backup.txt new file mode 100644 index 00000000..3f043a73 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-1-after-backup.txt @@ -0,0 +1,126 @@ +.: +total 32 +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 . +drwxr-xr-x 3 root root 4096 2026-10-24T19:45:14 .. +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:26 compose +-rw-r--r-- 1 root root 2505 2026-10-24T19:45:20 data-stamps.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 db-dumps +-rw-r--r-- 1 root root 4719 2026-10-24T19:45:26 manifest.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 volume-dumps + +db-dumps: +total 400 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 .. +-rw-r--r-- 1 root root 397901 2026-10-24T19:45:14 tandoor-postgres.sql + +volume-dumps: +total 147364 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 .. +-rw-r--r-- 1 root root 1536 2026-10-24T19:45:20 tandoor_tandoor_media.tar +-rw-r--r-- 1 root root 56563200 2026-10-24T19:45:17 tandoor_tandoor_postgres_data.tar +-rw-r--r-- 1 root root 94322176 2026-10-24T19:45:18 tandoor_tandoor_static.tar +== manifest.json +{ + "schema_version": 2, + "app_name": "tandoor", + "display_name": "Tandoor Recipes", + "controller_version": "0.342.0", + "created_at": "2026-10-24T19:45:26Z", + "drive": "/mnt/sys_drive", + "namespace_root": "/mnt/sys_drive/felhom-data", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data_key_env_vars": null, + "secret_source": "portable secrets (data keys, DB passwords, internal signing secrets) are IN this unit's compose/app.yaml (0600); internet-reachable admin logins are NOT, and come from the guest's app.yaml or are regenerated on restore", + "config_files": [ + "docker-compose.yml", + ".felhom.yml", + "app.yaml" + ], + "db_dumps": [ + "tandoor-postgres.sql" + ], + "volume_dumps": [ + "tandoor_tandoor_media.tar", + "tandoor_tandoor_postgres_data.tar", + "tandoor_tandoor_static.tar" + ], + "checksums": { + ".felhom.yml": "761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6", + "app.yaml": "0f366c97b3e058b14b674877031bb607f837522b319207cd419763f85e0b81cd", + "docker-compose.yml": "851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25" + }, + "portable_secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data": { + "at": "2026-10-24T19:45:14Z", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + }, + "files": { + "db-dumps/tandoor-postgres.sql": { + "at": "2026-10-24T19:45:14.389836174Z", + "size": 397901, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_media.tar": { + "at": "2026-10-24T19:45:20.122542572Z", + "size": 1536, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_postgres_data.tar": { + "at": "2026-10-24T19:45:17.751883634Z", + "size": 56563200, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_static.tar": { + "at": "2026-10-24T19:45:18.787898259Z", + "size": 94322176, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + } + } + } +} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-2-after-keep-remove.txt b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-2-after-keep-remove.txt new file mode 100644 index 00000000..3f043a73 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-2-after-keep-remove.txt @@ -0,0 +1,126 @@ +.: +total 32 +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 . +drwxr-xr-x 3 root root 4096 2026-10-24T19:45:14 .. +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:26 compose +-rw-r--r-- 1 root root 2505 2026-10-24T19:45:20 data-stamps.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 db-dumps +-rw-r--r-- 1 root root 4719 2026-10-24T19:45:26 manifest.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 volume-dumps + +db-dumps: +total 400 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 .. +-rw-r--r-- 1 root root 397901 2026-10-24T19:45:14 tandoor-postgres.sql + +volume-dumps: +total 147364 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:45:26 .. +-rw-r--r-- 1 root root 1536 2026-10-24T19:45:20 tandoor_tandoor_media.tar +-rw-r--r-- 1 root root 56563200 2026-10-24T19:45:17 tandoor_tandoor_postgres_data.tar +-rw-r--r-- 1 root root 94322176 2026-10-24T19:45:18 tandoor_tandoor_static.tar +== manifest.json +{ + "schema_version": 2, + "app_name": "tandoor", + "display_name": "Tandoor Recipes", + "controller_version": "0.342.0", + "created_at": "2026-10-24T19:45:26Z", + "drive": "/mnt/sys_drive", + "namespace_root": "/mnt/sys_drive/felhom-data", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data_key_env_vars": null, + "secret_source": "portable secrets (data keys, DB passwords, internal signing secrets) are IN this unit's compose/app.yaml (0600); internet-reachable admin logins are NOT, and come from the guest's app.yaml or are regenerated on restore", + "config_files": [ + "docker-compose.yml", + ".felhom.yml", + "app.yaml" + ], + "db_dumps": [ + "tandoor-postgres.sql" + ], + "volume_dumps": [ + "tandoor_tandoor_media.tar", + "tandoor_tandoor_postgres_data.tar", + "tandoor_tandoor_static.tar" + ], + "checksums": { + ".felhom.yml": "761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6", + "app.yaml": "0f366c97b3e058b14b674877031bb607f837522b319207cd419763f85e0b81cd", + "docker-compose.yml": "851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25" + }, + "portable_secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data": { + "at": "2026-10-24T19:45:14Z", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + }, + "files": { + "db-dumps/tandoor-postgres.sql": { + "at": "2026-10-24T19:45:14.389836174Z", + "size": 397901, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_media.tar": { + "at": "2026-10-24T19:45:20.122542572Z", + "size": 1536, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_postgres_data.tar": { + "at": "2026-10-24T19:45:17.751883634Z", + "size": 56563200, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_static.tar": { + "at": "2026-10-24T19:45:18.787898259Z", + "size": 94322176, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + } + } + } +} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-3-after-reinstall-capture.txt b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-3-after-reinstall-capture.txt new file mode 100644 index 00000000..599a62f5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/unit-3-after-reinstall-capture.txt @@ -0,0 +1,126 @@ +.: +total 32 +drwxr-xr-x 5 root root 4096 2026-10-24T19:50:32 . +drwxr-xr-x 3 root root 4096 2026-10-24T19:45:14 .. +drwxr-xr-x 2 root root 4096 2026-10-24T19:50:32 compose +-rw-r--r-- 1 root root 2505 2026-10-24T19:45:20 data-stamps.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 db-dumps +-rw-r--r-- 1 root root 4719 2026-10-24T19:50:32 manifest.json +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 volume-dumps + +db-dumps: +total 400 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:14 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:50:32 .. +-rw-r--r-- 1 root root 397901 2026-10-24T19:45:14 tandoor-postgres.sql + +volume-dumps: +total 147364 +drwxr-xr-x 2 root root 4096 2026-10-24T19:45:20 . +drwxr-xr-x 5 root root 4096 2026-10-24T19:50:32 .. +-rw-r--r-- 1 root root 1536 2026-10-24T19:45:20 tandoor_tandoor_media.tar +-rw-r--r-- 1 root root 56563200 2026-10-24T19:45:17 tandoor_tandoor_postgres_data.tar +-rw-r--r-- 1 root root 94322176 2026-10-24T19:45:18 tandoor_tandoor_static.tar +== manifest.json +{ + "schema_version": 2, + "app_name": "tandoor", + "display_name": "Tandoor Recipes", + "controller_version": "0.342.0", + "created_at": "2026-10-24T19:50:32Z", + "drive": "/mnt/sys_drive", + "namespace_root": "/mnt/sys_drive/felhom-data", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data_key_env_vars": null, + "secret_source": "portable secrets (data keys, DB passwords, internal signing secrets) are IN this unit's compose/app.yaml (0600); internet-reachable admin logins are NOT, and come from the guest's app.yaml or are regenerated on restore", + "config_files": [ + "docker-compose.yml", + ".felhom.yml", + "app.yaml" + ], + "db_dumps": [ + "tandoor-postgres.sql" + ], + "volume_dumps": [ + "tandoor_tandoor_media.tar", + "tandoor_tandoor_postgres_data.tar", + "tandoor_tandoor_static.tar" + ], + "checksums": { + ".felhom.yml": "761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6", + "app.yaml": "4438c1c5820a3c6fe3f6618a109ba8fc6e3ba7335dc4e9953e1242913cdbed99", + "docker-compose.yml": "851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25" + }, + "portable_secret_env_vars": [ + "SECRET_KEY", + "DB_PASSWORD" + ], + "data": { + "at": "2026-10-24T19:45:14Z", + "image_pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + }, + "files": { + "db-dumps/tandoor-postgres.sql": { + "at": "2026-10-24T19:45:14.389836174Z", + "size": 397901, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_media.tar": { + "at": "2026-10-24T19:45:20.122542572Z", + "size": 1536, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_postgres_data.tar": { + "at": "2026-10-24T19:45:17.751883634Z", + "size": 56563200, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + }, + "volume-dumps/tandoor_tandoor_static.tar": { + "at": "2026-10-24T19:45:18.787898259Z", + "size": 94322176, + "pins": [ + "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + ], + "images": { + "tandoor": "ghcr.io/tandoorrecipes/recipes:2.6.15@sha256:2e759dd1478a2ed119ee474e28522079fb1cfa50b3fd25cba89f6b9a67abad72", + "tandoor-postgres": "postgres:17-alpine@sha256:b0f9560a2de083e2cc7382e75f808c7381a32852a7ec49117deedb300e552b24" + } + } + } + } +} diff --git a/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/walk.log b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/walk.log new file mode 100644 index 00000000..d87d4146 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/walk.log @@ -0,0 +1,16 @@ +19:42:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:44:56Z [1] deployed, controller state=unhealthy, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +19:44:56Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +19:44:56Z gate: recipes is gated — passed as the household (cookie set) +19:45:09Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully. +19:45:13Z tandoor: seeded superuser drill49542f +19:45:13Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:46:06Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +19:46:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:48:56Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +19:50:44Z capture after the reinstall: 2026/10/24 19:50:32 [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld +19:50:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:53:08Z tandoor: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: n3.13/site-packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "tandoo +19:53:14Z state after restore: starting, item: False, db auth errors: tandoor: 42 +tandoor-postgres: 22 +19:53:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget.console.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget.console.txt new file mode 100644 index 00000000..639c0902 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget.console.txt @@ -0,0 +1,14 @@ +13:15:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:16:25Z [1] deployed, controller state=running, pinned={'actualbudget': 'actualbudget/actual-server:26.9.0'} +13:16:25Z gate: budget is gated — passed as the household (cookie set) +13:16:25Z [1] installed: deployed 30 s, front door 30 s +13:16:25Z actualbudget: /account/bootstrap http=200 :: {"status":"ok","data":{"token":""}} +13:16:26Z actualbudget: login with the seeded password http=200 ok=True +13:16:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:17:25Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'actualbudget', 'volumes_removed': ['actualbudget_actualbudget_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'mes +13:17:59Z actualbudget: login with the seeded password http=400 ok=False +13:17:59Z actualbudget: body {"status":"error","reason":"invalid-password"} +13:18:00Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:18:15Z actualbudget: login with the seeded password http=200 ok=True +13:18:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'actualbudget', 'volumes_removed': ['actualbudget_actualbudget_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +13:19:02Z == actualbudget done in 187 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-en.txt new file mode 100644 index 00000000..bf4af2d5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-en.txt @@ -0,0 +1 @@ +ActualBudget — Guide — Felhom.eu ← Apps ActualBudget A budget planner - keep a simple hold on your money ● Running budget.tester4.test Open ↗ What is it for? Plan and follow a monthly budget, envelope style Import bank transactions and sort them into categories Reports and graphs of what came in and what went out Several people - run the household's money together Works offline too, and syncs between the server and your devices First steps Open budget.tester4.test in your browser Set a password the first time you open it Create your budget categories (food, transport and so on) Add your accounts and start entering transactions Load a bank statement You do not have to type in every item by hand: Actual can read the file you download from your online bank. In your online bank, download the account items as a CSV, OFX, QFX, QIF or CAMT file. In the ActualBudget sidebar on the left, select the name of the account. Select „Import” and choose the file you downloaded. For a CSV file, match the columns (date, payee, amount) and check that the date reads correctly. Start the import with the button at the bottom of the window. Actual does not add items it already has. Plan the month Give every unit of money a job: you share your income out between the categories. In the sidebar on the left, open the „Budget” page. In the row of a category, select the „Budgeted” column and type how much you set aside for it this month. Go on with the other categories until the „To Budget” amount is zero. The „Spent” column shows what you spent, and „Balance” shows what is left. Add regular bills You can set up items that come back every month, such as the rent or the electricity bill, in advance. In the sidebar on the left, open the „Schedules” page. Select „Add new schedule”. Fill in the „Payee”, „Account”, „Amount” and „Date” fields. Tick „Repeats” and choose how often the item comes. Select „Add”. You also see the upcoming items in the account's list. On a phone and with the family Everyone in the household sees the same budget, from any device. On the phone, open budget.tester4.test in the browser. Type the server password and select „Sign in”. Choose the budget file. What anyone changes reaches the other devices too. In the browser's menu, add the page to the home screen so it starts like an app. To change the password, select the server status at the top right and choose „Change password”. Frequently asked questions Where do I see what the money went on? On the „Reports” page in the sidebar on the left. The „Cash Flow” and „Net Worth” graphs are there too. Can I connect it to my bank? Actual can connect through a few outside bank services, and you need your own account with them; the box does not set this up. The simplest way is to load the file from your online bank. Can everyone have their own login? Not by default: the whole household signs in with the same server password and sees the same file. For separate users Actual needs an outside sign-in service, and the box does not set that up. Does it work without the internet? Yes. Actual also keeps the data on your own device, and it syncs when the box can be reached again. How do I save a copy of the budget? On the „Settings” page, „Export data” saves it into a zip file. You see the box's own backups on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-hu.txt new file mode 100644 index 00000000..e5003959 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-guide-hu.txt @@ -0,0 +1 @@ +ActualBudget — Felhom.eu ← Alkalmazások ActualBudget Költségvetés tervező - pénzügyeid kézben tartása egyszerűen ● Fut budget.tester4.test Megnyitás ↗ Mire használható? Havi költségvetés tervezése és követése envelope módszerrel Bankszámla tranzakciók importálása és kategorizálása Riportok és grafikonok a kiadásokról és bevételekről Több felhasználó - közös háztartási pénzügyek kezelése Offline is működik, szinkronizálás a szerver és eszközök között Első lépések Nyisd meg a budget.tester4.test címet a böngészőben Hozz létre egy jelszót az első megnyitáskor Hozd létre a költségvetési kategóriákat (pl. élelmiszer, közlekedés) Adj hozzá számlákat és kezdd el rögzíteni a tranzakciókat Banki kivonat betöltése Nem kell minden tételt kézzel beírnod: a netbankból letöltött fájlt az Actual be tudja olvasni. A netbankodban töltsd le a számla tételeit CSV, OFX, QFX, QIF vagy CAMT fájlként. Az ActualBudget bal oldali sávjában kattints a számla nevére. Kattints az „Import” (Importálás) gombra, és válaszd ki a letöltött fájlt. CSV fájlnál párosítsd az oszlopokat (dátum, partner, összeg), és nézd meg, jól olvassa-e a dátumot. Indítsd az importálást az ablak alján lévő gombbal. A már meglévő tételeket az Actual nem veszi fel újra. A havi keret beosztása Minden forintnak adj feladatot: a bevételt szétosztod a kategóriák között. A bal oldali sávban nyisd meg a „Budget” (Költségvetés) oldalt. Egy kategória sorában kattints a „Budgeted” (Betervezett) oszlopba, és írd be, mennyit szánsz rá ebben a hónapban. Folytasd a többi kategóriával, amíg a „To Budget” (Beosztandó) összeg nulla nem lesz. A „Spent” (Elköltött) oszlop mutatja, mennyit költöttél, a „Balance” (Egyenleg) pedig, mennyi maradt. Rendszeres számlák felvétele A havonta visszatérő tételeket, például a lakbért vagy a villanyszámlát, előre beállíthatod. A bal oldali sávban nyisd meg a „Schedules” (Ütemezések) oldalt. Kattints az „Add new schedule” (Új ütemezés) gombra. Töltsd ki a „Payee” (Partner), az „Account” (Számla), az „Amount” (Összeg) és a „Date” (Dátum) mezőt. Jelöld be a „Repeats” (Ismétlődik) jelölőt, és válaszd ki, milyen gyakran jön a tétel. Kattints az „Add” (Hozzáadás) gombra. A közelgő tételeket a számla listájában is látod. Telefonon és a családdal A háztartás minden tagja ugyanazt a költségvetést látja, bármelyik eszközről. A telefonon nyisd meg a budget.tester4.test címet a böngészőben. Írd be a szerver jelszavát, és kattints a „Sign in” (Bejelentkezés) gombra. Válaszd ki a költségvetési fájlt. Amit bárki módosít, az a többi eszközre is átkerül. A böngésző menüjében add hozzá az oldalt a kezdőképernyőhöz, így appként indul. A jelszót jobb felül, a szerver állapotára kattintva, a „Change password” (Jelszó módosítása) ponttal cserélheted le. Gyakori kérdések Hol látom, mire ment el a pénz? A bal oldali sávban a „Reports” (Kimutatások) oldalon. Itt van a „Cash Flow” (Pénzmozgás) és a „Net Worth” (Nettó vagyon) grafikon is. Össze tudom kötni a bankommal? Az Actual néhány külső banki szolgáltatással tud kapcsolódni, ehhez saját fiók kell náluk; a doboz ezt nem állítja be. A legegyszerűbb a netbankból letöltött fájl betöltése. Kaphat mindenki saját belépést? Alapból nem: az egész háztartás ugyanazzal a szerverjelszóval lép be, és ugyanazt a fájlt látja. Külön felhasználókhoz az Actual külső bejelentkező szolgáltatást kér, ezt a doboz nem állítja be. Működik internet nélkül is? Igen. Az Actual a te eszközödön is tárolja az adatokat, és amikor a doboz újra elérhető, szinkronizál. Hogyan mentek ki egy példányt a költségvetésről? A „Settings” (Beállítások) oldalon az „Export data” (Adatok exportálása) gomb egy zip fájlba menti. A doboz saját mentéseit a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-en.txt new file mode 100644 index 00000000..90227ba1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-en.txt @@ -0,0 +1 @@ +ActualBudget — Install — Felhom.eu ← Back ActualBudget — Install Personal finances and budgeting ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) ActualBudget (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-hu.txt new file mode 100644 index 00000000..ab7f78c1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-install-hu.txt @@ -0,0 +1 @@ +ActualBudget — Telepítés — Felhom.eu ← Vissza ActualBudget — Telepítés Személyes pénzügyek és költségvetés kezelése ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) ActualBudget (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-en.txt new file mode 100644 index 00000000..3a232d8b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-en.txt @@ -0,0 +1 @@ +ActualBudget — Settings — Felhom.eu ← Apps ActualBudget A budget planner - keep a simple hold on your money ● Running budget.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address budget.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-hu.txt new file mode 100644 index 00000000..ea5545c5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/page-overview-hu.txt @@ -0,0 +1 @@ +ActualBudget — Felhom.eu ← Alkalmazások ActualBudget Költségvetés tervező - pénzügyeid kézben tartása egyszerűen ● Fut budget.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím budget.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/record.json b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/record.json new file mode 100644 index 00000000..49738da5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/record.json @@ -0,0 +1,120 @@ +{ + "app": "actualbudget", + "sub": "budget", + "fixture": "ActualBudget", + "started": "2026-10-24T13:15:41Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/actualbudget/install", + "hu_len": 883, + "en_len": 789, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/actualbudget/install -> 200 'ActualBudget — Telepítés — Felhom.eu' | shot /root/shots/actualbudget-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/actualbudget/install -> 200 'ActualBudget — Telepítés — Felhom.eu' | shot /root/shots/actualbudget-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 30, + "front_door": true, + "seconds_to_front_door": 30 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fbudget.tester4.test%2F", + "http_port_80": "301 https://budget.tester4.test/", + "guide": { + "path": "/apps/actualbudget/guide", + "hu_len": 3754, + "en_len": 3376, + "english_words_in_hu": [ + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/actualbudget", + "hu_len": 698, + "en_len": 696, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/actualbudget/guide -> 200 'ActualBudget — Felhom.eu' | shot /root/shots/actualbudget-after-guide-phone-hu.png hscroll=False", + "goto https://budget.tester4.test/ -> 200 'Actual' | shot /root/shots/actualbudget-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.238047545s\", \"last_run\": \"2026-10-24T13:16:44.528776202Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"actualbudget\", \"started_at\": \"2026-10-24T13:18:00.042493168Z\", \"last\": {\"op\": \"restore\", \"stack\": \"actualbudget\", \"ok\": true, \"message\": \"A(z) actualbudget: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:18:10.277290808Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "actualbudget": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "actualbudget": 49.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 187 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-front-desktop-hu.png new file mode 100644 index 00000000..53d962de Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-guide-phone-hu.png new file mode 100644 index 00000000..6ef353e8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-desktop-en.png new file mode 100644 index 00000000..33d55c08 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-phone-hu.png new file mode 100644 index 00000000..4cda1f36 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/screens/actualbudget-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/actualbudget/walk.log b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/walk.log new file mode 100644 index 00000000..639c0902 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/actualbudget/walk.log @@ -0,0 +1,14 @@ +13:15:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:16:25Z [1] deployed, controller state=running, pinned={'actualbudget': 'actualbudget/actual-server:26.9.0'} +13:16:25Z gate: budget is gated — passed as the household (cookie set) +13:16:25Z [1] installed: deployed 30 s, front door 30 s +13:16:25Z actualbudget: /account/bootstrap http=200 :: {"status":"ok","data":{"token":""}} +13:16:26Z actualbudget: login with the seeded password http=200 ok=True +13:16:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:17:25Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'actualbudget', 'volumes_removed': ['actualbudget_actualbudget_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'mes +13:17:59Z actualbudget: login with the seeded password http=400 ok=False +13:17:59Z actualbudget: body {"status":"error","reason":"invalid-password"} +13:18:00Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:18:15Z actualbudget: login with the seeded password http=200 ok=True +13:18:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'actualbudget', 'volumes_removed': ['actualbudget_actualbudget_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +13:19:02Z == actualbudget done in 187 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog.console.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog.console.txt new file mode 100644 index 00000000..d206d639 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog.console.txt @@ -0,0 +1,27 @@ +19:57:45Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:00:16Z [1] deployed, controller state=unhealthy, pinned={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} +20:00:16Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +20:00:16Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:21Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:26Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:31Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:36Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:41Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:46Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:51Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:56Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:01Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:06Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:11Z gate: travel is gated — passed as the household (cookie set) +20:01:12Z [1] installed: deployed 151 s, front door 207 s +20:01:20Z adventurelog: createsuperuser :: Superuser created successfully. +20:01:26Z adventurelog: seeded superuser drill58f4c2 +20:01:37Z adventurelog: readback of the seeded account found=True +20:02:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:03:09Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +20:06:26Z adventurelog: readback of the seeded account found=False +20:06:26Z adventurelog: :: 45 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +20:06:26Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:08:27Z adventurelog: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: -packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "adventurelog-pos +20:09:17Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +20:09:26Z == adventurelog done in 701 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/console.txt new file mode 100644 index 00000000..a469a885 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/console.txt @@ -0,0 +1,29 @@ +15:43:58Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:46:44Z [1] deployed, controller state=unhealthy, pinned={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} +15:46:44Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +15:46:44Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:49Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:54Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:59Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:04Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:09Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:14Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:19Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:24Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:29Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:34Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:40Z gate: travel is gated — passed as the household (cookie set) +15:47:40Z [1] installed: deployed 166 s, front door 222 s +15:47:48Z adventurelog: createsuperuser :: Superuser created successfully. +15:47:53Z adventurelog: seeded superuser drilla76bb9 +15:48:05Z adventurelog: readback of the seeded account found=True +15:48:26Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:48:46Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:49:58Z adventurelog: readback of the seeded account found=True +15:50:34Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +15:54:05Z adventurelog: readback of the seeded account found=False +15:54:05Z adventurelog: :: 45 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +15:54:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:55:06Z adventurelog: readback of the seeded account found=True +15:55:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +15:55:56Z == adventurelog done in 718 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-en.txt new file mode 100644 index 00000000..d8900a0f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-en.txt @@ -0,0 +1 @@ +AdventureLog — Guide — Felhom.eu ← Apps AdventureLog Travel journal - keep your trips with a map and photos ● Not healthy Up to date travel.tester4.test Open ↗ What is it for? Keep your trips with pictures and notes See everywhere you have been on a map Plan and organise trips before you go Statistics - the countries and cities you have visited Share your adventures with family and friends First steps Open travel.tester4.test in your browser Create your account Add your first trip Mark the places you have been on the map Plan a trip A collection with dates becomes a full itinerary: places, lodging and transport in one place. In the top bar, open the „Collections” page. Select the plus button in the bottom right corner and choose „Collection”. Fill in „Name”, „Start Date” and „End Date”, then select „Save”. Open the collection, and in the „Add New...” menu add a place, „Lodging”, „Transportation” or a „Checklist”, for example a packing list. In the menu of the collection's card, „Download PDF” gives you a printable itinerary, day by day. Photos and a visit for a place You can add pictures and visits to a place, so it becomes a memory. In the menu of the place's card, choose „Edit Location”. In the „Media” step, select „Upload From Device” and choose the photos. In the „Visits” step, give the dates you were there and add a note. Select „Add Visit”, then „Done”. Countries and regions you visited The world map shows where you have been and how much is still left. In the top bar, open the „World Travel” page. Find the country and select its card. In the list of regions, select the tick („Mark Visited”) everywhere you have been. The country's card shows how many of its regions you have seen. Share a trip with the family You can share a collection with another family member, so you plan it together. In their own account, the family member opens the „Settings” page, turns on „Public Profile” and selects „Update”. In the menu of the collection's card, you choose „Share”. In the „Available Users” list, select „Send Invite” next to the family member. The family member selects „Accept” on the „Invites” tab of the „Collections” page. Frequently asked questions How does a family member get an account? Strangers cannot sign up: the box closed that. On the dashboard, open sign-up for 15 minutes, and your family member signs up with their own address. Can others see my places? No: a new place or collection is private. If you turn on „Public Collection” for a collection, anyone with the link can view it. What is the difference between a planned and a visited place? A place with no visit, or only a future one, is planned. As soon as it has a visit with a past date, it counts as visited. Can I change the language? Yes. AdventureLog follows your browser's language, but you can choose another one under „Language” in the menu of the top bar. Where do the uploaded photos go? Onto the box, into AdventureLog's own storage. You see the box's backups on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-hu.txt new file mode 100644 index 00000000..24dfd561 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +AdventureLog — Felhom.eu ← Alkalmazások AdventureLog Utazási napló - utazások dokumentálása térképpel és fotókkal ● Nem egészséges Naprakész travel.tester4.test Megnyitás ↗ Mire használható? Utazások dokumentálása képekkel és jegyzetekkel Térképes megjelenítés a meglátogatott helyekről Úti tervek készítése és szervezése Statisztikák - meglátogatott országok, városok Kalandok megosztása családdal és barátokkal Első lépések Nyisd meg a travel.tester4.test címet a böngészőben Hozd létre a fiókodat Add hozzá az első utazásodat Jelöld meg a meglátogatott helyeket a térképen Egy utazás megtervezése Egy dátumos gyűjtemény teljes útitervvé válik: helyek, szállás és közlekedés egy helyen. A felső sávban nyisd meg a „Gyűjtemények” oldalt. Kattints a jobb alsó sarokban a plusz gombra, és válaszd a „Gyűjtemény” pontot. Add meg a „Név”, a „Kezdés dátuma” és a „Befejezés dátuma” mezőt, majd kattints a „Mentés” gombra. Nyisd meg a gyűjteményt, és az „Új hozzáadása...” menüben vegyél fel helyet, „Szállás”, „Közlekedés” vagy „Ellenőrzőlista” tételt, például egy csomaglistát. A gyűjtemény kártyájának menüjében a „PDF letöltése” ponttal nyomtatható, napokra bontott útitervet kapsz. Fotók és látogatás egy helyhez Egy helyhez képeket és látogatásokat adhatsz, így lesz belőle emlék. A hely kártyájának menüjében válaszd a „Hely szerkesztése” pontot. A „Média” lépésben kattints a „Feltöltés eszközről” lehetőségre, és válaszd ki a fotókat. A „Látogatások” lépésben add meg, mikor jártál ott, és írj hozzá jegyzetet. Kattints a „Látogatás hozzáadása” gombra, majd a „Kész” gombra. Meglátogatott országok és régiók A világtérképen látod, hol jártál már, és mennyi van még hátra. A felső sávban nyisd meg a „Világutazás” oldalt. Keresd meg az országot, és kattints a kártyájára. A régiók listájában kattints a pipára („Megjelölés látogatottként”) mindenhol, ahol jártál. Az ország kártyája mutatja, hány régióját láttad már. Utazás megosztása a családdal Egy gyűjteményt megoszthatsz a család egy másik tagjával, így közösen tervezhettek. A családtag a saját fiókjában nyissa meg a „Beállítások” oldalt, kapcsolja be a „Nyilvános profil” kapcsolót, és kattintson a „Frissítés” gombra. Te a gyűjtemény kártyájának menüjében válaszd a „Megosztás” pontot. Az „Elérhető felhasználók” listában kattints a családtag mellett a „Meghívás küldése” gombra. A családtag a „Gyűjtemények” oldal „Meghívók” lapján kattint az „Elfogadás” gombra. Gyakori kérdések Hogyan kap fiókot a családtagom? Idegen nem regisztrálhat: a doboz ezt lezárta. A vezérlőpulton nyisd meg a regisztrációt 15 percre, és a családtagod a saját címével regisztrál. Látják mások a helyeimet? Nem: egy új hely vagy gyűjtemény privát. Ha a gyűjteménynél bekapcsolod a „Nyilvános gyűjtemény” kapcsolót, a link birtokában bárki megnézheti. Mi a különbség a tervezett és a látogatott hely között? Ha egy helynek nincs látogatása, vagy csak jövőbeli, akkor tervezett. Amint van múltbeli dátumú látogatása, látogatottnak számít. Át tudom állítani a nyelvet? Igen. Az AdventureLog a böngésződ nyelvét követi, de a felső sáv menüjében a „Nyelv” pontnál másikat is választhatsz. Hová kerülnek a feltöltött fotók? A dobozra, az AdventureLog saját tárhelyére. A doboz mentéseit a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-en.txt new file mode 100644 index 00000000..7c9c288b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-en.txt @@ -0,0 +1 @@ +AdventureLog — Install — Felhom.eu ← Back AdventureLog — Install Travel journal and trip planner ~400M RAM Full description, screenshots Memory 400 MB / 7479 MB (5%) Current usage (0 MB) AdventureLog (+400 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-hu.txt new file mode 100644 index 00000000..4218be5f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-install-hu.txt @@ -0,0 +1 @@ +AdventureLog — Telepítés — Felhom.eu ← Vissza AdventureLog — Telepítés Utazási napló és kalandtervező ~400M RAM Részletes leírás, képernyőképek Memória 400 MB / 7479 MB (5%) Jelenlegi használat (0 MB) AdventureLog (+400 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-en.txt new file mode 100644 index 00000000..84797435 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-en.txt @@ -0,0 +1 @@ +AdventureLog — Settings — Felhom.eu ← Apps AdventureLog Travel journal - keep your trips with a map and photos ● Not healthy Up to date travel.tester4.test Open ↗ Running Not healthy Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address travel.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-hu.txt new file mode 100644 index 00000000..bda63e6e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +AdventureLog — Felhom.eu ← Alkalmazások AdventureLog Utazási napló - utazások dokumentálása térképpel és fotókkal ● Nem egészséges Naprakész travel.tester4.test Megnyitás ↗ Működés Nem egészséges Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím travel.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/record.json new file mode 100644 index 00000000..d00e6a3c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/record.json @@ -0,0 +1,142 @@ +{ + "app": "adventurelog", + "sub": "travel", + "fixture": "Django", + "started": "2026-10-24T15:43:40Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/adventurelog/install", + "hu_len": 981, + "en_len": 883, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/adventurelog/install -> 200 'AdventureLog — Telepítés — Felhom.eu' | shot /root/shots/adventurelog-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/adventurelog/install -> 200 'AdventureLog — Telepítés — Felhom.eu' | shot /root/shots/adventurelog-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 166, + "front_door": true, + "seconds_to_front_door": 222 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Ftravel.tester4.test%2F", + "http_port_80": "301 https://travel.tester4.test/", + "guide": { + "path": "/apps/adventurelog/guide", + "hu_len": 3311, + "en_len": 3063, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/adventurelog", + "hu_len": 890, + "en_len": 856, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/adventurelog/guide -> 200 'AdventureLog — Felhom.eu' | shot /root/shots/adventurelog-after-guide-phone-hu.png hscroll=False", + "goto https://travel.tester4.test/ -> 200 'AdventureLog' | shot /root/shots/adventurelog-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"16.387180024s\", \"last_run\": \"2026-10-24T15:48:42.772937735Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 50, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"adventurelog\", \"started_at\": \"2026-10-24T15:54:05.051163378Z\", \"last\": {\"op\": \"restore\", \"stack\": \"adventurelog\", \"ok\": true, \"message\": \"A(z) adventurelog: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:54:53.060070284Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": true, + "containers": { + "adventurelog": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "adventurelog-frontend": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "adventurelog-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "adventurelog": 363.2, + "adventurelog-postgres": 79.7, + "adventurelog-frontend": 31.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 718 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-front-desktop-hu.png new file mode 100644 index 00000000..c1952a64 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-guide-phone-hu.png new file mode 100644 index 00000000..5044398c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-desktop-en.png new file mode 100644 index 00000000..2a27bb86 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-phone-hu.png new file mode 100644 index 00000000..c07d20eb Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/screens/adventurelog-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/walk.log new file mode 100644 index 00000000..a469a885 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/first-run/walk.log @@ -0,0 +1,29 @@ +15:43:58Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:46:44Z [1] deployed, controller state=unhealthy, pinned={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} +15:46:44Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +15:46:44Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:49Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:54Z gate: travel not routed right now (404) — not cached, asked again next call +15:46:59Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:04Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:09Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:14Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:19Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:24Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:29Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:34Z gate: travel not routed right now (404) — not cached, asked again next call +15:47:40Z gate: travel is gated — passed as the household (cookie set) +15:47:40Z [1] installed: deployed 166 s, front door 222 s +15:47:48Z adventurelog: createsuperuser :: Superuser created successfully. +15:47:53Z adventurelog: seeded superuser drilla76bb9 +15:48:05Z adventurelog: readback of the seeded account found=True +15:48:26Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:48:46Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:49:58Z adventurelog: readback of the seeded account found=True +15:50:34Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +15:54:05Z adventurelog: readback of the seeded account found=False +15:54:05Z adventurelog: :: 45 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +15:54:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:55:06Z adventurelog: readback of the seeded account found=True +15:55:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +15:55:56Z == adventurelog done in 718 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-en.txt new file mode 100644 index 00000000..d8900a0f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-en.txt @@ -0,0 +1 @@ +AdventureLog — Guide — Felhom.eu ← Apps AdventureLog Travel journal - keep your trips with a map and photos ● Not healthy Up to date travel.tester4.test Open ↗ What is it for? Keep your trips with pictures and notes See everywhere you have been on a map Plan and organise trips before you go Statistics - the countries and cities you have visited Share your adventures with family and friends First steps Open travel.tester4.test in your browser Create your account Add your first trip Mark the places you have been on the map Plan a trip A collection with dates becomes a full itinerary: places, lodging and transport in one place. In the top bar, open the „Collections” page. Select the plus button in the bottom right corner and choose „Collection”. Fill in „Name”, „Start Date” and „End Date”, then select „Save”. Open the collection, and in the „Add New...” menu add a place, „Lodging”, „Transportation” or a „Checklist”, for example a packing list. In the menu of the collection's card, „Download PDF” gives you a printable itinerary, day by day. Photos and a visit for a place You can add pictures and visits to a place, so it becomes a memory. In the menu of the place's card, choose „Edit Location”. In the „Media” step, select „Upload From Device” and choose the photos. In the „Visits” step, give the dates you were there and add a note. Select „Add Visit”, then „Done”. Countries and regions you visited The world map shows where you have been and how much is still left. In the top bar, open the „World Travel” page. Find the country and select its card. In the list of regions, select the tick („Mark Visited”) everywhere you have been. The country's card shows how many of its regions you have seen. Share a trip with the family You can share a collection with another family member, so you plan it together. In their own account, the family member opens the „Settings” page, turns on „Public Profile” and selects „Update”. In the menu of the collection's card, you choose „Share”. In the „Available Users” list, select „Send Invite” next to the family member. The family member selects „Accept” on the „Invites” tab of the „Collections” page. Frequently asked questions How does a family member get an account? Strangers cannot sign up: the box closed that. On the dashboard, open sign-up for 15 minutes, and your family member signs up with their own address. Can others see my places? No: a new place or collection is private. If you turn on „Public Collection” for a collection, anyone with the link can view it. What is the difference between a planned and a visited place? A place with no visit, or only a future one, is planned. As soon as it has a visit with a past date, it counts as visited. Can I change the language? Yes. AdventureLog follows your browser's language, but you can choose another one under „Language” in the menu of the top bar. Where do the uploaded photos go? Onto the box, into AdventureLog's own storage. You see the box's backups on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-hu.txt new file mode 100644 index 00000000..24dfd561 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-guide-hu.txt @@ -0,0 +1 @@ +AdventureLog — Felhom.eu ← Alkalmazások AdventureLog Utazási napló - utazások dokumentálása térképpel és fotókkal ● Nem egészséges Naprakész travel.tester4.test Megnyitás ↗ Mire használható? Utazások dokumentálása képekkel és jegyzetekkel Térképes megjelenítés a meglátogatott helyekről Úti tervek készítése és szervezése Statisztikák - meglátogatott országok, városok Kalandok megosztása családdal és barátokkal Első lépések Nyisd meg a travel.tester4.test címet a böngészőben Hozd létre a fiókodat Add hozzá az első utazásodat Jelöld meg a meglátogatott helyeket a térképen Egy utazás megtervezése Egy dátumos gyűjtemény teljes útitervvé válik: helyek, szállás és közlekedés egy helyen. A felső sávban nyisd meg a „Gyűjtemények” oldalt. Kattints a jobb alsó sarokban a plusz gombra, és válaszd a „Gyűjtemény” pontot. Add meg a „Név”, a „Kezdés dátuma” és a „Befejezés dátuma” mezőt, majd kattints a „Mentés” gombra. Nyisd meg a gyűjteményt, és az „Új hozzáadása...” menüben vegyél fel helyet, „Szállás”, „Közlekedés” vagy „Ellenőrzőlista” tételt, például egy csomaglistát. A gyűjtemény kártyájának menüjében a „PDF letöltése” ponttal nyomtatható, napokra bontott útitervet kapsz. Fotók és látogatás egy helyhez Egy helyhez képeket és látogatásokat adhatsz, így lesz belőle emlék. A hely kártyájának menüjében válaszd a „Hely szerkesztése” pontot. A „Média” lépésben kattints a „Feltöltés eszközről” lehetőségre, és válaszd ki a fotókat. A „Látogatások” lépésben add meg, mikor jártál ott, és írj hozzá jegyzetet. Kattints a „Látogatás hozzáadása” gombra, majd a „Kész” gombra. Meglátogatott országok és régiók A világtérképen látod, hol jártál már, és mennyi van még hátra. A felső sávban nyisd meg a „Világutazás” oldalt. Keresd meg az országot, és kattints a kártyájára. A régiók listájában kattints a pipára („Megjelölés látogatottként”) mindenhol, ahol jártál. Az ország kártyája mutatja, hány régióját láttad már. Utazás megosztása a családdal Egy gyűjteményt megoszthatsz a család egy másik tagjával, így közösen tervezhettek. A családtag a saját fiókjában nyissa meg a „Beállítások” oldalt, kapcsolja be a „Nyilvános profil” kapcsolót, és kattintson a „Frissítés” gombra. Te a gyűjtemény kártyájának menüjében válaszd a „Megosztás” pontot. Az „Elérhető felhasználók” listában kattints a családtag mellett a „Meghívás küldése” gombra. A családtag a „Gyűjtemények” oldal „Meghívók” lapján kattint az „Elfogadás” gombra. Gyakori kérdések Hogyan kap fiókot a családtagom? Idegen nem regisztrálhat: a doboz ezt lezárta. A vezérlőpulton nyisd meg a regisztrációt 15 percre, és a családtagod a saját címével regisztrál. Látják mások a helyeimet? Nem: egy új hely vagy gyűjtemény privát. Ha a gyűjteménynél bekapcsolod a „Nyilvános gyűjtemény” kapcsolót, a link birtokában bárki megnézheti. Mi a különbség a tervezett és a látogatott hely között? Ha egy helynek nincs látogatása, vagy csak jövőbeli, akkor tervezett. Amint van múltbeli dátumú látogatása, látogatottnak számít. Át tudom állítani a nyelvet? Igen. Az AdventureLog a böngésződ nyelvét követi, de a felső sáv menüjében a „Nyelv” pontnál másikat is választhatsz. Hová kerülnek a feltöltött fotók? A dobozra, az AdventureLog saját tárhelyére. A doboz mentéseit a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-en.txt new file mode 100644 index 00000000..7c9c288b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-en.txt @@ -0,0 +1 @@ +AdventureLog — Install — Felhom.eu ← Back AdventureLog — Install Travel journal and trip planner ~400M RAM Full description, screenshots Memory 400 MB / 7479 MB (5%) Current usage (0 MB) AdventureLog (+400 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-hu.txt new file mode 100644 index 00000000..4218be5f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-install-hu.txt @@ -0,0 +1 @@ +AdventureLog — Telepítés — Felhom.eu ← Vissza AdventureLog — Telepítés Utazási napló és kalandtervező ~400M RAM Részletes leírás, képernyőképek Memória 400 MB / 7479 MB (5%) Jelenlegi használat (0 MB) AdventureLog (+400 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-en.txt new file mode 100644 index 00000000..84797435 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-en.txt @@ -0,0 +1 @@ +AdventureLog — Settings — Felhom.eu ← Apps AdventureLog Travel journal - keep your trips with a map and photos ● Not healthy Up to date travel.tester4.test Open ↗ Running Not healthy Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address travel.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-hu.txt new file mode 100644 index 00000000..bda63e6e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/page-overview-hu.txt @@ -0,0 +1 @@ +AdventureLog — Felhom.eu ← Alkalmazások AdventureLog Utazási napló - utazások dokumentálása térképpel és fotókkal ● Nem egészséges Naprakész travel.tester4.test Megnyitás ↗ Működés Nem egészséges Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím travel.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/record.json b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/record.json new file mode 100644 index 00000000..592dd039 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/record.json @@ -0,0 +1,151 @@ +{ + "app": "adventurelog", + "sub": "travel", + "fixture": "Django", + "started": "2026-10-24T19:57:24Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/adventurelog/install", + "hu_len": 981, + "en_len": 883, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/adventurelog/install -> 200 'AdventureLog — Telepítés — Felhom.eu' | shot /root/shots/adventurelog-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/adventurelog/install -> 200 'AdventureLog — Telepítés — Felhom.eu' | shot /root/shots/adventurelog-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 151, + "front_door": true, + "seconds_to_front_door": 207 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Ftravel.tester4.test%2F", + "http_port_80": "301 https://travel.tester4.test/", + "guide": { + "path": "/apps/adventurelog/guide", + "hu_len": 3311, + "en_len": 3063, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/adventurelog", + "hu_len": 890, + "en_len": 856, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/adventurelog/guide -> 200 'AdventureLog — Felhom.eu' | shot /root/shots/adventurelog-after-guide-phone-hu.png hscroll=False", + "goto https://travel.tester4.test/ -> 200 'AdventureLog' | shot /root/shots/adventurelog-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 25, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"22.519790369s\", \"last_run\": \"2026-10-24T20:02:24.429640761Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 116, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"adventurelog\", \"started_at\": \"2026-10-24T20:06:26.242433708Z\", \"last\": {\"op\": \"restore\", \"stack\": \"adventurelog\", \"ok\": true, \"message\": \"A(z) adventurelog: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:08:19.382610963Z\"}, \"last_recent\": true}", + "state": "starting" + }, + "seed_read_after_unit_restore": false, + "containers": { + "adventurelog": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "unhealthy" + }, + "adventurelog-frontend": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "unhealthy" + }, + "adventurelog-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 90, + "sample": [ + "adventurelog-postgres: 2026-10-24 22:06:56.567 CEST [66] FATAL: password authentication failed for user \"adventurelog\"", + "adventurelog-postgres: 2026-10-24 22:06:57.655 CEST [67] FATAL: password authentication failed for user \"adventurelog\"", + "adventurelog-postgres: 2026-10-24 22:06:58.737 CEST [68] FATAL: password authentication failed for user \"adventurelog\"", + "adventurelog-postgres: 2026-10-24 22:06:59.813 CEST [69] FATAL: password authentication failed for user \"adventurelog\"" + ] + }, + "mem_peak_mib": { + "adventurelog": 246.1, + "adventurelog-postgres": 79.8, + "adventurelog-frontend": 32.9 + }, + "mem_anon_peak_mib": { + "adventurelog-postgres": 60.1, + "adventurelog-frontend": 32.4, + "adventurelog": 288.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 701 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-front-desktop-hu.png new file mode 100644 index 00000000..9b68c985 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-guide-phone-hu.png new file mode 100644 index 00000000..5044398c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-desktop-en.png new file mode 100644 index 00000000..2a27bb86 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-phone-hu.png new file mode 100644 index 00000000..c07d20eb Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/screens/adventurelog-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/adventurelog/walk.log b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/walk.log new file mode 100644 index 00000000..d206d639 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/adventurelog/walk.log @@ -0,0 +1,27 @@ +19:57:45Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:00:16Z [1] deployed, controller state=unhealthy, pinned={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.13.0', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} +20:00:16Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +20:00:16Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:21Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:26Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:31Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:36Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:41Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:46Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:51Z gate: travel not routed right now (404) — not cached, asked again next call +20:00:56Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:01Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:06Z gate: travel not routed right now (404) — not cached, asked again next call +20:01:11Z gate: travel is gated — passed as the household (cookie set) +20:01:12Z [1] installed: deployed 151 s, front door 207 s +20:01:20Z adventurelog: createsuperuser :: Superuser created successfully. +20:01:26Z adventurelog: seeded superuser drill58f4c2 +20:01:37Z adventurelog: readback of the seeded account found=True +20:02:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:03:09Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +20:06:26Z adventurelog: readback of the seeded account found=False +20:06:26Z adventurelog: :: 45 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +20:06:26Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:08:27Z adventurelog: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: -packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "adventurelog-pos +20:09:17Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'adventurelog', 'volumes_removed': ['adventurelog_adventurelog_media', 'adventurelog_adventurelog_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +20:09:26Z == adventurelog done in 701 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf.console.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf.console.txt new file mode 100644 index 00000000..fb34dff0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf.console.txt @@ -0,0 +1,15 @@ +14:11:15Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:11:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:11:55Z [1] deployed, controller state=running, pinned={'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'} +14:11:55Z gate: audiobooks is gated — passed as the household (cookie set) +14:11:55Z [1] installed: deployed 40 s, front door 41 s +14:11:56Z audiobookshelf: /init http=200 +14:11:56Z audiobookshelf: login as the seeded root http=200 ok=True +14:12:15Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:12:58Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'audiobookshelf', 'volumes_removed': ['audiobookshelf_audiobookshelf_config', 'audiobookshelf_audiobookshelf_metadata'], 'hdd_paths_removed': [], 'hdd_paths_preserved' +14:13:06Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:13:32Z audiobookshelf: login as the seeded root http=401 ok=False +14:13:32Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:13:47Z audiobookshelf: login as the seeded root http=200 ok=True +14:14:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'audiobookshelf', 'volumes_removed': ['audiobookshelf_audiobookshelf_config', 'audiobookshelf_audiobookshelf_metadata'], 'hdd_paths_removed': [], 'hdd_paths_preserved' +14:14:35Z == audiobookshelf done in 200 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-en.txt new file mode 100644 index 00000000..e1e11faa --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-en.txt @@ -0,0 +1 @@ +Audiobookshelf — Guide — Felhom.eu ← Apps Audiobookshelf An audiobook and podcast library, player and sync ● Running audiobooks.tester4.test Open ↗ What is it for? Sort and play your audiobooks and podcasts Details arrive on their own - covers, descriptions, chapters Carry on where you stopped (it syncs between devices) Subscribe to a podcast and let it download itself Apps of its own for phones (Android, iOS) First steps Open audiobooks.tester4.test in your browser Create the admin account the first time you open it Add your libraries (/audiobooks and/or /podcasts) Wait for the first scan to finish Install the Audiobookshelf app on your phone Before you start An external hard drive is needed to keep the audiobooks on Audiobooks sorted into folders (Author/Book/, for example) Upload an audiobook You can upload books from the browser too, without touching the drive. In the top bar, select the „Upload” icon. In „Library” and „Folder”, choose where the book goes. Select „Choose a folder” and choose the book's folder. Keep one book in one folder. Check the title and the author, then select „Upload”. Add a family member Everyone listens with their own account, so everyone keeps their own place. In the top bar, select the gear („Settings”). In the menu on the left, open the „Users” page and select „Add User”. Fill in „Username” and „Password”. Leave „Account Type” on „User”. Select „Submit”, and give the family member the name and the password. Subscribe to a podcast The podcast library downloads new episodes by itself. Open the podcast library, and in the bar on the left select „Add”. Type the name of the podcast and select „Submit”. Choose the podcast from the results. Turn on „Auto Download Episodes” and select „Submit”. Fix a wrong cover or title If the details of a book are wrong, Audiobookshelf finds the right ones. Open the book and select the pencil icon („Edit”). Choose the „Match” tab and select „Search”. Choose the right result, tick what it takes over, and select „Submit”. Frequently asked questions Where do I carry on where I stopped? On the „Home” page, in the „Continue Listening” row. Your place stays in sync between the browser and the phone app. How do I connect the phone app? Open the Audiobookshelf app, give audiobooks.tester4.test as the server address, then your own username and password. Can I make it stop before I fall asleep? Yes: in the player bar, select the alarm clock icon („Sleep timer”) and set when it stops. Can I switch it to Hungarian? Yes. On your own account page, choose Hungarian in the „Language” field. This guide shows the English labels. Where do the books go? Into the media/audiobooks folder of your drive, and the podcasts into media/podcasts. You see the box's backups on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-hu.txt new file mode 100644 index 00000000..8f164705 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-guide-hu.txt @@ -0,0 +1 @@ +Audiobookshelf — Felhom.eu ← Alkalmazások Audiobookshelf Hangoskönyv és podcast kezelő, lejátszó és szinkronizáló ● Fut audiobooks.tester4.test Megnyitás ↗ Mire használható? Hangoskönyvek és podcastok rendszerezése és lejátszása Automatikus metaadat letöltés - borítók, leírások, fejezetek Folytatás ott, ahol abbahagytad (szinkron eszközök között) Podcast feliratkozás és automatikus letöltés Dedikált mobil alkalmazások (Android, iOS) Első lépések Nyisd meg az audiobooks.tester4.test címet a böngészőben Hozd létre az admin fiókot az első megnyitáskor Add hozzá a könyvtárakat (/audiobooks és/vagy /podcasts) Várd meg az automatikus szkennelést Telepítsd az Audiobookshelf alkalmazást a telefonodra Előfeltételek Külső HDD szükséges a hangoskönyvek tárolásához Hangoskönyvek mappákba rendezve (pl. Szerző/Könyv/) Hangoskönyv feltöltése A könyveket a böngészőből is feltöltheted, nem kell a meghajtóhoz nyúlnod. A felső sávban kattints az „Upload” (Feltöltés) ikonra. Válaszd ki a „Library” (Könyvtár) és a „Folder” (Mappa) mezőben, hová kerüljön a könyv. Kattints a „Choose a folder” (Mappa kiválasztása) gombra, és válaszd ki a könyv mappáját. Egy könyv egy mappa legyen. Nézd át a címet és a szerzőt, majd kattints az „Upload” (Feltöltés) gombra. Családtag hozzáadása Mindenki a saját fiókjával hallgat, így mindenkinek megvan, hol tart. A felső sávban kattints a fogaskerékre („Settings”, Beállítások). A bal oldali menüben nyisd meg a „Users” (Felhasználók) oldalt, és kattints az „Add User” (Felhasználó hozzáadása) gombra. Add meg a „Username” (Felhasználónév) és a „Password” (Jelszó) mezőt. Az „Account Type” (Fióktípus) maradjon „User” (Felhasználó). Kattints a „Submit” (Küldés) gombra, és add át a családtagnak a nevet és a jelszót. Feliratkozás egy podcastra A podcast könyvtár magától letölti az új epizódokat. Nyisd meg a podcast könyvtárat, és a bal oldali sávban kattints az „Add” (Hozzáadás) pontra. Írd be a podcast nevét, és kattints a „Submit” (Küldés) gombra. Válaszd ki a podcastot a találatok közül. Kapcsold be az „Auto Download Episodes” (Epizódok automatikus letöltése) kapcsolót, és kattints a „Submit” gombra. Rossz borító vagy cím javítása Ha egy könyv adatai hibásak, az Audiobookshelf megkeresi a helyeseket. Nyisd meg a könyvet, és kattints a ceruza ikonra („Edit”, Szerkesztés). Válaszd a „Match” (Egyeztetés) lapot, és kattints a „Search” (Keresés) gombra. Válaszd ki a helyes találatot, jelöld be, mit vegyen át, és kattints a „Submit” gombra. Gyakori kérdések Hol folytatom, ahol abbahagytam? A „Home” (Kezdőlap) oldalon a „Continue Listening” (Hallgatás folytatása) sorban. A helyed a böngésző és a telefonos app között is szinkronban marad. Hogyan kötöm be a telefonos appot? Nyisd meg az Audiobookshelf appot, szerver címnek add meg az audiobooks.tester4.test címet, majd a saját felhasználóneved és jelszavad. Be tudom állítani, hogy elalvás előtt leálljon? Igen: a lejátszó sávjában az ébresztőóra ikonra („Sleep timer”, Alvásidőzítő) kattintva megadhatod, mikor álljon le. Átállíthatom magyarra? Igen. A saját fiókod oldalán a „Language” (Nyelv) mezőben válaszd a „Magyar” nyelvet. Ez az útmutató az angol feliratokat mutatja. Hová kerülnek a könyvek? A meghajtód media/audiobooks, a podcastok a media/podcasts mappájába. A doboz mentéseit a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-en.txt new file mode 100644 index 00000000..640b8cfb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-en.txt @@ -0,0 +1 @@ +Audiobookshelf — Install — Felhom.eu ← Back Audiobookshelf — Install An audiobook and podcast server ~100M RAM Needs a hard drive Full description, screenshots Memory 100 MB / 7479 MB (1%) Current usage (0 MB) Audiobookshelf (+100 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Audiobook library path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-hu.txt new file mode 100644 index 00000000..6d1292e3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-install-hu.txt @@ -0,0 +1 @@ +Audiobookshelf — Telepítés — Felhom.eu ← Vissza Audiobookshelf — Telepítés Hangoskönyv és podcast kezelő szerver ~100M RAM HDD szükséges Részletes leírás, képernyőképek Memória 100 MB / 7479 MB (1%) Jelenlegi használat (0 MB) Audiobookshelf (+100 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Hangoskönyv tár útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-en.txt new file mode 100644 index 00000000..e210a655 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-en.txt @@ -0,0 +1 @@ +Audiobookshelf — Settings — Felhom.eu ← Apps Audiobookshelf An audiobook and podcast library, player and sync ● Running audiobooks.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address audiobooks.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-hu.txt new file mode 100644 index 00000000..edf2903a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/page-overview-hu.txt @@ -0,0 +1 @@ +Audiobookshelf — Felhom.eu ← Alkalmazások Audiobookshelf Hangoskönyv és podcast kezelő, lejátszó és szinkronizáló ● Fut audiobooks.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím audiobooks.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/record.json b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/record.json new file mode 100644 index 00000000..f6e56bd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/record.json @@ -0,0 +1,127 @@ +{ + "app": "audiobookshelf", + "sub": "audiobooks", + "fixture": "AudiobookShelf", + "started": "2026-10-24T14:10:58Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/audiobookshelf/install", + "hu_len": 1224, + "en_len": 1103, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/audiobookshelf/install -> 200 'Audiobookshelf — Telepítés — Felhom.eu' | shot /root/shots/audiobookshelf-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/audiobookshelf/install -> 200 'Audiobookshelf — Telepítés — Felhom.eu' | shot /root/shots/audiobookshelf-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 40, + "front_door": true, + "seconds_to_front_door": 41 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Faudiobooks.tester4.test%2F", + "http_port_80": "301 https://audiobooks.tester4.test/", + "guide": { + "path": "/apps/audiobookshelf/guide", + "hu_len": 3374, + "en_len": 2838, + "english_words_in_hu": [ + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/audiobookshelf", + "hu_len": 737, + "en_len": 736, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/audiobookshelf/guide -> 200 'Audiobookshelf — Felhom.eu' | shot /root/shots/audiobookshelf-after-guide-phone-hu.png hscroll=False", + "goto https://audiobooks.tester4.test/audiobookshelf/login -> 200 'Audiobookshelf' | shot /root/shots/audiobookshelf-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.603446251s\", \"last_run\": \"2026-10-24T14:12:17.476051071Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"audiobookshelf\", \"started_at\": \"2026-10-24T14:13:32.125097264Z\", \"last\": {\"op\": \"restore\", \"stack\": \"audiobookshelf\", \"ok\": true, \"message\": \"A(z) audiobookshelf: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:13:43.759690142Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "audiobookshelf": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "audiobookshelf: [2026-10-24 16:13:47.334] ERROR: [LocalAuth] Failed login attempt for username \"drill6f2a7b\" from ip 192.168.0.180 (Invalid password)" + ] + }, + "mem_peak_mib": { + "audiobookshelf": 56.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 200 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-front-desktop-hu.png new file mode 100644 index 00000000..7e61e199 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-guide-phone-hu.png new file mode 100644 index 00000000..6da5fa22 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-desktop-en.png new file mode 100644 index 00000000..30c0a42c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-phone-hu.png new file mode 100644 index 00000000..d8ede438 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/screens/audiobookshelf-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/walk.log b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/walk.log new file mode 100644 index 00000000..fb34dff0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/audiobookshelf/walk.log @@ -0,0 +1,15 @@ +14:11:15Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:11:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:11:55Z [1] deployed, controller state=running, pinned={'audiobookshelf': 'ghcr.io/advplyr/audiobookshelf:2.37.1'} +14:11:55Z gate: audiobooks is gated — passed as the household (cookie set) +14:11:55Z [1] installed: deployed 40 s, front door 41 s +14:11:56Z audiobookshelf: /init http=200 +14:11:56Z audiobookshelf: login as the seeded root http=200 ok=True +14:12:15Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:12:58Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'audiobookshelf', 'volumes_removed': ['audiobookshelf_audiobookshelf_config', 'audiobookshelf_audiobookshelf_metadata'], 'hdd_paths_removed': [], 'hdd_paths_preserved' +14:13:06Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:13:32Z audiobookshelf: login as the seeded root http=401 ok=False +14:13:32Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:13:47Z audiobookshelf: login as the seeded root http=200 ok=True +14:14:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'audiobookshelf', 'volumes_removed': ['audiobookshelf_audiobookshelf_config', 'audiobookshelf_audiobookshelf_metadata'], 'hdd_paths_removed': [], 'hdd_paths_preserved' +14:14:35Z == audiobookshelf done in 200 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf.console.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf.console.txt new file mode 100644 index 00000000..b2304767 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf.console.txt @@ -0,0 +1,8 @@ +13:38:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:38:34Z [1] deployed, controller state=running, pinned={'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.6'} +13:38:34Z [1] installed: deployed 30 s, front door 30 s +13:38:34Z [3] no fixture for this app — the front door answering is the smallest honest check +13:38:54Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:39:36Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'bentopdf', 'volumes_removed': [], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack bentopdf removed'} +13:40:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'bentopdf', 'volumes_removed': [], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem +13:40:57Z == bentopdf done in 173 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-en.txt new file mode 100644 index 00000000..32545277 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-en.txt @@ -0,0 +1 @@ +BentoPDF — Guide — Felhom.eu ← Apps BentoPDF A privacy-first PDF toolbox - your files stay on your own device ● Running bentopdf.tester4.test Open ↗ What is it for? Merge, split and rotate PDFs Convert PDFs to images and images to PDFs Password protection and encryption Add a watermark to a document Everything happens in your browser - the file goes neither to the box nor to an outside service First steps Open bentopdf.tester4.test in your browser Choose what you want to do Upload the PDF and start it Merge several PDFs into one Several documents become a single PDF, in the order you choose. In the search box of the home page, type merge and open the „Merge PDF” tool. Select the upload area and choose the files. Add more with the „Add More Files” button. In the „File Mode” list, drag the files into the order you want. Select „Merge PDFs”. The finished file downloads by itself. One PDF from photos You can make a single PDF from receipts or papers you took photos of with your phone. Open the „Images to PDF” tool. Choose the photos in the order you want the pages in. In „PDF Quality”, choose the smaller file for e-mail. Select „Convert to PDF”. Make a PDF smaller for e-mail If a PDF is too big for a mail, you can compress it. Open the „Compress PDF” tool and choose the file. In „Compression Level”, choose „Aggressive (Smaller Files)”. Select „Compress PDF” and download the smaller file. Put a password on a PDF You can send a private paper protected with a password. Open the „Encrypt PDF” tool and choose the file. Type the password into the „User Password (Required)” field. Select „Encrypt PDF” and download the protected file. Do not send the password together with the file; tell it by phone, for example. Frequently asked questions Do my files go onto the box? No. BentoPDF works on the file in your browser, and the file never leaves your device. The box only serves the page. Where do I find the finished file? In your browser's downloads folder. BentoPDF keeps nothing, so there is no copy of it on the box either. Do I need an account? No, BentoPDF has no accounts. Anyone who knows the address can use it, but the files always stay with them. Does it work on a phone? Yes, open bentopdf.tester4.test in the phone's browser. With big files a computer is faster, because the work runs on your device. Why is a tool slow the first time? Some tools download a processing part from the internet the first time you use them. After that they start faster. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-hu.txt new file mode 100644 index 00000000..63252f0e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-guide-hu.txt @@ -0,0 +1 @@ +BentoPDF — Felhom.eu ← Alkalmazások BentoPDF Adatvédelmi fókuszú PDF eszköztár - a fájljaid a saját eszközödön maradnak ● Fut bentopdf.tester4.test Megnyitás ↗ Mire használható? PDF összefűzés, szétválasztás és forgatás PDF konvertálás képekké és képekből Jelszóvédelem és titkosítás Vízjel hozzáadása dokumentumokhoz Minden feldolgozás a böngésződben történik - a fájl nem kerül sem a dobozra, sem külső szolgáltatóhoz Első lépések Nyisd meg a bentopdf.tester4.test címet a böngészőben Válaszd ki a kívánt műveletet Töltsd fel a PDF fájlt és kattints a feldolgozásra Több PDF összefűzése egybe Több dokumentumból egyetlen PDF lesz, a sorrendet te adod meg. A kezdőoldal keresőjébe írd be: merge, és nyisd meg a „Merge PDF” (PDF összefűzése) eszközt. Kattints a feltöltő mezőre, és válaszd ki a fájlokat. Továbbiakat az „Add More Files” (további fájlok) gombbal adhatsz hozzá. A „File Mode” (fájl mód) listájában húzd a fájlokat a kívánt sorrendbe. Kattints a „Merge PDFs” (PDF-ek összefűzése) gombra. A kész fájl magától letöltődik. Fotókból egy PDF A telefonnal lefotózott számlákból vagy papírokból egyetlen PDF-et készíthetsz. Nyisd meg az „Images to PDF” (képekből PDF) eszközt. Válaszd ki a fotókat abban a sorrendben, ahogy az oldalakon szeretnéd. A „PDF Quality” (PDF minőség) mezőben e-mailhez a kisebb fájlt válaszd. Kattints a „Convert to PDF” (átalakítás PDF-be) gombra. PDF kisebbre e-mailhez Ha egy PDF túl nagy a levélhez, összenyomhatod. Nyisd meg a „Compress PDF” (PDF tömörítése) eszközt, és válaszd ki a fájlt. A „Compression Level” (tömörítés mértéke) mezőben válaszd az „Aggressive (Smaller Files)” (erős, kisebb fájl) értéket. Kattints a „Compress PDF” gombra, és töltsd le a kisebb fájlt. Jelszó egy PDF-re Bizalmas papírt jelszóval védve küldhetsz el. Nyisd meg az „Encrypt PDF” (PDF titkosítása) eszközt, és válaszd ki a fájlt. Írd be a jelszót a „User Password (Required)” (megnyitási jelszó, kötelező) mezőbe. Kattints az „Encrypt PDF” gombra, és töltsd le a védett fájlt. A jelszót ne a fájllal együtt küldd el, hanem például telefonon mondd meg. Gyakori kérdések Felkerülnek a fájljaim a dobozra? Nem. A BentoPDF a böngésződben dolgozza fel a fájlt, az el sem hagyja az eszközödet. A doboz csak az oldalt adja. Hol találom a kész fájlt? A böngésződ letöltések mappájában. A BentoPDF semmit nem tárol, ezért a dobozon sincs róla másolat. Kell hozzá fiók? Nem, a BentoPDF-ben nincs fiók. Aki ismeri a címet, használhatja, de a fájlok mindig nála maradnak. Működik telefonon is? Igen, nyisd meg a bentopdf.tester4.test címet a telefon böngészőjében. Nagy fájloknál a számítógép gyorsabb, mert a munka az eszközödön fut. Miért lassú egy eszköz az első alkalommal? Néhány eszköz az első használatkor letölt egy feldolgozó részt az internetről. Utána gyorsabban indul. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-en.txt new file mode 100644 index 00000000..fa9f8ccc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-en.txt @@ -0,0 +1 @@ +BentoPDF — Install — Felhom.eu ← Back BentoPDF — Install A privacy-first PDF toolbox ~100M RAM Full description, screenshots Memory 100 MB / 7479 MB (1%) Current usage (0 MB) BentoPDF (+100 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-hu.txt new file mode 100644 index 00000000..263303cf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-install-hu.txt @@ -0,0 +1 @@ +BentoPDF — Telepítés — Felhom.eu ← Vissza BentoPDF — Telepítés Adatvédelmi fókuszú PDF eszköztár ~100M RAM Részletes leírás, képernyőképek Memória 100 MB / 7479 MB (1%) Jelenlegi használat (0 MB) BentoPDF (+100 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-en.txt new file mode 100644 index 00000000..8d57a707 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-en.txt @@ -0,0 +1 @@ +BentoPDF — Settings — Felhom.eu ← Apps BentoPDF A privacy-first PDF toolbox - your files stay on your own device ● Running bentopdf.tester4.test Open ↗ Running Running Restart Stop Signing in to the app This app needs no sign-in. Address and keys These were created at install time and cannot be changed. Address bentopdf.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-hu.txt new file mode 100644 index 00000000..5b334cf5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/page-overview-hu.txt @@ -0,0 +1 @@ +BentoPDF — Felhom.eu ← Alkalmazások BentoPDF Adatvédelmi fókuszú PDF eszköztár - a fájljaid a saját eszközödön maradnak ● Fut bentopdf.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz nem kell belépés. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím bentopdf.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/record.json b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/record.json new file mode 100644 index 00000000..09356369 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/record.json @@ -0,0 +1,107 @@ +{ + "app": "bentopdf", + "sub": "bentopdf", + "fixture": null, + "started": "2026-10-24T13:37:48Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/bentopdf/install", + "hu_len": 863, + "en_len": 776, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/bentopdf/install -> 200 'BentoPDF — Telepítés — Felhom.eu' | shot /root/shots/bentopdf-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/bentopdf/install -> 200 'BentoPDF — Telepítés — Felhom.eu' | shot /root/shots/bentopdf-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 30, + "front_door": true, + "seconds_to_front_door": 30 + }, + "stranger": "200", + "http_port_80": "301 https://bentopdf.tester4.test/", + "guide": { + "path": "/apps/bentopdf/guide", + "hu_len": 2829, + "en_len": 2518, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/bentopdf", + "hu_len": 352, + "en_len": 334, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/bentopdf/guide -> 200 'BentoPDF — Felhom.eu' | shot /root/shots/bentopdf-after-guide-phone-hu.png hscroll=False", + "goto https://bentopdf.tester4.test/ -> 200 'BentoPDF - Free Online PDF Tools | Privacy-First PDF Toolkit' | shot /root/shots/bentopdf-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"35.224386ms\", \"last_run\": \"2026-10-24T13:38:54.176875664Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "bentopdf": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "bentopdf": 3.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 173 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-front-desktop-hu.png new file mode 100644 index 00000000..e98200b5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-guide-phone-hu.png new file mode 100644 index 00000000..99e33b87 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-desktop-en.png new file mode 100644 index 00000000..cd415b34 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-phone-hu.png new file mode 100644 index 00000000..a9c32852 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/screens/bentopdf-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bentopdf/walk.log b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/walk.log new file mode 100644 index 00000000..b2304767 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bentopdf/walk.log @@ -0,0 +1,8 @@ +13:38:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:38:34Z [1] deployed, controller state=running, pinned={'bentopdf': 'ghcr.io/alam00000/bentopdf:v2.8.6'} +13:38:34Z [1] installed: deployed 30 s, front door 30 s +13:38:34Z [3] no fixture for this app — the front door answering is the smallest honest check +13:38:54Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:39:36Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'bentopdf', 'volumes_removed': [], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack bentopdf removed'} +13:40:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'bentopdf', 'volumes_removed': [], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem +13:40:57Z == bentopdf done in 173 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack.console.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack.console.txt new file mode 100644 index 00000000..ca36a630 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack.console.txt @@ -0,0 +1,14 @@ +15:07:26Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:07:26Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:08:36Z [1] deployed, controller state=running, pinned={'bookstack': 'lscr.io/linuxserver/bookstack:26.09.1', 'bookstack-db': 'mariadb:12.3'} +15:08:36Z [1] installed: deployed 71 s, front door 71 s +15:08:41Z bookstack: artisan create-admin :: Admin account with email "drill-60130ee1@gate.invalid" successfully created! +15:08:48Z bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-338fd6 - Email: drill-60130ee1@gate.inval +15:09:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:10:03Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'bookstack', 'volumes_removed': ['bookstack_bookstack_config', 'bookstack_bookstack_db_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +15:10:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:11:39Z bookstack: readback of the seeded account found=False :: A user where email=drill-60130ee1@gate.invalid could not be found. +15:11:39Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:12:17Z bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-338fd6 - Email: drill-60130ee1@gate.inval +15:13:00Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'bookstack', 'volumes_removed': ['bookstack_bookstack_config', 'bookstack_bookstack_db_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +15:13:08Z == bookstack done in 343 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-en.txt new file mode 100644 index 00000000..3384b71c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-en.txt @@ -0,0 +1 @@ +BookStack — Guide — Felhom.eu ← Apps BookStack A simple wiki platform - shelves, books, chapters and pages ● Running wiki.tester4.test Open ↗ What is it for? A family knowledge base - recipes, manuals, house rules Project documentation with a structure you can follow Book > Chapter > Page, so a large set stays readable Full text search and tags A visual editor and a Markdown editor First steps Open wiki.tester4.test in your browser Sign in: admin@admin.com and the first password shown on the settings page Change the admin e-mail address to your own Create your first shelf and book Start writing Add a family member Everyone signs in with their own account, so you can see who wrote what. In the top bar, select „Settings”, then „Users”. Select „Add New User”, and fill in „Name” and „Email”. Under „User Roles”, tick „Editor”, or „Viewer” if they only read. Turn off „Send user invite email” and give them a password. Select „Save”, and give the family member the e-mail address and the password. Write a page with a picture You can write down a recipe or a manual together with a picture. Open the book and select „New Page”. Type the title and the text. In the editor's toolbar, select „Insert image”, then „Upload Image”. Choose the picture and select „Select Image”. Select „Save Page”. Tags and search With tags you find pages from different books in one place. While editing, open „Page Tags” in the bar on the right. In „Tag Name”, type a word, for example: recipe. Select „Save Page”. Later you find the page with that word in the search box at the top, or by selecting a tag. Print or save a page You can download a page, or a whole book, as a PDF file. Open the page or the book. In the bar on the right, select „Export”. Choose „PDF File”, and save it or print it. Frequently asked questions Can I switch it to Hungarian? Yes. Under your name at the top right, open „My Account”, choose Hungarian in the „Preferred Language” field, and save. This guide shows the English labels. What are a shelf, a book, a chapter and a page? The page is the actual text, a chapter holds pages, and a book holds chapters and pages. A shelf keeps several books together, for example Kitchen or House. Can I see an older version of a page? Yes. In the bar on the right of the page, „Revisions” shows who changed what and when. A family member forgot their password. What do I do? As an administrator, open the family member on the „Users” page, give them a new password, and select „Save”. Where are the uploaded pictures? On the box, in BookStack's own storage. You see the box's backups on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-hu.txt new file mode 100644 index 00000000..e24d3da5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-guide-hu.txt @@ -0,0 +1 @@ +BookStack — Felhom.eu ← Alkalmazások BookStack Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak ● Fut wiki.tester4.test Megnyitás ↗ Mire használható? Családi tudásbázis - receptek, kézikönyvek, szabályok Projekt dokumentáció strukturált formában Könyv > Fejezet > Oldal hierarchia az áttekinthetőségért Teljes szöveges keresés és címkék WYSIWYG és Markdown szerkesztő Első lépések Nyisd meg a wiki.tester4.test címet a böngészőben Jelentkezz be: admin@admin.com és a Beállítások oldalon látható első jelszó Változtasd meg az admin email címét a sajátodra Hozd létre az első polcot és könyvet Kezdj el írni! Családtag felvétele Mindenki a saját fiókjával lép be, így látszik, ki mit írt. A felső sávban kattints a „Settings” (Beállítások), majd a „Users” (Felhasználók) pontra. Kattints az „Add New User” (Új felhasználó) gombra, és add meg a „Name” (Név) és az „Email” mezőt. A „User Roles” (Szerepkörök) résznél jelöld be az „Editor” (Szerkesztő) szerepet, vagy a „Viewer” (Olvasó) szerepet, ha csak olvasna. Kapcsold ki a „Send user invite email” (meghívó e-mail) kapcsolót, és adj meg neki jelszót. Kattints a „Save” (Mentés) gombra, és add át a családtagnak az e-mail címet és a jelszót. Oldal írása képpel Egy receptet vagy egy használati útmutatót képpel együtt is leírhatsz. Nyisd meg a könyvet, és kattints a „New Page” (Új oldal) pontra. Írd be a címet és a szöveget. A szerkesztő eszköztárán kattints az „Insert image” (Kép beszúrása) gombra, majd az „Upload Image” (Kép feltöltése) gombra. Válaszd ki a képet, és kattints a „Select Image” (Kép kiválasztása) gombra. Kattints a „Save Page” (Oldal mentése) gombra. Címkék és keresés A címkékkel a különböző könyvekben lévő oldalakat is egyben megtalálod. Szerkesztés közben a jobb oldali sávban nyisd meg a „Page Tags” (Oldal címkéi) részt. A „Tag Name” (Címke neve) mezőbe írj egy szót, például: recept. Kattints a „Save Page” gombra. Később a felső kereső mezőbe írt szóval vagy egy címkére kattintva megtalálod az oldalt. Oldal nyomtatása vagy mentése Egy oldalt vagy egy egész könyvet PDF fájlként is letölthetsz. Nyisd meg az oldalt vagy a könyvet. A jobb oldali sávban kattints az „Export” (Exportálás) pontra. Válaszd a „PDF File” (PDF fájl) lehetőséget, és mentsd el vagy nyomtasd ki. Gyakori kérdések Átállíthatom magyarra? Igen. Jobb felül a neved alatt nyisd meg a „My Account” (Fiókom) oldalt, a „Preferred Language” (Nyelv) mezőben válaszd a „Magyar” nyelvet, és mentsd. Ez az útmutató az angol feliratokat mutatja. Mi a polc, a könyv, a fejezet és az oldal? Az oldal a tényleges szöveg, a fejezet oldalakat fog össze, a könyv fejezeteket és oldalakat. A polc több könyvet tart együtt, például Konyha vagy Ház. Megnézhetem egy oldal régebbi változatát? Igen. Az oldal jobb oldali sávjában a „Revisions” (Változatok) pont mutatja, ki mikor mit módosított. Egy családtag elfelejtette a jelszavát. Mit tegyek? Rendszergazdaként a „Users” oldalon nyisd meg a családtagot, adj meg neki új jelszót, és kattints a „Save” gombra. Hol vannak a feltöltött képek? A dobozon, a BookStack saját tárhelyén. A doboz mentéseit a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-en.txt new file mode 100644 index 00000000..8a117122 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-en.txt @@ -0,0 +1 @@ +BookStack — Install — Felhom.eu ← Back BookStack — Install A simple, book-shaped wiki and documentation platform ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) BookStack (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Application key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password (admin@admin.com) * cannot be changed after install 👁 Generate For the first sign-in: admin@admin.com and this password. Change it in your profile afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-hu.txt new file mode 100644 index 00000000..618b32ad --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-install-hu.txt @@ -0,0 +1 @@ +BookStack — Telepítés — Felhom.eu ← Vissza BookStack — Telepítés Egyszerű, könyv-szerű wiki és dokumentáció platform ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) BookStack (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Alkalmazás kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó (admin@admin.com) * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: admin@admin.com és ez a jelszó. Utána a profilodban módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-en.txt new file mode 100644 index 00000000..455d48d1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-en.txt @@ -0,0 +1 @@ +BookStack — Settings — Felhom.eu ← Apps BookStack A simple wiki platform - shelves, books, chapters and pages ● Running wiki.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password (admin@admin.com) Show Address and keys These were created at install time and cannot be changed. Address wiki.tester4.test Application key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-hu.txt new file mode 100644 index 00000000..8b82abd6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/page-overview-hu.txt @@ -0,0 +1 @@ +BookStack — Felhom.eu ← Alkalmazások BookStack Egyszerű wiki platform - polcok, könyvek, fejezetek és oldalak ● Fut wiki.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó (admin@admin.com) Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím wiki.tester4.test Alkalmazás kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/record.json b/documentation/audits/catalog-sweep-2026-10-24/bookstack/record.json new file mode 100644 index 00000000..8a313376 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/record.json @@ -0,0 +1,141 @@ +{ + "app": "bookstack", + "sub": "wiki", + "fixture": "BookStack", + "started": "2026-10-24T15:07:08Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "APP_KEY", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/bookstack/install", + "hu_len": 1159, + "en_len": 1071, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/bookstack/install -> 200 'BookStack — Telepítés — Felhom.eu' | shot /root/shots/bookstack-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/bookstack/install -> 200 'BookStack — Telepítés — Felhom.eu' | shot /root/shots/bookstack-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 71 + }, + "stranger": "302 https://wiki.tester4.test/login", + "http_port_80": "301 https://wiki.tester4.test/", + "guide": { + "path": "/apps/bookstack/guide", + "hu_len": 3186, + "en_len": 2675, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/bookstack", + "hu_len": 487, + "en_len": 464, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/bookstack/guide -> 200 'BookStack — Felhom.eu' | shot /root/shots/bookstack-after-guide-phone-hu.png hscroll=False", + "goto https://wiki.tester4.test/login -> 200 'BookStack' | shot /root/shots/bookstack-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"12.327060167s\", \"last_run\": \"2026-10-24T15:09:20.499652428Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 30, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"bookstack\", \"started_at\": \"2026-10-24T15:11:39.809874259Z\", \"last\": {\"op\": \"restore\", \"stack\": \"bookstack\", \"ok\": true, \"message\": \"A(z) bookstack: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:12:08.051452324Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "bookstack": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "bookstack-db": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "bookstack-db": 115.8, + "bookstack": 51.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 343 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-front-desktop-hu.png new file mode 100644 index 00000000..d0277149 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-guide-phone-hu.png new file mode 100644 index 00000000..a6428a7a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-desktop-en.png new file mode 100644 index 00000000..cf36dbfc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-phone-hu.png new file mode 100644 index 00000000..0148aa8d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/bookstack/screens/bookstack-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/bookstack/walk.log b/documentation/audits/catalog-sweep-2026-10-24/bookstack/walk.log new file mode 100644 index 00000000..ca36a630 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/bookstack/walk.log @@ -0,0 +1,14 @@ +15:07:26Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:07:26Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:08:36Z [1] deployed, controller state=running, pinned={'bookstack': 'lscr.io/linuxserver/bookstack:26.09.1', 'bookstack-db': 'mariadb:12.3'} +15:08:36Z [1] installed: deployed 71 s, front door 71 s +15:08:41Z bookstack: artisan create-admin :: Admin account with email "drill-60130ee1@gate.invalid" successfully created! +15:08:48Z bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-338fd6 - Email: drill-60130ee1@gate.inval +15:09:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:10:03Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'bookstack', 'volumes_removed': ['bookstack_bookstack_config', 'bookstack_bookstack_db_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +15:10:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:11:39Z bookstack: readback of the seeded account found=False :: A user where email=drill-60130ee1@gate.invalid could not be found. +15:11:39Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:12:17Z bookstack: readback of the seeded account found=True :: This will delete any configure multi-factor authentication methods for user: - ID: 3 - Name: drill-338fd6 - Email: drill-60130ee1@gate.inval +15:13:00Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'bookstack', 'volumes_removed': ['bookstack_bookstack_config', 'bookstack_bookstack_db_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +15:13:08Z == bookstack done in 343 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom.console.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom.console.txt new file mode 100644 index 00000000..19a71c6c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom.console.txt @@ -0,0 +1,14 @@ +18:24:07Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:28:43Z [1] deployed, controller state=running, pinned={'calcom': 'calcom/cal.com:v6.2.0', 'calcom-postgres': 'postgres:18-alpine'} +18:28:44Z gate: cal is gated — passed as the household (cookie set) +18:28:45Z [1] installed: deployed 277 s, front door 278 s +18:28:46Z calcom: /api/auth/setup http=200 :: {"message":"First admin user created successfully."} +18:28:46Z calcom: seeded user drillce1da6 +18:28:47Z calcom: readback — the seeded user's page http=200 +18:29:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:30:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calcom', 'volumes_removed': ['calcom_calcom_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +18:35:02Z calcom: readback — the seeded user's page http=404 +18:35:02Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:36:04Z calcom: readback — the seeded user's page http=200 +18:36:54Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calcom', 'volumes_removed': ['calcom_calcom_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +18:37:03Z == calcom done in 776 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-en.txt new file mode 100644 index 00000000..97931de4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-en.txt @@ -0,0 +1 @@ +Cal.com — Guide — Felhom.eu ← Apps Cal.com Appointment booking - a Calendly alternative on your own server ● Running cal.tester4.test Open ↗ What is it for? Give people a page where they can book time with you Calendar sync with Apple Calendar or a CalDAV calendar Booking types and lengths you set yourself Reminder e-mails go out on their own Shared team calendars First steps Open cal.tester4.test in your browser Create the admin account Set up a booking type (a 30 minute meeting, for example) Connect your calendar Share your booking link Before you start An x86 processor is needed At least 1 GB of free RAM (Cal.com + PostgreSQL) When people can book you Cal.com only offers the times when you are free. In the menu on the left, open the „Availability” page and select your schedule. Turn on the days when people can book, and set the start and the end time. If a day needs two separate slots, for example morning and afternoon, add one with the plus sign next to the day. Select „Save”. A day off or a holiday You can take out single days, and your weekly plan stays as it is. Open your schedule on the „Availability” page. Under „Date overrides”, select „Add an override”. Pick the days in the calendar and turn on „Mark unavailable (All day)”. Select „Save override”, then „Save”. Approve a booking You can make a booking count only once you say yes to it too. On the „Event types” page, open the event type. On the „Advanced” tab, turn on „Requires confirmation” and select „Save”. You see new requests on the „Unconfirmed” tab of the „Bookings” page. For a request, select „Confirm” or „Reject”. A break between bookings You can leave time between two meetings, and set how soon people can book. Open the event type and choose the „Limits” tab. In „Before event” and „After event”, give how much free time you need. In „Minimum notice”, give how far ahead people must book at least. Select „Save”. Frequently asked questions Does the person booking need an account? No. They open the link you gave them, choose a free time, and give their name and e-mail address. Where do I see bookings, and how do I cancel one? On the „Upcoming” tab of the „Bookings” page. In a booking's menu, „Cancel event” cancels it. Which of my calendars can I connect? On the „Apps” page you can turn on „Apple Calendar” or „CalDav (Beta)”, with the calendar's username and password. Google and Outlook calendars need separate keys, and the box does not set those up. Can I switch it to Hungarian? Yes. On the „Settings” page, under „General”, you choose in the „Language” field. This guide shows the English labels. The free times show at the wrong hours. What do I check? The time zone: under „General” on the „Settings” page, and in your schedule too, the „Timezone” field should be Budapest. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-hu.txt new file mode 100644 index 00000000..02cb8514 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-guide-hu.txt @@ -0,0 +1 @@ +Cal.com — Felhom.eu ← Alkalmazások Cal.com Időpontfoglaló - Calendly alternatíva saját szerveren ● Fut cal.tester4.test Megnyitás ↗ Mire használható? Időpontfoglalási oldal létrehozása ügyfeleknek Naptár szinkronizáció Apple naptárral vagy CalDAV naptárral Személyre szabható foglalási típusok és időtartamok Automatikus emlékeztető emailek Csapat naptár kezelés Első lépések Nyisd meg a cal.tester4.test címet a böngészőben Hozd létre az admin fiókot Állíts be egy foglalási típust (pl. 30 perces megbeszélés) Szinkronizáld a naptáradat Oszd meg a foglalási linket Előfeltételek x86 processzor szükséges Legalább 1 GB szabad RAM (Cal.com + PostgreSQL) Mikor lehet nálad foglalni A Cal.com csak azokat az időpontokat kínálja fel, amikor szabad vagy. A bal oldali menüben nyisd meg az „Availability” (Elérhetőség) oldalt, és kattints az ütemezésedre. Kapcsold be azokat a napokat, amikor lehet foglalni, és állítsd be a kezdő és a záró időt. Ha egy napon két külön sáv kell, például délelőtt és délután, add hozzá a napnál a pluszjellel. Kattints a „Save” (Mentés) gombra. Szabadnap vagy szabadság Egy-egy napot kivehetsz, a heti beosztásod ettől nem változik. Nyisd meg az ütemezésedet az „Availability” oldalon. A „Date overrides” (Dátum felülbírálások) résznél kattints az „Add an override” (Felülírás hozzáadása) gombra. Jelöld ki a napokat a naptárban, és kapcsold be a „Mark unavailable (All day)” (egész nap nem elérhető) kapcsolót. Kattints a „Save override” (felülírás mentése), majd a „Save” gombra. Foglalás jóváhagyása Beállíthatod, hogy egy foglalás csak akkor legyen érvényes, ha te is rábólintasz. Az „Event types” (Eseménytípusok) oldalon nyisd meg az eseménytípust. Az „Advanced” (Haladó) lapon kapcsold be a „Requires confirmation” (Megerősítést igényel) kapcsolót, és kattints a „Save” gombra. Az új kéréseket a „Bookings” (Foglalások) oldal „Unconfirmed” (Nem megerősített) lapján látod. Egy kérésnél kattints a „Confirm” (Elfogadás) vagy a „Reject” (Elutasítás) gombra. Szünet a foglalások között Hagyhatsz időt két megbeszélés között, és megszabhatod, milyen hamar lehet foglalni. Nyisd meg az eseménytípust, és válaszd a „Limits” (Korlátok) lapot. A „Before event” (Esemény előtt) és az „After event” (Esemény után) mezőben add meg, mennyi szabad idő kell. A „Minimum notice” (legkorábbi foglalás) mezőben add meg, legalább mennyivel előre foglaljanak. Kattints a „Save” gombra. Gyakori kérdések Kell a foglalónak fiók? Nem. Megnyitja a linket, amit tőled kapott, kiválaszt egy szabad időpontot, és megadja a nevét és az e-mail címét. Hol látom és hogyan mondom le a foglalásokat? A „Bookings” oldal „Upcoming” (Közelgő) lapján. Egy foglalás menüjében a „Cancel event” (Időpont lemondása) ponttal mondhatod le. Melyik naptáramat köthetem be? Az „Apps” (Alkalmazások) oldalon az „Apple Calendar” vagy a „CalDav (Beta)” kapcsolható be, a naptár felhasználónevével és jelszavával. A Google és az Outlook naptárhoz külön kulcsok kellenek, ezeket a doboz nem állítja be. Átállíthatom magyarra? Igen. A „Settings” (Beállítások) oldal „General” (Általános) részén a „Language” (Nyelv) mezőben választhatsz. Ez az útmutató az angol feliratokat mutatja. Rossz időben látszanak a szabad időpontok. Mit nézzek meg? Az időzónát: a „Settings” oldal „General” részén és az ütemezésedben is a „Timezone” (Időzóna) mezőben Budapest legyen. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-en.txt new file mode 100644 index 00000000..540a614c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-en.txt @@ -0,0 +1 @@ +Cal.com — Install — Felhom.eu ← Back Cal.com — Install Open source appointment booking (a Calendly alternative) ~800M RAM Full description, screenshots Memory 800 MB / 7479 MB (10%) Current usage (0 MB) Cal.com (+800 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain NextAuth encryption key Generated automatically Show Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-hu.txt new file mode 100644 index 00000000..6e02b1b0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-install-hu.txt @@ -0,0 +1 @@ +Cal.com — Telepítés — Felhom.eu ← Vissza Cal.com — Telepítés Nyílt forráskódú időpontfoglaló (Calendly alternatíva) ~800M RAM Részletes leírás, képernyőképek Memória 800 MB / 7479 MB (10%) Jelenlegi használat (0 MB) Cal.com (+800 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain NextAuth titkosítási kulcs Automatikusan generálva Megjelenítés Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-en.txt new file mode 100644 index 00000000..0200f38a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-en.txt @@ -0,0 +1 @@ +Cal.com — Settings — Felhom.eu ← Apps Cal.com Appointment booking - a Calendly alternative on your own server ● Running cal.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: calcom@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address cal.tester4.test NextAuth encryption key Show Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-hu.txt new file mode 100644 index 00000000..9599f5ba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/page-overview-hu.txt @@ -0,0 +1 @@ +Cal.com — Felhom.eu ← Alkalmazások Cal.com Időpontfoglaló - Calendly alternatíva saját szerveren ● Fut cal.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: calcom@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím cal.tester4.test NextAuth titkosítási kulcs Megjelenítés Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/record.json b/documentation/audits/catalog-sweep-2026-10-24/calcom/record.json new file mode 100644 index 00000000..20892aaa --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/record.json @@ -0,0 +1,148 @@ +{ + "app": "calcom", + "sub": "cal", + "fixture": "Calcom", + "started": "2026-10-24T18:23:48Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "NEXTAUTH_SECRET", + "secret", + false + ], + [ + "CALENDSO_ENCRYPTION_KEY", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/calcom/install", + "hu_len": 1055, + "en_len": 947, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/calcom/install -> 200 'Cal.com — Telepítés — Felhom.eu' | shot /root/shots/calcom-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/calcom/install -> 200 'Cal.com — Telepítés — Felhom.eu' | shot /root/shots/calcom-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 277, + "front_door": true, + "seconds_to_front_door": 278 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fcal.tester4.test%2F", + "http_port_80": "301 https://cal.tester4.test/", + "guide": { + "path": "/apps/calcom/guide", + "hu_len": 3383, + "en_len": 2823, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/calcom", + "hu_len": 1264, + "en_len": 1203, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/calcom/guide -> 200 'Cal.com — Felhom.eu' | shot /root/shots/calcom-after-guide-phone-hu.png hscroll=False", + "goto https://cal.tester4.test/auth/login -> 200 'Bejelentkezés | Cal.com' | shot /root/shots/calcom-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"19.707846311s\", \"last_run\": \"2026-10-24T18:29:29.809779082Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 55, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"calcom\", \"started_at\": \"2026-10-24T18:35:02.491151299Z\", \"last\": {\"op\": \"restore\", \"stack\": \"calcom\", \"ok\": true, \"message\": \"A(z) calcom: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:35:57.315758097Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "calcom": { + "limit_mib": 1536, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "calcom-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 2, + "sample": [ + "calcom: Error: you need to provide a host and port to test.", + "calcom: Error adding google credentials to DB: Unexpected end of JSON input" + ] + }, + "mem_peak_mib": { + "calcom": 1005.0, + "calcom-postgres": 96.7 + }, + "mem_anon_peak_mib": { + "calcom": 792.7, + "calcom-postgres": 14.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 776 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-front-desktop-hu.png new file mode 100644 index 00000000..a6e61ddb Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-guide-phone-hu.png new file mode 100644 index 00000000..0ef632c5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-desktop-en.png new file mode 100644 index 00000000..14e2d81b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-phone-hu.png new file mode 100644 index 00000000..e499dd3a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calcom/screens/calcom-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calcom/walk.log b/documentation/audits/catalog-sweep-2026-10-24/calcom/walk.log new file mode 100644 index 00000000..19a71c6c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calcom/walk.log @@ -0,0 +1,14 @@ +18:24:07Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:28:43Z [1] deployed, controller state=running, pinned={'calcom': 'calcom/cal.com:v6.2.0', 'calcom-postgres': 'postgres:18-alpine'} +18:28:44Z gate: cal is gated — passed as the household (cookie set) +18:28:45Z [1] installed: deployed 277 s, front door 278 s +18:28:46Z calcom: /api/auth/setup http=200 :: {"message":"First admin user created successfully."} +18:28:46Z calcom: seeded user drillce1da6 +18:28:47Z calcom: readback — the seeded user's page http=200 +18:29:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:30:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calcom', 'volumes_removed': ['calcom_calcom_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +18:35:02Z calcom: readback — the seeded user's page http=404 +18:35:02Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:36:04Z calcom: readback — the seeded user's page http=200 +18:36:54Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calcom', 'volumes_removed': ['calcom_calcom_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +18:37:03Z == calcom done in 776 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web.console.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web.console.txt new file mode 100644 index 00000000..55e26b67 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web.console.txt @@ -0,0 +1,19 @@ +21:04:51Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD'] +21:04:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:06:06Z [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'} +21:06:07Z [1] installed: deployed 76 s, front door 76 s +21:06:08Z calibre-web: POST /upload http=200 {"location": "/tasks"} +21:06:08Z calibre-web: seeded book upg4d46f479e101 is in the library +21:06:14Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:06:14Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:06:38Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:07:30Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +21:07:39Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD', 'ADMIN_USER', 'HDD_PATH'] +21:08:55Z gate: books is gated — passed as the household (cookie set) +21:08:55Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:08:55Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:09:04Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +21:09:15Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:09:15Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:09:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +21:10:08Z == calibre-web done in 317 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/console.txt new file mode 100644 index 00000000..3f499ada --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/console.txt @@ -0,0 +1,11 @@ +15:13:27Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD'] +15:13:27Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:14:37Z [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'} +15:14:37Z [1] installed: deployed 71 s, front door 71 s +15:14:38Z calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install) +15:14:42Z calibre-web: after_install :: to False (Standard/LDAP login) Username 'admin' not valid, can't change password +15:15:03Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:15:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +15:16:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD', 'HDD_PATH'] +15:17:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +15:18:08Z == calibre-web done in 281 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-en.txt new file mode 100644 index 00000000..a49787ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Guide — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ What is it for? E-books are processed on their own - just drop them in the ingest folder Automatic format conversion (EPUB, MOBI, PDF, AZW3) An OPDS feed for e-readers (Kindle, KOReader, Moon+ Reader) A web reader in your browser KOReader sync (reading position, bookmarks) First steps Open books.tester4.test in your browser Sign in with the user name and the first password shown on the settings page Drop a book into the import/calibre folder in the File manager (FileBrowser) - it is processed and filed under media/books on its own Before you start An external hard drive is needed to keep the e-books on An x86 processor is needed (CWA carries the Calibre binary) At least 768 MB of free RAM is recommended Upload a book from the browser You do not need the File manager for this: you can also upload a book on the Calibre-Web Automated page. In the top bar, select „Upload”. Choose the book file on your computer, for example an EPUB file. Calibre-Web Automated processes it, and then it shows up in the library. If you do not see it yet, reload the page a little later. Read in the browser You can read the books in your browser, without downloading them. Select the cover of the book to open its details page. Select the book icon: this is the „Read in Browser” button. In the reader, the cog icon opens the „Settings” window: there you set the font size and the background. When you are done, mark the book as read with the eye icon on the details page („Mark As Read”). A shelf for your favourites A shelf groups books together, for example the ones for the children. In the menu on the left, select „Create Shelf”. Type the name of the shelf in „Title” and select „Save”. Open a book and put it on the shelf with „Add to shelf”. Add a family member Everyone signs in with their own account, so each sees what they have read. In the top bar, select „Admin”. Select „Add New User”. Fill in „Username”, „Email” and „Password”. The password needs at least 8 characters, a lower and an upper case letter, a digit and a special character. In „Interface Language” you can also choose Hungarian for them. Select „Save”, and give them the user name and the password. Frequently asked questions Can I switch the interface to Hungarian? Yes. Select your user name in the top bar, choose Hungarian in „Interface Language”, and select „Save”. Where do the books go? Into the media/books folder of your drive, your library. The file disappears from the import/calibre folder after processing, and that is fine. Can I read on an e-reader or a phone? Yes, with a reading app that knows OPDS catalogues, for example KOReader. In the app, enter the address books.tester4.test/opds with your own user name and password. Can my family see my shelves? No, a shelf is yours alone by default. If you tick „Share with Everyone” when you create the shelf, everyone sees it. Are my books backed up? The library is in the media/books folder of your drive. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-hu.txt new file mode 100644 index 00000000..db22bf6f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Automatizált e-könyv feldolgozás - csak dobd be az ingest mappába Automatikus formátumkonverzió (EPUB, MOBI, PDF, AZW3) OPDS feed e-olvasókhoz (Kindle, KOReader, Moon+ Reader) Webes olvasó böngészőben KOReader szinkronizáció (olvasási pozíció, könyvjelzők) Első lépések Nyisd meg a books.tester4.test címet a böngészőben Jelentkezz be a Beállítások oldalon látható felhasználónévvel és első jelszóval Dobj egy könyvet a Fájlkezelőben (FileBrowser) az import/calibre mappába: automatikusan feldolgozza és a media/books könyvtárba helyezi Előfeltételek Külső HDD szükséges az e-könyvek tárolásához x86 processzor szükséges (a CWA tartalmazza a Calibre binárist) Legalább 768 MB szabad RAM ajánlott Könyv feltöltése a böngészőből Nem kell hozzá a Fájlkezelő: a könyvet a Calibre-Web Automated oldalán is feltöltheted. A felső sávban kattints az „Upload” (Feltöltés) gombra. Válaszd ki a könyvfájlt a gépedről, például egy EPUB fájlt. A Calibre-Web Automated feldolgozza, és utána megjelenik a könyvtárban. Ha még nem látod, frissítsd az oldalt egy kicsit később. Olvasás a böngészőben A könyveket letöltés nélkül, a böngészőben is olvashatod. Kattints a könyv borítójára, hogy megnyíljon az adatlapja. Kattints a könyv ikonra: ez a „Read in Browser” (olvasás a böngészőben) gomb. Az olvasóban a fogaskerék ikon nyitja a „Settings” (Beállítások) ablakot: itt állíthatod a betűméretet és a hátteret. Ha végeztél, az adatlapon a szem ikonnal jelölheted meg olvasottként („Mark As Read”). Saját polc a kedvenceknek A polccal csoportosíthatod a könyveket, például a gyerekeknek valókat. A bal oldali menüben kattints a „Create Shelf” (Polc létrehozása) pontra. Írd be a polc nevét a „Title” (Cím) mezőbe, és kattints a „Save” (Mentés) gombra. Nyiss meg egy könyvet, és az „Add to shelf” (Polcra tesz) gombbal tedd a polcra. Családtag hozzáadása Mindenki a saját fiókjával lép be, így külön látja, mit olvasott. A felső sávban kattints az „Admin” pontra. Kattints az „Add New User” (Új felhasználó) gombra. Töltsd ki a „Username” (felhasználónév), az „Email” és a „Password” (jelszó) mezőt. A jelszóban legyen legalább 8 karakter, kis- és nagybetű, szám és különleges karakter. Az „Interface Language” (felület nyelve) mezőben a magyart is választhatod neki. Kattints a „Save” gombra, és add át neki a felhasználónevet és a jelszót. Gyakori kérdések Átállíthatom magyarra a felületet? Igen. Kattints a felső sávban a felhasználónevedre, az „Interface Language” mezőben válaszd a magyart, és kattints a „Save” gombra. Hová kerülnek a könyvek? A meghajtód media/books mappájába, a könyvtáradba. Az import/calibre mappából a feldolgozás után eltűnik a fájl, ez rendben van. Olvashatok e-olvasón vagy telefonon? Igen, olyan olvasó appal, amely ismeri az OPDS katalógust, például a KOReaderrel. Az appban add meg a books.tester4.test/opds címet, a saját felhasználóneveddel és jelszavaddal. Látják a családtagok az én polcaimat? Nem, a polc alapból csak a tiéd. Ha a polc létrehozásakor bejelölöd a „Share with Everyone” (megosztás mindenkivel) jelölőt, mindenki látja. Mentődnek a könyveim? A könyvtár a meghajtód media/books mappájában van. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-en.txt new file mode 100644 index 00000000..4183c1ce --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Install — Felhom.eu ← Back Calibre-Web Automated — Install An automated e-book library - conversion, metadata and a web reader ~200M RAM Needs a hard drive Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Calibre-Web Automated (+200 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin user name Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). E-book library path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the Calibre library lives Admin password * cannot be changed after install 👁 Generate For the first sign-in: the user name above and this password. It needs a lower and an upper case letter, a digit and a special character. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-hu.txt new file mode 100644 index 00000000..06a7bf76 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Telepítés — Felhom.eu ← Vissza Calibre-Web Automated — Telepítés Automatizált e-könyv könyvtár - konvertálás, metaadat kezelés és webes olvasó ~200M RAM HDD szükséges Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Calibre-Web Automated (+200 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin felhasználónév Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a Calibre könyvtár található Admin jelszó * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: a fenti felhasználónév és ez a jelszó. Kell benne kis- és nagybetű, szám és egy különleges karakter. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-en.txt new file mode 100644 index 00000000..0632d33c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Settings — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin user name Show Admin password Show Address and keys These were created at install time and cannot be changed. Address books.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-hu.txt new file mode 100644 index 00000000..b20d7a25 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin felhasználónév Megjelenítés Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím books.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/record.json new file mode 100644 index 00000000..d5431a34 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/record.json @@ -0,0 +1,128 @@ +{ + "app": "calibre-web", + "sub": "books", + "fixture": "CalibreWeb", + "started": "2026-10-24T15:13:09Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "ADMIN_USER", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/calibre-web/install", + "hu_len": 1558, + "en_len": 1432, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 71 + }, + "stranger": "302 https://192.168.0.157/login?next=%2F", + "http_port_80": "301 https://books.tester4.test/", + "guide": { + "path": "/apps/calibre-web/guide", + "hu_len": 3464, + "en_len": 3256, + "english_words_in_hu": [ + "password", + "settings", + "with" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/calibre-web", + "hu_len": 526, + "en_len": 509, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/calibre-web/guide -> 200 'Calibre-Web Automated — Felhom.eu' | shot /root/shots/calibre-web-after-guide-phone-hu.png hscroll=False", + "goto https://books.tester4.test/login?next=%2F -> 200 'Calibre-Web Automated | Belépés' | shot /root/shots/calibre-web-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"6.111879347s\", \"last_run\": \"2026-10-24T15:15:09.749179417Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "calibre-web": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 3, + "sample": [ + "calibre-web: Setting up desktop integration failed with error:", + "calibre-web: \tTraceback (most recent call last):", + "calibre-web: * Setting up desktop integration failed with error:" + ] + }, + "mem_peak_mib": { + "calibre-web": 165.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 281 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-front-desktop-hu.png new file mode 100644 index 00000000..77b9a1ba Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-guide-phone-hu.png new file mode 100644 index 00000000..fee70bbc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-desktop-en.png new file mode 100644 index 00000000..6a30a85b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-phone-hu.png new file mode 100644 index 00000000..edf76476 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/screens/calibre-web-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/walk.log new file mode 100644 index 00000000..3f499ada --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/first-run/walk.log @@ -0,0 +1,11 @@ +15:13:27Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD'] +15:13:27Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:14:37Z [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'} +15:14:37Z [1] installed: deployed 71 s, front door 71 s +15:14:38Z calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install) +15:14:42Z calibre-web: after_install :: to False (Standard/LDAP login) Username 'admin' not valid, can't change password +15:15:03Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:15:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +15:16:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD', 'HDD_PATH'] +15:17:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +15:18:08Z == calibre-web done in 281 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-en.txt new file mode 100644 index 00000000..a49787ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Guide — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ What is it for? E-books are processed on their own - just drop them in the ingest folder Automatic format conversion (EPUB, MOBI, PDF, AZW3) An OPDS feed for e-readers (Kindle, KOReader, Moon+ Reader) A web reader in your browser KOReader sync (reading position, bookmarks) First steps Open books.tester4.test in your browser Sign in with the user name and the first password shown on the settings page Drop a book into the import/calibre folder in the File manager (FileBrowser) - it is processed and filed under media/books on its own Before you start An external hard drive is needed to keep the e-books on An x86 processor is needed (CWA carries the Calibre binary) At least 768 MB of free RAM is recommended Upload a book from the browser You do not need the File manager for this: you can also upload a book on the Calibre-Web Automated page. In the top bar, select „Upload”. Choose the book file on your computer, for example an EPUB file. Calibre-Web Automated processes it, and then it shows up in the library. If you do not see it yet, reload the page a little later. Read in the browser You can read the books in your browser, without downloading them. Select the cover of the book to open its details page. Select the book icon: this is the „Read in Browser” button. In the reader, the cog icon opens the „Settings” window: there you set the font size and the background. When you are done, mark the book as read with the eye icon on the details page („Mark As Read”). A shelf for your favourites A shelf groups books together, for example the ones for the children. In the menu on the left, select „Create Shelf”. Type the name of the shelf in „Title” and select „Save”. Open a book and put it on the shelf with „Add to shelf”. Add a family member Everyone signs in with their own account, so each sees what they have read. In the top bar, select „Admin”. Select „Add New User”. Fill in „Username”, „Email” and „Password”. The password needs at least 8 characters, a lower and an upper case letter, a digit and a special character. In „Interface Language” you can also choose Hungarian for them. Select „Save”, and give them the user name and the password. Frequently asked questions Can I switch the interface to Hungarian? Yes. Select your user name in the top bar, choose Hungarian in „Interface Language”, and select „Save”. Where do the books go? Into the media/books folder of your drive, your library. The file disappears from the import/calibre folder after processing, and that is fine. Can I read on an e-reader or a phone? Yes, with a reading app that knows OPDS catalogues, for example KOReader. In the app, enter the address books.tester4.test/opds with your own user name and password. Can my family see my shelves? No, a shelf is yours alone by default. If you tick „Share with Everyone” when you create the shelf, everyone sees it. Are my books backed up? The library is in the media/books folder of your drive. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-hu.txt new file mode 100644 index 00000000..db22bf6f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-guide-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Automatizált e-könyv feldolgozás - csak dobd be az ingest mappába Automatikus formátumkonverzió (EPUB, MOBI, PDF, AZW3) OPDS feed e-olvasókhoz (Kindle, KOReader, Moon+ Reader) Webes olvasó böngészőben KOReader szinkronizáció (olvasási pozíció, könyvjelzők) Első lépések Nyisd meg a books.tester4.test címet a böngészőben Jelentkezz be a Beállítások oldalon látható felhasználónévvel és első jelszóval Dobj egy könyvet a Fájlkezelőben (FileBrowser) az import/calibre mappába: automatikusan feldolgozza és a media/books könyvtárba helyezi Előfeltételek Külső HDD szükséges az e-könyvek tárolásához x86 processzor szükséges (a CWA tartalmazza a Calibre binárist) Legalább 768 MB szabad RAM ajánlott Könyv feltöltése a böngészőből Nem kell hozzá a Fájlkezelő: a könyvet a Calibre-Web Automated oldalán is feltöltheted. A felső sávban kattints az „Upload” (Feltöltés) gombra. Válaszd ki a könyvfájlt a gépedről, például egy EPUB fájlt. A Calibre-Web Automated feldolgozza, és utána megjelenik a könyvtárban. Ha még nem látod, frissítsd az oldalt egy kicsit később. Olvasás a böngészőben A könyveket letöltés nélkül, a böngészőben is olvashatod. Kattints a könyv borítójára, hogy megnyíljon az adatlapja. Kattints a könyv ikonra: ez a „Read in Browser” (olvasás a böngészőben) gomb. Az olvasóban a fogaskerék ikon nyitja a „Settings” (Beállítások) ablakot: itt állíthatod a betűméretet és a hátteret. Ha végeztél, az adatlapon a szem ikonnal jelölheted meg olvasottként („Mark As Read”). Saját polc a kedvenceknek A polccal csoportosíthatod a könyveket, például a gyerekeknek valókat. A bal oldali menüben kattints a „Create Shelf” (Polc létrehozása) pontra. Írd be a polc nevét a „Title” (Cím) mezőbe, és kattints a „Save” (Mentés) gombra. Nyiss meg egy könyvet, és az „Add to shelf” (Polcra tesz) gombbal tedd a polcra. Családtag hozzáadása Mindenki a saját fiókjával lép be, így külön látja, mit olvasott. A felső sávban kattints az „Admin” pontra. Kattints az „Add New User” (Új felhasználó) gombra. Töltsd ki a „Username” (felhasználónév), az „Email” és a „Password” (jelszó) mezőt. A jelszóban legyen legalább 8 karakter, kis- és nagybetű, szám és különleges karakter. Az „Interface Language” (felület nyelve) mezőben a magyart is választhatod neki. Kattints a „Save” gombra, és add át neki a felhasználónevet és a jelszót. Gyakori kérdések Átállíthatom magyarra a felületet? Igen. Kattints a felső sávban a felhasználónevedre, az „Interface Language” mezőben válaszd a magyart, és kattints a „Save” gombra. Hová kerülnek a könyvek? A meghajtód media/books mappájába, a könyvtáradba. Az import/calibre mappából a feldolgozás után eltűnik a fájl, ez rendben van. Olvashatok e-olvasón vagy telefonon? Igen, olyan olvasó appal, amely ismeri az OPDS katalógust, például a KOReaderrel. Az appban add meg a books.tester4.test/opds címet, a saját felhasználóneveddel és jelszavaddal. Látják a családtagok az én polcaimat? Nem, a polc alapból csak a tiéd. Ha a polc létrehozásakor bejelölöd a „Share with Everyone” (megosztás mindenkivel) jelölőt, mindenki látja. Mentődnek a könyveim? A könyvtár a meghajtód media/books mappájában van. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-en.txt new file mode 100644 index 00000000..93e960ed --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Install — Felhom.eu ← Back Calibre-Web Automated — Install An automated e-book library - conversion, metadata and a web reader ~200M RAM Needs a hard drive Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Calibre-Web Automated (+200 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin user name Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). E-book library path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the Calibre library lives Admin password * cannot be changed after install 👁 Generate For the first sign-in: the user name above and this password. It needs a lower and an upper case letter, a digit and a special character. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-hu.txt new file mode 100644 index 00000000..aec01fa6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-install-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Telepítés — Felhom.eu ← Vissza Calibre-Web Automated — Telepítés Automatizált e-könyv könyvtár - konvertálás, metaadat kezelés és webes olvasó ~200M RAM HDD szükséges Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Calibre-Web Automated (+200 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin felhasználónév Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a Calibre könyvtár található Admin jelszó * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: a fenti felhasználónév és ez a jelszó. Kell benne kis- és nagybetű, szám és egy különleges karakter. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-en.txt new file mode 100644 index 00000000..0632d33c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Settings — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin user name Show Admin password Show Address and keys These were created at install time and cannot be changed. Address books.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-hu.txt new file mode 100644 index 00000000..b20d7a25 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/page-overview-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin felhasználónév Megjelenítés Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím books.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/record.json b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/record.json new file mode 100644 index 00000000..7a210929 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/record.json @@ -0,0 +1,143 @@ +{ + "app": "calibre-web", + "sub": "books", + "fixture": "CalibreWeb", + "started": "2026-10-24T21:04:30Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "ADMIN_USER", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/calibre-web/install", + "hu_len": 1558, + "en_len": 1432, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 76 + }, + "stranger": "302 https://192.168.0.157/login?next=%2F", + "http_port_80": "301 https://books.tester4.test/", + "guide": { + "path": "/apps/calibre-web/guide", + "hu_len": 3464, + "en_len": 3256, + "english_words_in_hu": [ + "password", + "settings", + "with" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/calibre-web", + "hu_len": 526, + "en_len": 509, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/calibre-web/guide -> 200 'Calibre-Web Automated — Felhom.eu' | shot /root/shots/calibre-web-after-guide-phone-hu.png hscroll=False", + "goto https://books.tester4.test/login?next=%2F -> 200 'Calibre-Web Automated | Belépés' | shot /root/shots/calibre-web-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"6.252325338s\", \"last_run\": \"2026-10-24T21:06:44.489648285Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t." + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"papra\", \"started_at\": \"2026-10-24T20:52:05.728175679Z\", \"last\": {\"op\": \"restore\", \"stack\": \"papra\", \"ok\": true, \"message\": \"A(z) papra: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:52:21.170154643Z\"}}", + "state": "running" + }, + "seed_read_after_unit_restore": false, + "containers": { + "calibre-web": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 3, + "sample": [ + "calibre-web: Setting up desktop integration failed with error:", + "calibre-web: \tTraceback (most recent call last):", + "calibre-web: * Setting up desktop integration failed with error:" + ] + }, + "mem_peak_mib": { + "calibre-web": 233.7 + }, + "mem_anon_peak_mib": { + "calibre-web": 211.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 317 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-en.txt new file mode 100644 index 00000000..a49787ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Guide — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ What is it for? E-books are processed on their own - just drop them in the ingest folder Automatic format conversion (EPUB, MOBI, PDF, AZW3) An OPDS feed for e-readers (Kindle, KOReader, Moon+ Reader) A web reader in your browser KOReader sync (reading position, bookmarks) First steps Open books.tester4.test in your browser Sign in with the user name and the first password shown on the settings page Drop a book into the import/calibre folder in the File manager (FileBrowser) - it is processed and filed under media/books on its own Before you start An external hard drive is needed to keep the e-books on An x86 processor is needed (CWA carries the Calibre binary) At least 768 MB of free RAM is recommended Upload a book from the browser You do not need the File manager for this: you can also upload a book on the Calibre-Web Automated page. In the top bar, select „Upload”. Choose the book file on your computer, for example an EPUB file. Calibre-Web Automated processes it, and then it shows up in the library. If you do not see it yet, reload the page a little later. Read in the browser You can read the books in your browser, without downloading them. Select the cover of the book to open its details page. Select the book icon: this is the „Read in Browser” button. In the reader, the cog icon opens the „Settings” window: there you set the font size and the background. When you are done, mark the book as read with the eye icon on the details page („Mark As Read”). A shelf for your favourites A shelf groups books together, for example the ones for the children. In the menu on the left, select „Create Shelf”. Type the name of the shelf in „Title” and select „Save”. Open a book and put it on the shelf with „Add to shelf”. Add a family member Everyone signs in with their own account, so each sees what they have read. In the top bar, select „Admin”. Select „Add New User”. Fill in „Username”, „Email” and „Password”. The password needs at least 8 characters, a lower and an upper case letter, a digit and a special character. In „Interface Language” you can also choose Hungarian for them. Select „Save”, and give them the user name and the password. Frequently asked questions Can I switch the interface to Hungarian? Yes. Select your user name in the top bar, choose Hungarian in „Interface Language”, and select „Save”. Where do the books go? Into the media/books folder of your drive, your library. The file disappears from the import/calibre folder after processing, and that is fine. Can I read on an e-reader or a phone? Yes, with a reading app that knows OPDS catalogues, for example KOReader. In the app, enter the address books.tester4.test/opds with your own user name and password. Can my family see my shelves? No, a shelf is yours alone by default. If you tick „Share with Everyone” when you create the shelf, everyone sees it. Are my books backed up? The library is in the media/books folder of your drive. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-hu.txt new file mode 100644 index 00000000..db22bf6f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-guide-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Automatizált e-könyv feldolgozás - csak dobd be az ingest mappába Automatikus formátumkonverzió (EPUB, MOBI, PDF, AZW3) OPDS feed e-olvasókhoz (Kindle, KOReader, Moon+ Reader) Webes olvasó böngészőben KOReader szinkronizáció (olvasási pozíció, könyvjelzők) Első lépések Nyisd meg a books.tester4.test címet a böngészőben Jelentkezz be a Beállítások oldalon látható felhasználónévvel és első jelszóval Dobj egy könyvet a Fájlkezelőben (FileBrowser) az import/calibre mappába: automatikusan feldolgozza és a media/books könyvtárba helyezi Előfeltételek Külső HDD szükséges az e-könyvek tárolásához x86 processzor szükséges (a CWA tartalmazza a Calibre binárist) Legalább 768 MB szabad RAM ajánlott Könyv feltöltése a böngészőből Nem kell hozzá a Fájlkezelő: a könyvet a Calibre-Web Automated oldalán is feltöltheted. A felső sávban kattints az „Upload” (Feltöltés) gombra. Válaszd ki a könyvfájlt a gépedről, például egy EPUB fájlt. A Calibre-Web Automated feldolgozza, és utána megjelenik a könyvtárban. Ha még nem látod, frissítsd az oldalt egy kicsit később. Olvasás a böngészőben A könyveket letöltés nélkül, a böngészőben is olvashatod. Kattints a könyv borítójára, hogy megnyíljon az adatlapja. Kattints a könyv ikonra: ez a „Read in Browser” (olvasás a böngészőben) gomb. Az olvasóban a fogaskerék ikon nyitja a „Settings” (Beállítások) ablakot: itt állíthatod a betűméretet és a hátteret. Ha végeztél, az adatlapon a szem ikonnal jelölheted meg olvasottként („Mark As Read”). Saját polc a kedvenceknek A polccal csoportosíthatod a könyveket, például a gyerekeknek valókat. A bal oldali menüben kattints a „Create Shelf” (Polc létrehozása) pontra. Írd be a polc nevét a „Title” (Cím) mezőbe, és kattints a „Save” (Mentés) gombra. Nyiss meg egy könyvet, és az „Add to shelf” (Polcra tesz) gombbal tedd a polcra. Családtag hozzáadása Mindenki a saját fiókjával lép be, így külön látja, mit olvasott. A felső sávban kattints az „Admin” pontra. Kattints az „Add New User” (Új felhasználó) gombra. Töltsd ki a „Username” (felhasználónév), az „Email” és a „Password” (jelszó) mezőt. A jelszóban legyen legalább 8 karakter, kis- és nagybetű, szám és különleges karakter. Az „Interface Language” (felület nyelve) mezőben a magyart is választhatod neki. Kattints a „Save” gombra, és add át neki a felhasználónevet és a jelszót. Gyakori kérdések Átállíthatom magyarra a felületet? Igen. Kattints a felső sávban a felhasználónevedre, az „Interface Language” mezőben válaszd a magyart, és kattints a „Save” gombra. Hová kerülnek a könyvek? A meghajtód media/books mappájába, a könyvtáradba. Az import/calibre mappából a feldolgozás után eltűnik a fájl, ez rendben van. Olvashatok e-olvasón vagy telefonon? Igen, olyan olvasó appal, amely ismeri az OPDS katalógust, például a KOReaderrel. Az appban add meg a books.tester4.test/opds címet, a saját felhasználóneveddel és jelszavaddal. Látják a családtagok az én polcaimat? Nem, a polc alapból csak a tiéd. Ha a polc létrehozásakor bejelölöd a „Share with Everyone” (megosztás mindenkivel) jelölőt, mindenki látja. Mentődnek a könyveim? A könyvtár a meghajtód media/books mappájában van. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-en.txt new file mode 100644 index 00000000..93e960ed --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Install — Felhom.eu ← Back Calibre-Web Automated — Install An automated e-book library - conversion, metadata and a web reader ~200M RAM Needs a hard drive Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Calibre-Web Automated (+200 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin user name Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). E-book library path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the Calibre library lives Admin password * cannot be changed after install 👁 Generate For the first sign-in: the user name above and this password. It needs a lower and an upper case letter, a digit and a special character. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-hu.txt new file mode 100644 index 00000000..aec01fa6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-install-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Telepítés — Felhom.eu ← Vissza Calibre-Web Automated — Telepítés Automatizált e-könyv könyvtár - konvertálás, metaadat kezelés és webes olvasó ~200M RAM HDD szükséges Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Calibre-Web Automated (+200 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin felhasználónév Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a Calibre könyvtár található Admin jelszó * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: a fenti felhasználónév és ez a jelszó. Kell benne kis- és nagybetű, szám és egy különleges karakter. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-en.txt new file mode 100644 index 00000000..e011a457 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-en.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Settings — Felhom.eu ← Apps Calibre-Web Automated An automated e-book library - book processing, format conversion and an OPDS feed ● Running books.tester4.test Open ↗ Files ↗ Running Running Restart Stop Only you can reach it for now The box is replacing this app's known first password with a generated one of its own. Until then only you can reach it, while you are signed in to the dashboard – nobody else can sign in with the known password. If the change fails, change the password by hand and say so here. Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin user name Show Admin password Show Address and keys These were created at install time and cannot be changed. Address books.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-hu.txt new file mode 100644 index 00000000..be8654b4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/page-overview-hu.txt @@ -0,0 +1 @@ +Calibre-Web Automated — Felhom.eu ← Alkalmazások Calibre-Web Automated Automatizált e-könyv könyvtár - könyvfeldolgozás, formátumkonverzió és OPDS feed ● Fut books.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Még csak te éred el A doboz most cseréli le az alkalmazás ismert első jelszavát egy saját, generált jelszóra. Addig csak te éred el, amíg be vagy jelentkezve a vezérlőpultba – más nem léphet be az ismert jelszóval. Ha a csere nem sikerül, változtasd meg a jelszót kézzel, és jelezd itt, hogy megtetted. Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin felhasználónév Megjelenítés Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím books.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/record.json new file mode 100644 index 00000000..91ecb21d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/record.json @@ -0,0 +1,131 @@ +{ + "app": "calibre-web", + "sub": "books", + "fixture": "CalibreWeb", + "started": "2026-10-24T20:09:27Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "ADMIN_USER", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/calibre-web/install", + "hu_len": 1558, + "en_len": 1432, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/calibre-web/install -> 200 'Calibre-Web Automated — Telepítés — Felhom.eu' | shot /root/shots/calibre-web-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 61, + "front_door": true, + "seconds_to_front_door": 61 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fbooks.tester4.test%2F", + "http_port_80": "301 https://books.tester4.test/", + "guide": { + "path": "/apps/calibre-web/guide", + "hu_len": 3464, + "en_len": 3256, + "english_words_in_hu": [ + "password", + "settings", + "with" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/calibre-web", + "hu_len": 829, + "en_len": 817, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/calibre-web/guide -> 200 'Calibre-Web Automated — Felhom.eu' | shot /root/shots/calibre-web-after-guide-phone-hu.png hscroll=False", + "goto https://books.tester4.test/login?next=%2F -> 200 'Calibre-Web Automated | Belépés' | shot /root/shots/calibre-web-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"6.120653813s\", \"last_run\": \"2026-10-24T20:11:24.293163691Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "calibre-web": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 3, + "sample": [ + "calibre-web: Setting up desktop integration failed with error:", + "calibre-web: \tTraceback (most recent call last):", + "calibre-web: * Setting up desktop integration failed with error:" + ] + }, + "mem_peak_mib": { + "calibre-web": 165.4 + }, + "mem_anon_peak_mib": { + "calibre-web": 148.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 280 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-front-desktop-hu.png new file mode 100644 index 00000000..77b9a1ba Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-guide-phone-hu.png new file mode 100644 index 00000000..fee70bbc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-desktop-en.png new file mode 100644 index 00000000..6a30a85b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-phone-hu.png new file mode 100644 index 00000000..edf76476 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/screens/calibre-web-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/walk.log new file mode 100644 index 00000000..355efe49 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/run-2/walk.log @@ -0,0 +1,12 @@ +20:09:48Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD'] +20:09:48Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:10:48Z [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'} +20:10:48Z gate: books is gated — passed as the household (cookie set) +20:10:48Z [1] installed: deployed 61 s, front door 61 s +20:10:49Z calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install) +20:10:54Z calibre-web: after_install :: to False (Standard/LDAP login) Username 'admin' not valid, can't change password +20:11:18Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:12:10Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +20:12:19Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD', 'HDD_PATH'] +20:14:19Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +20:14:28Z == calibre-web done in 280 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-front-desktop-hu.png new file mode 100644 index 00000000..77b9a1ba Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-guide-phone-hu.png new file mode 100644 index 00000000..fee70bbc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-desktop-en.png new file mode 100644 index 00000000..6a30a85b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-phone-hu.png new file mode 100644 index 00000000..edf76476 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/screens/calibre-web-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/calibre-web/walk.log b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/walk.log new file mode 100644 index 00000000..55e26b67 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/calibre-web/walk.log @@ -0,0 +1,19 @@ +21:04:51Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD'] +21:04:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:06:06Z [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'} +21:06:07Z [1] installed: deployed 76 s, front door 76 s +21:06:08Z calibre-web: POST /upload http=200 {"location": "/tasks"} +21:06:08Z calibre-web: seeded book upg4d46f479e101 is in the library +21:06:14Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:06:14Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:06:38Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:07:30Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +21:07:39Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD', 'ADMIN_USER', 'HDD_PATH'] +21:08:55Z gate: books is gated — passed as the household (cookie set) +21:08:55Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:08:55Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:09:04Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +21:09:15Z calibre-web: the download is not a readable EPUB (http=401): File is not a zip file +21:09:15Z calibre-web: readback — listed=True download_link=True book_content_served=False +21:09:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'calibre-web', 'volumes_removed': ['calibre-web_calibre_web_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +21:10:08Z == calibre-web done in 317 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper.console.txt b/documentation/audits/catalog-sweep-2026-10-24/claper.console.txt new file mode 100644 index 00000000..6f8f3e5f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper.console.txt @@ -0,0 +1,16 @@ +14:54:18Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +14:54:18Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:55:44Z [1] deployed, controller state=running, pinned={'claper': 'ghcr.io/claperco/claper:2.5', 'claper-postgres': 'postgres:17-alpine'} +14:55:44Z [1] installed: deployed 86 s, front door 86 s +14:55:48Z claper: register_user :: DRILL_SEEDED=2 +14:55:52Z claper: seeded user drill-65a0659b@gate.invalid +14:56:00Z claper: readback — the seeded account authenticates=True +14:56:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:57:23Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'claper', 'volumes_removed': ['claper_claper_postgres_data', 'claper_claper_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verifi +14:57:32Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +14:59:10Z claper: readback — the seeded account authenticates=False +14:59:10Z claper: :: DRILL_ANSWER=false +14:59:10Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:59:48Z claper: readback — the seeded account authenticates=True +15:00:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'claper', 'volumes_removed': ['claper_claper_postgres_data', 'claper_claper_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás n +15:00:46Z == claper done in 387 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-en.txt new file mode 100644 index 00000000..b04aac4a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-en.txt @@ -0,0 +1 @@ +Claper — Guide — Felhom.eu ← Apps Claper Interactive presentations - live polls, questions and reactions ● Running Up to date claper.tester4.test Open ↗ What is it for? Presentations with live polls in them Collect questions from the room and show them Reactions and feedback as you go Upload and share PDF presentations A QR code, so the room can join quickly First steps Open claper.tester4.test in your browser Sign in as admin@claper.co with the first password shown on the settings page Upload a PDF presentation Share the code with the room A poll in your presentation The poll shows up on the phones in the room, and you can also show the result on the big screen. On the card of your event, select „Join”, then „Event manager”. Go to the slide you want the poll on. Select „Add interaction” and choose „Poll”. Type the question in „Title of your poll”, add the answers, and select „Create”. Show it on a TV or a projector The presentation runs in a separate window, and that is the one you put on the big screen. On the „Event manager” page, select „Open presentation”: a new window opens. Drag the new window to the TV or the projector, and press the F key for full screen. On the „Event manager” page, select the next slide: the window on the big screen follows. Questions from the room The people in the room can send you messages and questions from their phones. The „Messages” tab of the „Event manager” page shows what they wrote. On the „Questions” tab you find the questions on their own. You can pin an important message: pinned ones collect on the „Pinned messages” tab. If you do not want anonymous messages, choose „Deny anonymous messages” in the settings. Results after the event At the end of the event, a report sums up what happened. On the card of your event, select „End”. On the card of the finished event, select „View report”. Here you see how many people took part, the poll results and the messages. With the „Export” buttons you can also download them as a table (CSV). Frequently asked questions Do the people in the room need an account or an app? No. They open claper.tester4.test on their phone and type the code, or scan the QR code. What file can I upload? A PDF, PPT or PPTX file of up to 15 MB. Claper does not show PowerPoint animations, so it is better to save the presentation as a PDF. Can I use an earlier event again? Yes. On the card of the event, open the „More options” menu and choose „Duplicate”. Can someone help me run the event? Yes. When you edit the event, enter their e-mail address under „Add facilitator”. Once they create an account with that address, they can manage the event too, but they cannot delete it. Are my events backed up? The events and the uploaded presentations are on the box. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-hu.txt new file mode 100644 index 00000000..8ff1365e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-guide-hu.txt @@ -0,0 +1 @@ +Claper — Felhom.eu ← Alkalmazások Claper Interaktív prezentáció - szavazás, kérdések és reakciók élőben ● Fut Naprakész claper.tester4.test Megnyitás ↗ Mire használható? Interaktív prezentációk élő szavazásokkal Közönség kérdéseinek gyűjtése és megjelenítése Reakciók és visszajelzések valós időben PDF prezentációk feltöltése és megosztása QR kód a közönség gyors csatlakozásához Első lépések Nyisd meg a claper.tester4.test címet a böngészőben Lépj be az admin@claper.co fiókkal és a Beállítások oldalon látható első jelszóval Tölts fel egy PDF prezentációt Oszd meg a kódot a közönséggel Szavazás a prezentációban A szavazás a közönség telefonján jelenik meg, az eredményt pedig a kivetítőn is mutathatod. Az eseményed kártyáján kattints a „Csatlakozás” gombra, majd az „Eseménykezelő” pontra. Lépj arra a diára, amelyikhez a szavazást szeretnéd. Kattints az „Interakció hozzáadása” gombra, és válaszd a „Szavazás” lehetőséget. Írd be a kérdést „A szavazás címe” mezőbe, add meg a válaszokat, és kattints a „Létrehozás” gombra. Kivetítés tévére vagy projektorra A prezentáció külön ablakban fut, ezt teszed a nagy képernyőre. Az „Eseménykezelő” oldalon kattints a „Prezentáció megnyitása” gombra: új ablak nyílik. Húzd az új ablakot a tévére vagy a projektorra, és nyomd meg az F billentyűt a teljes képernyőhöz. Az „Eseménykezelő” oldalon kattints a következő diára: a kivetített ablak is odalép. Kérdések a közönségtől A közönség a telefonjáról írhat neked üzenetet és kérdést. Az „Eseménykezelő” oldal „Üzenetek” lapján látod, mit írtak. A „Kérdések” lapon a kérdéseket külön is megtalálod. Egy fontos üzenetet kitűzhetsz: ezek a „Kitűzött üzenetek” lapon gyűlnek. Ha nem kérsz névtelen üzenetet, a beállításoknál válaszd a „Névtelen üzenetek tiltása” lehetőséget. Eredmények az esemény után Az esemény végén egy jelentés összegzi, mi történt. Az eseményed kártyáján kattints a „Befejezés” gombra. A befejezett esemény kártyáján kattints a „Jelentés megtekintése” gombra. Itt látod a résztvevők számát, a szavazások eredményét és az üzeneteket. Az „Exportálás” gombokkal táblázatként (CSV) is letöltheted őket. Gyakori kérdések Kell a közönségnek fiók vagy külön app? Nem. Elég, ha a telefonján megnyitja a claper.tester4.test címet, és beírja a kódot, vagy beolvassa a QR kódot. Milyen fájlt tölthetek fel? PDF, PPT vagy PPTX fájlt, legfeljebb 15 MB méretig. A PowerPoint animációit a Claper nem jeleníti meg, ezért jobb, ha PDF-be mented a prezentációt. Újra használhatok egy korábbi eseményt? Igen. Az esemény kártyáján nyisd meg a „További lehetőségek” menüt, és válaszd a „Másolat” pontot. Segíthet valaki a lebonyolításban? Igen. Az esemény szerkesztésekor a „Facilitátor hozzáadása” résznél add meg az e-mail címét. Ha ezzel a címmel fiókot hoz létre, ő is kezelheti az eseményt, de nem törölheti. Mentődnek az eseményeim? Az események és a feltöltött prezentációk a dobozon vannak. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-en.txt new file mode 100644 index 00000000..35543a92 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-en.txt @@ -0,0 +1 @@ +Claper — Install — Felhom.eu ← Back Claper — Install Interactive presentations that bring the room in ~250M RAM Full description, screenshots Memory 250 MB / 7479 MB (3%) Current usage (0 MB) Claper (+250 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password (admin@claper.co) * cannot be changed after install 👁 Generate For the first sign-in: admin@claper.co and this password. Change it in your account afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-hu.txt new file mode 100644 index 00000000..3994e2d2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-install-hu.txt @@ -0,0 +1 @@ +Claper — Telepítés — Felhom.eu ← Vissza Claper — Telepítés Interaktív prezentáció és közönség bevonás ~250M RAM Részletes leírás, képernyőképek Memória 250 MB / 7479 MB (3%) Jelenlegi használat (0 MB) Claper (+250 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó (admin@claper.co) * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: admin@claper.co és ez a jelszó. Utána a fiókodban módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-en.txt new file mode 100644 index 00000000..093fef62 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-en.txt @@ -0,0 +1 @@ +Claper — Settings — Felhom.eu ← Apps Claper Interactive presentations - live polls, questions and reactions ● Running Up to date claper.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password (admin@claper.co) Show Address and keys These were created at install time and cannot be changed. Address claper.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-hu.txt new file mode 100644 index 00000000..9ec91028 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/page-overview-hu.txt @@ -0,0 +1 @@ +Claper — Felhom.eu ← Alkalmazások Claper Interaktív prezentáció - szavazás, kérdések és reakciók élőben ● Fut Naprakész claper.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó (admin@claper.co) Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím claper.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/record.json b/documentation/audits/catalog-sweep-2026-10-24/claper/record.json new file mode 100644 index 00000000..b122d332 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/record.json @@ -0,0 +1,139 @@ +{ + "app": "claper", + "sub": "claper", + "fixture": "Claper", + "started": "2026-10-24T14:54:01Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY_BASE", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/claper/install", + "hu_len": 1140, + "en_len": 1056, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/claper/install -> 200 'Claper — Telepítés — Felhom.eu' | shot /root/shots/claper-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/claper/install -> 200 'Claper — Telepítés — Felhom.eu' | shot /root/shots/claper-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 86, + "front_door": true, + "seconds_to_front_door": 86 + }, + "stranger": "200", + "http_port_80": "301 https://claper.tester4.test/", + "guide": { + "path": "/apps/claper/guide", + "hu_len": 3015, + "en_len": 2872, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/claper", + "hu_len": 496, + "en_len": 476, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/claper/guide -> 200 'Claper — Felhom.eu' | shot /root/shots/claper-after-guide-phone-hu.png hscroll=False", + "goto https://claper.tester4.test/ -> 200 'Csatlakozás · Claper' | shot /root/shots/claper-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"18.877701057s\", \"last_run\": \"2026-10-24T14:56:39.778824329Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 30, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"claper\", \"started_at\": \"2026-10-24T14:59:10.225751049Z\", \"last\": {\"op\": \"restore\", \"stack\": \"claper\", \"ok\": true, \"message\": \"A(z) claper: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:59:39.07917955Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "claper": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "claper-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "claper": 214.4, + "claper-postgres": 52.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 387 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-front-desktop-hu.png new file mode 100644 index 00000000..23efab41 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-guide-phone-hu.png new file mode 100644 index 00000000..45d126bc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-desktop-en.png new file mode 100644 index 00000000..3500f160 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-phone-hu.png new file mode 100644 index 00000000..44f0e7c2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/claper/screens/claper-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/claper/walk.log b/documentation/audits/catalog-sweep-2026-10-24/claper/walk.log new file mode 100644 index 00000000..6f8f3e5f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/claper/walk.log @@ -0,0 +1,16 @@ +14:54:18Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +14:54:18Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:55:44Z [1] deployed, controller state=running, pinned={'claper': 'ghcr.io/claperco/claper:2.5', 'claper-postgres': 'postgres:17-alpine'} +14:55:44Z [1] installed: deployed 86 s, front door 86 s +14:55:48Z claper: register_user :: DRILL_SEEDED=2 +14:55:52Z claper: seeded user drill-65a0659b@gate.invalid +14:56:00Z claper: readback — the seeded account authenticates=True +14:56:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:57:23Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'claper', 'volumes_removed': ['claper_claper_postgres_data', 'claper_claper_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verifi +14:57:32Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +14:59:10Z claper: readback — the seeded account authenticates=False +14:59:10Z claper: :: DRILL_ANSWER=false +14:59:10Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:59:48Z claper: readback — the seeded account authenticates=True +15:00:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'claper', 'volumes_removed': ['claper_claper_postgres_data', 'claper_claper_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás n +15:00:46Z == claper done in 387 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server.console.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server.console.txt new file mode 100644 index 00000000..aef4a21a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server.console.txt @@ -0,0 +1,10 @@ +20:14:49Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +20:14:49Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:15:34Z [1] deployed, controller state=running, pinned={'code-server': 'lscr.io/linuxserver/code-server:4.129.0'} +20:15:35Z [1] installed: deployed 45 s, front door 46 s +20:15:35Z [3] no fixture for this app — the front door answering is the smallest honest check +20:15:59Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:16:44Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'code-server', 'volumes_removed': ['code-server_codeserver_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messa +20:16:52Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +20:18:21Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'code-server', 'volumes_removed': ['code-server_codeserver_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ad +20:18:29Z == code-server done in 220 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server.failed-remove.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server.failed-remove.txt new file mode 100644 index 00000000..dd278058 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server.failed-remove.txt @@ -0,0 +1,9 @@ +state before: {"deployed": false, "state": "not_deployed"} +remove 200 {"ok": true, "data": {"removed": "code-server", "volumes_removed": [], "hdd_paths_removed": [], "hdd_paths_preserved": [], "hdd_note": "Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni.", "userdata_kept": [], "verified": true}, "message": "Stack code-server removed +total 24 +drwxr-xr-x 2 root root 4096 Oct 24 16:19 . +drwxr-xr-x 69 root root 4096 Oct 24 12:45 .. +-rw-r--r-- 1 root root 9546 Oct 24 12:45 .felhom.yml +-rw-r--r-- 1 root root 1793 Oct 24 12:45 docker-compose.yml +no-volume + diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/console.txt new file mode 100644 index 00000000..7c62b39f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/console.txt @@ -0,0 +1,4 @@ +16:01:35Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +16:01:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:09:08Z [1] never became deployed (last controller state='not_deployed') +16:09:11Z == code-server done in 456 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-en.txt new file mode 100644 index 00000000..8ca95319 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-en.txt @@ -0,0 +1 @@ +Code-Server — Install — Felhom.eu ← Back Code-Server — Install VS Code in your browser - write code from anywhere ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Code-Server (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Access password * 👁 Generate The sign-in password for the editor. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-hu.txt new file mode 100644 index 00000000..4e8996a0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Code-Server — Telepítés — Felhom.eu ← Vissza Code-Server — Telepítés VS Code a böngészőben - kódolás bárhonnan ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Code-Server (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Hozzáférési jelszó * 👁 Generálás Bejelentkezési jelszó a szerkesztőhöz. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/record.json new file mode 100644 index 00000000..76dc1bbd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/record.json @@ -0,0 +1,50 @@ +{ + "app": "code-server", + "sub": "code-server", + "fixture": null, + "started": "2026-10-24T16:01:18Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/code-server/install", + "hu_len": 952, + "en_len": 874, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/code-server/install -> 200 'Code-Server — Telepítés — Felhom.eu' | shot /root/shots/code-server-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/code-server/install -> 200 'Code-Server — Telepítés — Felhom.eu' | shot /root/shots/code-server-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": false, + "seconds_to_deployed": 453 + }, + "verdict_hint": "install failed", + "mem_peak_mib": {}, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "/opt/docker/stacks/code-server/app.yaml", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 456 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-desktop-en.png new file mode 100644 index 00000000..29f059d3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-phone-hu.png new file mode 100644 index 00000000..ef513e06 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/screens/code-server-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/walk.log new file mode 100644 index 00000000..7c62b39f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/first-run/walk.log @@ -0,0 +1,4 @@ +16:01:35Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +16:01:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:09:08Z [1] never became deployed (last controller state='not_deployed') +16:09:11Z == code-server done in 456 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-en.txt new file mode 100644 index 00000000..58222e4b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-en.txt @@ -0,0 +1 @@ +Code-Server — Guide — Felhom.eu ← Apps Code-Server VS Code in your browser - a full development setup from anywhere ● Running Up to date code-server.tester4.test Open ↗ What is it for? Write code from anywhere, on any device, in a browser Everything VS Code does - extensions, terminal, debugging Works over a slow connection too The same setup whichever machine you sit at Usable on a tablet and on an iPad First steps Open code-server.tester4.test in your browser Enter the access password Open the terminal (Ctrl+`) and install your tools Install extensions in the Extensions panel Before you start An x86 processor is needed for the best speed At least 1 GB of free RAM is recommended Upload and download files You can easily move files from your computer into code-server, and back. Open the „Explorer” view on the left. Right-click a folder and choose „Upload...”. You can also upload a file by dragging it from your computer into a folder in the „Explorer”. To download, right-click the file or folder and choose „Download...”. Get a Git repository You can get an existing project from its Git address in one step. Press F1, type Git: Clone, and choose the „Clone” command. Paste the address of the repository and press Enter. Choose the folder the project goes into, for example the workspace folder. When it is done, code-server asks whether to open the project. Use it as an app The browser catches many keyboard shortcuts, but installed as an app, code-server gets them. Open code-server.tester4.test in Chrome. Select the install icon in the address bar and confirm. From then on code-server starts in its own window, and the keyboard shortcuts work in it. On an iPad, add it to the home screen from the share menu in Safari. Set the look You can set the colours to your own taste. Press F1 and type Color Theme. Choose the „Color Theme” command. As you move with the arrow keys you see each theme at once; Enter picks it. Frequently asked questions Where are my files? code-server opens the workspace folder; the box set this up. What is in it stays on the box, after a restart too. Why does sudo not work? Here code-server runs without administrator (sudo) rights, so you cannot install system packages. This is how the box sets it up. Why is an extension missing? code-server does not use Microsoft's extension store but Open VSX. Some closed extensions, for example Live Share, are not available here. How do I change the password? On the dashboard, on code-server's „Settings” tab, you can change the access password. I typed the password wrong a few times and it does not let me in. What happened? code-server allows two tries a minute, plus twelve more an hour. Wait a little and try again with the right password. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-hu.txt new file mode 100644 index 00000000..ada9261e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-guide-hu.txt @@ -0,0 +1 @@ +Code-Server — Felhom.eu ← Alkalmazások Code-Server VS Code a böngészőben - teljes fejlesztői környezet bárhonnan ● Fut Naprakész code-server.tester4.test Megnyitás ↗ Mire használható? Kódolás bárhonnan, bármilyen eszközről böngészőben VS Code teljes funkcionalitás - bővítmények, terminál, debug Távoli fejlesztés alacsony sávszélességű kapcsolaton is Egységes fejlesztői környezet több eszközről Tableten és iPaden is használható Első lépések Nyisd meg a code-server.tester4.test címet a böngészőben Add meg a hozzáférési jelszót Nyisd meg a terminált (Ctrl+`) és telepíts eszközöket Telepíts bővítményeket az Extensions panelben Előfeltételek x86 processzor szükséges a legjobb teljesítményhez Legalább 1 GB szabad RAM ajánlott Fájlok feltöltése és letöltése A gépeden lévő fájlokat egyszerűen átteheted a code-serverbe, és vissza. Nyisd meg a bal oldali „Explorer” (Fájlkezelő) nézetet. Kattints jobb gombbal egy mappára, és válaszd az „Upload...” (Feltöltés) pontot. Fájlt úgy is feltölthetsz, hogy a gépedről behúzod az „Explorer” egyik mappájába. Letöltéshez kattints jobb gombbal a fájlra vagy mappára, és válaszd a „Download...” (Letöltés) pontot. Git tároló letöltése Egy meglévő projektet a Git címéből egy lépésben letölthetsz. Nyomd meg az F1 billentyűt, írd be: Git: Clone, és válaszd a „Clone” (Klónozás) parancsot. Illeszd be a tároló címét, és nyomd meg az Entert. Válaszd ki a mappát, ahová a projekt kerüljön, például a workspace mappát. Ha kész, a code-server megkérdezi, megnyissa-e a projektet. Használat alkalmazásként A böngésző sok gyorsbillentyűt elfog, alkalmazásként telepítve viszont a code-server kapja meg őket. Nyisd meg a code-server.tester4.test címet Chrome-ban. Kattints a címsorban a telepítés ikonra, és erősítsd meg. Ezután a code-server saját ablakban indul, és a gyorsbillentyűk benne működnek. iPaden a Safari megosztás menüjében add hozzá a kezdőképernyőhöz. Kinézet beállítása A színeket a saját ízlésedre állíthatod. Nyomd meg az F1 billentyűt, és írd be: Color Theme. Válaszd a „Color Theme” (Színtéma) parancsot. A nyilakkal lapozva azonnal látod a témát; az Enterrel választod ki. Gyakori kérdések Hol vannak a fájljaim? A code-server a workspace mappát nyitja meg, ezt a doboz állította be. Ami itt van, a dobozon marad, az újraindítás után is. Miért nem működik a sudo? A code-server itt rendszergazdai (sudo) jog nélkül fut, így rendszercsomagot nem tudsz telepíteni. Ez a doboz alapbeállítása. Miért hiányzik egy bővítmény? A code-server nem a Microsoft bővítményboltját használja, hanem az Open VSX-et. Néhány zárt bővítmény, például a Live Share, itt nem érhető el. Hogyan változtatom meg a jelszót? A vezérlőpulton, a code-server „Beállítások” fülén módosíthatod a hozzáférési jelszót. Többször elrontottam a jelszót, és nem enged be. Mi történt? A code-server percenként két, óránként további tizenkét próbát enged. Várj egy kicsit, és próbáld újra a helyes jelszóval. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-en.txt new file mode 100644 index 00000000..8ca95319 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-en.txt @@ -0,0 +1 @@ +Code-Server — Install — Felhom.eu ← Back Code-Server — Install VS Code in your browser - write code from anywhere ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Code-Server (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Access password * 👁 Generate The sign-in password for the editor. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-hu.txt new file mode 100644 index 00000000..4e8996a0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-install-hu.txt @@ -0,0 +1 @@ +Code-Server — Telepítés — Felhom.eu ← Vissza Code-Server — Telepítés VS Code a böngészőben - kódolás bárhonnan ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Code-Server (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Hozzáférési jelszó * 👁 Generálás Bejelentkezési jelszó a szerkesztőhöz. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-en.txt new file mode 100644 index 00000000..841511dd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-en.txt @@ -0,0 +1 @@ +Code-Server — Settings — Felhom.eu ← Apps Code-Server VS Code in your browser - a full development setup from anywhere ● Running Up to date code-server.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Access password Show Address and keys These were created at install time and cannot be changed. Address code-server.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-hu.txt new file mode 100644 index 00000000..9dc02055 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/page-overview-hu.txt @@ -0,0 +1 @@ +Code-Server — Felhom.eu ← Alkalmazások Code-Server VS Code a böngészőben - teljes fejlesztői környezet bárhonnan ● Fut Naprakész code-server.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Hozzáférési jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím code-server.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/record.json b/documentation/audits/catalog-sweep-2026-10-24/code-server/record.json new file mode 100644 index 00000000..ac899214 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/record.json @@ -0,0 +1,115 @@ +{ + "app": "code-server", + "sub": "code-server", + "fixture": null, + "started": "2026-10-24T20:14:29Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/code-server/install", + "hu_len": 952, + "en_len": 874, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/code-server/install -> 200 'Code-Server — Telepítés — Felhom.eu' | shot /root/shots/code-server-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/code-server/install -> 200 'Code-Server — Telepítés — Felhom.eu' | shot /root/shots/code-server-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 45, + "front_door": true, + "seconds_to_front_door": 46 + }, + "stranger": "302 https://192.168.0.157/login", + "http_port_80": "301 https://code-server.tester4.test/", + "guide": { + "path": "/apps/code-server/guide", + "hu_len": 2961, + "en_len": 2772, + "english_words_in_hu": [ + "open" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/code-server", + "hu_len": 442, + "en_len": 437, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/code-server/guide -> 200 'Code-Server — Felhom.eu' | shot /root/shots/code-server-after-guide-phone-hu.png hscroll=False", + "goto https://code-server.tester4.test/login -> 200 'code-server login' | shot /root/shots/code-server-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.443997828s\", \"last_run\": \"2026-10-24T20:16:03.488774647Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "code-server": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "code-server": 88.5 + }, + "mem_anon_peak_mib": { + "code-server": 81.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 220 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-front-desktop-hu.png new file mode 100644 index 00000000..d0613bc1 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-guide-phone-hu.png new file mode 100644 index 00000000..810429b4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-desktop-en.png new file mode 100644 index 00000000..29f059d3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-phone-hu.png new file mode 100644 index 00000000..ef513e06 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/code-server/screens/code-server-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/code-server/walk.log b/documentation/audits/catalog-sweep-2026-10-24/code-server/walk.log new file mode 100644 index 00000000..aef4a21a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/code-server/walk.log @@ -0,0 +1,10 @@ +20:14:49Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +20:14:49Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:15:34Z [1] deployed, controller state=running, pinned={'code-server': 'lscr.io/linuxserver/code-server:4.129.0'} +20:15:35Z [1] installed: deployed 45 s, front door 46 s +20:15:35Z [3] no fixture for this app — the front door answering is the smallest honest check +20:15:59Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:16:44Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'code-server', 'volumes_removed': ['code-server_codeserver_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messa +20:16:52Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PASSWORD'] +20:18:21Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'code-server', 'volumes_removed': ['code-server_codeserver_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ad +20:18:29Z == code-server done in 220 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller.console.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller.console.txt new file mode 100644 index 00000000..e80b40bb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller.console.txt @@ -0,0 +1,14 @@ +17:49:08Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['CRAFTY_PASSWORD'] +17:49:08Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:50:24Z [1] deployed, controller state=running, pinned={'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.11.0'} +17:50:24Z [1] installed: deployed 76 s, front door 76 s +17:50:24Z crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}} +17:50:25Z crafty: readback of the seeded role http=200 found=True (roles listed: 1) +17:50:48Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:51:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'crafty-controller', 'volumes_removed': ['crafty-controller_crafty_backups', 'crafty-controller_crafty_config', 'crafty-controller_crafty_import', 'crafty-controller_c +17:51:41Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['CRAFTY_PASSWORD'] +17:52:47Z crafty: readback of the seeded role http=200 found=False (roles listed: 0) +17:52:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:53:07Z crafty: readback of the seeded role http=200 found=True (roles listed: 1) +17:53:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'crafty-controller', 'volumes_removed': ['crafty-controller_crafty_backups', 'crafty-controller_crafty_config', 'crafty-controller_crafty_import', 'crafty-controller_c +17:53:57Z == crafty-controller done in 289 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-en.txt new file mode 100644 index 00000000..2a8137fd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-en.txt @@ -0,0 +1 @@ +Crafty Controller — Guide — Felhom.eu ← Apps Crafty Controller A Minecraft server manager - build your own world ● Running minecraft.tester4.test Open ↗ What is it for? Create and run a Minecraft server from a web page Run several servers side by side (Java and Bedrock) Backups and scheduled restarts happen on their own Manage players and reach the console Handle the server files from your browser First steps Open minecraft.tester4.test in your browser The first sign-in details are on this page, under Initial sign-in details Create a new Minecraft server with the wizard Set the server options (game mode, difficulty and the rest) Set the server port inside the range 25565-25575 (server.properties -> server-port); the first server uses 25565 and the rest 25566-25575 On your home network, connect to the server's local IP address and port (192.168.x.x:25565, for example) - the Minecraft client's local network search does not list it on its own, so type the address in by hand Reaching it over the internet needs port forwarding to the port or ports you chose - ask whoever runs the network Before you start At least 2 GB of free RAM is recommended (the Minecraft server + Crafty) An x86 processor is needed (it does not run on a Raspberry Pi) Minecraft servers may use the port range 25565-25575 (at most 11 servers at once) Start and stop the server The Minecraft server only lets players in while it is running. On the „Dashboard” page, select the name of the server. On the „Terminal” tab, select „Start”. Once the server is up, the „Dashboard” page shows it as „Online”. To stop it use „Stop”, to restart it use „Restart”. Commands on the server console On the console you can give the server commands, as if you were an operator in the game. Open the „Terminal” tab of the server. Type the command without a slash in „Enter your command”, for example: say Hello. Select „Send command”, and the answer shows on the console. On a Java server, the whitelist on command lets in only the players on the list; you add a friend with whitelist add followed by their player name. A scheduled restart A daily restart keeps the server fresh, and Crafty does it by itself. On the server's page, open the „Schedule” tab and select „Create New Schedule”. Give the schedule a name, and in „Action” choose „Restart Server”. In „Interval” type 1, choose „Days” next to it, and in „Time” pick a night-time hour. Select „Save”. Set your own password It is worth swapping the first password for one of your own that you can remember. Select the user menu at the top right and choose „Account Settings”. Type the new password in „New Password” and in „Confirm Password”. Select „Save”. The Felhom dashboard still shows the first password after this, and that one no longer works. Frequently asked questions Why is the server slow, or why does it stop? Crafty and the Minecraft servers share at most 2 GB of memory on the box. Run one smaller server at a time, and when you create a server, keep „Maximum Memory” below that. Where can I edit the server settings? On the server's „Files” tab you see its files and can edit them, for example server.properties. A change takes effect after the server restarts. How do I add a file of my own, for example a world or a mod? On the server's „Files” tab, open the target folder and use the „Upload” button. How many servers can I run? Because of the ports, at most eleven, in the 25565–25575 range. Because of the memory, rather only one or two at a time. Is my world backed up? The server files are on the box. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-hu.txt new file mode 100644 index 00000000..44932aa5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-guide-hu.txt @@ -0,0 +1 @@ +Crafty Controller — Felhom.eu ← Alkalmazások Crafty Controller Minecraft szerver kezelő - hozd létre a saját világodat ● Fut minecraft.tester4.test Megnyitás ↗ Mire használható? Minecraft szerver létrehozása és kezelése webes felületen Több szerver párhuzamos futtatása (Java és Bedrock) Automatikus mentések és ütemezett újraindítás Játékos menedzsment és konzol hozzáférés Szerver fájlok kezelése böngészőből Első lépések Nyisd meg a minecraft.tester4.test címet a böngészőben A kezdeti belépési adatokat ezen az oldalon (Kezdeti belépési adatok) találod Hozz létre egy új Minecraft szervert a varázslóval Állítsd be a szerver beállításokat (játékmód, nehézség, stb.) Állítsd be a szerver portját a 25565–25575 tartományon belül (server.properties → server-port); az első szerver a 25565-öt használja, a továbbiak 25566–25575-öt Helyi hálózaton csatlakozz a szerver helyi IP-címére és portjára (pl. 192.168.x.x:25565). A Minecraft kliens „helyi hálózat keresése” nem listázza automatikusan, add meg kézzel a címet Interneten keresztüli eléréshez port-továbbítás szükséges a választott port(ok)ra. Egyeztess az üzemeltetővel. Előfeltételek Legalább 2 GB szabad RAM ajánlott (Minecraft szerver + Crafty) x86 processzor szükséges (nem fut Raspberry Pi-n) A Minecraft szerverek a 25565–25575 porttartományt használhatják (egyszerre legfeljebb 11 szerver) A szerver indítása és leállítása A Minecraft szerver csak akkor fogad játékosokat, ha fut. A „Dashboard” (Irányítópult) oldalon kattints a szerver nevére. A „Terminal” (Terminál) lapon kattints a „Start” (Indítás) gombra. Ha a szerver elindult, a „Dashboard” oldalon „Online” állapotot látsz. Leállításhoz a „Stop” (Leállítás), újraindításhoz a „Restart” (Újraindítás) gombot használd. Parancsok a szerverkonzolon A konzolon úgy adhatsz parancsot a szervernek, mintha játékon belül rendszergazda lennél. Nyisd meg a szerver „Terminal” lapját. Írd be a parancsot perjel nélkül az „Enter your command” (parancs) mezőbe, például: say Sziasztok. Kattints a „Send command” (Parancs küldése) gombra, és a válasz megjelenik a konzolon. Java szerveren a whitelist on paranccsal csak a listán szereplők léphetnek be; egy barátot a whitelist add parancs után a játékosnevével adsz hozzá. Ütemezett újraindítás Egy napi újraindítás frissen tartja a szervert, és ezt a Crafty magától elvégzi. A szerver oldalán nyisd meg a „Schedule” (Ütemezés) lapot, és kattints a „Create New Schedule” (Új ütemezés) gombra. Adj nevet az ütemezésnek, és az „Action” (Művelet) mezőben válaszd a „Restart Server” (szerver újraindítása) lehetőséget. Az „Interval” (Gyakoriság) mezőbe írj 1-et, mellette válaszd a „Days” (nap) értéket, a „Time” (Idő) mezőben pedig egy éjszakai időpontot. Kattints a „Save” (Mentés) gombra. Saját jelszó beállítása A kezdeti jelszót érdemes egy saját, megjegyezhető jelszóra cserélni. Kattints jobb fent a felhasználói menüre, és válaszd az „Account Settings” (Fiókbeállítások) pontot. Írd be az új jelszót a „New Password” (Új jelszó) és a „Confirm Password” (Jelszó megerősítése) mezőbe. Kattints a „Save” gombra. A Felhom vezérlőpultja ezután is a kezdeti jelszót mutatja, az már nem érvényes. Gyakori kérdések Miért lassú vagy áll le a szerver? A Crafty és a Minecraft szerverek együtt legfeljebb 2 GB memóriát kapnak a dobozon. Egyszerre egy kisebb szervert futtass, és a szerver létrehozásakor a „Maximum Memory” (legtöbb memória) értéket hagyd ez alatt. Hol szerkeszthetem a szerver beállításait? A szerver „Files” (Fájlok) lapján látod és szerkesztheted a fájlokat, például a server.properties fájlt. A módosítás a szerver újraindítása után él. Hogyan teszek fel saját fájlt, például egy világot vagy egy modot? A szerver „Files” lapján nyisd meg a célmappát, és használd az „Upload” (Feltöltés) gombot. Hány szervert futtathatok? A portok miatt legfeljebb tizenegyet, a 25565–25575 tartományban. A memória miatt egyszerre inkább csak egyet-kettőt. Mentődik a világom? A szerverek fájljai a dobozon vannak. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-en.txt new file mode 100644 index 00000000..dc8316ac --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-en.txt @@ -0,0 +1 @@ +Crafty Controller — Install — Felhom.eu ← Back Crafty Controller — Install A Minecraft server manager with a web interface ~256M RAM Full description, screenshots Memory 256 MB / 7479 MB (3%) Current usage (0 MB) Crafty Controller (+256 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password * cannot be changed after install 👁 Generate The first password of Crafty's admin user (admin) - this is what signs you in Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-hu.txt new file mode 100644 index 00000000..14cd020c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-install-hu.txt @@ -0,0 +1 @@ +Crafty Controller — Telepítés — Felhom.eu ← Vissza Crafty Controller — Telepítés Minecraft szerver kezelő webes felülettel ~256M RAM Részletes leírás, képernyőképek Memória 256 MB / 7479 MB (3%) Jelenlegi használat (0 MB) Crafty Controller (+256 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó * telepítés után nem módosítható 👁 Generálás A Crafty admin felhasználó (admin) kezdeti jelszava: ezzel tudsz belépni a kezelőfelületre Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-en.txt new file mode 100644 index 00000000..7812a68e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-en.txt @@ -0,0 +1 @@ +Crafty Controller — Settings — Felhom.eu ← Apps Crafty Controller A Minecraft server manager - build your own world ● Running minecraft.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password Show Address and keys These were created at install time and cannot be changed. Address minecraft.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-hu.txt new file mode 100644 index 00000000..82aa87d6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/page-overview-hu.txt @@ -0,0 +1 @@ +Crafty Controller — Felhom.eu ← Alkalmazások Crafty Controller Minecraft szerver kezelő - hozd létre a saját világodat ● Fut minecraft.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím minecraft.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/record.json b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/record.json new file mode 100644 index 00000000..81ca569b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/record.json @@ -0,0 +1,126 @@ +{ + "app": "crafty-controller", + "sub": "minecraft", + "fixture": "Crafty", + "started": "2026-10-24T17:48:48Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "CRAFTY_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/crafty-controller/install", + "hu_len": 1047, + "en_len": 961, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/crafty-controller/install -> 200 'Crafty Controller — Telepítés — Felhom.eu' | shot /root/shots/crafty-controller-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/crafty-controller/install -> 200 'Crafty Controller — Telepítés — Felhom.eu' | shot /root/shots/crafty-controller-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 76 + }, + "stranger": "302 https://192.168.0.157/panel/dashboard", + "http_port_80": "301 https://minecraft.tester4.test/", + "guide": { + "path": "/apps/crafty-controller/guide", + "hu_len": 4089, + "en_len": 3666, + "english_words_in_hu": [ + "password", + "settings", + "your" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/crafty-controller", + "hu_len": 428, + "en_len": 418, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/crafty-controller/guide -> 200 'Crafty Controller — Felhom.eu' | shot /root/shots/crafty-controller-after-guide-phone-hu.png hscroll=False", + "goto https://minecraft.tester4.test/login?next=%2Fpanel%2Fdashboard -> 200 'Crafty Controller' | shot /root/shots/crafty-controller-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.339827255s\", \"last_run\": \"2026-10-24T17:50:52.38506672Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"crafty-controller\", \"started_at\": \"2026-10-24T17:52:47.139146458Z\", \"last\": {\"op\": \"restore\", \"stack\": \"crafty-controller\", \"ok\": true, \"message\": \"A(z) crafty-controller: 5 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T17:53:04.988005257Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "crafty-controller": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "crafty-controller": 78.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 289 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-front-desktop-hu.png new file mode 100644 index 00000000..134e3409 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-guide-phone-hu.png new file mode 100644 index 00000000..1928b137 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-desktop-en.png new file mode 100644 index 00000000..b9cbe83b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-phone-hu.png new file mode 100644 index 00000000..d73e31fb Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/screens/crafty-controller-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/walk.log b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/walk.log new file mode 100644 index 00000000..e80b40bb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/crafty-controller/walk.log @@ -0,0 +1,14 @@ +17:49:08Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['CRAFTY_PASSWORD'] +17:49:08Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:50:24Z [1] deployed, controller state=running, pinned={'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.11.0'} +17:50:24Z [1] installed: deployed 76 s, front door 76 s +17:50:24Z crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}} +17:50:25Z crafty: readback of the seeded role http=200 found=True (roles listed: 1) +17:50:48Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:51:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'crafty-controller', 'volumes_removed': ['crafty-controller_crafty_backups', 'crafty-controller_crafty_config', 'crafty-controller_crafty_import', 'crafty-controller_c +17:51:41Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['CRAFTY_PASSWORD'] +17:52:47Z crafty: readback of the seeded role http=200 found=False (roles listed: 0) +17:52:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:53:07Z crafty: readback of the seeded role http=200 found=True (roles listed: 1) +17:53:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'crafty-controller', 'volumes_removed': ['crafty-controller_crafty_backups', 'crafty-controller_crafty_config', 'crafty-controller_crafty_import', 'crafty-controller_c +17:53:57Z == crafty-controller done in 289 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich.console.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich.console.txt new file mode 100644 index 00000000..331edc07 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich.console.txt @@ -0,0 +1,17 @@ +17:54:17Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +17:54:17Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:56:33Z [1] deployed, controller state=running, pinned={'dawarich': 'freikin/dawarich:1.15.3', 'dawarich-db': 'postgis/postgis:17-3.5-alpine', 'dawarich-redis': 'redis:7.4-alpine', 'dawarich-sidekiq': 'freikin/dawarich:1.15.3'} +17:56:33Z gate: timeline is gated — passed as the household (cookie set) +17:56:33Z [1] installed: deployed 136 s, front door 136 s +17:56:45Z dawarich: POST /api/v1/overland/batches http=201 (47.5748,19.0919 at 2026-09-14T04:37:00Z) +17:56:55Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +17:57:18Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:58:14Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:59:35Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +18:00:15Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'dawarich', 'volumes_removed': ['dawarich_dawarich_db_data', 'dawarich_dawarich_public', 'dawarich_dawarich_redis', 'dawarich_dawarich_storage', 'dawarich_dawarich_wat +18:00:24Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +18:03:57Z dawarich: readback http=200 found=False (controls: no key 401, wrong 401, empty range []) +18:03:57Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:05:23Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +18:06:10Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'dawarich', 'volumes_removed': ['dawarich_dawarich_db_data', 'dawarich_dawarich_public', 'dawarich_dawarich_redis', 'dawarich_dawarich_storage', 'dawarich_dawarich_wat +18:06:19Z == dawarich done in 722 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-en.txt new file mode 100644 index 00000000..2fae6851 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-en.txt @@ -0,0 +1 @@ +Dawarich — Guide — Felhom.eu ← Apps Dawarich Your own location history - your phone sends where you have been to your own server ● Running timeline.tester4.test Open ↗ No health check ran: no matching container. What is it for? Instead of Google Timeline: your location history on your own server A map, statistics and trips from every place you have been Google Takeout, GPX and GeoJSON import for your old data The Dawarich, Overland or OwnTracks app sends your phone location First steps Open timeline.tester4.test and sign in: demo@dawarich.app and the password shown on the settings page In your account settings, replace the e-mail address with your own - the demo@dawarich.app name is public Copy your API key from the settings Install the Dawarich app on your phone and enter: https://timeline.tester4.test and the API key Your browser loads the map tiles from the Dawarich map server; your location data stays on your server Load your old location history You can load your earlier location data, for example the timeline you downloaded from Google, from a file. In the top menu, open „My data” and choose „Imports”. Select „New import”. Choose the file, for example a Google JSON, GPX or ZIP file, and start the upload. Dawarich works out the format by itself. On the „Imports” page you can follow the processing; then the points show up on the map. Record a trip A trip ties a stretch of time together and shows on a map where you went. In the top menu, select „Trips”. Select „New trip”. Enter the name of the trip, its start and its end, and save it. On the trip's page, Dawarich draws the route from the points of that time. Statistics Dawarich adds up how much you have travelled. In the top menu, select „Stats”. Here you see the distance for each year („Total distance”) and the number of points recorded. The rest of the statistics is updated daily. To see a fresh import now, select „Update stats”. Add a family member Everyone gets their own account and sends their location from their own phone. Select your account menu at the top right and choose „Settings”. Open the „Users” tab and select „Add new user”. Fill in „Email” and „Password”, then select „Create”. The family member signs in and sets up the phone app with their own API key. They find the key on the „Account” page of the account menu. Frequently asked questions The file I downloaded from Google is too large. What do I do? Compress a file larger than 200 MB into a ZIP file before uploading. It is faster that way, and the upload does not break off. Who sees where I have been? Your location data stays on the box, and each account sees only its own points on the map. Your browser loads the map background from the Dawarich map server. Can I save my data to a file? Yes. On the „Points” page of the „My data” menu, the „Export” button makes a GeoJSON or GPX file. You find the finished file on the „Exports” page. Why is today's route not showing? The phone app sends the points. Check that the app has the right timeline.tester4.test address and API key, and that it may send in the background. Is my location data backed up? Your location data is on the box. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-hu.txt new file mode 100644 index 00000000..fdf500cc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-guide-hu.txt @@ -0,0 +1 @@ +Dawarich — Felhom.eu ← Alkalmazások Dawarich Saját helyelőzmények - a telefonod a te szerveredre küldi, hol jártál ● Fut timeline.tester4.test Megnyitás ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Mire használható? A Google Idővonal helyett: a helyelőzményeid a saját szervereden Térkép, statisztika és utazások az összes helyről, ahol jártál Google Takeout, GPX és GeoJSON import a régi adataidhoz A Dawarich, az Overland vagy az OwnTracks alkalmazás küldi a telefonod helyét Első lépések Nyisd meg a timeline.tester4.test címet, és jelentkezz be: demo@dawarich.app és a Beállítások oldalon látható jelszó A fiókod beállításaiban cseréld le az e-mail-címet a sajátodra - a demo@dawarich.app név nyilvános A beállításokban másold ki az API-kulcsodat Telepítsd a Dawarich alkalmazást a telefonodra, és add meg: https://timeline.tester4.test és az API-kulcsot A térkép csempéit a böngésződ a Dawarich térképszerveréről tölti le; a helyadataid a te szervereden maradnak Régi helyelőzmények betöltése A korábbi helyadataidat, például a Google-től letöltött idővonalat, egy fájlból töltheted be. A felső menüben nyisd meg a „My data” (Saját adatok) menüt, és válaszd az „Imports” (Importálás) pontot. Kattints a „New import” (Új importálás) gombra. Válaszd ki a fájlt, például egy Google JSON, GPX vagy ZIP fájlt, és indítsd a feltöltést. A formátumot a Dawarich magától felismeri. Az „Imports” oldalon követheted a feldolgozást; utána a pontok megjelennek a térképen. Utazás rögzítése Egy utazás egy időszakot fog össze, és térképen mutatja, merre jártál. A felső menüben kattints a „Trips” (Utazások) pontra. Kattints a „New trip” (Új utazás) gombra. Add meg az utazás nevét, a kezdő és a záró időpontot, és mentsd el. Az utazás oldalán a Dawarich az időszak pontjaiból rajzolja meg az útvonalat. Statisztika A Dawarich összesíti, mennyit utaztál. A felső menüben kattints a „Stats” (Statisztika) pontra. Itt évenként látod a megtett távolságot („Total distance”) és a rögzített pontok számát. A statisztika többi része naponta frissül. Ha egy friss importot most látnál, kattints az „Update stats” (Statisztika frissítése) gombra. Családtag hozzáadása Mindenki saját fiókot kap, és a saját telefonjáról küldi a helyét. Kattints jobb fent a fiókod menüjére, és válaszd a „Settings” (Beállítások) pontot. Nyisd meg a „Users” (Felhasználók) lapot, és kattints az „Add new user” (Új felhasználó) gombra. Add meg az „Email” és a „Password” (jelszó) mezőt, majd kattints a „Create” (Létrehozás) gombra. A családtag belép, és a saját API-kulcsával beállítja a telefonos appot. A kulcsot a fiókmenü „Account” (Fiók) oldalán találja. Gyakori kérdések Túl nagy a Google-től letöltött fájl. Mit tegyek? A 200 MB-nál nagyobb fájlt tömörítsd ZIP fájlba a feltöltés előtt. Így gyorsabb, és nem szakad meg a feltöltés. Ki látja, merre jártam? A helyadataid a dobozon maradnak, és minden fiók csak a saját pontjait látja a térképen. A térkép háttérképeit a böngésződ a Dawarich térképszerveréről tölti le. Kimenthetem az adataimat fájlba? Igen. A „My data” menü „Points” (Pontok) oldalán az „Export” gombbal GeoJSON vagy GPX fájlt készítesz. A kész fájlt az „Exports” oldalon találod. Miért nem látszik a mai utam? A pontokat a telefonos app küldi. Nézd meg, hogy az appban jó-e a timeline.tester4.test cím és az API-kulcs, és hogy az app küldhet-e a háttérben. Mentődnek a helyadataim? A helyadataid a dobozon vannak. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-en.txt new file mode 100644 index 00000000..b0cc0c25 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-en.txt @@ -0,0 +1 @@ +Dawarich — Install — Felhom.eu ← Back Dawarich — Install Your own location history on a map - instead of Google Timeline ~500M RAM Full description, screenshots Memory 500 MB / 7479 MB (6%) Current usage (0 MB) Dawarich (+500 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Sign-in password (demo@dawarich.app) * cannot be changed after install 👁 Generate For the first sign-in: demo@dawarich.app and this password. Replace the e-mail address with your own in the settings. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-hu.txt new file mode 100644 index 00000000..e81f2a91 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-install-hu.txt @@ -0,0 +1 @@ +Dawarich — Telepítés — Felhom.eu ← Vissza Dawarich — Telepítés Saját helyelőzmények térképen - a Google Idővonal helyett ~500M RAM Részletes leírás, képernyőképek Memória 500 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Dawarich (+500 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Bejelentkezési jelszó (demo@dawarich.app) * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: demo@dawarich.app és ez a jelszó. A Beállításokban cseréld le az e-mail-címet a sajátodra. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-en.txt new file mode 100644 index 00000000..40b54f7b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-en.txt @@ -0,0 +1 @@ +Dawarich — Settings — Felhom.eu ← Apps Dawarich Your own location history - your phone sends where you have been to your own server ● Running timeline.tester4.test Open ↗ No health check ran: no matching container. Running Running Restart Stop Only you can reach it for now The box is replacing this app's known first password with a generated one of its own. Until then only you can reach it, while you are signed in to the dashboard – nobody else can sign in with the known password. If the change fails, change the password by hand and say so here. Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Sign-in password (demo@dawarich.app) Show Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: dawarich@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address timeline.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-hu.txt new file mode 100644 index 00000000..39c47e6a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/page-overview-hu.txt @@ -0,0 +1 @@ +Dawarich — Felhom.eu ← Alkalmazások Dawarich Saját helyelőzmények - a telefonod a te szerveredre küldi, hol jártál ● Fut timeline.tester4.test Megnyitás ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Működés Fut Újraindítás Leállítás Még csak te éred el A doboz most cseréli le az alkalmazás ismert első jelszavát egy saját, generált jelszóra. Addig csak te éred el, amíg be vagy jelentkezve a vezérlőpultba – más nem léphet be az ismert jelszóval. Ha a csere nem sikerül, változtasd meg a jelszót kézzel, és jelezd itt, hogy megtetted. Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Bejelentkezési jelszó (demo@dawarich.app) Megjelenítés Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: dawarich@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím timeline.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/record.json b/documentation/audits/catalog-sweep-2026-10-24/dawarich/record.json new file mode 100644 index 00000000..4a060b73 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/record.json @@ -0,0 +1,159 @@ +{ + "app": "dawarich", + "sub": "timeline", + "fixture": "Dawarich", + "started": "2026-10-24T17:53:58Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY_BASE", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/dawarich/install", + "hu_len": 1200, + "en_len": 1103, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/dawarich/install -> 200 'Dawarich — Telepítés — Felhom.eu' | shot /root/shots/dawarich-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/dawarich/install -> 200 'Dawarich — Telepítés — Felhom.eu' | shot /root/shots/dawarich-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 136, + "front_door": true, + "seconds_to_front_door": 136 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Ftimeline.tester4.test%2F", + "http_port_80": "301 https://timeline.tester4.test/", + "guide": { + "path": "/apps/dawarich/guide", + "hu_len": 3539, + "en_len": 3268, + "english_words_in_hu": [ + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/dawarich", + "hu_len": 1267, + "en_len": 1195, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/dawarich/guide -> 200 'Dawarich — Felhom.eu' | shot /root/shots/dawarich-after-guide-phone-hu.png hscroll=False", + "goto https://timeline.tester4.test/ -> 200 'Dawarich' | shot /root/shots/dawarich-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 55, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"54.351397672s\", \"last_run\": \"2026-10-24T17:58:13.231583667Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 75, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"dawarich\", \"started_at\": \"2026-10-24T18:03:57.833434249Z\", \"last\": {\"op\": \"restore\", \"stack\": \"dawarich\", \"ok\": true, \"message\": \"A(z) dawarich: 5 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:05:09.590510981Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": true, + "containers": { + "dawarich-sidekiq": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "dawarich": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "dawarich-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "dawarich-db": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "dawarich-db: 2026-10-24 20:04:30.202 CEST [62] ERROR: database \"dawarich\" already exists" + ] + }, + "mem_peak_mib": { + "dawarich": 438.1, + "dawarich-redis": 13.1, + "dawarich-db": 72.5, + "dawarich-sidekiq": 311.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 722 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-front-desktop-hu.png new file mode 100644 index 00000000..f1177208 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-guide-phone-hu.png new file mode 100644 index 00000000..d42221e5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-desktop-en.png new file mode 100644 index 00000000..61d9347a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-phone-hu.png new file mode 100644 index 00000000..993a1806 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/dawarich/screens/dawarich-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/dawarich/walk.log b/documentation/audits/catalog-sweep-2026-10-24/dawarich/walk.log new file mode 100644 index 00000000..331edc07 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/dawarich/walk.log @@ -0,0 +1,17 @@ +17:54:17Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +17:54:17Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:56:33Z [1] deployed, controller state=running, pinned={'dawarich': 'freikin/dawarich:1.15.3', 'dawarich-db': 'postgis/postgis:17-3.5-alpine', 'dawarich-redis': 'redis:7.4-alpine', 'dawarich-sidekiq': 'freikin/dawarich:1.15.3'} +17:56:33Z gate: timeline is gated — passed as the household (cookie set) +17:56:33Z [1] installed: deployed 136 s, front door 136 s +17:56:45Z dawarich: POST /api/v1/overland/batches http=201 (47.5748,19.0919 at 2026-09-14T04:37:00Z) +17:56:55Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +17:57:18Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:58:14Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:59:35Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +18:00:15Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'dawarich', 'volumes_removed': ['dawarich_dawarich_db_data', 'dawarich_dawarich_public', 'dawarich_dawarich_redis', 'dawarich_dawarich_storage', 'dawarich_dawarich_wat +18:00:24Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +18:03:57Z dawarich: readback http=200 found=False (controls: no key 401, wrong 401, empty range []) +18:03:57Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:05:23Z dawarich: readback http=200 found=True (controls: no key 401, wrong 401, empty range []) +18:06:10Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'dawarich', 'volumes_removed': ['dawarich_dawarich_db_data', 'dawarich_dawarich_public', 'dawarich_dawarich_redis', 'dawarich_dawarich_storage', 'dawarich_dawarich_wat +18:06:19Z == dawarich done in 722 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost.console.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost.console.txt new file mode 100644 index 00000000..dfa8ada3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost.console.txt @@ -0,0 +1,14 @@ +16:52:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:54:26Z [1] deployed, controller state=running, pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +16:54:26Z gate: docs is gated — passed as the household (cookie set) +16:54:26Z [1] installed: deployed 126 s, front door 126 s +16:54:27Z docmost: /api/auth/setup http=200 rc=0 +16:54:27Z docmost: login as the seeded user http=200 ok=True +16:54:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:55:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage'], 'hdd_paths_removed': [], 'hdd_paths_preserved +16:57:51Z docmost: login as the seeded user http=404 ok=False +16:57:51Z docmost: login body {"statusCode":404,"error":"Not Found","message":"Workspace not found"} +16:57:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:58:27Z docmost: login as the seeded user http=200 ok=True +16:59:07Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage'], 'hdd_paths_removed': [], 'hdd_paths_preserved +16:59:16Z == docmost done in 416 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-en.txt new file mode 100644 index 00000000..37a57d93 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-en.txt @@ -0,0 +1 @@ +Docmost — Guide — Felhom.eu ← Apps Docmost A modern wiki and documentation platform with a Notion-like editor ● Running docs.tester4.test Open ↗ No health check ran: no matching container. What is it for? A knowledge base and internal documentation for a team A Notion-like block editor several people can use at once Spaces and pages, arranged in a tree Embed images, tables and code blocks Search across all of it First steps Open docs.tester4.test in your browser The first person to sign up becomes the admin Create your first Space for the documents Start writing in the Notion-like editor Before you start An x86 processor is needed At least 896 MB of free RAM (Docmost + PostgreSQL + Redis) Invite a family member Everyone writes and reads with their own account, so you can see who changed what. Select your profile picture at the top right and choose „Workspace settings”. Open the „Members” page and select „Invite members”. Type their e-mail address in „Invite by email”, choose a role in „Select role”, and select „Send invitation”. Docmost sends no e-mail here: on the „Pending” tab, choose „Copy link” in the invitation's menu, and send them the link. Share a page without an account You can show a page to someone who has no account, for example the grandparents. Open the page and select „Share” at the top right. Turn on the „Share to web” switch. Copy the link that appears and send it. Whoever gets it can read the page, but cannot edit it. When it is no longer needed, turn sharing off in the same place. Bring in your existing notes You do not have to retype the notes you wrote elsewhere. In the left sidebar, open the space's menu („Space menu”) and choose „Import pages”. Choose the format: Markdown, HTML, or a ZIP file exported from Notion. Choose the file, and keep the tab open until Docmost says it is done. Save a page to your computer You can also save a page to a file or print it. At the top right of the page, open the page menu („Page actions”). Choose „Export”, pick Markdown or HTML in „Format”, then select „Export”. To print or to make a PDF, choose „Print PDF” in the same menu. Frequently asked questions Why did the invited person get no e-mail? Docmost sends no e-mail on this box, so you send the invitation link yourself. For the same reason, no mail arrives for a forgotten password either. How large a file can I attach to a page? Up to 50 MB. The box set this limit. How do I find an old page? In the left sidebar, select „Search” and type what you are looking for. Docmost also searches the text of the pages. Who sees my pages? The members of the workspace who have access to that space. Without an account, only the people you send the „Share to web” link to see the page. Are my pages backed up? The pages and the attached files are on the box. You see the backup status on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-hu.txt new file mode 100644 index 00000000..c1519e18 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-guide-hu.txt @@ -0,0 +1 @@ +Docmost — Felhom.eu ← Alkalmazások Docmost Modern wiki és dokumentáció platform Notion-szerű szerkesztővel ● Fut docs.tester4.test Megnyitás ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Mire használható? Csapat tudásbázis és belső dokumentáció Notion-szerű blokk szerkesztő valós idejű együttműködéssel Terek és oldalak hierarchikus szervezése Képek, táblázatok és kód blokkok beágyazása Keresés a teljes dokumentációban Első lépések Nyisd meg a docs.tester4.test címet a böngészőben Az első regisztrált felhasználó automatikusan admin lesz Hozd létre az első teret (Space) a dokumentumoknak Kezdj el írni a Notion-szerű szerkesztőben Előfeltételek x86 processzor szükséges Legalább 896 MB szabad RAM (Docmost + PostgreSQL + Redis) Családtag meghívása Mindenki saját fiókkal ír és olvas, így látszik, ki mit módosított. Kattints jobb fent a profilképedre, és válaszd a „Workspace settings” (Munkaterület beállításai) pontot. Nyisd meg a „Members” (Tagok) oldalt, és kattints az „Invite members” (Tagok meghívása) gombra. Az „Invite by email” mezőbe írd be az e-mail-címét, a „Select role” mezőben válassz szerepet, és kattints a „Send invitation” (Meghívó küldése) gombra. A Docmost itt nem küld e-mailt: a „Pending” (Függőben) lapon a meghívó menüjében válaszd a „Copy link” (Link másolása) pontot, és küldd el neki a linket. Oldal megosztása fiók nélkül Egy oldalt olyannak is megmutathatsz, akinek nincs fiókja, például a nagyszülőknek. Nyisd meg az oldalt, és kattints jobb fent a „Share” (Megosztás) gombra. Kapcsold be a „Share to web” (Megosztás a weben) kapcsolót. Másold ki a megjelenő linket, és küldd el. Aki megkapja, olvashatja az oldalt, de nem szerkesztheti. Ha már nem kell, ugyanitt kapcsold ki a megosztást. Meglévő jegyzetek behozása A máshol megírt jegyzeteidet nem kell újragépelned. A bal oldali sávban nyisd meg a tér menüjét („Space menu”), és válaszd az „Import pages” (Oldalak importálása) pontot. Válaszd a formátumot: Markdown, HTML vagy a Notionból exportált ZIP fájl. Válaszd ki a fájlt, és ne zárd be a lapot, amíg a Docmost jelzi, hogy kész. Oldal mentése a gépedre Egy oldalt fájlba is kimenthetsz vagy kinyomtathatsz. Az oldal jobb felső sarkában nyisd meg az oldal menüjét („Page actions”). Válaszd az „Export” pontot, a „Format” (Formátum) mezőben a Markdown vagy a HTML formátumot, majd kattints az „Export” gombra. Nyomtatáshoz vagy PDF-hez ugyanebben a menüben válaszd a „Print PDF” pontot. Gyakori kérdések Miért nem kapott e-mailt a meghívott? A Docmost ezen a dobozon nem küld e-mailt, ezért a meghívó linkjét neked kell elküldened. Ugyanezért az elfelejtett jelszóhoz sem érkezik levél. Mekkora fájlt csatolhatok egy oldalhoz? Legfeljebb 50 MB-osat. Ezt a határt a doboz állította be. Hogyan találok meg egy régi oldalt? A bal oldali sávban kattints a „Search” (Keresés) pontra, és írd be, amit keresel. A Docmost az oldalak szövegében is keres. Ki látja az oldalaimat? A munkaterület tagjai, akiknek hozzáférésük van az adott térhez. Fiók nélkül csak az látja az oldalt, akinek elküldöd a „Share to web” linkjét. Mentődnek az oldalaim? Az oldalak és a csatolt fájlok a dobozon vannak. A mentés állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-en.txt new file mode 100644 index 00000000..976c07ba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-en.txt @@ -0,0 +1 @@ +Docmost — Install — Felhom.eu ← Back Docmost — Install A modern wiki and documentation platform (Notion-like) ~450M RAM Full description, screenshots Memory 450 MB / 7479 MB (6%) Current usage (0 MB) Docmost (+450 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Application encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-hu.txt new file mode 100644 index 00000000..92ec177b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-install-hu.txt @@ -0,0 +1 @@ +Docmost — Telepítés — Felhom.eu ← Vissza Docmost — Telepítés Modern wiki és dokumentáció platform (Notion-szerű) ~450M RAM Részletes leírás, képernyőképek Memória 450 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Docmost (+450 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Alkalmazás titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-en.txt new file mode 100644 index 00000000..c5eab768 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-en.txt @@ -0,0 +1 @@ +Docmost — Settings — Felhom.eu ← Apps Docmost A modern wiki and documentation platform with a Notion-like editor ● Running docs.tester4.test Open ↗ No health check ran: no matching container. Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address docs.tester4.test Application encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-hu.txt new file mode 100644 index 00000000..85457171 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/page-overview-hu.txt @@ -0,0 +1 @@ +Docmost — Felhom.eu ← Alkalmazások Docmost Modern wiki és dokumentáció platform Notion-szerű szerkesztővel ● Fut docs.tester4.test Megnyitás ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím docs.tester4.test Alkalmazás titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/record.json b/documentation/audits/catalog-sweep-2026-10-24/docmost/record.json new file mode 100644 index 00000000..aad93be2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/record.json @@ -0,0 +1,143 @@ +{ + "app": "docmost", + "sub": "docs", + "fixture": "Docmost", + "started": "2026-10-24T16:52:02Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "APP_SECRET", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/docmost/install", + "hu_len": 998, + "en_len": 903, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/docmost/install -> 200 'Docmost — Telepítés — Felhom.eu' | shot /root/shots/docmost-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/docmost/install -> 200 'Docmost — Telepítés — Felhom.eu' | shot /root/shots/docmost-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 126, + "front_door": true, + "seconds_to_front_door": 126 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fdocs.tester4.test%2F", + "http_port_80": "301 https://docs.tester4.test/", + "guide": { + "path": "/apps/docmost/guide", + "hu_len": 3266, + "en_len": 2915, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/docmost", + "hu_len": 843, + "en_len": 822, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/docmost/guide -> 200 'Docmost — Felhom.eu' | shot /root/shots/docmost-after-guide-phone-hu.png hscroll=False", + "goto https://docs.tester4.test/home -> 200 'Docmost' | shot /root/shots/docmost-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"15.167141162s\", \"last_run\": \"2026-10-24T16:55:04.478693776Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 35, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"docmost\", \"started_at\": \"2026-10-24T16:57:51.926905016Z\", \"last\": {\"op\": \"restore\", \"stack\": \"docmost\", \"ok\": true, \"message\": \"A(z) docmost: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:58:25.790525426Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "docmost": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "docmost-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "docmost-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "docmost-postgres": 44.3, + "docmost-redis": 5.5, + "docmost": 478.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 416 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-front-desktop-hu.png new file mode 100644 index 00000000..37236621 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-guide-phone-hu.png new file mode 100644 index 00000000..5a801d93 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-desktop-en.png new file mode 100644 index 00000000..128ef9f5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-phone-hu.png new file mode 100644 index 00000000..4efbeb27 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/docmost/screens/docmost-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/docmost/walk.log b/documentation/audits/catalog-sweep-2026-10-24/docmost/walk.log new file mode 100644 index 00000000..dfa8ada3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/docmost/walk.log @@ -0,0 +1,14 @@ +16:52:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:54:26Z [1] deployed, controller state=running, pinned={'docmost': 'docmost/docmost:0.96.0', 'docmost-postgres': 'postgres:18-alpine', 'docmost-redis': 'redis:7-alpine'} +16:54:26Z gate: docs is gated — passed as the household (cookie set) +16:54:26Z [1] installed: deployed 126 s, front door 126 s +16:54:27Z docmost: /api/auth/setup http=200 rc=0 +16:54:27Z docmost: login as the seeded user http=200 ok=True +16:54:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:55:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage'], 'hdd_paths_removed': [], 'hdd_paths_preserved +16:57:51Z docmost: login as the seeded user http=404 ok=False +16:57:51Z docmost: login body {"statusCode":404,"error":"Not Found","message":"Workspace not found"} +16:57:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:58:27Z docmost: login as the seeded user http=200 ok=True +16:59:07Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'docmost', 'volumes_removed': ['docmost_docmost_postgres_data', 'docmost_docmost_redis_data', 'docmost_docmost_storage'], 'hdd_paths_removed': [], 'hdd_paths_preserved +16:59:16Z == docmost done in 416 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby.console.txt b/documentation/audits/catalog-sweep-2026-10-24/emby.console.txt new file mode 100644 index 00000000..36e0899d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby.console.txt @@ -0,0 +1,11 @@ +18:58:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:58:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:58:54Z [1] deployed, controller state=running, pinned={'emby': 'emby/embyserver:4.11.0.4'} +18:58:55Z gate: emby is gated — passed as the household (cookie set) +18:58:55Z [1] installed: deployed 40 s, front door 41 s +18:58:55Z [3] no fixture for this app — the front door answering is the smallest honest check +18:59:17Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:59:59Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'emby', 'volumes_removed': ['emby_emby_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media (266M)' +19:00:08Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:01:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'emby', 'volumes_removed': ['emby_emby_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media (266M)' +19:01:35Z == emby done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-en.txt new file mode 100644 index 00000000..eaaedb8a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-en.txt @@ -0,0 +1 @@ +Emby — Guide — Felhom.eu ← Apps Emby A personal media server with live TV and recording ● Running emby.tester4.test Open ↗ Files ↗ What is it for? Films, series, music and photos in one place Watch and record live TV, with a TV tuner It re-encodes on the fly for whatever device you are on Parental controls and a profile for each person Sync to a phone to watch offline First steps Open emby.tester4.test in your browser Follow the setup wizard Create the admin account Add your library from the /media folder Install the Emby app on your devices Before you start An external hard drive is needed to keep the media files on At least 2 GB of free RAM is recommended An Emby Premiere subscription for the premium features (optional) There is no guide for this app yet. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-hu.txt new file mode 100644 index 00000000..7bdc5608 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-guide-hu.txt @@ -0,0 +1 @@ +Emby — Felhom.eu ← Alkalmazások Emby Személyes média szerver élő TV és DVR támogatással ● Fut emby.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Filmek, sorozatok, zene és fotók kezelése egy helyen Élő TV nézés és felvétel (DVR) TV tunerrel Automatikus transzkódolás bármilyen eszközhöz Szülői felügyelet és felhasználói profilok Szinkronizálás offline megtekintéshez mobilon Első lépések Nyisd meg az emby.tester4.test címet a böngészőben Kövesd a beállítás varázslót Hozd létre az admin fiókot Add hozzá a médiatárat a /media mappából Telepítsd az Emby alkalmazást eszközeidre Előfeltételek Külső HDD szükséges a médiafájlok tárolásához Legalább 2 GB szabad RAM ajánlott Emby Premiere előfizetés a prémium funkciókhoz (opcionális) Ehhez az alkalmazáshoz még nem készült útmutató. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-en.txt new file mode 100644 index 00000000..351620c1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-en.txt @@ -0,0 +1 @@ +Emby — Install — Felhom.eu ← Back Emby — Install A personal media server with live TV and recording ~512M RAM Needs a hard drive Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) Emby (+512 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-hu.txt new file mode 100644 index 00000000..e8e569b5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-install-hu.txt @@ -0,0 +1 @@ +Emby — Telepítés — Felhom.eu ← Vissza Emby — Telepítés Személyes média szerver élő TV és DVR támogatással ~512M RAM HDD szükséges Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Emby (+512 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-en.txt new file mode 100644 index 00000000..3e61abf2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-en.txt @@ -0,0 +1 @@ +Emby — Settings — Felhom.eu ← Apps Emby A personal media server with live TV and recording ● Running emby.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address emby.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-hu.txt new file mode 100644 index 00000000..dd320c11 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/page-overview-hu.txt @@ -0,0 +1 @@ +Emby — Felhom.eu ← Alkalmazások Emby Személyes média szerver élő TV és DVR támogatással ● Fut emby.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím emby.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/record.json b/documentation/audits/catalog-sweep-2026-10-24/emby/record.json new file mode 100644 index 00000000..76e16451 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/record.json @@ -0,0 +1,113 @@ +{ + "app": "emby", + "sub": "emby", + "fixture": null, + "started": "2026-10-24T18:57:55Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/emby/install", + "hu_len": 771, + "en_len": 701, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/emby/install -> 200 'Emby — Telepítés — Felhom.eu' | shot /root/shots/emby-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/emby/install -> 200 'Emby — Telepítés — Felhom.eu' | shot /root/shots/emby-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 40, + "front_door": true, + "seconds_to_front_door": 41 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Femby.tester4.test%2F", + "http_port_80": "301 https://emby.tester4.test/", + "guide": { + "path": "/apps/emby/guide", + "hu_len": 825, + "en_len": 806, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/emby", + "hu_len": 730, + "en_len": 739, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/emby/guide -> 200 'Emby — Felhom.eu' | shot /root/shots/emby-after-guide-phone-hu.png hscroll=False", + "goto https://emby.tester4.test/web/index.html?start=wizard#!/wizard/wizardstart.html -> 200 '9afcc547bc03' | shot /root/shots/emby-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.554081228s\", \"last_run\": \"2026-10-24T18:59:18.804284182Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "emby": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "emby": 144.5 + }, + "mem_anon_peak_mib": { + "emby": 94.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 201 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-front-desktop-hu.png new file mode 100644 index 00000000..852b3d84 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-guide-phone-hu.png new file mode 100644 index 00000000..a491cacf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-desktop-en.png new file mode 100644 index 00000000..639f5809 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-phone-hu.png new file mode 100644 index 00000000..ad28c00a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/emby/screens/emby-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/emby/walk.log b/documentation/audits/catalog-sweep-2026-10-24/emby/walk.log new file mode 100644 index 00000000..36e0899d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/emby/walk.log @@ -0,0 +1,11 @@ +18:58:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:58:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:58:54Z [1] deployed, controller state=running, pinned={'emby': 'emby/embyserver:4.11.0.4'} +18:58:55Z gate: emby is gated — passed as the household (cookie set) +18:58:55Z [1] installed: deployed 40 s, front door 41 s +18:58:55Z [3] no fixture for this app — the front door answering is the smallest honest check +18:59:17Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:59:59Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'emby', 'volumes_removed': ['emby_emby_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media (266M)' +19:00:08Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:01:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'emby', 'volumes_removed': ['emby_emby_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media (266M)' +19:01:35Z == emby done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost.console.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost.console.txt new file mode 100644 index 00000000..d7079ab1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost.console.txt @@ -0,0 +1,13 @@ +14:14:53Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:16:53Z [1] deployed, controller state=running, pinned={'ghost': 'ghost:6.67.0-alpine'} +14:16:53Z gate: ghost is gated — passed as the household (cookie set) +14:16:54Z [1] installed: deployed 121 s, front door 121 s +14:16:55Z ghost: setup http=201 +14:16:55Z ghost: session wrong-pw http=422, right-pw http=201 +14:17:14Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:17:57Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'ghost', 'volumes_removed': ['ghost_ghost_content'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack ghos +14:19:58Z ghost: session wrong-pw http=404, right-pw http=404 +14:19:58Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:20:14Z ghost: session wrong-pw http=422, right-pw http=201 +14:20:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'ghost', 'volumes_removed': ['ghost_ghost_content'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +14:21:01Z == ghost done in 369 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-en.txt new file mode 100644 index 00000000..b1fbd051 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-en.txt @@ -0,0 +1 @@ +Ghost — Guide — Felhom.eu ← Apps Ghost A professional blog and newsletter platform ● Running ghost.tester4.test Open ↗ What is it for? Start and run a professional blog Send a newsletter with the built-in e-mail feature Publish content that search engines can read Memberships and paid content A Markdown editor and a visual one First steps Open ghost.tester4.test/ghost/ in your browser Create the admin account in the setup wizard Write and publish your first post Make the theme and the settings your own Before you start An x86 processor is needed A post with pictures You can put pictures into a post and choose when it comes out. In the menu on the left, select „Posts”, then the „New post” button. Type the title and the text. At the start of an empty line, select the + sign and choose the „Image” card. „Preview” shows you how readers will see it. Select „Publish”. If it should come out later, choose „Schedule for later” and set the day and the hour. Follow the steps to the final confirmation: the post comes out now, or at the time you set. An About page and the menu A page is writing that does not go among the posts, for example an introduction. In the menu on the left, select „Pages”, then the „New page” button. Write the page and publish it the same way as a post. Open the „Settings” page, and at „Navigation” select „Customize”. In the empty row, type the name of the menu item and the page's address from the browser's address bar, then select „Save”. The blog's name and look You choose the blog's name, logo and colour. On the „Settings” page, at „Title & description”, select „Edit”. Type the blog's name in „Site title”, then select „Save”. At „Design & branding”, select „Customize”. On the „Brand” tab, upload a „Publication logo” and choose the „Accent color”. Select „Save”: the change shows on the blog at once. For the family only If only the family reads the blog, you can lock it with a code. On the „Settings” page, open „Access”. In „Who should be able to browse your site?”, choose „Private”. Type an access code and select „Save”. Give the code to your family: the blog asks them for it at ghost.tester4.test. Frequently asked questions What is the difference between ghost.tester4.test and ghost.tester4.test/ghost? ghost.tester4.test is the blog itself, the part readers see. ghost.tester4.test/ghost is the editing side, and only a signed-in person gets in there. How do I correct a post that is already out? Open the post in the „Posts” list, change it, then select „Update”. Can I send a newsletter from Ghost? For a newsletter, Ghost asks for a separate mail service (Mailgun). The box does not set it up. Posts still come out on the blog without it. Can the blog be in Hungarian? Yes. On the „Settings” page, at „Publication language”, choose Hungarian in „Site language”. The editing side stays in English. Where are my posts and pictures? In Ghost's own data store, on the box. You see their backup on the „Data and backup” tab. Can Ghost ask for a code when I sign in on another device? Only when „Allow sending e-mail for this app” is on in Ghost's „Settings” tab. Then on a new device Ghost sends a 6-digit code to your account's e-mail address, and you type it in. When it is off, the password is enough. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-hu.txt new file mode 100644 index 00000000..da37887b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-guide-hu.txt @@ -0,0 +1 @@ +Ghost — Felhom.eu ← Alkalmazások Ghost Professzionális blog és hírlevél platform ● Fut ghost.tester4.test Megnyitás ↗ Mire használható? Professzionális blog indítása és üzemeltetése Hírlevél küldés beépített email funkcióval SEO-optimalizált tartalom publikálás Tagság és fizetős tartalom kezelés Markdown és vizuális szerkesztő Első lépések Nyisd meg a ghost.tester4.test/ghost/ címet a böngészőben Hozd létre az admin fiókot a beállítás varázslóban Írd meg és publikáld az első posztodat Személyre szabd a témát és beállításokat Előfeltételek x86 processzor szükséges Bejegyzés képekkel Egy bejegyzésbe képet is tehetsz, és megadhatod, mikor jelenjen meg. A bal oldali menüben kattints a „Posts” (Bejegyzések) pontra, majd a „New post” (Új bejegyzés) gombra. Írd be a címet és a szöveget. Egy üres sor elején kattints a + jelre, és válaszd az „Image” (Kép) kártyát. A „Preview” (Előnézet) gombbal megnézed, hogyan látják majd az olvasók. Kattints a „Publish” (Közzététel) gombra. Ha később jelenjen meg, válaszd a „Schedule for later” (Időzítés későbbre) lehetőséget, és add meg a napot és az órát. Kövesd a lépéseket a végső jóváhagyásig: a bejegyzés megjelenik, vagy a megadott időben jelenik meg. Rólunk oldal és menü Az oldal olyan írás, amely nem kerül a bejegyzések közé, például egy bemutatkozás. A bal oldali menüben kattints a „Pages” (Oldalak) pontra, majd a „New page” (Új oldal) gombra. Írd meg az oldalt, és tedd közzé úgy, mint egy bejegyzést. Nyisd meg a „Settings” (Beállítások) oldalt, és a „Navigation” (Navigáció) résznél kattints a „Customize” (Testreszabás) gombra. Az üres sorba írd a menüpont nevét és az oldal címét a böngésző címsorából, majd kattints a „Save” (Mentés) gombra. A blog neve és kinézete A blog nevét, logóját és színét te választod. A „Settings” oldalon a „Title & description” (Cím és leírás) résznél kattints az „Edit” (Szerkesztés) gombra. Írd be a blog nevét a „Site title” (A blog neve) mezőbe, majd kattints a „Save” gombra. A „Design & branding” (Dizájn és arculat) résznél kattints a „Customize” gombra. A „Brand” (Arculat) lapon töltsd fel a „Publication logo” (logó) képet, és válaszd ki az „Accent color” (kiemelő szín) értékét. Kattints a „Save” gombra: a változás azonnal látszik a blogon. Csak a családnak Ha a blogot csak a család olvassa, kóddal zárhatod le. A „Settings” oldalon nyisd meg az „Access” (Hozzáférés) részt. A „Who should be able to browse your site?” (Ki böngészheti a blogot?) mezőben válaszd a „Private” (Privát) értéket. Írj be egy hozzáférési kódot, és kattints a „Save” gombra. Add meg a kódot a családtagjaidnak: a ghost.tester4.test címen ezt kéri tőlük a blog. Gyakori kérdések Mi a különbség a ghost.tester4.test és a ghost.tester4.test/ghost cím között? A ghost.tester4.test maga a blog, ezt látják az olvasók. A ghost.tester4.test/ghost a szerkesztőfelület, ide csak bejelentkezve jutsz be. Hogyan javítok egy már megjelent bejegyzést? Nyisd meg a bejegyzést a „Posts” listában, írd át, majd kattints az „Update” (Frissítés) gombra. Küldhetek hírlevelet a Ghostból? A hírlevélhez a Ghost egy külön levelezőszolgáltatást kér (Mailgun). A doboz ezt nem állítja be. A bejegyzések nélküle is megjelennek a blogon. Lehet magyar nyelvű a blog? Igen. A „Settings” oldal „Publication language” (a blog nyelve) részén a „Site language” mezőben válaszd a Hungarian nyelvet. A szerkesztőfelület angol marad. Hol vannak a bejegyzéseim és a képeim? A Ghost saját adattárában, a dobozon. A mentésüket az „Adatok és mentés” fülön látod. Kérhet kódot a Ghost, ha másik eszközről lépek be? Csak ha a Ghost „Beállítások” fülén be van kapcsolva az „Email-küldés engedélyezése ennél az alkalmazásnál”. Akkor új eszközön a Ghost egy 6 jegyű kódot küld a fiókod e-mail címére, és azt kell beírnod. Ha ki van kapcsolva, a jelszó elég. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-en.txt new file mode 100644 index 00000000..15e38e70 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-en.txt @@ -0,0 +1 @@ +Ghost — Install — Felhom.eu ← Back Ghost — Install A professional blog and newsletter platform ~150M RAM Full description, screenshots Memory 150 MB / 7479 MB (2%) Current usage (0 MB) Ghost (+150 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-hu.txt new file mode 100644 index 00000000..ad6a3d0e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-install-hu.txt @@ -0,0 +1 @@ +Ghost — Telepítés — Felhom.eu ← Vissza Ghost — Telepítés Professzionális blog és hírlevél platform ~150M RAM Részletes leírás, képernyőképek Memória 150 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Ghost (+150 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-en.txt new file mode 100644 index 00000000..b2d93cce --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-en.txt @@ -0,0 +1 @@ +Ghost — Settings — Felhom.eu ← Apps Ghost A professional blog and newsletter platform ● Running ghost.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: ghost@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address ghost.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-hu.txt new file mode 100644 index 00000000..ed7f2338 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/page-overview-hu.txt @@ -0,0 +1 @@ +Ghost — Felhom.eu ← Alkalmazások Ghost Professzionális blog és hírlevél platform ● Fut ghost.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: ghost@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím ghost.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/record.json b/documentation/audits/catalog-sweep-2026-10-24/ghost/record.json new file mode 100644 index 00000000..5aefa071 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/record.json @@ -0,0 +1,120 @@ +{ + "app": "ghost", + "sub": "ghost", + "fixture": "Ghost", + "started": "2026-10-24T14:14:36Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/ghost/install", + "hu_len": 862, + "en_len": 783, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/ghost/install -> 200 'Ghost — Telepítés — Felhom.eu' | shot /root/shots/ghost-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/ghost/install -> 200 'Ghost — Telepítés — Felhom.eu' | shot /root/shots/ghost-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 121, + "front_door": true, + "seconds_to_front_door": 121 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fghost.tester4.test%2F", + "http_port_80": "301 https://ghost.tester4.test/", + "guide": { + "path": "/apps/ghost/guide", + "hu_len": 3833, + "en_len": 3295, + "english_words_in_hu": [ + "settings", + "your" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/ghost", + "hu_len": 1052, + "en_len": 1015, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/ghost/guide -> 200 'Ghost — Felhom.eu' | shot /root/shots/ghost-after-guide-phone-hu.png hscroll=False", + "goto https://ghost.tester4.test/ -> 200 'Sweep' | shot /root/shots/ghost-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.368554357s\", \"last_run\": \"2026-10-24T14:17:16.269438348Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"ghost\", \"started_at\": \"2026-10-24T14:19:58.201414102Z\", \"last\": {\"op\": \"restore\", \"stack\": \"ghost\", \"ok\": true, \"message\": \"A(z) ghost: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:20:09.301890562Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "ghost": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "ghost": 167.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 369 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-front-desktop-hu.png new file mode 100644 index 00000000..c26f810c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-guide-phone-hu.png new file mode 100644 index 00000000..d973bc55 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-desktop-en.png new file mode 100644 index 00000000..d8f55965 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-phone-hu.png new file mode 100644 index 00000000..f22ef58a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/ghost/screens/ghost-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/ghost/walk.log b/documentation/audits/catalog-sweep-2026-10-24/ghost/walk.log new file mode 100644 index 00000000..d7079ab1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/ghost/walk.log @@ -0,0 +1,13 @@ +14:14:53Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:16:53Z [1] deployed, controller state=running, pinned={'ghost': 'ghost:6.67.0-alpine'} +14:16:53Z gate: ghost is gated — passed as the household (cookie set) +14:16:54Z [1] installed: deployed 121 s, front door 121 s +14:16:55Z ghost: setup http=201 +14:16:55Z ghost: session wrong-pw http=422, right-pw http=201 +14:17:14Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:17:57Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'ghost', 'volumes_removed': ['ghost_ghost_content'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack ghos +14:19:58Z ghost: session wrong-pw http=404, right-pw http=404 +14:19:58Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:20:14Z ghost: session wrong-pw http=422, right-pw http=201 +14:20:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'ghost', 'volumes_removed': ['ghost_ghost_content'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +14:21:01Z == ghost done in 369 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea.console.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea.console.txt new file mode 100644 index 00000000..e9db7ba0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea.console.txt @@ -0,0 +1,15 @@ +18:13:01Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:13:27Z [1] deployed, controller state=running, pinned={'gitea': 'gitea/gitea:1.27.3'} +18:13:27Z gate: git is gated — passed as the household (cookie set) +18:13:27Z [1] installed: deployed 25 s, front door 25 s +18:13:31Z gitea: first-run installer POST / http=200 +18:13:37Z gitea: installed through its own first-run form; the admin authenticates +18:13:38Z gitea: create repo http=201 +18:13:38Z gitea: readback of the seeded repo http=200 ok=True +18:14:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:14:44Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gitea', 'volumes_removed': ['gitea_gitea_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack gitea r +18:15:08Z gitea: readback of the seeded repo http=404 ok=False +18:15:08Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:15:23Z gitea: readback of the seeded repo http=200 ok=True +18:16:13Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gitea', 'volumes_removed': ['gitea_gitea_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +18:16:22Z == gitea done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-en.txt new file mode 100644 index 00000000..456f4baf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-en.txt @@ -0,0 +1 @@ +Gitea — Guide — Felhom.eu ← Apps Gitea Your own Git server - a GitHub-like interface and private repositories ● Running git.tester4.test Open ↗ What is it for? Private Git repositories on your own server A GitHub-like interface: pull requests, issues, a wiki CI/CD pipelines (Gitea Actions - compatible with GitHub Actions) Organisations and teams A container registry and a package registry First steps Open git.tester4.test in your browser Follow the first-run setup wizard Create the admin account Create your first repository Clone it: git clone https://git.tester4.test/user/repo.git Bring over an existing project You can bring over a project kept elsewhere, with its whole history. Select the + sign at the top right and choose „New Migration”. Choose where the project comes from, for example GitHub or Git. Paste the project's clone address into „Migrate / Clone From URL”. If only you should see it, tick „Make repository private”. Select „Migrate Repository” and wait until it finishes. Work together on a repository Several people can work on one repository if each has their own account. Open the repository and select the „Settings” tab. On the left, choose „Collaborators”. Type the family member's user name and select „Add Collaborator”. Next to their name, set what they may do: „Write” or „Read”. Keep track of tasks An issue is a task or a fault that you track next to the repository. Open the repository and select the „Issues” tab. Select „New Issue”, and write a title and a description. At „Assignees” you can choose who deals with it. Select „Create Issue”. When it is done, select „Close Issue” at the bottom of the issue. Two-step sign-in Signing in then needs your phone as well as the password, so your account is safer. Select your profile picture at the top right and choose „Settings”. On the „Security” tab, select „Enroll in Two-Factor Authentication”. Scan the picture with the authenticator app on your phone, type the code into „Passcode” and select „Verify”. Git then asks for a token instead of the password. On the „Applications” tab, type a name into „Token Name”, choose „Read and Write” in the repository row, and select „Generate Token”. Copy the token at once: it is not shown again. Frequently asked questions Why does cloning over SSH not work? The box makes Gitea reachable only at its web address (git.tester4.test), not over SSH. Use the HTTPS address to clone. How does a family member get an account? A stranger cannot sign up: the box closed sign-up after the first account. The admin creates a new account on the „Site Administration” page, at „User Accounts”, with „Create User Account”. Who can see my repositories? By default, anyone who opens git.tester4.test can see a public repository, even without signing in. A private one only you and the collaborators. To change it later, use „Make Private” in the „Danger Zone” part of the repository's „Settings” tab. Why does git not accept my password? If you turned on two-step sign-in, git asks for a token instead of the password. You make the token on the „Applications” tab and type it where the password goes. Where are my repositories? In Gitea's own data store, on the box. You see their backup on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-hu.txt new file mode 100644 index 00000000..17921b61 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-guide-hu.txt @@ -0,0 +1 @@ +Gitea — Felhom.eu ← Alkalmazások Gitea Saját Git szerver - GitHub-szerű felület, privát repók ● Fut git.tester4.test Megnyitás ↗ Mire használható? Privát Git repozitóriók a saját szerveren GitHub-szerű felület: pull request, issue, wiki CI/CD pipeline-ok (Gitea Actions - GitHub Actions kompatibilis) Szervezetek és csapatok kezelése Container registry és csomagkezelő Első lépések Nyisd meg a git.tester4.test címet a böngészőben Kövesd az első beállítás varázslót Hozd létre az admin fiókot Hozd létre az első repozitóriót Klónozd a repót: git clone https://git.tester4.test/user/repo.git Meglévő projekt áthozása Egy máshol tárolt projektet a teljes előzményével együtt áthozhatsz. Kattints a jobb felső sarokban a + jelre, és válaszd az „Új migráció” pontot. Válaszd ki, honnan hozod a projektet, például GitHub vagy Git. A „Migráció / Másolás URL-ről” mezőbe másold be a projekt klónozási címét. Ha csak te láthatod, jelöld be a „Make repository private” (a tároló legyen privát) jelölőt. Kattints a „Tároló migrációja” gombra, és várd meg, amíg végez. Közös munka egy tárolón Egy tárolón többen is dolgozhattok, ha mindenkinek van saját fiókja. Nyisd meg a tárolót, és kattints a „Beállítások” lapra. A bal oldalon válaszd a „Collaborators” (közreműködők) pontot. Írd be a családtag felhasználónevét, és kattints az „Add Collaborator” (közreműködő hozzáadása) gombra. A neve mellett állítsd be a jogát: „Írás” vagy „Olvasott” (csak olvasás). Teendők követése A hibajegy egy teendő vagy egy hiba, amelyet a tároló mellett követtek. Nyisd meg a tárolót, és kattints a „Hibajegyek” lapra. Kattints az „Új hibajegy” gombra, és írj címet és leírást. A „Megbízottak” résznél kiválaszthatod, ki foglalkozzon vele. Kattints a „Hibajegy létrehozása” gombra. Ha kész, a hibajegy alján kattints a „Close Issue” (hibajegy lezárása) gombra. Kétlépcsős belépés A jelszó mellé a telefonod is kell a belépéshez, így a fiókod biztonságosabb. Kattints jobb felül a profilképedre, és válaszd a „Beállítások” pontot. A „Biztonság” lapon kattints az „Enroll in Two-Factor Authentication” (kétlépcsős hitelesítés bekapcsolása) gombra. Olvasd be a képet a telefonod hitelesítő alkalmazásával, írd be a kódot a „Jelkód” mezőbe, és kattints az „Ellenőrzés” gombra. A git ezután jelszó helyett tokent kér. Az „Alkalmazások” lapon írj nevet a „Token neve” mezőbe, a repository sorban válaszd a „Read and Write” (olvasás és írás) értéket, és kattints a „Token generálása” gombra. Másold le a tokent azonnal: többször nem jelenik meg. Gyakori kérdések Miért nem működik a klónozás SSH-val? A doboz a Gitea-t csak a webes címén (git.tester4.test) teszi elérhetővé, SSH-n nem. Klónozáshoz a HTTPS címet használd. Hogyan kap fiókot egy családtag? Idegen nem regisztrálhat: a doboz az első fiók után lezárta a regisztrációt. Új fiókot az admin hoz létre a „Rendszergazdai felület” oldalon, a „Felhasználói fiókok” résznél, a „Felhasználó létrehozása” gombbal. Ki látja a tárolóimat? A nyilvános tárolót alapból bejelentkezés nélkül is bárki láthatja, aki megnyitja a git.tester4.test címet. A privátot csak te és a közreműködők. Később a tároló „Beállítások” lapján, a „Danger Zone” (veszélyes zóna) résznél a „Make Private” (privát legyen) gombbal váltasz. Miért nem fogadja el a git a jelszavamat? Ha bekapcsoltad a kétlépcsős belépést, a git jelszó helyett tokent kér. A tokent az „Alkalmazások” lapon hozod létre, és a jelszó helyére írod. Hol vannak a tárolóim? A Gitea saját adattárában, a dobozon. A mentésüket az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-en.txt new file mode 100644 index 00000000..d670936a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-en.txt @@ -0,0 +1 @@ +Gitea — Install — Felhom.eu ← Back Gitea — Install A light Git server of your own, with a web interface ~100M RAM Full description, screenshots Memory 100 MB / 7479 MB (1%) Current usage (0 MB) Gitea (+100 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-hu.txt new file mode 100644 index 00000000..b52a5ac1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-install-hu.txt @@ -0,0 +1 @@ +Gitea — Telepítés — Felhom.eu ← Vissza Gitea — Telepítés Könnyű, saját Git szerver webes felülettel ~100M RAM Részletes leírás, képernyőképek Memória 100 MB / 7479 MB (1%) Jelenlegi használat (0 MB) Gitea (+100 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-en.txt new file mode 100644 index 00000000..61795bca --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-en.txt @@ -0,0 +1 @@ +Gitea — Settings — Felhom.eu ← Apps Gitea Your own Git server - a GitHub-like interface and private repositories ● Running git.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: gitea@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address git.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-hu.txt new file mode 100644 index 00000000..bc0bf269 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/page-overview-hu.txt @@ -0,0 +1 @@ +Gitea — Felhom.eu ← Alkalmazások Gitea Saját Git szerver - GitHub-szerű felület, privát repók ● Fut git.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: gitea@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím git.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/record.json b/documentation/audits/catalog-sweep-2026-10-24/gitea/record.json new file mode 100644 index 00000000..6c551a83 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/record.json @@ -0,0 +1,122 @@ +{ + "app": "gitea", + "sub": "git", + "fixture": "Gitea", + "started": "2026-10-24T18:12:41Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/gitea/install", + "hu_len": 863, + "en_len": 792, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/gitea/install -> 200 'Gitea — Telepítés — Felhom.eu' | shot /root/shots/gitea-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/gitea/install -> 200 'Gitea — Telepítés — Felhom.eu' | shot /root/shots/gitea-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgit.tester4.test%2F", + "http_port_80": "301 https://git.tester4.test/", + "guide": { + "path": "/apps/gitea/guide", + "hu_len": 3563, + "en_len": 3274, + "english_words_in_hu": [ + "and" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/gitea", + "hu_len": 1159, + "en_len": 1133, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/gitea/guide -> 200 'Gitea — Felhom.eu' | shot /root/shots/gitea-after-guide-phone-hu.png hscroll=False", + "goto https://git.tester4.test/ -> 200 'Gitea: Git with a cup of tea' | shot /root/shots/gitea-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.35389594s\", \"last_run\": \"2026-10-24T18:14:02.681651341Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"gitea\", \"started_at\": \"2026-10-24T18:15:08.518578369Z\", \"last\": {\"op\": \"restore\", \"stack\": \"gitea\", \"ok\": true, \"message\": \"A(z) gitea: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:15:18.892650899Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "gitea": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "gitea": 117.0 + }, + "mem_anon_peak_mib": { + "gitea": 111.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 201 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-front-desktop-hu.png new file mode 100644 index 00000000..fcd82f2e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-guide-phone-hu.png new file mode 100644 index 00000000..b16df41f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-desktop-en.png new file mode 100644 index 00000000..46b8cc52 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-phone-hu.png new file mode 100644 index 00000000..f8c34d0a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gitea/screens/gitea-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gitea/walk.log b/documentation/audits/catalog-sweep-2026-10-24/gitea/walk.log new file mode 100644 index 00000000..e9db7ba0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gitea/walk.log @@ -0,0 +1,15 @@ +18:13:01Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:13:27Z [1] deployed, controller state=running, pinned={'gitea': 'gitea/gitea:1.27.3'} +18:13:27Z gate: git is gated — passed as the household (cookie set) +18:13:27Z [1] installed: deployed 25 s, front door 25 s +18:13:31Z gitea: first-run installer POST / http=200 +18:13:37Z gitea: installed through its own first-run form; the admin authenticates +18:13:38Z gitea: create repo http=201 +18:13:38Z gitea: readback of the seeded repo http=200 ok=True +18:14:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:14:44Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gitea', 'volumes_removed': ['gitea_gitea_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack gitea r +18:15:08Z gitea: readback of the seeded repo http=404 ok=False +18:15:08Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:15:23Z gitea: readback of the seeded repo http=200 ok=True +18:16:13Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gitea', 'volumes_removed': ['gitea_gitea_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +18:16:22Z == gitea done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-en.txt new file mode 100644 index 00000000..f3a2805b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-en.txt @@ -0,0 +1 @@ +Glance — Guide — Felhom.eu ← Apps Glance A minimalist dashboard - RSS, weather and bookmarks on one page ● Running glance.tester4.test Open ↗ What is it for? RSS news, YouTube, Reddit and more on a single page Weather and system widgets Keep your bookmarks and favourite sites in order Very fast, and it asks almost nothing of the machine A layout you set yourself, in a YAML file First steps Open glance.tester4.test in your browser Add your family members on the Family card of Settings, Security - a stranger cannot even reach Glance Edit the glance.yml configuration file in the volume Add your RSS feeds and widgets Arrange the layout the way you want it Read the weather The weather card shows the forecast in bars. Each bar stands for two hours. The yellow background marks sunrise and sunset. The blue dots mark the hours with a high chance of rain. Move the mouse over a bar to see the exact temperature. Light or dark theme Glance can show the page in dark or in light colours. On a computer, select the small coloured square at the top right and choose a theme. On a phone, open the menu in the bottom bar and select „Change theme”. The choice stays only in the browser where you made it. On your phone and as a start page Glance is most useful when it is always at hand. On a phone, the dots in the bottom bar switch between the columns. In the browser's menu, choose to add it to the home screen: Glance then opens from its own icon, like an app. On a computer, set glance.tester4.test as the browser's start page. Frequently asked questions Can I change the city, the news or the bookmarks? Glance has no editing screen: the city, the news sources and the bookmarks are in Glance's settings file, and you cannot change them on the page. Why do I not see the latest news? Glance refreshes the news every two hours, and the weather and the calendar on every full hour, not each time you open it. Who can see Glance? Only your family. Glance has no sign-in of its own, so the box put it behind the family gate: everyone signs in with their own name and password. Does everyone see the same page? Yes, the page is the same for everyone. Only the theme differs from browser to browser. What is on the start page? The box wrote a basic start page: a Budapest clock, a calendar, the weather for Budapest, a bookmark to the box's dashboard, and news from Telex and HVG. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-hu.txt new file mode 100644 index 00000000..8d81d3c9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-guide-hu.txt @@ -0,0 +1 @@ +Glance — Felhom.eu ← Alkalmazások Glance Minimalista dashboard - RSS, időjárás, könyvjelzők egy oldalon ● Fut glance.tester4.test Megnyitás ↗ Mire használható? RSS hírek, YouTube, Reddit és egyéb tartalmak egy oldalon Időjárás és rendszer monitorozás widgetekkel Könyvjelzők és kedvenc oldalak rendszerezése Ultragyors, minimális erőforrás igény Személyre szabható elrendezés YAML konfigurációval Első lépések Nyisd meg a glance.tester4.test címet a böngészőben Add hozzá a családtagjaidat a Beállítások, Biztonság oldal Család kártyáján - idegen el sem éri a Glance-ot Szerkeszd a glance.yml konfigurációs fájlt a kötetben Add hozzá az RSS feedeket, widgeteket Személyre szabd az elrendezést Az időjárás leolvasása Az időjárás kártya oszlopokban mutatja az előrejelzést. Minden oszlop két órát jelent. A sárga háttér a napkeltét és a napnyugtát jelöli. A kék pöttyök azokat az órákat jelölik, amikor nagy eséllyel esik. Ha az egeret egy oszlop fölé viszed, látod a pontos hőmérsékletet. Világos vagy sötét téma A Glance sötét és világos színben is mutatja az oldalt. Számítógépen kattints jobb felül a kis színes négyzetre, és válaszd ki a témát. Telefonon nyisd meg az alsó sáv menüjét, és kattints a „Change theme” (téma váltása) pontra. A választás csak abban a böngészőben marad meg, ahol beállítottad. Telefonon és kezdőlapként A Glance akkor a leghasznosabb, ha mindig kéznél van. Telefonon az alsó sáv pöttyeivel váltasz az oszlopok között. A böngésző menüjében válaszd a kezdőképernyőhöz adást: a Glance ezután saját ikonról, appként nyílik. Számítógépen állítsd be a glance.tester4.test címet a böngésző kezdőlapjának. Gyakori kérdések Átírhatom a várost, a híreket vagy a könyvjelzőket? A Glance-nak nincs szerkesztőfelülete: a város, a hírforrások és a könyvjelzők a Glance beállítófájljában vannak, a felületen nem tudod átírni őket. Miért nem a legfrissebb hírt látom? A Glance a híreket kétóránként frissíti, az időjárást és a naptárt minden egész órában, nem minden megnyitáskor. Ki látja a Glance-ot? Csak a családtagok. A Glance-nak nincs saját belépése, ezért a doboz a családi kapu mögé tette: mindenki a saját nevével és jelszavával lép be. Mindenki ugyanazt az oldalt látja? Igen, az oldal mindenkinek ugyanaz. Csak a téma más böngészőnként. Mi van a kezdőlapon? A doboz egy alap kezdőlapot írt be: budapesti óra, naptár, Budapest időjárása, egy könyvjelző a doboz vezérlőpultjához, valamint a Telex és a HVG hírei. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-en.txt new file mode 100644 index 00000000..595fdc41 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-en.txt @@ -0,0 +1 @@ +Glance — Install — Felhom.eu ← Back Glance — Install A minimalist information dashboard ~20M RAM Full description, screenshots Memory 20 MB / 7479 MB (0%) Current usage (0 MB) Glance (+20 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-hu.txt new file mode 100644 index 00000000..7e88f12f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-install-hu.txt @@ -0,0 +1 @@ +Glance — Telepítés — Felhom.eu ← Vissza Glance — Telepítés Minimalista információs dashboard ~20M RAM Részletes leírás, képernyőképek Memória 20 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Glance (+20 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-en.txt new file mode 100644 index 00000000..8c95aa37 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-en.txt @@ -0,0 +1 @@ +Glance — Settings — Felhom.eu ← Apps Glance A minimalist dashboard - RSS, weather and bookmarks on one page ● Running glance.tester4.test Open ↗ Running Running Restart Stop Signing in to the app You sign in to this app with your family name and password. You add family members on the Family card of the Settings, Security page. Address and keys These were created at install time and cannot be changed. Address glance.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-hu.txt new file mode 100644 index 00000000..35799601 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/page-overview-hu.txt @@ -0,0 +1 @@ +Glance — Felhom.eu ← Alkalmazások Glance Minimalista dashboard - RSS, időjárás, könyvjelzők egy oldalon ● Fut glance.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz a családi neveddel és jelszavaddal lépsz be. A családtagokat a Beállítások, Biztonság oldal Család kártyáján adod hozzá. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím glance.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/record.json b/documentation/audits/catalog-sweep-2026-10-24/glance/record.json new file mode 100644 index 00000000..b1fd66ae --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/record.json @@ -0,0 +1,105 @@ +{ + "app": "glance", + "sub": "glance", + "fixture": null, + "started": "2026-10-24T12:55:14Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/glance/install", + "hu_len": 854, + "en_len": 774, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/glance/install -> 200 'Glance — Telepítés — Felhom.eu' | shot /root/shots/glance-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/glance/install -> 200 'Glance — Telepítés — Felhom.eu' | shot /root/shots/glance-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "302 https://felhom.tester4.test/__family/start?rd=https%3A%2F%2Fglance.tester4.test%2F", + "http_port_80": "301 https://glance.tester4.test/", + "guide": { + "path": "/apps/glance/guide", + "hu_len": 2475, + "en_len": 2414, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/glance", + "hu_len": 435, + "en_len": 432, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/glance/guide -> 200 'Glance — Felhom.eu' | shot /root/shots/glance-after-guide-phone-hu.png hscroll=False", + "goto https://glance.tester4.test/ -> 200 'Kezdőlap' | shot /root/shots/glance-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.431935792s\", \"last_run\": \"2026-10-24T12:56:02.454728595Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "glance": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "glance": 7.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 140 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-front-desktop-hu.png new file mode 100644 index 00000000..336abcc4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-guide-phone-hu.png new file mode 100644 index 00000000..cee8e7ac Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-desktop-en.png new file mode 100644 index 00000000..f4c75220 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-phone-hu.png new file mode 100644 index 00000000..13ef0031 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/glance/screens/glance-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/glance/walk.log b/documentation/audits/catalog-sweep-2026-10-24/glance/walk.log new file mode 100644 index 00000000..e95bb0e6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/glance/walk.log @@ -0,0 +1,9 @@ +12:55:29Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +12:55:44Z [1] deployed, controller state=running, pinned={'glance': 'glanceapp/glance:v0.8.5'} +12:55:44Z family gate: glance is family-gated — passed as the household (cookie set) +12:55:44Z [1] installed: deployed 15 s, front door 15 s +12:55:44Z [3] no fixture for this app — the front door answering is the smallest honest check +12:56:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +12:56:43Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'glance', 'volumes_removed': ['glance_glance_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack gl +12:57:41Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'glance', 'volumes_removed': ['glance_glance_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meg +12:57:49Z == glance done in 140 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi.console.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi.console.txt new file mode 100644 index 00000000..877efb64 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi.console.txt @@ -0,0 +1,10 @@ +20:18:51Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +20:18:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:19:06Z [1] deployed, controller state=running, pinned={'gokapi': 'f0rc3/gokapi:v1.9.6'} +20:19:06Z [1] installed: deployed 15 s, front door 15 s +20:19:06Z [3] no fixture for this app — the front door answering is the smallest honest check +20:19:30Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:20:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True} +20:20:21Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +20:21:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +20:21:20Z == gokapi done in 149 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/console.txt new file mode 100644 index 00000000..5bb786ce --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/console.txt @@ -0,0 +1,10 @@ +12:58:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +12:58:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +12:58:55Z [1] deployed, controller state=running, pinned={'gokapi': 'f0rc3/gokapi:v1.9.6'} +12:58:55Z [1] installed: deployed 25 s, front door 25 s +12:58:56Z [3] no fixture for this app — the front door answering is the smallest honest check +12:59:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +12:59:51Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True} +13:00:01Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +13:01:01Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +13:01:11Z == gokapi done in 161 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-en.txt new file mode 100644 index 00000000..5f84db99 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Gokapi — Guide — Felhom.eu ← Apps Gokapi Temporary file sharing with links that expire ● Running gokapi.tester4.test Open ↗ What is it for? Share files safely with links that expire Set how long a link lasts and how many downloads it allows Download links you can put a password on An API, for uploading from a script Encrypted storage, and end-to-end encryption if you want it First steps Open gokapi.tester4.test in your browser Sign in: user "admin". The password is on the Settings page Upload a file and make a share link Set the link's expiry and its download limit Share the link - it expires on its own when the time is up Share with a password Only someone who also knows the password can download a private file. In the „Upload” part, tick „Password” and type a password. Then drag the file into the upload area. Copy the link with the „URL” button and send it. Give the password another way, for example by phone. Change a link You can change the expiry and the download count of a file you already shared. In the file's row, select the pencil icon („Edit”). Change „Limit Downloads” or „Expiry”, or set a password. Select „Save changes”. The link stays the same. Send to your phone You can quickly send a file to your phone too. In the file's row, select the QR code icon („QR Code”). Scan the code with the phone's camera and open the link. For a picture, the „Hotlink” button gives a direct link that shows the picture itself. It does not work for a file with a password. Delete a file You do not have to wait for a share to run out. The „Downloads remaining” column shows how many more times it can be downloaded. In the file's row, select the bin icon („Delete”): the file is deleted at once and the link stops working. Frequently asked questions Why could the second person not download it? On your first upload, the default is one download and 14 days. If several people will download it, type a bigger number before you upload, or untick „Limit Downloads”. Gokapi remembers your last setting in this browser. What happens to the file when it runs out? Every hour, Gokapi deletes the files that ran out from the box, and the link stops working. Does someone need an account to download? No. They only need the link, and the password if you set one. Uploading needs Gokapi's admin sign-in. How big a file can I share? The box set an upper limit of 100 GB per file. If you upload the same file twice, Gokapi stores it only once. Where are the uploaded files? In Gokapi's own data store, on the box. You see their backup on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-hu.txt new file mode 100644 index 00000000..a890964c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Gokapi — Felhom.eu ← Alkalmazások Gokapi Ideiglenes fájlmegosztás lejáró linkekkel ● Fut gokapi.tester4.test Megnyitás ↗ Mire használható? Fájlok biztonságos megosztása lejáró linkekkel Beállítható lejárati idő és letöltési limit Jelszóvédett letöltési linkek API támogatás automatizált feltöltéshez Titkosított tárolás és E2E titkosítás opció Első lépések Nyisd meg a gokapi.tester4.test címet a böngészőben Lépj be: felhasználó "admin", a jelszó a Beállítások oldalon található Tölts fel egy fájlt és generálj megosztási linket Állíts be lejárati időt és letöltési limitet a linkhez Oszd meg a linket - automatikusan lejár a beállított idő után Jelszóval védett megosztás Egy bizalmas fájlt csak az tölthet le, aki a jelszót is tudja. Az „Upload” (Feltöltés) részen pipáld be a „Password” (Jelszó) jelölőt, és írj be egy jelszót. Ezután húzd a fájlt a feltöltő mezőbe. Másold ki a linket az „URL” gombbal, és küldd el. A jelszót külön úton add meg, például telefonon. Egy link módosítása Egy már megosztott fájl lejáratát és letöltési számát utólag is átírhatod. A fájl sorában kattints a ceruza ikonra („Edit”, Szerkesztés). Írd át a „Limit Downloads” (letöltések száma) vagy az „Expiry” (lejárat) értékét, vagy adj meg jelszót. Kattints a „Save changes” (Változások mentése) gombra. A link ugyanaz marad. Megosztás telefonra Egy fájlt a telefonodra is gyorsan átküldhetsz. A fájl sorában kattints a QR-kód ikonra („QR Code”). Olvasd be a kódot a telefon kamerájával, és nyisd meg a linket. Egy képnél a „Hotlink” gomb közvetlen linket ad, amely magát a képet mutatja. Ez nem működik jelszóval védett fájlnál. Fájl törlése Egy megosztást nem kell megvárnod, hogy lejárjon. A „Downloads remaining” (hátralévő letöltések) oszlopban látod, hányszor tölthetik még le. A fájl sorában kattints a kuka ikonra („Delete”, Törlés): a fájl azonnal törlődik, a link megszűnik. Gyakori kérdések Miért nem tudta letölteni a második ember? Az első feltöltésnél egy letöltés és 14 nap az alapérték. Ha többen töltik le, feltöltés előtt írj nagyobb számot, vagy vedd ki a pipát a „Limit Downloads” elől. A Gokapi az utolsó beállításodat ebben a böngészőben megjegyzi. Mi lesz a fájllal, ha lejár? A Gokapi óránként törli a lejárt fájlokat a dobozról, a link megszűnik. Kell fiók a letöltéshez? Nem. A címzettnek csak a link kell, és a jelszó, ha megadtál. Feltölteni a Gokapi admin belépésével lehet. Mekkora fájlt oszthatok meg? A doboz fájlonként 100 GB-os felső határt állított be. Ha ugyanazt a fájlt kétszer töltöd fel, a Gokapi csak egyszer tárolja. Hol vannak a feltöltött fájlok? A Gokapi saját adattárában, a dobozon. A mentésüket az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-en.txt new file mode 100644 index 00000000..4da30f41 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-en.txt @@ -0,0 +1 @@ +Gokapi — Install — Felhom.eu ← Back Gokapi — Install Temporary file sharing with links that expire ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) Gokapi (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password * cannot be changed after install 👁 Generate The password of Gokapi's admin user (admin) - this is what signs you in Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-hu.txt new file mode 100644 index 00000000..27ea9e70 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Gokapi — Telepítés — Felhom.eu ← Vissza Gokapi — Telepítés Ideiglenes fájlmegosztás lejáró linkekkel ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Gokapi (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó * telepítés után nem módosítható 👁 Generálás A Gokapi admin felhasználó (admin) jelszava: ezzel tudsz belépni a kezelőfelületre Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-en.txt new file mode 100644 index 00000000..a0e76b53 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Gokapi — Settings — Felhom.eu ← Apps Gokapi Temporary file sharing with links that expire ● Running gokapi.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password Show Address and keys These were created at install time and cannot be changed. Address gokapi.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-hu.txt new file mode 100644 index 00000000..69b6ce60 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Gokapi — Felhom.eu ← Alkalmazások Gokapi Ideiglenes fájlmegosztás lejáró linkekkel ● Fut gokapi.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gokapi.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/record.json new file mode 100644 index 00000000..a6e883f1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/record.json @@ -0,0 +1,112 @@ +{ + "app": "gokapi", + "sub": "gokapi", + "fixture": null, + "started": "2026-10-24T12:58:16Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "GOKAPI_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/gokapi/install", + "hu_len": 1003, + "en_len": 917, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/gokapi/install -> 200 'Gokapi — Telepítés — Felhom.eu' | shot /root/shots/gokapi-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/gokapi/install -> 200 'Gokapi — Telepítés — Felhom.eu' | shot /root/shots/gokapi-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "200", + "http_port_80": "301 https://gokapi.tester4.test/", + "guide": { + "path": "/apps/gokapi/guide", + "hu_len": 2698, + "en_len": 2604, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/gokapi", + "hu_len": 386, + "en_len": 386, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/gokapi/guide -> 200 'Gokapi — Felhom.eu' | shot /root/shots/gokapi-after-guide-phone-hu.png hscroll=False", + "STEP FAILED {'goto': 'https://gokapi.tester4.test/', 'until': 'load'}: Error: Page.title: Execution context was destroyed, most likely because of a navigation" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"2.419488936s\", \"last_run\": \"2026-10-24T12:59:11.007384978Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "gokapi": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "gokapi": 6.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 161 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-after-guide-phone-hu.png new file mode 100644 index 00000000..083e275e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-desktop-en.png new file mode 100644 index 00000000..53f951bf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-phone-hu.png new file mode 100644 index 00000000..587666b3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/screens/gokapi-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/walk.log new file mode 100644 index 00000000..5bb786ce --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/first-run/walk.log @@ -0,0 +1,10 @@ +12:58:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +12:58:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +12:58:55Z [1] deployed, controller state=running, pinned={'gokapi': 'f0rc3/gokapi:v1.9.6'} +12:58:55Z [1] installed: deployed 25 s, front door 25 s +12:58:56Z [3] no fixture for this app — the front door answering is the smallest honest check +12:59:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +12:59:51Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True} +13:00:01Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +13:01:01Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +13:01:11Z == gokapi done in 161 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-en.txt new file mode 100644 index 00000000..5f84db99 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-en.txt @@ -0,0 +1 @@ +Gokapi — Guide — Felhom.eu ← Apps Gokapi Temporary file sharing with links that expire ● Running gokapi.tester4.test Open ↗ What is it for? Share files safely with links that expire Set how long a link lasts and how many downloads it allows Download links you can put a password on An API, for uploading from a script Encrypted storage, and end-to-end encryption if you want it First steps Open gokapi.tester4.test in your browser Sign in: user "admin". The password is on the Settings page Upload a file and make a share link Set the link's expiry and its download limit Share the link - it expires on its own when the time is up Share with a password Only someone who also knows the password can download a private file. In the „Upload” part, tick „Password” and type a password. Then drag the file into the upload area. Copy the link with the „URL” button and send it. Give the password another way, for example by phone. Change a link You can change the expiry and the download count of a file you already shared. In the file's row, select the pencil icon („Edit”). Change „Limit Downloads” or „Expiry”, or set a password. Select „Save changes”. The link stays the same. Send to your phone You can quickly send a file to your phone too. In the file's row, select the QR code icon („QR Code”). Scan the code with the phone's camera and open the link. For a picture, the „Hotlink” button gives a direct link that shows the picture itself. It does not work for a file with a password. Delete a file You do not have to wait for a share to run out. The „Downloads remaining” column shows how many more times it can be downloaded. In the file's row, select the bin icon („Delete”): the file is deleted at once and the link stops working. Frequently asked questions Why could the second person not download it? On your first upload, the default is one download and 14 days. If several people will download it, type a bigger number before you upload, or untick „Limit Downloads”. Gokapi remembers your last setting in this browser. What happens to the file when it runs out? Every hour, Gokapi deletes the files that ran out from the box, and the link stops working. Does someone need an account to download? No. They only need the link, and the password if you set one. Uploading needs Gokapi's admin sign-in. How big a file can I share? The box set an upper limit of 100 GB per file. If you upload the same file twice, Gokapi stores it only once. Where are the uploaded files? In Gokapi's own data store, on the box. You see their backup on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-hu.txt new file mode 100644 index 00000000..a890964c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-guide-hu.txt @@ -0,0 +1 @@ +Gokapi — Felhom.eu ← Alkalmazások Gokapi Ideiglenes fájlmegosztás lejáró linkekkel ● Fut gokapi.tester4.test Megnyitás ↗ Mire használható? Fájlok biztonságos megosztása lejáró linkekkel Beállítható lejárati idő és letöltési limit Jelszóvédett letöltési linkek API támogatás automatizált feltöltéshez Titkosított tárolás és E2E titkosítás opció Első lépések Nyisd meg a gokapi.tester4.test címet a böngészőben Lépj be: felhasználó "admin", a jelszó a Beállítások oldalon található Tölts fel egy fájlt és generálj megosztási linket Állíts be lejárati időt és letöltési limitet a linkhez Oszd meg a linket - automatikusan lejár a beállított idő után Jelszóval védett megosztás Egy bizalmas fájlt csak az tölthet le, aki a jelszót is tudja. Az „Upload” (Feltöltés) részen pipáld be a „Password” (Jelszó) jelölőt, és írj be egy jelszót. Ezután húzd a fájlt a feltöltő mezőbe. Másold ki a linket az „URL” gombbal, és küldd el. A jelszót külön úton add meg, például telefonon. Egy link módosítása Egy már megosztott fájl lejáratát és letöltési számát utólag is átírhatod. A fájl sorában kattints a ceruza ikonra („Edit”, Szerkesztés). Írd át a „Limit Downloads” (letöltések száma) vagy az „Expiry” (lejárat) értékét, vagy adj meg jelszót. Kattints a „Save changes” (Változások mentése) gombra. A link ugyanaz marad. Megosztás telefonra Egy fájlt a telefonodra is gyorsan átküldhetsz. A fájl sorában kattints a QR-kód ikonra („QR Code”). Olvasd be a kódot a telefon kamerájával, és nyisd meg a linket. Egy képnél a „Hotlink” gomb közvetlen linket ad, amely magát a képet mutatja. Ez nem működik jelszóval védett fájlnál. Fájl törlése Egy megosztást nem kell megvárnod, hogy lejárjon. A „Downloads remaining” (hátralévő letöltések) oszlopban látod, hányszor tölthetik még le. A fájl sorában kattints a kuka ikonra („Delete”, Törlés): a fájl azonnal törlődik, a link megszűnik. Gyakori kérdések Miért nem tudta letölteni a második ember? Az első feltöltésnél egy letöltés és 14 nap az alapérték. Ha többen töltik le, feltöltés előtt írj nagyobb számot, vagy vedd ki a pipát a „Limit Downloads” elől. A Gokapi az utolsó beállításodat ebben a böngészőben megjegyzi. Mi lesz a fájllal, ha lejár? A Gokapi óránként törli a lejárt fájlokat a dobozról, a link megszűnik. Kell fiók a letöltéshez? Nem. A címzettnek csak a link kell, és a jelszó, ha megadtál. Feltölteni a Gokapi admin belépésével lehet. Mekkora fájlt oszthatok meg? A doboz fájlonként 100 GB-os felső határt állított be. Ha ugyanazt a fájlt kétszer töltöd fel, a Gokapi csak egyszer tárolja. Hol vannak a feltöltött fájlok? A Gokapi saját adattárában, a dobozon. A mentésüket az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-en.txt new file mode 100644 index 00000000..4da30f41 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-en.txt @@ -0,0 +1 @@ +Gokapi — Install — Felhom.eu ← Back Gokapi — Install Temporary file sharing with links that expire ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) Gokapi (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password * cannot be changed after install 👁 Generate The password of Gokapi's admin user (admin) - this is what signs you in Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-hu.txt new file mode 100644 index 00000000..27ea9e70 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-install-hu.txt @@ -0,0 +1 @@ +Gokapi — Telepítés — Felhom.eu ← Vissza Gokapi — Telepítés Ideiglenes fájlmegosztás lejáró linkekkel ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Gokapi (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó * telepítés után nem módosítható 👁 Generálás A Gokapi admin felhasználó (admin) jelszava: ezzel tudsz belépni a kezelőfelületre Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-en.txt new file mode 100644 index 00000000..a0e76b53 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-en.txt @@ -0,0 +1 @@ +Gokapi — Settings — Felhom.eu ← Apps Gokapi Temporary file sharing with links that expire ● Running gokapi.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password Show Address and keys These were created at install time and cannot be changed. Address gokapi.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-hu.txt new file mode 100644 index 00000000..69b6ce60 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/page-overview-hu.txt @@ -0,0 +1 @@ +Gokapi — Felhom.eu ← Alkalmazások Gokapi Ideiglenes fájlmegosztás lejáró linkekkel ● Fut gokapi.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gokapi.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/record.json b/documentation/audits/catalog-sweep-2026-10-24/gokapi/record.json new file mode 100644 index 00000000..b3434855 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/record.json @@ -0,0 +1,115 @@ +{ + "app": "gokapi", + "sub": "gokapi", + "fixture": null, + "started": "2026-10-24T20:18:31Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "GOKAPI_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/gokapi/install", + "hu_len": 1003, + "en_len": 917, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/gokapi/install -> 200 'Gokapi — Telepítés — Felhom.eu' | shot /root/shots/gokapi-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/gokapi/install -> 200 'Gokapi — Telepítés — Felhom.eu' | shot /root/shots/gokapi-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "200", + "http_port_80": "301 https://gokapi.tester4.test/", + "guide": { + "path": "/apps/gokapi/guide", + "hu_len": 2698, + "en_len": 2604, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/gokapi", + "hu_len": 386, + "en_len": 386, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/gokapi/guide -> 200 'Gokapi — Felhom.eu' | shot /root/shots/gokapi-after-guide-phone-hu.png hscroll=False", + "goto https://gokapi.tester4.test/login -> 200 'Gokapi' | shot /root/shots/gokapi-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.665702359s\", \"last_run\": \"2026-10-24T20:19:32.451845138Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "gokapi": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "gokapi": 6.2 + }, + "mem_anon_peak_mib": { + "gokapi": 6.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 149 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-front-desktop-hu.png new file mode 100644 index 00000000..06a9ce15 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-guide-phone-hu.png new file mode 100644 index 00000000..083e275e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-desktop-en.png new file mode 100644 index 00000000..53f951bf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-phone-hu.png new file mode 100644 index 00000000..587666b3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gokapi/screens/gokapi-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gokapi/walk.log b/documentation/audits/catalog-sweep-2026-10-24/gokapi/walk.log new file mode 100644 index 00000000..877efb64 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gokapi/walk.log @@ -0,0 +1,10 @@ +20:18:51Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +20:18:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:19:06Z [1] deployed, controller state=running, pinned={'gokapi': 'f0rc3/gokapi:v1.9.6'} +20:19:06Z [1] installed: deployed 15 s, front door 15 s +20:19:06Z [3] no fixture for this app — the front door answering is the smallest honest check +20:19:30Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:20:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True} +20:20:21Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GOKAPI_PASSWORD'] +20:21:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gokapi', 'volumes_removed': ['gokapi_gokapi_config', 'gokapi_gokapi_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +20:21:20Z == gokapi done in 149 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana.console.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana.console.txt new file mode 100644 index 00000000..9051f8ea --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana.console.txt @@ -0,0 +1,16 @@ +15:18:26Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD'] +15:18:26Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:19:27Z [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.2.3'} +15:19:27Z [1] installed: deployed 60 s, front door 61 s +15:19:27Z grafana: create folder http=200 +15:19:27Z grafana: readback of the seeded folder http=200 ok=True +15:19:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:19:59Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:20:25Z grafana: readback of the seeded folder http=200 ok=True +15:20:57Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grafana', 'volumes_removed': ['grafana_grafana_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack g +15:21:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD'] +15:21:56Z grafana: readback of the seeded folder http=404 ok=False +15:21:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:22:31Z grafana: readback of the seeded folder http=200 ok=True +15:23:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grafana', 'volumes_removed': ['grafana_grafana_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +15:23:19Z == grafana done in 293 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-en.txt new file mode 100644 index 00000000..bae3bfe9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-en.txt @@ -0,0 +1 @@ +Grafana — Guide — Felhom.eu ← Apps Grafana A visualisation platform - dashboards, graphs and alerts ● Running grafana.tester4.test Open ↗ What is it for? See system numbers as graphs (CPU, RAM, network, disk) Build your own dashboards from several data sources Alerts and notifications when a number crosses a line you set Prometheus, InfluxDB and many more data sources Dashboards that look good and can be shared First steps Open grafana.tester4.test in your browser Sign in with the admin account Add your data sources (Connections > Data Sources) Import a dashboard template, or build your own Before you start A data source is needed (Prometheus, for example - installed separately) Set your own password It is worth replacing the password made at install time with your own. Select your profile picture at the top right and choose „Change password”. In „Old password”, type the generated password: you see it on the dashboard, on Grafana's „Settings” tab. Type the new password into „New password” and „Confirm password”. Select „Change Password”. Add a family member Everyone can look at the dashboards with their own account. In the menu on the left, open „Administration”, and in it „Users and access”. Choose „Users”, and select „New user”. Fill in „Name”, „Username” and „Password”. Select „Create user”, and give the family member the name and the password. Hungarian and the theme Everyone chooses the language and the colours in their own account. Select your profile picture at the top right and choose „Profile”. In „Language”, choose Hungarian (the list shows it under its own name), then select „Save preferences”. For light or dark colours, choose „Change theme” in the profile picture's menu. A dashboard on the TV A dashboard can run on the whole screen with no menus, for example on a TV. In the TV's browser, sign in with a family member's account and open the dashboard. In the profile picture's menu, choose „Enable kiosk mode”: the menus go away. Press ESC to leave kiosk mode. Frequently asked questions I changed the password. Which one is valid? The one you set in Grafana. The generated password was only for the first sign-in. A family member can only look. Why? A new user gets the viewer role in Grafana. To let them edit, open them in the „Users” list and give them the editor role with „Change role”. Where does the data come from? Grafana only shows data: a data source provides it, and you add that in the „Connections” menu. The box installs no data source. Do I get an e-mail about an alert? No: the box does not set up mail sending for Grafana, so no alert goes out by e-mail. Where are my dashboards? In Grafana's own data store, on the box. You see their backup on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-hu.txt new file mode 100644 index 00000000..dfecdce5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-guide-hu.txt @@ -0,0 +1 @@ +Grafana — Felhom.eu ← Alkalmazások Grafana Vizualizációs platform - dashboardok, grafikonok, alertek ● Fut grafana.tester4.test Megnyitás ↗ Mire használható? Rendszer metrikák vizualizálása (CPU, RAM, hálózat, lemez) Egyedi dashboardok létrehozása különböző adatforrásokból Alertek és értesítések küszöbértékek alapján Prometheus, InfluxDB és sok más adatforrás támogatás Szép, megosztható dashboardok Első lépések Nyisd meg a grafana.tester4.test címet a böngészőben Jelentkezz be az admin fiókkal Add hozzá az adatforrásokat (Connections > Data Sources) Importálj egy dashboard sablont vagy hozz létre sajátot Előfeltételek Adatforrás szükséges (pl. Prometheus - külön telepítendő) Saját jelszó beállítása A telepítéskor generált jelszót érdemes a sajátodra cserélni. Kattints jobb felül a profilképedre, és válaszd a „Change password” (Jelszó módosítása) pontot. Az „Old password” (régi jelszó) mezőbe írd a generált jelszót: a vezérlőpulton, a Grafana „Beállítások” fülén látod. Írd be az új jelszót a „New password” (új jelszó) és a „Confirm password” (jelszó megerősítése) mezőbe. Kattints a „Change Password” gombra. Családtag felvétele Mindenki a saját fiókjával nézheti az irányítópultokat. A bal oldali menüben nyisd meg az „Administration” (Adminisztráció) részt, azon belül a „Users and access” (felhasználók és hozzáférés) pontot. Válaszd a „Users” (Felhasználók) pontot, és kattints a „New user” (új felhasználó) gombra. Töltsd ki a „Name” (név), a „Username” (felhasználónév) és a „Password” (jelszó) mezőt. Kattints a „Create user” (felhasználó létrehozása) gombra, és add meg a családtagnak a nevet és a jelszót. Magyar nyelv és téma A nyelvet és a színeket mindenki a saját fiókjában választja meg. Kattints jobb felül a profilképedre, és válaszd a „Profile” (Profil) pontot. A „Language” (Nyelv) mezőben válaszd a „Magyar” nyelvet, majd kattints a „Save preferences” (beállítások mentése) gombra. Világos vagy sötét színekhez a profilkép menüjében válaszd a „Change theme” (téma módosítása) pontot. Irányítópult a tévén Egy irányítópult egész képernyőn, menük nélkül is futhat, például egy tévén. A tévé böngészőjében lépj be egy családtag fiókjával, és nyisd meg az irányítópultot. A profilkép menüjében válaszd az „Enable kiosk mode” (kioszk mód) pontot: a menük eltűnnek. A kioszk módból az ESC gombbal lépsz ki. Gyakori kérdések Megváltoztattam a jelszót. Melyik az érvényes? Amit a Grafanában beállítottál. A generált jelszó csak az első belépéshez kellett. A családtag csak nézni tud. Miért? Az új felhasználó a Grafanában néző szerepkört kap. Szerkesztéshez nyisd meg őt a „Users” listában, és a „Change role” (szerepkör módosítása) gombbal adj neki szerkesztő szerepkört. Honnan jönnek az adatok? A Grafana csak megjelenít: az adatokat egy adatforrás adja, amelyet a „Connections” (Kapcsolatok) menüben adsz hozzá. A doboz adatforrást nem telepít. Kapok e-mailt egy riasztásról? Nem: a doboz nem állít be levélküldést a Grafanának, ezért e-mailes riasztás nem megy ki. Hol vannak az irányítópultjaim? A Grafana saját adattárában, a dobozon. A mentésüket az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-en.txt new file mode 100644 index 00000000..d022d180 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-en.txt @@ -0,0 +1 @@ +Grafana — Install — Felhom.eu ← Back Grafana — Install A professional monitoring and visualisation platform ~250M RAM Full description, screenshots Memory 250 MB / 7479 MB (3%) Current usage (0 MB) Grafana (+250 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password * 👁 Generate For the first sign-in. You can change it in the app afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-hu.txt new file mode 100644 index 00000000..59128757 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-install-hu.txt @@ -0,0 +1 @@ +Grafana — Telepítés — Felhom.eu ← Vissza Grafana — Telepítés Professzionális monitoring és vizualizációs platform ~250M RAM Részletes leírás, képernyőképek Memória 250 MB / 7479 MB (3%) Jelenlegi használat (0 MB) Grafana (+250 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó * 👁 Generálás Első bejelentkezéshez. Utána a webes felületen módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-en.txt new file mode 100644 index 00000000..6aaff4f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-en.txt @@ -0,0 +1 @@ +Grafana — Settings — Felhom.eu ← Apps Grafana A visualisation platform - dashboards, graphs and alerts ● Running grafana.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password Show Address and keys These were created at install time and cannot be changed. Address grafana.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-hu.txt new file mode 100644 index 00000000..f8984c61 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/page-overview-hu.txt @@ -0,0 +1 @@ +Grafana — Felhom.eu ← Alkalmazások Grafana Vizualizációs platform - dashboardok, grafikonok, alertek ● Fut grafana.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím grafana.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/record.json b/documentation/audits/catalog-sweep-2026-10-24/grafana/record.json new file mode 100644 index 00000000..e8c928b7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/record.json @@ -0,0 +1,126 @@ +{ + "app": "grafana", + "sub": "grafana", + "fixture": "Grafana", + "started": "2026-10-24T15:18:09Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "GF_SECURITY_ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/grafana/install", + "hu_len": 966, + "en_len": 890, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/grafana/install -> 200 'Grafana — Telepítés — Felhom.eu' | shot /root/shots/grafana-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/grafana/install -> 200 'Grafana — Telepítés — Felhom.eu' | shot /root/shots/grafana-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 60, + "front_door": true, + "seconds_to_front_door": 61 + }, + "stranger": "302 https://192.168.0.157/login", + "http_port_80": "301 https://grafana.tester4.test/", + "guide": { + "path": "/apps/grafana/guide", + "hu_len": 3153, + "en_len": 2772, + "english_words_in_hu": [ + "and", + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/grafana", + "hu_len": 406, + "en_len": 401, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/grafana/guide -> 200 'Grafana — Felhom.eu' | shot /root/shots/grafana-after-guide-phone-hu.png hscroll=False", + "goto https://grafana.tester4.test/login -> 200 'Grafana' | shot /root/shots/grafana-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"6.975808149s\", \"last_run\": \"2026-10-24T15:19:56.738391627Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 35, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"grafana\", \"started_at\": \"2026-10-24T15:21:56.555623651Z\", \"last\": {\"op\": \"restore\", \"stack\": \"grafana\", \"ok\": true, \"message\": \"A(z) grafana: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:22:30.943451086Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": true, + "containers": { + "grafana": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "grafana": 382.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 293 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-front-desktop-hu.png new file mode 100644 index 00000000..0146b5e5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-guide-phone-hu.png new file mode 100644 index 00000000..3adc2150 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-desktop-en.png new file mode 100644 index 00000000..9ad9a007 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-phone-hu.png new file mode 100644 index 00000000..2bd53372 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grafana/screens/grafana-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grafana/walk.log b/documentation/audits/catalog-sweep-2026-10-24/grafana/walk.log new file mode 100644 index 00000000..9051f8ea --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grafana/walk.log @@ -0,0 +1,16 @@ +15:18:26Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD'] +15:18:26Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:19:27Z [1] deployed, controller state=running, pinned={'grafana': 'grafana/grafana:13.2.3'} +15:19:27Z [1] installed: deployed 60 s, front door 61 s +15:19:27Z grafana: create folder http=200 +15:19:27Z grafana: readback of the seeded folder http=200 ok=True +15:19:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:19:59Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:20:25Z grafana: readback of the seeded folder http=200 ok=True +15:20:57Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grafana', 'volumes_removed': ['grafana_grafana_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack g +15:21:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['GF_SECURITY_ADMIN_PASSWORD'] +15:21:56Z grafana: readback of the seeded folder http=404 ok=False +15:21:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:22:31Z grafana: readback of the seeded folder http=200 ok=True +15:23:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grafana', 'volumes_removed': ['grafana_grafana_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +15:23:19Z == grafana done in 293 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web.console.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web.console.txt new file mode 100644 index 00000000..f0e23464 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web.console.txt @@ -0,0 +1,9 @@ +16:09:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:12:56Z [1] deployed, controller state=running, pinned={'gramps-web': 'ghcr.io/gramps-project/grampsweb:v25.6.0'} +16:12:56Z gate: gramps-web is gated — passed as the household (cookie set) +16:12:56Z [1] installed: deployed 206 s, front door 206 s +16:12:56Z [3] no fixture for this app — the front door answering is the smallest honest check +16:13:18Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:14:16Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gramps-web', 'volumes_removed': ['gramps-web_gramps_cache', 'gramps-web_gramps_db', 'gramps-web_gramps_index', 'gramps-web_gramps_media', 'gramps-web_gramps_secret', +16:18:35Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gramps-web', 'volumes_removed': ['gramps-web_gramps_cache', 'gramps-web_gramps_db', 'gramps-web_gramps_index', 'gramps-web_gramps_media', 'gramps-web_gramps_secret', +16:18:44Z == gramps-web done in 554 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-en.txt new file mode 100644 index 00000000..624cb478 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-en.txt @@ -0,0 +1 @@ +Gramps Web — Guide — Felhom.eu ← Apps Gramps Web A family tree - a genealogy database with a web interface ● Running gramps-web.tester4.test Open ↗ What is it for? Build a family tree and see it drawn Record people, events, places and how they connect Attach photographs and documents to a person GEDCOM import and export The whole family can reach the tree First steps Open gramps-web.tester4.test in your browser Create the admin account Import a GEDCOM file you already have, or start an empty tree Add the first family members Invite a family member Every family member signs in with their own name and password, and you decide what they may do. Select the profile icon at the top right, and choose „Manage users”. Select „Add a new user”. Type the family member's name, e-mail address and a password. In „Role”, choose: a „Member” only looks at the tree, an „Editor” can add to it and correct it too. Save it, and send them the gramps-web.tester4.test address and the password. Add a person and a family The family tree is made of people and of the families that connect them. Select the + button in the top bar („Add”), and choose „Person”. Fill in „Given name” and the surname, choose the „Gender”, and the „Birth Date” if you know it. Select „Add” at the bottom. To connect parents and children, choose „Family” at the + button. Choose the „Father” and the „Mother”, add the children under „Children”, then select „Add”. Attach a photo An old photo or document can go on the person's page. Open the person's page and select the pencil button. Choose the „Gallery” tab, and select „Add a new media object”. Select „Select a file”, and choose the picture from your computer or your phone. Save the picture. Look at the family tree The drawn tree starts from a home person. In the menu on the left, open the „Home Page”, and under „Home Person” select the button that sets it. Choose yourself, or the person you want to see the tree from. In the menu on the left, select „Family Tree”. Switch between the tabs: „Ancestor Tree” (the ancestors), „Descendant Tree” (the descendants) and „Fan Chart”. Frequently asked questions Can I change the language? Gramps Web starts in your browser's language. Under the profile icon, on the „User settings” page, choose another one under „Language”. The Hungarian translation is not complete, so some labels stay in English. What does someone with the „Guest” role see? They can look at the tree, but they do not see data marked „Private”, and they cannot change anything. If they need to see private data too, give them the „Member” role. How do I take the tree to another program? In the menu on the left, open the „Export” page, choose the format, for example GEDCOM, and select the button below it that generates the file. Your browser downloads the finished file. Can someone sign up on their own? No. After your first account the box closed sign-up, so only you add new family members. Where are the photos and the tree? On the box, in Gramps Web's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-hu.txt new file mode 100644 index 00000000..f21d0546 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-guide-hu.txt @@ -0,0 +1 @@ +Gramps Web — Felhom.eu ← Alkalmazások Gramps Web Családfa készítő - genealógiai adatbázis webes felületen ● Fut gramps-web.tester4.test Megnyitás ↗ Mire használható? Családfa építése és vizualizálása Személyek, események, helyszínek és kapcsolatok rögzítése Fényképek és dokumentumok csatolása a családtagokhoz GEDCOM import és export kompatibilitás Családtagok közös hozzáférése a családfához Első lépések Nyisd meg a gramps-web.tester4.test címet a böngészőben Hozd létre az admin fiókot Importálj egy meglévő GEDCOM fájlt, vagy kezdd az üres családfát Add hozzá az első családtagokat Családtag meghívása Minden családtag a saját nevével és jelszavával lép be, és te döntöd el, mit tehet. Kattints jobb felül a profil ikonra, és válaszd a „Manage users” (felhasználók kezelése) pontot. Kattints az „Add a new user” (új felhasználó) gombra. Írd be a családtag nevét, e-mail címét és egy jelszót. A „Szerep” mezőben válassz: a „Member” (tag) csak nézi a családfát, az „Editor” (szerkesztő) bővítheti és javíthatja is. Mentsd el, és küldd el neki a gramps-web.tester4.test címet és a jelszót. Személy és család felvétele A családfa személyekből és az őket összekötő családokból áll. Kattints a felső sávban a + gombra („Hozzáad”), és válaszd a „Személy” pontot. Írd be az „Utónév” és a vezetéknév mezőt, válaszd ki a „Nem” értékét, és ha tudod, a „Születési dátum” mezőt. Kattints lent a „Hozzáad” gombra. A szülők és a gyerekek összekötéséhez a + gombnál válaszd a „Család” pontot. Válaszd ki az „Apa” és az „Anya” személyt, a „Gyermekek” részben add hozzá a gyerekeket, majd kattints a „Hozzáad” gombra. Fénykép csatolása Egy régi fotó vagy irat a személy adatlapjára kerülhet. Nyisd meg a személy adatlapját, és kattints a ceruza gombra. Válaszd a „Galéria” fület, és kattints az „Új média objektum hozzáadása” gombra. Kattints az „Egy fájl kiválasztása” gombra, és válaszd ki a képet a gépedről vagy a telefonodról. Mentsd el a képet. A családfa megnézése A rajzolt családfa egy kiinduló személytől indul. A bal oldali menüben nyisd meg a „Honlap” oldalt, és a „Kiinduló személy” résznél kattints a beállító gombra. Válaszd ki magadat vagy azt, akitől a családfát nézni szeretnéd. A bal oldali menüben kattints a „Családfa” pontra. A fülek között válthatsz: „Származásfa” (az ősök), „Leszármazási fa” (az utódok) és „Legyező diagram”. Gyakori kérdések Átállíthatom a nyelvet? A Gramps Web a böngésző nyelvén indul. A profil ikon alatt a „Felhasználói beállítások” oldalon a „Nyelv” résznél másikat választhatsz. A magyar fordítás nem teljes, ezért néhány felirat angolul marad. Mit lát, aki csak „Guest” (vendég) szerepet kapott? Nézheti a családfát, de a „Bizalmas” jelölésű adatokat nem látja, és semmit nem módosíthat. Ha a bizalmas adatokat is látnia kell, adj neki „Member” szerepet. Hogyan viszem át a családfát másik programba? A bal oldali menüben nyisd meg az „Export” oldalt, válaszd ki a formátumot, például a GEDCOM-ot, és kattints alatta a létrehozó gombra. A kész fájlt a böngésződ tölti le. Regisztrálhat magától valaki? Nem. Az első fiókod után a doboz lezárta a regisztrációt, új családtagot csak te veszel fel. Hol vannak a fotók és a családfa? A dobozon, a Gramps Web saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-en.txt new file mode 100644 index 00000000..a1ff81c9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-en.txt @@ -0,0 +1 @@ +Gramps Web — Install — Felhom.eu ← Back Gramps Web — Install Family tree and genealogy software ~384M RAM Full description, screenshots Memory 384 MB / 7479 MB (5%) Current usage (0 MB) Gramps Web (+384 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-hu.txt new file mode 100644 index 00000000..62f444c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-install-hu.txt @@ -0,0 +1 @@ +Gramps Web — Telepítés — Felhom.eu ← Vissza Gramps Web — Telepítés Családfa készítő és genealógiai szoftver ~384M RAM Részletes leírás, képernyőképek Memória 384 MB / 7479 MB (5%) Jelenlegi használat (0 MB) Gramps Web (+384 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-en.txt new file mode 100644 index 00000000..147f3f2d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-en.txt @@ -0,0 +1 @@ +Gramps Web — Settings — Felhom.eu ← Apps Gramps Web A family tree - a genealogy database with a web interface ● Running gramps-web.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gramps-web.tester4.test Encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-hu.txt new file mode 100644 index 00000000..b57692cc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/page-overview-hu.txt @@ -0,0 +1 @@ +Gramps Web — Felhom.eu ← Alkalmazások Gramps Web Családfa készítő - genealógiai adatbázis webes felületen ● Fut gramps-web.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gramps-web.tester4.test Titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/record.json b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/record.json new file mode 100644 index 00000000..5de9b5b9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/record.json @@ -0,0 +1,110 @@ +{ + "app": "gramps-web", + "sub": "gramps-web", + "fixture": null, + "started": "2026-10-24T16:09:12Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "GRAMPSWEB_SECRET_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/gramps-web/install", + "hu_len": 931, + "en_len": 833, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/gramps-web/install -> 200 'Gramps Web — Telepítés — Felhom.eu' | shot /root/shots/gramps-web-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/gramps-web/install -> 200 'Gramps Web — Telepítés — Felhom.eu' | shot /root/shots/gramps-web-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 206, + "front_door": true, + "seconds_to_front_door": 206 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgramps-web.tester4.test%2F", + "http_port_80": "301 https://gramps-web.tester4.test/", + "guide": { + "path": "/apps/gramps-web/guide", + "hu_len": 3334, + "en_len": 3137, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/gramps-web", + "hu_len": 806, + "en_len": 795, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/gramps-web/guide -> 200 'Gramps Web — Felhom.eu' | shot /root/shots/gramps-web-after-guide-phone-hu.png hscroll=False", + "goto https://gramps-web.tester4.test/firstrun -> 200 'Gramps Web' | shot /root/shots/gramps-web-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"13.93338225s\", \"last_run\": \"2026-10-24T16:13:32.736716053Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "gramps-web": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "gramps-web": 346.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 554 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-front-desktop-hu.png new file mode 100644 index 00000000..300514c3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-guide-phone-hu.png new file mode 100644 index 00000000..8bde8985 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-desktop-en.png new file mode 100644 index 00000000..9c5157cc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-phone-hu.png new file mode 100644 index 00000000..c6f863d5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/screens/gramps-web-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/gramps-web/walk.log b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/walk.log new file mode 100644 index 00000000..f0e23464 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/gramps-web/walk.log @@ -0,0 +1,9 @@ +16:09:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:12:56Z [1] deployed, controller state=running, pinned={'gramps-web': 'ghcr.io/gramps-project/grampsweb:v25.6.0'} +16:12:56Z gate: gramps-web is gated — passed as the household (cookie set) +16:12:56Z [1] installed: deployed 206 s, front door 206 s +16:12:56Z [3] no fixture for this app — the front door answering is the smallest honest check +16:13:18Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:14:16Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'gramps-web', 'volumes_removed': ['gramps-web_gramps_cache', 'gramps-web_gramps_db', 'gramps-web_gramps_index', 'gramps-web_gramps_media', 'gramps-web_gramps_secret', +16:18:35Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'gramps-web', 'volumes_removed': ['gramps-web_gramps_cache', 'gramps-web_gramps_db', 'gramps-web_gramps_index', 'gramps-web_gramps_media', 'gramps-web_gramps_secret', +16:18:44Z == gramps-web done in 554 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory.console.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory.console.txt new file mode 100644 index 00000000..3b473041 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory.console.txt @@ -0,0 +1,19 @@ +21:10:28Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +21:10:28Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:12:03Z [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'} +21:12:04Z gate: library is gated — passed as the household (cookie set) +21:12:04Z [1] installed: deployed 96 s, front door 96 s +21:12:04Z grimmory: POST /api/v1/setup (the first admin) http=200 +21:12:06Z grimmory: library 1, upload of an EPUB http=204 +21:12:06Z gate: library is gated — passed as the household (cookie set) +21:13:07Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +21:13:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:14:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us +21:14:22Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +21:15:58Z gate: library is gated — passed as the household (cookie set) +21:15:59Z grimmory: READBACK UNUSABLE — no token 401, wrong password 401, second setup 200 +21:16:07Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +21:16:18Z family gate: library is family-gated — passed as the household (cookie set) +21:17:18Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +21:17:58Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us +21:18:07Z == grimmory done in 459 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/console.txt new file mode 100644 index 00000000..2719d1f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/console.txt @@ -0,0 +1,17 @@ +16:59:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +16:59:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:01:26Z [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'} +17:01:26Z gate: library is gated — passed as the household (cookie set) +17:01:27Z [1] installed: deployed 111 s, front door 111 s +17:01:27Z grimmory: POST /api/v1/setup (the first admin) http=200 +17:01:28Z grimmory: library 1, upload of an EPUB http=204 +17:02:29Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +17:02:52Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:03:35Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us +17:03:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:05:36Z grimmory: READBACK UNUSABLE — no token 401, wrong password 401, second setup 200 +17:05:45Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +17:13:27Z app never answered on library/api/v1/healthcheck (last rc=0 code=401) +17:13:27Z grimmory: /api/v1/healthcheck never answered +17:14:08Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us +17:14:17Z == grimmory done in 882 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-en.txt new file mode 100644 index 00000000..8fcf5de6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Grimmory — Guide — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running library.tester4.test Open ↗ Files ↗ What is it for? E-books and comics in a tidy library, with covers and details Read in the browser with your progress saved; Kobo and KOReader sync An OPDS catalog for e-reader apps (switch it on in the settings) Instead of or next to Calibre-Web: a more modern interface; Calibre-Web suits Calibre libraries First steps Open library.tester4.test and create your admin account Add your family members on the dashboard's Settings, Security page, Family card - a stranger cannot even reach Grimmory Create a library with the /books folder - on your drive that is the userdata/media/grimmory folder Upload your books, or copy them into the „E-books to read in (Grimmory)” folder For your e-reader, switch on OPDS in the settings and create an OPDS user Grimmory looks book details up with outside services (Google Books, Open Library); Kobo sync also goes through the Kobo store Books from the folder to read in What you copy into the „E-books to read in (Grimmory)” folder you look over first, and only then does it go into your library. In the menu on the left, under „Tools”, select „Bookdrop”. Check the title and the author of each book, and choose your library in „Library”. Select the books, or select „Select All”. Select „Finalize” and confirm. The books move into your library. Read in the browser You can read an e-book on the computer or on the phone, with no other program. In the menu on the left, select „All Books”, and choose a book. Select „Read”. When you close it, Grimmory remembers where you are, and next time you go on from there. Shelves for the family A shelf is your own selection, for example the children's books or what to read next. At the bottom of the menu on the left, select „Create”, and choose „Create New Shelf”. Type the shelf's name in „Shelf Name”. If the rest of the family should see it too, tick „Make this shelf public (read-only for others)”, then select „Create Shelf”. In a book's menu, choose „Assign Shelf”, tick the shelf, and select „Save Changes”. Sync with KOReader If you read with KOReader, your progress moves together with Grimmory. Open the „Devices” tab of the „Settings” page. Switch on „Enable KOReader Sync”. Enter a „KOReader Username” and a „KOReader Password”, and select „Save”. In KOReader, in the progress sync settings, enter the „KOReader API Path” address, this name and this password. Frequently asked questions Can I switch it to Hungarian? Yes: on the „View” tab of the „Settings” page, in „Language”. The translation is not complete, so some labels stay in English. What is the difference between a shelf and „Magic Shelves”? You put the books on a shelf yourself. A magic shelf collects them by itself, by rules, for example every book by one author. Which files can I upload? E-books (EPUB, PDF, MOBI, AZW3, FB2), comics (CBZ, CBR, CB7) and audiobooks (M4B, M4A, MP3, OPUS). Why does a book I copied into the folder not show up? A book in the folder to read in does not go in by itself: you first finalize it on the „Bookdrop” page. If it is not there either, select „Rescan” on that page. Where are my books? On your drive, in the „E-book library (Grimmory)” folder. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-hu.txt new file mode 100644 index 00000000..aa6042fe --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut library.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? E-könyvek és képregények rendezett könyvtárban, borítóval és adatokkal Olvasás a böngészőben, haladás mentése; Kobo- és KOReader-szinkron OPDS-katalógus az e-könyv-olvasó alkalmazásoknak (a Beállításokban kapcsold be) A Calibre-Web helyett vagy mellett: ez modernebb felület, a Calibre-Web a Calibre-könyvtárakhoz jó Első lépések Nyisd meg a library.tester4.test címet, és hozd létre az admin fiókodat A családtagjaidat a vezérlőpult Beállítások, Biztonság oldalán, a Család kártyán add hozzá - idegen el sem éri a Grimmoryt Hozz létre egy könyvtárat a /books mappával - ez a meghajtódon a userdata/media/grimmory mappa Töltsd fel a könyveidet, vagy másold őket a „Beolvasandó e-könyvek (Grimmory)" mappába Az e-könyv-olvasódhoz kapcsold be az OPDS-t a Beállításokban, és hozz létre OPDS-felhasználót A könyvadatokat a Grimmory külső szolgáltatóktól kéri le (Google Books, Open Library); a Kobo-szinkron a Kobo áruházán át is megy Könyvek a beolvasandó mappából Amit a „Beolvasandó e-könyvek (Grimmory)” mappába másolsz, azt előbb átnézed, és csak utána kerül a könyvtáradba. A bal oldali menüben a „Tools” (eszközök) alatt kattints a „Bookdrop” (gyűjtőláda) pontra. Nézd meg minden könyvnél a címet és a szerzőt, és a „Library” (könyvtár) mezőben válaszd ki a könyvtáradat. Jelöld ki a könyveket, vagy kattints a „Select All” (összes kijelölése) gombra. Kattints a „Finalize” (véglegesítés) gombra, és erősítsd meg. A könyvek átkerülnek a könyvtáradba. Olvasás a böngészőben Az e-könyvet a gépen vagy a telefonon is olvashatod, külön program nélkül. A bal oldali menüben kattints az „All Books” (minden könyv) pontra, és válassz egy könyvet. Kattints a „Read” (olvasás) gombra. Ha bezárod, a Grimmory megjegyzi, hol tartasz, és legközelebb onnan folytatod. Polcok a családnak Egy polc a saját válogatásod, például a gyerekek könyvei vagy a következő olvasnivaló. A bal oldali menü alján kattints a „Create” (létrehozás) gombra, és válaszd a „Create New Shelf” (új polc) pontot. Írd be a polc nevét a „Shelf Name” (polc neve) mezőbe. Ha a család többi tagja is lássa, jelöld be a „Make this shelf public (read-only for others)” (nyilvános polc) jelölőt, majd kattints a „Create Shelf” gombra. Egy könyv menüjében válaszd az „Assign Shelf” (polcra tesz) pontot, jelöld be a polcot, és kattints a „Save Changes” (mentés) gombra. Szinkron KOReaderrel Ha KOReaderrel olvasol, a haladásod a Grimmoryval együtt mozog. Nyisd meg a „Settings” (Beállítások) oldal „Devices” (eszközök) fülét. Kapcsold be az „Enable KOReader Sync” (KOReader szinkron) kapcsolót. Adj meg egy „KOReader Username” (felhasználónév) és egy „KOReader Password” (jelszó) értéket, és kattints a „Save” (mentés) gombra. A KOReaderben a haladás-szinkron beállításánál add meg a „KOReader API Path” címet, ezt a nevet és ezt a jelszót. Gyakori kérdések Át tudom állítani magyarra? Igen: a „Settings” oldal „View” (nézet) fülén a „Language” (nyelv) mezőben. A fordítás nem teljes, ezért néhány felirat angolul marad. Mi a különbség a polc és a „Magic Shelves” (varázspolcok) között? A polcra te teszed a könyveket. A varázspolc szabályok alapján magától gyűjti őket, például egy szerző összes könyvét. Milyen fájlokat tölthetek fel? E-könyvet (EPUB, PDF, MOBI, AZW3, FB2), képregényt (CBZ, CBR, CB7) és hangoskönyvet (M4B, M4A, MP3, OPUS). Miért nem jelenik meg a könyv, amit a mappába másoltam? A beolvasandó mappából a könyv nem kerül be magától: előbb a „Bookdrop” oldalon kell véglegesítened. Ha ott sincs, kattints ott a „Rescan” (újraolvasás) gombra. Hol vannak a könyveim? A meghajtódon, az „E-könyvtár (Grimmory)” mappában. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-en.txt new file mode 100644 index 00000000..de619f65 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-en.txt @@ -0,0 +1 @@ +Grimmory — Install — Felhom.eu ← Back Grimmory — Install An e-book library with an in-browser reader, OPDS, Kobo and KOReader sync ~600M RAM Needs a hard drive Full description, screenshots Memory 600 MB / 7479 MB (8%) Current usage (0 MB) Grimmory (+600 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Database root password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Library drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive your books will live on Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-hu.txt new file mode 100644 index 00000000..f45992f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Grimmory — Telepítés — Felhom.eu ← Vissza Grimmory — Telepítés E-könyvtár böngészőben olvasóval, OPDS-sel, Kobo és KOReader szinkronnal ~600M RAM HDD szükséges Részletes leírás, képernyőképek Memória 600 MB / 7479 MB (8%) Jelenlegi használat (0 MB) Grimmory (+600 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Adatbázis root jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyen a könyveid lesznek Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-en.txt new file mode 100644 index 00000000..e40d077d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Grimmory — Settings — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running library.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address library.tester4.test Storage Külső tárhely (hdd_1) Database password Show Database root password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-hu.txt new file mode 100644 index 00000000..ed603cca --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut library.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím library.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés Adatbázis root jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/record.json new file mode 100644 index 00000000..26e92f16 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/record.json @@ -0,0 +1,149 @@ +{ + "app": "grimmory", + "sub": "library", + "fixture": "Grimmory", + "started": "2026-10-24T16:59:18Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "DB_ROOT_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/grimmory/install", + "hu_len": 1359, + "en_len": 1215, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 111, + "front_door": true, + "seconds_to_front_door": 111 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Flibrary.tester4.test%2F", + "http_port_80": "301 https://library.tester4.test/", + "guide": { + "path": "/apps/grimmory/guide", + "hu_len": 3911, + "en_len": 3445, + "english_words_in_hu": [ + "open", + "password", + "settings", + "this" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/grimmory", + "hu_len": 816, + "en_len": 812, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/grimmory/guide -> 200 'Grimmory — Felhom.eu' | shot /root/shots/grimmory-after-guide-phone-hu.png hscroll=False", + "goto https://library.tester4.test/ -> 200 'Grimmory' | shot /root/shots/grimmory-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"9.844716896s\", \"last_run\": \"2026-10-24T17:03:02.121383616Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t." + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"docmost\", \"started_at\": \"2026-10-24T16:57:51.926905016Z\", \"last\": {\"op\": \"restore\", \"stack\": \"docmost\", \"ok\": true, \"message\": \"A(z) docmost: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:58:25.790525426Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": false, + "containers": { + "grimmory": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "grimmory-db": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 7, + "sample": [ + "grimmory: 2026-10-24T19:04:52.750+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_marks' ignored for PRIMARY key. (SQL State: - Error C", + "grimmory: 2026-10-24T19:04:54.654+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_annotations' ignored for PRIMARY key. (SQL State: - Error ", + "grimmory: 2026-10-24T19:04:54.919+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_notes_v2' ignored for PRIMARY key. (SQL State: - Erro", + "grimmory: 2026-10-24T19:04:59.406+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Specified key was too long; max key length is 3072 bytes (SQL State:" + ] + }, + "mem_peak_mib": { + "grimmory": 514.3, + "grimmory-db": 110.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 882 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-front-desktop-hu.png new file mode 100644 index 00000000..3da8e91e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-guide-phone-hu.png new file mode 100644 index 00000000..fcbdf43a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-desktop-en.png new file mode 100644 index 00000000..b27c450f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-phone-hu.png new file mode 100644 index 00000000..dcbf3182 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/screens/grimmory-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/walk.log new file mode 100644 index 00000000..2719d1f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/first-run/walk.log @@ -0,0 +1,17 @@ +16:59:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +16:59:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:01:26Z [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'} +17:01:26Z gate: library is gated — passed as the household (cookie set) +17:01:27Z [1] installed: deployed 111 s, front door 111 s +17:01:27Z grimmory: POST /api/v1/setup (the first admin) http=200 +17:01:28Z grimmory: library 1, upload of an EPUB http=204 +17:02:29Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +17:02:52Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:03:35Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us +17:03:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:05:36Z grimmory: READBACK UNUSABLE — no token 401, wrong password 401, second setup 200 +17:05:45Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +17:13:27Z app never answered on library/api/v1/healthcheck (last rc=0 code=401) +17:13:27Z grimmory: /api/v1/healthcheck never answered +17:14:08Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us +17:14:17Z == grimmory done in 882 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-en.txt new file mode 100644 index 00000000..7f3009d8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-en.txt @@ -0,0 +1 @@ +Grimmory — Guide — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running Up to date library.tester4.test Open ↗ Files ↗ What is it for? E-books and comics in a tidy library, with covers and details Read in the browser with your progress saved; Kobo and KOReader sync An OPDS catalog for e-reader apps (switch it on in the settings) Instead of or next to Calibre-Web: a more modern interface; Calibre-Web suits Calibre libraries First steps Open library.tester4.test and create your admin account Add your family members on the dashboard's Settings, Security page, Family card - a stranger cannot even reach Grimmory Create a library with the /books folder - on your drive that is the userdata/media/grimmory folder Upload your books, or copy them into the „E-books to read in (Grimmory)” folder For your e-reader, switch on OPDS in the settings and create an OPDS user Grimmory looks book details up with outside services (Google Books, Open Library); Kobo sync also goes through the Kobo store Books from the folder to read in What you copy into the „E-books to read in (Grimmory)” folder you look over first, and only then does it go into your library. In the menu on the left, under „Tools”, select „Bookdrop”. Check the title and the author of each book, and choose your library in „Library”. Select the books, or select „Select All”. Select „Finalize” and confirm. The books move into your library. Read in the browser You can read an e-book on the computer or on the phone, with no other program. In the menu on the left, select „All Books”, and choose a book. Select „Read”. When you close it, Grimmory remembers where you are, and next time you go on from there. Shelves for the family A shelf is your own selection, for example the children's books or what to read next. At the bottom of the menu on the left, select „Create”, and choose „Create New Shelf”. Type the shelf's name in „Shelf Name”. If the rest of the family should see it too, tick „Make this shelf public (read-only for others)”, then select „Create Shelf”. In a book's menu, choose „Assign Shelf”, tick the shelf, and select „Save Changes”. Sync with KOReader If you read with KOReader, your progress moves together with Grimmory. Open the „Devices” tab of the „Settings” page. Switch on „Enable KOReader Sync”. Enter a „KOReader Username” and a „KOReader Password”, and select „Save”. In KOReader, in the progress sync settings, enter the „KOReader API Path” address, this name and this password. Frequently asked questions Can I switch it to Hungarian? Yes: on the „View” tab of the „Settings” page, in „Language”. The translation is not complete, so some labels stay in English. What is the difference between a shelf and „Magic Shelves”? You put the books on a shelf yourself. A magic shelf collects them by itself, by rules, for example every book by one author. Which files can I upload? E-books (EPUB, PDF, MOBI, AZW3, FB2), comics (CBZ, CBR, CB7) and audiobooks (M4B, M4A, MP3, OPUS). Why does a book I copied into the folder not show up? A book in the folder to read in does not go in by itself: you first finalize it on the „Bookdrop” page. If it is not there either, select „Rescan” on that page. Where are my books? On your drive, in the „E-book library (Grimmory)” folder. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-hu.txt new file mode 100644 index 00000000..d4bb0611 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-guide-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut Naprakész library.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? E-könyvek és képregények rendezett könyvtárban, borítóval és adatokkal Olvasás a böngészőben, haladás mentése; Kobo- és KOReader-szinkron OPDS-katalógus az e-könyv-olvasó alkalmazásoknak (a Beállításokban kapcsold be) A Calibre-Web helyett vagy mellett: ez modernebb felület, a Calibre-Web a Calibre-könyvtárakhoz jó Első lépések Nyisd meg a library.tester4.test címet, és hozd létre az admin fiókodat A családtagjaidat a vezérlőpult Beállítások, Biztonság oldalán, a Család kártyán add hozzá - idegen el sem éri a Grimmoryt Hozz létre egy könyvtárat a /books mappával - ez a meghajtódon a userdata/media/grimmory mappa Töltsd fel a könyveidet, vagy másold őket a „Beolvasandó e-könyvek (Grimmory)" mappába Az e-könyv-olvasódhoz kapcsold be az OPDS-t a Beállításokban, és hozz létre OPDS-felhasználót A könyvadatokat a Grimmory külső szolgáltatóktól kéri le (Google Books, Open Library); a Kobo-szinkron a Kobo áruházán át is megy Könyvek a beolvasandó mappából Amit a „Beolvasandó e-könyvek (Grimmory)” mappába másolsz, azt előbb átnézed, és csak utána kerül a könyvtáradba. A bal oldali menüben a „Tools” (eszközök) alatt kattints a „Bookdrop” (gyűjtőláda) pontra. Nézd meg minden könyvnél a címet és a szerzőt, és a „Library” (könyvtár) mezőben válaszd ki a könyvtáradat. Jelöld ki a könyveket, vagy kattints a „Select All” (összes kijelölése) gombra. Kattints a „Finalize” (véglegesítés) gombra, és erősítsd meg. A könyvek átkerülnek a könyvtáradba. Olvasás a böngészőben Az e-könyvet a gépen vagy a telefonon is olvashatod, külön program nélkül. A bal oldali menüben kattints az „All Books” (minden könyv) pontra, és válassz egy könyvet. Kattints a „Read” (olvasás) gombra. Ha bezárod, a Grimmory megjegyzi, hol tartasz, és legközelebb onnan folytatod. Polcok a családnak Egy polc a saját válogatásod, például a gyerekek könyvei vagy a következő olvasnivaló. A bal oldali menü alján kattints a „Create” (létrehozás) gombra, és válaszd a „Create New Shelf” (új polc) pontot. Írd be a polc nevét a „Shelf Name” (polc neve) mezőbe. Ha a család többi tagja is lássa, jelöld be a „Make this shelf public (read-only for others)” (nyilvános polc) jelölőt, majd kattints a „Create Shelf” gombra. Egy könyv menüjében válaszd az „Assign Shelf” (polcra tesz) pontot, jelöld be a polcot, és kattints a „Save Changes” (mentés) gombra. Szinkron KOReaderrel Ha KOReaderrel olvasol, a haladásod a Grimmoryval együtt mozog. Nyisd meg a „Settings” (Beállítások) oldal „Devices” (eszközök) fülét. Kapcsold be az „Enable KOReader Sync” (KOReader szinkron) kapcsolót. Adj meg egy „KOReader Username” (felhasználónév) és egy „KOReader Password” (jelszó) értéket, és kattints a „Save” (mentés) gombra. A KOReaderben a haladás-szinkron beállításánál add meg a „KOReader API Path” címet, ezt a nevet és ezt a jelszót. Gyakori kérdések Át tudom állítani magyarra? Igen: a „Settings” oldal „View” (nézet) fülén a „Language” (nyelv) mezőben. A fordítás nem teljes, ezért néhány felirat angolul marad. Mi a különbség a polc és a „Magic Shelves” (varázspolcok) között? A polcra te teszed a könyveket. A varázspolc szabályok alapján magától gyűjti őket, például egy szerző összes könyvét. Milyen fájlokat tölthetek fel? E-könyvet (EPUB, PDF, MOBI, AZW3, FB2), képregényt (CBZ, CBR, CB7) és hangoskönyvet (M4B, M4A, MP3, OPUS). Miért nem jelenik meg a könyv, amit a mappába másoltam? A beolvasandó mappából a könyv nem kerül be magától: előbb a „Bookdrop” oldalon kell véglegesítened. Ha ott sincs, kattints ott a „Rescan” (újraolvasás) gombra. Hol vannak a könyveim? A meghajtódon, az „E-könyvtár (Grimmory)” mappában. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-en.txt new file mode 100644 index 00000000..de619f65 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-en.txt @@ -0,0 +1 @@ +Grimmory — Install — Felhom.eu ← Back Grimmory — Install An e-book library with an in-browser reader, OPDS, Kobo and KOReader sync ~600M RAM Needs a hard drive Full description, screenshots Memory 600 MB / 7479 MB (8%) Current usage (0 MB) Grimmory (+600 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Database root password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Library drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive your books will live on Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-hu.txt new file mode 100644 index 00000000..f45992f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-install-hu.txt @@ -0,0 +1 @@ +Grimmory — Telepítés — Felhom.eu ← Vissza Grimmory — Telepítés E-könyvtár böngészőben olvasóval, OPDS-sel, Kobo és KOReader szinkronnal ~600M RAM HDD szükséges Részletes leírás, képernyőképek Memória 600 MB / 7479 MB (8%) Jelenlegi használat (0 MB) Grimmory (+600 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Adatbázis root jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyen a könyveid lesznek Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-en.txt new file mode 100644 index 00000000..ef58fb96 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-en.txt @@ -0,0 +1 @@ +Grimmory — Settings — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running Up to date library.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address library.tester4.test Storage Külső tárhely (hdd_1) Database password Show Database root password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-hu.txt new file mode 100644 index 00000000..e90e0f2a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/page-overview-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut Naprakész library.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím library.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés Adatbázis root jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/record.json b/documentation/audits/catalog-sweep-2026-10-24/grimmory/record.json new file mode 100644 index 00000000..cec9a8a2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/record.json @@ -0,0 +1,153 @@ +{ + "app": "grimmory", + "sub": "library", + "fixture": "Grimmory", + "started": "2026-10-24T21:10:08Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "DB_ROOT_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/grimmory/install", + "hu_len": 1359, + "en_len": 1215, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 96, + "front_door": true, + "seconds_to_front_door": 96 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Flibrary.tester4.test%2F", + "http_port_80": "301 https://library.tester4.test/", + "guide": { + "path": "/apps/grimmory/guide", + "hu_len": 3921, + "en_len": 3456, + "english_words_in_hu": [ + "open", + "password", + "settings", + "this" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/grimmory", + "hu_len": 826, + "en_len": 823, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/grimmory/guide -> 200 'Grimmory — Felhom.eu' | shot /root/shots/grimmory-after-guide-phone-hu.png hscroll=False", + "goto https://library.tester4.test/ -> 200 'Grimmory' | shot /root/shots/grimmory-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"9.426632762s\", \"last_run\": \"2026-10-24T21:13:40.712031989Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t." + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"papra\", \"started_at\": \"2026-10-24T20:52:05.728175679Z\", \"last\": {\"op\": \"restore\", \"stack\": \"papra\", \"ok\": true, \"message\": \"A(z) papra: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:52:21.170154643Z\"}}", + "state": "running" + }, + "seed_read_after_unit_restore": false, + "containers": { + "grimmory": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "grimmory-db": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 19, + "sample": [ + "grimmory: 2026-10-24T23:15:15.639+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_marks' ignored for PRIMARY key. (SQL State: - Error C", + "grimmory: 2026-10-24T23:15:17.519+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_annotations' ignored for PRIMARY key. (SQL State: - Error ", + "grimmory: 2026-10-24T23:15:17.800+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_notes_v2' ignored for PRIMARY key. (SQL State: - Erro", + "grimmory: 2026-10-24T23:15:22.120+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Specified key was too long; max key length is 3072 bytes (SQL State:" + ] + }, + "mem_peak_mib": { + "grimmory": 484.8, + "grimmory-db": 112.0 + }, + "mem_anon_peak_mib": { + "grimmory-db": 108.5, + "grimmory": 485.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 459 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-en.txt new file mode 100644 index 00000000..ffb285ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-en.txt @@ -0,0 +1 @@ +Grimmory — Guide — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running library.tester4.test Open ↗ Files ↗ No health check ran: no matching container. What is it for? E-books and comics in a tidy library, with covers and details Read in the browser with your progress saved; Kobo and KOReader sync An OPDS catalog for e-reader apps (switch it on in the settings) Instead of or next to Calibre-Web: a more modern interface; Calibre-Web suits Calibre libraries First steps Open library.tester4.test and create your admin account Add your family members on the dashboard's Settings, Security page, Family card - a stranger cannot even reach Grimmory Create a library with the /books folder - on your drive that is the userdata/media/grimmory folder Upload your books, or copy them into the „E-books to read in (Grimmory)” folder For your e-reader, switch on OPDS in the settings and create an OPDS user Grimmory looks book details up with outside services (Google Books, Open Library); Kobo sync also goes through the Kobo store Books from the folder to read in What you copy into the „E-books to read in (Grimmory)” folder you look over first, and only then does it go into your library. In the menu on the left, under „Tools”, select „Bookdrop”. Check the title and the author of each book, and choose your library in „Library”. Select the books, or select „Select All”. Select „Finalize” and confirm. The books move into your library. Read in the browser You can read an e-book on the computer or on the phone, with no other program. In the menu on the left, select „All Books”, and choose a book. Select „Read”. When you close it, Grimmory remembers where you are, and next time you go on from there. Shelves for the family A shelf is your own selection, for example the children's books or what to read next. At the bottom of the menu on the left, select „Create”, and choose „Create New Shelf”. Type the shelf's name in „Shelf Name”. If the rest of the family should see it too, tick „Make this shelf public (read-only for others)”, then select „Create Shelf”. In a book's menu, choose „Assign Shelf”, tick the shelf, and select „Save Changes”. Sync with KOReader If you read with KOReader, your progress moves together with Grimmory. Open the „Devices” tab of the „Settings” page. Switch on „Enable KOReader Sync”. Enter a „KOReader Username” and a „KOReader Password”, and select „Save”. In KOReader, in the progress sync settings, enter the „KOReader API Path” address, this name and this password. Frequently asked questions Can I switch it to Hungarian? Yes: on the „View” tab of the „Settings” page, in „Language”. The translation is not complete, so some labels stay in English. What is the difference between a shelf and „Magic Shelves”? You put the books on a shelf yourself. A magic shelf collects them by itself, by rules, for example every book by one author. Which files can I upload? E-books (EPUB, PDF, MOBI, AZW3, FB2), comics (CBZ, CBR, CB7) and audiobooks (M4B, M4A, MP3, OPUS). Why does a book I copied into the folder not show up? A book in the folder to read in does not go in by itself: you first finalize it on the „Bookdrop” page. If it is not there either, select „Rescan” on that page. Where are my books? On your drive, in the „E-book library (Grimmory)” folder. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-hu.txt new file mode 100644 index 00000000..41f50b94 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-guide-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut library.tester4.test Megnyitás ↗ Fájlok ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Mire használható? E-könyvek és képregények rendezett könyvtárban, borítóval és adatokkal Olvasás a böngészőben, haladás mentése; Kobo- és KOReader-szinkron OPDS-katalógus az e-könyv-olvasó alkalmazásoknak (a Beállításokban kapcsold be) A Calibre-Web helyett vagy mellett: ez modernebb felület, a Calibre-Web a Calibre-könyvtárakhoz jó Első lépések Nyisd meg a library.tester4.test címet, és hozd létre az admin fiókodat A családtagjaidat a vezérlőpult Beállítások, Biztonság oldalán, a Család kártyán add hozzá - idegen el sem éri a Grimmoryt Hozz létre egy könyvtárat a /books mappával - ez a meghajtódon a userdata/media/grimmory mappa Töltsd fel a könyveidet, vagy másold őket a „Beolvasandó e-könyvek (Grimmory)" mappába Az e-könyv-olvasódhoz kapcsold be az OPDS-t a Beállításokban, és hozz létre OPDS-felhasználót A könyvadatokat a Grimmory külső szolgáltatóktól kéri le (Google Books, Open Library); a Kobo-szinkron a Kobo áruházán át is megy Könyvek a beolvasandó mappából Amit a „Beolvasandó e-könyvek (Grimmory)” mappába másolsz, azt előbb átnézed, és csak utána kerül a könyvtáradba. A bal oldali menüben a „Tools” (eszközök) alatt kattints a „Bookdrop” (gyűjtőláda) pontra. Nézd meg minden könyvnél a címet és a szerzőt, és a „Library” (könyvtár) mezőben válaszd ki a könyvtáradat. Jelöld ki a könyveket, vagy kattints a „Select All” (összes kijelölése) gombra. Kattints a „Finalize” (véglegesítés) gombra, és erősítsd meg. A könyvek átkerülnek a könyvtáradba. Olvasás a böngészőben Az e-könyvet a gépen vagy a telefonon is olvashatod, külön program nélkül. A bal oldali menüben kattints az „All Books” (minden könyv) pontra, és válassz egy könyvet. Kattints a „Read” (olvasás) gombra. Ha bezárod, a Grimmory megjegyzi, hol tartasz, és legközelebb onnan folytatod. Polcok a családnak Egy polc a saját válogatásod, például a gyerekek könyvei vagy a következő olvasnivaló. A bal oldali menü alján kattints a „Create” (létrehozás) gombra, és válaszd a „Create New Shelf” (új polc) pontot. Írd be a polc nevét a „Shelf Name” (polc neve) mezőbe. Ha a család többi tagja is lássa, jelöld be a „Make this shelf public (read-only for others)” (nyilvános polc) jelölőt, majd kattints a „Create Shelf” gombra. Egy könyv menüjében válaszd az „Assign Shelf” (polcra tesz) pontot, jelöld be a polcot, és kattints a „Save Changes” (mentés) gombra. Szinkron KOReaderrel Ha KOReaderrel olvasol, a haladásod a Grimmoryval együtt mozog. Nyisd meg a „Settings” (Beállítások) oldal „Devices” (eszközök) fülét. Kapcsold be az „Enable KOReader Sync” (KOReader szinkron) kapcsolót. Adj meg egy „KOReader Username” (felhasználónév) és egy „KOReader Password” (jelszó) értéket, és kattints a „Save” (mentés) gombra. A KOReaderben a haladás-szinkron beállításánál add meg a „KOReader API Path” címet, ezt a nevet és ezt a jelszót. Gyakori kérdések Át tudom állítani magyarra? Igen: a „Settings” oldal „View” (nézet) fülén a „Language” (nyelv) mezőben. A fordítás nem teljes, ezért néhány felirat angolul marad. Mi a különbség a polc és a „Magic Shelves” (varázspolcok) között? A polcra te teszed a könyveket. A varázspolc szabályok alapján magától gyűjti őket, például egy szerző összes könyvét. Milyen fájlokat tölthetek fel? E-könyvet (EPUB, PDF, MOBI, AZW3, FB2), képregényt (CBZ, CBR, CB7) és hangoskönyvet (M4B, M4A, MP3, OPUS). Miért nem jelenik meg a könyv, amit a mappába másoltam? A beolvasandó mappából a könyv nem kerül be magától: előbb a „Bookdrop” oldalon kell véglegesítened. Ha ott sincs, kattints ott a „Rescan” (újraolvasás) gombra. Hol vannak a könyveim? A meghajtódon, az „E-könyvtár (Grimmory)” mappában. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-en.txt new file mode 100644 index 00000000..de619f65 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-en.txt @@ -0,0 +1 @@ +Grimmory — Install — Felhom.eu ← Back Grimmory — Install An e-book library with an in-browser reader, OPDS, Kobo and KOReader sync ~600M RAM Needs a hard drive Full description, screenshots Memory 600 MB / 7479 MB (8%) Current usage (0 MB) Grimmory (+600 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Database root password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Library drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive your books will live on Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-hu.txt new file mode 100644 index 00000000..f45992f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-install-hu.txt @@ -0,0 +1 @@ +Grimmory — Telepítés — Felhom.eu ← Vissza Grimmory — Telepítés E-könyvtár böngészőben olvasóval, OPDS-sel, Kobo és KOReader szinkronnal ~600M RAM HDD szükséges Részletes leírás, képernyőképek Memória 600 MB / 7479 MB (8%) Jelenlegi használat (0 MB) Grimmory (+600 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Adatbázis root jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). E-könyvtár meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyen a könyveid lesznek Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-en.txt new file mode 100644 index 00000000..cf145412 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-en.txt @@ -0,0 +1 @@ +Grimmory — Settings — Felhom.eu ← Apps Grimmory An e-book library - read in the browser, on a Kobo, with KOReader or any OPDS reader ● Running library.tester4.test Open ↗ Files ↗ No health check ran: no matching container. Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address library.tester4.test Storage Külső tárhely (hdd_1) Database password Show Database root password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-hu.txt new file mode 100644 index 00000000..a718bced --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/page-overview-hu.txt @@ -0,0 +1 @@ +Grimmory — Felhom.eu ← Alkalmazások Grimmory E-könyvtár - olvasd böngészőben, Kobón, KOReaderrel vagy bármely OPDS-olvasóval ● Fut library.tester4.test Megnyitás ↗ Fájlok ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím library.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés Adatbázis root jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/record.json new file mode 100644 index 00000000..bd311ee1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/record.json @@ -0,0 +1,153 @@ +{ + "app": "grimmory", + "sub": "library", + "fixture": "Grimmory", + "started": "2026-10-24T20:21:21Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "DB_ROOT_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/grimmory/install", + "hu_len": 1359, + "en_len": 1215, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/grimmory/install -> 200 'Grimmory — Telepítés — Felhom.eu' | shot /root/shots/grimmory-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 101, + "front_door": true, + "seconds_to_front_door": 101 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Flibrary.tester4.test%2F", + "http_port_80": "301 https://library.tester4.test/", + "guide": { + "path": "/apps/grimmory/guide", + "hu_len": 3972, + "en_len": 3489, + "english_words_in_hu": [ + "open", + "password", + "settings", + "this" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/grimmory", + "hu_len": 877, + "en_len": 856, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/grimmory/guide -> 200 'Grimmory — Felhom.eu' | shot /root/shots/grimmory-after-guide-phone-hu.png hscroll=False", + "goto https://library.tester4.test/ -> 200 'Grimmory' | shot /root/shots/grimmory-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"9.190846046s\", \"last_run\": \"2026-10-24T20:25:00.086640647Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t." + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"adventurelog\", \"started_at\": \"2026-10-24T20:06:26.242433708Z\", \"last\": {\"op\": \"restore\", \"stack\": \"adventurelog\", \"ok\": true, \"message\": \"A(z) adventurelog: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:08:19.382610963Z\"}}", + "state": "running" + }, + "seed_read_after_unit_restore": false, + "containers": { + "grimmory": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "grimmory-db": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 7, + "sample": [ + "grimmory: 2026-10-24T22:26:32.036+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_marks' ignored for PRIMARY key. (SQL State: - Error C", + "grimmory: 2026-10-24T22:26:34.200+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_annotations' ignored for PRIMARY key. (SQL State: - Error ", + "grimmory: 2026-10-24T22:26:34.556+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Name 'pk_book_notes_v2' ignored for PRIMARY key. (SQL State: - Erro", + "grimmory: 2026-10-24T22:26:39.005+02:00 WARN 1 --- [booklore-api] [ main] o.f.c.i.s.DefaultSqlScriptExecutor : DB: Specified key was too long; max key length is 3072 bytes (SQL State:" + ] + }, + "mem_peak_mib": { + "grimmory-db": 111.1, + "grimmory": 506.4 + }, + "mem_anon_peak_mib": { + "grimmory-db": 107.6, + "grimmory": 514.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/grimmory", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 852 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-front-desktop-hu.png new file mode 100644 index 00000000..d0aa8a74 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-guide-phone-hu.png new file mode 100644 index 00000000..fcbdf43a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-desktop-en.png new file mode 100644 index 00000000..b27c450f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-phone-hu.png new file mode 100644 index 00000000..dcbf3182 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/screens/grimmory-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/walk.log new file mode 100644 index 00000000..5dcdf1bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/run-2/walk.log @@ -0,0 +1,17 @@ +20:21:41Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +20:21:42Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:23:22Z [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'} +20:23:22Z gate: library is gated — passed as the household (cookie set) +20:23:22Z [1] installed: deployed 101 s, front door 101 s +20:23:23Z grimmory: POST /api/v1/setup (the first admin) http=200 +20:23:24Z grimmory: library 1, upload of an EPUB http=204 +20:24:25Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +20:24:50Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:25:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us +20:25:42Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +20:27:14Z grimmory: READBACK UNUSABLE — no token 401, wrong password 401, second setup 200 +20:27:23Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +20:35:05Z app never answered on library/api/v1/healthcheck (last rc=0 code=401) +20:35:05Z grimmory: /api/v1/healthcheck never answered +20:35:45Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us +20:35:53Z == grimmory done in 852 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-front-desktop-hu.png new file mode 100644 index 00000000..baeea37b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-guide-phone-hu.png new file mode 100644 index 00000000..fcbdf43a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-desktop-en.png new file mode 100644 index 00000000..b27c450f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-phone-hu.png new file mode 100644 index 00000000..dcbf3182 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grimmory/screens/grimmory-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grimmory/walk.log b/documentation/audits/catalog-sweep-2026-10-24/grimmory/walk.log new file mode 100644 index 00000000..3b473041 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grimmory/walk.log @@ -0,0 +1,19 @@ +21:10:28Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +21:10:28Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:12:03Z [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'} +21:12:04Z gate: library is gated — passed as the household (cookie set) +21:12:04Z [1] installed: deployed 96 s, front door 96 s +21:12:04Z grimmory: POST /api/v1/setup (the first admin) http=200 +21:12:06Z grimmory: library 1, upload of an EPUB http=204 +21:12:06Z gate: library is gated — passed as the household (cookie set) +21:13:07Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +21:13:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:14:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us +21:14:22Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +21:15:58Z gate: library is gated — passed as the household (cookie set) +21:15:59Z grimmory: READBACK UNUSABLE — no token 401, wrong password 401, second setup 200 +21:16:07Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+Ezekr%C5%91l+a+f%C3%A1jlokr%C3%B3l+jelenleg+nincs+m%C3%A1solat+%E2%80%94+kapcsold+be+a+t%C3%A1voli+ment%C3%A9st%2C+vagy+csatlakoztass+egy+m%C3%A1sodik+meghajt%C3%B3t.'] +21:16:18Z family gate: library is family-gated — passed as the household (cookie set) +21:17:18Z grimmory: readback http=401 found=False (controls: no token 401, wrong 401, second setup 403) +21:17:58Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us +21:18:07Z == grimmory done in 459 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy.console.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy.console.txt new file mode 100644 index 00000000..920bc035 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy.console.txt @@ -0,0 +1,16 @@ +13:41:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +13:41:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:41:49Z [1] deployed, controller state=running, pinned={'grocy': 'lscr.io/linuxserver/grocy:4.7.1'} +13:41:49Z [1] installed: deployed 35 s, front door 36 s +13:41:50Z grocy: signed in with the box's generated password +13:41:50Z grocy: POST /api/objects/products http=200 :: {"created_object_id":"1"} +13:41:50Z grocy: POST /api/stock/products/1/add http=200 +13:41:51Z grocy: readback http=200 found=True (controls: no cookie 401, wrong 401, absent 404) +13:42:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:42:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grocy', 'volumes_removed': ['grocy_grocy_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack grocy +13:43:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +13:43:40Z grocy: readback http=400 found=False (controls: no cookie 401, wrong 401, absent 404) +13:43:40Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:43:56Z grocy: readback http=200 found=True (controls: no cookie 401, wrong 401, absent 404) +13:44:38Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grocy', 'volumes_removed': ['grocy_grocy_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +13:44:47Z == grocy done in 213 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-en.txt new file mode 100644 index 00000000..d8e40909 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-en.txt @@ -0,0 +1 @@ +Grocy — Guide — Felhom.eu ← Apps Grocy Running the household: what is in the house, what runs out, what to buy, whose turn it is ● Running kamra.tester4.test Open ↗ What is it for? Keeps track of what is in the house, and tells you when something has run out or is going off A shopping list that adds what has dropped below its minimum on its own Barcodes to enter what you bought and what you used - with your phone camera too Recipes and a weekly meal plan that subtract the ingredients from your stock Chores and recurring jobs, so whose turn it is can be seen First steps Open kamra.tester4.test in your browser Sign in with the name admin and the password shown on the settings page Add your first few products („Products”, then „Add”) and give them a minimum amount On your phone, add it to the home screen from the browser menu - it then opens like an app and can read barcodes with the camera Before you start No external hard drive is needed After shopping What you brought home goes into the stock in a minute, with its due date. In the menu on the left, select „Purchase”. In „Product”, type the product's name, or read its barcode with the camera button. Fill in „Amount” and „Due date”, and „Price” too if you like. Select „OK”. For the next product, start again at „Product”. When something is used up When you note what you used, Grocy knows what is left at home. In the menu on the left, select „Consume”. Choose the product, and enter how much you used. If the product went off, tick „Spoiled”. Select „OK”. Shopping list The list fills itself with what has dropped below its minimum. In the menu on the left, open the „Shopping list” page. In the „Stock actions” menu, choose „Add products that are below defined min. stock amount”. Write anything else on it with „Add item”. After the shop, choose „Add all list items to stock” in the „Stock actions” menu, so the items on the list go into the stock. Share out the chores Recurring jobs show what is due and whose turn it is. In the „Manage master data” menu, open the „Chores” page, and select „Add”. Fill in „Name”, and in „Period type” choose, for example, „Weekly”. In „Assignment type”, decide how the job goes round the family, then select „Save”. On the „Chores overview” page, the green button at the start of the row (a play icon) marks a job as done. Frequently asked questions How does a family member get their own account? In the wrench menu at the top right, choose „Manage users”, select „Add”, and enter a name and a password. Nobody can register on their own. What do the colours mean on the „Stock overview” page? Yellow: due soon. Grey: past its best-before date. Red: expired, no longer safe to eat. Blue: dropped below its minimum; the „Below min. stock amount” filter shows only these. Can I change the language? Grocy starts in your browser's language. Choose another on the „User settings” page of the wrench menu, in „Language”. Does anything go out to the internet? Camera barcode reading runs in your browser and sends nothing out. If you choose „External barcode lookup” for an unknown barcode, Grocy looks the product up in the Open Food Facts database. Where is my data? On the box, in Grocy's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-hu.txt new file mode 100644 index 00000000..84bc58ea --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-guide-hu.txt @@ -0,0 +1 @@ +Grocy — Felhom.eu ← Alkalmazások Grocy Háztartásvezetés: mi van otthon, mi fogy el, mit kell megvenni, kinek mi a dolga ● Fut kamra.tester4.test Megnyitás ↗ Mire használható? Nyilvántartja, mi van otthon, és szól, ha valami elfogyott vagy lejár Bevásárlólista, ami magától felveszi azt, ami a minimum alá csökkent Vonalkóddal gyorsan beírod, mit vettél, és mit használtál el - a telefon kamerájával is Recept és heti étrend, ami levonja a hozzávalókat a készletből Házimunkák és ismétlődő feladatok, hogy látszódjon, kinek mi a dolga Első lépések Nyisd meg a kamra.tester4.test címet a böngészőben Jelentkezz be az admin névvel és a Beállítások oldalon látható jelszóval Vedd fel az első pár terméket („Termékek”, majd „Hozzáadás”), és állíts be nekik minimum mennyiséget A telefonodon a böngésző menüjéből tedd ki a kezdőlapra - így alkalmazásként nyílik, és a kamerával vonalkódot is tud olvasni Előfeltételek Nem kell hozzá külső merevlemez Vásárlás után Amit hazahoztál, egy perc alatt felkerül a készletbe, a lejárati idővel együtt. A bal oldali menüben kattints a „Vásárlás” pontra. A „Termék” mezőbe írd be a termék nevét, vagy olvasd be a vonalkódját a kamera gombbal. Add meg a „Mennyiség” és a „Lejárati idő” mezőt, és ha szeretnéd, az „Ár” mezőt is. Kattints az „OK” gombra. A következő terméknél kezdd újra a „Termék” mezőnél. Ha valami elfogyott Ha jelzed, mit használtál el, a Grocy tudja, mi maradt otthon. A bal oldali menüben kattints a „Felhasználás” pontra. Válaszd ki a terméket, és add meg, mennyit használtál el. Ha a termék megromlott, jelöld be a „Megromlott” jelölőt. Kattints az „OK” gombra. Bevásárlólista A lista magától megtelik azzal, ami a minimum alá fogyott. A bal oldali menüben nyisd meg a „Bevásárlólista” oldalt. A „Stock actions” (készletműveletek) menüben válaszd „A megadott min. készlet alatti termékek hozzáadása” pontot. Mást a „Hozzáadás” gombbal írhatsz fel. Bolt után a „Stock actions” menüben válaszd az „Összes tétel készletre vétele” pontot, így a lista tételei a készletbe kerülnek. Házimunkák beosztása A visszatérő feladatokból látszik, mi esedékes és kinek a dolga. Nyisd meg a „Törzsadatkezelés” menüben a „Házimunkák” oldalt, és kattints a „Hozzáadás” gombra. Add meg a „Név” mezőt, és a „Ciklus típusa” mezőben válaszd például a „hetente” értéket. A „Hozzárendelés típusa” mezőben döntsd el, hogyan forogjon a feladat a családtagok között, majd kattints a „Mentés” gombra. A „Házimunkák áttekintése” oldalon a sor elején lévő zöld gombbal (lejátszás ikon) jelzed, hogy a feladat kész. Gyakori kérdések Hogyan kap saját fiókot a családtag? A jobb felső csavarkulcs menüben válaszd a „Felhasználók kezelése” pontot, kattints a „Hozzáadás” gombra, és adj meg nevet és jelszót. Magától senki nem tud regisztrálni. Mit jelentenek a színek a „Készlet áttekintése” oldalon? Sárga: hamarosan esedékes. Szürke: lejárt a minőségmegőrzési ideje. Piros: lejárt, már nem fogyasztható. Kék: a minimum alá fogyott, ezeket a „Min. készlet mennyiség alatt” szűrővel külön is megnézheted. Átállíthatom a nyelvet? A Grocy a böngésző nyelvén indul. Másik nyelvet a csavarkulcs menü „Felhasználói beállítások” oldalán, a „Nyelv” mezőben választhatsz. Kimegy valami az internetre? A kamerás vonalkód-olvasás a böngésződben fut, nem küld ki semmit. Ha egy ismeretlen vonalkódnál az „External barcode lookup” (külső keresés) lehetőséget választod, a Grocy az Open Food Facts adatbázisban keresi a terméket. Hol vannak az adataim? A dobozon, a Grocy saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-en.txt new file mode 100644 index 00000000..095f6102 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-en.txt @@ -0,0 +1 @@ +Grocy — Install — Felhom.eu ← Back Grocy — Install Running the household: what is in the house, what runs out, the shopping list and the chores ~60M RAM Full description, screenshots Memory 60 MB / 7479 MB (0%) Current usage (0 MB) Grocy (+60 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password * cannot be changed after install 👁 Generate For the first sign-in: the name admin and this password. It is made at install, and only you see it. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-hu.txt new file mode 100644 index 00000000..f9b366cd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-install-hu.txt @@ -0,0 +1 @@ +Grocy — Telepítés — Felhom.eu ← Vissza Grocy — Telepítés Háztartásvezetés: mi van otthon, mi fogy el, bevásárlólista és házimunkák ~60M RAM Részletes leírás, képernyőképek Memória 60 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Grocy (+60 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: az admin név és ez a jelszó. Telepítéskor készül, csak te látod. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-en.txt new file mode 100644 index 00000000..66f2bf1b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-en.txt @@ -0,0 +1 @@ +Grocy — Settings — Felhom.eu ← Apps Grocy Running the household: what is in the house, what runs out, what to buy, whose turn it is ● Running kamra.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password Show Address and keys These were created at install time and cannot be changed. Address kamra.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-hu.txt new file mode 100644 index 00000000..0eca6c0d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/page-overview-hu.txt @@ -0,0 +1 @@ +Grocy — Felhom.eu ← Alkalmazások Grocy Háztartásvezetés: mi van otthon, mi fogy el, mit kell megvenni, kinek mi a dolga ● Fut kamra.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím kamra.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/record.json b/documentation/audits/catalog-sweep-2026-10-24/grocy/record.json new file mode 100644 index 00000000..596d3ca3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/record.json @@ -0,0 +1,124 @@ +{ + "app": "grocy", + "sub": "kamra", + "fixture": "Grocy", + "started": "2026-10-24T13:40:58Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/grocy/install", + "hu_len": 1040, + "en_len": 990, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/grocy/install -> 200 'Grocy — Telepítés — Felhom.eu' | shot /root/shots/grocy-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/grocy/install -> 200 'Grocy — Telepítés — Felhom.eu' | shot /root/shots/grocy-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 35, + "front_door": true, + "seconds_to_front_door": 36 + }, + "stranger": "302 https://kamra.tester4.test/stockoverview", + "http_port_80": "301 https://kamra.tester4.test/", + "guide": { + "path": "/apps/grocy/guide", + "hu_len": 3625, + "en_len": 3333, + "english_words_in_hu": [ + "open" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/grocy", + "hu_len": 421, + "en_len": 426, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/grocy/guide -> 200 'Grocy — Felhom.eu' | shot /root/shots/grocy-after-guide-phone-hu.png hscroll=False", + "goto https://kamra.tester4.test/login -> 200 'Bejelentkezés | Grocy' | shot /root/shots/grocy-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.487091677s\", \"last_run\": \"2026-10-24T13:42:15.007448295Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"grocy\", \"started_at\": \"2026-10-24T13:43:40.887313138Z\", \"last\": {\"op\": \"restore\", \"stack\": \"grocy\", \"ok\": true, \"message\": \"A(z) grocy: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:43:54.143147928Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "grocy": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "grocy": 33.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 213 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-front-desktop-hu.png new file mode 100644 index 00000000..d9fbb145 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-guide-phone-hu.png new file mode 100644 index 00000000..9824fea5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-desktop-en.png new file mode 100644 index 00000000..154b072f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-phone-hu.png new file mode 100644 index 00000000..b5fbdb4b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/grocy/screens/grocy-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/grocy/walk.log b/documentation/audits/catalog-sweep-2026-10-24/grocy/walk.log new file mode 100644 index 00000000..920bc035 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/grocy/walk.log @@ -0,0 +1,16 @@ +13:41:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +13:41:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:41:49Z [1] deployed, controller state=running, pinned={'grocy': 'lscr.io/linuxserver/grocy:4.7.1'} +13:41:49Z [1] installed: deployed 35 s, front door 36 s +13:41:50Z grocy: signed in with the box's generated password +13:41:50Z grocy: POST /api/objects/products http=200 :: {"created_object_id":"1"} +13:41:50Z grocy: POST /api/stock/products/1/add http=200 +13:41:51Z grocy: readback http=200 found=True (controls: no cookie 401, wrong 401, absent 404) +13:42:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:42:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'grocy', 'volumes_removed': ['grocy_grocy_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack grocy +13:43:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +13:43:40Z grocy: readback http=400 found=False (controls: no cookie 401, wrong 401, absent 404) +13:43:40Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:43:56Z grocy: readback http=200 found=True (controls: no cookie 401, wrong 401, absent 404) +13:44:38Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'grocy', 'volumes_removed': ['grocy_grocy_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +13:44:47Z == grocy done in 213 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant.console.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant.console.txt new file mode 100644 index 00000000..889b833e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant.console.txt @@ -0,0 +1,14 @@ +18:45:12Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:47:53Z [1] deployed, controller state=running, pinned={'home-assistant': 'ghcr.io/home-assistant/home-assistant:2026.9.4'} +18:47:53Z gate: ha is gated — passed as the household (cookie set) +18:47:53Z [1] installed: deployed 161 s, front door 161 s +18:47:53Z home-assistant: /api/onboarding/users http=200 +18:47:54Z home-assistant: login as the seeded owner ok=True +18:48:16Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:49:02Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'home-assistant', 'volumes_removed': ['home-assistant_homeassistant_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True +18:51:47Z home-assistant: login as the seeded owner ok=False +18:51:47Z home-assistant: {"type":"form","flow_id":"89c1d3f9b0fe10187b509beba1d8a162","handler":["homeassistant",null],"data_schema":[{"type":"string","name":"username","required":true},{"type":"string","name":"password","requ +18:51:48Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:52:18Z home-assistant: login as the seeded owner ok=True +18:53:04Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'home-assistant', 'volumes_removed': ['home-assistant_homeassistant_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +18:53:13Z == home-assistant done in 482 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-en.txt new file mode 100644 index 00000000..904a3bd6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-en.txt @@ -0,0 +1 @@ +Home Assistant — Guide — Felhom.eu ← Apps Home Assistant A smart home hub - automation and control from one place ● Running ha.tester4.test Open ↗ What is it for? Run your smart home devices from one place (lights, thermostat, cameras) Build automations (a light that comes on with a motion sensor, for example) 2000+ integrations (Zigbee, Z-Wave, Tuya, Shelly and more) A dashboard for the household, on phones and tablets Watch what your home uses in energy First steps Open ha.tester4.test in your browser Create the owner account during onboarding Look at the devices it has already found on its own Install integrations for your smart home devices Build your first automation Before you start Smart home devices (not required, but worth having before you install) Passing a Zigbee/Z-Wave USB coordinator through is not supported in Docker mode There is no guide for this app yet. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-hu.txt new file mode 100644 index 00000000..765d72cb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-guide-hu.txt @@ -0,0 +1 @@ +Home Assistant — Felhom.eu ← Alkalmazások Home Assistant Okos otthon központ - automatizálás és vezérlés egy helyről ● Fut ha.tester4.test Megnyitás ↗ Mire használható? Okos otthon eszközök központi kezelése (lámpa, termosztát, kamera) Automatizálások létrehozása (pl. mozgásérzékelőre lámpa be) 2000+ integráció (Zigbee, Z-Wave, Tuya, Shelly, stb.) Dashboard a család számára mobilon és tableten Energiafogyasztás monitorozás Első lépések Nyisd meg a ha.tester4.test címet a böngészőben Hozd létre a tulajdonos fiókot az onboarding során Fedezd fel az automatikusan felfedezett eszközöket Telepíts integrációkat az okos otthon eszközeidhez Hozd létre az első automatizálást Előfeltételek Okos otthon eszközök (nem kötelező, de ajánlott a telepítés előtt) Zigbee/Z-Wave koordinátor USB eszközök átpasszolása nem támogatott Docker módban Ehhez az alkalmazáshoz még nem készült útmutató. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-en.txt new file mode 100644 index 00000000..4e644de3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-en.txt @@ -0,0 +1 @@ +Home Assistant — Install — Felhom.eu ← Back Home Assistant — Install An open source smart home hub ~350M RAM Full description, screenshots Memory 350 MB / 7479 MB (4%) Current usage (0 MB) Home Assistant (+350 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-hu.txt new file mode 100644 index 00000000..23f88062 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-install-hu.txt @@ -0,0 +1 @@ +Home Assistant — Telepítés — Felhom.eu ← Vissza Home Assistant — Telepítés Nyílt forráskódú okos otthon központ ~350M RAM Részletes leírás, képernyőképek Memória 350 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Home Assistant (+350 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-en.txt new file mode 100644 index 00000000..ae2d1685 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-en.txt @@ -0,0 +1 @@ +Home Assistant — Settings — Felhom.eu ← Apps Home Assistant A smart home hub - automation and control from one place ● Running ha.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address ha.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-hu.txt new file mode 100644 index 00000000..8cc2ea14 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/page-overview-hu.txt @@ -0,0 +1 @@ +Home Assistant — Felhom.eu ← Alkalmazások Home Assistant Okos otthon központ - automatizálás és vezérlés egy helyről ● Fut ha.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím ha.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/record.json b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/record.json new file mode 100644 index 00000000..c5ccedf5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/record.json @@ -0,0 +1,120 @@ +{ + "app": "home-assistant", + "sub": "ha", + "fixture": "HomeAssistant", + "started": "2026-10-24T18:44:53Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/home-assistant/install", + "hu_len": 884, + "en_len": 796, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/home-assistant/install -> 200 'Home Assistant — Telepítés — Felhom.eu' | shot /root/shots/home-assistant-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/home-assistant/install -> 200 'Home Assistant — Telepítés — Felhom.eu' | shot /root/shots/home-assistant-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 161, + "front_door": true, + "seconds_to_front_door": 161 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fha.tester4.test%2F", + "http_port_80": "301 https://ha.tester4.test/", + "guide": { + "path": "/apps/home-assistant/guide", + "hu_len": 923, + "en_len": 923, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/home-assistant", + "hu_len": 694, + "en_len": 697, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/home-assistant/guide -> 200 'Home Assistant — Felhom.eu' | shot /root/shots/home-assistant-after-guide-phone-hu.png hscroll=False", + "goto https://ha.tester4.test/onboarding.html -> 200 'Home Assistant' | shot /root/shots/home-assistant-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"6.956141488s\", \"last_run\": \"2026-10-24T18:48:23.597031087Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 30, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"home-assistant\", \"started_at\": \"2026-10-24T18:51:48.013193488Z\", \"last\": {\"op\": \"restore\", \"stack\": \"home-assistant\", \"ok\": true, \"message\": \"A(z) home-assistant: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:52:16.330880493Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "home-assistant": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "home-assistant": 334.8 + }, + "mem_anon_peak_mib": { + "home-assistant": 310.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 482 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-front-desktop-hu.png new file mode 100644 index 00000000..84e6f1f0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-guide-phone-hu.png new file mode 100644 index 00000000..5edcab1f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-desktop-en.png new file mode 100644 index 00000000..5e48e5f3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-phone-hu.png new file mode 100644 index 00000000..dea52d33 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/screens/home-assistant-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/home-assistant/walk.log b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/walk.log new file mode 100644 index 00000000..889b833e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/home-assistant/walk.log @@ -0,0 +1,14 @@ +18:45:12Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:47:53Z [1] deployed, controller state=running, pinned={'home-assistant': 'ghcr.io/home-assistant/home-assistant:2026.9.4'} +18:47:53Z gate: ha is gated — passed as the household (cookie set) +18:47:53Z [1] installed: deployed 161 s, front door 161 s +18:47:53Z home-assistant: /api/onboarding/users http=200 +18:47:54Z home-assistant: login as the seeded owner ok=True +18:48:16Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:49:02Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'home-assistant', 'volumes_removed': ['home-assistant_homeassistant_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True +18:51:47Z home-assistant: login as the seeded owner ok=False +18:51:47Z home-assistant: {"type":"form","flow_id":"89c1d3f9b0fe10187b509beba1d8a162","handler":["homeassistant",null],"data_schema":[{"type":"string","name":"username","required":true},{"type":"string","name":"password","requ +18:51:48Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:52:18Z home-assistant: login as the seeded owner ok=True +18:53:04Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'home-assistant', 'volumes_removed': ['home-assistant_homeassistant_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +18:53:13Z == home-assistant done in 482 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox.console.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox.console.txt new file mode 100644 index 00000000..6520b93f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox.console.txt @@ -0,0 +1,15 @@ +20:36:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:36:35Z [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'} +20:36:35Z gate: homebox is gated — passed as the household (cookie set) +20:36:35Z [1] installed: deployed 20 s, front door 20 s +20:36:36Z homebox: register http=204 +20:36:36Z homebox: create on /api/v1/locations http=404 +20:36:36Z homebox: create on /api/v1/entities http=201 +20:36:36Z homebox: list http=200 rows=1 marker_present=True +20:37:00Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:37:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack h +20:38:06Z homebox: login as the seeded account http=401 — no token +20:38:06Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:38:22Z homebox: list http=200 rows=1 marker_present=True +20:39:01Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +20:39:09Z == homebox done in 175 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/console.txt new file mode 100644 index 00000000..9fb6ee07 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/console.txt @@ -0,0 +1,10 @@ +13:19:17Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:19:32Z [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'} +13:19:32Z gate: homebox is gated — passed as the household (cookie set) +13:19:32Z [1] installed: deployed 15 s, front door 15 s +13:19:32Z homebox: register http=204 +13:19:33Z homebox: location create http=404 +13:19:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:20:31Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack h +13:21:34Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +13:21:42Z == homebox done in 146 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-en.txt new file mode 100644 index 00000000..8e9b05bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Homebox — Guide — Felhom.eu ← Apps Homebox A home inventory - keep track of what you own ● Running Up to date homebox.tester4.test Open ↗ What is it for? List and keep track of the things in your home Sort by location, tag and category Record warranties and what you paid Scan a barcode to add something quickly Build an inventory for an insurance claim First steps Open homebox.tester4.test in your browser Create your account the first time you open it Add your locations (living room, kitchen, garage) Start adding things, with photos Invite a family member With the invite link, the family member signs up to the same inventory as you. In the menu on the left, open „Collection”, then the „Invites” tab. Select „Create Invite”, set how long it stays valid, and copy the link with „Copy Invite Link”. On the dashboard, open Homebox's „Settings” tab, and select „Open sign-up for 15 minutes”. Send the link to your family member: they sign up with it within those 15 minutes. Warranty and receipt When something breaks, you see in one place when you bought it, for how much, and how long the warranty lasts. Open the item, and choose the „Edit” tab. Switch on „Advanced” at the top. Fill in „Purchase Price”, „Purchase Date” and „Warranty Expires”. Drag a photo of the warranty card onto „Attachments”, and drop it on the „Warranty” field there. Finally, select „Save”. Keep a maintenance record The boiler service or the car's oil change stays next to the item. Open the item, and choose the „Maintenance” tab. Select „New”. Fill in „Entry Name”, the „Completed Date” or the „Scheduled Date”, and „Cost” if there is one. Select „Create”. Search and tags Among many items, search and tags help. In the menu on the left, on the „Search” page, you search by name. You add a new tag with the „Create” button, at „Tag”, for example: Electronics. On the item's „Edit” tab, you add the tag in the „Tags” field. Frequently asked questions Can I change the language? Homebox starts in your browser's language. Choose another on the „Profile” page, in „Language”. The Hungarian translation is not complete, so some labels stay in English. How big a file can I upload? A photo or an attachment can be at most 50 MB. The box set this. How do I read a barcode? On your phone, open the „Scanner” page, and let the browser use the camera. Can I take the inventory out to a spreadsheet? Yes, to a CSV file: on the „Tools” tab of the „Collection” menu, select „Export Inventory”. Where are the photos and the data? On the box, in Homebox's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-hu.txt new file mode 100644 index 00000000..1d0ab658 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Homebox — Felhom.eu ← Alkalmazások Homebox Otthoni leltár kezelő - tartsd számon a tárgyaidat ● Fut Naprakész homebox.tester4.test Megnyitás ↗ Mire használható? Otthoni tárgyak leltározása és nyilvántartása Helyszínek, címkék és kategóriák szerinti rendszerezés Garancia lejáratok és beszerzési árak nyilvántartása Vonalkód szkennelés a gyors hozzáadáshoz Biztosítási célú leltár készítés Első lépések Nyisd meg az homebox.tester4.test címet a böngészőben Hozd létre a fiókodat az első megnyitáskor Add hozzá a helyszíneket (pl. nappali, konyha, garázs) Kezdd el felvenni a tárgyakat fotókkal Családtag meghívása A családtag a meghívó linkkel ugyanabba a leltárba regisztrál, amelyikbe te. A bal oldali menüben nyisd meg a „Collection” (gyűjtemény) pontot, majd a „Meghívások” fület. Kattints a „Meghívás” gombra, add meg, meddig legyen érvényes, és másold ki a linket a „Meghívólink másolása” gombbal. A vezérlőpulton nyisd meg a Homebox „Beállítások” fülét, és kattints a „Regisztráció megnyitása 15 percre” gombra. Küldd el a linket a családtagodnak: a 15 percen belül regisztráljon vele. Garancia és számla Ha valami elromlik, egy helyen látod, mikor és mennyiért vetted, és meddig él a garancia. Nyisd meg a tárgyat, és válaszd a „Szerkesztés” fület. Kapcsold be fent a „Haladó” kapcsolót. Töltsd ki a „Beszerzési ár”, a „Vásárlás dátuma” és a „Garancia vége” mezőt. A garanciajegy fényképét húzd a „Mellékletek” részre, és ott engedd el a „Garancia” mezőn. Végül kattints a „Mentés” gombra. Karbantartás nyilvántartása A kazán szervize vagy az autó olajcseréje a tárgy mellett marad. Nyisd meg a tárgyat, és válaszd a „Karbantartás” fület. Kattints az „Új” gombra. Add meg a „Bejegyzés neve” mezőt, a „Teljesítés dátuma” vagy az „Ütemezett dátum” mezőt, és ha van, a „Költség” mezőt. Kattints a „Létrehozás” gombra. Keresés és címkék Sok tárgy között a keresés és a címkék segítenek. A bal oldali menüben a „Keresés” oldalon név szerint keresel. Új címkét a „Létrehozás” gombbal, a „Tag” (címke) pontnál adsz hozzá, például: Elektronika. A tárgy „Szerkesztés” fülén a „Tags” (címkék) mezőben adod hozzá a címkét. Gyakori kérdések Átállíthatom a nyelvet? A Homebox a böngésző nyelvén indul. Másikat a „Profil” oldalon, a „Nyelv” mezőben választhatsz. A magyar fordítás nem teljes, ezért néhány felirat angolul marad. Mekkora fájlt tölthetek fel? Egy fénykép vagy melléklet legfeljebb 50 MB lehet. Ezt a doboz állította be. Hogyan olvasok be vonalkódot? Nyisd meg a telefonodon a „Szkenner” oldalt, és engedd meg a kamerát a böngészőnek. Kivihetem a leltárt táblázatba? Igen, CSV-fájlba: a „Collection” menü „Eszközök” fülén kattints a „Készlet exportálása” gombra. Hol vannak a fotók és az adatok? A dobozon, a Homebox saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-en.txt new file mode 100644 index 00000000..6cd5526f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-en.txt @@ -0,0 +1 @@ +Homebox — Install — Felhom.eu ← Back Homebox — Install A home inventory for your things ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Homebox (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain API key pepper Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-hu.txt new file mode 100644 index 00000000..47ef9c67 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Homebox — Telepítés — Felhom.eu ← Vissza Homebox — Telepítés Otthoni leltár és eszköznyilvántartás ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Homebox (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain API-kulcs pepper Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-en.txt new file mode 100644 index 00000000..57d0112e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Homebox — Settings — Felhom.eu ← Apps Homebox A home inventory - keep track of what you own ● Running Up to date homebox.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address homebox.tester4.test API key pepper Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-hu.txt new file mode 100644 index 00000000..e676697f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Homebox — Felhom.eu ← Alkalmazások Homebox Otthoni leltár kezelő - tartsd számon a tárgyaidat ● Fut Naprakész homebox.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím homebox.tester4.test API-kulcs pepper Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/record.json new file mode 100644 index 00000000..43074e2f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/record.json @@ -0,0 +1,110 @@ +{ + "app": "homebox", + "sub": "homebox", + "fixture": "Homebox", + "started": "2026-10-24T13:19:03Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "HBOX_AUTH_API_KEY_PEPPER", + "secret", + false + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/homebox/install", + "hu_len": 915, + "en_len": 819, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/homebox/install -> 200 'Homebox — Telepítés — Felhom.eu' | shot /root/shots/homebox-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/homebox/install -> 200 'Homebox — Telepítés — Felhom.eu' | shot /root/shots/homebox-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fhomebox.tester4.test%2F", + "http_port_80": "301 https://homebox.tester4.test/", + "guide": { + "path": "/apps/homebox/guide", + "hu_len": 2868, + "en_len": 2666, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/homebox", + "hu_len": 819, + "en_len": 808, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/homebox/guide -> 200 'Homebox — Felhom.eu' | shot /root/shots/homebox-after-guide-phone-hu.png hscroll=False", + "goto https://homebox.tester4.test/ -> 200 '' | shot /root/shots/homebox-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.250432864s\", \"last_run\": \"2026-10-24T13:19:50.716034567Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "homebox": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "homebox": 146.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 146 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-front-desktop-hu.png new file mode 100644 index 00000000..e9b16d81 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-guide-phone-hu.png new file mode 100644 index 00000000..05f648b0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-desktop-en.png new file mode 100644 index 00000000..c232819e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-phone-hu.png new file mode 100644 index 00000000..794c0081 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/screens/homebox-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/walk.log new file mode 100644 index 00000000..9fb6ee07 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/first-run/walk.log @@ -0,0 +1,10 @@ +13:19:17Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:19:32Z [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'} +13:19:32Z gate: homebox is gated — passed as the household (cookie set) +13:19:32Z [1] installed: deployed 15 s, front door 15 s +13:19:32Z homebox: register http=204 +13:19:33Z homebox: location create http=404 +13:19:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:20:31Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack h +13:21:34Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +13:21:42Z == homebox done in 146 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-en.txt new file mode 100644 index 00000000..e8552a57 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-en.txt @@ -0,0 +1 @@ +Homebox — Guide — Felhom.eu ← Apps Homebox A home inventory - keep track of what you own ● Running homebox.tester4.test Open ↗ What is it for? List and keep track of the things in your home Sort by location, tag and category Record warranties and what you paid Scan a barcode to add something quickly Build an inventory for an insurance claim First steps Open homebox.tester4.test in your browser Create your account the first time you open it Add your locations (living room, kitchen, garage) Start adding things, with photos Invite a family member With the invite link, the family member signs up to the same inventory as you. In the menu on the left, open „Collection”, then the „Invites” tab. Select „Create Invite”, set how long it stays valid, and copy the link with „Copy Invite Link”. On the dashboard, open Homebox's „Settings” tab, and select „Open sign-up for 15 minutes”. Send the link to your family member: they sign up with it within those 15 minutes. Warranty and receipt When something breaks, you see in one place when you bought it, for how much, and how long the warranty lasts. Open the item, and choose the „Edit” tab. Switch on „Advanced” at the top. Fill in „Purchase Price”, „Purchase Date” and „Warranty Expires”. Drag a photo of the warranty card onto „Attachments”, and drop it on the „Warranty” field there. Finally, select „Save”. Keep a maintenance record The boiler service or the car's oil change stays next to the item. Open the item, and choose the „Maintenance” tab. Select „New”. Fill in „Entry Name”, the „Completed Date” or the „Scheduled Date”, and „Cost” if there is one. Select „Create”. Search and tags Among many items, search and tags help. In the menu on the left, on the „Search” page, you search by name. You add a new tag with the „Create” button, at „Tag”, for example: Electronics. On the item's „Edit” tab, you add the tag in the „Tags” field. Frequently asked questions Can I change the language? Homebox starts in your browser's language. Choose another on the „Profile” page, in „Language”. The Hungarian translation is not complete, so some labels stay in English. How big a file can I upload? A photo or an attachment can be at most 50 MB. The box set this. How do I read a barcode? On your phone, open the „Scanner” page, and let the browser use the camera. Can I take the inventory out to a spreadsheet? Yes, to a CSV file: on the „Tools” tab of the „Collection” menu, select „Export Inventory”. Where are the photos and the data? On the box, in Homebox's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-hu.txt new file mode 100644 index 00000000..b0f9ba6d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-guide-hu.txt @@ -0,0 +1 @@ +Homebox — Felhom.eu ← Alkalmazások Homebox Otthoni leltár kezelő - tartsd számon a tárgyaidat ● Fut homebox.tester4.test Megnyitás ↗ Mire használható? Otthoni tárgyak leltározása és nyilvántartása Helyszínek, címkék és kategóriák szerinti rendszerezés Garancia lejáratok és beszerzési árak nyilvántartása Vonalkód szkennelés a gyors hozzáadáshoz Biztosítási célú leltár készítés Első lépések Nyisd meg az homebox.tester4.test címet a böngészőben Hozd létre a fiókodat az első megnyitáskor Add hozzá a helyszíneket (pl. nappali, konyha, garázs) Kezdd el felvenni a tárgyakat fotókkal Családtag meghívása A családtag a meghívó linkkel ugyanabba a leltárba regisztrál, amelyikbe te. A bal oldali menüben nyisd meg a „Collection” (gyűjtemény) pontot, majd a „Meghívások” fület. Kattints a „Meghívás” gombra, add meg, meddig legyen érvényes, és másold ki a linket a „Meghívólink másolása” gombbal. A vezérlőpulton nyisd meg a Homebox „Beállítások” fülét, és kattints a „Regisztráció megnyitása 15 percre” gombra. Küldd el a linket a családtagodnak: a 15 percen belül regisztráljon vele. Garancia és számla Ha valami elromlik, egy helyen látod, mikor és mennyiért vetted, és meddig él a garancia. Nyisd meg a tárgyat, és válaszd a „Szerkesztés” fület. Kapcsold be fent a „Haladó” kapcsolót. Töltsd ki a „Beszerzési ár”, a „Vásárlás dátuma” és a „Garancia vége” mezőt. A garanciajegy fényképét húzd a „Mellékletek” részre, és ott engedd el a „Garancia” mezőn. Végül kattints a „Mentés” gombra. Karbantartás nyilvántartása A kazán szervize vagy az autó olajcseréje a tárgy mellett marad. Nyisd meg a tárgyat, és válaszd a „Karbantartás” fület. Kattints az „Új” gombra. Add meg a „Bejegyzés neve” mezőt, a „Teljesítés dátuma” vagy az „Ütemezett dátum” mezőt, és ha van, a „Költség” mezőt. Kattints a „Létrehozás” gombra. Keresés és címkék Sok tárgy között a keresés és a címkék segítenek. A bal oldali menüben a „Keresés” oldalon név szerint keresel. Új címkét a „Létrehozás” gombbal, a „Tag” (címke) pontnál adsz hozzá, például: Elektronika. A tárgy „Szerkesztés” fülén a „Tags” (címkék) mezőben adod hozzá a címkét. Gyakori kérdések Átállíthatom a nyelvet? A Homebox a böngésző nyelvén indul. Másikat a „Profil” oldalon, a „Nyelv” mezőben választhatsz. A magyar fordítás nem teljes, ezért néhány felirat angolul marad. Mekkora fájlt tölthetek fel? Egy fénykép vagy melléklet legfeljebb 50 MB lehet. Ezt a doboz állította be. Hogyan olvasok be vonalkódot? Nyisd meg a telefonodon a „Szkenner” oldalt, és engedd meg a kamerát a böngészőnek. Kivihetem a leltárt táblázatba? Igen, CSV-fájlba: a „Collection” menü „Eszközök” fülén kattints a „Készlet exportálása” gombra. Hol vannak a fotók és az adatok? A dobozon, a Homebox saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-en.txt new file mode 100644 index 00000000..6cd5526f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-en.txt @@ -0,0 +1 @@ +Homebox — Install — Felhom.eu ← Back Homebox — Install A home inventory for your things ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Homebox (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain API key pepper Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-hu.txt new file mode 100644 index 00000000..47ef9c67 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-install-hu.txt @@ -0,0 +1 @@ +Homebox — Telepítés — Felhom.eu ← Vissza Homebox — Telepítés Otthoni leltár és eszköznyilvántartás ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Homebox (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain API-kulcs pepper Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-en.txt new file mode 100644 index 00000000..40d247d2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-en.txt @@ -0,0 +1 @@ +Homebox — Settings — Felhom.eu ← Apps Homebox A home inventory - keep track of what you own ● Running homebox.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address homebox.tester4.test API key pepper Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-hu.txt new file mode 100644 index 00000000..bc968ca2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/page-overview-hu.txt @@ -0,0 +1 @@ +Homebox — Felhom.eu ← Alkalmazások Homebox Otthoni leltár kezelő - tartsd számon a tárgyaidat ● Fut homebox.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím homebox.tester4.test API-kulcs pepper Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/record.json b/documentation/audits/catalog-sweep-2026-10-24/homebox/record.json new file mode 100644 index 00000000..99fd0daf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/record.json @@ -0,0 +1,125 @@ +{ + "app": "homebox", + "sub": "homebox", + "fixture": "Homebox", + "started": "2026-10-24T20:35:55Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "HBOX_AUTH_API_KEY_PEPPER", + "secret", + false + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/homebox/install", + "hu_len": 915, + "en_len": 819, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/homebox/install -> 200 'Homebox — Telepítés — Felhom.eu' | shot /root/shots/homebox-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/homebox/install -> 200 'Homebox — Telepítés — Felhom.eu' | shot /root/shots/homebox-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 20, + "front_door": true, + "seconds_to_front_door": 20 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fhomebox.tester4.test%2F", + "http_port_80": "301 https://homebox.tester4.test/", + "guide": { + "path": "/apps/homebox/guide", + "hu_len": 2858, + "en_len": 2655, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/homebox", + "hu_len": 809, + "en_len": 797, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/homebox/guide -> 200 'Homebox — Felhom.eu' | shot /root/shots/homebox-after-guide-phone-hu.png hscroll=False", + "goto https://homebox.tester4.test/ -> 200 '' | shot /root/shots/homebox-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.28901191s\", \"last_run\": \"2026-10-24T20:37:01.369032433Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"homebox\", \"started_at\": \"2026-10-24T20:38:06.83207415Z\", \"last\": {\"op\": \"restore\", \"stack\": \"homebox\", \"ok\": true, \"message\": \"A(z) homebox: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:38:17.123880628Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "homebox": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "homebox": 206.3 + }, + "mem_anon_peak_mib": { + "homebox": 204.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 175 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-front-desktop-hu.png new file mode 100644 index 00000000..e9b16d81 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-guide-phone-hu.png new file mode 100644 index 00000000..7e1f8abc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-desktop-en.png new file mode 100644 index 00000000..c232819e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-phone-hu.png new file mode 100644 index 00000000..794c0081 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homebox/screens/homebox-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homebox/walk.log b/documentation/audits/catalog-sweep-2026-10-24/homebox/walk.log new file mode 100644 index 00000000..6520b93f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homebox/walk.log @@ -0,0 +1,15 @@ +20:36:15Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:36:35Z [1] deployed, controller state=running, pinned={'homebox': 'ghcr.io/sysadminsmedia/homebox:0.26.2'} +20:36:35Z gate: homebox is gated — passed as the household (cookie set) +20:36:35Z [1] installed: deployed 20 s, front door 20 s +20:36:36Z homebox: register http=204 +20:36:36Z homebox: create on /api/v1/locations http=404 +20:36:36Z homebox: create on /api/v1/entities http=201 +20:36:36Z homebox: list http=200 rows=1 marker_present=True +20:37:00Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:37:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack h +20:38:06Z homebox: login as the seeded account http=401 — no token +20:38:06Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:38:22Z homebox: list http=200 rows=1 marker_present=True +20:39:01Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homebox', 'volumes_removed': ['homebox_homebox_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső me +20:39:09Z == homebox done in 175 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage.console.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage.console.txt new file mode 100644 index 00000000..4bfb68c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage.console.txt @@ -0,0 +1,8 @@ +13:21:58Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:22:23Z [1] deployed, controller state=running, pinned={'homepage': 'ghcr.io/gethomepage/homepage:v1.13.2'} +13:22:23Z [1] installed: deployed 25 s, front door 25 s +13:22:23Z [3] no fixture for this app — the front door answering is the smallest honest check +13:22:40Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:23:23Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homepage', 'volumes_removed': ['homepage_homepage_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'St +13:24:35Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homepage', 'volumes_removed': ['homepage_homepage_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kül +13:24:44Z == homepage done in 166 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-en.txt new file mode 100644 index 00000000..ef1d2ca4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-en.txt @@ -0,0 +1 @@ +Homepage — Guide — Felhom.eu ← Apps Homepage Your own start page - service status and widgets in one place ● Running homepage.tester4.test Open ↗ What is it for? Every service on one page you can take in at a glance Widgets that show whether a service is up Bookmarks and the sites you use most Weather, system load and other widgets First steps Open homepage.tester4.test in your browser Edit the configuration files in the homepage_config volume Add your services in services.yaml Set your widgets up in widgets.yaml Search from the start page From the box at the top of the start page you can search the web straight away. Select the „Search…” box, and type what you are looking for. Press Enter: the results open in a new tab, in the DuckDuckGo search engine. Quick launch From the keyboard, you open what you are looking for by typing one word. Start typing anywhere on the page, outside the search box: quick launch opens. The list shows the services and bookmarks on the page that match what you typed. Choose with the arrow keys; Enter opens it, Esc closes it. Light or dark theme You can fit the look of the start page to your own browser. At the bottom of the page, the switch between the sun and the moon icon changes between the light and the dark theme. Select the palette icon to choose another colour. Your browser remembers the choice; it does not change the page for the rest of the family. Start page in the browser If the browser starts with Homepage, everything is one click from here. In your browser's settings, set the homepage.tester4.test address as the start page. On a phone, open homepage.tester4.test, and add it to the home screen from the browser menu. Frequently asked questions Why do example services and example bookmarks show? Homepage starts with these examples. The groups, the links and the widgets are written in Homepage's settings files; they cannot be edited on the page. What does the bar at the top of the page show? How busy the processor is („CPU”), and next to it the free memory and the free storage („Free”). Does it need a sign-in? No: Homepage has no sign-in of its own, and anyone who knows the homepage.tester4.test address sees the page. So do not put anything on it that you would not show a stranger. Does the page change when I install a new app? Not by itself: the box does not rewrite Homepage's list. Where are its settings? On the box, in Homepage's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-hu.txt new file mode 100644 index 00000000..1607315f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-guide-hu.txt @@ -0,0 +1 @@ +Homepage — Felhom.eu ← Alkalmazások Homepage Személyes kezdőlap - szolgáltatás státuszok és widgetek egy helyen ● Fut homepage.tester4.test Megnyitás ↗ Mire használható? Összes szolgáltatás egy áttekinthető oldalon Szolgáltatás állapot monitoring widgetek Könyvjelzők és kedvenc oldalak Időjárás, rendszer erőforrás és egyéb widgetek Első lépések Nyisd meg a homepage.tester4.test címet a böngészőben Szerkeszd a konfigurációs fájlokat a homepage_config kötetben Add hozzá a szolgáltatásokat a services.yaml-ban Állítsd be a widgeteket a widgets.yaml-ban Keresés a kezdőlapról A kezdőlap tetején lévő mezőből rögtön kereshetsz a weben. Kattints a „Search…” (keresés) mezőbe, és írd be, amit keresel. Nyomj Entert: a találatok új lapon nyílnak meg a DuckDuckGo keresőben. Gyorsindító Billentyűzetről egy szó beírásával megnyitod, amit keresel. Kezdj el gépelni bárhol az oldalon, a keresőmezőn kívül: megnyílik a gyorsindító. A listában az oldalon lévő szolgáltatások és könyvjelzők közül a beírtakhoz illők látszanak. A nyilakkal választasz, az Enter megnyitja, az Esc bezárja. Világos vagy sötét téma A kezdőlap kinézetét a saját böngésződre szabhatod. Az oldal alján a nap és a hold ikon közötti kapcsolóval váltasz világos és sötét téma között. A paletta ikonra kattintva másik színt választhatsz. A böngésződ megjegyzi a választást, a többi családtag oldalát nem változtatja meg. Kezdőlap a böngészőben Ha a böngésző a Homepage-dzsel indul, minden innen egy kattintás. A böngésződ beállításaiban add meg kezdőlapnak a homepage.tester4.test címet. Telefonon nyisd meg a homepage.tester4.test címet, és a böngésző menüjéből tedd ki a kezdőképernyőre. Gyakori kérdések Miért minta-szolgáltatások és minta-könyvjelzők látszanak? A Homepage ezekkel a mintákkal indul. A csoportokat, a linkeket és a widgeteket a Homepage beállítófájljai írják le, a felületén nem szerkeszthetők. Mit mutat a sáv az oldal tetején? A processzor kihasználtságát („CPU”), mellette a szabad memóriát és a szabad tárhelyet („Free”, szabad). Kell hozzá bejelentkezés? Nem: a Homepage-nek nincs saját belépése, és aki ismeri a homepage.tester4.test címet, látja az oldalt. Ezért ne tegyél rá olyat, amit idegennek nem mutatnál. Megváltozik az oldal, ha új alkalmazást telepítek? Magától nem: a doboz nem írja át a Homepage listáját. Hol vannak a beállításai? A dobozon, a Homepage saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-en.txt new file mode 100644 index 00000000..ac76983e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-en.txt @@ -0,0 +1 @@ +Homepage — Install — Felhom.eu ← Back Homepage — Install A start page you build yourself, with service widgets ~90M RAM Full description, screenshots Memory 90 MB / 7479 MB (1%) Current usage (0 MB) Homepage (+90 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-hu.txt new file mode 100644 index 00000000..fa382d95 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-install-hu.txt @@ -0,0 +1 @@ +Homepage — Telepítés — Felhom.eu ← Vissza Homepage — Telepítés Személyre szabható kezdőlap szolgáltatás widgetekkel ~90M RAM Részletes leírás, képernyőképek Memória 90 MB / 7479 MB (1%) Jelenlegi használat (0 MB) Homepage (+90 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-en.txt new file mode 100644 index 00000000..d9d351e2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-en.txt @@ -0,0 +1 @@ +Homepage — Settings — Felhom.eu ← Apps Homepage Your own start page - service status and widgets in one place ● Running homepage.tester4.test Open ↗ Running Running Restart Stop Signing in to the app This app needs no sign-in. Address and keys These were created at install time and cannot be changed. Address homepage.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-hu.txt new file mode 100644 index 00000000..6f8f41d0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/page-overview-hu.txt @@ -0,0 +1 @@ +Homepage — Felhom.eu ← Alkalmazások Homepage Személyes kezdőlap - szolgáltatás státuszok és widgetek egy helyen ● Fut homepage.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz nem kell belépés. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím homepage.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/record.json b/documentation/audits/catalog-sweep-2026-10-24/homepage/record.json new file mode 100644 index 00000000..1c05d5ce --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/record.json @@ -0,0 +1,105 @@ +{ + "app": "homepage", + "sub": "homepage", + "fixture": null, + "started": "2026-10-24T13:21:43Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/homepage/install", + "hu_len": 879, + "en_len": 799, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/homepage/install -> 200 'Homepage — Telepítés — Felhom.eu' | shot /root/shots/homepage-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/homepage/install -> 200 'Homepage — Telepítés — Felhom.eu' | shot /root/shots/homepage-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "200", + "http_port_80": "301 https://homepage.tester4.test/", + "guide": { + "path": "/apps/homepage/guide", + "hu_len": 2499, + "en_len": 2552, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/homepage", + "hu_len": 344, + "en_len": 331, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/homepage/guide -> 200 'Homepage — Felhom.eu' | shot /root/shots/homepage-after-guide-phone-hu.png hscroll=False", + "goto https://homepage.tester4.test/ -> 200 'Homepage' | shot /root/shots/homepage-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.308777074s\", \"last_run\": \"2026-10-24T13:22:42.276558875Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "homepage": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "homepage": 90.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 166 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-front-desktop-hu.png new file mode 100644 index 00000000..14c7ff98 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-guide-phone-hu.png new file mode 100644 index 00000000..d25bdd98 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-desktop-en.png new file mode 100644 index 00000000..b57fb59d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-phone-hu.png new file mode 100644 index 00000000..57f08487 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/homepage/screens/homepage-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/homepage/walk.log b/documentation/audits/catalog-sweep-2026-10-24/homepage/walk.log new file mode 100644 index 00000000..4bfb68c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/homepage/walk.log @@ -0,0 +1,8 @@ +13:21:58Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:22:23Z [1] deployed, controller state=running, pinned={'homepage': 'ghcr.io/gethomepage/homepage:v1.13.2'} +13:22:23Z [1] installed: deployed 25 s, front door 25 s +13:22:23Z [3] no fixture for this app — the front door answering is the smallest honest check +13:22:40Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:23:23Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'homepage', 'volumes_removed': ['homepage_homepage_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'St +13:24:35Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'homepage', 'volumes_removed': ['homepage_homepage_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kül +13:24:44Z == homepage done in 166 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich.console.txt b/documentation/audits/catalog-sweep-2026-10-24/immich.console.txt new file mode 100644 index 00000000..21db73e9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich.console.txt @@ -0,0 +1,18 @@ +19:18:33Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:18:33Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:20:34Z [1] deployed, controller state=running, pinned={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4'} +19:20:34Z gate: immich is gated — passed as the household (cookie set) +19:20:34Z [1] installed: deployed 121 s, front door 121 s +19:20:34Z immich: admin sign-up http=201 +19:20:35Z immich: album create http=201 +19:20:35Z immich: albums http=200 marker_present=True +19:21:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:21:54Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'immich', 'volumes_removed': ['immich_immich_ml_cache', 'immich_immich_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appd +19:22:03Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:22:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:22:06Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Immich megőrzött adatainak betöltése elindult.'} +19:23:26Z [1] deployed, controller state=running, pinned={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4'} +19:30:59Z app never answered on immich/ (last rc=0 code=404) +19:41:02Z app never answered on immich/api/server/ping (last rc=0 code=404) +19:41:42Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'immich', 'volumes_removed': ['immich_immich_ml_cache', 'immich_immich_postgres_data'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/immich (52K)'], 'hdd_pa +19:41:51Z == immich done in 1398 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-en.txt new file mode 100644 index 00000000..ccab5111 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-en.txt @@ -0,0 +1 @@ +Immich — Guide — Felhom.eu ← Apps Immich A Google Photos alternative - your photos back themselves up and sort themselves ● Running immich.tester4.test Open ↗ What is it for? Photos and videos back themselves up from your phone It recognises faces and objects on its own See where a photo was taken, on a map Memories and look-backs, put together for you Build albums and share them with the household First steps Open immich.tester4.test in your browser Create the admin account Install the Immich app on your phone (Android/iOS) Turn on automatic upload in the app Invite the household, each with their own account An external library (optional): in the Immich Administration menu, under External Libraries, add the /external/photos folder Before you start An external hard drive is needed to keep the photos and videos on At least 4 GB of free RAM is recommended (for the machine learning features) An x86 processor is needed (it does not run on a Raspberry Pi) Make your first album An album is a selection: the photos stay where they are and are only grouped. In the menu on the left, select „Albums”. Select „Create album” and type the name of the album. Select „Add photos” and pick the photos. Select „Add assets”. Share an album with the family Family members see a shared album in their own account. Open the album and select „Share”. Under „People”, select „Invite People”. Pick the family member and select „Add”. Share all your photos with your partner As a partner, your partner sees all your photos, not only one album. Select your profile picture in the top right corner, then „Account Settings”. Open „Sharing” and select „Add partner”. Choose your partner. They do not see your archived and deleted photos. In their own „Sharing” part, your partner can turn on „Show in timeline”: then your photos appear in their timeline too. Search for a picture or a face In the background, Immich recognises what is in your photos and who is in them. Select the search field at the top and type what you look for, for example dog beach. On the „People” page, select the „Add a name” field under a face and type the name. After that, searching for the name brings up their photos. The „Map” shows where your photos were taken. Frequently asked questions Why does search not find a Hungarian word? Search understands English words by default. Type in English, for example dog or birthday cake. What happens to a deleted photo? It goes to the „Trash” page and is deleted for good after 30 days. Until then you still find it there. How do I take a photo off the timeline without deleting it? Select it and choose „Archive”. You find it on the „Archive” page, and search still shows it. Does Immich change the original file? No. Immich does not change the original files; it keeps your changes separately. Why are there no faces on the „People” page yet? Recognition runs in the background after an upload. After many photos it takes a while until every face shows up. Where are my photos, and are they backed up? On the drive you chose at install time. For their backup, look at the „Data and backup” tab of Immich. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-hu.txt new file mode 100644 index 00000000..cd2a8672 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-guide-hu.txt @@ -0,0 +1 @@ +Immich — Felhom.eu ← Alkalmazások Immich Google Photos alternatíva - automatikus fotó mentés és rendszerezés ● Fut immich.tester4.test Megnyitás ↗ Mire használható? Fotók és videók automatikus mentése telefonról Arc- és tárgyfelismerés gépi tanulással Térképes megjelenítés helyszín alapján Emlékek és visszatekintések automatikus generálása Albumok létrehozása és megosztása családtagokkal Első lépések Nyisd meg a immich.tester4.test címet a böngészőben Hozd létre az admin fiókot Telepítsd az Immich alkalmazást a telefonodra (Android/iOS) Állítsd be az automatikus feltöltést az alkalmazásban Hívd meg a családtagokat külön fiókokkal Külső könyvtár (nem kötelező): az Immich adminisztrációs menüjében (Administration) a Külső könyvtárak (External Libraries) résznél add hozzá a /external/photos mappát Előfeltételek Külső HDD szükséges a fotók és videók tárolásához Legalább 4 GB szabad RAM ajánlott (gépi tanulás funkciókhoz) x86 processzor szükséges (nem fut Raspberry Pi-n) Első album létrehozása Az album egy válogatás: a képek a helyükön maradnak, csak egy csoportba kerülnek. A bal oldali menüben kattints az „Albumok” pontra. Kattints az „Album létrehozása” gombra, és írd be az album nevét. Kattints a „Fotók hozzáadása” gombra, és jelöld ki a képeket. Kattints az „Elemek hozzáadása” gombra. Album megosztása a családdal A megosztott albumot a családtagok a saját fiókjukban látják. Nyisd meg az albumot, és kattints a „Megosztás” gombra. A „Személyek” résznél kattints a „Személyek meghívása” gombra. Jelöld ki a családtagot, és kattints a „Hozzáadás” gombra. Minden képed megosztása a pároddal Partnerként a párod az összes képedet látja, nem csak egy albumot. Kattints a jobb felső sarokban a profilképedre, majd a „Fiókbeállítások” pontra. Nyisd meg a „Megosztás” részt, és kattints a „Partner hozzáadása” gombra. Válaszd ki a párodat. Az archivált és a törölt képeidet nem látja. A párod a saját „Megosztás” részében bekapcsolhatja a „Mutatás az idővonalon” kapcsolót: így a képeid az ő idővonalán is megjelennek. Keresés képre és arcra Az Immich a háttérben felismeri, mi van a képeken és ki szerepel rajtuk. Kattints felül a keresőmezőbe, és írd be, mit keresel, például dog beach. A „Személyek” oldalon kattints egy arc alatt a „Név megadása” mezőbe, és írd be a nevet. Ezután a keresőbe írt névre az ő képeit kapod. A „Térkép” megmutatja, hol készültek a képeid. Gyakori kérdések Miért nem talál a kereső magyar szóra? A kereső alapból angol szavakat ért. Írd angolul, például dog vagy birthday cake. Mi lesz a törölt képpel? A „Lomtár” oldalra kerül, és 30 nap múlva végleg törlődik. Addig ott még megtalálod. Hogyan tüntetek el egy képet az idővonalról törlés nélkül? Jelöld ki, és válaszd az „Archiválás” pontot. Az „Archívum” oldalon megtalálod, és a kereső is mutatja. Megváltoztatja az Immich az eredeti fájlt? Nem. Az Immich az eredeti fájlokat nem módosítja, a változtatásaidat külön tárolja. Miért nincsenek még arcok a „Személyek” oldalon? A felismerés a feltöltés után a háttérben fut. Sok kép után eltart egy ideig, amíg minden arc megjelenik. Hol vannak a képeim, és van róluk mentés? A meghajtódon, amelyet telepítéskor választottál. A mentésükről az Immich „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-en.txt new file mode 100644 index 00000000..482afa9e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-en.txt @@ -0,0 +1 @@ +Immich — Install — Felhom.eu ← Back Immich — Install Photos and videos in one place (a Google Photos alternative) ~2048M RAM Needs a hard drive Full description, screenshots Memory 2048 MB / 7479 MB (27%) Current usage (0 MB) Immich (+2048 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Data storage path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the photos and videos are kept Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-hu.txt new file mode 100644 index 00000000..a816d547 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-install-hu.txt @@ -0,0 +1 @@ +Immich — Telepítés — Felhom.eu ← Vissza Immich — Telepítés Fotók és videók kezelése (Google Photos alternatíva) ~2048M RAM HDD szükséges Részletes leírás, képernyőképek Memória 2048 MB / 7479 MB (27%) Jelenlegi használat (0 MB) Immich (+2048 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Adattárolási útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a fotók és videók tárolódnak Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-en.txt new file mode 100644 index 00000000..3ca701c8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-en.txt @@ -0,0 +1 @@ +Immich — Settings — Felhom.eu ← Apps Immich A Google Photos alternative - your photos back themselves up and sort themselves ● Running immich.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address immich.tester4.test Storage Külső tárhely (hdd_1) Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-hu.txt new file mode 100644 index 00000000..e2c57fff --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/page-overview-hu.txt @@ -0,0 +1 @@ +Immich — Felhom.eu ← Alkalmazások Immich Google Photos alternatíva - automatikus fotó mentés és rendszerezés ● Fut immich.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím immich.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/record.json b/documentation/audits/catalog-sweep-2026-10-24/immich/record.json new file mode 100644 index 00000000..40105074 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/record.json @@ -0,0 +1,144 @@ +{ + "app": "immich", + "sub": "immich", + "fixture": "Immich", + "started": "2026-10-24T19:18:13Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/immich/install", + "hu_len": 1305, + "en_len": 1191, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/immich/install -> 200 'Immich — Telepítés — Felhom.eu' | shot /root/shots/immich-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/immich/install -> 200 'Immich — Telepítés — Felhom.eu' | shot /root/shots/immich-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 121, + "front_door": true, + "seconds_to_front_door": 121 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fimmich.tester4.test%2F", + "http_port_80": "301 https://immich.tester4.test/", + "guide": { + "path": "/apps/immich/guide", + "hu_len": 3272, + "en_len": 3156, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/immich", + "hu_len": 754, + "en_len": 766, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/immich/guide -> 200 'Immich — Felhom.eu' | shot /root/shots/immich-after-guide-phone-hu.png hscroll=False", + "goto https://immich.tester4.test/ -> 200 '' | shot /root/shots/immich-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"19.12188972s\", \"last_run\": \"2026-10-24T19:21:20.9573697Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/immich", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "409", + "body": "{\"ok\": false, \"data\": {\"code\": \"kept_data_choice\", \"title\": \"Ennek az alkalmazásnak megvannak a régi adatai\", \"body\": \"A(z) Immich korábbi adatai (78 B, 2026-10-24) még a lemezen vannak. Mit csináljunk velük?\", \"use_label\": \"A megőrzött adataimat használom\", \"use_desc\": \"Az adatbázist innen töltjük vissza: távoli mentés, 2026-10-28 07:39. A régi fájlokkal indítjuk az alkalmazást. Ami ezután változott, hiányozhat.\", \"use_off\": \"\", \"use_offered\": true, \"fresh_label\": \"Tiszta lappal kezdem\", \"fresh_desc\": \"A régi adatok egy mai dátummal jelölt mappába kerülnek. Nem törlünk semmit.\", \"not_backed_up\": \"Erről nem készül mentés.\"}, \"error\": \"Ennek az alkalmazásnak megvannak a régi adatai\"}" + }, + "kept": { + "offered": true, + "use_ok": true + }, + "seed_read_after_reinstall": false, + "containers": { + "immich-server": { + "limit_mib": 3072, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "immich-machine-learning": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "immich-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "immich-postgres": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "immich-postgres": 362.5, + "immich-machine-learning": 161.8, + "immich-redis": 5.7, + "immich-server": 1497.1 + }, + "mem_anon_peak_mib": { + "immich-server": 1429.7, + "immich-postgres": 242.2, + "immich-machine-learning": 169.6, + "immich-redis": 3.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 1398 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-front-desktop-hu.png new file mode 100644 index 00000000..edccf2a8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-guide-phone-hu.png new file mode 100644 index 00000000..64b1e037 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-desktop-en.png new file mode 100644 index 00000000..0a9b6099 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-phone-hu.png new file mode 100644 index 00000000..2a76d992 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/immich/screens/immich-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/immich/walk.log b/documentation/audits/catalog-sweep-2026-10-24/immich/walk.log new file mode 100644 index 00000000..21db73e9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/immich/walk.log @@ -0,0 +1,18 @@ +19:18:33Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:18:33Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:20:34Z [1] deployed, controller state=running, pinned={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4'} +19:20:34Z gate: immich is gated — passed as the household (cookie set) +19:20:34Z [1] installed: deployed 121 s, front door 121 s +19:20:34Z immich: admin sign-up http=201 +19:20:35Z immich: album create http=201 +19:20:35Z immich: albums http=200 marker_present=True +19:21:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:21:54Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'immich', 'volumes_removed': ['immich_immich_ml_cache', 'immich_immich_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appd +19:22:03Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:22:04Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +19:22:06Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Immich megőrzött adatainak betöltése elindult.'} +19:23:26Z [1] deployed, controller state=running, pinned={'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.2.4', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine', 'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.4'} +19:30:59Z app never answered on immich/ (last rc=0 code=404) +19:41:02Z app never answered on immich/api/server/ping (last rc=0 code=404) +19:41:42Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'immich', 'volumes_removed': ['immich_immich_ml_cache', 'immich_immich_postgres_data'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/immich (52K)'], 'hdd_pa +19:41:51Z == immich done in 1398 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin.console.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin.console.txt new file mode 100644 index 00000000..a6637ddb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin.console.txt @@ -0,0 +1,18 @@ +18:53:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:53:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:54:17Z [1] deployed, controller state=unhealthy, pinned={'jellyfin': 'jellyfin/jellyfin:10.11.11'} +18:54:17Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +18:54:17Z gate: jellyfin is gated — passed as the household (cookie set) +18:54:17Z [1] installed: deployed 40 s, front door 41 s +18:54:22Z jellyfin: /Startup/Configuration http=204 +18:54:23Z jellyfin: /Startup/User http=204 +18:54:23Z jellyfin: /Startup/Complete http=204 +18:54:25Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=True +18:54:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:55:34Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'jellyfin', 'volumes_removed': ['jellyfin_jellyfin_cache', 'jellyfin_jellyfin_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/fel +18:55:42Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:56:43Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=False +18:56:44Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:57:05Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=True +18:57:45Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'jellyfin', 'volumes_removed': ['jellyfin_jellyfin_cache', 'jellyfin_jellyfin_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/fel +18:57:54Z == jellyfin done in 257 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-en.txt new file mode 100644 index 00000000..50a3ab8c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-en.txt @@ -0,0 +1 @@ +Jellyfin — Guide — Felhom.eu ← Apps Jellyfin A free media server - stream films, series and music ● Not healthy jellyfin.tester4.test Open ↗ Files ↗ What is it for? Stream films, series and music to any device Details arrive on their own - covers, descriptions, ratings Live TV and recording, with a TV tuner Several people, each with their own profile and parental controls Apps for phones and TVs (Android, iOS, Roku, Fire TV and more) First steps Open jellyfin.tester4.test in your browser Follow the setup wizard - choose your language Create the admin account Add your libraries (films: /media/movies, series: /media/tv) Install the Jellyfin app on your phone or TV Before you start An external hard drive is needed to keep the media files on At least 2 GB of free RAM is recommended Films and series sorted into folders (/media/movies/, /media/tv/) Add a family member Each family member watches with their own user, so everyone picks up where they left off. Select your profile picture in the top right corner, then „Dashboard”. Open the „Users” page and select the plus button next to the heading. Fill in the „Name” and „Password” fields. Tick „Enable access to all libraries” or pick the libraries, then select „Save”. An age limit for the children For a child's user, you can set which age ratings they see. On the „Users” page of the „Dashboard”, open the menu of the child's user. Choose „Parental control”. In the „Maximum allowed parental rating” list, choose the rating and select „Save”. Watch on a phone or a TV The Jellyfin apps connect with your box's address; they need no Jellyfin account. Open the Jellyfin app and add a new server. As the server address, type jellyfin.tester4.test. Sign in with your own Jellyfin user. A key for your box, for new drives When you put a new drive into the box, the box adds its film and series folders to your existing libraries; for this it asks for a key once. In the menu on the left of the „Dashboard”, under „Advanced”, open the „API Keys” page. Select „New API Key”. In the „App name” field, type felhom and select „Create”. If the „Connect now” button shows up on the Felhom dashboard, press it. Frequently asked questions Why can I not see the new film? Check that the file is in the media/movies folder and that the folder is named after the film's title and year, for example Nosferatu (1922). If you are in a hurry, select „Scan All Libraries” on the „Dashboard” page. It recognised the wrong film. How do I fix it? Open the film, choose „Identify” in its menu, and search for the right title. Can I delete a film from Jellyfin? No: Jellyfin only reads the drive. You delete in the file browser, in Radarr or in Sonarr. Do I need a subscription, and can I reach it away from home? Jellyfin is free; no subscription is needed. Away from home you watch on jellyfin.tester4.test too, with your own user. What is the key named felhom for? With it, the box adds a new drive's folders to Jellyfin and, before a restart, checks whether someone is watching. Without the key, you add the new folders yourself. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-hu.txt new file mode 100644 index 00000000..8f478969 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-guide-hu.txt @@ -0,0 +1 @@ +Jellyfin — Felhom.eu ← Alkalmazások Jellyfin Ingyenes média szerver - filmek, sorozatok és zene streamelése ● Nem egészséges jellyfin.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Filmek, sorozatok és zenék streamelése bármilyen eszközre Automatikus metaadat letöltés - borítók, leírások, értékelések Élő TV és DVR funkció TV tunerrel Több felhasználó külön profillal és szülői felügyelettel Mobil és TV alkalmazások (Android, iOS, Roku, Fire TV, stb.) Első lépések Nyisd meg a jellyfin.tester4.test címet a böngészőben Kövesd a beállítás varázslót - válaszd a magyar nyelvet Hozd létre az admin fiókot Add hozzá a médiatárat (filmek: /media/movies, sorozatok: /media/tv) Telepítsd a Jellyfin alkalmazást a telefonodra vagy TV-dre Előfeltételek Külső HDD szükséges a médiafájlok tárolásához Legalább 2 GB szabad RAM ajánlott Filmek és sorozatok mappákba rendezve (pl. /media/movies/, /media/tv/) Családtag hozzáadása Minden családtag saját felhasználóval néz, így mindenki ott folytatja, ahol abbahagyta. Kattints a jobb felső sarokban a profilképedre, majd a „Vezérlőpult” pontra. Nyisd meg a „Felhasználók” oldalt, és kattints a felirat melletti plusz gombra. Töltsd ki a „Név” és a „Jelszó” mezőt. Jelöld be a „Hozzáférés engedélyezése minden könyvtárhoz” jelölőt, vagy válaszd ki a médiatárakat, majd kattints a „Mentés” gombra. Korhatár a gyerekeknek A gyerek felhasználójának beállíthatod, milyen korhatárú filmeket lásson. A „Vezérlőpult” „Felhasználók” oldalán nyisd meg a gyerek felhasználójának menüjét. Válaszd a „Szülői felügyelet” pontot. A „Maximálisan megengedett szülői minősítés” listában válaszd ki a korhatárt, és kattints a „Mentés” gombra. Nézés telefonon vagy tévén A Jellyfin appok a dobozod címével kapcsolódnak, Jellyfin fiók nem kell hozzájuk. Nyisd meg a Jellyfin appot, és adj hozzá egy új szervert. Szervercímnek írd be: jellyfin.tester4.test. Jelentkezz be a saját Jellyfin felhasználóddal. Kulcs a dobozodnak az új meghajtókhoz Ha új meghajtót teszel a dobozba, a doboz hozzáadja a filmes és sorozatos mappáit a meglévő médiatáraidhoz, ehhez egyszer egy kulcsot kér. A „Vezérlőpult” bal oldali menüjében, a „Speciális” résznél nyisd meg az „API-kulcsok” oldalt. Kattints az „Új API kulcs” gombra. Az „Alkalmazás neve” mezőbe írd be: felhom, és kattints a „Létrehozás” gombra. Ha a Felhom vezérlőpultján megjelenik a „Bekötés most” gomb, nyomd meg. Gyakori kérdések Miért nem látom az új filmet? Nézd meg, hogy a fájl a media/movies mappában van-e, és hogy a mappa neve a film címe és éve, például Nosferatu (1922). Ha sietsz, a „Vezérlőpult” oldalon kattints az „Összes médiatár beolvasása” gombra. Rossz filmet ismert fel. Hogyan javítom? Nyisd meg a filmet, a menüjében válaszd az „Azonosítás” pontot, és keresd meg a helyes címet. Törölhetek filmet a Jellyfinből? Nem: a Jellyfin csak olvassa a meghajtót. Törölni a fájlböngészőben, a Radarrban vagy a Sonarrban tudsz. Kell előfizetés, és elérem otthonon kívül? A Jellyfin ingyenes, előfizetés nem kell. Otthonon kívül is a jellyfin.tester4.test címen nézheted, a saját felhasználóddal. Mire jó a felhom nevű kulcs? Ezzel a doboz hozzáadja egy új meghajtó mappáit a Jellyfinhez, és újraindítás előtt megnézi, néz-e éppen valaki. Kulcs nélkül az új mappákat neked kell hozzáadnod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-en.txt new file mode 100644 index 00000000..8f1df9a4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-en.txt @@ -0,0 +1 @@ +Jellyfin — Install — Felhom.eu ← Back Jellyfin — Install A free and open source media server ~512M RAM Needs a hard drive Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) Jellyfin (+512 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-hu.txt new file mode 100644 index 00000000..214e04de --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-install-hu.txt @@ -0,0 +1 @@ +Jellyfin — Telepítés — Felhom.eu ← Vissza Jellyfin — Telepítés Ingyenes és nyílt forráskódú média szerver ~512M RAM HDD szükséges Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Jellyfin (+512 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-en.txt new file mode 100644 index 00000000..eef71fba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-en.txt @@ -0,0 +1 @@ +Jellyfin — Settings — Felhom.eu ← Apps Jellyfin A free media server - stream films, series and music ● Not healthy jellyfin.tester4.test Open ↗ Files ↗ Running Not healthy Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address jellyfin.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-hu.txt new file mode 100644 index 00000000..09f70fe1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/page-overview-hu.txt @@ -0,0 +1 @@ +Jellyfin — Felhom.eu ← Alkalmazások Jellyfin Ingyenes média szerver - filmek, sorozatok és zene streamelése ● Nem egészséges jellyfin.tester4.test Megnyitás ↗ Fájlok ↗ Működés Nem egészséges Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím jellyfin.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/record.json b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/record.json new file mode 100644 index 00000000..f24e0aeb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/record.json @@ -0,0 +1,127 @@ +{ + "app": "jellyfin", + "sub": "jellyfin", + "fixture": "Jellyfin", + "started": "2026-10-24T18:53:15Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/jellyfin/install", + "hu_len": 775, + "en_len": 698, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/jellyfin/install -> 200 'Jellyfin — Telepítés — Felhom.eu' | shot /root/shots/jellyfin-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/jellyfin/install -> 200 'Jellyfin — Telepítés — Felhom.eu' | shot /root/shots/jellyfin-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 40, + "front_door": true, + "seconds_to_front_door": 41 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fjellyfin.tester4.test%2F", + "http_port_80": "301 https://jellyfin.tester4.test/", + "guide": { + "path": "/apps/jellyfin/guide", + "hu_len": 3307, + "en_len": 3107, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/jellyfin", + "hu_len": 758, + "en_len": 739, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/jellyfin/guide -> 200 'Jellyfin — Felhom.eu' | shot /root/shots/jellyfin-after-guide-phone-hu.png hscroll=False", + "goto https://jellyfin.tester4.test/web/ -> 200 'Jellyfin' | shot /root/shots/jellyfin-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.890229087s\", \"last_run\": \"2026-10-24T18:54:51.2124741Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"jellyfin\", \"started_at\": \"2026-10-24T18:56:44.01552706Z\", \"last\": {\"op\": \"restore\", \"stack\": \"jellyfin\", \"ok\": true, \"message\": \"A(z) jellyfin: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:57:01.789739476Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "jellyfin": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "jellyfin: [20:57:04] [ERR] [9] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: Invalid username or password entered. URL POST /Users/AuthenticateByName." + ] + }, + "mem_peak_mib": { + "jellyfin": 188.8 + }, + "mem_anon_peak_mib": { + "jellyfin": 110.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 257 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-front-desktop-hu.png new file mode 100644 index 00000000..50e10fdb Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-guide-phone-hu.png new file mode 100644 index 00000000..aeaa9a53 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-desktop-en.png new file mode 100644 index 00000000..d3bc301b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-phone-hu.png new file mode 100644 index 00000000..6ca7ec07 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/screens/jellyfin-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/jellyfin/walk.log b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/walk.log new file mode 100644 index 00000000..a6637ddb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/jellyfin/walk.log @@ -0,0 +1,18 @@ +18:53:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:53:36Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:54:17Z [1] deployed, controller state=unhealthy, pinned={'jellyfin': 'jellyfin/jellyfin:10.11.11'} +18:54:17Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +18:54:17Z gate: jellyfin is gated — passed as the household (cookie set) +18:54:17Z [1] installed: deployed 40 s, front door 41 s +18:54:22Z jellyfin: /Startup/Configuration http=204 +18:54:23Z jellyfin: /Startup/User http=204 +18:54:23Z jellyfin: /Startup/Complete http=204 +18:54:25Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=True +18:54:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:55:34Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'jellyfin', 'volumes_removed': ['jellyfin_jellyfin_cache', 'jellyfin_jellyfin_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/fel +18:55:42Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +18:56:43Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=False +18:56:44Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:57:05Z jellyfin: sign-in wrong-pw ok=False, right-pw ok=True +18:57:45Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'jellyfin', 'volumes_removed': ['jellyfin_jellyfin_cache', 'jellyfin_jellyfin_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/fel +18:57:54Z == jellyfin done in 257 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep.console.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep.console.txt new file mode 100644 index 00000000..72f40fd3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep.console.txt @@ -0,0 +1,14 @@ +18:06:39Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:08:24Z [1] deployed, controller state=running, pinned={'karakeep': 'ghcr.io/karakeep-app/karakeep:0.33.2', 'karakeep-chrome': 'ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1', 'karakeep-meilisearch': 'getmeili/meilisearch:v1.41.0'} +18:08:24Z gate: bookmarks is gated — passed as the household (cookie set) +18:08:25Z [1] installed: deployed 106 s, front door 107 s +18:08:26Z karakeep: users.create (the first account) http=200 role=admin +18:08:26Z karakeep: POST /api/v1/bookmarks http=201 +18:08:26Z karakeep: readback http=200 found=True (controls: no key 401, wrong 401, absent 404) +18:08:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:09:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'karakeep', 'volumes_removed': ['karakeep_karakeep_data', 'karakeep_karakeep_meili'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verifie +18:11:18Z karakeep: the household's email + password no longer give a key +18:11:18Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:11:44Z karakeep: readback http=200 found=True (controls: no key 401, wrong 401, absent 404) +18:12:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'karakeep', 'volumes_removed': ['karakeep_karakeep_data', 'karakeep_karakeep_meili'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás ne +18:12:40Z == karakeep done in 361 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-en.txt new file mode 100644 index 00000000..6fd1f9c8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-en.txt @@ -0,0 +1 @@ +Karakeep — Guide — Felhom.eu ← Apps Karakeep Save bookmarks, articles and notes - your own searchable archive ● Running bookmarks.tester4.test Open ↗ What is it for? Save web pages: Karakeep downloads and keeps their content, even if the page disappears later Notes, images and PDFs in one place, with full-text search A browser extension and a phone app for quick saving AI tagging only if you give it an OpenAI key - off by default First steps Open bookmarks.tester4.test and create your account (the first account becomes the admin) Press "Done, I set it up" on the app page - after that nobody else can sign up Install the browser extension or the phone app and enter: https://bookmarks.tester4.test and an API key (Settings, API keys) Save your first bookmark Good to know: the official Karakeep phone app sends crash reports to its makers (through a service called Sentry) An account for a family member Every family member gets an account and bookmarks of their own. Select your profile picture at the top right, and choose „Admin Settings”. Open the „Users List” page, and select the „Create User” button. Fill in „Name”, „Email”, „Password” and „Confirm Password”. Select „Create”, and give the family member the e-mail address and the password. Lists Lists gather bookmarks by topic, for example recipes or a holiday. In the menu on the left, select the + next to the lists. Type the list's name, and select „Create”. In a bookmark's menu, choose „Manage Lists”, and pick the list. A list shared with the family You can share a list with a family member, and you both see what is on it. In the list's menu, choose „Manage Collaborators”. Under „Add Collaborator”, type the family member's e-mail address. Choose what they may do: „Viewer” (only looks) or „Editor” (adds too), and select the add button. The family member accepts it on the „All Lists” page, under „Pending Invitations”, with „Accept”. Follow a news source New articles from a favourite site come into Karakeep by themselves. Under your profile picture, open the „User Settings” page. Choose „RSS Subscriptions”, and select „Add a Subscription”. Enter the source's name and its RSS address, then save it. Frequently asked questions Can I switch it to Hungarian? Yes: on the „User Settings” page, in „Interface Language”. Your browser remembers the choice. Why do my bookmarks get no automatic tags? AI tagging needs an OpenAI key, which you could give at install. Without a key it is off, and the text of your bookmarks does not go to OpenAI. You can also tag a bookmark by hand. What is the difference between „Favorite” and „Archive”? A bookmark marked as a favourite also shows in the „Favourites” list. An archived one leaves the home page, but stays on the „Archive” page. What is a smart list? A „Smart List” gathers bookmarks by itself, from a search. For a new list, choose it in „List Type”. Where are the saved pages? On the box, in Karakeep's own storage. What goes into the backup is shown on the dashboard, on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-hu.txt new file mode 100644 index 00000000..547c036e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-guide-hu.txt @@ -0,0 +1 @@ +Karakeep — Felhom.eu ← Alkalmazások Karakeep Könyvjelzők, cikkek és jegyzetek mentése - kereshető saját archívum ● Fut bookmarks.tester4.test Megnyitás ↗ Mire használható? Weboldalak mentése: a Karakeep letölti és elteszi a tartalmukat, akkor is, ha az oldal később eltűnik Jegyzetek, képek és PDF-ek egy helyen, teljes szöveges kereséssel Böngészőbővítmény és telefonos alkalmazás a gyors mentéshez AI-címkézés csak akkor, ha te megadsz hozzá egy OpenAI-kulcsot - alapból ki van kapcsolva Első lépések Nyisd meg a bookmarks.tester4.test címet, és hozd létre a fiókodat (az első fiók lesz az admin) Kattints a „Kész, beállítottam" gombra az alkalmazás oldalán - ezután más már nem regisztrálhat Telepítsd a böngészőbővítményt vagy a telefonos alkalmazást, és add meg: https://bookmarks.tester4.test és egy API-kulcsot (Beállítások, API-kulcsok) Mentsd el az első könyvjelződet Jó tudni: a Karakeep hivatalos telefonos alkalmazása összeomláskor hibajelentést küld a készítőinek (a Sentry nevű szolgáltatáson keresztül) Fiók a családtagnak Minden családtagnak saját fiókja és saját könyvjelzői lesznek. Kattints jobb felül a profilképedre, és válaszd az „Admin Settings” (admin beállítások) pontot. Nyisd meg a „Users List” (felhasználók) oldalt, és kattints a „Create User” (új felhasználó) gombra. Töltsd ki a „Name”, „Email”, „Password” és „Confirm Password” mezőt (név, e-mail, jelszó kétszer). Kattints a „Create” (létrehozás) gombra, és add át a családtagnak az e-mail címet és a jelszót. Listák A listákba témánként gyűjtheted a könyvjelzőket, például receptek vagy nyaralás. A bal oldali menüben a listák mellett kattints a + jelre. Írd be a lista nevét, és kattints a „Create” gombra. Egy könyvjelző menüjében válaszd a „Manage Lists” (listák kezelése) pontot, és válaszd ki a listát. Közös lista a családdal Egy listát megoszthatsz egy családtaggal, és mindketten látjátok, ami rajta van. A lista menüjében válaszd a „Manage Collaborators” (közreműködők kezelése) pontot. Az „Add Collaborator” (közreműködő hozzáadása) résznél írd be a családtag e-mail címét. Válaszd ki, mit tehet: „Viewer” (csak nézi) vagy „Editor” (hozzá is ad), és kattints a hozzáadás gombra. A családtag az „All Lists” (összes lista) oldalon, a „Pending Invitations” (függő meghívások) résznél fogadja el az „Accept” gombbal. Hírforrás követése Egy kedvenc oldal új cikkei maguktól bekerülnek a Karakeepbe. A profilképed alatt nyisd meg a „User Settings” (felhasználói beállítások) oldalt. Válaszd az „RSS Subscriptions” (RSS-feliratkozások) pontot, és kattints az „Add a Subscription” gombra. Add meg a forrás nevét és RSS-címét, majd mentsd el. Gyakori kérdések Átállíthatom magyarra? Igen: a „User Settings” oldalon az „Interface Language” (felület nyelve) mezőben. A választást a böngésződ jegyzi meg. Miért nem kapnak a könyvjelzőim automatikus címkét? Az AI-címkézéshez OpenAI-kulcs kell, amelyet telepítéskor adhattál meg. Kulcs nélkül ki van kapcsolva, és a könyvjelzőid szövege nem megy az OpenAI-hoz. Címkét kézzel is adhatsz a könyvjelzőnek. Mi a különbség a „Favorite” és az „Archive” között? A kedvencnek jelölt könyvjelző a „Favourites” listában is megjelenik. Az archivált eltűnik a kezdőoldalról, de az „Archive” oldalon megmarad. Mi az az okos lista? A „Smart List” (okos lista) egy keresés alapján magától gyűjti a könyvjelzőket. Új listánál a „List Type” (lista típusa) mezőben választhatod. Hol vannak a mentett oldalak? A dobozon, a Karakeep saját tárhelyén. Hogy mi kerül mentésbe, azt a vezérlőpulton az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-en.txt new file mode 100644 index 00000000..bc5e2f73 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-en.txt @@ -0,0 +1 @@ +Karakeep — Install — Felhom.eu ← Back Karakeep — Install Bookmarks, articles, notes and images in one place, searchable ~700M RAM Full description, screenshots Memory 700 MB / 7479 MB (9%) Current usage (0 MB) Karakeep (+700 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Session key Generated automatically Show Search index key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). OpenAI API key (optional) Left empty, automatic AI tagging is off and nothing leaves your server. If you enter one, the text of every new bookmark goes to OpenAI for tagging. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-hu.txt new file mode 100644 index 00000000..33c6a781 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-install-hu.txt @@ -0,0 +1 @@ +Karakeep — Telepítés — Felhom.eu ← Vissza Karakeep — Telepítés Könyvjelzők, cikkek, jegyzetek és képek egy helyen, kereshetően ~700M RAM Részletes leírás, képernyőképek Memória 700 MB / 7479 MB (9%) Jelenlegi használat (0 MB) Karakeep (+700 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Munkamenet-kulcs Automatikusan generálva Megjelenítés Keresőindex-kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). OpenAI API-kulcs (nem kötelező) Üresen hagyva az automatikus AI-címkézés ki van kapcsolva, és semmi nem megy ki a szerveredről. Ha megadod, minden új könyvjelző szövege az OpenAI-hoz kerül címkézésre. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-en.txt new file mode 100644 index 00000000..c3c1c104 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-en.txt @@ -0,0 +1 @@ +Karakeep — Settings — Felhom.eu ← Apps Karakeep Save bookmarks, articles and notes - your own searchable archive ● Running bookmarks.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: karakeep@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address bookmarks.tester4.test Session key Show Search index key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-hu.txt new file mode 100644 index 00000000..3e308281 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/page-overview-hu.txt @@ -0,0 +1 @@ +Karakeep — Felhom.eu ← Alkalmazások Karakeep Könyvjelzők, cikkek és jegyzetek mentése - kereshető saját archívum ● Fut bookmarks.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: karakeep@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím bookmarks.tester4.test Munkamenet-kulcs Megjelenítés Keresőindex-kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/record.json b/documentation/audits/catalog-sweep-2026-10-24/karakeep/record.json new file mode 100644 index 00000000..74aac8a2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/record.json @@ -0,0 +1,154 @@ +{ + "app": "karakeep", + "sub": "bookmarks", + "fixture": "Karakeep", + "started": "2026-10-24T18:06:20Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "NEXTAUTH_SECRET", + "secret", + false + ], + [ + "MEILI_MASTER_KEY", + "secret", + false + ], + [ + "OPENAI_API_KEY", + "secret_input", + false + ] + ], + "install_page": { + "path": "/apps/karakeep/install", + "hu_len": 1203, + "en_len": 1073, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/karakeep/install -> 200 'Karakeep — Telepítés — Felhom.eu' | shot /root/shots/karakeep-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/karakeep/install -> 200 'Karakeep — Telepítés — Felhom.eu' | shot /root/shots/karakeep-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 106, + "front_door": true, + "seconds_to_front_door": 107 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fbookmarks.tester4.test%2F", + "http_port_80": "301 https://bookmarks.tester4.test/", + "guide": { + "path": "/apps/karakeep/guide", + "hu_len": 3588, + "en_len": 3069, + "english_words_in_hu": [ + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/karakeep", + "hu_len": 1254, + "en_len": 1187, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/karakeep/guide -> 200 'Karakeep — Felhom.eu' | shot /root/shots/karakeep-after-guide-phone-hu.png hscroll=False", + "goto https://bookmarks.tester4.test/signin -> 200 'Karakeep' | shot /root/shots/karakeep-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"11.366024349s\", \"last_run\": \"2026-10-24T18:09:00.973137507Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 25, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"karakeep\", \"started_at\": \"2026-10-24T18:11:18.901769704Z\", \"last\": {\"op\": \"restore\", \"stack\": \"karakeep\", \"ok\": true, \"message\": \"A(z) karakeep: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:11:41.731130237Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "karakeep": { + "limit_mib": 1536, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "karakeep-meilisearch": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "karakeep-chrome": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 5, + "sample": [ + "karakeep: Error [TRPCError]: Bookmark not found", + "karakeep-chrome: Fontconfig error: No writable cache directories", + "karakeep-chrome: Fontconfig error: No writable cache directories", + "karakeep-chrome: Fontconfig error: No writable cache directories" + ] + }, + "mem_peak_mib": { + "karakeep": 586.7, + "karakeep-chrome": 40.0, + "karakeep-meilisearch": 22.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 361 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-front-desktop-hu.png new file mode 100644 index 00000000..206a08e4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-guide-phone-hu.png new file mode 100644 index 00000000..79509960 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-desktop-en.png new file mode 100644 index 00000000..1ac40cc7 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-phone-hu.png new file mode 100644 index 00000000..3278c962 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/karakeep/screens/karakeep-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/karakeep/walk.log b/documentation/audits/catalog-sweep-2026-10-24/karakeep/walk.log new file mode 100644 index 00000000..72f40fd3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/karakeep/walk.log @@ -0,0 +1,14 @@ +18:06:39Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:08:24Z [1] deployed, controller state=running, pinned={'karakeep': 'ghcr.io/karakeep-app/karakeep:0.33.2', 'karakeep-chrome': 'ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1', 'karakeep-meilisearch': 'getmeili/meilisearch:v1.41.0'} +18:08:24Z gate: bookmarks is gated — passed as the household (cookie set) +18:08:25Z [1] installed: deployed 106 s, front door 107 s +18:08:26Z karakeep: users.create (the first account) http=200 role=admin +18:08:26Z karakeep: POST /api/v1/bookmarks http=201 +18:08:26Z karakeep: readback http=200 found=True (controls: no key 401, wrong 401, absent 404) +18:08:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:09:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'karakeep', 'volumes_removed': ['karakeep_karakeep_data', 'karakeep_karakeep_meili'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verifie +18:11:18Z karakeep: the household's email + password no longer give a key +18:11:18Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:11:44Z karakeep: readback http=200 found=True (controls: no key 401, wrong 401, absent 404) +18:12:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'karakeep', 'volumes_removed': ['karakeep_karakeep_data', 'karakeep_karakeep_meili'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás ne +18:12:40Z == karakeep done in 361 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai.console.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai.console.txt new file mode 100644 index 00000000..f4a279a1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai.console.txt @@ -0,0 +1,10 @@ +15:01:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:01:05Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:02:55Z [1] deployed, controller state=running, pinned={'kimai': 'kimai/kimai2:2.67.0', 'kimai-db': 'mariadb:11.8'} +15:02:55Z [1] installed: deployed 111 s, front door 111 s +15:02:56Z [3] no fixture for this app — the front door answering is the smallest honest check +15:03:16Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:04:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'kimai', 'volumes_removed': ['kimai_kimai_db_data', 'kimai_kimai_var'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'me +15:04:23Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:06:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'kimai', 'volumes_removed': ['kimai_kimai_db_data', 'kimai_kimai_var'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +15:07:07Z == kimai done in 363 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-en.txt new file mode 100644 index 00000000..40236912 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-en.txt @@ -0,0 +1 @@ +Kimai — Guide — Felhom.eu ← Apps Kimai Time tracking - projects, clients and hours worked ● Running kimai.tester4.test Open ↗ What is it for? Record hours worked, split by project and client A stopwatch you start with one click Reports and export (PDF, CSV, Excel) Keep track of costs and invoicing Several people, with team-level permissions First steps Open kimai.tester4.test in your browser Sign in with the admin details you set at install time Create your first client and project Start the timer Add your first activity In Kimai every recorded time needs a project and an activity, so first create at least one activity. In the menu, open the „Activities” page and select „Create”. In „Name”, type the name of the activity, for example Planning or Paperwork. If you leave „Project” empty, the activity can be used with every project. You cannot change this later. Select „Save”. Enter work time afterwards If you forgot to start the timer, you can enter the work afterwards. In the „Time Tracking” menu, open the „My times” page. Select „Create”. Fill in „Date”, „Begin” and „End”. Choose the „Project” and the „Activity”, then select „Save”. Monthly summary and export You can add up the hours worked and save them to a file as well. In the „Reporting” menu, choose the „Monthly view for one user” report. For a file, open the „Export” page and set the month in „Time range”. Select „PDF”, „Excel” or „CSV”. If you tick „Mark as exported”, Kimai remembers which hours you have already handed in. Add a family member or a co-worker Everyone signs in with their own name and records their own hours. Open the „Users” page and select „Create”. Fill in „User”, „E-mail” and „Password”. Select „Save”, and give them the name and the password. At their first sign-in, Kimai offers them the language and time zone settings too. Frequently asked questions What is the „Welcome to Kimai” page after signing in? At the first sign-in, Kimai walks you through a few basic settings, such as the language and the time zone. You can change them later as well. How do I change the language? In the top bar, select your name and open „Preferences”. Choose the language in „Language”, then select „Save”. I forgot to stop the timer. What do I do? In the top bar, select the red stop button. Then, on the „My times” page, use „Edit” on the entry to correct the „End” time. How do I change my password? In the top bar, select your name and choose „Password”. The dashboard still shows the first password afterwards: sign in with the new one. Where do I see whether backups are made? On the dashboard, on Kimai's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-hu.txt new file mode 100644 index 00000000..1eebf13a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-guide-hu.txt @@ -0,0 +1 @@ +Kimai — Felhom.eu ← Alkalmazások Kimai Időkövetés - projektek, ügyfelek és munkaidő nyilvántartás ● Fut kimai.tester4.test Megnyitás ↗ Mire használható? Munkaidő nyilvántartás projektekre és ügyfelekre bontva Stopper-szerű időmérés egy kattintással Riportok és exportálás (PDF, CSV, Excel) Költségek és számlázás nyilvántartás Több felhasználó csapat szintű jogosultságokkal Első lépések Nyisd meg a kimai.tester4.test címet a böngészőben Jelentkezz be a telepítéskor megadott admin adatokkal Hozd létre az első ügyfelet és projektet Indítsd el az időmérést Első tevékenység felvétele A Kimaiban minden rögzített időhöz projekt és tevékenység is kell, ezért először hozz létre legalább egy tevékenységet. A menüben nyisd meg a „Tevékenységek” oldalt, és kattints a „Létrehozás” gombra. A „Név” mezőbe írd be a tevékenység nevét, például Tervezés vagy Ügyintézés. Ha a „Projekt” mezőt üresen hagyod, a tevékenység minden projektnél használható. Ezt később nem lehet megváltoztatni. Kattints a „Mentés” gombra. Munkaidő beírása utólag Ha elfelejtetted elindítani az órát, a munkát utólag is beírhatod. Az „Időrögzítés” menüben nyisd meg a „Munkaóráim” oldalt. Kattints a „Létrehozás” gombra. Add meg a „Dátum”, a „Kezdés” és a „Befejezés” mezőt. Válaszd ki a „Projekt” és a „Tevékenység” mezőt, majd kattints a „Mentés” gombra. Havi összesítés és exportálás A ledolgozott órákat összesítheted, és fájlba is mentheted. A „Jelentések” menüben válaszd az „Egy felhasználó havi nézete” jelentést. Fájlhoz nyisd meg az „Exportálás” oldalt, és az „Időtartam” mezőben állítsd be a hónapot. Kattints a „PDF”, az „Excel” vagy a „CSV” gombra. Ha jelölöd a „Megjelőlés exportáltként” pontot, a Kimai megjegyzi, mely órákat adtad már le. Családtag vagy munkatárs hozzáadása Mindenki a saját nevével lép be, és a saját óráit rögzíti. Nyisd meg a „Felhasználók” oldalt, és kattints a „Létrehozás” gombra. Töltsd ki a „Felhasználónév”, az „E-mail” és a „Jelszó” mezőt. Kattints a „Mentés” gombra, és add át neki a nevet és a jelszót. Az első belépésnél a Kimai neki is felkínálja a nyelv és az időzóna beállítását. Gyakori kérdések Mi ez az „Üdvözöllek a Kimai-ban” oldal belépés után? Első belépéskor a Kimai végigvezet néhány alapbeállításon, például a nyelven és az időzónán. Ezeket később is módosíthatod. Hogyan váltok nyelvet? A felső sávban kattints a nevedre, és nyisd meg a „Beállítások” pontot. A „Nyelv” mezőben válaszd ki a nyelvet, majd kattints a „Mentés” gombra. Elfelejtettem leállítani az órát. Mit tegyek? A felső sávban kattints a piros stop gombra. Utána a „Munkaóráim” oldalon a bejegyzés „Szerkesztés” pontjával javítsd ki a „Befejezés” idejét. Hogyan változtatom meg a jelszavamat? A felső sávban kattints a nevedre, és válaszd a „Jelszó” pontot. A vezérlőpult ezután is az első jelszót mutatja: a belépéshez az újat használd. Hol látom, hogy készül-e mentés? A vezérlőpulton, a Kimai „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-en.txt new file mode 100644 index 00000000..6ff5640b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-en.txt @@ -0,0 +1 @@ +Kimai — Install — Felhom.eu ← Back Kimai — Install Time tracking and project management ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Kimai (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin e-mail Admin password * 👁 Generate For the first sign-in. You can change it in the app afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-hu.txt new file mode 100644 index 00000000..c82aee96 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-install-hu.txt @@ -0,0 +1 @@ +Kimai — Telepítés — Felhom.eu ← Vissza Kimai — Telepítés Időkövetés és projektmenedzsment ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Kimai (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin email Admin jelszó * 👁 Generálás Első bejelentkezéshez. Utána a webes felületen módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-en.txt new file mode 100644 index 00000000..80b165ad --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-en.txt @@ -0,0 +1 @@ +Kimai — Settings — Felhom.eu ← Apps Kimai Time tracking - projects, clients and hours worked ● Running kimai.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin e-mail Admin password Show Address and keys These were created at install time and cannot be changed. Address kimai.tester4.test Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-hu.txt new file mode 100644 index 00000000..58aa2f53 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/page-overview-hu.txt @@ -0,0 +1 @@ +Kimai — Felhom.eu ← Alkalmazások Kimai Időkövetés - projektek, ügyfelek és munkaidő nyilvántartás ● Fut kimai.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin email Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím kimai.tester4.test Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/record.json b/documentation/audits/catalog-sweep-2026-10-24/kimai/record.json new file mode 100644 index 00000000..199870dd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/record.json @@ -0,0 +1,129 @@ +{ + "app": "kimai", + "sub": "kimai", + "fixture": null, + "started": "2026-10-24T15:00:47Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "ADMIN_EMAIL", + "text", + false + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/kimai/install", + "hu_len": 1006, + "en_len": 928, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/kimai/install -> 200 'Kimai — Telepítés — Felhom.eu' | shot /root/shots/kimai-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/kimai/install -> 200 'Kimai — Telepítés — Felhom.eu' | shot /root/shots/kimai-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 111, + "front_door": true, + "seconds_to_front_door": 111 + }, + "stranger": "302 https://192.168.0.157/en/homepage", + "http_port_80": "301 https://kimai.tester4.test/", + "guide": { + "path": "/apps/kimai/guide", + "hu_len": 2954, + "en_len": 2661, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/kimai", + "hu_len": 441, + "en_len": 423, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/kimai/guide -> 200 'Kimai — Felhom.eu' | shot /root/shots/kimai-after-guide-phone-hu.png hscroll=False", + "goto https://kimai.tester4.test/hu/login -> 200 'Kimai' | shot /root/shots/kimai-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"10.514610764s\", \"last_run\": \"2026-10-24T15:03:27.128127371Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "kimai": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "kimai-db": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "kimai: [2026-10-24T15:05:39.575480+00:00] deprecation.INFO: User Deprecated: Enabling the controller resolver automapping feature has been deprecated. Symfony Mapped Route Parameters should be used as" + ] + }, + "mem_peak_mib": { + "kimai-db": 116.2, + "kimai": 187.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 363 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-front-desktop-hu.png new file mode 100644 index 00000000..b5a11b3f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-guide-phone-hu.png new file mode 100644 index 00000000..c84d4ae4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-desktop-en.png new file mode 100644 index 00000000..65ac5117 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-phone-hu.png new file mode 100644 index 00000000..91329ff8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/kimai/screens/kimai-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/kimai/walk.log b/documentation/audits/catalog-sweep-2026-10-24/kimai/walk.log new file mode 100644 index 00000000..f4a279a1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/kimai/walk.log @@ -0,0 +1,10 @@ +15:01:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:01:05Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:02:55Z [1] deployed, controller state=running, pinned={'kimai': 'kimai/kimai2:2.67.0', 'kimai-db': 'mariadb:11.8'} +15:02:55Z [1] installed: deployed 111 s, front door 111 s +15:02:56Z [3] no fixture for this app — the front door answering is the smallest honest check +15:03:16Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:04:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'kimai', 'volumes_removed': ['kimai_kimai_db_data', 'kimai_kimai_var'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'me +15:04:23Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:06:59Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'kimai', 'volumes_removed': ['kimai_kimai_db_data', 'kimai_kimai_var'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +15:07:07Z == kimai done in 363 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga.console.txt b/documentation/audits/catalog-sweep-2026-10-24/komga.console.txt new file mode 100644 index 00000000..9ee1b7a0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga.console.txt @@ -0,0 +1,15 @@ +15:23:38Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:23:38Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:24:23Z [1] deployed, controller state=running, pinned={'komga': 'gotson/komga:1.28.0'} +15:24:23Z gate: komga is gated — passed as the household (cookie set) +15:24:23Z [1] installed: deployed 45 s, front door 46 s +15:24:24Z komga: claim http=200 +15:24:25Z komga: me wrong-pw http=401, right-pw http=200 +15:24:45Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:25:38Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'komga', 'volumes_removed': ['komga_komga_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/comi +15:25:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:26:32Z komga: me wrong-pw http=401, right-pw http=401 +15:26:32Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:27:04Z komga: me wrong-pw http=401, right-pw http=200 +15:27:44Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'komga', 'volumes_removed': ['komga_komga_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/comi +15:27:53Z == komga done in 255 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-en.txt new file mode 100644 index 00000000..3f825bec --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-en.txt @@ -0,0 +1 @@ +Komga — Guide — Felhom.eu ← Apps Komga A comic, manga and book server with a web reader ● Running komga.tester4.test Open ↗ What is it for? Sort and read comics and manga in your browser Details are scanned in and covers made on their own An OPDS feed for reader apps Your reading position follows you between devices Several people, each with their own library First steps Open komga.tester4.test in your browser Create the admin account the first time you open it Add the library (/data) Wait for the first scan to finish Use an OPDS-compatible app on your phone (Tachiyomi, for example) Before you start An external hard drive is needed to keep the comics on Formats it reads: CBZ, CBR, PDF, EPUB Upload new comics Komga reads from the media/comics folder of your drive, so that is where the files go. Copy the files (CBZ, CBR, PDF or EPUB) into the drive's media/comics folder, for example with the file browser. Give every series its own folder: Komga treats one folder as one series. In Komga, in the menu on the left, select the three dots next to the library name and choose „Scan library files”. New books show up on the „Home” page, in the „Recently Added Books” row. Read in the browser Komga remembers where you are, so you can go on on any device. In the menu on the left, open „Libraries” and choose a series. Select a book, then select „Read”. Later, the „Keep Reading” row on the „Home” page takes you back to where you stopped. You can also mark a book by hand: in its menu, choose „Mark as read”. Add a family member Everyone reads with their own account, so everyone keeps their own reading progress. In the menu on the left, in the „Server” group, open the „Users” page. Select the plus sign and fill in „Email” and „Password”. Under „Roles”, leave the boxes as they are; tick „Administrator” only for an adult. Select „Add”, and give them the e-mail address and the password. Group series into a collection You can put series that belong together into a collection, for example all the works of one author. Open the menu of a series and choose „Add to collection”. Type a name into „Search or create collection”, then select „Create”. You find your collections on the library's „Collections” tab. Frequently asked questions Does it speak Hungarian? Yes. At the bottom of the menu on the left, choose Hungarian in the language picker. Komga remembers it separately in each browser. I uploaded a file, but I do not see it. Why? Check that the file is inside the media/comics folder, in a series folder, and that it is CBZ, CBR, PDF or EPUB. Then run „Scan library files”. Can I limit what a child sees? Yes. On the „Users” page, in the child's row, choose „Edit restrictions”. There you set which libraries they see, and you can set an age limit too. What happens if I delete a book in Komga? „Delete” removes the file from the drive as well, and this cannot be undone. If you only want to hide it, use the restrictions instead. Can I read on my phone? Yes, in the browser at komga.tester4.test, or in an OPDS-capable reader app with your Komga account. For setting up the app, the Komga help gives the exact OPDS address. Where do I see what is backed up? On the dashboard, on Komga's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-hu.txt new file mode 100644 index 00000000..47d5c54a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-guide-hu.txt @@ -0,0 +1 @@ +Komga — Felhom.eu ← Alkalmazások Komga Képregény, manga és könyv szerver webes olvasóval ● Fut komga.tester4.test Megnyitás ↗ Mire használható? Képregények és mangák rendszerezése és olvasása böngészőben Automatikus metaadat szkennelés és borítókép generálás OPDS feed kompatibilis olvasó alkalmazásokhoz Olvasási haladás szinkronizálás eszközök között Több felhasználó külön könyvtárral Első lépések Nyisd meg a komga.tester4.test címet a böngészőben Hozd létre az admin fiókot az első megnyitáskor Add hozzá a könyvtárat (/data) Várd meg az automatikus szkennelést Használj OPDS-kompatibilis alkalmazást mobilon (pl. Tachiyomi) Előfeltételek Külső HDD szükséges a képregények tárolásához Támogatott formátumok: CBZ, CBR, PDF, EPUB Új képregények feltöltése A Komga a meghajtód media/comics mappájából olvas, ide kerülnek a fájlok. Másold a fájlokat (CBZ, CBR, PDF vagy EPUB) a meghajtó media/comics mappájába, például a fájlböngészővel. Minden sorozatnak legyen saját mappája: a Komga egy mappát egy sorozatnak vesz. A Komgában a bal oldali menüben a könyvtár neve melletti három pontra kattints, és válaszd a „Scan library files” (Könyvtári fájlok beolvasása) pontot. Az új kötetek a „Home” (Főoldal) oldalon, a „Recently Added Books” (Nemrég hozzáadott könyvek) sorban jelennek meg. Olvasás a böngészőben A Komga megjegyzi, hol tartasz, így bármelyik eszközön folytathatod. A bal oldali menüben nyisd meg a „Libraries” (Könyvtárak) pontot, és válassz egy sorozatot. Kattints egy kötetre, majd a „Read” (Olvasás) gombra. Később a „Home” oldal „Keep Reading” (Olvasd tovább) sorában ott folytatod, ahol abbahagytad. Egy kötetet kézzel is jelölhetsz: a menüjében válaszd a „Mark as read” (Olvasottnak jelölés) pontot. Családtag hozzáadása Mindenki a saját fiókjával olvas, így mindenkinek a saját olvasási állapota marad meg. A bal oldali menüben a „Server” (Szerver) csoportban nyisd meg a „Users” (Felhasználók) oldalt. Kattints a plusz jelre, és töltsd ki az „Email” (E-mail-cím) és a „Password” (Jelszó) mezőt. A „Roles” (Szerepek) alatt hagyd úgy a jelölőket, ahogy vannak; az „Administrator” (Adminisztrátor) pontot csak felnőttnek jelöld be. Kattints az „Add” (Hozzáadás) gombra, és add át neki az e-mail-címet és a jelszót. Sorozatok gyűjteménybe rendezése Gyűjteménybe teheted az összetartozó sorozatokat, például egy szerző összes művét. Nyisd meg egy sorozat menüjét, és válaszd a „Add to collection” (Hozzáadás a gyűjteményhez) pontot. A „Search or create collection” (Gyűjtemény keresése vagy létrehozása) mezőbe írj be egy nevet, majd kattints a „Create” (Létrehozás) gombra. A gyűjteményeidet a könyvtár „Collections” (Gyűjtemények) lapján találod. Gyakori kérdések Magyarul is tudja? Igen. A bal oldali menü alján, a nyelvválasztóban válaszd a magyar nyelvet. A Komga ezt böngészőnként jegyzi meg. Feltöltöttem egy fájlt, de nem látom. Miért? Nézd meg, hogy a fájl a media/comics mappán belül, egy sorozat mappájában van-e, és CBZ, CBR, PDF vagy EPUB-e. Utána futtasd a „Scan library files” pontot. Korlátozhatom, mit lát a gyerek? Igen. A „Users” oldalon a gyerek sorában válaszd az „Edit restrictions” (Korlátozások szerkesztése) pontot. Itt megadhatod, mely könyvtárakat látja, és korhatárt is állíthatsz. Mi történik, ha törlök egy kötetet a Komgában? A „Delete” (Törlés) a fájlt a meghajtóról is törli, és ez nem vonható vissza. Ha csak elrejtenéd, használd inkább a korlátozásokat. Olvashatok telefonon? Igen, a böngészőben a komga.tester4.test címen, vagy egy OPDS-képes olvasó appal a Komga fiókoddal. Az app beállításához a pontos OPDS-címet a Komga súgója írja le. Hol látom, mi kerül mentésbe? A vezérlőpulton, a Komga „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-en.txt new file mode 100644 index 00000000..76659bde --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-en.txt @@ -0,0 +1 @@ +Komga — Install — Felhom.eu ← Back Komga — Install A comic and manga server with OPDS support ~450M RAM Needs a hard drive Full description, screenshots Memory 450 MB / 7479 MB (6%) Current usage (0 MB) Komga (+450 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Comic library path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-hu.txt new file mode 100644 index 00000000..ce3cc2ca --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-install-hu.txt @@ -0,0 +1 @@ +Komga — Telepítés — Felhom.eu ← Vissza Komga — Telepítés Képregény és manga szerver OPDS támogatással ~450M RAM HDD szükséges Részletes leírás, képernyőképek Memória 450 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Komga (+450 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Képregénytár útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-en.txt new file mode 100644 index 00000000..7d638d0b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-en.txt @@ -0,0 +1 @@ +Komga — Settings — Felhom.eu ← Apps Komga A comic, manga and book server with a web reader ● Running komga.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address komga.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-hu.txt new file mode 100644 index 00000000..53650a5c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/page-overview-hu.txt @@ -0,0 +1 @@ +Komga — Felhom.eu ← Alkalmazások Komga Képregény, manga és könyv szerver webes olvasóval ● Fut komga.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím komga.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/record.json b/documentation/audits/catalog-sweep-2026-10-24/komga/record.json new file mode 100644 index 00000000..ecca446d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/record.json @@ -0,0 +1,124 @@ +{ + "app": "komga", + "sub": "komga", + "fixture": "Komga", + "started": "2026-10-24T15:23:20Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/komga/install", + "hu_len": 1201, + "en_len": 1083, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/komga/install -> 200 'Komga — Telepítés — Felhom.eu' | shot /root/shots/komga-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/komga/install -> 200 'Komga — Telepítés — Felhom.eu' | shot /root/shots/komga-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 45, + "front_door": true, + "seconds_to_front_door": 46 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fkomga.tester4.test%2F", + "http_port_80": "301 https://komga.tester4.test/", + "guide": { + "path": "/apps/komga/guide", + "hu_len": 3710, + "en_len": 3266, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/komga", + "hu_len": 702, + "en_len": 707, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/komga/guide -> 200 'Komga — Felhom.eu' | shot /root/shots/komga-after-guide-phone-hu.png hscroll=False", + "goto https://komga.tester4.test/startup?redirect=%2Fdashboard -> 200 'Komga' | shot /root/shots/komga-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"3.544877398s\", \"last_run\": \"2026-10-24T15:24:49.155846823Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 30, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"komga\", \"started_at\": \"2026-10-24T15:26:32.631018361Z\", \"last\": {\"op\": \"restore\", \"stack\": \"komga\", \"ok\": true, \"message\": \"A(z) komga: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:27:00.362917257Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "komga": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "komga": 473.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 255 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-front-desktop-hu.png new file mode 100644 index 00000000..38322152 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-guide-phone-hu.png new file mode 100644 index 00000000..bca5c2dc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-desktop-en.png new file mode 100644 index 00000000..77b42c1c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-phone-hu.png new file mode 100644 index 00000000..09c46268 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/komga/screens/komga-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/komga/walk.log b/documentation/audits/catalog-sweep-2026-10-24/komga/walk.log new file mode 100644 index 00000000..9ee1b7a0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/komga/walk.log @@ -0,0 +1,15 @@ +15:23:38Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:23:38Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:24:23Z [1] deployed, controller state=running, pinned={'komga': 'gotson/komga:1.28.0'} +15:24:23Z gate: komga is gated — passed as the household (cookie set) +15:24:23Z [1] installed: deployed 45 s, front door 46 s +15:24:24Z komga: claim http=200 +15:24:25Z komga: me wrong-pw http=401, right-pw http=200 +15:24:45Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:25:38Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'komga', 'volumes_removed': ['komga_komga_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/comi +15:25:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:26:32Z komga: me wrong-pw http=401, right-pw http=401 +15:26:32Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:27:04Z komga: me wrong-pw http=401, right-pw http=200 +15:27:44Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'komga', 'volumes_removed': ['komga_komga_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/comi +15:27:53Z == komga done in 255 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger.console.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger.console.txt new file mode 100644 index 00000000..b72dfd8b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger.console.txt @@ -0,0 +1,15 @@ +14:21:19Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ROOT_USER', 'ROOT_PASSWORD'] +14:21:19Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:21:44Z [1] deployed, controller state=running, pinned={'lubelogger': 'ghcr.io/hargata/lubelogger:v1.7.3'} +14:21:44Z [1] installed: deployed 25 s, front door 25 s +14:21:45Z lubelogger: POST /Vehicle/SaveVehicle http=200 :: {"success":true,"message":""} +14:21:45Z lubelogger: POST servicerecords/add http=200 :: {"success":true,"message":"Service Record Added","additionalData":{"recordId":1}} +14:21:45Z lubelogger: readback vehicle=True (http=200) service record=True (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:22:04Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:22:47Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'lubelogger', 'volumes_removed': ['lubelogger_lubelogger_data', 'lubelogger_lubelogger_keys'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +14:22:55Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ROOT_PASSWORD', 'ROOT_USER'] +14:23:21Z lubelogger: readback vehicle=False (http=200) service record=False (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:23:21Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:23:37Z lubelogger: readback vehicle=True (http=200) service record=True (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:24:15Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'lubelogger', 'volumes_removed': ['lubelogger_lubelogger_data', 'lubelogger_lubelogger_keys'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +14:24:24Z == lubelogger done in 185 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-en.txt new file mode 100644 index 00000000..5cfd53fd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-en.txt @@ -0,0 +1 @@ +LubeLogger — Guide — Felhom.eu ← Apps LubeLogger The whole history of the family car in one place: services, repairs, fuel, costs ● Running garazs.tester4.test Open ↗ What is it for? Every service, repair and inspection in one place, with the invoice attached Fuel-ups and the real consumption - what the car actually costs shows up Reminders: oil change, inspection, insurance, tyre change Several cars, and a motorbike or a garden machine, kept apart Invoices and papers attached to the record they belong to, not in a drawer First steps Open garazs.tester4.test and sign in with the name and password shown on the settings page Add your first vehicle (Add Vehicle): year, make, model, plate Switch the language on the Settings page if you want: Settings, then download the language you need Enter the current odometer reading and the last service, so the reminders can count from them Before you start No external hard drive is needed Set up the tabs and the units On a fresh install the car's page shows only the „Dashboard” tab, and LubeLogger counts in miles and gallons. Open the „Settings” tab. Under „Visible Tabs”, tick what you need, for example „Service Records”, „Fuel” and „Reminder”. Switch off „Use Imperial Calculation for Fuel Economy Calculations(MPG)”: it then counts in kilometres and litres. LubeLogger saves the change at once; there is no separate save button. Record a service with its invoice Every service is one line in the list, and the photo of the invoice stays next to it. On the „Garage” tab, select the car, then open the „Service Records” tab. Select „Add Service Record”. Fill in „Date”, „Odometer”, „Description” and „Cost”. Attach the invoice under „Upload documents(optional)”. Select „Add New Service Record”. Record a fuel-up From the fuel-ups, LubeLogger works out the real consumption. On the car's „Fuel” tab, select „Add Gas Record”. Fill in „Date”, „Odometer Reading”, „Fuel Consumption” and „Cost”. If you filled the tank, leave „Is Filled To Full” switched on. If you left a fuel-up out of the records, switch on „Missed Fuel Up(Skip MPG Calculation)”. Select „Add New Gas Record”. The tab shows the average consumption as „Average Fuel Economy”. A reminder for the oil change or the inspection A reminder watches a date, a distance, or whichever comes first. On the car's „Reminders” tab, select „Add Reminder”. In „Reminder Description”, type what it should remind you of, for example oil change. Under „Remind me on”, choose „Date”, „Odometer” or „Whichever comes first”, and enter the value. For a task that comes back, switch on „Is Recurring”. Select „Add New Reminder”. Frequently asked questions My family member does not see the car. Why? Only the people you add see the car. On the car's „Dashboard” tab, in the „Collaborators” part, use the person icon and enter their user name. Where do I see what is due soon? On the car's „Reminders” tab, where every reminder shows its urgency: „Not Urgent”, „Urgent”, „Very Urgent” or „Past Due”. How large a file can I attach? One file can be at most 28.6 MB. An invoice photographed with a phone fits easily. What does the car cost? On the car's „Dashboard” tab, „Total Cost” shows it, and „Expenses by Type” splits it by type. Where do I see whether backups are made? On the dashboard, on LubeLogger's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-hu.txt new file mode 100644 index 00000000..856dcc29 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-guide-hu.txt @@ -0,0 +1 @@ +LubeLogger — Felhom.eu ← Alkalmazások LubeLogger A családi autó teljes története egy helyen: szerviz, javítás, tankolás, költségek ● Fut garazs.tester4.test Megnyitás ↗ Mire használható? Minden szerviz, javítás és műszaki vizsga egy helyen, számlával együtt Tankolások és a tényleges fogyasztás - látszik, mennyibe kerül az autó Emlékeztetők: olajcsere, műszaki, biztosítás, gumicsere Több autó és akár motor vagy kerti gép külön nyilvántartása Számlák és papírok a rekord mellé csatolva, nem egy fiókban Első lépések Nyisd meg a garazs.tester4.test címet, és jelentkezz be a Beállítások oldalon látható névvel és jelszóval Vedd fel az első autót (Add Vehicle): évjárat, gyártó, modell, rendszám Magyar nyelvhez: Settings, majd a nyelvek listájából töltsd le a hu_HU csomagot - az alkalmazás angolul indul Írd be az aktuális kilométeróra-állást és az utolsó szervizt, hogy az emlékeztetők számolni tudjanak Előfeltételek Nem kell hozzá külső merevlemez Fülek és mértékegységek beállítása Frissen telepítve az autó oldalán csak a „Dashboard” (Áttekintés) fül látszik, és a LubeLogger mérföldben és gallonban számol. Nyisd meg a „Settings” (Beállítások) fület. A „Visible Tabs” (látható fülek) alatt jelöld be, amire szükséged van, például a „Service Records” (szervizek), a „Fuel” (tankolás) és a „Reminder” (emlékeztető) pontot. Kapcsold ki a „Use Imperial Calculation for Fuel Economy Calculations(MPG)” kapcsolót: így kilométerben és literben számol. A változást a LubeLogger azonnal menti, nincs külön mentés gomb. Szerviz rögzítése számlával Minden szerviz egy sor a listában, a számla fotója pedig mellette marad. A „Garage” (Garázs) fülön kattints az autóra, majd nyisd meg a „Service Records” fület. Kattints az „Add Service Record” (szerviz hozzáadása) gombra. Töltsd ki a „Date” (dátum), az „Odometer” (km-óra), a „Description” (leírás) és a „Cost” (költség) mezőt. A számlát az „Upload documents(optional)” (dokumentum feltöltése) résznél csatolhatod. Kattints az „Add New Service Record” gombra. Tankolás rögzítése A tankolásokból a LubeLogger kiszámolja a valódi fogyasztást. Az autó „Fuel” fülén kattints az „Add Gas Record” (tankolás hozzáadása) gombra. Add meg a „Date”, az „Odometer Reading” (km-óra állás), a „Fuel Consumption” (tankolt mennyiség) és a „Cost” mezőt. Ha tele tankoltál, hagyd bekapcsolva az „Is Filled To Full” (tele tank) kapcsolót. Ha egy tankolást kihagytál a rögzítésből, kapcsold be a „Missed Fuel Up(Skip MPG Calculation)” kapcsolót. Kattints az „Add New Gas Record” gombra. Az átlagfogyasztást a fülön az „Average Fuel Economy” (átlagfogyasztás) mutatja. Emlékeztető az olajcseréhez vagy a műszakihoz Az emlékeztető dátumra, kilométerre vagy arra figyel, amelyik előbb jön. Az autó „Reminders” (emlékeztetők) fülén kattints az „Add Reminder” gombra. A „Reminder Description” (leírás) mezőbe írd be, mire emlékeztessen, például olajcsere. A „Remind me on” (mikor) résznél válaszd a „Date”, az „Odometer” vagy a „Whichever comes first” (amelyik előbb jön) lehetőséget, és add meg az értéket. Ismétlődő teendőhöz kapcsold be az „Is Recurring” (ismétlődő) kapcsolót. Kattints az „Add New Reminder” gombra. Gyakori kérdések A családtagom nem látja az autót. Miért? Az autót csak az látja, akit hozzáadsz. Az autó „Dashboard” fülén, a „Collaborators” (közreműködők) résznél az ember ikonnal add meg a felhasználónevét. Hol látom, mi jár le hamarosan? Az autó „Reminders” fülén, ahol minden emlékeztető sürgősség szerint látszik: „Not Urgent”, „Urgent”, „Very Urgent” vagy „Past Due”. Mekkora fájlt csatolhatok? Egy fájl legfeljebb 28,6 MB lehet. Egy telefonnal fotózott számla bőven belefér. Mennyibe kerül az autó? Az autó „Dashboard” fülén a „Total Cost” (összes költség) mutatja, az „Expenses by Type” (költségek típus szerint) pedig típus szerint bontja. Hol látom, hogy készül-e mentés? A vezérlőpulton, a LubeLogger „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-en.txt new file mode 100644 index 00000000..e6f9163e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-en.txt @@ -0,0 +1 @@ +LubeLogger — Install — Felhom.eu ← Back LubeLogger — Install The family car's services, repairs and fuel-ups in one place ~80M RAM Full description, screenshots Memory 80 MB / 7479 MB (1%) Current usage (0 MB) LubeLogger (+80 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). User name * cannot be changed after install You sign in with this name. You can invite the rest of the family from inside. Password * cannot be changed after install 👁 Generate Generated at install. Without it the app would let nobody in. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-hu.txt new file mode 100644 index 00000000..9549fea3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-install-hu.txt @@ -0,0 +1 @@ +LubeLogger — Telepítés — Felhom.eu ← Vissza LubeLogger — Telepítés A családi autó szerviz-, javítás- és tankolásnyilvántartása ~80M RAM Részletes leírás, képernyőképek Memória 80 MB / 7479 MB (1%) Jelenlegi használat (0 MB) LubeLogger (+80 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Felhasználónév * telepítés után nem módosítható Ezzel a névvel jelentkezel be. A család többi tagját már bentről tudod meghívni. Jelszó * telepítés után nem módosítható 👁 Generálás Telepítéskor generált jelszó. Enélkül az alkalmazás senkit nem engedne be. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-en.txt new file mode 100644 index 00000000..7d1aa5f6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-en.txt @@ -0,0 +1 @@ +LubeLogger — Settings — Felhom.eu ← Apps LubeLogger The whole history of the family car in one place: services, repairs, fuel, costs ● Running garazs.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. User name Password Show Address and keys These were created at install time and cannot be changed. Address garazs.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-hu.txt new file mode 100644 index 00000000..e05f6201 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/page-overview-hu.txt @@ -0,0 +1 @@ +LubeLogger — Felhom.eu ← Alkalmazások LubeLogger A családi autó teljes története egy helyen: szerviz, javítás, tankolás, költségek ● Fut garazs.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Felhasználónév Jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím garazs.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/record.json b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/record.json new file mode 100644 index 00000000..5ee343ef --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/record.json @@ -0,0 +1,130 @@ +{ + "app": "lubelogger", + "sub": "garazs", + "fixture": "LubeLogger", + "started": "2026-10-24T14:21:03Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ROOT_USER", + "text", + true + ], + [ + "ROOT_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/lubelogger/install", + "hu_len": 1148, + "en_len": 1051, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/lubelogger/install -> 200 'LubeLogger — Telepítés — Felhom.eu' | shot /root/shots/lubelogger-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/lubelogger/install -> 200 'LubeLogger — Telepítés — Felhom.eu' | shot /root/shots/lubelogger-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://192.168.0.157/Login/Index", + "http_port_80": "301 https://garazs.tester4.test/", + "guide": { + "path": "/apps/lubelogger/guide", + "hu_len": 3919, + "en_len": 3364, + "english_words_in_hu": [ + "first", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/lubelogger", + "hu_len": 443, + "en_len": 433, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/lubelogger/guide -> 200 'LubeLogger — Felhom.eu' | shot /root/shots/lubelogger-after-guide-phone-hu.png hscroll=False", + "goto https://garazs.tester4.test/Login/Index -> 200 'Login - LubeLogger' | shot /root/shots/lubelogger-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.559487572s\", \"last_run\": \"2026-10-24T14:22:06.413115924Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"lubelogger\", \"started_at\": \"2026-10-24T14:23:21.75222307Z\", \"last\": {\"op\": \"restore\", \"stack\": \"lubelogger\", \"ok\": true, \"message\": \"A(z) lubelogger: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:23:33.135774015Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "lubelogger": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "lubelogger": 59.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 185 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-front-desktop-hu.png new file mode 100644 index 00000000..37d43f79 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-guide-phone-hu.png new file mode 100644 index 00000000..8e0670fe Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-desktop-en.png new file mode 100644 index 00000000..46300310 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-phone-hu.png new file mode 100644 index 00000000..ece0b915 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/screens/lubelogger-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/lubelogger/walk.log b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/walk.log new file mode 100644 index 00000000..b72dfd8b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/lubelogger/walk.log @@ -0,0 +1,15 @@ +14:21:19Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ROOT_USER', 'ROOT_PASSWORD'] +14:21:19Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:21:44Z [1] deployed, controller state=running, pinned={'lubelogger': 'ghcr.io/hargata/lubelogger:v1.7.3'} +14:21:44Z [1] installed: deployed 25 s, front door 25 s +14:21:45Z lubelogger: POST /Vehicle/SaveVehicle http=200 :: {"success":true,"message":""} +14:21:45Z lubelogger: POST servicerecords/add http=200 :: {"success":true,"message":"Service Record Added","additionalData":{"recordId":1}} +14:21:45Z lubelogger: readback vehicle=True (http=200) service record=True (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:22:04Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:22:47Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'lubelogger', 'volumes_removed': ['lubelogger_lubelogger_data', 'lubelogger_lubelogger_keys'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +14:22:55Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ROOT_PASSWORD', 'ROOT_USER'] +14:23:21Z lubelogger: readback vehicle=False (http=200) service record=False (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:23:21Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:23:37Z lubelogger: readback vehicle=True (http=200) service record=True (http=200) (controls: no cookie 401, wrong 401, absent list empty) +14:24:15Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'lubelogger', 'volumes_removed': ['lubelogger_lubelogger_data', 'lubelogger_lubelogger_keys'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +14:24:24Z == lubelogger done in 185 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie.console.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie.console.txt new file mode 100644 index 00000000..e6f409de --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie.console.txt @@ -0,0 +1,17 @@ +20:39:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +20:39:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:40:41Z [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} +20:40:41Z gate: recipes is gated — passed as the household (cookie set) +20:40:43Z [1] installed: deployed 71 s, front door 72 s +20:40:43Z mealie: create recipe http=201 +20:40:43Z gate: recipes is gated — passed as the household (cookie set) +20:40:44Z mealie: readback of the seeded recipe http=200 ok=True +20:41:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:42:01Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack meal +20:42:09Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +20:43:26Z gate: recipes is gated — passed as the household (cookie set) +20:43:37Z mealie: readback of the seeded recipe http=404 ok=False +20:43:37Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:43:59Z mealie: readback of the seeded recipe http=200 ok=True +20:44:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +20:44:49Z == mealie done in 318 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/console.txt new file mode 100644 index 00000000..53eef6c4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/console.txt @@ -0,0 +1,15 @@ +15:56:16Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:56:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:57:32Z [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} +15:57:32Z gate: recipes is gated — passed as the household (cookie set) +15:57:34Z [1] installed: deployed 76 s, front door 78 s +15:57:34Z mealie: create recipe http=201 +15:57:35Z mealie: readback of the seeded recipe http=200 ok=True +15:57:56Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:58:49Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack meal +15:58:57Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +16:00:05Z mealie: readback of the seeded recipe http=404 ok=False +16:00:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:00:26Z mealie: could not authenticate after the update :: http=401 {"detail":"Unauthorized"} +16:01:07Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +16:01:16Z == mealie done in 300 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-en.txt new file mode 100644 index 00000000..7066f961 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Mealie — Guide — Felhom.eu ← Apps Mealie A recipe manager and meal planner for the household ● Running Up to date recipes.tester4.test Open ↗ What is it for? Collect recipes and sort them by category and tag Import a recipe from a web page on its own Plan the week's meals and get a shopping list out of it Share recipes with family and friends A multilingual interface - English and Hungarian among them First steps Open recipes.tester4.test in your browser Sign in: changeme@example.com and the first password shown on the settings page Change the e-mail address to your own Import your first recipe by pasting a web page address Try the meal planner If someone enters a wrong password five times, Mealie locks the account for 1-2 hours and even the right password does not work meanwhile - wait, then you can sign in again Type in a recipe by hand If a recipe is not on the web, for example your grandmother's, you can enter it by hand. Select „Create”, and choose „Create a recipe manually”. Fill in „Recipe Name” and select „Create”. Fill in the „Ingredients” and „Instructions” parts. Select „Save”. A shopping list from a recipe You can put a recipe's ingredients on the shopping list in one go. Open the „Shopping Lists” page, select „Create”, and name the list in „New List”. Open the recipe, and in its menu choose „Add to List”. Choose the list, then select „Add to List”. In the shop, open the list on your phone and tick what is already in the basket. The shopping list for the week's menu Once you have planned the week, you can put the whole shopping together in one go. Open the „Meal Planner” page. In the menu, choose „Add All to List”, and choose the list. You can add a single day too: in the day's menu, choose „Add Day to List”. Invite a family member A family member registers with an invite link, and then sees the same recipes and lists. At the bottom of the menu on the left, under „Settings”, open the „User Settings” page. Select „Get Invite Link”. Next to the „Invite Link” field, select „Copy”, and send the link to the family member. They register through the link with their own name and password. Nobody can register without an invite; the box set it up that way. Frequently asked questions Why is the interface in English? Mealie follows your browser's language. For another language, at the bottom of the menu on the left, under „Settings”, select „Language”. A recipe did not come over from a web page. What do I do? Mealie cannot read every web page. In that case, type the recipe in by hand, as described above. A family member forgot their password. What do I do? On the „Admin Settings” page, open the „Users” part, then the family member. Select „Generate Password Reset Link”, and give them the link. Is there a phone app? You do not need a separate app: Mealie works well in the phone's browser, and you can put it on the home screen like an app. Where do I see whether backups are made? On the dashboard, on Mealie's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-hu.txt new file mode 100644 index 00000000..db60d762 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Mealie — Felhom.eu ← Alkalmazások Mealie Receptkezelő és étkezés tervező a családnak ● Fut Naprakész recipes.tester4.test Megnyitás ↗ Mire használható? Receptek gyűjtése és rendszerezése kategóriák és címkék szerint Receptek importálása weboldalakról automatikusan Heti étkezés tervezés és bevásárlólista generálás Receptek megosztása családtagokkal és barátokkal Többnyelvű felület - magyar is elérhető Első lépések Nyisd meg a recipes.tester4.test címet a böngészőben Jelentkezz be: changeme@example.com és a Beállítások oldalon látható első jelszó Változtasd meg az email címet a sajátodra Importáld az első receptet egy weboldal URL beillesztésével Próbáld ki az étkezés tervezőt Ha valaki ötször rossz jelszót ad meg, a Mealie 1-2 órára lezárja a fiókot, és közben a jó jelszó sem működik - ilyenkor várj, utána újra be tudsz lépni Recept beírása kézzel Ha egy recept nincs fent a neten, például a nagymamáé, kézzel is felviheted. Kattints a „Létrehozás” gombra, és válaszd a „Recept kézi létrehozása” lehetőséget. Írd be a „Recept neve” mezőt, és kattints a „Létrehozás” gombra. Töltsd ki a „Hozzávalók” és az „Elkészítés” részt. Kattints a „Mentés” gombra. Bevásárlólista egy receptből A recept hozzávalóit egy kattintással a bevásárlólistára teheted. Nyisd meg a „Bevásárlólisták” oldalt, kattints a „Létrehozás” gombra, és az „Új lista” mezőben adj nevet a listának. Nyisd meg a receptet, és a menüjében válaszd a „Hozzáadás listához” pontot. Válaszd ki a listát, majd kattints a „Hozzáadás listához” gombra. A boltban a telefonon nyisd meg a listát, és pipáld ki, ami már a kosárban van. A heti menü bevásárlólistája Ha már megtervezted a hetet, a teljes bevásárlást egyszerre összeállíthatod. Nyisd meg a „Menütervező” oldalt. A menüben válaszd az „Összes hozzáadása a listához” pontot, és válaszd ki a listát. Csak egy napot is hozzáadhatsz: a nap menüjében válaszd a „Nap hozzáadása a listához” pontot. Családtag meghívása A családtag meghívó linkkel regisztrál, és utána ugyanazokat a recepteket és listákat látja. A bal oldali menü alján, a „Beállítások” alatt nyisd meg a „Felhasználói beállítások” oldalt. Kattints a „Meghívó link beszerzése” gombra. A „Meghívó link” mező mellett kattints a „Másolás” gombra, és küldd el a linket a családtagnak. A linken saját névvel és jelszóval regisztrál. Meghívó nélkül senki nem tud regisztrálni, ezt a doboz így állította be. Gyakori kérdések Miért angol a felület? A Mealie a böngésződ nyelvét követi. Másik nyelvhez a bal oldali menü alján, a „Beállítások” alatt kattints a „Nyelv” pontra. Egy weboldalról nem jött át a recept. Mit tegyek? Nem minden weboldalt tud beolvasni a Mealie. Ilyenkor írd be a receptet kézzel, ahogy fent leírtuk. Egy családtag elfelejtette a jelszavát. Mit tegyek? Az „Admin beállítások” oldalon nyisd meg a „Felhasználók” részt, majd a családtagot. Kattints a „Jelszó visszaállítási link létrehozása” gombra, és add át neki a linket. Van telefonos app? Külön app nem kell: a Mealie a telefon böngészőjében is jól használható, és kiteheted a kezdőképernyőre, mint egy appot. Hol látom, hogy készül-e mentés? A vezérlőpulton, a Mealie „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-en.txt new file mode 100644 index 00000000..67c4c71b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-en.txt @@ -0,0 +1 @@ +Mealie — Install — Felhom.eu ← Back Mealie — Install A recipe manager and meal planner ~300M RAM Full description, screenshots Memory 300 MB / 7479 MB (4%) Current usage (0 MB) Mealie (+300 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password (changeme@example.com) * cannot be changed after install 👁 Generate For the first sign-in: changeme@example.com and this password. Change it in your profile afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-hu.txt new file mode 100644 index 00000000..b30a8f29 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Mealie — Telepítés — Felhom.eu ← Vissza Mealie — Telepítés Receptkezelő és étkezéstervező ~300M RAM Részletes leírás, képernyőképek Memória 300 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Mealie (+300 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó (changeme@example.com) * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: changeme@example.com és ez a jelszó. Utána a profilodban módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-en.txt new file mode 100644 index 00000000..3af4b6f2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Mealie — Settings — Felhom.eu ← Apps Mealie A recipe manager and meal planner for the household ● Running Up to date recipes.tester4.test Open ↗ Running Running Restart Stop Only you can reach it for now The box is replacing this app's known first password with a generated one of its own. Until then only you can reach it, while you are signed in to the dashboard – nobody else can sign in with the known password. If the change fails, change the password by hand and say so here. Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password (changeme@example.com) Show Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: mealie@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address recipes.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-hu.txt new file mode 100644 index 00000000..5198d01e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Mealie — Felhom.eu ← Alkalmazások Mealie Receptkezelő és étkezés tervező a családnak ● Fut Naprakész recipes.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Még csak te éred el A doboz most cseréli le az alkalmazás ismert első jelszavát egy saját, generált jelszóra. Addig csak te éred el, amíg be vagy jelentkezve a vezérlőpultba – más nem léphet be az ismert jelszóval. Ha a csere nem sikerül, változtasd meg a jelszót kézzel, és jelezd itt, hogy megtetted. Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó (changeme@example.com) Megjelenítés Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: mealie@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím recipes.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/record.json new file mode 100644 index 00000000..51ed528e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/record.json @@ -0,0 +1,125 @@ +{ + "app": "mealie", + "sub": "recipes", + "fixture": "Mealie", + "started": "2026-10-24T15:55:57Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/mealie/install", + "hu_len": 1031, + "en_len": 960, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/mealie/install -> 200 'Mealie — Telepítés — Felhom.eu' | shot /root/shots/mealie-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/mealie/install -> 200 'Mealie — Telepítés — Felhom.eu' | shot /root/shots/mealie-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 78 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Frecipes.tester4.test%2F", + "http_port_80": "301 https://recipes.tester4.test/", + "guide": { + "path": "/apps/mealie/guide", + "hu_len": 3184, + "en_len": 3022, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/mealie", + "hu_len": 1115, + "en_len": 1080, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/mealie/guide -> 200 'Mealie — Felhom.eu' | shot /root/shots/mealie-after-guide-phone-hu.png hscroll=False", + "goto https://recipes.tester4.test/ -> 200 'Mealie' | shot /root/shots/mealie-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"3.536390579s\", \"last_run\": \"2026-10-24T15:58:00.21006109Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"mealie\", \"started_at\": \"2026-10-24T16:00:05.463148186Z\", \"last\": {\"op\": \"restore\", \"stack\": \"mealie\", \"ok\": true, \"message\": \"A(z) mealie: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:00:22.838218494Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": false, + "containers": { + "mealie": { + "limit_mib": 1000, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 2, + "sample": [ + "mealie: ERROR 2026-10-24T18:00:26 - Incorrect username or password from 192.168.0.180", + "mealie: ERROR 2026-10-24T18:00:26 - Incorrect username or password from 192.168.0.180" + ] + }, + "mem_peak_mib": { + "mealie": 309.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 300 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-front-desktop-hu.png new file mode 100644 index 00000000..dc32bec8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-guide-phone-hu.png new file mode 100644 index 00000000..90a4422a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-desktop-en.png new file mode 100644 index 00000000..7337ea4f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-phone-hu.png new file mode 100644 index 00000000..8174898d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/screens/mealie-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/walk.log new file mode 100644 index 00000000..53eef6c4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/first-run/walk.log @@ -0,0 +1,15 @@ +15:56:16Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +15:56:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:57:32Z [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} +15:57:32Z gate: recipes is gated — passed as the household (cookie set) +15:57:34Z [1] installed: deployed 76 s, front door 78 s +15:57:34Z mealie: create recipe http=201 +15:57:35Z mealie: readback of the seeded recipe http=200 ok=True +15:57:56Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:58:49Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack meal +15:58:57Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +16:00:05Z mealie: readback of the seeded recipe http=404 ok=False +16:00:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:00:26Z mealie: could not authenticate after the update :: http=401 {"detail":"Unauthorized"} +16:01:07Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +16:01:16Z == mealie done in 300 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-en.txt new file mode 100644 index 00000000..4996e2b9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-en.txt @@ -0,0 +1 @@ +Mealie — Guide — Felhom.eu ← Apps Mealie A recipe manager and meal planner for the household ● Running recipes.tester4.test Open ↗ What is it for? Collect recipes and sort them by category and tag Import a recipe from a web page on its own Plan the week's meals and get a shopping list out of it Share recipes with family and friends A multilingual interface - English and Hungarian among them First steps Open recipes.tester4.test in your browser Sign in: changeme@example.com and the first password shown on the settings page Change the e-mail address to your own Import your first recipe by pasting a web page address Try the meal planner If someone enters a wrong password five times, Mealie locks the account for 1-2 hours and even the right password does not work meanwhile - wait, then you can sign in again Type in a recipe by hand If a recipe is not on the web, for example your grandmother's, you can enter it by hand. Select „Create”, and choose „Create a recipe manually”. Fill in „Recipe Name” and select „Create”. Fill in the „Ingredients” and „Instructions” parts. Select „Save”. A shopping list from a recipe You can put a recipe's ingredients on the shopping list in one go. Open the „Shopping Lists” page, select „Create”, and name the list in „New List”. Open the recipe, and in its menu choose „Add to List”. Choose the list, then select „Add to List”. In the shop, open the list on your phone and tick what is already in the basket. The shopping list for the week's menu Once you have planned the week, you can put the whole shopping together in one go. Open the „Meal Planner” page. In the menu, choose „Add All to List”, and choose the list. You can add a single day too: in the day's menu, choose „Add Day to List”. Invite a family member A family member registers with an invite link, and then sees the same recipes and lists. At the bottom of the menu on the left, under „Settings”, open the „User Settings” page. Select „Get Invite Link”. Next to the „Invite Link” field, select „Copy”, and send the link to the family member. They register through the link with their own name and password. Nobody can register without an invite; the box set it up that way. Frequently asked questions Why is the interface in English? Mealie follows your browser's language. For another language, at the bottom of the menu on the left, under „Settings”, select „Language”. A recipe did not come over from a web page. What do I do? Mealie cannot read every web page. In that case, type the recipe in by hand, as described above. A family member forgot their password. What do I do? On the „Admin Settings” page, open the „Users” part, then the family member. Select „Generate Password Reset Link”, and give them the link. Is there a phone app? You do not need a separate app: Mealie works well in the phone's browser, and you can put it on the home screen like an app. Where do I see whether backups are made? On the dashboard, on Mealie's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-hu.txt new file mode 100644 index 00000000..01aef50e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-guide-hu.txt @@ -0,0 +1 @@ +Mealie — Felhom.eu ← Alkalmazások Mealie Receptkezelő és étkezés tervező a családnak ● Fut recipes.tester4.test Megnyitás ↗ Mire használható? Receptek gyűjtése és rendszerezése kategóriák és címkék szerint Receptek importálása weboldalakról automatikusan Heti étkezés tervezés és bevásárlólista generálás Receptek megosztása családtagokkal és barátokkal Többnyelvű felület - magyar is elérhető Első lépések Nyisd meg a recipes.tester4.test címet a böngészőben Jelentkezz be: changeme@example.com és a Beállítások oldalon látható első jelszó Változtasd meg az email címet a sajátodra Importáld az első receptet egy weboldal URL beillesztésével Próbáld ki az étkezés tervezőt Ha valaki ötször rossz jelszót ad meg, a Mealie 1-2 órára lezárja a fiókot, és közben a jó jelszó sem működik - ilyenkor várj, utána újra be tudsz lépni Recept beírása kézzel Ha egy recept nincs fent a neten, például a nagymamáé, kézzel is felviheted. Kattints a „Létrehozás” gombra, és válaszd a „Recept kézi létrehozása” lehetőséget. Írd be a „Recept neve” mezőt, és kattints a „Létrehozás” gombra. Töltsd ki a „Hozzávalók” és az „Elkészítés” részt. Kattints a „Mentés” gombra. Bevásárlólista egy receptből A recept hozzávalóit egy kattintással a bevásárlólistára teheted. Nyisd meg a „Bevásárlólisták” oldalt, kattints a „Létrehozás” gombra, és az „Új lista” mezőben adj nevet a listának. Nyisd meg a receptet, és a menüjében válaszd a „Hozzáadás listához” pontot. Válaszd ki a listát, majd kattints a „Hozzáadás listához” gombra. A boltban a telefonon nyisd meg a listát, és pipáld ki, ami már a kosárban van. A heti menü bevásárlólistája Ha már megtervezted a hetet, a teljes bevásárlást egyszerre összeállíthatod. Nyisd meg a „Menütervező” oldalt. A menüben válaszd az „Összes hozzáadása a listához” pontot, és válaszd ki a listát. Csak egy napot is hozzáadhatsz: a nap menüjében válaszd a „Nap hozzáadása a listához” pontot. Családtag meghívása A családtag meghívó linkkel regisztrál, és utána ugyanazokat a recepteket és listákat látja. A bal oldali menü alján, a „Beállítások” alatt nyisd meg a „Felhasználói beállítások” oldalt. Kattints a „Meghívó link beszerzése” gombra. A „Meghívó link” mező mellett kattints a „Másolás” gombra, és küldd el a linket a családtagnak. A linken saját névvel és jelszóval regisztrál. Meghívó nélkül senki nem tud regisztrálni, ezt a doboz így állította be. Gyakori kérdések Miért angol a felület? A Mealie a böngésződ nyelvét követi. Másik nyelvhez a bal oldali menü alján, a „Beállítások” alatt kattints a „Nyelv” pontra. Egy weboldalról nem jött át a recept. Mit tegyek? Nem minden weboldalt tud beolvasni a Mealie. Ilyenkor írd be a receptet kézzel, ahogy fent leírtuk. Egy családtag elfelejtette a jelszavát. Mit tegyek? Az „Admin beállítások” oldalon nyisd meg a „Felhasználók” részt, majd a családtagot. Kattints a „Jelszó visszaállítási link létrehozása” gombra, és add át neki a linket. Van telefonos app? Külön app nem kell: a Mealie a telefon böngészőjében is jól használható, és kiteheted a kezdőképernyőre, mint egy appot. Hol látom, hogy készül-e mentés? A vezérlőpulton, a Mealie „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-en.txt new file mode 100644 index 00000000..67c4c71b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-en.txt @@ -0,0 +1 @@ +Mealie — Install — Felhom.eu ← Back Mealie — Install A recipe manager and meal planner ~300M RAM Full description, screenshots Memory 300 MB / 7479 MB (4%) Current usage (0 MB) Mealie (+300 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin password (changeme@example.com) * cannot be changed after install 👁 Generate For the first sign-in: changeme@example.com and this password. Change it in your profile afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-hu.txt new file mode 100644 index 00000000..b30a8f29 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-install-hu.txt @@ -0,0 +1 @@ +Mealie — Telepítés — Felhom.eu ← Vissza Mealie — Telepítés Receptkezelő és étkezéstervező ~300M RAM Részletes leírás, képernyőképek Memória 300 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Mealie (+300 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin jelszó (changeme@example.com) * telepítés után nem módosítható 👁 Generálás Az első bejelentkezéshez: changeme@example.com és ez a jelszó. Utána a profilodban módosítható. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-en.txt new file mode 100644 index 00000000..a66db909 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-en.txt @@ -0,0 +1 @@ +Mealie — Settings — Felhom.eu ← Apps Mealie A recipe manager and meal planner for the household ● Running recipes.tester4.test Open ↗ Running Running Restart Stop Only you can reach it for now The box is replacing this app's known first password with a generated one of its own. Until then only you can reach it, while you are signed in to the dashboard – nobody else can sign in with the known password. If the change fails, change the password by hand and say so here. Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin password (changeme@example.com) Show Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: mealie@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address recipes.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-hu.txt new file mode 100644 index 00000000..b25e8605 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/page-overview-hu.txt @@ -0,0 +1 @@ +Mealie — Felhom.eu ← Alkalmazások Mealie Receptkezelő és étkezés tervező a családnak ● Fut recipes.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Még csak te éred el A doboz most cseréli le az alkalmazás ismert első jelszavát egy saját, generált jelszóra. Addig csak te éred el, amíg be vagy jelentkezve a vezérlőpultba – más nem léphet be az ismert jelszóval. Ha a csere nem sikerül, változtasd meg a jelszót kézzel, és jelezd itt, hogy megtetted. Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin jelszó (changeme@example.com) Megjelenítés Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: mealie@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím recipes.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/record.json b/documentation/audits/catalog-sweep-2026-10-24/mealie/record.json new file mode 100644 index 00000000..fdabcb60 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/record.json @@ -0,0 +1,128 @@ +{ + "app": "mealie", + "sub": "recipes", + "fixture": "Mealie", + "started": "2026-10-24T20:39:10Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/mealie/install", + "hu_len": 1031, + "en_len": 960, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/mealie/install -> 200 'Mealie — Telepítés — Felhom.eu' | shot /root/shots/mealie-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/mealie/install -> 200 'Mealie — Telepítés — Felhom.eu' | shot /root/shots/mealie-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 72 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Frecipes.tester4.test%2F", + "http_port_80": "301 https://recipes.tester4.test/", + "guide": { + "path": "/apps/mealie/guide", + "hu_len": 3174, + "en_len": 3011, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/mealie", + "hu_len": 1105, + "en_len": 1069, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/mealie/guide -> 200 'Mealie — Felhom.eu' | shot /root/shots/mealie-after-guide-phone-hu.png hscroll=False", + "goto https://recipes.tester4.test/ -> 200 'Mealie' | shot /root/shots/mealie-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"3.302950562s\", \"last_run\": \"2026-10-24T20:41:12.032884386Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"mealie\", \"started_at\": \"2026-10-24T20:43:37.563325538Z\", \"last\": {\"op\": \"restore\", \"stack\": \"mealie\", \"ok\": true, \"message\": \"A(z) mealie: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:43:54.654044318Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "mealie": { + "limit_mib": 1000, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 2, + "sample": [ + "mealie: ERROR 2026-10-24T22:43:59 - No Entry Found on recipe controller action", + "mealie: ERROR 2026-10-24T22:43:59 - No Entry Found on recipe controller action" + ] + }, + "mem_peak_mib": { + "mealie": 243.9 + }, + "mem_anon_peak_mib": { + "mealie": 321.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 318 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-front-desktop-hu.png new file mode 100644 index 00000000..dc32bec8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-guide-phone-hu.png new file mode 100644 index 00000000..a84fadfa Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-desktop-en.png new file mode 100644 index 00000000..7337ea4f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-phone-hu.png new file mode 100644 index 00000000..8174898d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/mealie/screens/mealie-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/mealie/walk.log b/documentation/audits/catalog-sweep-2026-10-24/mealie/walk.log new file mode 100644 index 00000000..e6f409de --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/mealie/walk.log @@ -0,0 +1,17 @@ +20:39:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +20:39:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:40:41Z [1] deployed, controller state=running, pinned={'mealie': 'ghcr.io/mealie-recipes/mealie:v3.28.0'} +20:40:41Z gate: recipes is gated — passed as the household (cookie set) +20:40:43Z [1] installed: deployed 71 s, front door 72 s +20:40:43Z mealie: create recipe http=201 +20:40:43Z gate: recipes is gated — passed as the household (cookie set) +20:40:44Z mealie: readback of the seeded recipe http=200 ok=True +20:41:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:42:01Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack meal +20:42:09Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['ADMIN_PASSWORD'] +20:43:26Z gate: recipes is gated — passed as the household (cookie set) +20:43:37Z mealie: readback of the seeded recipe http=404 ok=False +20:43:37Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:43:59Z mealie: readback of the seeded recipe http=200 ok=True +20:44:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'mealie', 'volumes_removed': ['mealie_mealie_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +20:44:49Z == mealie done in 318 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube.console.txt b/documentation/audits/catalog-sweep-2026-10-24/metube.console.txt new file mode 100644 index 00000000..c0d2dcee --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube.console.txt @@ -0,0 +1,16 @@ +15:28:12Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:28:12Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:29:12Z [1] deployed, controller state=running, pinned={'metube': 'ghcr.io/alexta69/metube:2026.09.29'} +15:29:12Z family gate: video is family-gated — passed as the household (cookie set) +15:29:12Z [1] installed: deployed 61 s, front door 61 s +15:29:13Z metube: POST /add http=200 {"status": "ok"} +15:29:17Z metube: the download finished (991017 bytes) +15:29:17Z metube: history has it=True; GET /download/ http=200 +15:29:37Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:30:20Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'metube', 'volumes_removed': ['metube_metube_state'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/me +15:30:28Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:31:44Z metube: history has it=False; GET /download/ http=200 +15:31:44Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:31:59Z metube: history has it=True; GET /download/ http=200 +15:32:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'metube', 'volumes_removed': ['metube_metube_state'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/me +15:32:48Z == metube done in 276 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-en.txt new file mode 100644 index 00000000..247da928 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-en.txt @@ -0,0 +1 @@ +MeTube — Guide — Felhom.eu ← Apps MeTube Download videos and audio from a link - for your family only ● Running video.tester4.test Open ↗ Files ↗ What is it for? Download a video or a playlist from its link, as video or audio only The downloads go to your drive; you see them in the file browser and your media player Only your family members reach it: a stranger cannot download through your household's internet address First steps Add your family members on the Family card of Settings, Security Open video.tester4.test and sign in with your family name Paste a link, pick the quality, and start the download For your own use only: download only videos you have the right to (for example your own, or freely licensed ones). Downloads go out from your household's internet address. Before you start Downloads use your household's internet connection; a video service may now and then limit many downloads from one address Download only the audio From a talk or a recording of your own performance, the audio is often enough. Paste the link, as for a video. In „Type”, choose „Audio”. In „Format”, choose „MP3”, and in „Quality”, for example „192 kbps”. Select „Download”. Where are the finished files? Every download goes into the media/metube folder of your drive. The „Downloading” part shows what is downloading now. Finished downloads move to the „Completed” part. With the download icon at the end of the row, you can also save the file to your own computer. You also find the files in the file browser, in the drive's media/metube folder. If you remove a row from the „Completed” part, the file stays on the drive. Sort into your own folder You can put downloads that belong together into their own folder, for example the videos of a holiday. Select „Advanced Options”. In „Download Folder”, choose an existing folder, or type a new name, for example holiday-2026. Start the download: the file goes into this folder inside the media/metube folder. Download a playlist You can download a whole playlist too, for example the recordings on your own channel. Paste the link of the playlist. Under „Advanced Options”, in „Items Limit”, you can set how many items it downloads at most. 0 means all of them. Select „Download”. The items download one after the other. Frequently asked questions Why is a download „Queued”? The box set it up so that two downloads run at a time. The others wait in line and start by themselves. Who sees my downloads? Every family member who signs in sees the same list and the same folder. MeTube has no separate accounts. A download failed. What do I do? Try again later. A video service now and then limits many downloads from one internet address. What may I download? Only what you have the right to: for example your own recordings or freely licensed content. Where do I see what is backed up? On the dashboard, on MeTube's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-hu.txt new file mode 100644 index 00000000..7c5b1cd3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-guide-hu.txt @@ -0,0 +1 @@ +MeTube — Felhom.eu ← Alkalmazások MeTube Videók és hanganyagok letöltése egy linkből - csak a családodnak ● Fut video.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Egy videó vagy lejátszási lista letöltése a linkjéből, videóként vagy csak hangként A letöltések a meghajtódra kerülnek, a fájlböngészőben és a médialejátszódban is látod őket Csak a családtagjaid érik el: idegen nem tud letölteni a háztartásod internetcíméről Első lépések Add hozzá a családtagjaidat a Beállítások, Biztonság oldal Család kártyáján Nyisd meg a video.tester4.test címet, és lépj be a családi neveddel Illessz be egy linket, válaszd ki a minőséget, és indítsd el a letöltést Csak saját használatra: csak olyan videót tölts le, amelyhez jogod van (például a sajátodat vagy szabad felhasználásút). A letöltés a háztartásod internetcíméről történik. Előfeltételek A letöltés a háztartásod internetkapcsolatát használja; egy videószolgáltató ritkán korlátozhatja a sok letöltést egy címről Csak a hang letöltése Egy előadásból vagy a saját fellépésed felvételéből sokszor elég a hang. Illeszd be a linket, mint egy videónál. A „Type” (típus) mezőben válaszd az „Audio” (hang) lehetőséget. A „Format” (formátum) mezőben válaszd az „MP3” lehetőséget, a „Quality” (minőség) mezőben például a „192 kbps” értéket. Kattints a „Download” (letöltés) gombra. Hol vannak a kész fájlok? Minden letöltés a meghajtód media/metube mappájába kerül. A „Downloading” (folyamatban) részben látod, mi töltődik éppen. A kész letöltések a „Completed” (kész) részbe kerülnek. A sor végén lévő letöltés ikonnal a saját gépedre is lementheted a fájlt. A fájlokat a fájlböngészőben is megtalálod, a meghajtó media/metube mappájában. Ha a „Completed” részből törölsz egy sort, a fájl a meghajtón marad. Saját mappába rendezés Az összetartozó letöltéseket külön mappába teheted, például egy nyaralás videóit. Kattints az „Advanced Options” (további beállítások) gombra. A „Download Folder” (letöltési mappa) mezőben válassz egy meglévő mappát, vagy írj be egy új nevet, például nyaralas-2026. Indítsd el a letöltést: a fájl a media/metube mappán belül ebbe a mappába kerül. Lejátszási lista letöltése Egy teljes lejátszási listát is letölthetsz, például a saját csatornád felvételeit. Illeszd be a lejátszási lista linkjét. Az „Advanced Options” alatt az „Items Limit” (elemek száma) mezőben megadhatod, legfeljebb hány elemet töltsön le. A 0 azt jelenti: mindet. Kattints a „Download” gombra. Az elemek egymás után töltődnek le. Gyakori kérdések Miért áll egy letöltés „Queued” (sorban áll) állapotban? A doboz úgy állította be, hogy egyszerre két letöltés fusson. A többi sorban vár, és magától elindul. Ki látja a letöltéseimet? Minden belépett családtag ugyanazt a listát és ugyanazt a mappát látja. A MeTube-ban nincsenek külön fiókok. Hibára futott egy letöltés. Mit tegyek? Próbáld újra később. A videószolgáltató időnként korlátozza a sok letöltést egy internetcímről. Mit tölthetek le? Csak olyat, amihez jogod van: például a saját felvételeidet vagy szabad felhasználású tartalmat. Hol látom, mi kerül mentésbe? A vezérlőpulton, a MeTube „Adatok és mentés” fülén. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-en.txt new file mode 100644 index 00000000..6821ee40 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-en.txt @@ -0,0 +1 @@ +MeTube — Install — Felhom.eu ← Back MeTube — Install Download videos and audio to your drive, for your family ~128M RAM Needs a hard drive Full description, screenshots Memory 128 MB / 7479 MB (1%) Current usage (0 MB) MeTube (+128 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Downloads drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive the downloads go to Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-hu.txt new file mode 100644 index 00000000..eaa5cf6c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-install-hu.txt @@ -0,0 +1 @@ +MeTube — Telepítés — Felhom.eu ← Vissza MeTube — Telepítés Videók és hanganyagok letöltése a meghajtódra, a család számára ~128M RAM HDD szükséges Részletes leírás, képernyőképek Memória 128 MB / 7479 MB (1%) Jelenlegi használat (0 MB) MeTube (+128 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Letöltések meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyre a letöltések kerülnek Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-en.txt new file mode 100644 index 00000000..d8e18902 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-en.txt @@ -0,0 +1 @@ +MeTube — Settings — Felhom.eu ← Apps MeTube Download videos and audio from a link - for your family only ● Running video.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app You sign in to this app with your family name and password. You add family members on the Family card of the Settings, Security page. Address and keys These were created at install time and cannot be changed. Address video.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-hu.txt new file mode 100644 index 00000000..1af1d37e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/page-overview-hu.txt @@ -0,0 +1 @@ +MeTube — Felhom.eu ← Alkalmazások MeTube Videók és hanganyagok letöltése egy linkből - csak a családodnak ● Fut video.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz a családi neveddel és jelszavaddal lépsz be. A családtagokat a Beállítások, Biztonság oldal Család kártyáján adod hozzá. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím video.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/record.json b/documentation/audits/catalog-sweep-2026-10-24/metube/record.json new file mode 100644 index 00000000..eaddf296 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/record.json @@ -0,0 +1,122 @@ +{ + "app": "metube", + "sub": "video", + "fixture": "MeTube", + "started": "2026-10-24T15:27:54Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/metube/install", + "hu_len": 1234, + "en_len": 1091, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/metube/install -> 200 'MeTube — Telepítés — Felhom.eu' | shot /root/shots/metube-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/metube/install -> 200 'MeTube — Telepítés — Felhom.eu' | shot /root/shots/metube-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 61, + "front_door": true, + "seconds_to_front_door": 61 + }, + "stranger": "302 https://felhom.tester4.test/__family/start?rd=https%3A%2F%2Fvideo.tester4.test%2F", + "http_port_80": "301 https://video.tester4.test/", + "guide": { + "path": "/apps/metube/guide", + "hu_len": 3166, + "en_len": 2924, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/metube", + "hu_len": 474, + "en_len": 465, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/metube/guide -> 200 'MeTube — Felhom.eu' | shot /root/shots/metube-after-guide-phone-hu.png hscroll=False", + "goto https://video.tester4.test/ -> 200 'MeTube' | shot /root/shots/metube-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.566884322s\", \"last_run\": \"2026-10-24T15:29:39.327390622Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"metube\", \"started_at\": \"2026-10-24T15:31:44.765703572Z\", \"last\": {\"op\": \"restore\", \"stack\": \"metube\", \"ok\": true, \"message\": \"A(z) metube: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:31:55.171685576Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "metube": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "metube": 89.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 276 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-front-desktop-hu.png new file mode 100644 index 00000000..576429b3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-guide-phone-hu.png new file mode 100644 index 00000000..1fdc3dff Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-desktop-en.png new file mode 100644 index 00000000..729ceb34 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-phone-hu.png new file mode 100644 index 00000000..13e25fe7 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/metube/screens/metube-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/metube/walk.log b/documentation/audits/catalog-sweep-2026-10-24/metube/walk.log new file mode 100644 index 00000000..c0d2dcee --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/metube/walk.log @@ -0,0 +1,16 @@ +15:28:12Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:28:12Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:29:12Z [1] deployed, controller state=running, pinned={'metube': 'ghcr.io/alexta69/metube:2026.09.29'} +15:29:12Z family gate: video is family-gated — passed as the household (cookie set) +15:29:12Z [1] installed: deployed 61 s, front door 61 s +15:29:13Z metube: POST /add http=200 {"status": "ok"} +15:29:17Z metube: the download finished (991017 bytes) +15:29:17Z metube: history has it=True; GET /download/ http=200 +15:29:37Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:30:20Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'metube', 'volumes_removed': ['metube_metube_state'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/me +15:30:28Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +15:31:44Z metube: history has it=False; GET /download/ http=200 +15:31:44Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:31:59Z metube: history has it=True; GET /download/ http=200 +15:32:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'metube', 'volumes_removed': ['metube_metube_state'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/me +15:32:48Z == metube done in 276 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n.console.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n.console.txt new file mode 100644 index 00000000..7cd447a7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n.console.txt @@ -0,0 +1,15 @@ +21:35:47Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:38:12Z [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'} +21:38:12Z gate: auto is gated — passed as the household (cookie set) +21:38:18Z [1] installed: deployed 146 s, front door 151 s +21:38:18Z n8n: /rest/owner/setup http=200 +21:38:18Z gate: auto is gated — passed as the household (cookie set) +21:38:18Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:38:04.622Z","id":"786c81cb-d999-4813-9240-129648fbd331","email":"drill-c8f274da@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:38:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:39:31Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack n8n removed'} +21:41:56Z gate: auto is gated — passed as the household (cookie set) +21:41:56Z n8n: READBACK UNUSABLE — a wrong password authenticated :: n8n is starting up. Please wait +21:41:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:42:16Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:38:04.622Z","id":"786c81cb-d999-4813-9240-129648fbd331","email":"drill-c8f274da@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:42:56Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így +21:43:05Z == n8n done in 439 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-en.txt new file mode 100644 index 00000000..c2b037bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-en.txt @@ -0,0 +1 @@ +n8n — Guide — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running auto.tester4.test Open ↗ What is it for? Wire apps together in a visual workflow editor Automate e-mail, Telegram, webhooks and file handling 400+ integrations (Google, Slack, Notion, GitHub and more) Scheduled jobs (cron) and webhook triggers AI workflows with an LLM in them First steps Open auto.tester4.test in your browser Create the admin account Try a ready-made workflow from the Template gallery Build your first workflow of your own Before you start An x86 processor is needed Your first scheduled workflow A workflow starts with a trigger, followed by the steps it carries out. Select „Create workflow”. Select „Add first step…” and choose „On a schedule”. In „Trigger Interval”, set how often it runs. Add the next step with the plus sign, then try it with „Execute workflow”. When it works, select „Publish”. The schedule only runs by itself after that. Check the runs n8n remembers every run, so you can see afterwards what happened. In the menu on the left, open the „Executions” page. Next to every run you see its status: „Success” or „Error”. Select a failed run: the workflow opens, and you see which step got stuck. Invite a family member Everyone works with their own account and sees their own workflows. In the menu on the left, open „Settings”, then the „Users” page. Select „Invite” and type the family member's e-mail address. Select „Create invite link”: the link goes to the clipboard. Send them the link. Through it they set their own name and password. Frequently asked questions Why does the workflow not run by itself? Only a published workflow runs by itself. Check that the header says „Published”; if not, select „Publish”. How do I switch a workflow off? Open it, and in the menu next to the „Publish” button choose „Unpublish”. The workflow stays, it just does not start by itself. Which address do I give a webhook? In the webhook step, the „Production URL” belongs to the published workflow and is reached on auto.tester4.test. The „Test URL” is for trying it out in the editor. A family member forgot their password. What do I do? On the „Users” page, in the menu next to their name, choose „Copy Password Reset Link”, and send them the link. Are the saved sign-in details safe? n8n stores the sign-in details you save for services encrypted, with a key the box made at install time. What is backed up, you see on the dashboard, on n8n's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-hu.txt new file mode 100644 index 00000000..2691ef21 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-guide-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut auto.tester4.test Megnyitás ↗ Mire használható? Alkalmazások összekapcsolása vizuális workflow szerkesztővel Automatizálás: email, Telegram, webhook, fájl feldolgozás 400+ integráció (Google, Slack, Notion, GitHub, stb.) Időzített feladatok (cron) és webhook triggerek AI munkafolyamatok LLM integrációval Első lépések Nyisd meg az auto.tester4.test címet a böngészőben Hozd létre az admin fiókot Próbálj ki egy sablon workflow-t a Template galériából Hozd létre az első saját munkafolyamatot Előfeltételek x86 processzor szükséges Első időzített munkafolyamat Egy munkafolyamat egy indítóval kezdődik, utána jönnek a lépések, amelyeket elvégez. Kattints a „Create workflow” (új munkafolyamat) gombra. Kattints az „Add first step…” (első lépés) mezőre, és válaszd az „On a schedule” (időzítve) lehetőséget. A „Trigger Interval” (gyakoriság) mezőben állítsd be, milyen gyakran fusson. Add hozzá a következő lépést a plusz jellel, majd próbáld ki az „Execute workflow” (futtatás) gombbal. Ha jól működik, kattints a „Publish” (közzététel) gombra. Az időzítés csak ezután fut magától. Futások ellenőrzése Az n8n minden futást megjegyez, így utólag is látod, mi történt. A bal oldali menüben nyisd meg az „Executions” (futások) oldalt. Minden futás mellett látod az állapotát: „Success” (sikeres) vagy „Error” (hiba). Kattints egy hibás futásra: megnyílik a munkafolyamat, és látod, melyik lépés akadt el. Családtag meghívása Mindenki a saját fiókjával dolgozik, és a saját munkafolyamatait látja. A bal oldali menüben nyisd meg a „Settings” (beállítások), majd a „Users” (felhasználók) oldalt. Kattints az „Invite” (meghívás) gombra, és írd be a családtag e-mail-címét. Kattints a „Create invite link” (meghívó link) gombra: a link a vágólapra kerül. Küldd el neki a linket. Ezen állít be magának nevet és jelszót. Gyakori kérdések Miért nem fut magától a munkafolyamat? Magától csak a közzétett munkafolyamat fut. Nézd meg, hogy a fejlécben „Published” (közzétéve) áll-e; ha nem, kattints a „Publish” gombra. Hogyan kapcsolok ki egy munkafolyamatot? Nyisd meg, és a „Publish” gomb melletti menüben válaszd az „Unpublish” (visszavonás) pontot. A munkafolyamat megmarad, csak nem indul el magától. Milyen címet adjak meg egy webhooknak? A webhook lépésben a „Production URL” (éles cím) a közzétett munkafolyamathoz tartozik, és az auto.tester4.test címen érhető el. A „Test URL” (tesztcím) a szerkesztőben való kipróbáláshoz kell. Egy családtag elfelejtette a jelszavát. Mit tegyek? A „Users” oldalon a neve melletti menüben válaszd a „Copy Password Reset Link” (jelszó-visszaállító link) pontot, és küldd el neki a linket. Biztonságban vannak a mentett belépési adatok? Az n8n a szolgáltatásokhoz mentett belépési adatokat titkosítva tárolja, a kulcsot a doboz telepítéskor készítette. Azt, hogy mi kerül mentésbe, a vezérlőpulton, az n8n „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-en.txt new file mode 100644 index 00000000..4d0e3982 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-en.txt @@ -0,0 +1 @@ +n8n — Install — Felhom.eu ← Back n8n — Install Workflow automation with a visual editor ~512M RAM Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) n8n (+512 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-hu.txt new file mode 100644 index 00000000..63108d21 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-install-hu.txt @@ -0,0 +1 @@ +n8n — Telepítés — Felhom.eu ← Vissza n8n — Telepítés Workflow automatizálás vizuális szerkesztővel ~512M RAM Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) n8n (+512 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-en.txt new file mode 100644 index 00000000..fecae6dd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-en.txt @@ -0,0 +1 @@ +n8n — Settings — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running auto.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address auto.tester4.test Encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-hu.txt new file mode 100644 index 00000000..d1251cab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/page-overview-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut auto.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím auto.tester4.test Titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/record.json b/documentation/audits/catalog-sweep-2026-10-24/n8n/record.json new file mode 100644 index 00000000..a52eb8d3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/record.json @@ -0,0 +1,129 @@ +{ + "app": "n8n", + "sub": "auto", + "fixture": "N8n", + "started": "2026-10-24T21:35:27Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "N8N_ENCRYPTION_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/n8n/install", + "hu_len": 915, + "en_len": 818, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 146, + "front_door": true, + "seconds_to_front_door": 151 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fauto.tester4.test%2F", + "http_port_80": "301 https://auto.tester4.test/", + "guide": { + "path": "/apps/n8n/guide", + "hu_len": 3005, + "en_len": 2540, + "english_words_in_hu": [ + "first", + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/n8n", + "hu_len": 706, + "en_len": 698, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/n8n/guide -> 200 'n8n — Felhom.eu' | shot /root/shots/n8n-after-guide-phone-hu.png hscroll=False", + "goto https://auto.tester4.test/ -> 200 'n8n.io - Workflow Automation' | shot /root/shots/n8n-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"2.06194509s\", \"last_run\": \"2026-10-24T21:38:45.85075806Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"n8n\", \"started_at\": \"2026-10-24T21:41:56.380141354Z\", \"last\": {\"op\": \"restore\", \"stack\": \"n8n\", \"ok\": true, \"message\": \"A(z) n8n: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T21:42:15.628945677Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "n8n": { + "limit_mib": 1536, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "n8n": 622.4 + }, + "mem_anon_peak_mib": { + "n8n": 345.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 439 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-en.txt new file mode 100644 index 00000000..c68403e1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-en.txt @@ -0,0 +1 @@ +n8n — Guide — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running Up to date auto.tester4.test Open ↗ What is it for? Wire apps together in a visual workflow editor Automate e-mail, Telegram, webhooks and file handling 400+ integrations (Google, Slack, Notion, GitHub and more) Scheduled jobs (cron) and webhook triggers AI workflows with an LLM in them First steps Open auto.tester4.test in your browser Create the admin account Try a ready-made workflow from the Template gallery Build your first workflow of your own Before you start An x86 processor is needed Your first scheduled workflow A workflow starts with a trigger, followed by the steps it carries out. Select „Create workflow”. Select „Add first step…” and choose „On a schedule”. In „Trigger Interval”, set how often it runs. Add the next step with the plus sign, then try it with „Execute workflow”. When it works, select „Publish”. The schedule only runs by itself after that. Check the runs n8n remembers every run, so you can see afterwards what happened. In the menu on the left, open the „Executions” page. Next to every run you see its status: „Success” or „Error”. Select a failed run: the workflow opens, and you see which step got stuck. Invite a family member Everyone works with their own account and sees their own workflows. In the menu on the left, open „Settings”, then the „Users” page. Select „Invite” and type the family member's e-mail address. Select „Create invite link”: the link goes to the clipboard. Send them the link. Through it they set their own name and password. Frequently asked questions Why does the workflow not run by itself? Only a published workflow runs by itself. Check that the header says „Published”; if not, select „Publish”. How do I switch a workflow off? Open it, and in the menu next to the „Publish” button choose „Unpublish”. The workflow stays, it just does not start by itself. Which address do I give a webhook? In the webhook step, the „Production URL” belongs to the published workflow and is reached on auto.tester4.test. The „Test URL” is for trying it out in the editor. A family member forgot their password. What do I do? On the „Users” page, in the menu next to their name, choose „Copy Password Reset Link”, and send them the link. Are the saved sign-in details safe? n8n stores the sign-in details you save for services encrypted, with a key the box made at install time. What is backed up, you see on the dashboard, on n8n's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-hu.txt new file mode 100644 index 00000000..0152f0f4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-guide-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut Naprakész auto.tester4.test Megnyitás ↗ Mire használható? Alkalmazások összekapcsolása vizuális workflow szerkesztővel Automatizálás: email, Telegram, webhook, fájl feldolgozás 400+ integráció (Google, Slack, Notion, GitHub, stb.) Időzített feladatok (cron) és webhook triggerek AI munkafolyamatok LLM integrációval Első lépések Nyisd meg az auto.tester4.test címet a böngészőben Hozd létre az admin fiókot Próbálj ki egy sablon workflow-t a Template galériából Hozd létre az első saját munkafolyamatot Előfeltételek x86 processzor szükséges Első időzített munkafolyamat Egy munkafolyamat egy indítóval kezdődik, utána jönnek a lépések, amelyeket elvégez. Kattints a „Create workflow” (új munkafolyamat) gombra. Kattints az „Add first step…” (első lépés) mezőre, és válaszd az „On a schedule” (időzítve) lehetőséget. A „Trigger Interval” (gyakoriság) mezőben állítsd be, milyen gyakran fusson. Add hozzá a következő lépést a plusz jellel, majd próbáld ki az „Execute workflow” (futtatás) gombbal. Ha jól működik, kattints a „Publish” (közzététel) gombra. Az időzítés csak ezután fut magától. Futások ellenőrzése Az n8n minden futást megjegyez, így utólag is látod, mi történt. A bal oldali menüben nyisd meg az „Executions” (futások) oldalt. Minden futás mellett látod az állapotát: „Success” (sikeres) vagy „Error” (hiba). Kattints egy hibás futásra: megnyílik a munkafolyamat, és látod, melyik lépés akadt el. Családtag meghívása Mindenki a saját fiókjával dolgozik, és a saját munkafolyamatait látja. A bal oldali menüben nyisd meg a „Settings” (beállítások), majd a „Users” (felhasználók) oldalt. Kattints az „Invite” (meghívás) gombra, és írd be a családtag e-mail-címét. Kattints a „Create invite link” (meghívó link) gombra: a link a vágólapra kerül. Küldd el neki a linket. Ezen állít be magának nevet és jelszót. Gyakori kérdések Miért nem fut magától a munkafolyamat? Magától csak a közzétett munkafolyamat fut. Nézd meg, hogy a fejlécben „Published” (közzétéve) áll-e; ha nem, kattints a „Publish” gombra. Hogyan kapcsolok ki egy munkafolyamatot? Nyisd meg, és a „Publish” gomb melletti menüben válaszd az „Unpublish” (visszavonás) pontot. A munkafolyamat megmarad, csak nem indul el magától. Milyen címet adjak meg egy webhooknak? A webhook lépésben a „Production URL” (éles cím) a közzétett munkafolyamathoz tartozik, és az auto.tester4.test címen érhető el. A „Test URL” (tesztcím) a szerkesztőben való kipróbáláshoz kell. Egy családtag elfelejtette a jelszavát. Mit tegyek? A „Users” oldalon a neve melletti menüben válaszd a „Copy Password Reset Link” (jelszó-visszaállító link) pontot, és küldd el neki a linket. Biztonságban vannak a mentett belépési adatok? Az n8n a szolgáltatásokhoz mentett belépési adatokat titkosítva tárolja, a kulcsot a doboz telepítéskor készítette. Azt, hogy mi kerül mentésbe, a vezérlőpulton, az n8n „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-en.txt new file mode 100644 index 00000000..4d0e3982 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-en.txt @@ -0,0 +1 @@ +n8n — Install — Felhom.eu ← Back n8n — Install Workflow automation with a visual editor ~512M RAM Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) n8n (+512 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-hu.txt new file mode 100644 index 00000000..63108d21 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-install-hu.txt @@ -0,0 +1 @@ +n8n — Telepítés — Felhom.eu ← Vissza n8n — Telepítés Workflow automatizálás vizuális szerkesztővel ~512M RAM Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) n8n (+512 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-en.txt new file mode 100644 index 00000000..51b25456 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-en.txt @@ -0,0 +1 @@ +n8n — Settings — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running Up to date auto.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address auto.tester4.test Encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-hu.txt new file mode 100644 index 00000000..83a453c1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/page-overview-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut Naprakész auto.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím auto.tester4.test Titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/record.json b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/record.json new file mode 100644 index 00000000..888cc5ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/record.json @@ -0,0 +1,135 @@ +{ + "app": "n8n", + "sub": "auto", + "fixture": "N8n", + "started": "2026-10-24T18:37:04Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "N8N_ENCRYPTION_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/n8n/install", + "hu_len": 915, + "en_len": 818, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 131, + "front_door": true, + "seconds_to_front_door": 131 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fauto.tester4.test%2F", + "http_port_80": "301 https://auto.tester4.test/", + "guide": { + "path": "/apps/n8n/guide", + "hu_len": 3015, + "en_len": 2551, + "english_words_in_hu": [ + "first", + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/n8n", + "hu_len": 716, + "en_len": 709, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/n8n/guide -> 200 'n8n — Felhom.eu' | shot /root/shots/n8n-after-guide-phone-hu.png hscroll=False", + "goto https://auto.tester4.test/ -> 200 'n8n.io - Workflow Automation' | shot /root/shots/n8n-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"2.22021966s\", \"last_run\": \"2026-10-24T18:40:04.23431025Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 25, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"n8n\", \"started_at\": \"2026-10-24T18:43:38.108856553Z\", \"last\": {\"op\": \"restore\", \"stack\": \"n8n\", \"ok\": true, \"message\": \"A(z) n8n: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:44:02.258384481Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": false, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": false, + "containers": { + "n8n": { + "limit_mib": 1536, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 6, + "sample": [ + "n8n: 2026-10-24T18:43:59.292Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T18:43:59.517Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T18:44:00.271Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T18:44:01.138Z [Rudder] error: Error: ECONNREFUSED" + ] + }, + "mem_peak_mib": { + "n8n": 595.2 + }, + "mem_anon_peak_mib": { + "n8n": 560.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 448 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-front-desktop-hu.png new file mode 100644 index 00000000..592f8bcf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-guide-phone-hu.png new file mode 100644 index 00000000..f7bad7be Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-desktop-en.png new file mode 100644 index 00000000..107efc2c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-phone-hu.png new file mode 100644 index 00000000..0666e417 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/screens/n8n-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/walk.log b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/walk.log new file mode 100644 index 00000000..a7912f6e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-drill-pre/walk.log @@ -0,0 +1,15 @@ +18:37:24Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:39:34Z [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'} +18:39:34Z gate: auto is gated — passed as the household (cookie set) +18:39:34Z [1] installed: deployed 131 s, front door 131 s +18:39:35Z n8n: /rest/owner/setup http=200 +18:39:35Z n8n: READBACK UNUSABLE — a wrong password authenticated +18:40:02Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:40:12Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:40:32Z n8n: login as the seeded owner http=401 ok=False +18:41:07Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack n8n removed'} +18:43:38Z n8n: READBACK UNUSABLE — a wrong password authenticated +18:43:38Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:44:03Z n8n: login as the seeded owner http=401 ok=False +18:44:43Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így +18:44:51Z == n8n done in 448 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-en.txt new file mode 100644 index 00000000..c2b037bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-en.txt @@ -0,0 +1 @@ +n8n — Guide — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running auto.tester4.test Open ↗ What is it for? Wire apps together in a visual workflow editor Automate e-mail, Telegram, webhooks and file handling 400+ integrations (Google, Slack, Notion, GitHub and more) Scheduled jobs (cron) and webhook triggers AI workflows with an LLM in them First steps Open auto.tester4.test in your browser Create the admin account Try a ready-made workflow from the Template gallery Build your first workflow of your own Before you start An x86 processor is needed Your first scheduled workflow A workflow starts with a trigger, followed by the steps it carries out. Select „Create workflow”. Select „Add first step…” and choose „On a schedule”. In „Trigger Interval”, set how often it runs. Add the next step with the plus sign, then try it with „Execute workflow”. When it works, select „Publish”. The schedule only runs by itself after that. Check the runs n8n remembers every run, so you can see afterwards what happened. In the menu on the left, open the „Executions” page. Next to every run you see its status: „Success” or „Error”. Select a failed run: the workflow opens, and you see which step got stuck. Invite a family member Everyone works with their own account and sees their own workflows. In the menu on the left, open „Settings”, then the „Users” page. Select „Invite” and type the family member's e-mail address. Select „Create invite link”: the link goes to the clipboard. Send them the link. Through it they set their own name and password. Frequently asked questions Why does the workflow not run by itself? Only a published workflow runs by itself. Check that the header says „Published”; if not, select „Publish”. How do I switch a workflow off? Open it, and in the menu next to the „Publish” button choose „Unpublish”. The workflow stays, it just does not start by itself. Which address do I give a webhook? In the webhook step, the „Production URL” belongs to the published workflow and is reached on auto.tester4.test. The „Test URL” is for trying it out in the editor. A family member forgot their password. What do I do? On the „Users” page, in the menu next to their name, choose „Copy Password Reset Link”, and send them the link. Are the saved sign-in details safe? n8n stores the sign-in details you save for services encrypted, with a key the box made at install time. What is backed up, you see on the dashboard, on n8n's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-hu.txt new file mode 100644 index 00000000..2691ef21 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-guide-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut auto.tester4.test Megnyitás ↗ Mire használható? Alkalmazások összekapcsolása vizuális workflow szerkesztővel Automatizálás: email, Telegram, webhook, fájl feldolgozás 400+ integráció (Google, Slack, Notion, GitHub, stb.) Időzített feladatok (cron) és webhook triggerek AI munkafolyamatok LLM integrációval Első lépések Nyisd meg az auto.tester4.test címet a böngészőben Hozd létre az admin fiókot Próbálj ki egy sablon workflow-t a Template galériából Hozd létre az első saját munkafolyamatot Előfeltételek x86 processzor szükséges Első időzített munkafolyamat Egy munkafolyamat egy indítóval kezdődik, utána jönnek a lépések, amelyeket elvégez. Kattints a „Create workflow” (új munkafolyamat) gombra. Kattints az „Add first step…” (első lépés) mezőre, és válaszd az „On a schedule” (időzítve) lehetőséget. A „Trigger Interval” (gyakoriság) mezőben állítsd be, milyen gyakran fusson. Add hozzá a következő lépést a plusz jellel, majd próbáld ki az „Execute workflow” (futtatás) gombbal. Ha jól működik, kattints a „Publish” (közzététel) gombra. Az időzítés csak ezután fut magától. Futások ellenőrzése Az n8n minden futást megjegyez, így utólag is látod, mi történt. A bal oldali menüben nyisd meg az „Executions” (futások) oldalt. Minden futás mellett látod az állapotát: „Success” (sikeres) vagy „Error” (hiba). Kattints egy hibás futásra: megnyílik a munkafolyamat, és látod, melyik lépés akadt el. Családtag meghívása Mindenki a saját fiókjával dolgozik, és a saját munkafolyamatait látja. A bal oldali menüben nyisd meg a „Settings” (beállítások), majd a „Users” (felhasználók) oldalt. Kattints az „Invite” (meghívás) gombra, és írd be a családtag e-mail-címét. Kattints a „Create invite link” (meghívó link) gombra: a link a vágólapra kerül. Küldd el neki a linket. Ezen állít be magának nevet és jelszót. Gyakori kérdések Miért nem fut magától a munkafolyamat? Magától csak a közzétett munkafolyamat fut. Nézd meg, hogy a fejlécben „Published” (közzétéve) áll-e; ha nem, kattints a „Publish” gombra. Hogyan kapcsolok ki egy munkafolyamatot? Nyisd meg, és a „Publish” gomb melletti menüben válaszd az „Unpublish” (visszavonás) pontot. A munkafolyamat megmarad, csak nem indul el magától. Milyen címet adjak meg egy webhooknak? A webhook lépésben a „Production URL” (éles cím) a közzétett munkafolyamathoz tartozik, és az auto.tester4.test címen érhető el. A „Test URL” (tesztcím) a szerkesztőben való kipróbáláshoz kell. Egy családtag elfelejtette a jelszavát. Mit tegyek? A „Users” oldalon a neve melletti menüben válaszd a „Copy Password Reset Link” (jelszó-visszaállító link) pontot, és küldd el neki a linket. Biztonságban vannak a mentett belépési adatok? Az n8n a szolgáltatásokhoz mentett belépési adatokat titkosítva tárolja, a kulcsot a doboz telepítéskor készítette. Azt, hogy mi kerül mentésbe, a vezérlőpulton, az n8n „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-en.txt new file mode 100644 index 00000000..4d0e3982 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-en.txt @@ -0,0 +1 @@ +n8n — Install — Felhom.eu ← Back n8n — Install Workflow automation with a visual editor ~512M RAM Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) n8n (+512 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-hu.txt new file mode 100644 index 00000000..63108d21 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-install-hu.txt @@ -0,0 +1 @@ +n8n — Telepítés — Felhom.eu ← Vissza n8n — Telepítés Workflow automatizálás vizuális szerkesztővel ~512M RAM Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) n8n (+512 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-en.txt new file mode 100644 index 00000000..fecae6dd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-en.txt @@ -0,0 +1 @@ +n8n — Settings — Felhom.eu ← Apps n8n Visual workflow automation - a Zapier/IFTTT alternative ● Running auto.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address auto.tester4.test Encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-hu.txt new file mode 100644 index 00000000..d1251cab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/page-overview-hu.txt @@ -0,0 +1 @@ +n8n — Felhom.eu ← Alkalmazások n8n Vizuális workflow automatizálás - Zapier/IFTTT alternatíva ● Fut auto.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím auto.tester4.test Titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/record.json new file mode 100644 index 00000000..ea6ca0b6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/record.json @@ -0,0 +1,134 @@ +{ + "app": "n8n", + "sub": "auto", + "fixture": "N8n", + "started": "2026-10-24T21:18:50Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "N8N_ENCRYPTION_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/n8n/install", + "hu_len": 915, + "en_len": 818, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/n8n/install -> 200 'n8n — Telepítés — Felhom.eu' | shot /root/shots/n8n-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 146, + "front_door": true, + "seconds_to_front_door": 151 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fauto.tester4.test%2F", + "http_port_80": "301 https://auto.tester4.test/", + "guide": { + "path": "/apps/n8n/guide", + "hu_len": 3005, + "en_len": 2540, + "english_words_in_hu": [ + "first", + "password", + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/n8n", + "hu_len": 706, + "en_len": 698, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/n8n/guide -> 200 'n8n — Felhom.eu' | shot /root/shots/n8n-after-guide-phone-hu.png hscroll=False", + "goto https://auto.tester4.test/ -> 200 'n8n.io - Workflow Automation' | shot /root/shots/n8n-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.829664688s\", \"last_run\": \"2026-10-24T21:22:10.15713674Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"n8n\", \"started_at\": \"2026-10-24T21:25:24.994906684Z\", \"last\": {\"op\": \"restore\", \"stack\": \"n8n\", \"ok\": true, \"message\": \"A(z) n8n: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T21:25:44.50436886Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "n8n": { + "limit_mib": 1536, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 6, + "sample": [ + "n8n: 2026-10-24T21:25:45.015Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T21:25:45.232Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T21:25:45.715Z [Rudder] error: Response error code: ECONNREFUSED", + "n8n: 2026-10-24T21:25:46.714Z [Rudder] error: Error: ECONNREFUSED" + ] + }, + "mem_peak_mib": { + "n8n": 562.4 + }, + "mem_anon_peak_mib": { + "n8n": 550.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 447 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/box-login-1-launcher-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/box-login-1-launcher-phone-hu.png new file mode 100644 index 00000000..3a40141a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/box-login-1-launcher-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-front-desktop-hu.png new file mode 100644 index 00000000..50731923 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-guide-phone-hu.png new file mode 100644 index 00000000..52c5e5a3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-desktop-en.png new file mode 100644 index 00000000..107efc2c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-phone-hu.png new file mode 100644 index 00000000..0666e417 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/screens/n8n-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/walk.log new file mode 100644 index 00000000..20a6cf39 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/run-live-2/walk.log @@ -0,0 +1,15 @@ +21:19:10Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:21:36Z [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'} +21:21:36Z gate: auto is gated — passed as the household (cookie set) +21:21:41Z [1] installed: deployed 146 s, front door 151 s +21:21:42Z n8n: /rest/owner/setup http=200 +21:21:42Z gate: auto is gated — passed as the household (cookie set) +21:21:42Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:21:26.630Z","id":"bb7253ba-9f5f-4a1b-826b-8d698ed2f3f8","email":"drill-796c2a52@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:22:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:22:55Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack n8n removed'} +21:25:24Z gate: auto is gated — passed as the household (cookie set) +21:25:24Z n8n: READBACK UNUSABLE — a wrong password authenticated :: n8n is starting up. Please wait +21:25:24Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:25:46Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:21:26.630Z","id":"bb7253ba-9f5f-4a1b-826b-8d698ed2f3f8","email":"drill-796c2a52@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:26:27Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így +21:26:37Z == n8n done in 447 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/box-login-1-launcher-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/box-login-1-launcher-phone-hu.png new file mode 100644 index 00000000..3a40141a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/box-login-1-launcher-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-front-desktop-hu.png new file mode 100644 index 00000000..50731923 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-guide-phone-hu.png new file mode 100644 index 00000000..52c5e5a3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-desktop-en.png new file mode 100644 index 00000000..107efc2c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-phone-hu.png new file mode 100644 index 00000000..0666e417 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/n8n/screens/n8n-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/n8n/walk.log b/documentation/audits/catalog-sweep-2026-10-24/n8n/walk.log new file mode 100644 index 00000000..7cd447a7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/n8n/walk.log @@ -0,0 +1,15 @@ +21:35:47Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:38:12Z [1] deployed, controller state=running, pinned={'n8n': 'n8nio/n8n:2.42.1'} +21:38:12Z gate: auto is gated — passed as the household (cookie set) +21:38:18Z [1] installed: deployed 146 s, front door 151 s +21:38:18Z n8n: /rest/owner/setup http=200 +21:38:18Z gate: auto is gated — passed as the household (cookie set) +21:38:18Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:38:04.622Z","id":"786c81cb-d999-4813-9240-129648fbd331","email":"drill-c8f274da@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:38:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:39:31Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack n8n removed'} +21:41:56Z gate: auto is gated — passed as the household (cookie set) +21:41:56Z n8n: READBACK UNUSABLE — a wrong password authenticated :: n8n is starting up. Please wait +21:41:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:42:16Z n8n: login as the seeded owner http=200 ok=True :: {"data":{"createdAt":"2026-10-24T21:38:04.622Z","id":"786c81cb-d999-4813-9240-129648fbd331","email":"drill-c8f274da@gate.invalid","firstName":"drill","lastName":"drill","personalizationAnswers":null," +21:42:56Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'n8n', 'volumes_removed': ['n8n_n8n_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtón, így +21:43:05Z == n8n done in 439 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome.console.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome.console.txt new file mode 100644 index 00000000..ce1ffbd4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome.console.txt @@ -0,0 +1,15 @@ +13:25:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +13:25:00Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:25:25Z [1] deployed, controller state=running, pinned={'navidrome': 'deluan/navidrome:0.64.2'} +13:25:25Z gate: music is gated — passed as the household (cookie set) +13:25:25Z [1] installed: deployed 25 s, front door 25 s +13:25:26Z navidrome: createAdmin http=200 +13:25:26Z navidrome: login as the seeded user http=200 ok=True +13:25:44Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:26:27Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'navidrome', 'volumes_removed': ['navidrome_navidrome_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/ +13:26:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +13:26:56Z navidrome: login as the seeded user http=401 ok=False +13:26:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:27:11Z navidrome: login as the seeded user http=200 ok=True +13:27:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'navidrome', 'volumes_removed': ['navidrome_navidrome_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/ +13:27:59Z == navidrome done in 179 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-en.txt new file mode 100644 index 00000000..3edee7ee --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-en.txt @@ -0,0 +1 @@ +Navidrome — Guide — Felhom.eu ← Apps Navidrome A light music server - stream your own music collection ● Running music.tester4.test Open ↗ What is it for? Stream your own music collection to any device Use any Subsonic-compatible phone app Playlists, favourites and ratings Details and cover art arrive on their own Several people, each with their own library and settings First steps Open music.tester4.test in your browser The first user becomes the admin automatically Create your account and wait for the first scan Install a Subsonic-compatible app (Subtracks or play:Sub, for example) Give it the server address: https://music.tester4.test Before you start An external hard drive is needed to keep the music files on Music files sorted into folders (Artist/Album/track.flac, for example) Add your music Navidrome reads music from the media/music folder of the drive you chose at install. Open the File manager and go to the media/music folder of that drive. Upload one folder per album there, for example as Artist/Album. Wait a little: Navidrome reads the new files by itself within an hour at most. New albums show up in the „Recently Added” list of the „Albums” menu on the left. Make a playlist You can collect your favourite songs into your own list, and the phone app sees it too. Open an album and select „Add to Playlist”. Type a name for the new list and press Enter. Select „Add”. Your lists are under „Playlists” in the menu on the left. Add a family member Everyone gets their own account, so favourites and lists stay separate. Select the profile icon at the top right and open the list of users. Select „Create”. Fill in the „Username”, „Name” and „Password” fields. Leave „Is Admin” switched off and select „Save”. Share an album with a link You can share an album even with someone who has no account. Open the album and select „Share”. You can write a short note in the „Description” field. Select „Share”: the link goes to your clipboard. Send the link to the person you want to share with. Frequently asked questions Can I switch Navidrome to Hungarian? Yes: under the profile icon at the top right, open the „Personal” page and choose Hungarian in the „Language” field. This guide uses the English menu names. Does the phone app work away from home? Yes: the music.tester4.test address works away from home too. Sign in with the same username and password as in the browser. I uploaded an album but I cannot see it. What do I do? Check that the files are in the media/music folder of the drive you chose at install. Navidrome reads the folder every hour and takes the artist and title from the details written into the files. Can I delete music from Navidrome? No: Navidrome only reads the music folder. You delete in the File manager. Is my music backed up? The box makes no backup of the media/music folder, so keep the original files somewhere else too. The „Data and backup” tab shows the backup of Navidrome's own data. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-hu.txt new file mode 100644 index 00000000..65a54db2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-guide-hu.txt @@ -0,0 +1 @@ +Navidrome — Felhom.eu ← Alkalmazások Navidrome Könnyű zene szerver - streameld a saját zenegyűjteményedet ● Fut music.tester4.test Megnyitás ↗ Mire használható? Saját zenegyűjtemény streamelése bármilyen eszközről Subsonic API kompatibilis mobil alkalmazások használata Lejátszási listák, kedvencek és értékelések kezelése Automatikus metaadat és borítókép letöltés Több felhasználó külön könyvtárral és beállításokkal Első lépések Nyisd meg a music.tester4.test címet a böngészőben Az első felhasználó automatikusan admin lesz Hozd létre a fiókodat és várd meg az első szkennelést Telepíts Subsonic-kompatibilis alkalmazást (pl. Subtracks, play:Sub) Add meg a szerver címet: https://music.tester4.test Előfeltételek Külső HDD szükséges a zenefájlok tárolásához Zenefájlok mappákba rendezve (pl. Előadó/Album/szám.flac) Zene feltöltése A Navidrome annak a meghajtónak a media/music mappájából olvassa a zenét, amelyet telepítéskor választottál. Nyisd meg a Fájlkezelőt, és lépj ennek a meghajtónak a media/music mappájába. Tölts fel ide albumonként egy mappát, például Előadó/Album szerkezetben. Várj egy kicsit: a Navidrome legkésőbb egy órán belül magától beolvassa az új fájlokat. Az új albumok a bal oldali „Albums” (Albumok) menü „Recently Added” (Nemrég hozzáadott) listájában jelennek meg. Lejátszási lista készítése A kedvenc számaidat saját listába gyűjtheted, és a telefonos app is látja ezeket. Nyiss meg egy albumot, és kattints az „Add to Playlist” (Hozzáadás listához) gombra. Írd be az új lista nevét, és nyomd meg az Enter billentyűt. Kattints az „Add” (Hozzáadás) gombra. A listáidat a bal oldali menüben, a „Playlists” (Lejátszási listák) alatt találod. Családtag hozzáadása Mindenki saját fiókot kap, így a kedvencek és a listák külön maradnak. Kattints jobb felül a profil ikonra, és nyisd meg a felhasználók listáját. Kattints a „Create” (Létrehozás) gombra. Töltsd ki a „Username” (felhasználónév), a „Name” (név) és a „Password” (jelszó) mezőt. Az „Is Admin” (adminisztrátor) kapcsolót hagyd kikapcsolva, és kattints a „Save” (Mentés) gombra. Album megosztása linkkel Egy albumot olyannal is megoszthatsz, akinek nincs fiókja. Nyisd meg az albumot, és kattints a „Share” (Megosztás) gombra. A „Description” (leírás) mezőbe írhatsz egy rövid megjegyzést. Kattints a „Share” gombra: a link a vágólapra kerül. Küldd el a linket annak, akivel meg akarod osztani. Gyakori kérdések Átállíthatom magyarra a Navidrome-ot? Igen: jobb felül a profil ikon alatt nyisd meg a „Personal” (Személyes) oldalt, és a „Language” (Nyelv) mezőben válaszd a magyart. Ez az útmutató az angol menüneveket használja. Működik a telefonos app otthonon kívül is? Igen: a music.tester4.test cím otthonon kívül is működik. Ugyanazzal a felhasználónévvel és jelszóval lépj be, mint a böngészőben. Feltöltöttem egy albumot, de nem látom. Mit tegyek? Nézd meg, hogy a fájlok a telepítéskor választott meghajtó media/music mappájában vannak-e. A Navidrome óránként beolvassa a mappát, és a fájlokba írt adatokból veszi az előadót és a címet. Törölhetek zenét a Navidrome-ból? Nem: a Navidrome csak olvassa a zenemappát. Törölni a Fájlkezelőben tudsz. Készül mentés a zenémről? A media/music mappáról a doboz nem készít mentést, ezért az eredeti fájlokat őrizd meg máshol is. A Navidrome saját adatainak mentését az „Adatok és mentés” fül mutatja. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-en.txt new file mode 100644 index 00000000..85f47eb4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-en.txt @@ -0,0 +1 @@ +Navidrome — Install — Felhom.eu ← Back Navidrome — Install A light music server with Subsonic API support ~50M RAM Needs a hard drive Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Navidrome (+50 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Music collection path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the music files are kept Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-hu.txt new file mode 100644 index 00000000..f7ec9f8a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-install-hu.txt @@ -0,0 +1 @@ +Navidrome — Telepítés — Felhom.eu ← Vissza Navidrome — Telepítés Könnyű zene szerver Subsonic API támogatással ~50M RAM HDD szükséges Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Navidrome (+50 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Zenegyűjtemény útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a zenefájlok tárolódnak Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-en.txt new file mode 100644 index 00000000..5d0b4833 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-en.txt @@ -0,0 +1 @@ +Navidrome — Settings — Felhom.eu ← Apps Navidrome A light music server - stream your own music collection ● Running music.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address music.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-hu.txt new file mode 100644 index 00000000..e2510d99 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/page-overview-hu.txt @@ -0,0 +1 @@ +Navidrome — Felhom.eu ← Alkalmazások Navidrome Könnyű zene szerver - streameld a saját zenegyűjteményedet ● Fut music.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím music.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/record.json b/documentation/audits/catalog-sweep-2026-10-24/navidrome/record.json new file mode 100644 index 00000000..b9aaf130 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/record.json @@ -0,0 +1,124 @@ +{ + "app": "navidrome", + "sub": "music", + "fixture": "Navidrome", + "started": "2026-10-24T13:24:45Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/navidrome/install", + "hu_len": 1243, + "en_len": 1130, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/navidrome/install -> 200 'Navidrome — Telepítés — Felhom.eu' | shot /root/shots/navidrome-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/navidrome/install -> 200 'Navidrome — Telepítés — Felhom.eu' | shot /root/shots/navidrome-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fmusic.tester4.test%2F", + "http_port_80": "301 https://music.tester4.test/", + "guide": { + "path": "/apps/navidrome/guide", + "hu_len": 3373, + "en_len": 2989, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/navidrome", + "hu_len": 741, + "en_len": 748, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/navidrome/guide -> 200 'Navidrome — Felhom.eu' | shot /root/shots/navidrome-after-guide-phone-hu.png hscroll=False", + "goto https://music.tester4.test/app/#/login -> 200 'Navidrome' | shot /root/shots/navidrome-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.272098227s\", \"last_run\": \"2026-10-24T13:25:46.080929768Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"navidrome\", \"started_at\": \"2026-10-24T13:26:56.487421254Z\", \"last\": {\"op\": \"restore\", \"stack\": \"navidrome\", \"ok\": true, \"message\": \"A(z) navidrome: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:27:06.765891237Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "navidrome": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "navidrome": 23.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 179 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-front-desktop-hu.png new file mode 100644 index 00000000..a84b5ea3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-guide-phone-hu.png new file mode 100644 index 00000000..5cc3e94d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-desktop-en.png new file mode 100644 index 00000000..6083ad91 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-phone-hu.png new file mode 100644 index 00000000..38da6b64 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/navidrome/screens/navidrome-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/navidrome/walk.log b/documentation/audits/catalog-sweep-2026-10-24/navidrome/walk.log new file mode 100644 index 00000000..ce1ffbd4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/navidrome/walk.log @@ -0,0 +1,15 @@ +13:25:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +13:25:00Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:25:25Z [1] deployed, controller state=running, pinned={'navidrome': 'deluan/navidrome:0.64.2'} +13:25:25Z gate: music is gated — passed as the household (cookie set) +13:25:25Z [1] installed: deployed 25 s, front door 25 s +13:25:26Z navidrome: createAdmin http=200 +13:25:26Z navidrome: login as the seeded user http=200 ok=True +13:25:44Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:26:27Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'navidrome', 'volumes_removed': ['navidrome_navidrome_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/ +13:26:36Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +13:26:56Z navidrome: login as the seeded user http=401 ok=False +13:26:56Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:27:11Z navidrome: login as the seeded user http=200 ok=True +13:27:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'navidrome', 'volumes_removed': ['navidrome_navidrome_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/ +13:27:59Z == navidrome done in 179 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud.console.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud.console.txt new file mode 100644 index 00000000..b13da464 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud.console.txt @@ -0,0 +1,17 @@ +19:11:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:11:11Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:13:12Z [1] deployed, controller state=running, pinned={'nextcloud': 'nextcloud:34.0.4-apache', 'nextcloud-db': 'mariadb:12.3', 'nextcloud-redis': 'redis:7-alpine'} +19:13:13Z [1] installed: deployed 121 s, front door 122 s +19:13:22Z nextcloud: occ user:add :: The account "drillf4584b" was created successfully Display name set to "drillf4584b" +19:13:26Z nextcloud: seeded user drillf4584b +19:13:33Z nextcloud: readback of the seeded user found=True +19:14:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:15:01Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'nextcloud', 'volumes_removed': ['nextcloud_nextcloud_db_data', 'nextcloud_nextcloud_html'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1 +19:15:09Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:15:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:15:13Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Nextcloud megőrzött adatainak betöltése elindult.'} +19:16:23Z [1] deployed, controller state=running, pinned={'nextcloud': 'nextcloud:34.0.4-apache', 'nextcloud-db': 'mariadb:12.3', 'nextcloud-redis': 'redis:7-alpine'} +19:17:22Z nextcloud: readback of the seeded user found=False +19:17:22Z nextcloud: :: user not found +19:18:03Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'nextcloud', 'volumes_removed': ['nextcloud_nextcloud_db_data', 'nextcloud_nextcloud_html'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/nextcloud (64M)'], +19:18:12Z == nextcloud done in 420 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-en.txt new file mode 100644 index 00000000..10cb5d28 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-en.txt @@ -0,0 +1 @@ +Nextcloud — Guide — Felhom.eu ← Apps Nextcloud Your own Google Drive - files, calendar and contacts in one place ● Running cloud.tester4.test Open ↗ What is it for? Sync and share files between your devices Calendar and contact sync (CalDAV/CardDAV) Work on a document together (with the OnlyOffice integration) Photos and videos upload themselves from your phone An app store - more features when you want them (Notes, Tasks, Forms and more) First steps Open cloud.tester4.test in your browser Sign in with the admin account you set at install time Install the Nextcloud desktop app on your computer Install the Nextcloud mobile app on your phone Invite the household by creating an account for each of them Before you start An external hard drive is needed to keep the files on At least 1 GB of free RAM (Nextcloud + MariaDB + Redis) An x86 processor is recommended for the best speed Upload files from the browser Your files are in the „Files” app, sorted into folders. In the top bar, select „Files”. Open the folder you want the file in. Drag the files from your computer onto the file list: they upload into this folder. For things you use often, choose „Add to favorites” in the file's menu to put them under „Favorites”. Share with a family member A shared file or folder also shows up in the family member's own account. Select the share icon in the row of the file or folder. Under „Internal shares”, type the family member's name and pick it. Choose „View only” or „Allow editing”. Select „Save share”. Send a link to someone without an account A link lets someone who has no account on your box open the file too. Select the share icon in the row of the file. Under „External shares”, select „Create a new share link”. Nextcloud copies the link to the clipboard: paste it into an e-mail or a message. A deleted file and an older version A deleted file does not vanish at once, and earlier versions of a changed file are kept for a while too. In the menu on the left, open „Deleted files”. Find the file and select „Restore” in its menu. For an older version of a file, choose „Details” in the file's menu, then the „Versions” tab. At the version you want, select „Restore version”. Frequently asked questions How long are deleted files kept? At least 30 days, under „Deleted files”. After that, Nextcloud deletes them by itself when it needs the space. Why is the Hungarian Nextcloud so formal? Nextcloud's Hungarian translation uses the formal form of address. The labels mean the same. How do I change my password? Select your profile picture in the top right corner, then „Personal settings” (for a family member: „Settings”). On the „Security” page, enter the old and the new password and select „Change password”. Is there a calendar and an address book? They are not installed by default. With the admin account, you can install them on the „Apps” page in the profile picture menu. Where are my files, and are they backed up? On the drive you chose at install time. For their backup, look at the „Data and backup” tab of Nextcloud. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-hu.txt new file mode 100644 index 00000000..dd7ba024 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-guide-hu.txt @@ -0,0 +1 @@ +Nextcloud — Felhom.eu ← Alkalmazások Nextcloud A saját Google Drive-od - fájlok, naptár, névjegyek egy helyen ● Fut cloud.tester4.test Megnyitás ↗ Mire használható? Fájlok szinkronizálása és megosztása eszközök között Naptár és névjegyek szinkronizálás (CalDAV/CardDAV) Dokumentumok közös szerkesztése (OnlyOffice integrációval) Fotó és videó automatikus feltöltés telefonról Alkalmazásbolt - kibővíthető funkciók (Notes, Tasks, Forms, stb.) Első lépések Nyisd meg a cloud.tester4.test címet a böngészőben Jelentkezz be a telepítéskor megadott admin fiókkal Telepítsd a Nextcloud asztali alkalmazást a számítógépedre Telepítsd a Nextcloud mobil alkalmazást a telefonodra Hívd meg a családtagokat felhasználói fiókok létrehozásával Előfeltételek Külső HDD szükséges a fájlok tárolásához Legalább 1 GB szabad RAM (Nextcloud + MariaDB + Redis) x86 processzor ajánlott a legjobb teljesítményhez Fájlok feltöltése a böngészőből A fájljaid a „Fájlok” alkalmazásban vannak, mappákba rendezve. A felső sávban kattints a „Fájlok” pontra. Nyisd meg azt a mappát, ahová a fájlt szánod. Húzd a fájlokat a számítógépedről a fájllistára: ebbe a mappába töltődnek fel. Amit sokszor használsz, azt a fájl menüjében a „Hozzáadás a kedvencekhez” ponttal a „Kedvencek” közé teheted. Megosztás egy családtaggal A megosztott fájl vagy mappa a családtag saját fiókjában is megjelenik. Kattints a fájl vagy a mappa sorában a megosztás ikonjára. A „Belső megosztások” résznél írd be a családtag nevét, és válaszd ki. Válaszd a „Csak megtekintés” vagy a „Szerkesztés engedélyezése” lehetőséget. Kattints a „Megosztás mentése” gombra. Hivatkozás küldése fiók nélküli ismerősnek A hivatkozással olyan is megnyithatja a fájlt, akinek nincs fiókja a dobozodon. Kattints a fájl sorában a megosztás ikonjára. A „Külső megosztások” résznél kattints az „Új megosztási hivatkozás létrehozása” gombra. A Nextcloud a hivatkozást a vágólapra másolja: illeszd be egy levélbe vagy üzenetbe. Törölt fájl és régebbi változat A törölt fájl nem tűnik el azonnal, és a módosított fájl korábbi változatai is megmaradnak egy ideig. A bal oldali menüben nyisd meg a „Törölt fájlok” részt. Keresd meg a fájlt, és a menüjében kattints a „Visszaállítás” pontra. Egy fájl régebbi változatához a fájl menüjében válaszd a „Részletek” pontot, majd a „Verziók” lapot. A kívánt változatnál kattints a „Verzió helyreállítása” pontra. Gyakori kérdések Meddig maradnak meg a törölt fájlok? Legalább 30 napig a „Törölt fájlok” között. Utána a Nextcloud magától törli őket, ha helyre van szüksége. Miért magáz a Nextcloud? A Nextcloud magyar fordítása magázó formát használ. A feliratok jelentése ugyanaz. Hogyan változtatom meg a jelszavam? Kattints a jobb felső sarokban a profilképedre, majd a „Személyes beállítások” pontra (családtagnál: „Beállítások”). A „Biztonság” oldalon add meg a régi és az új jelszót, és kattints a „Jelszó módosítása” gombra. Van naptár és névjegyzék? Alapból nincs telepítve. Az admin fiókkal a profilkép menüjében az „Alkalmazások” oldalon telepítheted őket. Hol vannak a fájljaim, és van róluk mentés? A meghajtódon, amelyet telepítéskor választottál. A mentésükről a Nextcloud „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-en.txt new file mode 100644 index 00000000..36d6c7eb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-en.txt @@ -0,0 +1 @@ +Nextcloud — Install — Felhom.eu ← Back Nextcloud — Install Your own cloud storage - a Google Drive/Dropbox alternative ~350M RAM Needs a hard drive Full description, screenshots Memory 350 MB / 7479 MB (4%) Current usage (0 MB) Nextcloud (+350 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show MariaDB root password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin user name cannot be changed after install Admin password * 👁 Generate For the first sign-in. You can change it in the app afterwards. Data storage path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-hu.txt new file mode 100644 index 00000000..ffd154a1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-install-hu.txt @@ -0,0 +1 @@ +Nextcloud — Telepítés — Felhom.eu ← Vissza Nextcloud — Telepítés Saját felhő tárhely - Google Drive/Dropbox alternatíva ~350M RAM HDD szükséges Részletes leírás, képernyőképek Memória 350 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Nextcloud (+350 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés MariaDB root jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin felhasználónév telepítés után nem módosítható Admin jelszó * 👁 Generálás Első bejelentkezéshez. Utána a webes felületen módosítható. Adattárolási útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-en.txt new file mode 100644 index 00000000..407939e1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-en.txt @@ -0,0 +1 @@ +Nextcloud — Settings — Felhom.eu ← Apps Nextcloud Your own Google Drive - files, calendar and contacts in one place ● Running cloud.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin user name Admin password Show Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: nextcloud@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address cloud.tester4.test Storage Külső tárhely (hdd_1) Database password Show MariaDB root password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-hu.txt new file mode 100644 index 00000000..3cdf6696 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/page-overview-hu.txt @@ -0,0 +1 @@ +Nextcloud — Felhom.eu ← Alkalmazások Nextcloud A saját Google Drive-od - fájlok, naptár, névjegyek egy helyen ● Fut cloud.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin felhasználónév Admin jelszó Megjelenítés Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: nextcloud@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím cloud.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés MariaDB root jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/record.json b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/record.json new file mode 100644 index 00000000..622b397f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/record.json @@ -0,0 +1,151 @@ +{ + "app": "nextcloud", + "sub": "cloud", + "fixture": "Nextcloud", + "started": "2026-10-24T19:10:52Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "MYSQL_ROOT_PASSWORD", + "secret", + false + ], + [ + "NEXTCLOUD_ADMIN_USER", + "text", + false + ], + [ + "NEXTCLOUD_ADMIN_PASSWORD", + "password", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/nextcloud/install", + "hu_len": 1473, + "en_len": 1349, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/nextcloud/install -> 200 'Nextcloud — Telepítés — Felhom.eu' | shot /root/shots/nextcloud-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/nextcloud/install -> 200 'Nextcloud — Telepítés — Felhom.eu' | shot /root/shots/nextcloud-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 121, + "front_door": true, + "seconds_to_front_door": 122 + }, + "stranger": "302 https://cloud.tester4.test/login", + "http_port_80": "301 https://cloud.tester4.test/", + "guide": { + "path": "/apps/nextcloud/guide", + "hu_len": 3228, + "en_len": 3088, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/nextcloud", + "hu_len": 917, + "en_len": 853, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/nextcloud/guide -> 200 'Nextcloud — Felhom.eu' | shot /root/shots/nextcloud-after-guide-phone-hu.png hscroll=False", + "goto https://cloud.tester4.test/login -> 200 'Bejelentkezés – Nextcloud' | shot /root/shots/nextcloud-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 25, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"20.55906324s\", \"last_run\": \"2026-10-24T19:14:21.990001252Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/nextcloud", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "409", + "body": "{\"ok\": false, \"data\": {\"code\": \"kept_data_choice\", \"title\": \"Ennek az alkalmazásnak megvannak a régi adatai\", \"body\": \"A(z) Nextcloud korábbi adatai (62.9 MB, 2026-10-24) még a lemezen vannak. Mit csináljunk velük?\", \"use_label\": \"A megőrzött adataimat használom\", \"use_desc\": \"Az adatbázist innen töltjük vissza: távoli mentés, 2026-10-28 07:39. A régi fájlokkal indítjuk az alkalmazást. Ami ezután változott, hiányozhat.\", \"use_off\": \"\", \"use_offered\": true, \"fresh_label\": \"Tiszta lappal kezdem\", \"fresh_desc\": \"A régi adatok egy mai dátummal jelölt mappába kerülnek. Nem törlünk semmit.\", \"not_backed_up\": \"Erről nem készül mentés.\"}, \"error\": \"Ennek az alkalmazásnak megvannak a régi adatai\"}" + }, + "kept": { + "offered": true, + "use_ok": true + }, + "seed_read_after_reinstall": false, + "containers": { + "nextcloud": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "nextcloud-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "nextcloud-db": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "nextcloud-db": 168.7, + "nextcloud-redis": 3.7, + "nextcloud": 155.0 + }, + "mem_anon_peak_mib": { + "nextcloud-db": 161.8, + "nextcloud-redis": 2.8, + "nextcloud": 133.3 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 420 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-front-desktop-hu.png new file mode 100644 index 00000000..90626495 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-guide-phone-hu.png new file mode 100644 index 00000000..c8ad3cf4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-desktop-en.png new file mode 100644 index 00000000..dc90a9f4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-phone-hu.png new file mode 100644 index 00000000..24d86918 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/screens/nextcloud-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nextcloud/walk.log b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/walk.log new file mode 100644 index 00000000..b13da464 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nextcloud/walk.log @@ -0,0 +1,17 @@ +19:11:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:11:11Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:13:12Z [1] deployed, controller state=running, pinned={'nextcloud': 'nextcloud:34.0.4-apache', 'nextcloud-db': 'mariadb:12.3', 'nextcloud-redis': 'redis:7-alpine'} +19:13:13Z [1] installed: deployed 121 s, front door 122 s +19:13:22Z nextcloud: occ user:add :: The account "drillf4584b" was created successfully Display name set to "drillf4584b" +19:13:26Z nextcloud: seeded user drillf4584b +19:13:33Z nextcloud: readback of the seeded user found=True +19:14:01Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:15:01Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'nextcloud', 'volumes_removed': ['nextcloud_nextcloud_db_data', 'nextcloud_nextcloud_html'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1 +19:15:09Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:15:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NEXTCLOUD_ADMIN_PASSWORD', 'HDD_PATH'] +19:15:13Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Nextcloud megőrzött adatainak betöltése elindult.'} +19:16:23Z [1] deployed, controller state=running, pinned={'nextcloud': 'nextcloud:34.0.4-apache', 'nextcloud-db': 'mariadb:12.3', 'nextcloud-redis': 'redis:7-alpine'} +19:17:22Z nextcloud: readback of the seeded user found=False +19:17:22Z nextcloud: :: user not found +19:18:03Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'nextcloud', 'volumes_removed': ['nextcloud_nextcloud_db_data', 'nextcloud_nextcloud_html'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/nextcloud (64M)'], +19:18:12Z == nextcloud done in 420 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget.console.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget.console.txt new file mode 100644 index 00000000..ee7873ff --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget.console.txt @@ -0,0 +1,16 @@ +14:24:41Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'NZB_ADMIN_PASSWORD'] +14:24:41Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:25:07Z [1] deployed, controller state=running, pinned={'nzbget': 'nzbgetcom/nzbget:v26.3'} +14:25:07Z [1] installed: deployed 25 s, front door 25 s +14:25:07Z nzbget: append felhom454c5355 http=200 ok=True +14:25:07Z nzbget: the queued job is present=True +14:25:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:25:30Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:25:46Z nzbget: the queued job is present=True +14:26:18Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'nzbget', 'volumes_removed': ['nzbget_nzbget_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/n +14:26:27Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NZB_ADMIN_PASSWORD', 'HDD_PATH'] +14:26:42Z nzbget: the queued job is present=False +14:26:42Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:26:57Z nzbget: the queued job is present=True +14:27:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'nzbget', 'volumes_removed': ['nzbget_nzbget_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/n +14:27:45Z == nzbget done in 184 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-en.txt new file mode 100644 index 00000000..cd72e7c7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-en.txt @@ -0,0 +1 @@ +NZBGet — Guide — Felhom.eu ← Apps NZBGet Simple Usenet downloading, on almost no resources ● Running nzbget.tester4.test Open ↗ Files ↗ What is it for? Download NZB files to your own drive, with the repair and unpacking that follows Radarr, Sonarr and Jellyseerr can hand the job to it: this is the Usenet-side downloader You see the finished files in the file browser and in your media player It uses very little: it fits on a small machine beside everything else. If you want the full interface, SABnzbd is the stronger choice First steps Open nzbget.tester4.test and sign in as admin with the password generated at install Enter your Usenet provider under Settings / News-Servers (server, port, username, password). Without it nothing will download Finished downloads land on your drive, in the media/nzbget/completed folder Download only what you have the right to Before you start IT NEEDS A PAID USENET SERVICE, which you bring yourself: the content lives on the provider's servers and reaching it is a subscription. Without one the app starts and you can sign in, but nothing will download NZB files, or an indexer service, are yours to add too - the app contains neither It needs no inbound port: Usenet downloading makes outgoing connections only, so the box's closed ports cost you nothing here Add an NZB file The NZB file tells NZBGet what to download from your Usenet provider. On the „Downloads” tab, select „Add”. Select „Select files” and choose the NZB file on your computer. You can also drag it into the window. Select „Submit”. The download appears in the list on the „Downloads” tab. Find finished downloads After a download, NZBGet checks, repairs and unpacks the files by itself. You see finished downloads on the „History” tab. If a download failed, the „Failure” filter on the „History” tab shows it. On the Felhom dashboard, the „Where do I put my files?” part of NZBGet's „Data and backup” tab opens the downloads folder in the File manager. Slow down or pause If your home internet gets slow, you can limit or stop the download. Select the speed display at the top: the „Speed Limit” window opens. Type the limit in KB/s and select „Set limit”. To pause, select the play button in the header. In the menu of the arrow next to that button, under „Pause for...”, you can also pause for a set time. When nothing downloads NZBGet itself writes down what is wrong. Open the „Messages” tab and select the „Error” filter. If it says there is no news server, enter your provider in the „News-Servers” part of the „Settings” tab. If the provider refuses the sign-in, check the username and password there. Frequently asked questions Where do I get NZB files? That is your choice: the box neither provides nor suggests a source. Download only what you have the right to, for example a Linux installer. Does the box connect it to Sonarr and Radarr? No: the box connects Sonarr and Radarr to the torrent download clients only. NZBGet works on its own with the NZB files you add. Where do I see the sign-in password? On the Felhom dashboard, on NZBGet's „Settings” tab. The username is admin. I want the interface in another language. Can I change it? NZBGet follows your browser's language. In the menu of the settings button at the top right, you can choose another language under „Language”. Does the download stop if I close the page? No: the download runs on the box, so you can close the page. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-hu.txt new file mode 100644 index 00000000..05afca8a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-guide-hu.txt @@ -0,0 +1 @@ +NZBGet — Felhom.eu ← Alkalmazások NZBGet Usenet letöltés egyszerűen, alig észrevehető erőforrásból ● Fut nzbget.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? NZB fájlok letöltése a saját meghajtódra, a letöltés utáni kicsomagolással és javítással együtt A Radarr, a Sonarr és a Jellyseerr ide adhatja le a munkát: ez a Usenet oldali letöltő A kész fájlokat a fájlböngészőben és a médialejátszódban is látod Nagyon keveset fogyaszt: kisebb gépen is elfér a többi alkalmazás mellett. Ha a teljes felületet szeretnéd, a SABnzbd az erősebb választás Első lépések Nyisd meg az nzbget.tester4.test címet, és lépj be az admin névvel és a telepítéskor kapott jelszóval Add meg a Usenet szolgáltatód adatait a Settings / News-Servers oldalon (szerver, port, felhasználónév, jelszó). Enélkül a letöltés nem indul el A kész letöltések a meghajtódon, a media/nzbget/completed mappába kerülnek Csak olyan tartalmat tölts le, amihez jogod van Előfeltételek FIZETŐS USENET SZOLGÁLTATÁS KELL hozzá, amit neked kell hoznod: a tartalom a szolgáltató szerverein van, és az elérése előfizetés. Enélkül az alkalmazás elindul és bejelentkezni is tudsz, de letölteni nem NZB fájlokat vagy indexelő szolgáltatást is te adsz hozzá - ezeket sem tartalmazza az alkalmazás Befelé irányuló portot nem igényel: a Usenet letöltés kizárólag kimenő kapcsolatokat használ, így a doboz zárt portjai itt semmit nem vesznek el NZB fájl hozzáadása Az NZB fájl mondja meg az NZBGet-nek, mit töltsön le a Usenet szolgáltatódtól. A „Letöltések” fülön kattints a „Hozzáadás” gombra. Kattints a „Fájlok kiválasztása” gombra, és válaszd ki az NZB fájlt a gépedről. Az ablakba be is húzhatod. Kattints a „Küldés” gombra. A letöltés megjelenik a „Letöltések” fül listájában. Kész letöltések megtalálása Letöltés után az NZBGet magától ellenőrzi, javítja és kicsomagolja a fájlokat. A befejezett letöltéseket az „Előzmények” fülön látod. Ha egy letöltés nem sikerült, az „Előzmények” fülön a „Sikertelen” szűrő mutatja. A Felhom vezérlőpulton, az NZBGet „Adatok és mentés” fülén a „Hova tegyem a fájlokat?” rész a Fájlkezelőben nyitja meg a letöltések mappáját. Lassítás és szünet Ha az otthoni internet lelassul, korlátozhatod vagy megállíthatod a letöltést. Kattints fent a sebesség kijelzőjére: megnyílik a „Sebességkorlát” ablak. Írd be a korlátot KB/s-ban, és kattints a „Korlát beállítása” gombra. Szünethez kattints a fejlécben a lejátszás gombra. A gomb melletti nyíl menüjében, a „Szünet ennyi időre...” alatt egy megadott időre is szüneteltethetsz. Ha nem indul a letöltés Az NZBGet maga leírja, mi a baj. Nyisd meg az „Üzenetek” fület, és kattints a „Hiba” szűrőre. Ha azt írja, hogy nincs Usenet szerver, add meg a szolgáltatódat a „Beállítások” fül „Usenet szerverek” részén. Ha a szolgáltató elutasítja a belépést, ott ellenőrizd a felhasználónevet és a jelszót. Gyakori kérdések Honnan szerezzek NZB fájlt? Ezt te döntöd el: a doboz nem ad és nem ajánl forrást. Csak olyat tölts le, amihez jogod van, például Linux telepítőt. Összeköti a doboz a Sonarrral és a Radarrral? Nem: a doboz a Sonarrt és a Radarrt csak a torrent letöltőkkel köti össze. Az NZBGet a hozzáadott NZB fájlokkal önállóan dolgozik. Hol látom a belépési jelszót? A Felhom vezérlőpulton, az NZBGet „Beállítások” fülén. A felhasználónév admin. Más nyelven szeretném látni a felületet. Átállíthatom? Az NZBGet a böngésződ nyelvét követi. Jobb felül a beállítások gomb menüjében a „Nyelv” résznél másik nyelvet is választhatsz. Leáll a letöltés, ha bezárom az oldalt? Nem: a letöltés a dobozon fut, az oldalt nyugodtan bezárhatod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-en.txt new file mode 100644 index 00000000..b4631fb8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-en.txt @@ -0,0 +1 @@ +NZBGet — Install — Felhom.eu ← Back NZBGet — Install A Usenet downloader that barely uses the machine ~64M RAM Needs a hard drive Full description, screenshots Memory 64 MB / 7479 MB (0%) Current usage (0 MB) NZBGet (+64 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Downloads drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.8 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive the downloads go to Sign-in password * cannot be changed after install 👁 Generate The web interface password (username: admin). Generated at install; change it in the app afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-hu.txt new file mode 100644 index 00000000..1cc7155d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-install-hu.txt @@ -0,0 +1 @@ +NZBGet — Telepítés — Felhom.eu ← Vissza NZBGet — Telepítés Usenet letöltő, nagyon kevés erőforrásból ~64M RAM HDD szükséges Részletes leírás, képernyőképek Memória 64 MB / 7479 MB (0%) Jelenlegi használat (0 MB) NZBGet (+64 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Letöltések meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,8 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyre a letöltések kerülnek Belépési jelszó * telepítés után nem módosítható 👁 Generálás A webes felület jelszava (felhasználónév: admin). A telepítéskor készül, utána a felületen változtathatod meg. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-en.txt new file mode 100644 index 00000000..28e48ced --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-en.txt @@ -0,0 +1 @@ +NZBGet — Settings — Felhom.eu ← Apps NZBGet Simple Usenet downloading, on almost no resources ● Running nzbget.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Sign-in password Show Address and keys These were created at install time and cannot be changed. Address nzbget.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-hu.txt new file mode 100644 index 00000000..d8d5d584 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/page-overview-hu.txt @@ -0,0 +1 @@ +NZBGet — Felhom.eu ← Alkalmazások NZBGet Usenet letöltés egyszerűen, alig észrevehető erőforrásból ● Fut nzbget.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Belépési jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím nzbget.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/record.json b/documentation/audits/catalog-sweep-2026-10-24/nzbget/record.json new file mode 100644 index 00000000..947c0e2c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/record.json @@ -0,0 +1,132 @@ +{ + "app": "nzbget", + "sub": "nzbget", + "fixture": "NZBGetBox", + "started": "2026-10-24T14:24:25Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "NZB_ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/nzbget/install", + "hu_len": 1381, + "en_len": 1243, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/nzbget/install -> 200 'NZBGet — Telepítés — Felhom.eu' | shot /root/shots/nzbget-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/nzbget/install -> 200 'NZBGet — Telepítés — Felhom.eu' | shot /root/shots/nzbget-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "401", + "http_port_80": "301 https://nzbget.tester4.test/", + "guide": { + "path": "/apps/nzbget/guide", + "hu_len": 3608, + "en_len": 3453, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/nzbget", + "hu_len": 444, + "en_len": 430, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/nzbget/guide -> 200 'NZBGet — Felhom.eu' | shot /root/shots/nzbget-after-guide-phone-hu.png hscroll=False", + "STEP FAILED {'goto': 'https://nzbget.tester4.test/', 'until': 'load'}: Error: Page.goto: net::ERR_INVALID_AUTH_CREDENTIALS at https://nzbget.tester4.test/" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.839172031s\", \"last_run\": \"2026-10-24T14:25:22.715091652Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"nzbget\", \"started_at\": \"2026-10-24T14:26:42.456963398Z\", \"last\": {\"op\": \"restore\", \"stack\": \"nzbget\", \"ok\": true, \"message\": \"A(z) nzbget: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:26:53.251832608Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": true, + "containers": { + "nzbget": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "nzbget: [ERROR] No servers are configured" + ] + }, + "mem_peak_mib": { + "nzbget": 6.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 184 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-after-guide-phone-hu.png new file mode 100644 index 00000000..5c07a7ef Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-desktop-en.png new file mode 100644 index 00000000..916e6f30 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-phone-hu.png new file mode 100644 index 00000000..c42e4f7d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/nzbget/screens/nzbget-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/nzbget/walk.log b/documentation/audits/catalog-sweep-2026-10-24/nzbget/walk.log new file mode 100644 index 00000000..ee7873ff --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/nzbget/walk.log @@ -0,0 +1,16 @@ +14:24:41Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'NZB_ADMIN_PASSWORD'] +14:24:41Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:25:07Z [1] deployed, controller state=running, pinned={'nzbget': 'nzbgetcom/nzbget:v26.3'} +14:25:07Z [1] installed: deployed 25 s, front door 25 s +14:25:07Z nzbget: append felhom454c5355 http=200 ok=True +14:25:07Z nzbget: the queued job is present=True +14:25:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:25:30Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:25:46Z nzbget: the queued job is present=True +14:26:18Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'nzbget', 'volumes_removed': ['nzbget_nzbget_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/n +14:26:27Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['NZB_ADMIN_PASSWORD', 'HDD_PATH'] +14:26:42Z nzbget: the queued job is present=False +14:26:42Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:26:57Z nzbget: the queued job is present=True +14:27:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'nzbget', 'volumes_removed': ['nzbget_nzbget_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media/n +14:27:45Z == nzbget done in 184 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice.console.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice.console.txt new file mode 100644 index 00000000..f5b13657 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice.console.txt @@ -0,0 +1,9 @@ +19:05:43Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:06:54Z [1] deployed, controller state=running, pinned={'onlyoffice': 'onlyoffice/documentserver:9.4.0'} +19:06:54Z [1] installed: deployed 71 s, front door 71 s +19:06:54Z [3] no fixture for this app — the front door answering is the smallest honest check +19:07:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:07:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:08:37Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'onlyoffice', 'volumes_removed': ['onlyoffice_onlyoffice_data', 'onlyoffice_onlyoffice_logs'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +19:10:42Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'onlyoffice', 'volumes_removed': ['onlyoffice_onlyoffice_data', 'onlyoffice_onlyoffice_logs'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +19:10:51Z == onlyoffice done in 307 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-en.txt new file mode 100644 index 00000000..8940803d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-en.txt @@ -0,0 +1 @@ +OnlyOffice — Guide — Felhom.eu ← Apps OnlyOffice A full office suite - Word, Excel and PowerPoint in your browser ● Running onlyoffice.tester4.test Open ↗ What is it for? Edit documents, spreadsheets and presentations in your browser Several people editing the same file at the same time Full Microsoft Office format support (docx, xlsx, pptx) Works with Nextcloud and other cloud storage Convert and fill in PDFs First steps Open onlyoffice.tester4.test in your browser Wait for it to finish starting up (a minute or two) The Document Server is an API on its own Connect it to Nextcloud or another app with the JWT token In Nextcloud: install the OnlyOffice app and give it the address Before you start At least 2 GB of free RAM is needed An x86 processor is needed (it does not run on a Raspberry Pi) Nextcloud or another compatible app is recommended, to connect it to Edit in the File manager You do not open OnlyOffice on its own: you work with it in the File manager. On the Felhom dashboard, open OnlyOffice's „Settings” tab. In the „Integrations” part, switch on „FileBrowser integration”. Wait until „Active” appears next to it. Open the File manager and select a docx, xlsx or pptx file: it opens in the OnlyOffice editor. Edit in Nextcloud If Nextcloud is installed too, you can edit your documents there as well. On OnlyOffice's „Settings” tab, in the „Integrations” part, switch on „Nextcloud integration”. If it says „Not installed” next to it, install Nextcloud first. In Nextcloud, select a document: it opens in the OnlyOffice editor. Edit together Several people can work on the same file at the same time. Share the file with your family member in Nextcloud. Open the same document at the same time. You see each other's changes in the editor. Frequently asked questions What do I see at onlyoffice.tester4.test? Only a start page. OnlyOffice is a document server: it works through the File manager or Nextcloud, so open your files there. Do I have to set the key or the address? No. The box made the key at install, and when you switch an integration on, it hands the key and the address to Nextcloud or the File manager. Documents do not open. What happened? If OnlyOffice or the other app stops, the integration pauses by itself and turns on again when it starts. Check on the dashboard that both are running. Where are my documents? Where they were before: in the File manager or in Nextcloud. OnlyOffice only opens them and saves them back. How many people can edit at the same time? The free edition allows up to 20 connections at the same time. That is plenty for a family. Can I edit on my phone? According to OnlyOffice, the free edition has no web editor made for phones. Use a computer for editing. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-hu.txt new file mode 100644 index 00000000..eac4ae3f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-guide-hu.txt @@ -0,0 +1 @@ +OnlyOffice — Felhom.eu ← Alkalmazások OnlyOffice Teljes értékű irodai csomag - Word, Excel, PowerPoint a böngészőben ● Fut onlyoffice.tester4.test Megnyitás ↗ Mire használható? Dokumentumok, táblázatok és prezentációk szerkesztése böngészőben Valós idejű közös szerkesztés több felhasználóval Microsoft Office formátumok teljes kompatibilitása (docx, xlsx, pptx) Nextcloud és egyéb felhő tárhely integrációk PDF konvertálás és kitöltés Első lépések Nyisd meg az onlyoffice.tester4.test címet a böngészőben Várj amíg az inicializálás befejeződik (1-2 perc) A Document Server önmagában API-ként működik Integráld Nextcloud-dal vagy más alkalmazással a JWT tokennel Nextcloudban: telepítsd az OnlyOffice alkalmazást és add meg az URL-t Előfeltételek Legalább 2 GB szabad RAM szükséges x86 processzor szükséges (nem fut Raspberry Pi-n) Nextcloud vagy más kompatibilis alkalmazás ajánlott az integrációhoz Szerkesztés a Fájlkezelőben Az OnlyOffice-t nem külön nyitod meg: a Fájlkezelőben dolgozol vele. A Felhom vezérlőpulton nyisd meg az OnlyOffice „Beállítások” fülét. Az „Integrációk” részben kapcsold be a „FileBrowser integráció” kapcsolót. Várd meg, amíg mellette megjelenik az „Aktív” jelzés. Nyisd meg a Fájlkezelőt, és kattints egy docx, xlsx vagy pptx fájlra: az OnlyOffice szerkesztőben nyílik meg. Szerkesztés a Nextcloudban Ha a Nextcloud is telepítve van, a dokumentumokat ott is szerkesztheted. Az OnlyOffice „Beállítások” fülén, az „Integrációk” részben kapcsold be a „Nextcloud integráció” kapcsolót. Ha mellette „Nincs telepítve” áll, előbb telepítsd a Nextcloudot. A Nextcloudban kattints egy dokumentumra: az OnlyOffice szerkesztőben nyílik meg. Közös szerkesztés Többen is dolgozhattok egyszerre ugyanazon a fájlon. Oszd meg a fájlt a Nextcloudban a családtagoddal. Nyissátok meg egyszerre ugyanazt a dokumentumot. Egymás módosításait a szerkesztőben látjátok. Gyakori kérdések Mit látok az onlyoffice.tester4.test címen? Csak egy kezdőoldalt. Az OnlyOffice dokumentumszerver: a Fájlkezelőn vagy a Nextcloudon keresztül dolgozik, a fájljaidat ott nyisd meg. Be kell állítanom a kulcsot vagy a címet? Nem. A kulcsot a doboz a telepítéskor készítette, és az integráció bekapcsolásakor ő adja át a címmel együtt a Nextcloudnak vagy a Fájlkezelőnek. Nem nyílnak meg a dokumentumok. Mi történt? Ha az OnlyOffice vagy a másik alkalmazás leáll, az integráció magától szünetel, és indításkor újra bekapcsol. Nézd meg a vezérlőpulton, hogy mindkettő fut-e. Hol vannak a dokumentumaim? Ott, ahol eddig: a Fájlkezelőben vagy a Nextcloudban. Az OnlyOffice csak megnyitja és visszamenti őket. Hányan szerkeszthetnek egyszerre? A díjmentes kiadás legfeljebb 20 egyidejű kapcsolatot enged. Egy családnak ez bőven elég. Telefonon is szerkeszthetek? Az OnlyOffice leírása szerint a díjmentes kiadásban nincs telefonra szabott webes szerkesztő. Szerkesztéshez használj számítógépet. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-en.txt new file mode 100644 index 00000000..906a4d7d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-en.txt @@ -0,0 +1 @@ +OnlyOffice — Install — Felhom.eu ← Back OnlyOffice — Install A full office suite in your browser ~512M RAM Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) OnlyOffice (+512 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain JWT encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-hu.txt new file mode 100644 index 00000000..6f325fbd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-install-hu.txt @@ -0,0 +1 @@ +OnlyOffice — Telepítés — Felhom.eu ← Vissza OnlyOffice — Telepítés Teljes értékű irodai csomag a böngészőben ~512M RAM Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) OnlyOffice (+512 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain JWT titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-en.txt new file mode 100644 index 00000000..71c8461a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-en.txt @@ -0,0 +1 @@ +OnlyOffice — Settings — Felhom.eu ← Apps OnlyOffice A full office suite - Word, Excel and PowerPoint in your browser ● Running onlyoffice.tester4.test Open ↗ Running Running Restart Stop Signing in to the app This app needs no sign-in. Integrations Connections to other installed apps. An integration pauses by itself when either app stops, and turns on again when it starts. FileBrowser integration Edit documents in the File manager Nextcloud integration Edit documents in Nextcloud Not installed Address and keys These were created at install time and cannot be changed. Address onlyoffice.tester4.test JWT encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-hu.txt new file mode 100644 index 00000000..666e8e2b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/page-overview-hu.txt @@ -0,0 +1 @@ +OnlyOffice — Felhom.eu ← Alkalmazások OnlyOffice Teljes értékű irodai csomag - Word, Excel, PowerPoint a böngészőben ● Fut onlyoffice.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz nem kell belépés. Integrációk Más telepített alkalmazásokkal való összekapcsolás. Az integráció automatikusan felfüggesztődik, ha bármelyik alkalmazás leáll, és újraaktiválódik indításkor. FileBrowser integráció Dokumentumok szerkesztése a fájlkezelőben Nextcloud integráció Dokumentumok szerkesztése a Nextcloudban Nincs telepítve Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím onlyoffice.tester4.test JWT titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/record.json b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/record.json new file mode 100644 index 00000000..5fb323d5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/record.json @@ -0,0 +1,122 @@ +{ + "app": "onlyoffice", + "sub": "onlyoffice", + "fixture": null, + "started": "2026-10-24T19:05:23Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "JWT_SECRET", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/onlyoffice/install", + "hu_len": 936, + "en_len": 838, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/onlyoffice/install -> 200 'OnlyOffice — Telepítés — Felhom.eu' | shot /root/shots/onlyoffice-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/onlyoffice/install -> 200 'OnlyOffice — Telepítés — Felhom.eu' | shot /root/shots/onlyoffice-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 71 + }, + "stranger": "302 https://onlyoffice.tester4.test/welcome/", + "http_port_80": "301 https://onlyoffice.tester4.test/", + "guide": { + "path": "/apps/onlyoffice/guide", + "hu_len": 2918, + "en_len": 2767, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/onlyoffice", + "hu_len": 702, + "en_len": 629, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/onlyoffice/guide -> 200 'OnlyOffice — Felhom.eu' | shot /root/shots/onlyoffice-after-guide-phone-hu.png hscroll=False", + "goto https://onlyoffice.tester4.test/welcome/ -> 200 'ONLYOFFICE Docs Community Edition' | shot /root/shots/onlyoffice-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"11.94605073s\", \"last_run\": \"2026-10-24T19:07:31.409909837Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"onlyoffice\", \"started_at\": \"2026-10-24T19:07:34.639856221Z\", \"last\": {\"op\": \"restore\", \"stack\": \"onlyoffice\", \"ok\": true, \"message\": \"A(z) onlyoffice: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T19:07:53.138944067Z\"}, \"last_recent\": true}", + "state": "running" + }, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "onlyoffice": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "onlyoffice": 464.4 + }, + "mem_anon_peak_mib": { + "onlyoffice": 463.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 307 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-front-desktop-hu.png new file mode 100644 index 00000000..82e931d2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-guide-phone-hu.png new file mode 100644 index 00000000..6124edaf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-desktop-en.png new file mode 100644 index 00000000..3cbc52cf Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-phone-hu.png new file mode 100644 index 00000000..9c185274 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/screens/onlyoffice-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/walk.log b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/walk.log new file mode 100644 index 00000000..f5b13657 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/onlyoffice/walk.log @@ -0,0 +1,9 @@ +19:05:43Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:06:54Z [1] deployed, controller state=running, pinned={'onlyoffice': 'onlyoffice/documentserver:9.4.0'} +19:06:54Z [1] installed: deployed 71 s, front door 71 s +19:06:54Z [3] no fixture for this app — the front door answering is the smallest honest check +19:07:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:07:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +19:08:37Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'onlyoffice', 'volumes_removed': ['onlyoffice_onlyoffice_data', 'onlyoffice_onlyoffice_logs'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], +19:10:42Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'onlyoffice', 'volumes_removed': ['onlyoffice_onlyoffice_data', 'onlyoffice_onlyoffice_logs'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alka +19:10:51Z == onlyoffice done in 307 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist.console.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist.console.txt new file mode 100644 index 00000000..b7acc00c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist.console.txt @@ -0,0 +1,19 @@ +21:50:49Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:51:04Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +21:51:04Z gate: gist is gated — passed as the household (cookie set) +21:51:04Z [1] installed: deployed 15 s, front door 15 s +21:51:05Z opengist: /register (with its own _csrf) http=302 +21:51:05Z gate: gist is gated — passed as the household (cookie set) +21:51:05Z opengist: sign-in form at /-/login +21:51:08Z opengist: account page /drill3ede09 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:51:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:52:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +21:52:32Z gate: gist is gated — passed as the household (cookie set) +21:52:32Z opengist: sign-in form at /-/login +21:52:32Z opengist: account page /drill3ede09 http=404 found=False (never-created user 404); sign-in http=302 name_on_page=False +21:52:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:52:49Z gate: gist is gated — passed as the household (cookie set) +21:52:49Z opengist: sign-in form at /-/login +21:52:50Z opengist: account page /drill3ede09 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:53:29Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +21:53:38Z == opengist done in 169 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/console.txt new file mode 100644 index 00000000..d7ef9c15 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/console.txt @@ -0,0 +1,10 @@ +13:03:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:04:15Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +13:04:15Z gate: gist is gated — passed as the household (cookie set) +13:04:15Z [1] installed: deployed 20 s, front door 20 s +13:04:16Z opengist: /register (with its own _csrf) http=None +13:04:16Z opengist: refused no _csrf on /register (http=404) +13:04:32Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:05:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +13:06:16Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +13:06:24Z == opengist done in 149 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-en.txt new file mode 100644 index 00000000..9bb6d50c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-en.txt @@ -0,0 +1 @@ +OpenGist — Guide — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ What is it for? Share code snippets and pieces of text Syntax highlighting for many languages Private and public gists Stored in Git, so every version is kept for you Markdown support and embedding First steps Open gist.tester4.test in your browser Create your account (the first user becomes the admin) Create your first gist - type the code in and save it Share the link Save a private note A gist holds code or any text, even just for yourself. Select „New”. Write a title in the „Title” field and give the file a name with an extension, for example note.md. Type or paste the text. Select the arrow next to the create button and choose „Private”. Select „Create private gist”. Share with a link An unlisted gist is seen only by the people you send its address to. When you create it, select the arrow next to the button and choose „Unlisted”. Select „Create unlisted gist”. Copy the gist's address from the browser's address bar and send it. See an earlier version Every save makes a new version, and the old ones are kept. Open the gist. In the sidebar, select „Revisions”. Here you see when and what changed. Add a family member Sign-up is closed, and the box opens it only for a short time. On the Felhom dashboard, on OpenGist's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens gist.tester4.test and selects „Register”. They fill in the „Username” and „Password” fields and sign up. When the 15 minutes end, sign-up closes by itself. Frequently asked questions Who sees my gists? A „Private” gist only you. An „Unlisted” gist the people you send its address to. A „Public” gist anyone who opens gist.tester4.test. How do I delete a gist? Open the gist, select „Settings” in the sidebar, then „Delete”. Can I download a gist? Yes: on the gist's page, choose „Download ZIP” in the „Code” menu. Can one gist have several files? Yes: when you create it, „Add file” adds another file. Why is the interface in mixed languages? OpenGist follows your browser's language, but its Hungarian translation is not complete, so some labels stay in English. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-hu.txt new file mode 100644 index 00000000..cd1c8126 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Mire használható? Kód snippetek és szövegek megosztása Szintaxis kiemelés sok programozási nyelvhez Privát és nyilvános gistek Git-alapú tárolás - verziókezelés automatikusan Markdown támogatás és beágyazás Első lépések Nyisd meg a gist.tester4.test címet a böngészőben Hozd létre a fiókodat (az első felhasználó admin lesz) Hozd létre az első gistet - írd be a kódot és mentsd Oszd meg a linket Privát jegyzet mentése Egy gistbe kódot vagy bármilyen szöveget menthetsz, akár csak magadnak. Kattints az „Új” gombra. Írj egy címet a „Cím” mezőbe, és adj a fájlnak nevet kiterjesztéssel, például jegyzet.md. Írd vagy másold be a szöveget. A létrehozó gomb melletti nyílra kattintva válaszd a „Privát” lehetőséget. Kattints a „Privát gist létrehozása” gombra. Megosztás linkkel A nem listázott gistet csak az látja, akinek elküldöd a címét. Létrehozáskor a gomb melletti nyílra kattintva válaszd a „Nem listázott” lehetőséget. Kattints a „Nem listázott gist létrehozása” gombra. Másold ki a gist címét a böngésző címsorából, és küldd el. Korábbi változat megnézése Minden mentés új változatot készít, a régiek megmaradnak. Nyisd meg a gistet. Az oldalsávban kattints a „Revíziók” pontra. Itt látod, mikor és mi változott. Családtag hozzáadása A regisztráció zárva van, a doboz csak rövid időre nyitja meg. A Felhom vezérlőpulton, az OpenGist „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a gist.tester4.test címet, és kattintson a „Regisztráció” gombra. Töltse ki a „Felhasználónév” és a „Jelszó” mezőt, és regisztráljon. A 15 perc végén a regisztráció magától bezárul. Gyakori kérdések Ki látja a gistjeimet? A „Privát” gistet csak te. A „Nem listázott” gistet az, akinek elküldöd a címét. A „Nyilvános” gistet bárki láthatja, aki megnyitja a gist.tester4.test címet. Hogyan törlök egy gistet? Nyisd meg a gistet, az oldalsávban kattints a „Beállítások” pontra, majd a „Törlés” gombra. Le tudom tölteni a gistet? Igen: a gist oldalán a „Kód” menüben válaszd a „ZIP archívum letöltése” pontot. Lehet egy gistben több fájl? Igen: létrehozáskor a „Fájl hozzáadása” gombbal újabb fájlt adhatsz hozzá. Miért vegyes nyelvű a felület? Az OpenGist a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért néhány felirat angolul marad. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-en.txt new file mode 100644 index 00000000..d5f8cb72 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-en.txt @@ -0,0 +1 @@ +OpenGist — Install — Felhom.eu ← Back OpenGist — Install Share code snippets (a GitHub Gist alternative) ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) OpenGist (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-hu.txt new file mode 100644 index 00000000..0343fc5b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-install-hu.txt @@ -0,0 +1 @@ +OpenGist — Telepítés — Felhom.eu ← Vissza OpenGist — Telepítés Kód snippetek megosztása (GitHub Gist alternatíva) ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) OpenGist (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-en.txt new file mode 100644 index 00000000..d9e2c07b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-en.txt @@ -0,0 +1 @@ +OpenGist — Settings — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-hu.txt new file mode 100644 index 00000000..a0788205 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/record.json new file mode 100644 index 00000000..171f8d24 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/record.json @@ -0,0 +1,105 @@ +{ + "app": "opengist", + "sub": "gist", + "fixture": "OpenGist", + "started": "2026-10-24T13:03:42Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/opengist/install", + "hu_len": 877, + "en_len": 793, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 20, + "front_door": true, + "seconds_to_front_door": 20 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgist.tester4.test%2F", + "http_port_80": "301 https://gist.tester4.test/", + "guide": { + "path": "/apps/opengist/guide", + "hu_len": 2466, + "en_len": 2254, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/opengist", + "hu_len": 706, + "en_len": 714, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/opengist/guide -> 200 'OpenGist — Felhom.eu' | shot /root/shots/opengist-after-guide-phone-hu.png hscroll=False", + "goto https://gist.tester4.test/-/all -> 200 'Összes gist - Opengist' | shot /root/shots/opengist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.512502263s\", \"last_run\": \"2026-10-24T13:04:33.626219785Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "opengist": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "opengist": 23.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 149 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-front-desktop-hu.png new file mode 100644 index 00000000..5bc08602 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-guide-phone-hu.png new file mode 100644 index 00000000..e194de92 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-desktop-en.png new file mode 100644 index 00000000..f993da0e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-phone-hu.png new file mode 100644 index 00000000..f3a8d5b6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/screens/opengist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/walk.log new file mode 100644 index 00000000..d7ef9c15 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/first-run/walk.log @@ -0,0 +1,10 @@ +13:03:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:04:15Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +13:04:15Z gate: gist is gated — passed as the household (cookie set) +13:04:15Z [1] installed: deployed 20 s, front door 20 s +13:04:16Z opengist: /register (with its own _csrf) http=None +13:04:16Z opengist: refused no _csrf on /register (http=404) +13:04:32Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:05:14Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +13:06:16Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +13:06:24Z == opengist done in 149 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/memprobe-128M.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/memprobe-128M.txt new file mode 100644 index 00000000..a3007733 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/memprobe-128M.txt @@ -0,0 +1,15 @@ +21:50:57 anon=22MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:00 anon=22MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:03 anon=22MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:06 anon=125MiB swap=28MiB max=134217728 low 0 high 0 max 116 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:09 anon=125MiB swap=97MiB max=134217728 low 0 high 0 max 437 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:12 anon=125MiB swap=97MiB max=134217728 low 0 high 0 max 437 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:15 anon=125MiB swap=97MiB max=134217728 low 0 high 0 max 437 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:18 anon=125MiB swap=97MiB max=134217728 low 0 high 0 max 437 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:21 anon=125MiB swap=97MiB max=134217728 low 0 high 0 max 438 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:24 anon=124MiB swap=98MiB max=134217728 low 0 high 0 max 443 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:27 anon=124MiB swap=98MiB max=134217728 low 0 high 0 max 443 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:30 anon=124MiB swap=98MiB max=134217728 low 0 high 0 max 443 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:33 anon=21MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:37 anon=21MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 +21:51:40 anon=21MiB swap=0MiB max=134217728 low 0 high 0 max 0 oom 0 oom_kill 0 oom_group_kill 0 sock_throttled 0 diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-en.txt new file mode 100644 index 00000000..9bb6d50c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-en.txt @@ -0,0 +1 @@ +OpenGist — Guide — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ What is it for? Share code snippets and pieces of text Syntax highlighting for many languages Private and public gists Stored in Git, so every version is kept for you Markdown support and embedding First steps Open gist.tester4.test in your browser Create your account (the first user becomes the admin) Create your first gist - type the code in and save it Share the link Save a private note A gist holds code or any text, even just for yourself. Select „New”. Write a title in the „Title” field and give the file a name with an extension, for example note.md. Type or paste the text. Select the arrow next to the create button and choose „Private”. Select „Create private gist”. Share with a link An unlisted gist is seen only by the people you send its address to. When you create it, select the arrow next to the button and choose „Unlisted”. Select „Create unlisted gist”. Copy the gist's address from the browser's address bar and send it. See an earlier version Every save makes a new version, and the old ones are kept. Open the gist. In the sidebar, select „Revisions”. Here you see when and what changed. Add a family member Sign-up is closed, and the box opens it only for a short time. On the Felhom dashboard, on OpenGist's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens gist.tester4.test and selects „Register”. They fill in the „Username” and „Password” fields and sign up. When the 15 minutes end, sign-up closes by itself. Frequently asked questions Who sees my gists? A „Private” gist only you. An „Unlisted” gist the people you send its address to. A „Public” gist anyone who opens gist.tester4.test. How do I delete a gist? Open the gist, select „Settings” in the sidebar, then „Delete”. Can I download a gist? Yes: on the gist's page, choose „Download ZIP” in the „Code” menu. Can one gist have several files? Yes: when you create it, „Add file” adds another file. Why is the interface in mixed languages? OpenGist follows your browser's language, but its Hungarian translation is not complete, so some labels stay in English. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-hu.txt new file mode 100644 index 00000000..cd1c8126 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-guide-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Mire használható? Kód snippetek és szövegek megosztása Szintaxis kiemelés sok programozási nyelvhez Privát és nyilvános gistek Git-alapú tárolás - verziókezelés automatikusan Markdown támogatás és beágyazás Első lépések Nyisd meg a gist.tester4.test címet a böngészőben Hozd létre a fiókodat (az első felhasználó admin lesz) Hozd létre az első gistet - írd be a kódot és mentsd Oszd meg a linket Privát jegyzet mentése Egy gistbe kódot vagy bármilyen szöveget menthetsz, akár csak magadnak. Kattints az „Új” gombra. Írj egy címet a „Cím” mezőbe, és adj a fájlnak nevet kiterjesztéssel, például jegyzet.md. Írd vagy másold be a szöveget. A létrehozó gomb melletti nyílra kattintva válaszd a „Privát” lehetőséget. Kattints a „Privát gist létrehozása” gombra. Megosztás linkkel A nem listázott gistet csak az látja, akinek elküldöd a címét. Létrehozáskor a gomb melletti nyílra kattintva válaszd a „Nem listázott” lehetőséget. Kattints a „Nem listázott gist létrehozása” gombra. Másold ki a gist címét a böngésző címsorából, és küldd el. Korábbi változat megnézése Minden mentés új változatot készít, a régiek megmaradnak. Nyisd meg a gistet. Az oldalsávban kattints a „Revíziók” pontra. Itt látod, mikor és mi változott. Családtag hozzáadása A regisztráció zárva van, a doboz csak rövid időre nyitja meg. A Felhom vezérlőpulton, az OpenGist „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a gist.tester4.test címet, és kattintson a „Regisztráció” gombra. Töltse ki a „Felhasználónév” és a „Jelszó” mezőt, és regisztráljon. A 15 perc végén a regisztráció magától bezárul. Gyakori kérdések Ki látja a gistjeimet? A „Privát” gistet csak te. A „Nem listázott” gistet az, akinek elküldöd a címét. A „Nyilvános” gistet bárki láthatja, aki megnyitja a gist.tester4.test címet. Hogyan törlök egy gistet? Nyisd meg a gistet, az oldalsávban kattints a „Beállítások” pontra, majd a „Törlés” gombra. Le tudom tölteni a gistet? Igen: a gist oldalán a „Kód” menüben válaszd a „ZIP archívum letöltése” pontot. Lehet egy gistben több fájl? Igen: létrehozáskor a „Fájl hozzáadása” gombbal újabb fájlt adhatsz hozzá. Miért vegyes nyelvű a felület? Az OpenGist a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért néhány felirat angolul marad. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-en.txt new file mode 100644 index 00000000..d5f8cb72 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-en.txt @@ -0,0 +1 @@ +OpenGist — Install — Felhom.eu ← Back OpenGist — Install Share code snippets (a GitHub Gist alternative) ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) OpenGist (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-hu.txt new file mode 100644 index 00000000..0343fc5b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-install-hu.txt @@ -0,0 +1 @@ +OpenGist — Telepítés — Felhom.eu ← Vissza OpenGist — Telepítés Kód snippetek megosztása (GitHub Gist alternatíva) ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) OpenGist (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-en.txt new file mode 100644 index 00000000..d9e2c07b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-en.txt @@ -0,0 +1 @@ +OpenGist — Settings — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-hu.txt new file mode 100644 index 00000000..a0788205 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/page-overview-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/record.json b/documentation/audits/catalog-sweep-2026-10-24/opengist/record.json new file mode 100644 index 00000000..ca3cad44 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/record.json @@ -0,0 +1,120 @@ +{ + "app": "opengist", + "sub": "gist", + "fixture": "OpenGist", + "started": "2026-10-24T21:50:29Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/opengist/install", + "hu_len": 877, + "en_len": 793, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgist.tester4.test%2F", + "http_port_80": "301 https://gist.tester4.test/", + "guide": { + "path": "/apps/opengist/guide", + "hu_len": 2466, + "en_len": 2254, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/opengist", + "hu_len": 706, + "en_len": 714, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/opengist/guide -> 200 'OpenGist — Felhom.eu' | shot /root/shots/opengist-after-guide-phone-hu.png hscroll=False", + "goto https://gist.tester4.test/-/all -> 200 'Összes gist - Opengist' | shot /root/shots/opengist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.306006614s\", \"last_run\": \"2026-10-24T21:51:32.457473827Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"opengist\", \"started_at\": \"2026-10-24T21:52:34.21703555Z\", \"last\": {\"op\": \"restore\", \"stack\": \"opengist\", \"ok\": true, \"message\": \"A(z) opengist: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T21:52:44.811511526Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "opengist": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "opengist": 127.7 + }, + "mem_anon_peak_mib": { + "opengist": 125.3 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 169 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-en.txt new file mode 100644 index 00000000..9bb6d50c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-en.txt @@ -0,0 +1 @@ +OpenGist — Guide — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ What is it for? Share code snippets and pieces of text Syntax highlighting for many languages Private and public gists Stored in Git, so every version is kept for you Markdown support and embedding First steps Open gist.tester4.test in your browser Create your account (the first user becomes the admin) Create your first gist - type the code in and save it Share the link Save a private note A gist holds code or any text, even just for yourself. Select „New”. Write a title in the „Title” field and give the file a name with an extension, for example note.md. Type or paste the text. Select the arrow next to the create button and choose „Private”. Select „Create private gist”. Share with a link An unlisted gist is seen only by the people you send its address to. When you create it, select the arrow next to the button and choose „Unlisted”. Select „Create unlisted gist”. Copy the gist's address from the browser's address bar and send it. See an earlier version Every save makes a new version, and the old ones are kept. Open the gist. In the sidebar, select „Revisions”. Here you see when and what changed. Add a family member Sign-up is closed, and the box opens it only for a short time. On the Felhom dashboard, on OpenGist's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens gist.tester4.test and selects „Register”. They fill in the „Username” and „Password” fields and sign up. When the 15 minutes end, sign-up closes by itself. Frequently asked questions Who sees my gists? A „Private” gist only you. An „Unlisted” gist the people you send its address to. A „Public” gist anyone who opens gist.tester4.test. How do I delete a gist? Open the gist, select „Settings” in the sidebar, then „Delete”. Can I download a gist? Yes: on the gist's page, choose „Download ZIP” in the „Code” menu. Can one gist have several files? Yes: when you create it, „Add file” adds another file. Why is the interface in mixed languages? OpenGist follows your browser's language, but its Hungarian translation is not complete, so some labels stay in English. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-hu.txt new file mode 100644 index 00000000..cd1c8126 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-guide-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Mire használható? Kód snippetek és szövegek megosztása Szintaxis kiemelés sok programozási nyelvhez Privát és nyilvános gistek Git-alapú tárolás - verziókezelés automatikusan Markdown támogatás és beágyazás Első lépések Nyisd meg a gist.tester4.test címet a böngészőben Hozd létre a fiókodat (az első felhasználó admin lesz) Hozd létre az első gistet - írd be a kódot és mentsd Oszd meg a linket Privát jegyzet mentése Egy gistbe kódot vagy bármilyen szöveget menthetsz, akár csak magadnak. Kattints az „Új” gombra. Írj egy címet a „Cím” mezőbe, és adj a fájlnak nevet kiterjesztéssel, például jegyzet.md. Írd vagy másold be a szöveget. A létrehozó gomb melletti nyílra kattintva válaszd a „Privát” lehetőséget. Kattints a „Privát gist létrehozása” gombra. Megosztás linkkel A nem listázott gistet csak az látja, akinek elküldöd a címét. Létrehozáskor a gomb melletti nyílra kattintva válaszd a „Nem listázott” lehetőséget. Kattints a „Nem listázott gist létrehozása” gombra. Másold ki a gist címét a böngésző címsorából, és küldd el. Korábbi változat megnézése Minden mentés új változatot készít, a régiek megmaradnak. Nyisd meg a gistet. Az oldalsávban kattints a „Revíziók” pontra. Itt látod, mikor és mi változott. Családtag hozzáadása A regisztráció zárva van, a doboz csak rövid időre nyitja meg. A Felhom vezérlőpulton, az OpenGist „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a gist.tester4.test címet, és kattintson a „Regisztráció” gombra. Töltse ki a „Felhasználónév” és a „Jelszó” mezőt, és regisztráljon. A 15 perc végén a regisztráció magától bezárul. Gyakori kérdések Ki látja a gistjeimet? A „Privát” gistet csak te. A „Nem listázott” gistet az, akinek elküldöd a címét. A „Nyilvános” gistet bárki láthatja, aki megnyitja a gist.tester4.test címet. Hogyan törlök egy gistet? Nyisd meg a gistet, az oldalsávban kattints a „Beállítások” pontra, majd a „Törlés” gombra. Le tudom tölteni a gistet? Igen: a gist oldalán a „Kód” menüben válaszd a „ZIP archívum letöltése” pontot. Lehet egy gistben több fájl? Igen: létrehozáskor a „Fájl hozzáadása” gombbal újabb fájlt adhatsz hozzá. Miért vegyes nyelvű a felület? Az OpenGist a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért néhány felirat angolul marad. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-en.txt new file mode 100644 index 00000000..d5f8cb72 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-en.txt @@ -0,0 +1 @@ +OpenGist — Install — Felhom.eu ← Back OpenGist — Install Share code snippets (a GitHub Gist alternative) ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) OpenGist (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-hu.txt new file mode 100644 index 00000000..0343fc5b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-install-hu.txt @@ -0,0 +1 @@ +OpenGist — Telepítés — Felhom.eu ← Vissza OpenGist — Telepítés Kód snippetek megosztása (GitHub Gist alternatíva) ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) OpenGist (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-en.txt new file mode 100644 index 00000000..d9e2c07b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-en.txt @@ -0,0 +1 @@ +OpenGist — Settings — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-hu.txt new file mode 100644 index 00000000..a0788205 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/page-overview-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/record.json new file mode 100644 index 00000000..f737dcd3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/record.json @@ -0,0 +1,120 @@ +{ + "app": "opengist", + "sub": "gist", + "fixture": "OpenGist", + "started": "2026-10-24T21:43:05Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/opengist/install", + "hu_len": 877, + "en_len": 793, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 20, + "front_door": true, + "seconds_to_front_door": 20 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgist.tester4.test%2F", + "http_port_80": "301 https://gist.tester4.test/", + "guide": { + "path": "/apps/opengist/guide", + "hu_len": 2466, + "en_len": 2254, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/opengist", + "hu_len": 706, + "en_len": 714, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/opengist/guide -> 200 'OpenGist — Felhom.eu' | shot /root/shots/opengist-after-guide-phone-hu.png hscroll=False", + "goto https://gist.tester4.test/-/all -> 200 'Összes gist - Opengist' | shot /root/shots/opengist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.324841939s\", \"last_run\": \"2026-10-24T21:44:11.351507209Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"opengist\", \"started_at\": \"2026-10-24T21:45:16.3074346Z\", \"last\": {\"op\": \"restore\", \"stack\": \"opengist\", \"ok\": true, \"message\": \"A(z) opengist: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T21:45:26.63284024Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "opengist": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "opengist": 217.3 + }, + "mem_anon_peak_mib": { + "opengist": 215.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 175 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-front-desktop-hu.png new file mode 100644 index 00000000..a1182fd3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-guide-phone-hu.png new file mode 100644 index 00000000..e194de92 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-desktop-en.png new file mode 100644 index 00000000..f993da0e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-phone-hu.png new file mode 100644 index 00000000..f3a8d5b6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/screens/opengist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/walk.log new file mode 100644 index 00000000..7a45dae8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-2/walk.log @@ -0,0 +1,19 @@ +21:43:25Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:43:45Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +21:43:45Z gate: gist is gated — passed as the household (cookie set) +21:43:45Z [1] installed: deployed 20 s, front door 20 s +21:43:45Z opengist: /register (with its own _csrf) http=302 +21:43:45Z gate: gist is gated — passed as the household (cookie set) +21:43:46Z opengist: sign-in form at /-/login +21:43:46Z opengist: account page /drill93b57c http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:44:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:44:52Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +21:45:16Z gate: gist is gated — passed as the household (cookie set) +21:45:16Z opengist: sign-in form at /-/login +21:45:16Z opengist: account page /drill93b57c http=404 found=False (never-created user 404); sign-in http=302 name_on_page=False +21:45:16Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:45:31Z gate: gist is gated — passed as the household (cookie set) +21:45:31Z opengist: sign-in form at /-/login +21:45:31Z opengist: account page /drill93b57c http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:46:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +21:46:19Z == opengist done in 175 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-en.txt new file mode 100644 index 00000000..9bb6d50c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-en.txt @@ -0,0 +1 @@ +OpenGist — Guide — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ What is it for? Share code snippets and pieces of text Syntax highlighting for many languages Private and public gists Stored in Git, so every version is kept for you Markdown support and embedding First steps Open gist.tester4.test in your browser Create your account (the first user becomes the admin) Create your first gist - type the code in and save it Share the link Save a private note A gist holds code or any text, even just for yourself. Select „New”. Write a title in the „Title” field and give the file a name with an extension, for example note.md. Type or paste the text. Select the arrow next to the create button and choose „Private”. Select „Create private gist”. Share with a link An unlisted gist is seen only by the people you send its address to. When you create it, select the arrow next to the button and choose „Unlisted”. Select „Create unlisted gist”. Copy the gist's address from the browser's address bar and send it. See an earlier version Every save makes a new version, and the old ones are kept. Open the gist. In the sidebar, select „Revisions”. Here you see when and what changed. Add a family member Sign-up is closed, and the box opens it only for a short time. On the Felhom dashboard, on OpenGist's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens gist.tester4.test and selects „Register”. They fill in the „Username” and „Password” fields and sign up. When the 15 minutes end, sign-up closes by itself. Frequently asked questions Who sees my gists? A „Private” gist only you. An „Unlisted” gist the people you send its address to. A „Public” gist anyone who opens gist.tester4.test. How do I delete a gist? Open the gist, select „Settings” in the sidebar, then „Delete”. Can I download a gist? Yes: on the gist's page, choose „Download ZIP” in the „Code” menu. Can one gist have several files? Yes: when you create it, „Add file” adds another file. Why is the interface in mixed languages? OpenGist follows your browser's language, but its Hungarian translation is not complete, so some labels stay in English. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-hu.txt new file mode 100644 index 00000000..cd1c8126 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-guide-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Mire használható? Kód snippetek és szövegek megosztása Szintaxis kiemelés sok programozási nyelvhez Privát és nyilvános gistek Git-alapú tárolás - verziókezelés automatikusan Markdown támogatás és beágyazás Első lépések Nyisd meg a gist.tester4.test címet a böngészőben Hozd létre a fiókodat (az első felhasználó admin lesz) Hozd létre az első gistet - írd be a kódot és mentsd Oszd meg a linket Privát jegyzet mentése Egy gistbe kódot vagy bármilyen szöveget menthetsz, akár csak magadnak. Kattints az „Új” gombra. Írj egy címet a „Cím” mezőbe, és adj a fájlnak nevet kiterjesztéssel, például jegyzet.md. Írd vagy másold be a szöveget. A létrehozó gomb melletti nyílra kattintva válaszd a „Privát” lehetőséget. Kattints a „Privát gist létrehozása” gombra. Megosztás linkkel A nem listázott gistet csak az látja, akinek elküldöd a címét. Létrehozáskor a gomb melletti nyílra kattintva válaszd a „Nem listázott” lehetőséget. Kattints a „Nem listázott gist létrehozása” gombra. Másold ki a gist címét a böngésző címsorából, és küldd el. Korábbi változat megnézése Minden mentés új változatot készít, a régiek megmaradnak. Nyisd meg a gistet. Az oldalsávban kattints a „Revíziók” pontra. Itt látod, mikor és mi változott. Családtag hozzáadása A regisztráció zárva van, a doboz csak rövid időre nyitja meg. A Felhom vezérlőpulton, az OpenGist „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a gist.tester4.test címet, és kattintson a „Regisztráció” gombra. Töltse ki a „Felhasználónév” és a „Jelszó” mezőt, és regisztráljon. A 15 perc végén a regisztráció magától bezárul. Gyakori kérdések Ki látja a gistjeimet? A „Privát” gistet csak te. A „Nem listázott” gistet az, akinek elküldöd a címét. A „Nyilvános” gistet bárki láthatja, aki megnyitja a gist.tester4.test címet. Hogyan törlök egy gistet? Nyisd meg a gistet, az oldalsávban kattints a „Beállítások” pontra, majd a „Törlés” gombra. Le tudom tölteni a gistet? Igen: a gist oldalán a „Kód” menüben válaszd a „ZIP archívum letöltése” pontot. Lehet egy gistben több fájl? Igen: létrehozáskor a „Fájl hozzáadása” gombbal újabb fájlt adhatsz hozzá. Miért vegyes nyelvű a felület? Az OpenGist a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért néhány felirat angolul marad. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-en.txt new file mode 100644 index 00000000..d5f8cb72 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-en.txt @@ -0,0 +1 @@ +OpenGist — Install — Felhom.eu ← Back OpenGist — Install Share code snippets (a GitHub Gist alternative) ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) OpenGist (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-hu.txt new file mode 100644 index 00000000..0343fc5b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-install-hu.txt @@ -0,0 +1 @@ +OpenGist — Telepítés — Felhom.eu ← Vissza OpenGist — Telepítés Kód snippetek megosztása (GitHub Gist alternatíva) ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) OpenGist (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-en.txt new file mode 100644 index 00000000..d9e2c07b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-en.txt @@ -0,0 +1 @@ +OpenGist — Settings — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-hu.txt new file mode 100644 index 00000000..a0788205 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/page-overview-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/record.json b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/record.json new file mode 100644 index 00000000..4e7e6794 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/record.json @@ -0,0 +1,120 @@ +{ + "app": "opengist", + "sub": "gist", + "fixture": "OpenGist", + "started": "2026-10-24T20:44:50Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/opengist/install", + "hu_len": 877, + "en_len": 793, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgist.tester4.test%2F", + "http_port_80": "301 https://gist.tester4.test/", + "guide": { + "path": "/apps/opengist/guide", + "hu_len": 2466, + "en_len": 2254, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/opengist", + "hu_len": 706, + "en_len": 714, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/opengist/guide -> 200 'OpenGist — Felhom.eu' | shot /root/shots/opengist-after-guide-phone-hu.png hscroll=False", + "goto https://gist.tester4.test/-/all -> 200 'Összes gist - Opengist' | shot /root/shots/opengist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.508545439s\", \"last_run\": \"2026-10-24T20:45:52.840148943Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"opengist\", \"started_at\": \"2026-10-24T20:46:54.231358979Z\", \"last\": {\"op\": \"restore\", \"stack\": \"opengist\", \"ok\": true, \"message\": \"A(z) opengist: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:47:04.461452326Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "opengist": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "opengist": 127.7 + }, + "mem_anon_peak_mib": { + "opengist": 125.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 168 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-front-desktop-hu.png new file mode 100644 index 00000000..8c2ee5e3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-guide-phone-hu.png new file mode 100644 index 00000000..e194de92 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-desktop-en.png new file mode 100644 index 00000000..f993da0e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-phone-hu.png new file mode 100644 index 00000000..f3a8d5b6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/screens/opengist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/walk.log b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/walk.log new file mode 100644 index 00000000..8255d108 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-drill-pre/walk.log @@ -0,0 +1,19 @@ +20:45:10Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:45:25Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +20:45:25Z gate: gist is gated — passed as the household (cookie set) +20:45:25Z [1] installed: deployed 15 s, front door 15 s +20:45:25Z opengist: /register (with its own _csrf) http=302 +20:45:25Z gate: gist is gated — passed as the household (cookie set) +20:45:25Z opengist: sign-in form at /-/login +20:45:27Z opengist: account page /drilla3d731 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +20:45:51Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:46:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +20:46:52Z gate: gist is gated — passed as the household (cookie set) +20:46:52Z opengist: sign-in form at /-/login +20:46:52Z opengist: account page /drilla3d731 http=404 found=False (never-created user 404); sign-in http=302 name_on_page=False +20:46:54Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:47:09Z gate: gist is gated — passed as the household (cookie set) +20:47:09Z opengist: sign-in form at /-/login +20:47:10Z opengist: account page /drilla3d731 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +20:47:49Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +20:47:58Z == opengist done in 168 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-en.txt new file mode 100644 index 00000000..9bb6d50c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-en.txt @@ -0,0 +1 @@ +OpenGist — Guide — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ What is it for? Share code snippets and pieces of text Syntax highlighting for many languages Private and public gists Stored in Git, so every version is kept for you Markdown support and embedding First steps Open gist.tester4.test in your browser Create your account (the first user becomes the admin) Create your first gist - type the code in and save it Share the link Save a private note A gist holds code or any text, even just for yourself. Select „New”. Write a title in the „Title” field and give the file a name with an extension, for example note.md. Type or paste the text. Select the arrow next to the create button and choose „Private”. Select „Create private gist”. Share with a link An unlisted gist is seen only by the people you send its address to. When you create it, select the arrow next to the button and choose „Unlisted”. Select „Create unlisted gist”. Copy the gist's address from the browser's address bar and send it. See an earlier version Every save makes a new version, and the old ones are kept. Open the gist. In the sidebar, select „Revisions”. Here you see when and what changed. Add a family member Sign-up is closed, and the box opens it only for a short time. On the Felhom dashboard, on OpenGist's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens gist.tester4.test and selects „Register”. They fill in the „Username” and „Password” fields and sign up. When the 15 minutes end, sign-up closes by itself. Frequently asked questions Who sees my gists? A „Private” gist only you. An „Unlisted” gist the people you send its address to. A „Public” gist anyone who opens gist.tester4.test. How do I delete a gist? Open the gist, select „Settings” in the sidebar, then „Delete”. Can I download a gist? Yes: on the gist's page, choose „Download ZIP” in the „Code” menu. Can one gist have several files? Yes: when you create it, „Add file” adds another file. Why is the interface in mixed languages? OpenGist follows your browser's language, but its Hungarian translation is not complete, so some labels stay in English. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-hu.txt new file mode 100644 index 00000000..cd1c8126 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-guide-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Mire használható? Kód snippetek és szövegek megosztása Szintaxis kiemelés sok programozási nyelvhez Privát és nyilvános gistek Git-alapú tárolás - verziókezelés automatikusan Markdown támogatás és beágyazás Első lépések Nyisd meg a gist.tester4.test címet a böngészőben Hozd létre a fiókodat (az első felhasználó admin lesz) Hozd létre az első gistet - írd be a kódot és mentsd Oszd meg a linket Privát jegyzet mentése Egy gistbe kódot vagy bármilyen szöveget menthetsz, akár csak magadnak. Kattints az „Új” gombra. Írj egy címet a „Cím” mezőbe, és adj a fájlnak nevet kiterjesztéssel, például jegyzet.md. Írd vagy másold be a szöveget. A létrehozó gomb melletti nyílra kattintva válaszd a „Privát” lehetőséget. Kattints a „Privát gist létrehozása” gombra. Megosztás linkkel A nem listázott gistet csak az látja, akinek elküldöd a címét. Létrehozáskor a gomb melletti nyílra kattintva válaszd a „Nem listázott” lehetőséget. Kattints a „Nem listázott gist létrehozása” gombra. Másold ki a gist címét a böngésző címsorából, és küldd el. Korábbi változat megnézése Minden mentés új változatot készít, a régiek megmaradnak. Nyisd meg a gistet. Az oldalsávban kattints a „Revíziók” pontra. Itt látod, mikor és mi változott. Családtag hozzáadása A regisztráció zárva van, a doboz csak rövid időre nyitja meg. A Felhom vezérlőpulton, az OpenGist „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a gist.tester4.test címet, és kattintson a „Regisztráció” gombra. Töltse ki a „Felhasználónév” és a „Jelszó” mezőt, és regisztráljon. A 15 perc végén a regisztráció magától bezárul. Gyakori kérdések Ki látja a gistjeimet? A „Privát” gistet csak te. A „Nem listázott” gistet az, akinek elküldöd a címét. A „Nyilvános” gistet bárki láthatja, aki megnyitja a gist.tester4.test címet. Hogyan törlök egy gistet? Nyisd meg a gistet, az oldalsávban kattints a „Beállítások” pontra, majd a „Törlés” gombra. Le tudom tölteni a gistet? Igen: a gist oldalán a „Kód” menüben válaszd a „ZIP archívum letöltése” pontot. Lehet egy gistben több fájl? Igen: létrehozáskor a „Fájl hozzáadása” gombbal újabb fájlt adhatsz hozzá. Miért vegyes nyelvű a felület? Az OpenGist a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért néhány felirat angolul marad. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-en.txt new file mode 100644 index 00000000..d5f8cb72 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-en.txt @@ -0,0 +1 @@ +OpenGist — Install — Felhom.eu ← Back OpenGist — Install Share code snippets (a GitHub Gist alternative) ~30M RAM Full description, screenshots Memory 30 MB / 7479 MB (0%) Current usage (0 MB) OpenGist (+30 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-hu.txt new file mode 100644 index 00000000..0343fc5b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-install-hu.txt @@ -0,0 +1 @@ +OpenGist — Telepítés — Felhom.eu ← Vissza OpenGist — Telepítés Kód snippetek megosztása (GitHub Gist alternatíva) ~30M RAM Részletes leírás, képernyőképek Memória 30 MB / 7479 MB (0%) Jelenlegi használat (0 MB) OpenGist (+30 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-en.txt new file mode 100644 index 00000000..d9e2c07b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-en.txt @@ -0,0 +1 @@ +OpenGist — Settings — Felhom.eu ← Apps OpenGist Share code snippets - a private GitHub Gist alternative ● Running gist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-hu.txt new file mode 100644 index 00000000..a0788205 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/page-overview-hu.txt @@ -0,0 +1 @@ +OpenGist — Felhom.eu ← Alkalmazások OpenGist Kód snippetek megosztása - privát GitHub Gist alternatíva ● Fut gist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím gist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/record.json new file mode 100644 index 00000000..af2eda2e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/record.json @@ -0,0 +1,120 @@ +{ + "app": "opengist", + "sub": "gist", + "fixture": "OpenGist", + "started": "2026-10-24T21:26:37Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/opengist/install", + "hu_len": 877, + "en_len": 793, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/opengist/install -> 200 'OpenGist — Telepítés — Felhom.eu' | shot /root/shots/opengist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fgist.tester4.test%2F", + "http_port_80": "301 https://gist.tester4.test/", + "guide": { + "path": "/apps/opengist/guide", + "hu_len": 2466, + "en_len": 2254, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/opengist", + "hu_len": 706, + "en_len": 714, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/opengist/guide -> 200 'OpenGist — Felhom.eu' | shot /root/shots/opengist-after-guide-phone-hu.png hscroll=False", + "goto https://gist.tester4.test/-/all -> 200 'Összes gist - Opengist' | shot /root/shots/opengist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.497410477s\", \"last_run\": \"2026-10-24T21:27:51.225901049Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"opengist\", \"started_at\": \"2026-10-24T21:28:55.920098167Z\", \"last\": {\"op\": \"restore\", \"stack\": \"opengist\", \"ok\": true, \"message\": \"A(z) opengist: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T21:29:06.227324981Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "opengist": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "opengist": 127.7 + }, + "mem_anon_peak_mib": { + "opengist": 114.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 183 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-front-desktop-hu.png new file mode 100644 index 00000000..8c2ee5e3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-guide-phone-hu.png new file mode 100644 index 00000000..e194de92 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-desktop-en.png new file mode 100644 index 00000000..f993da0e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-phone-hu.png new file mode 100644 index 00000000..f3a8d5b6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/screens/opengist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/walk.log new file mode 100644 index 00000000..567cde19 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/run-live-2/walk.log @@ -0,0 +1,19 @@ +21:26:57Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:27:22Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +21:27:22Z gate: gist is gated — passed as the household (cookie set) +21:27:22Z [1] installed: deployed 25 s, front door 25 s +21:27:23Z opengist: /register (with its own _csrf) http=302 +21:27:23Z gate: gist is gated — passed as the household (cookie set) +21:27:23Z opengist: sign-in form at /-/login +21:27:25Z opengist: account page /drill90fac2 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:27:49Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:28:32Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +21:28:55Z gate: gist is gated — passed as the household (cookie set) +21:28:55Z opengist: sign-in form at /-/login +21:28:55Z opengist: account page /drill90fac2 http=404 found=False (never-created user 404); sign-in http=302 name_on_page=False +21:28:55Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:29:11Z gate: gist is gated — passed as the household (cookie set) +21:29:11Z opengist: sign-in form at /-/login +21:29:12Z opengist: account page /drill90fac2 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:29:51Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +21:30:00Z == opengist done in 183 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/box-login-1-launcher-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/box-login-1-launcher-phone-hu.png new file mode 100644 index 00000000..3a40141a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/box-login-1-launcher-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-front-desktop-hu.png new file mode 100644 index 00000000..58ba5910 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-guide-phone-hu.png new file mode 100644 index 00000000..e194de92 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-desktop-en.png new file mode 100644 index 00000000..f993da0e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-phone-hu.png new file mode 100644 index 00000000..f3a8d5b6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/opengist/screens/opengist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/opengist/walk.log b/documentation/audits/catalog-sweep-2026-10-24/opengist/walk.log new file mode 100644 index 00000000..b7acc00c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/opengist/walk.log @@ -0,0 +1,19 @@ +21:50:49Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:51:04Z [1] deployed, controller state=running, pinned={'opengist': 'ghcr.io/thomiceli/opengist:1.15'} +21:51:04Z gate: gist is gated — passed as the household (cookie set) +21:51:04Z [1] installed: deployed 15 s, front door 15 s +21:51:05Z opengist: /register (with its own _csrf) http=302 +21:51:05Z gate: gist is gated — passed as the household (cookie set) +21:51:05Z opengist: sign-in form at /-/login +21:51:08Z opengist: account page /drill3ede09 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:51:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:52:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +21:52:32Z gate: gist is gated — passed as the household (cookie set) +21:52:32Z opengist: sign-in form at /-/login +21:52:32Z opengist: account page /drill3ede09 http=404 found=False (never-created user 404); sign-in http=302 name_on_page=False +21:52:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +21:52:49Z gate: gist is gated — passed as the household (cookie set) +21:52:49Z opengist: sign-in form at /-/login +21:52:50Z opengist: account page /drill3ede09 http=200 found=True (never-created user 404); sign-in http=302 name_on_page=True +21:53:29Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'opengist', 'volumes_removed': ['opengist_opengist_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +21:53:38Z == opengist done in 169 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline.console.txt b/documentation/audits/catalog-sweep-2026-10-24/outline.console.txt new file mode 100644 index 00000000..b2b0c232 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline.console.txt @@ -0,0 +1,15 @@ +18:16:44Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:19:15Z [1] deployed, controller state=running, pinned={'outline': 'outlinewiki/outline:1.10.1', 'outline-postgres': 'postgres:18-alpine', 'outline-redis': 'redis:7-alpine'} +18:19:15Z gate: kb is gated — passed as the household (cookie set) +18:19:15Z [1] installed: deployed 151 s, front door 151 s +18:19:15Z outline: installation.create http=302 +18:19:15Z outline: CSRF cookie __Host-csrfToken +18:19:16Z outline: seeded document drilldoc-cd82a7df +18:19:16Z outline: readback of the seeded document http=200 found=True +18:19:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:20:27Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'outline', 'volumes_removed': ['outline_outline_data', 'outline_outline_postgres_data', 'outline_outline_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': +18:22:22Z outline: READBACK UNUSABLE — an unknown document answered 401 +18:22:22Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:22:57Z outline: readback of the seeded document http=200 found=True +18:23:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'outline', 'volumes_removed': ['outline_outline_data', 'outline_outline_postgres_data', 'outline_outline_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': +18:23:46Z == outline done in 423 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-en.txt new file mode 100644 index 00000000..4a54d6a2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-en.txt @@ -0,0 +1 @@ +Outline — Guide — Felhom.eu ← Apps Outline A modern knowledge base - Markdown, live collaboration and search ● Running kb.tester4.test Open ↗ What is it for? A knowledge base and documentation for a team A Markdown editor several people can use at once Documents in a tree you can follow Full text search and links between documents An API and integrations (Slack, webhooks) First steps Open kb.tester4.test in your browser Create the first user Create a Collection for your documents Start writing in Markdown Invite the rest of the team Before you start An x86 processor is needed At least 1 GB of free RAM (Outline + PostgreSQL + Redis) Add a passkey for signing in later On this box you sign back in to Outline with a passkey, not by email. Open your account menu at your name and choose „Preferences”. In the list on the left, open the „Passkeys” page. Select „Add Passkey” and follow what your browser or phone asks. Next time, sign in on the sign-in page with „Continue with Passkey”. Arrange your documents You can put documents under each other, so the sidebar on the left grows into a tree. In the sidebar on the left, drag one document onto another: it goes under it. For a new sub-document, move the mouse over a document in the sidebar and select the + sign. You change the order by dragging in the same way. Search your documents Outline searches the full text of every document. Select „Search” in the sidebar on the left. Type what you are looking for and press Enter. Select a result to open it. Share with a link You can show a document to anyone, even without an account. Open the document and select „Share”. Switch on the „Publish to web” row. Select „Copy public link” and send the link. To stop sharing, switch the same row off. Frequently asked questions How long do I stay signed in? Three months in one browser. After that, or if you sign out, you can sign in only with a passkey, so add one soon. Can I switch it to Hungarian? Yes: on the „Preferences” page, choose Hungarian in the „Language” field. This guide uses the English menu names. Where does a deleted document go? To the „Trash” page, which you see in the sidebar on the left. Can I save a document to a file? Yes: in the document's menu, under „Export”, choose „Markdown” or „HTML”. Who sees my documents? The members with an Outline account, and anyone you give a public link with the „Publish to web” switch. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-hu.txt new file mode 100644 index 00000000..1806621b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-guide-hu.txt @@ -0,0 +1 @@ +Outline — Felhom.eu ← Alkalmazások Outline Modern tudásbázis - Markdown, valós idejű együttműködés, keresés ● Fut kb.tester4.test Megnyitás ↗ Mire használható? Csapat tudásbázis és dokumentáció Markdown szerkesztő valós idejű együttműködéssel Strukturált dokumentumok fa-szerkezetben Teljes szöveges keresés és hivatkozások API és integrációk (Slack, webhookok) Első lépések Nyisd meg a kb.tester4.test címet a böngészőben Hozd létre az első felhasználót Hozz létre egy gyűjteményt (Collection) a dokumentumoknak Kezdj el írni Markdown-ban Hívd meg a csapattagokat Előfeltételek x86 processzor szükséges Legalább 1 GB szabad RAM (Outline + PostgreSQL + Redis) Passkey hozzáadása a későbbi belépéshez Ezen a dobozon az Outline-ba nem e-maillel, hanem passkeyjel lépsz be újra. Nyisd meg a fiókod menüjét a nevednél, és válaszd a „Preferences” (Beállítások) pontot. A bal oldali listában nyisd meg a „Passkeys” oldalt. Kattints az „Add Passkey” (passkey hozzáadása) gombra, és kövesd a böngésző vagy a telefon utasítását. Legközelebb a belépő oldalon a „Continue with Passkey” (folytatás passkeyjel) gombbal lépsz be. Dokumentumok rendezése A dokumentumokat egymás alá rendezheted, így a bal oldali sáv fává áll össze. A bal oldali sávban húzd az egyik dokumentumot egy másikra: alá kerül. Új aldokumentumhoz vidd az egeret egy dokumentum fölé a sávban, és kattints a + jelre. Ugyanígy húzással rendezheted a sorrendet is. Keresés a dokumentumokban Az Outline minden dokumentum teljes szövegében keres. Kattints a bal oldali sávban a „Search” (Keresés) pontra. Írd be, amit keresel, és nyomd meg az Enter billentyűt. Kattints a találatra, hogy megnyisd. Megosztás linkkel Egy dokumentumot fiók nélkül is megmutathatsz bárkinek. Nyisd meg a dokumentumot, és kattints a „Share” (Megosztás) gombra. Kapcsold be a „Publish to web” (közzététel a weben) sor kapcsolóját. Kattints a „Copy public link” (nyilvános link másolása) gombra, és küldd el a linket. A megosztás leállításához kapcsold ki ugyanezt a kapcsolót. Gyakori kérdések Meddig maradok bejelentkezve? Egy böngészőben három hónapig. Utána, vagy ha kijelentkezel, csak passkeyjel tudsz belépni, ezért adj hozzá egyet minél előbb. Átállíthatom magyarra? Igen: a „Preferences” oldalon a „Language” (Nyelv) mezőben válaszd a „Magyar (Hungarian)” lehetőséget. Ez az útmutató az angol menüneveket használja. Hová kerül a törölt dokumentum? A bal oldali sávban látható „Trash” (Lomtár) oldalra. Kimenthetek egy dokumentumot fájlba? Igen: a dokumentum menüjében az „Export” (Exportálás) alatt válaszd a „Markdown” vagy a „HTML” formátumot. Ki látja a dokumentumaimat? Az Outline fiókkal rendelkező tagjai, és az, akinek a „Publish to web” kapcsolóval nyilvános linket adsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-en.txt new file mode 100644 index 00000000..d0b26648 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-en.txt @@ -0,0 +1 @@ +Outline — Install — Felhom.eu ← Back Outline — Install A modern team knowledge base with Markdown ~300M RAM Full description, screenshots Memory 300 MB / 7479 MB (4%) Current usage (0 MB) Outline (+300 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Utility key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-hu.txt new file mode 100644 index 00000000..eac89ed9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-install-hu.txt @@ -0,0 +1 @@ +Outline — Telepítés — Felhom.eu ← Vissza Outline — Telepítés Modern csapat tudásbázis Markdown támogatással ~300M RAM Részletes leírás, képernyőképek Memória 300 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Outline (+300 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Segédprogram kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-en.txt new file mode 100644 index 00000000..7bec04d9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-en.txt @@ -0,0 +1 @@ +Outline — Settings — Felhom.eu ← Apps Outline A modern knowledge base - Markdown, live collaboration and search ● Running kb.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app This app signs you in with a link by e-mail. It needs the app's e-mail sending (Settings tab). Address and keys These were created at install time and cannot be changed. Address kb.tester4.test Encryption key Show Utility key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-hu.txt new file mode 100644 index 00000000..b0afc58f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/page-overview-hu.txt @@ -0,0 +1 @@ +Outline — Felhom.eu ← Alkalmazások Outline Modern tudásbázis - Markdown, valós idejű együttműködés, keresés ● Fut kb.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Ez az alkalmazás e-mailben küld belépési linket. Ehhez az alkalmazás e-mail küldése kell (Beállítások fül). Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím kb.tester4.test Titkosítási kulcs Megjelenítés Segédprogram kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/record.json b/documentation/audits/catalog-sweep-2026-10-24/outline/record.json new file mode 100644 index 00000000..fe895691 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/record.json @@ -0,0 +1,153 @@ +{ + "app": "outline", + "sub": "kb", + "fixture": "Outline", + "started": "2026-10-24T18:16:24Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY", + "secret", + false + ], + [ + "UTILS_SECRET", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/outline/install", + "hu_len": 1038, + "en_len": 920, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/outline/install -> 200 'Outline — Telepítés — Felhom.eu' | shot /root/shots/outline-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/outline/install -> 200 'Outline — Telepítés — Felhom.eu' | shot /root/shots/outline-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 151, + "front_door": true, + "seconds_to_front_door": 151 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fkb.tester4.test%2F", + "http_port_80": "301 https://kb.tester4.test/", + "guide": { + "path": "/apps/outline/guide", + "hu_len": 2757, + "en_len": 2438, + "english_words_in_hu": [ + "with" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/outline", + "hu_len": 798, + "en_len": 753, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/outline/guide -> 200 'Outline — Felhom.eu' | shot /root/shots/outline-after-guide-phone-hu.png hscroll=False", + "goto https://kb.tester4.test/ -> 200 'Outline' | shot /root/shots/outline-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"10.344674722s\", \"last_run\": \"2026-10-24T18:19:50.040888942Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 35, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"outline\", \"started_at\": \"2026-10-24T18:22:22.234228784Z\", \"last\": {\"op\": \"restore\", \"stack\": \"outline\", \"ok\": true, \"message\": \"A(z) outline: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T18:22:55.775423028Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "outline": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "outline-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "outline-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "outline": 310.2, + "outline-redis": 4.1, + "outline-postgres": 42.0 + }, + "mem_anon_peak_mib": { + "outline": 304.4, + "outline-redis": 3.3, + "outline-postgres": 19.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 423 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-front-desktop-hu.png new file mode 100644 index 00000000..f6beef22 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-guide-phone-hu.png new file mode 100644 index 00000000..b3f53603 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-desktop-en.png new file mode 100644 index 00000000..ab42aff9 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-phone-hu.png new file mode 100644 index 00000000..31fc6309 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/outline/screens/outline-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/outline/walk.log b/documentation/audits/catalog-sweep-2026-10-24/outline/walk.log new file mode 100644 index 00000000..b2b0c232 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/outline/walk.log @@ -0,0 +1,15 @@ +18:16:44Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:19:15Z [1] deployed, controller state=running, pinned={'outline': 'outlinewiki/outline:1.10.1', 'outline-postgres': 'postgres:18-alpine', 'outline-redis': 'redis:7-alpine'} +18:19:15Z gate: kb is gated — passed as the household (cookie set) +18:19:15Z [1] installed: deployed 151 s, front door 151 s +18:19:15Z outline: installation.create http=302 +18:19:15Z outline: CSRF cookie __Host-csrfToken +18:19:16Z outline: seeded document drilldoc-cd82a7df +18:19:16Z outline: readback of the seeded document http=200 found=True +18:19:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +18:20:27Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'outline', 'volumes_removed': ['outline_outline_data', 'outline_outline_postgres_data', 'outline_outline_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': +18:22:22Z outline: READBACK UNUSABLE — an unknown document answered 401 +18:22:22Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +18:22:57Z outline: readback of the seeded document http=200 found=True +18:23:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'outline', 'volumes_removed': ['outline_outline_data', 'outline_outline_postgres_data', 'outline_outline_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': +18:23:46Z == outline done in 423 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx.console.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx.console.txt new file mode 100644 index 00000000..0af394bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx.console.txt @@ -0,0 +1,17 @@ +17:33:59Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:33:59Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:36:25Z [1] deployed, controller state=running, pinned={'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine', 'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15'} +17:36:25Z [1] installed: deployed 146 s, front door 146 s +17:36:36Z paperless-webserver: createsuperuser :: Superuser created successfully. +17:36:46Z paperless-webserver: seeded superuser drillebff6b +17:37:05Z paperless-webserver: readback of the seeded account found=True +17:37:27Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:38:35Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'paperless-ngx', 'volumes_removed': ['paperless-ngx_paperless_data', 'paperless-ngx_paperless_postgres_data', 'paperless-ngx_paperless_redis_data'], 'hdd_paths_removed +17:38:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:38:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:38:48Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Paperless-ngx megőrzött adatainak betöltése elindult.'} +17:39:23Z [1] deployed, controller state=running, pinned={'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine', 'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15'} +17:41:24Z paperless-webserver: readback of the seeded account found=False +17:41:24Z paperless-webserver: :: 42 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +17:42:12Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'paperless-ngx', 'volumes_removed': ['paperless-ngx_paperless_data', 'paperless-ngx_paperless_postgres_data', 'paperless-ngx_paperless_redis_data'], 'hdd_paths_removed +17:42:22Z == paperless-ngx done in 503 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-en.txt new file mode 100644 index 00000000..a00f414a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-en.txt @@ -0,0 +1 @@ +Paperless-ngx — Guide — Felhom.eu ← Apps Paperless-ngx A digital filing cabinet - scanning, OCR and automatic sorting ● Running Up to date paperless.tester4.test Open ↗ Files ↗ No health check ran: no matching container. What is it for? Turn paper documents into files and keep them in order Automatic OCR text recognition on scanned documents Smart automatic sorting and tagging Full text search across every document Documents that arrive by e-mail are processed automatically First steps Open paperless.tester4.test in your browser Sign in with the admin user name you gave at the installation (admin, unless you changed it) and its password. If you did not set the password yourself, it is on the Settings page, under Automatically generated values Upload a document in the app, OR drop it into the import/paperless folder in the File manager (FileBrowser) - it is read in and processed with OCR from there. The File manager sign-in is on the File manager app page You can upload many documents at once: they are processed one by one, and a larger batch takes a few minutes Create tags and correspondents so new documents sort themselves Before you start An external hard drive is recommended to keep the documents on At least 1 GB of free RAM (for the OCR work) Find a document Paperless searches the scanned text as well, not only the title. Type the word you look for into the „Search” field at the top. Select a document among the results to open it. In the „Actions” menu of an open document, „More like this” shows similar documents. Fix the details of a document The more documents you sort by hand, the better Paperless tags by itself. Open the document on the „Documents” page. On the „Details” tab, fix the „Title”, „Correspondent”, „Document type” and „Tags” fields. Select „Save”. Paperless learns new tags and correspondents by itself by default, so it files similar papers on its own later. A frequent filter on the start page Whatever you look for often, your bills for example, a saved view shows in one click. On the „Documents” page, filter, for example by a tag. Select the „Views” menu, then „Save as...”. Give the view a name and tick „Show on dashboard”. Select „Save”: the view appears on the „Dashboard” page. Share a document with a link With a link, you can send the paper to someone who has no account. Open the document and select „Send”. Choose „Share Links”. In the „Expires” list, choose how long the link lives, and select „Create”. Copy the link with „Copy” and send it. Frequently asked questions What files can I upload? PDF, PNG, JPEG, TIFF, GIF and WebP images, and plain text files. This install does not process Office files (docx, for example). It reads the text badly. What can I do? Check the OCR language on the dashboard, on Paperless-ngx's „Settings” tab, in the „OCR language” field. For Hungarian papers, „Hungarian + English” is the right choice. What happens to a deleted document? It goes to the „Trash” page and is deleted for good after 30 days. Until then you still find it there. Does Paperless-ngx change the original file? No. It keeps the original file unchanged and checks regularly that it is still intact. Where are my documents, and are they backed up? On the drive you chose at install time. For their backup, look at the „Data and backup” tab of Paperless-ngx. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-hu.txt new file mode 100644 index 00000000..81213990 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-guide-hu.txt @@ -0,0 +1 @@ +Paperless-ngx — Felhom.eu ← Alkalmazások Paperless-ngx Digitális irattár - szkennelés, OCR és automatikus rendszerezés ● Fut Naprakész paperless.tester4.test Megnyitás ↗ Fájlok ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Mire használható? Papír dokumentumok digitalizálása és rendszerezése Automatikus OCR szövegfelismerés szkennelt dokumentumokon Intelligens automatikus kategorizálás és címkézés Teljes szöveges keresés az összes dokumentumban Email-ből érkező dokumentumok automatikus feldolgozása Első lépések Nyisd meg a paperless.tester4.test címet a böngészőben Lépj be a telepítéskor megadott admin felhasználónévvel (ha nem írtad át: admin) és jelszóval. Ha a jelszót nem te adtad meg, a Beállítások oldalon találod (Automatikusan generált értékek) Tölts fel egy dokumentumot a webfelületen, VAGY dobd a Fájlkezelőben (FileBrowser) az import/paperless mappába: onnan automatikusan beolvassa és OCR-rel feldolgozza. A Fájlkezelő belépése a Fájlkezelő alkalmazás oldalán található Sok dokumentumot egyszerre is feltölthetsz: egyenként dolgozza fel őket, egy nagyobb köteg néhány percig tart Hozz létre címkéket és levelezőket az automatikus rendszerezéshez Előfeltételek Külső HDD ajánlott a dokumentumok tárolásához Legalább 1 GB szabad RAM (OCR feldolgozáshoz) Dokumentum keresése A Paperless a beolvasott szövegben is keres, nem csak a címben. Írd be a keresett szót a felső „Keresés” mezőbe. A találatok közül kattints a dokumentumra, és megnyílik. A megnyitott dokumentum „Tevékenységek” menüjében a „Még több ilyen” pont a hasonló dokumentumokat mutatja. Egy dokumentum adatainak javítása Minél több dokumentumot sorolsz be kézzel, annál jobban címkéz a Paperless magától. Nyisd meg a dokumentumot a „Dokumentumok” oldalon. A „Részletek” lapon javítsd a „Cím”, a „Levelező”, a „Dokumentum típusa” és a „Címkék” mezőt. Kattints a „Mentés” gombra. Az új címkéket és levelezőket a Paperless alapból magától tanulja, így a hasonló iratokat később maga sorolja be. Gyakori szűrés a kezdőlapra Amit sokszor keresel, például a számláidat, azt egy mentett nézet egy kattintásra mutatja. A „Dokumentumok” oldalon szűrj, például egy címkére. Kattints a „Nézet” menüre, majd a „Mentés másként...” pontra. Adj nevet a nézetnek, és jelöld be a „Megjelenítés a irányítópulton” jelölőt. Kattints a „Mentés” gombra: a nézet megjelenik az „Irányítópult” oldalon. Dokumentum megosztása hivatkozással A hivatkozással olyannak is elküldheted az iratot, akinek nincs fiókja. Nyisd meg a dokumentumot, és kattints a „Küldés” gombra. Válaszd a „Linkek megosztása” pontot. A „Lejárati idő” listában válaszd ki, meddig éljen a hivatkozás, és kattints a „Létrehoz” gombra. A „Másolás” gombbal másold ki a hivatkozást, és küldd el. Gyakori kérdések Milyen fájlokat tölthetek fel? PDF-et, PNG, JPEG, TIFF, GIF és WebP képet, valamint sima szöveges fájlt. Office-fájlokat (például docx) ez a telepítés nem dolgoz fel. Rosszul olvassa a szöveget. Mit tehetek? Nézd meg az OCR nyelvét a vezérlőpulton, a Paperless-ngx „Beállítások” fülén, az „OCR nyelv” mezőben. Magyar iratokhoz a „Magyar + Angol” a jó választás. Mi lesz a törölt dokumentummal? A „Lomtár” oldalra kerül, és 30 nap múlva végleg törlődik. Addig ott még megtalálod. Megváltoztatja a Paperless-ngx az eredeti fájlt? Nem. Az eredeti fájlt változatlanul megőrzi, és rendszeresen ellenőrzi, hogy ép maradt-e. Hol vannak a dokumentumaim, és van róluk mentés? A meghajtódon, amelyet telepítéskor választottál. A mentésükről a Paperless-ngx „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-en.txt new file mode 100644 index 00000000..251a9771 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-en.txt @@ -0,0 +1 @@ +Paperless-ngx — Install — Felhom.eu ← Back Paperless-ngx — Install Digitise your documents and keep them in order ~600M RAM Needs a hard drive Full description, screenshots Memory 600 MB / 7479 MB (8%) Current usage (0 MB) Paperless-ngx (+600 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Admin user name Admin password * 👁 Generate For the first sign-in. You can change it in the app afterwards. Data storage path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the documents are kept OCR language Hungarian English Hungarian + English German + English The language the text recognition reads Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-hu.txt new file mode 100644 index 00000000..8ee63e99 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-install-hu.txt @@ -0,0 +1 @@ +Paperless-ngx — Telepítés — Felhom.eu ← Vissza Paperless-ngx — Telepítés Dokumentumok digitalizálása és rendszerezése ~600M RAM HDD szükséges Részletes leírás, képernyőképek Memória 600 MB / 7479 MB (8%) Jelenlegi használat (0 MB) Paperless-ngx (+600 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Admin felhasználónév Admin jelszó * 👁 Generálás Első bejelentkezéshez. Utána a webes felületen módosítható. Adattárolási útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a dokumentumok tárolódnak OCR nyelv Magyar Angol Magyar + Angol Német + Angol Dokumentum felismerés nyelve Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-en.txt new file mode 100644 index 00000000..27e7cd76 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-en.txt @@ -0,0 +1 @@ +Paperless-ngx — Settings — Felhom.eu ← Apps Paperless-ngx A digital filing cabinet - scanning, OCR and automatic sorting ● Running Up to date paperless.tester4.test Open ↗ Files ↗ No health check ran: no matching container. Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Admin user name Admin password Show Address and keys These were created at install time and cannot be changed. Address paperless.tester4.test Storage Külső tárhely (hdd_1) Database password Show Encryption key Show OCR language Hungarian + English \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-hu.txt new file mode 100644 index 00000000..c61067ec --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/page-overview-hu.txt @@ -0,0 +1 @@ +Paperless-ngx — Felhom.eu ← Alkalmazások Paperless-ngx Digitális irattár - szkennelés, OCR és automatikus rendszerezés ● Fut Naprakész paperless.tester4.test Megnyitás ↗ Fájlok ↗ Nem futott egészségellenőrzés: nincs hozzá tartozó konténer. Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Admin felhasználónév Admin jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím paperless.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés Titkosítási kulcs Megjelenítés OCR nyelv Magyar + Angol \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/record.json b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/record.json new file mode 100644 index 00000000..7470e9a4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/record.json @@ -0,0 +1,151 @@ +{ + "app": "paperless-ngx", + "sub": "paperless", + "fixture": "Django", + "started": "2026-10-24T17:33:40Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "PAPERLESS_SECRET_KEY", + "secret", + false + ], + [ + "PAPERLESS_ADMIN_USER", + "text", + false + ], + [ + "PAPERLESS_ADMIN_PASSWORD", + "password", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "PAPERLESS_OCR_LANGUAGE", + "select", + false + ] + ], + "install_page": { + "path": "/apps/paperless-ngx/install", + "hu_len": 1555, + "en_len": 1446, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/paperless-ngx/install -> 200 'Paperless-ngx — Telepítés — Felhom.eu' | shot /root/shots/paperless-ngx-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/paperless-ngx/install -> 200 'Paperless-ngx — Telepítés — Felhom.eu' | shot /root/shots/paperless-ngx-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 146, + "front_door": true, + "seconds_to_front_door": 146 + }, + "stranger": "302 https://192.168.0.157/accounts/login/?next=/", + "http_port_80": "301 https://paperless.tester4.test/", + "guide": { + "path": "/apps/paperless-ngx/guide", + "hu_len": 3579, + "en_len": 3366, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/paperless-ngx", + "hu_len": 645, + "en_len": 608, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/paperless-ngx/guide -> 200 'Paperless-ngx — Felhom.eu' | shot /root/shots/paperless-ngx-after-guide-phone-hu.png hscroll=False", + "goto https://paperless.tester4.test/accounts/login/?next=/ -> 200 'Paperless-ngx bejelentkezés' | shot /root/shots/paperless-ngx-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 25, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"21.055197331s\", \"last_run\": \"2026-10-24T17:37:48.259014264Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "409", + "body": "{\"ok\": false, \"data\": {\"code\": \"kept_data_choice\", \"title\": \"Ennek az alkalmazásnak megvannak a régi adatai\", \"body\": \"A(z) Paperless-ngx korábbi adatai (0 B, 2026-10-24) még a lemezen vannak. Mit csináljunk velük?\", \"use_label\": \"A megőrzött adataimat használom\", \"use_desc\": \"Az adatbázist innen töltjük vissza: távoli mentés, 2026-10-28 07:39. A régi fájlokkal indítjuk az alkalmazást. Ami ezután változott, hiányozhat.\", \"use_off\": \"\", \"use_offered\": true, \"fresh_label\": \"Tiszta lappal kezdem\", \"fresh_desc\": \"A régi adatok egy mai dátummal jelölt mappába kerülnek. Nem törlünk semmit.\", \"not_backed_up\": \"Erről nem készül mentés.\"}, \"error\": \"Ennek az alkalmazásnak megvannak a régi adatai\"}" + }, + "kept": { + "offered": true, + "use_ok": true + }, + "seed_read_after_reinstall": false, + "containers": { + "paperless-webserver": { + "limit_mib": 1280, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "paperless-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "paperless-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "paperless-postgres": 43.1, + "paperless-redis": 4.1, + "paperless-webserver": 622.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 503 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-front-desktop-hu.png new file mode 100644 index 00000000..d487ac6c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-guide-phone-hu.png new file mode 100644 index 00000000..4367c1a3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-desktop-en.png new file mode 100644 index 00000000..f30dc7a3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-phone-hu.png new file mode 100644 index 00000000..e5ef3c20 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/screens/paperless-ngx-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/walk.log b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/walk.log new file mode 100644 index 00000000..0af394bc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/paperless-ngx/walk.log @@ -0,0 +1,17 @@ +17:33:59Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:33:59Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:36:25Z [1] deployed, controller state=running, pinned={'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine', 'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15'} +17:36:25Z [1] installed: deployed 146 s, front door 146 s +17:36:36Z paperless-webserver: createsuperuser :: Superuser created successfully. +17:36:46Z paperless-webserver: seeded superuser drillebff6b +17:37:05Z paperless-webserver: readback of the seeded account found=True +17:37:27Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:38:35Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'paperless-ngx', 'volumes_removed': ['paperless-ngx_paperless_data', 'paperless-ngx_paperless_postgres_data', 'paperless-ngx_paperless_redis_data'], 'hdd_paths_removed +17:38:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:38:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PAPERLESS_ADMIN_PASSWORD', 'HDD_PATH'] +17:38:48Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) Paperless-ngx megőrzött adatainak betöltése elindult.'} +17:39:23Z [1] deployed, controller state=running, pinned={'paperless-postgres': 'postgres:18-alpine', 'paperless-redis': 'redis:7-alpine', 'paperless-webserver': 'ghcr.io/paperless-ngx/paperless-ngx:2.20.15'} +17:41:24Z paperless-webserver: readback of the seeded account found=False +17:41:24Z paperless-webserver: :: 42 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +17:42:12Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'paperless-ngx', 'volumes_removed': ['paperless-ngx_paperless_data', 'paperless-ngx_paperless_postgres_data', 'paperless-ngx_paperless_redis_data'], 'hdd_paths_removed +17:42:22Z == paperless-ngx done in 503 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra.console.txt b/documentation/audits/catalog-sweep-2026-10-24/papra.console.txt new file mode 100644 index 00000000..aa5d357e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra.console.txt @@ -0,0 +1,16 @@ +20:48:19Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:49:34Z [1] deployed, controller state=running, pinned={'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'} +20:49:34Z gate: papra is gated — passed as the household (cookie set) +20:49:34Z [1] installed: deployed 76 s, front door 76 s +20:49:34Z papra: sign-up http=200 +20:49:35Z gate: papra is gated — passed as the household (cookie set) +20:49:35Z papra: sign-in as the seeded account http=200 ok=True +20:49:58Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:50:40Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack papra r +20:52:05Z gate: papra is gated — passed as the household (cookie set) +20:52:05Z papra: sign-in as the seeded account http=401 ok=False +20:52:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:52:25Z gate: papra is gated — passed as the household (cookie set) +20:52:26Z papra: sign-in as the seeded account http=200 ok=True +20:53:05Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +20:53:13Z == papra done in 295 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/console.txt new file mode 100644 index 00000000..332c0a38 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/console.txt @@ -0,0 +1,10 @@ +15:33:07Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:34:23Z [1] deployed, controller state=running, pinned={'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'} +15:34:23Z gate: papra is gated — passed as the household (cookie set) +15:34:23Z [1] installed: deployed 76 s, front door 76 s +15:34:23Z papra: sign-up http=403 +15:34:23Z papra: refused {"message":"Missing or null Origin","code":"MISSING_OR_NULL_ORIGIN"} +15:34:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:35:26Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack papra r +15:37:24Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +15:37:32Z == papra done in 265 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-en.txt new file mode 100644 index 00000000..4fe9fa25 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Papra — Guide — Felhom.eu ← Apps Papra A minimalist document store - simple sorting and search ● Running papra.tester4.test Open ↗ What is it for? Upload and sort documents without fuss Search across your documents quickly A plain interface with nothing extra in the way A lighter alternative to Paperless-ngx First steps Open papra.tester4.test in your browser Create your account Upload your first document Tag a document Tags group your documents, for example by Invoices or Warranty. Open the document. Select the + button next to its tags. Type the tag's name and pick it from the list, or select the „Create new tag” row. You see all tags under „Tags” in the menu on the left. Tag automatically A rule tags new documents by itself, for example every invoice. In the menu on the left, open „Tagging rules”. Select „Create tagging rule” and give the rule a name in the „Name” field. Use „Add condition” to set a condition, for example that the document name contains: invoice. Under „Tags”, choose the tag and select „Create rule”. Share with a link You can send a document to someone who has no account. Open the document and select „Share”. Select „Create new link”. If you want, switch on „Require a password” or „Set an expiration date”. Select „Create link”, then „Copy link”, and send the link. Add a family member Your family member gets their own account, and then you invite them into your organization. On the Felhom dashboard, on Papra's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens papra.tester4.test and creates their account with „Register”. Under „Members” in the menu on the left, select „Invite member”, enter their email address and select „Invite to organization”. Your family member joins the organization with „Accept” on the „Invitations” page of their own settings. Frequently asked questions Does a rule work on older documents too? By itself only on new ones. For older ones, select „Apply to existing documents” at the rule. How do I stop sharing? Under „Share links” in the menu on the left, choose „Disable link” in the link's actions. Where does a deleted document go? To the „Deleted documents” page. After a while Papra deletes it from there for good. How do I download a document? Open the document and select „Download”. Can I switch it to Hungarian? No: Papra has no Hungarian translation, so the interface is in English. That is why this guide uses the English names. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-hu.txt new file mode 100644 index 00000000..c40a37d8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Papra — Felhom.eu ← Alkalmazások Papra Minimalista dokumentumtár - egyszerű rendszerezés és keresés ● Fut papra.tester4.test Megnyitás ↗ Mire használható? Dokumentumok egyszerű feltöltése és rendszerezése Gyors keresés a dokumentumok között Minimalista felület felesleges funkciók nélkül Könnyű alternatíva a Paperless-ngx-hez Első lépések Nyisd meg a papra.tester4.test címet a böngészőben Hozd létre a fiókodat Töltsd fel az első dokumentumot Dokumentum címkézése A címkékkel csoportosítod a dokumentumokat, például Számlák vagy Garancia szerint. Nyisd meg a dokumentumot. A címkéi mellett kattints a + gombra. Írd be a címke nevét, és válaszd ki a listából, vagy kattints a „Create new tag” (új címke létrehozása) sorra. Az összes címkét a bal oldali menü „Tags” (Címkék) pontjában látod. Automatikus címkézés Egy szabály magától felcímkézi az új dokumentumokat, például minden számlát. A bal oldali menüben nyisd meg a „Tagging rules” (címkézési szabályok) pontot. Kattints a „Create tagging rule” (szabály létrehozása) gombra, és adj nevet a szabálynak a „Name” (név) mezőben. Az „Add condition” (feltétel hozzáadása) gombbal adj meg egy feltételt, például hogy a dokumentum neve tartalmazza: szamla. A „Tags” (címkék) résznél válaszd ki a címkét, és kattints a „Create rule” (szabály létrehozása) gombra. Megosztás linkkel Egy dokumentumot fiók nélkül is elküldhetsz valakinek. Nyisd meg a dokumentumot, és kattints a „Share” (Megosztás) gombra. Kattints a „Create new link” (új link) gombra. Ha kell, kapcsold be a „Require a password” (jelszó kérése) vagy a „Set an expiration date” (lejárati idő) beállítást. Kattints a „Create link” (link létrehozása), majd a „Copy link” (link másolása) gombra, és küldd el a linket. Családtag hozzáadása A családtagod saját fiókot kap, aztán meghívod a szervezetedbe. A Felhom vezérlőpulton, a Papra „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a papra.tester4.test címet, és a „Register” (Regisztráció) gombbal hozza létre a fiókját. Te a bal oldali menü „Members” (Tagok) pontjában kattints az „Invite member” (tag meghívása) gombra, add meg az e-mail címét, és kattints az „Invite to organization” (meghívás a szervezetbe) gombra. A családtagod a saját beállításai között, az „Invitations” (Meghívások) oldalon az „Accept” (Elfogadás) gombbal lép be a szervezetbe. Gyakori kérdések A szabály a régi dokumentumokra is hat? Magától csak az újakra. A régiekhez a szabálynál kattints az „Apply to existing documents” (alkalmazás a meglévőkre) gombra. Hogyan állítom le a megosztást? A bal oldali menü „Share links” (Megosztott linkek) pontjában a link műveletei között válaszd a „Disable link” (link kikapcsolása) pontot. Hová kerül a törölt dokumentum? A „Deleted documents” (Törölt dokumentumok) oldalra. Egy idő után a Papra innen véglegesen törli. Hogyan töltök le egy dokumentumot? Nyisd meg a dokumentumot, és kattints a „Download” (Letöltés) gombra. Átállíthatom magyarra? Nem: a Papra nem tartalmaz magyar fordítást, ezért a felület angol. Ez az útmutató ezért az angol neveket használja. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-en.txt new file mode 100644 index 00000000..0365990a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-en.txt @@ -0,0 +1 @@ +Papra — Install — Felhom.eu ← Back Papra — Install A minimalist document store and organiser ~300M RAM Full description, screenshots Memory 300 MB / 7479 MB (4%) Current usage (0 MB) Papra (+300 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Session signing key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-hu.txt new file mode 100644 index 00000000..9eb33ab3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Papra — Telepítés — Felhom.eu ← Vissza Papra — Telepítés Minimalista dokumentumtár és rendszerező ~300M RAM Részletes leírás, képernyőképek Memória 300 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Papra (+300 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Munkamenet-aláíró kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-en.txt new file mode 100644 index 00000000..5d7fa111 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Papra — Settings — Felhom.eu ← Apps Papra A minimalist document store - simple sorting and search ● Running papra.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address papra.tester4.test Session signing key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-hu.txt new file mode 100644 index 00000000..48f92055 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Papra — Felhom.eu ← Alkalmazások Papra Minimalista dokumentumtár - egyszerű rendszerezés és keresés ● Fut papra.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím papra.tester4.test Munkamenet-aláíró kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/record.json new file mode 100644 index 00000000..bc6026c8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/record.json @@ -0,0 +1,112 @@ +{ + "app": "papra", + "sub": "papra", + "fixture": "Papra", + "started": "2026-10-24T15:32:49Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "AUTH_SECRET", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/papra/install", + "hu_len": 922, + "en_len": 830, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/papra/install -> 200 'Papra — Telepítés — Felhom.eu' | shot /root/shots/papra-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/papra/install -> 200 'Papra — Telepítés — Felhom.eu' | shot /root/shots/papra-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 76 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fpapra.tester4.test%2F", + "http_port_80": "301 https://papra.tester4.test/", + "guide": { + "path": "/apps/papra/guide", + "hu_len": 3133, + "en_len": 2479, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/papra", + "hu_len": 818, + "en_len": 804, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/papra/guide -> 200 'Papra — Felhom.eu' | shot /root/shots/papra-after-guide-phone-hu.png hscroll=False", + "goto https://papra.tester4.test/ -> 200 'Papra - Document archiving and sharing platform' | shot /root/shots/papra-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.450111012s\", \"last_run\": \"2026-10-24T15:34:45.145780215Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "papra": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "papra": 299.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 265 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-front-desktop-hu.png new file mode 100644 index 00000000..d2c3afa3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-guide-phone-hu.png new file mode 100644 index 00000000..c9428779 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-desktop-en.png new file mode 100644 index 00000000..4c9aac1a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-phone-hu.png new file mode 100644 index 00000000..7f9736b0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/screens/papra-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/walk.log new file mode 100644 index 00000000..332c0a38 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/first-run/walk.log @@ -0,0 +1,10 @@ +15:33:07Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:34:23Z [1] deployed, controller state=running, pinned={'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'} +15:34:23Z gate: papra is gated — passed as the household (cookie set) +15:34:23Z [1] installed: deployed 76 s, front door 76 s +15:34:23Z papra: sign-up http=403 +15:34:23Z papra: refused {"message":"Missing or null Origin","code":"MISSING_OR_NULL_ORIGIN"} +15:34:43Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:35:26Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack papra r +15:37:24Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +15:37:32Z == papra done in 265 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-en.txt new file mode 100644 index 00000000..135bdd08 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-en.txt @@ -0,0 +1 @@ +Papra — Guide — Felhom.eu ← Apps Papra A minimalist document store - simple sorting and search ● Running Up to date papra.tester4.test Open ↗ What is it for? Upload and sort documents without fuss Search across your documents quickly A plain interface with nothing extra in the way A lighter alternative to Paperless-ngx First steps Open papra.tester4.test in your browser Create your account Upload your first document Tag a document Tags group your documents, for example by Invoices or Warranty. Open the document. Select the + button next to its tags. Type the tag's name and pick it from the list, or select the „Create new tag” row. You see all tags under „Tags” in the menu on the left. Tag automatically A rule tags new documents by itself, for example every invoice. In the menu on the left, open „Tagging rules”. Select „Create tagging rule” and give the rule a name in the „Name” field. Use „Add condition” to set a condition, for example that the document name contains: invoice. Under „Tags”, choose the tag and select „Create rule”. Share with a link You can send a document to someone who has no account. Open the document and select „Share”. Select „Create new link”. If you want, switch on „Require a password” or „Set an expiration date”. Select „Create link”, then „Copy link”, and send the link. Add a family member Your family member gets their own account, and then you invite them into your organization. On the Felhom dashboard, on Papra's „Settings” tab, select „Open sign-up for 15 minutes”. Your family member opens papra.tester4.test and creates their account with „Register”. Under „Members” in the menu on the left, select „Invite member”, enter their email address and select „Invite to organization”. Your family member joins the organization with „Accept” on the „Invitations” page of their own settings. Frequently asked questions Does a rule work on older documents too? By itself only on new ones. For older ones, select „Apply to existing documents” at the rule. How do I stop sharing? Under „Share links” in the menu on the left, choose „Disable link” in the link's actions. Where does a deleted document go? To the „Deleted documents” page. After a while Papra deletes it from there for good. How do I download a document? Open the document and select „Download”. Can I switch it to Hungarian? No: Papra has no Hungarian translation, so the interface is in English. That is why this guide uses the English names. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-hu.txt new file mode 100644 index 00000000..9a2fe239 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-guide-hu.txt @@ -0,0 +1 @@ +Papra — Felhom.eu ← Alkalmazások Papra Minimalista dokumentumtár - egyszerű rendszerezés és keresés ● Fut Naprakész papra.tester4.test Megnyitás ↗ Mire használható? Dokumentumok egyszerű feltöltése és rendszerezése Gyors keresés a dokumentumok között Minimalista felület felesleges funkciók nélkül Könnyű alternatíva a Paperless-ngx-hez Első lépések Nyisd meg a papra.tester4.test címet a böngészőben Hozd létre a fiókodat Töltsd fel az első dokumentumot Dokumentum címkézése A címkékkel csoportosítod a dokumentumokat, például Számlák vagy Garancia szerint. Nyisd meg a dokumentumot. A címkéi mellett kattints a + gombra. Írd be a címke nevét, és válaszd ki a listából, vagy kattints a „Create new tag” (új címke létrehozása) sorra. Az összes címkét a bal oldali menü „Tags” (Címkék) pontjában látod. Automatikus címkézés Egy szabály magától felcímkézi az új dokumentumokat, például minden számlát. A bal oldali menüben nyisd meg a „Tagging rules” (címkézési szabályok) pontot. Kattints a „Create tagging rule” (szabály létrehozása) gombra, és adj nevet a szabálynak a „Name” (név) mezőben. Az „Add condition” (feltétel hozzáadása) gombbal adj meg egy feltételt, például hogy a dokumentum neve tartalmazza: szamla. A „Tags” (címkék) résznél válaszd ki a címkét, és kattints a „Create rule” (szabály létrehozása) gombra. Megosztás linkkel Egy dokumentumot fiók nélkül is elküldhetsz valakinek. Nyisd meg a dokumentumot, és kattints a „Share” (Megosztás) gombra. Kattints a „Create new link” (új link) gombra. Ha kell, kapcsold be a „Require a password” (jelszó kérése) vagy a „Set an expiration date” (lejárati idő) beállítást. Kattints a „Create link” (link létrehozása), majd a „Copy link” (link másolása) gombra, és küldd el a linket. Családtag hozzáadása A családtagod saját fiókot kap, aztán meghívod a szervezetedbe. A Felhom vezérlőpulton, a Papra „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtagod nyissa meg a papra.tester4.test címet, és a „Register” (Regisztráció) gombbal hozza létre a fiókját. Te a bal oldali menü „Members” (Tagok) pontjában kattints az „Invite member” (tag meghívása) gombra, add meg az e-mail címét, és kattints az „Invite to organization” (meghívás a szervezetbe) gombra. A családtagod a saját beállításai között, az „Invitations” (Meghívások) oldalon az „Accept” (Elfogadás) gombbal lép be a szervezetbe. Gyakori kérdések A szabály a régi dokumentumokra is hat? Magától csak az újakra. A régiekhez a szabálynál kattints az „Apply to existing documents” (alkalmazás a meglévőkre) gombra. Hogyan állítom le a megosztást? A bal oldali menü „Share links” (Megosztott linkek) pontjában a link műveletei között válaszd a „Disable link” (link kikapcsolása) pontot. Hová kerül a törölt dokumentum? A „Deleted documents” (Törölt dokumentumok) oldalra. Egy idő után a Papra innen véglegesen törli. Hogyan töltök le egy dokumentumot? Nyisd meg a dokumentumot, és kattints a „Download” (Letöltés) gombra. Átállíthatom magyarra? Nem: a Papra nem tartalmaz magyar fordítást, ezért a felület angol. Ez az útmutató ezért az angol neveket használja. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-en.txt new file mode 100644 index 00000000..0365990a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-en.txt @@ -0,0 +1 @@ +Papra — Install — Felhom.eu ← Back Papra — Install A minimalist document store and organiser ~300M RAM Full description, screenshots Memory 300 MB / 7479 MB (4%) Current usage (0 MB) Papra (+300 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Session signing key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-hu.txt new file mode 100644 index 00000000..9eb33ab3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-install-hu.txt @@ -0,0 +1 @@ +Papra — Telepítés — Felhom.eu ← Vissza Papra — Telepítés Minimalista dokumentumtár és rendszerező ~300M RAM Részletes leírás, képernyőképek Memória 300 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Papra (+300 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Munkamenet-aláíró kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-en.txt new file mode 100644 index 00000000..cacc990f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-en.txt @@ -0,0 +1 @@ +Papra — Settings — Felhom.eu ← Apps Papra A minimalist document store - simple sorting and search ● Running Up to date papra.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address papra.tester4.test Session signing key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-hu.txt new file mode 100644 index 00000000..b6d2c7f2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/page-overview-hu.txt @@ -0,0 +1 @@ +Papra — Felhom.eu ← Alkalmazások Papra Minimalista dokumentumtár - egyszerű rendszerezés és keresés ● Fut Naprakész papra.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím papra.tester4.test Munkamenet-aláíró kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/record.json b/documentation/audits/catalog-sweep-2026-10-24/papra/record.json new file mode 100644 index 00000000..98de3da6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/record.json @@ -0,0 +1,129 @@ +{ + "app": "papra", + "sub": "papra", + "fixture": "Papra", + "started": "2026-10-24T20:47:59Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "AUTH_SECRET", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/papra/install", + "hu_len": 922, + "en_len": 830, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/papra/install -> 200 'Papra — Telepítés — Felhom.eu' | shot /root/shots/papra-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/papra/install -> 200 'Papra — Telepítés — Felhom.eu' | shot /root/shots/papra-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 76 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fpapra.tester4.test%2F", + "http_port_80": "301 https://papra.tester4.test/", + "guide": { + "path": "/apps/papra/guide", + "hu_len": 3143, + "en_len": 2490, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/papra", + "hu_len": 828, + "en_len": 815, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/papra/guide -> 200 'Papra — Felhom.eu' | shot /root/shots/papra-after-guide-phone-hu.png hscroll=False", + "goto https://papra.tester4.test/ -> 200 'Papra - Document archiving and sharing platform' | shot /root/shots/papra-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.37848725s\", \"last_run\": \"2026-10-24T20:49:59.899922962Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"papra\", \"started_at\": \"2026-10-24T20:52:05.728175679Z\", \"last\": {\"op\": \"restore\", \"stack\": \"papra\", \"ok\": true, \"message\": \"A(z) papra: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T20:52:21.170154643Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "papra": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "papra: {\"level\":\"error\",\"message\":\"Invalid password\",\"timestampMs\":1792875146142,\"namespace\":\"auth\",\"data\":{\"processMode\":\"all\",\"requestId\":\"req_wyrt378ncijiyx8jky71qkdw\",\"args\":[]}}" + ] + }, + "mem_peak_mib": { + "papra": 300.2 + }, + "mem_anon_peak_mib": { + "papra": 320.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 295 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-front-desktop-hu.png new file mode 100644 index 00000000..d2c3afa3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-guide-phone-hu.png new file mode 100644 index 00000000..b6f07a05 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-desktop-en.png new file mode 100644 index 00000000..4c9aac1a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-phone-hu.png new file mode 100644 index 00000000..7f9736b0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/papra/screens/papra-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/papra/walk.log b/documentation/audits/catalog-sweep-2026-10-24/papra/walk.log new file mode 100644 index 00000000..aa5d357e --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/papra/walk.log @@ -0,0 +1,16 @@ +20:48:19Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:49:34Z [1] deployed, controller state=running, pinned={'papra': 'ghcr.io/papra-hq/papra:26.6.2-rootless'} +20:49:34Z gate: papra is gated — passed as the household (cookie set) +20:49:34Z [1] installed: deployed 76 s, front door 76 s +20:49:34Z papra: sign-up http=200 +20:49:35Z gate: papra is gated — passed as the household (cookie set) +20:49:35Z papra: sign-in as the seeded account http=200 ok=True +20:49:58Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:50:40Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack papra r +20:52:05Z gate: papra is gated — passed as the household (cookie set) +20:52:05Z papra: sign-in as the seeded account http=401 ok=False +20:52:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +20:52:25Z gate: papra is gated — passed as the household (cookie set) +20:52:26Z papra: sign-in as the seeded account http=200 ok=True +20:53:05Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'papra', 'volumes_removed': ['papra_papra_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghajtó +20:53:13Z == papra done in 295 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex.console.txt b/documentation/audits/catalog-sweep-2026-10-24/plex.console.txt new file mode 100644 index 00000000..6d395b80 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex.console.txt @@ -0,0 +1,11 @@ +19:01:56Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PLEX_CLAIM', 'HDD_PATH'] +19:01:57Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:02:27Z [1] deployed, controller state=running, pinned={'plex': 'plexinc/pms-docker:1.43.5.11029-6bf8af3f0'} +19:02:27Z gate: plex is gated — passed as the household (cookie set) +19:02:27Z [1] installed: deployed 30 s, front door 30 s +19:02:27Z [3] no fixture for this app — the front door answering is the smallest honest check +19:02:56Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:03:52Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'plex', 'volumes_removed': ['plex_plex_config', 'plex_plex_transcode'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1 +19:04:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PLEX_CLAIM', 'HDD_PATH'] +19:05:13Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'plex', 'volumes_removed': ['plex_plex_config', 'plex_plex_transcode'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1 +19:05:22Z == plex done in 205 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-en.txt new file mode 100644 index 00000000..c38de017 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-en.txt @@ -0,0 +1 @@ +Plex — Guide — Felhom.eu ← Apps Plex A premium media server with excellent app support ● Running plex.tester4.test Open ↗ Files ↗ What is it for? Stream films, series and music through a polished interface It re-encodes on the fly for whatever device you are on Watch Together - watch a film with someone far away Skip intros and end credits (Plex Pass) Strong phone apps and Smart TV support First steps After the install, open the Plex page on the dashboard Get a code at https://plex.tv/claim and enter it there When you are done, press „Done, I set it up” on the dashboard - until then Plex opens only for you Add your libraries (films: /media/movies, series: /media/tv) Install the Plex app on your devices Before you start A Plex account is needed (sign up free at plex.tv) An external hard drive to keep the media files on At least 2 GB of free RAM (more is better for re-encoding) Watch on a TV or a phone The Plex apps find your server through your Plex account. Open the Plex app and sign in with the same Plex account you got the code with. Your libraries appear on the „Home” page. Choose a film and select „Play”. New films and a new drive Whatever you put into your drive's media folder, Plex notices by itself. Radarr puts everything into media/movies and Sonarr into media/tv; Plex reads from there. With a new drive, the box adds its folders to your existing film and series libraries and starts a scan. If a new file still does not show up, select „Scan Library Files” in the library's menu. Fix a wrong title or cover Plex works out which film it is from the names of the file and the folder. Open the film and select the „More” menu. Choose „Fix Match” and search for the right title. Next time it helps to name the folder after the film's title and year, for example: Nosferatu (1922). Share with the family Every family member can watch with their own Plex account. On the „Settings” page, open „Manage Library Access”. Choose who gets which libraries. The family member signs in to the app with their own Plex account. Frequently asked questions Why can I not see the film? Check that the file is in the media/movies folder and that the folder is named after the film's title and year. Then select „Scan Library Files”. Can I delete a film from Plex? No: Plex only reads the drive. You delete in the file browser, in Radarr or in Sonarr. Do I need Plex Pass? Not for watching at home. Some features need it, for example skipping intros; Plex decides that, not the box. Playback stutters. What can I do? Plex is converting the video, and that can be slow on the box. In the app, set „Video Quality” to „Original”. Can I reach it away from home? The box set Plex up to answer on your own address. To watch away from home, Plex may ask for a subscription; Plex sets that rule. The code ran out. Where do I get a new one? In the same place as the first one: its address is in the first steps. Enter the new code on the dashboard, on Plex's „Settings” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-hu.txt new file mode 100644 index 00000000..fd3a00fa --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-guide-hu.txt @@ -0,0 +1 @@ +Plex — Felhom.eu ← Alkalmazások Plex Prémium média szerver kiváló alkalmazás támogatással ● Fut plex.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Filmek, sorozatok és zene streamelése professzionális felületen Automatikus transzkódolás bármilyen eszközhöz Watch Together - közös filmnézés távolról Intro/outro skip funkció (Plex Pass) Gazdag mobilalkalmazás és Smart TV támogatás Első lépések Telepítés után nyisd meg a Plex oldalát a vezérlőpulton Generálj egy kódot a https://plex.tv/claim oldalon, és add meg ott Ha kész, a vezérlőpulton nyomd meg: „Kész, beállítottam” - addig a Plex csak neked nyílik meg Add hozzá a médiatárat (filmek: /media/movies, sorozatok: /media/tv) Telepítsd a Plex alkalmazást eszközeidre Előfeltételek Plex fiók szükséges (ingyenes regisztráció a plex.tv-n) Külső HDD a médiafájlok tárolásához Legalább 2 GB szabad RAM (transzkódoláshoz több ajánlott) Nézés tévén vagy telefonon A Plex appok a Plex fiókodon keresztül találják meg a szerveredet. Nyisd meg a Plex appot, és jelentkezz be ugyanazzal a Plex fiókkal, amellyel a kódot kérted. A „Kezdőképernyő” oldalon megjelennek a könyvtáraid. Válassz egy filmet, és kattints a „Lejátszás” gombra. Új filmek és új meghajtó Amit a meghajtód media mappájába teszel, azt a Plex magától észreveszi. A Radarr a media/movies, a Sonarr a media/tv mappába tesz mindent, a Plex innen olvas. Új meghajtónál a doboz hozzáadja a meghajtó mappáit a meglévő film- és sorozatkönyvtáraidhoz, és elindít egy beolvasást. Ha egy új fájl mégsem jelenik meg, a könyvtár menüjében kattints a „Könyvtárfájlok beolvasása” pontra. Rossz cím vagy borító javítása A Plex a fájl és a mappa nevéből találja ki, melyik film ez. Nyisd meg a filmet, és kattints a „Több” menüre. Válaszd a „Találatok pontosítása” pontot, és keresd meg a helyes címet. Legközelebb segít, ha a mappa neve a film címe és éve, például: Nosferatu (1922). Megosztás a családdal Minden családtag a saját Plex fiókjával nézhet. A „Beállítások” oldalon nyisd meg a „Könyvtár hozzáférés kezelése” részt. Válaszd ki, kivel és mely könyvtárakat osztod meg. A családtag a saját Plex fiókjával lép be az appba. Gyakori kérdések Miért nem látom a filmet? Nézd meg, hogy a fájl a media/movies mappában van-e, és hogy a mappa neve a film címe és éve. Utána kattints a „Könyvtárfájlok beolvasása” pontra. Törölhetek filmet a Plexből? Nem: a Plex csak olvassa a meghajtót. Törölni a fájlböngészőben, a Radarrban vagy a Sonarrban tudsz. Kell Plex Pass? Otthoni nézéshez nem. Néhány funkcióhoz igen, például a bevezető átugrásához; ezt a Plex dönti el, nem a doboz. Akadozik a lejátszás. Mit tehetek? A Plex ilyenkor átalakítja a videót, és ez a dobozon lassú lehet. Az appban a „Videó minőség” beállításnál válaszd az „Eredeti” értéket. Elérem otthonon kívül? A doboz beállította, hogy a Plex a saját címeden is elérhető legyen. Otthonon kívüli nézéshez a Plex előfizetést kérhet; ezt a Plex szabja meg. Lejárt a kód. Hol kérek újat? Ugyanott, ahol az elsőt: a címet az első lépések között találod. Az új kódot a vezérlőpulton, a Plex „Beállítások” fülén add meg. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-en.txt new file mode 100644 index 00000000..281e7919 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-en.txt @@ -0,0 +1 @@ +Plex — Install — Felhom.eu ← Back Plex — Install A popular media server with a polished interface ~512M RAM Needs a hard drive Full description, screenshots Memory 512 MB / 7479 MB (6%) Current usage (0 MB) Plex (+512 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-hu.txt new file mode 100644 index 00000000..63e9f14f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-install-hu.txt @@ -0,0 +1 @@ +Plex — Telepítés — Felhom.eu ← Vissza Plex — Telepítés Népszerű média szerver csiszolt felülettel ~512M RAM HDD szükséges Részletes leírás, képernyőképek Memória 512 MB / 7479 MB (6%) Jelenlegi használat (0 MB) Plex (+512 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-en.txt new file mode 100644 index 00000000..ced932a8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-en.txt @@ -0,0 +1 @@ +Plex — Settings — Felhom.eu ← Apps Plex A premium media server with excellent app support ● Running plex.tester4.test Open ↗ Files ↗ One more step Generate it at https://plex.tv/claim (it is valid for 4 minutes) Save Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address plex.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-hu.txt new file mode 100644 index 00000000..92cab667 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/page-overview-hu.txt @@ -0,0 +1 @@ +Plex — Felhom.eu ← Alkalmazások Plex Prémium média szerver kiváló alkalmazás támogatással ● Fut plex.tester4.test Megnyitás ↗ Fájlok ↗ Még egy lépés Generáld a https://plex.tv/claim oldalon (4 percig érvényes) Mentés Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím plex.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/record.json b/documentation/audits/catalog-sweep-2026-10-24/plex/record.json new file mode 100644 index 00000000..30cf05d2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/record.json @@ -0,0 +1,118 @@ +{ + "app": "plex", + "sub": "plex", + "fixture": null, + "started": "2026-10-24T19:01:36Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "PLEX_CLAIM", + "text", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/plex/install", + "hu_len": 763, + "en_len": 699, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/plex/install -> 200 'Plex — Telepítés — Felhom.eu' | shot /root/shots/plex-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/plex/install -> 200 'Plex — Telepítés — Felhom.eu' | shot /root/shots/plex-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 30, + "front_door": true, + "seconds_to_front_door": 30 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fplex.tester4.test%2F", + "http_port_80": "301 https://plex.tester4.test/", + "guide": { + "path": "/apps/plex/guide", + "hu_len": 3119, + "en_len": 3013, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/plex", + "hu_len": 814, + "en_len": 822, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/plex/guide -> 200 'Plex — Felhom.eu' | shot /root/shots/plex-after-guide-phone-hu.png hscroll=False", + "goto https://plex.tester4.test/web/index.html#!/login?redirectUrl=%2F -> 401 'Plex' | shot /root/shots/plex-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"10.198042537s\", \"last_run\": \"2026-10-24T19:03:06.575615451Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "plex": { + "limit_mib": 2048, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "plex": 228.1 + }, + "mem_anon_peak_mib": { + "plex": 223.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 205 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-front-desktop-hu.png new file mode 100644 index 00000000..ef38f268 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-guide-phone-hu.png new file mode 100644 index 00000000..d0368851 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-desktop-en.png new file mode 100644 index 00000000..67b23107 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-phone-hu.png new file mode 100644 index 00000000..ef2adff9 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/plex/screens/plex-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/plex/walk.log b/documentation/audits/catalog-sweep-2026-10-24/plex/walk.log new file mode 100644 index 00000000..6d395b80 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/plex/walk.log @@ -0,0 +1,11 @@ +19:01:56Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PLEX_CLAIM', 'HDD_PATH'] +19:01:57Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +19:02:27Z [1] deployed, controller state=running, pinned={'plex': 'plexinc/pms-docker:1.43.5.11029-6bf8af3f0'} +19:02:27Z gate: plex is gated — passed as the household (cookie set) +19:02:27Z [1] installed: deployed 30 s, front door 30 s +19:02:27Z [3] no fixture for this app — the front door answering is the smallest honest check +19:02:56Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +19:03:52Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'plex', 'volumes_removed': ['plex_plex_config', 'plex_plex_transcode'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1 +19:04:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['PLEX_CLAIM', 'HDD_PATH'] +19:05:13Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'plex', 'volumes_removed': ['plex_plex_config', 'plex_plex_transcode'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1 +19:05:22Z == plex done in 205 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin.console.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin.console.txt new file mode 100644 index 00000000..ab705368 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin.console.txt @@ -0,0 +1,12 @@ +13:06:39Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:06:54Z [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'} +13:06:54Z [1] installed: deployed 15 s, front door 15 s +13:06:54Z privatebin: seeded paste id=9b4975340a87ee96 +13:06:54Z privatebin: readback http=200 marker_present=True +13:07:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:07:53Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': +13:08:11Z privatebin: readback http=200 marker_present=False +13:08:11Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:08:27Z privatebin: readback http=200 marker_present=True +13:09:05Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot +13:09:14Z == privatebin done in 155 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-en.txt new file mode 100644 index 00000000..f365cf46 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-en.txt @@ -0,0 +1 @@ +PrivateBin — Guide — Felhom.eu ← Apps PrivateBin Encrypted text sharing - the server never sees the content ● Running paste.tester4.test Open ↗ What is it for? Share sensitive text safely End-to-end encryption - the server cannot reach the content You choose how long it lasts (5 minutes to 1 year, or never) Optional: delete it automatically after it is read Password protection for extra safety First steps Open paste.tester4.test in your browser Type your text and select „Create” Share the link you get - the encryption key is part of the URL A message that can be read once When something needs to be read only once, for example a password, PrivateBin deletes it after the first reading. Type the text. Tick „Burn after reading”. In the „Expires” list, choose how long the document waits if nobody opens it. Select „Create”, then „Copy link”, and send the link. A password on a document With a password the link alone is not enough: whoever gets it must also know the password. Type the text, then a password in the „Password (recommended)” field. Select „Create” and send the link. Give the password another way, for example by phone, not in the same message as the link. Send it to your phone With a QR code you quickly move text you typed on the computer to your phone. Create the document with „Create”. Select „QR code”. Scan the code with your phone's camera and open the link. Comments on a document The people you send a document to can write encrypted comments on it. Before you create it, tick „Open discussion”. Under the document, the recipient selects „Add comment”. They can enter a name in „Optional nickname…”, then send the comment with „Post comment”. Frequently asked questions Does the box see the text? No. Your browser encrypts the text, and the key is only in the link. The box stores only encrypted data. I lost the link. Can I look it up? No. The key was only in the link. Without it the document stays locked for everyone, the box included. Can I delete a document before it expires? Yes, but only right after you create it: then the „Delete data” button shows. If you close that page, the document stays until it expires. Can I send a file or a picture? No. On this box PrivateBin takes text only, up to about 10 MB. Why do I need an expiry time next to „Burn after reading”? If the recipient never opens the link, the document is still deleted when the expiry time runs out. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-hu.txt new file mode 100644 index 00000000..aadaea33 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-guide-hu.txt @@ -0,0 +1 @@ +PrivateBin — Felhom.eu ← Alkalmazások PrivateBin Titkosított szöveg megosztás - a szerver nem látja a tartalmat ● Fut paste.tester4.test Megnyitás ↗ Mire használható? Érzékeny szövegek biztonságos megosztása E2E titkosítás - a szerver nem fér hozzá a tartalomhoz Beállítható lejárati idő (5 perc - 1 év, vagy soha) Olvasás után automatikus törlés opció Jelszóvédelem a még nagyobb biztonságért Első lépések Nyisd meg a paste.tester4.test címet a böngészőben Írd be a szöveget, és kattints a „Létrehozás” gombra Oszd meg a generált linket - a titkosítási kulcs az URL-ben van Egyszer olvasható üzenet Ha valamit csak egyszer kell elolvasni, például egy jelszót, a PrivateBin az első olvasás után törli. Írd be a szöveget. Jelöld be a „Törlés az első olvasás után” jelölőt. A „Lejárati idő” listában válaszd ki, meddig várjon a bejegyzés, ha senki nem nyitja meg. Kattints a „Létrehozás” gombra, majd a „Link másolása” gombra, és küldd el a linket. Jelszó a bejegyzésre A jelszóval a link önmagában kevés: aki megkapja, a jelszót is ismernie kell. Írd be a szöveget, majd a „Jelszó (ajánlott)” mezőbe egy jelszót. Kattints a „Létrehozás” gombra, és küldd el a linket. A jelszót más úton add át, például telefonon, ne ugyanabban az üzenetben, mint a linket. Átküldés telefonra A számítógépen írt szöveget egy QR-kóddal gyorsan átviheted a telefonodra. Hozd létre a bejegyzést a „Létrehozás” gombbal. Kattints a „QR-kód” gombra. Olvasd be a kódot a telefonod kamerájával, és nyisd meg a linket. Hozzászólások egy bejegyzéshez Egy bejegyzéshez a címzettek titkosított hozzászólást írhatnak. Létrehozás előtt jelöld be a „Hozzászólások engedélyezése” jelölőt. A címzett a bejegyzés alatt a „Hozzászólok” gombra kattint. Megadhat egy nevet a „Becenév (amennyiben meg akarod adni)” mezőben, majd a „Beküld” gombbal elküldi a hozzászólást. Gyakori kérdések Látja a szöveget a doboz? Nem. A szöveget a böngésződ titkosítja, a kulcs csak a linkben van. A doboz csak titkosított adatot tárol. Elvesztettem a linket. Megkereshetem? Nem. A kulcs csak a linkben volt, ezért a bejegyzést nélküle senki nem tudja megnyitni, a doboz sem. Törölhetem a bejegyzést lejárat előtt? Igen, de csak közvetlenül a létrehozás után: ekkor megjelenik az „Adat törlése” gomb. Ha ezt az oldalt bezárod, a bejegyzés a lejárati idő végéig megmarad. Küldhetek fájlt vagy képet? Nem. Ezen a dobozon a PrivateBin csak szöveget fogad, legfeljebb körülbelül 10 MB-ot. Miért kell a „Törlés az első olvasás után” mellé lejárati idő? Ha a címzett soha nem nyitja meg a linket, a bejegyzés a lejárati idő végén akkor is törlődik. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-en.txt new file mode 100644 index 00000000..8cc73a5c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-en.txt @@ -0,0 +1 @@ +PrivateBin — Install — Felhom.eu ← Back PrivateBin — Install Encrypted note and text sharing ~40M RAM Full description, screenshots Memory 40 MB / 7479 MB (0%) Current usage (0 MB) PrivateBin (+40 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-hu.txt new file mode 100644 index 00000000..2cdbcd4d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-install-hu.txt @@ -0,0 +1 @@ +PrivateBin — Telepítés — Felhom.eu ← Vissza PrivateBin — Telepítés Titkosított jegyzet és szöveg megosztás ~40M RAM Részletes leírás, képernyőképek Memória 40 MB / 7479 MB (0%) Jelenlegi használat (0 MB) PrivateBin (+40 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-en.txt new file mode 100644 index 00000000..54d0d40c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-en.txt @@ -0,0 +1 @@ +PrivateBin — Settings — Felhom.eu ← Apps PrivateBin Encrypted text sharing - the server never sees the content ● Running paste.tester4.test Open ↗ Running Running Restart Stop Signing in to the app This app needs no sign-in. Address and keys These were created at install time and cannot be changed. Address paste.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-hu.txt new file mode 100644 index 00000000..b843e026 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/page-overview-hu.txt @@ -0,0 +1 @@ +PrivateBin — Felhom.eu ← Alkalmazások PrivateBin Titkosított szöveg megosztás - a szerver nem látja a tartalmat ● Fut paste.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Ehhez az alkalmazáshoz nem kell belépés. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím paste.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/record.json b/documentation/audits/catalog-sweep-2026-10-24/privatebin/record.json new file mode 100644 index 00000000..3a5166d1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/record.json @@ -0,0 +1,117 @@ +{ + "app": "privatebin", + "sub": "paste", + "fixture": "PrivateBin", + "started": "2026-10-24T13:06:25Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/privatebin/install", + "hu_len": 872, + "en_len": 783, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/privatebin/install -> 200 'PrivateBin — Telepítés — Felhom.eu' | shot /root/shots/privatebin-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/privatebin/install -> 200 'PrivateBin — Telepítés — Felhom.eu' | shot /root/shots/privatebin-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "200", + "http_port_80": "301 https://paste.tester4.test/", + "guide": { + "path": "/apps/privatebin/guide", + "hu_len": 2624, + "en_len": 2446, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/privatebin", + "hu_len": 338, + "en_len": 326, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/privatebin/guide -> 200 'PrivateBin — Felhom.eu' | shot /root/shots/privatebin-after-guide-phone-hu.png hscroll=False", + "goto https://paste.tester4.test/ -> 200 'PrivateBin' | shot /root/shots/privatebin-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.452106088s\", \"last_run\": \"2026-10-24T13:07:12.270654709Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"privatebin\", \"started_at\": \"2026-10-24T13:08:11.94800632Z\", \"last\": {\"op\": \"restore\", \"stack\": \"privatebin\", \"ok\": true, \"message\": \"A(z) privatebin: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:08:22.646743137Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "privatebin": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "privatebin": 31.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 155 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-front-desktop-hu.png new file mode 100644 index 00000000..c0ed4154 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-guide-phone-hu.png new file mode 100644 index 00000000..be3cc7ad Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-desktop-en.png new file mode 100644 index 00000000..41529bae Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-phone-hu.png new file mode 100644 index 00000000..2b44bd89 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/privatebin/screens/privatebin-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/privatebin/walk.log b/documentation/audits/catalog-sweep-2026-10-24/privatebin/walk.log new file mode 100644 index 00000000..ab705368 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/privatebin/walk.log @@ -0,0 +1,12 @@ +13:06:39Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:06:54Z [1] deployed, controller state=running, pinned={'privatebin': 'privatebin/pdo:2.0.6'} +13:06:54Z [1] installed: deployed 15 s, front door 15 s +13:06:54Z privatebin: seeded paste id=9b4975340a87ee96 +13:06:54Z privatebin: readback http=200 marker_present=True +13:07:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:07:53Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': +13:08:11Z privatebin: readback http=200 marker_present=False +13:08:11Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:08:27Z privatebin: readback http=200 marker_present=True +13:09:05Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'privatebin', 'volumes_removed': ['privatebin_privatebin_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot +13:09:14Z == privatebin done in 155 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/progress.log b/documentation/audits/catalog-sweep-2026-10-24/progress.log new file mode 100644 index 00000000..003a9565 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/progress.log @@ -0,0 +1,178 @@ +12:58:16 START 1 gokapi +13:01:11 END 1 gokapi rc=0 +13:01:13 BATCH DONE +13:03:42 SKIP gokapi (has a record) +13:03:42 START 2 opengist +13:06:24 END 2 opengist rc=0 +13:06:25 START 3 privatebin +13:09:14 END 3 privatebin rc=0 +13:09:15 START 4 radicale +13:12:35 END 4 radicale rc=0 +13:12:36 START 5 recipe-importer --restore +13:15:40 END 5 recipe-importer rc=0 +13:15:41 START 6 actualbudget +13:19:02 END 6 actualbudget rc=0 +13:19:03 START 7 homebox +13:21:42 END 7 homebox rc=0 +13:21:43 START 8 homepage +13:24:44 END 8 homepage rc=0 +13:24:45 START 9 navidrome +13:27:59 END 9 navidrome rc=0 +13:28:00 START 10 termix --restore +13:32:04 END 10 termix rc=0 +13:32:05 START 11 vaultwarden +13:35:00 END 11 vaultwarden rc=0 +13:35:01 START 12 vikunja +13:37:47 END 12 vikunja rc=0 +13:37:48 START 13 bentopdf +13:40:57 END 13 bentopdf rc=0 +13:40:58 START 14 grocy +13:44:47 END 14 grocy rc=0 +13:44:48 START 15 seerr --restore +14:05:03 END 15 seerr rc=0 +14:05:04 START 16 uptime-kuma +14:10:57 END 16 uptime-kuma rc=0 +14:10:58 START 17 audiobookshelf +14:14:35 END 17 audiobookshelf rc=0 +14:14:36 START 18 ghost +14:21:01 END 18 ghost rc=0 +14:21:02 START 19 lubelogger +14:24:24 END 19 lubelogger rc=0 +14:24:25 START 20 nzbget --restore +14:27:45 END 20 nzbget rc=0 +14:27:46 START 21 prowlarr +14:31:58 END 21 prowlarr rc=0 +14:32:00 START 22 radarr +14:35:47 END 22 radarr rc=0 +14:35:48 START 23 sonarr +14:39:26 END 23 sonarr rc=0 +14:39:27 START 24 transmission +14:42:36 END 24 transmission rc=0 +14:42:37 START 25 wishlist --restore +14:54:00 END 25 wishlist rc=0 +14:54:01 START 26 claper +15:00:46 END 26 claper rc=0 +15:00:47 START 27 kimai +15:07:07 END 27 kimai rc=0 +15:07:08 START 28 bookstack +15:13:08 END 28 bookstack rc=0 +15:13:09 START 29 calibre-web +15:18:08 END 29 calibre-web rc=0 +15:18:09 START 30 grafana --restore +15:23:19 END 30 grafana rc=0 +15:23:20 START 31 komga +15:27:53 END 31 komga rc=0 +15:27:54 START 32 metube +15:32:48 END 32 metube rc=0 +15:32:49 START 33 papra +15:37:32 END 33 papra rc=0 +15:37:34 START 34 zipline +15:43:39 END 34 zipline rc=0 +15:43:40 START 35 adventurelog --restore +15:55:56 END 35 adventurelog rc=0 +15:55:57 START 36 mealie +16:01:16 END 36 mealie rc=0 +16:01:17 START 37 code-server +16:09:11 END 37 code-server rc=0 +16:09:12 WARN installed after code-server: /opt/docker/stacks/code-server/app.yaml +16:09:12 START 38 gramps-web +16:18:44 END 38 gramps-web rc=0 +16:18:45 WARN installed after gramps-web: /opt/docker/stacks/code-server/app.yaml +16:18:45 START 39 qbittorrent +16:21:55 END 39 qbittorrent rc=0 +16:21:56 START 40 rallly --restore +16:27:10 END 40 rallly rc=0 +16:27:11 START 41 sabnzbd +16:31:03 END 41 sabnzbd rc=0 +16:31:04 START 42 wanderer +16:52:01 END 42 wanderer rc=0 +16:52:02 START 43 docmost +16:59:16 END 43 docmost rc=0 +16:59:18 START 44 grimmory +17:14:17 END 44 grimmory rc=0 +17:14:18 START 45 romm --restore +17:22:37 END 45 romm rc=0 +17:22:38 START 46 tandoor +17:33:39 END 46 tandoor rc=0 +17:33:40 START 47 paperless-ngx +17:42:22 END 47 paperless-ngx rc=0 +17:42:23 START 48 sparkyfitness +17:48:46 END 48 sparkyfitness rc=0 +17:48:48 START 49 crafty-controller +17:53:57 END 49 crafty-controller rc=0 +17:53:58 START 50 dawarich --restore +18:06:19 END 50 dawarich rc=0 +18:06:20 START 51 karakeep +18:12:40 END 51 karakeep rc=0 +18:12:41 START 52 gitea +18:16:22 END 52 gitea rc=0 +18:16:24 START 53 outline +18:23:46 END 53 outline rc=0 +18:23:48 START 54 calcom +18:37:03 END 54 calcom rc=0 +18:37:04 START 55 n8n --restore +18:44:51 END 55 n8n rc=0 +18:44:53 START 56 home-assistant +18:53:13 END 56 home-assistant rc=0 +18:53:15 START 57 jellyfin +18:57:54 END 57 jellyfin rc=0 +18:57:55 START 58 emby +19:01:35 END 58 emby rc=0 +19:01:36 START 59 plex +19:05:22 END 59 plex rc=0 +19:05:23 START 60 onlyoffice --restore +19:10:51 END 60 onlyoffice rc=0 +19:10:52 START 61 nextcloud +19:18:12 END 61 nextcloud rc=0 +19:18:13 START 62 immich +19:41:51 END 62 immich rc=0 +19:41:52 BATCH DONE +19:54:13 START putback privatebin +19:55:55 END putback privatebin rc=0 +19:55:55 START putback vikunja +19:57:24 END putback vikunja rc=0 +19:57:24 START redo adventurelog +20:09:26 END redo adventurelog rc=0 +20:09:27 START redo calibre-web +20:14:28 END redo calibre-web rc=0 +20:14:29 START redo code-server +20:18:29 END redo code-server rc=0 +20:18:31 START redo gokapi +20:21:20 END redo gokapi rc=0 +20:21:21 START redo grimmory +20:35:53 END redo grimmory rc=0 +20:35:55 START redo homebox +20:39:09 END redo homebox rc=0 +20:39:10 START redo mealie +20:44:49 END redo mealie rc=0 +20:44:50 START redo opengist +20:47:58 END redo opengist rc=0 +20:47:59 START redo papra +20:53:13 END redo papra rc=0 +20:53:15 START redo rallly +20:58:20 END redo rallly rc=0 +20:58:22 START redo seerr +21:03:39 END redo seerr rc=0 +21:03:40 CHAIN2 DONE +21:04:30 START redo2 calibre-web +21:10:08 END redo2 calibre-web rc=0 +21:10:08 START redo2 grimmory +21:18:07 END redo2 grimmory rc=0 +21:18:07 REPOINT drill +21:18:50 START drill n8n +21:26:37 END drill n8n rc=0 +21:26:37 START drill opengist +21:30:00 END drill opengist rc=0 +21:30:00 START drill vaultwarden +21:33:11 END drill vaultwarden rc=0 +21:34:09 REPOINT live; CHAIN3 DONE +21:34:16 REPOINT drill (mirror) +21:35:27 START drill2 n8n +21:43:05 END drill2 n8n rc=0 +21:43:05 START drill2 opengist +21:46:19 END drill2 opengist rc=0 +21:46:19 START drill2 vaultwarden +21:49:27 END drill2 vaultwarden rc=0 +21:50:24 REPOINT live; CHAIN4 DONE +21:50:29 START memprobe opengist (live 128M) +21:53:50 END memprobe opengist rc=0 (15 samples); CHAIN5 DONE diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr.console.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr.console.txt new file mode 100644 index 00000000..1cc5f709 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr.console.txt @@ -0,0 +1,14 @@ +14:28:03Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:28:23Z [1] deployed, controller state=running, pinned={'prowlarr': 'lscr.io/linuxserver/prowlarr:version-2.6.5.5623'} +14:28:23Z gate: prowlarr is gated — passed as the household (cookie set) +14:28:23Z [1] installed: deployed 20 s, front door 21 s +14:28:33Z prowlarr: POST /tag felhomddcdda49 http=201 +14:28:37Z prowlarr: POST /appprofile felhom-profile-84c8f6 http=201 +14:28:50Z prowlarr: tag kept, app profile present=True +14:29:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:29:54Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'prowlarr', 'volumes_removed': ['prowlarr_prowlarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'St +14:30:39Z prowlarr: the seeded tag felhomddcdda49 is GONE +14:30:39Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:31:08Z prowlarr: tag kept, app profile present=True +14:31:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'prowlarr', 'volumes_removed': ['prowlarr_prowlarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kül +14:31:58Z == prowlarr done in 236 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-en.txt new file mode 100644 index 00000000..b53305ec --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-en.txt @@ -0,0 +1 @@ +Prowlarr — Guide — Felhom.eu ← Apps Prowlarr Your download sources in one place ● Running prowlarr.tester4.test Open ↗ What is it for? Enter your download sources (indexers) once, and Sonarr and Radarr get them by themselves See each source's errors and speed in one place First steps Open prowlarr.tester4.test and create your own sign-in Add your sources on the Indexers page - only here, once Sonarr and Radarr get them by themselves: the box links them, whichever you install first (Settings, Apps) When you are done, press „Done, I set it up” on the dashboard Before you start Sonarr or Radarr beside it (installed separately) At least one indexer account of your own Add your first source You add your sources (indexers) here only, and only once. On the „Indexers” page, select „Add Indexer”. Find the source you have access to in the list and select it. Fill in what the source asks for, for example your own user name or key. Select „Test”, and if it succeeds, select „Save”. Sonarr and Radarr get them The box connected this; there is nothing for you to do. The „Apps” page of the „Settings” menu shows Sonarr and Radarr. A new source reaches them by itself, because the link is set to „Full Sync”. If one does not show up, select „Sync App Indexers” on the „Indexers” page. Try a source You can see whether a source finds anything without downloading. On the „Search” page, type a title and look at the results. On the „Indexers” page, „Test All Indexers” checks every source at once. When a source fails Prowlarr skips a source that failed several times for a while, then tries it again. Look at the „Status” tab of the „System” menu: the „Health” part lists the failing sources. The „History” page shows what each search brought back. If a source is broken for good, open it on the „Indexers” page and fix it or delete it. Frequently asked questions Which source should I choose? That is your decision. Felhom neither provides, suggests nor searches for a source. Use only one you have the right to use. Do I also have to add the sources in Sonarr or Radarr? No. Prowlarr sends them over, and when you change a source here, it changes there too. What is the difference between Prowlarr and Sonarr? Prowlarr only keeps the list of sources. Sonarr and Radarr decide what to search for and what to download. What happens if I install Sonarr later? The box still connects them: when Sonarr or Radarr starts, it gets the sources, with no button to press. What does the „Stats” page show? For each source: how many searches and results it had, and how long it took to answer. That shows you which source is slow. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-hu.txt new file mode 100644 index 00000000..c9dd28f8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-guide-hu.txt @@ -0,0 +1 @@ +Prowlarr — Felhom.eu ← Alkalmazások Prowlarr A letöltési források egy helyen ● Fut prowlarr.tester4.test Megnyitás ↗ Mire használható? A letöltési forrásaidat (indexereket) egyszer adod meg, és a Sonarr meg a Radarr magától megkapja Egy forrás hibáját és sebességét egy helyen látod Első lépések Nyisd meg a prowlarr.tester4.test címet, és hozd létre a saját belépésedet Az Indexers oldalon add hozzá a forrásaidat - csak itt, egyszer A Sonarr és a Radarr magától megkapja őket: a doboz összeköti őket, bármelyiket telepíted előbb (Settings, Apps) Ha kész, a vezérlőpulton nyomd meg: „Kész, beállítottam” Előfeltételek Sonarr vagy Radarr kell mellé (külön telepítendő) Legalább egy saját indexer-hozzáférés Első forrás hozzáadása A forrásokat (indexereket) csak itt adod meg, egyszer. Az „Indexers” (Indexerek) oldalon kattints az „Add Indexer” (indexer hozzáadása) gombra. Keresd meg a listában azt a forrást, amelyhez hozzáférésed van, és kattints rá. Töltsd ki, amit a forrás kér, például a saját felhasználónevedet vagy kulcsodat. Kattints a „Test” (próba) gombra, és ha sikeres, a „Save” (mentés) gombra. A Sonarr és a Radarr megkapja Ezt a doboz bekötötte, neked nincs vele teendőd. A „Settings” (Beállítások) menü „Apps” (alkalmazások) oldalán látod a Sonarrt és a Radarrt. Egy új forrás magától átkerül hozzájuk, mert a kapcsolat „Full Sync” (teljes szinkron) módban van. Ha mégsem jelenik meg, az „Indexers” oldalon kattints a „Sync App Indexers” (indexerek átküldése) gombra. Egy forrás kipróbálása Letöltés nélkül is megnézheted, ad-e találatot egy forrás. A „Search” (Keresés) oldalon írj be egy címet, és nézd meg a találatokat. Az „Indexers” oldalon a „Test All Indexers” (összes kipróbálása) gomb minden forrást egyszerre ellenőriz. Ha egy forrás hibás A Prowlarr egy ideig kihagyja azt a forrást, amelyik többször hibázott, majd újra próbálja. Nézd meg a „System” (Rendszer) menü „Status” (Állapot) lapját: a „Health” (állapot) rész sorolja a hibás forrásokat. A „History” (Előzmények) oldalon látod, melyik keresés mit hozott. Ha egy forrás véglegesen elromlott, nyisd meg az „Indexers” oldalon, és javítsd vagy töröld. Gyakori kérdések Melyik forrást válasszam? Ezt te döntöd el. A Felhom nem ad, nem ajánl és nem keres forrást. Csak olyat használj, amelyhez jogod van. Kell a Sonarrban vagy a Radarrban is felvennem a forrásokat? Nem. A Prowlarr átküldi nekik, és ha itt módosítasz egy forrást, ott is módosul. Mi a különbség a Prowlarr és a Sonarr között? A Prowlarr csak a forrásokat tartja nyilván. A Sonarr és a Radarr dönti el, mit keres és mit tölt le. Mi történik, ha a Sonarrt később telepítem? A doboz akkor is összeköti őket: amikor a Sonarr vagy a Radarr elindul, megkapja a forrásokat, gombnyomás nélkül. Mit mutat a „Stats” oldal? Forrásonként mutatja, hány keresésre és hány találatra jutott, és mennyi idő alatt válaszolt. Így látod, melyik forrás lassú. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-en.txt new file mode 100644 index 00000000..01bb1187 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-en.txt @@ -0,0 +1 @@ +Prowlarr — Install — Felhom.eu ← Back Prowlarr — Install Your download sources in one place for Sonarr and Radarr ~100M RAM Full description, screenshots Memory 100 MB / 7479 MB (1%) Current usage (0 MB) Prowlarr (+100 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-hu.txt new file mode 100644 index 00000000..24ae2577 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-install-hu.txt @@ -0,0 +1 @@ +Prowlarr — Telepítés — Felhom.eu ← Vissza Prowlarr — Telepítés A letöltési forrásaid egy helyen a Sonarrhoz és a Radarrhoz ~100M RAM Részletes leírás, képernyőképek Memória 100 MB / 7479 MB (1%) Jelenlegi használat (0 MB) Prowlarr (+100 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-en.txt new file mode 100644 index 00000000..d3a7894d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-en.txt @@ -0,0 +1 @@ +Prowlarr — Settings — Felhom.eu ← Apps Prowlarr Your download sources in one place ● Running prowlarr.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address prowlarr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-hu.txt new file mode 100644 index 00000000..58153e6a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/page-overview-hu.txt @@ -0,0 +1 @@ +Prowlarr — Felhom.eu ← Alkalmazások Prowlarr A letöltési források egy helyen ● Fut prowlarr.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím prowlarr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/record.json b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/record.json new file mode 100644 index 00000000..16379df9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/record.json @@ -0,0 +1,119 @@ +{ + "app": "prowlarr", + "sub": "prowlarr", + "fixture": "ProwlarrBox", + "started": "2026-10-24T14:27:46Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/prowlarr/install", + "hu_len": 889, + "en_len": 805, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/prowlarr/install -> 200 'Prowlarr — Telepítés — Felhom.eu' | shot /root/shots/prowlarr-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/prowlarr/install -> 200 'Prowlarr — Telepítés — Felhom.eu' | shot /root/shots/prowlarr-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 20, + "front_door": true, + "seconds_to_front_door": 21 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fprowlarr.tester4.test%2F", + "http_port_80": "301 https://prowlarr.tester4.test/", + "guide": { + "path": "/apps/prowlarr/guide", + "hu_len": 2926, + "en_len": 2657, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/prowlarr", + "hu_len": 688, + "en_len": 701, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/prowlarr/guide -> 200 'Prowlarr — Felhom.eu' | shot /root/shots/prowlarr-after-guide-phone-hu.png hscroll=False", + "goto https://prowlarr.tester4.test/ -> 200 'Prowlarr' | shot /root/shots/prowlarr-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.599109831s\", \"last_run\": \"2026-10-24T14:29:13.586197424Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"prowlarr\", \"started_at\": \"2026-10-24T14:30:39.418953078Z\", \"last\": {\"op\": \"restore\", \"stack\": \"prowlarr\", \"ok\": true, \"message\": \"A(z) prowlarr: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:30:53.476156719Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "prowlarr": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "prowlarr": 114.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 236 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-front-desktop-hu.png new file mode 100644 index 00000000..c579984d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-guide-phone-hu.png new file mode 100644 index 00000000..394bf223 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-desktop-en.png new file mode 100644 index 00000000..891a5564 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-phone-hu.png new file mode 100644 index 00000000..c0be8e17 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/screens/prowlarr-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/prowlarr/walk.log b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/walk.log new file mode 100644 index 00000000..1cc5f709 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/prowlarr/walk.log @@ -0,0 +1,14 @@ +14:28:03Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:28:23Z [1] deployed, controller state=running, pinned={'prowlarr': 'lscr.io/linuxserver/prowlarr:version-2.6.5.5623'} +14:28:23Z gate: prowlarr is gated — passed as the household (cookie set) +14:28:23Z [1] installed: deployed 20 s, front door 21 s +14:28:33Z prowlarr: POST /tag felhomddcdda49 http=201 +14:28:37Z prowlarr: POST /appprofile felhom-profile-84c8f6 http=201 +14:28:50Z prowlarr: tag kept, app profile present=True +14:29:08Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:29:54Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'prowlarr', 'volumes_removed': ['prowlarr_prowlarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'St +14:30:39Z prowlarr: the seeded tag felhomddcdda49 is GONE +14:30:39Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:31:08Z prowlarr: tag kept, app profile present=True +14:31:50Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'prowlarr', 'volumes_removed': ['prowlarr_prowlarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kül +14:31:58Z == prowlarr done in 236 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent.console.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent.console.txt new file mode 100644 index 00000000..7dce0ff7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent.console.txt @@ -0,0 +1,15 @@ +16:19:03Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'QBT_ADMIN_PASSWORD'] +16:19:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:19:19Z [1] deployed, controller state=running, pinned={'qbittorrent': 'qbittorrentofficial/qbittorrent-nox:5.2.4-1'} +16:19:19Z [1] installed: deployed 15 s, front door 15 s +16:19:19Z qbittorrent: createCategory felhomff2841f9 http=200 +16:19:19Z qbittorrent: torrents/add http=200 +16:19:19Z qbittorrent: category kept, torrent present=True +16:19:41Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:20:26Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'qbittorrent', 'volumes_removed': ['qbittorrent_qbittorrent_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +16:20:35Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['QBT_ADMIN_PASSWORD', 'HDD_PATH'] +16:20:51Z qbittorrent: the seeded category felhomff2841f9 is GONE +16:20:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:21:06Z qbittorrent: category kept, torrent present=True +16:21:46Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'qbittorrent', 'volumes_removed': ['qbittorrent_qbittorrent_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +16:21:55Z == qbittorrent done in 171 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-en.txt new file mode 100644 index 00000000..20beeb76 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-en.txt @@ -0,0 +1 @@ +qBittorrent — Guide — Felhom.eu ← Apps qBittorrent Download torrents to your own drive, driven from the browser ● Running torrent.tester4.test Open ↗ Files ↗ What is it for? Download torrents to your own drive, driven from the browser You see the finished files in the file browser and in your media player Queueing, speed limits and scheduling: it can download at night and leave your line alone by day Radarr and Sonarr hand their downloads to this - without it they download nothing First steps Open torrent.tester4.test and sign in as admin with the password generated at install Keep the generated password: the box uses it to link the downloader with Sonarr and Radarr Downloads land on your drive, in the media/torrents folder. Sonarr and Radarr take them from there without using extra space Download only what you have the right to. Downloads go out from your household's internet address, and by the nature of a torrent the other participants see that address. Before you start Downloading uses your household's internet connection, and so does the uploading It accepts no incoming connections, because the box opens no port at home. Downloading works anyway: measured at 34 seeds and 4 MB/s on a well-seeded torrent. Only poorly seeded torrents are slower, and you upload less. If you want it, you can switch port forwarding on yourself in the app's own settings Add a torrent Add only a torrent whose content you have the right to, for example a Linux installer from its publisher's own site. In the bar at the top, select „Add Torrent Link...”. Paste the torrent or magnet link and select „Download”. If you have a torrent file, use „Add Torrent File...”. Stop and remove You can stop or remove a torrent at any time. Select the torrent and select „Stop”. „Start” carries on. To remove it, select „Remove”. To delete the downloaded files as well, tick „Also remove the content files”. Slower downloads by day You can make it use less of your internet line during the day. Select „Options”, then the „Speed” tab. Under „Alternative Rate Limits”, enter lower values. Tick „Schedule the use of alternative rate limits” and set when it applies. Save the settings at the bottom of the page. How long does it share? qBittorrent keeps sending a finished download to others. You can limit that. On the „BitTorrent” tab of „Options”, find „Seeding Limits”. With „When ratio reaches”, set after how many times the size it stops uploading. Save the settings at the bottom of the page. Frequently asked questions Where do the downloads go? To your drive, into the media/torrents folder. You see them in the file browser too. Do I have to set up the categories for Sonarr and Radarr? No. For every drive, the box created the categories that start with tv- and movies-, and switched on automatic management. Do not delete or rename them. If I remove the torrent, does the film leave the library too? No. Sonarr and Radarr put the same file into the library under a second name, and that stays after the torrent is removed. What does „Seeding” mean? The download is finished and qBittorrent is now sending it on to others. „Stop” ends that. Can I change where it saves? Do not. qBittorrent sees only the media/torrents folder on your drive; a file saved anywhere else is not on the drive, and Sonarr and Radarr cannot find it. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-hu.txt new file mode 100644 index 00000000..26104859 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-guide-hu.txt @@ -0,0 +1 @@ +qBittorrent — Felhom.eu ← Alkalmazások qBittorrent Torrent letöltés a saját gépedre, böngészőből vezérelve ● Fut torrent.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Torrentek letöltése a saját meghajtódra, a böngészőből vezérelve A letöltött fájlokat a fájlböngészőben és a médialejátszódban is látod Sorban állás, sebességkorlát és ütemezés: éjjel tölthet, nappal nem zavarja a netedet A Radarr és a Sonarr ehhez adja át a letöltéseket - enélkül azok nem töltenek le semmit Első lépések Nyisd meg a torrent.tester4.test címet, és lépj be az admin névvel és a telepítéskor kapott jelszóval Ne állíts be másik jelszót: a doboz ezzel a jelszóval köti össze a letöltőt a Sonarrral és a Radarrral A letöltések a meghajtódra kerülnek, a media/torrents mappába. A Sonarr és a Radarr innen veszi át őket, külön hely nélkül Csak olyan tartalmat tölts le, amihez jogod van. A letöltés a háztartásod internetcíméről történik, és a torrent természetéből adódóan a többi résztvevő látja a címedet. Előfeltételek A letöltés a háztartásod internetkapcsolatát használja, és a feltöltés is onnan megy Befelé irányuló kapcsolatot nem fogad, mert a doboz otthon egyetlen portot sem nyit. A letöltés ettől működik: mérve 34 forrás és 4 MB/s egy jól ellátott torrenten. Csak a kevés forrású torrentek lassabbak, és keveset tudsz visszatölteni. Ha szeretnéd, az alkalmazás saját beállításaiban te magad bekapcsolhatod a port-nyitást Torrent hozzáadása Csak olyan torrentet adj hozzá, amelynek a tartalmához jogod van, például egy Linux telepítőét a kiadó saját oldaláról. Kattints a felső sávban az „Add Torrent Link...” (torrent hozzáadása linkkel) gombra. Illeszd be a torrent vagy a magnet linkjét, és kattints a „Download” (Letöltés) gombra. Ha torrentfájlod van, használd az „Add Torrent File...” (torrentfájl hozzáadása) gombot. Leállítás és törlés Egy torrentet bármikor megállíthatsz vagy eltávolíthatsz. Jelöld ki a torrentet, és kattints a „Stop” (leállítás) gombra. A „Start” (indítás) folytatja. Eltávolításhoz kattints a „Remove” (eltávolítás) gombra. Ha a letöltött fájlokat is törölnéd, jelöld be az „Also remove the content files” (a fájlok törlése is) jelölőt. Lassabb letöltés napközben Beállíthatod, hogy napközben kevésbé terhelje a netedet. Kattints az „Options” (beállítások) gombra, majd a „Speed” (sebesség) lapra. Az „Alternative Rate Limits” (másodlagos korlát) részben adj meg alacsonyabb értékeket. Jelöld be a „Schedule the use of alternative rate limits” (ütemezés) jelölőt, és add meg, mikor legyen érvényes. Mentsd el a beállításokat a lap alján. Meddig ossza tovább? A kész letöltést a qBittorrent tovább küldi másoknak. Ezt korlátozhatod. Az „Options” (beállítások) „BitTorrent” lapján keresd a „Seeding Limits” (megosztási korlát) részt. A „When ratio reaches” (ha az arány eléri) jelölővel megadhatod, hányszoros feltöltés után álljon le. Mentsd el a beállításokat a lap alján. Gyakori kérdések Hová kerülnek a letöltések? A meghajtódra, a media/torrents mappába. A fájlböngészőben is látod őket. Be kell állítanom a Sonarr és a Radarr kategóriáit? Nem. A doboz minden meghajtóhoz létrehozta a tv- és a movies- kezdetű kategóriákat, és bekapcsolta az automatikus kezelést. Ezeket ne töröld és ne nevezd át. Ha eltávolítom a torrentet, eltűnik a film a könyvtárból is? Nem. A Sonarr és a Radarr ugyanazt a fájlt egy második néven tette a könyvtárba, ez a torrent eltávolítása után is megmarad. Mit jelent a „Seeding” állapot? A letöltés kész, és a qBittorrent most másoknak küldi tovább. Ezt a „Stop” gombbal leállíthatod. Megváltoztathatom, hová mentsen? Ne tedd. A qBittorrent csak a media/torrents mappát látja a meghajtódon, máshová mentett fájl nem a meghajtóra kerül, és a Sonarr meg a Radarr sem találja. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-en.txt new file mode 100644 index 00000000..212f9dea --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-en.txt @@ -0,0 +1 @@ +qBittorrent — Install — Felhom.eu ← Back qBittorrent — Install A torrent downloader with a web interface, on your own machine ~192M RAM Needs a hard drive Full description, screenshots Memory 192 MB / 7479 MB (2%) Current usage (0 MB) qBittorrent (+192 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Sign-in password * cannot be changed after install 👁 Generate The web interface password (username: admin). Generated at install. Do not change it: the box uses it to link the downloader with Sonarr and Radarr. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-hu.txt new file mode 100644 index 00000000..c9b212cc --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-install-hu.txt @@ -0,0 +1 @@ +qBittorrent — Telepítés — Felhom.eu ← Vissza qBittorrent — Telepítés Torrent letöltő webes felülettel, a saját gépeden ~192M RAM HDD szükséges Részletes leírás, képernyőképek Memória 192 MB / 7479 MB (2%) Jelenlegi használat (0 MB) qBittorrent (+192 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Belépési jelszó * telepítés után nem módosítható 👁 Generálás A webes felület jelszava (felhasználónév: admin). A telepítéskor készül. Ne változtasd meg: a doboz ezzel köti össze a letöltőt a Sonarrral és a Radarrral. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-en.txt new file mode 100644 index 00000000..2e567acb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-en.txt @@ -0,0 +1 @@ +qBittorrent — Settings — Felhom.eu ← Apps qBittorrent Download torrents to your own drive, driven from the browser ● Running torrent.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Sign-in password Show Address and keys These were created at install time and cannot be changed. Address torrent.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-hu.txt new file mode 100644 index 00000000..929c92a6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/page-overview-hu.txt @@ -0,0 +1 @@ +qBittorrent — Felhom.eu ← Alkalmazások qBittorrent Torrent letöltés a saját gépedre, böngészőből vezérelve ● Fut torrent.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Belépési jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím torrent.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/record.json b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/record.json new file mode 100644 index 00000000..5e95f0ad --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/record.json @@ -0,0 +1,129 @@ +{ + "app": "qbittorrent", + "sub": "torrent", + "fixture": "QBittorrentBox", + "started": "2026-10-24T16:18:45Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "QBT_ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/qbittorrent/install", + "hu_len": 1008, + "en_len": 945, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/qbittorrent/install -> 200 'qBittorrent — Telepítés — Felhom.eu' | shot /root/shots/qbittorrent-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/qbittorrent/install -> 200 'qBittorrent — Telepítés — Felhom.eu' | shot /root/shots/qbittorrent-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 15, + "front_door": true, + "seconds_to_front_door": 15 + }, + "stranger": "200", + "http_port_80": "301 https://torrent.tester4.test/", + "guide": { + "path": "/apps/qbittorrent/guide", + "hu_len": 3771, + "en_len": 3363, + "english_words_in_hu": [ + "the" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/qbittorrent", + "hu_len": 454, + "en_len": 453, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/qbittorrent/guide -> 200 'qBittorrent — Felhom.eu' | shot /root/shots/qbittorrent-after-guide-phone-hu.png hscroll=False", + "goto https://torrent.tester4.test/ -> 200 'qBittorrent WebUI' | shot /root/shots/qbittorrent-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"3.473614609s\", \"last_run\": \"2026-10-24T16:19:45.452245641Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"qbittorrent\", \"started_at\": \"2026-10-24T16:20:51.312038179Z\", \"last\": {\"op\": \"restore\", \"stack\": \"qbittorrent\", \"ok\": true, \"message\": \"A(z) qbittorrent: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:21:01.798234823Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "qbittorrent": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "qbittorrent": 77.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 171 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-front-desktop-hu.png new file mode 100644 index 00000000..c281a5f2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-guide-phone-hu.png new file mode 100644 index 00000000..95bb613e Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-desktop-en.png new file mode 100644 index 00000000..31ccaec1 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-phone-hu.png new file mode 100644 index 00000000..67b559d3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/screens/qbittorrent-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/walk.log b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/walk.log new file mode 100644 index 00000000..7dce0ff7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/qbittorrent/walk.log @@ -0,0 +1,15 @@ +16:19:03Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'QBT_ADMIN_PASSWORD'] +16:19:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:19:19Z [1] deployed, controller state=running, pinned={'qbittorrent': 'qbittorrentofficial/qbittorrent-nox:5.2.4-1'} +16:19:19Z [1] installed: deployed 15 s, front door 15 s +16:19:19Z qbittorrent: createCategory felhomff2841f9 http=200 +16:19:19Z qbittorrent: torrents/add http=200 +16:19:19Z qbittorrent: category kept, torrent present=True +16:19:41Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:20:26Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'qbittorrent', 'volumes_removed': ['qbittorrent_qbittorrent_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +16:20:35Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['QBT_ADMIN_PASSWORD', 'HDD_PATH'] +16:20:51Z qbittorrent: the seeded category felhomff2841f9 is GONE +16:20:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:21:06Z qbittorrent: category kept, torrent present=True +16:21:46Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'qbittorrent', 'volumes_removed': ['qbittorrent_qbittorrent_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/u +16:21:55Z == qbittorrent done in 171 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr.console.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr.console.txt new file mode 100644 index 00000000..fec74cd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr.console.txt @@ -0,0 +1,15 @@ +14:32:16Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:32:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:32:56Z [1] deployed, controller state=running, pinned={'radarr': 'lscr.io/linuxserver/radarr:6.4.4'} +14:32:56Z gate: radarr is gated — passed as the household (cookie set) +14:32:57Z [1] installed: deployed 40 s, front door 41 s +14:32:57Z radarr: tag create http=201 +14:32:57Z radarr: tags http=200 marker_present=True +14:33:17Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:34:02Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'radarr', 'volumes_removed': ['radarr_radarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:34:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:34:41Z radarr: tags http=200 marker_present=False +14:34:41Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:34:56Z radarr: tags http=200 marker_present=True +14:35:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'radarr', 'volumes_removed': ['radarr_radarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:35:47Z == radarr done in 211 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-en.txt new file mode 100644 index 00000000..ec978e12 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-en.txt @@ -0,0 +1 @@ +Radarr — Guide — Felhom.eu ← Apps Radarr Films download and file themselves ● Running radarr.tester4.test Open ↗ Files ↗ What is it for? Films are downloaded and filed on their own A wish list - films land in your library when they appear Quality rules, and an upgrade when a better copy shows up Works with Jellyfin/Plex and with download clients Details and cover art are fetched on their own First steps Open radarr.tester4.test and create your own sign-in Add your indexers (or use Prowlarr) Search for a film and add it to your list When you are done, press „Done, I set it up” on the dashboard Before you start An external hard drive is needed to keep the media files on A download client is needed (qBittorrent, for example - installed separately) Access to an indexer is needed for searching Add your first film Radarr finds and downloads a film as soon as it is available. In the menu on the left, under „Movies”, select „Add New”. Type the title of the film and select the right result. In „Root Folder”, choose the media/movies folder of the drive you want the film on. In „Tags”, type the tag of that same drive, for example hdd-1. Without a tag the film gets no download client. Leave „Start search for missing movie” ticked and select „Add Movie”. When does it search? Radarr searches only once a film may be available. When you add a film, „Minimum Availability” sets when the search starts. „Announced” and „In Cinemas” search early, and often find nothing. „Released” is the safest: it searches once the film is out for home viewing. Follow a download Downloads run in the background, so you can close the page. The „Queue” tab of the „Activity” menu shows what is downloading now. When a film is done, Radarr moves it into the film's folder by itself. Plex and Jellyfin see it there. The „Calendar” shows when a film you watch for comes out. When something does not work Radarr tells you itself when something is wrong. Look at the „Status” tab of the „System” menu: the „Health” part lists the problems. The „Download Clients” page of the „Settings” menu shows the download clients the box connected. If nothing is found, look at the „Indexers” page in Prowlarr: you need at least one source. Frequently asked questions Where does Radarr download from? From the sources (indexers) you add in Prowlarr. The box connects the two, but it neither provides nor suggests a source: that is your choice. Do I have to set up the download client and the folders? No. For every drive, the box connected the installed download clients (qBittorrent, Transmission), the root folder and the tag. You only add the film. Why is the same file in both the torrents and the movies folder? It does not take double space: it is one file with two names (a hardlink). The download client can keep sharing it, and your library stays tidy. It downloaded, but it is not in the library. Why? Radarr does not import if less than 10 GB would be left on the drive. The box set this: „Settings”, „Media Management”, „Minimum Free Space”. Free up some space and it goes on at the next check. Does it suggest films? Yes: the „Discover” page shows ideas based on the films you have, and you can add one from there with a click. What may I download? Only content you have the right to, for example films in the public domain. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-hu.txt new file mode 100644 index 00000000..24a18069 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-guide-hu.txt @@ -0,0 +1 @@ +Radarr — Felhom.eu ← Alkalmazások Radarr Automatikus film letöltő és rendszerező ● Fut radarr.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Filmek automatikus letöltése és rendszerezése Kívánságlista - filmek automatikusan a könyvtáradba kerülnek Minőség kezelés és automatikus frissítés jobb minőségre Integráció Jellyfin/Plex és letöltő kliensekkel Metaadat és borítókép automatikus letöltés Első lépések Nyisd meg a radarr.tester4.test címet, és hozd létre a saját belépésedet Add hozzá az indexereket (vagy használj Prowlarr-t) Keress rá egy filmre és add hozzá a listádhoz Ha kész, a vezérlőpulton nyomd meg: „Kész, beállítottam” Előfeltételek Külső HDD szükséges a médiafájlok tárolásához Letöltő kliens szükséges (pl. qBittorrent - külön telepítendő) Indexer hozzáférés szükséges a kereséshez Első film hozzáadása A Radarr megkeresi és letölti a filmet, amint elérhető. A bal oldali menüben a „Movies” (Filmek) alatt kattints az „Add New” (Új hozzáadása) pontra. Írd be a film címét, és kattints a megfelelő találatra. A „Root Folder” (gyökérmappa) mezőben válaszd annak a meghajtónak a media/movies mappáját, ahová a filmet szeretnéd. A „Tags” (címkék) mezőbe írd ugyanannak a meghajtónak a címkéjét, például hdd-1. Címke nélkül a film nem kap letöltőt. Hagyd bejelölve a „Start search for missing movie” (film keresése) jelölőt, és kattints az „Add Movie” (Film hozzáadása) gombra. Mikor keresi a filmet? A Radarr csak akkor keres, amikor a film már elérhető lehet. A film hozzáadásakor a „Minimum Availability” (legkorábbi elérhetőség) mezőben állítod, mikor kezdjen keresni. Az „Announced” (bejelentve) és az „In Cinemas” (moziban) korán keres, gyakran eredmény nélkül. A „Released” (megjelent) a legbiztosabb: akkor keres, amikor a filmet már kiadták otthoni nézésre. A letöltés követése A letöltés a háttérben fut, az oldalt be is zárhatod. Az „Activity” (Tevékenység) menü „Queue” (Sor) lapján látod, mi töltődik éppen. Ha a film letöltődött, a Radarr magától átteszi a film mappájába. A Plex és a Jellyfin innen látja. A „Calendar” (Naptár) mutatja, mikor jelenik meg egy figyelt film. Ha valami nem működik A Radarr maga jelzi, ha valami hibás. Nézd meg a „System” (Rendszer) menü „Status” (Állapot) lapját: a „Health” (állapot) rész sorolja a hibákat. A „Settings” (Beállítások) menü „Download Clients” (letöltő kliensek) oldalán látod a letöltőket, amelyeket a doboz bekötött. Ha nincs találat, nézd meg a Prowlarr „Indexers” (indexerek) oldalát: legalább egy forrás kell. Gyakori kérdések Honnan tölt le a Radarr? Azokról a forrásokról (indexerekről), amelyeket te adsz meg a Prowlarrban. A doboz összeköti a kettőt, de forrást nem ad és nem ajánl: ez a te döntésed. Be kell állítanom a letöltő klienst és a mappákat? Nem. A doboz minden meghajtódhoz bekötötte a telepített letöltőket (qBittorrent, Transmission), a gyökérmappát és a címkét. Neked csak a filmet kell hozzáadnod. Miért van ugyanaz a fájl a torrents és a movies mappában is? Nem foglal dupla helyet: ugyanaz a fájl két néven (hardlink). A letöltő tovább oszthatja, a könyvtárad pedig rendezett marad. Letöltötte, de nem került a könyvtárba. Miért? Ha a meghajtón kevesebb mint 10 GB maradna, a Radarr nem importál. Ezt a doboz állította be: „Settings”, „Media Management”, „Minimum Free Space” (legkevesebb szabad hely). Szabadíts fel helyet, és a következő ellenőrzéskor folytatja. Ajánl filmeket? Igen: a „Discover” (Felfedezés) oldal a meglévő filmjeid alapján mutat ötleteket, és onnan egy kattintással hozzáadhatod őket. Mit tölthetek le? Csak olyan tartalmat, amihez jogod van, például közkincs (public domain) filmeket. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-en.txt new file mode 100644 index 00000000..5554bfd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-en.txt @@ -0,0 +1 @@ +Radarr — Install — Felhom.eu ← Back Radarr — Install Films download and file themselves ~150M RAM Needs a hard drive Full description, screenshots Memory 150 MB / 7479 MB (2%) Current usage (0 MB) Radarr (+150 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-hu.txt new file mode 100644 index 00000000..1e4babf0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-install-hu.txt @@ -0,0 +1 @@ +Radarr — Telepítés — Felhom.eu ← Vissza Radarr — Telepítés Automatikus film letöltő és rendszerező ~150M RAM HDD szükséges Részletes leírás, képernyőképek Memória 150 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Radarr (+150 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-en.txt new file mode 100644 index 00000000..ca0698fe --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-en.txt @@ -0,0 +1 @@ +Radarr — Settings — Felhom.eu ← Apps Radarr Films download and file themselves ● Running radarr.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address radarr.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-hu.txt new file mode 100644 index 00000000..47ca9331 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/page-overview-hu.txt @@ -0,0 +1 @@ +Radarr — Felhom.eu ← Alkalmazások Radarr Automatikus film letöltő és rendszerező ● Fut radarr.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím radarr.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/record.json b/documentation/audits/catalog-sweep-2026-10-24/radarr/record.json new file mode 100644 index 00000000..2cbc1dae --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/record.json @@ -0,0 +1,124 @@ +{ + "app": "radarr", + "sub": "radarr", + "fixture": "Arr", + "started": "2026-10-24T14:32:00Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/radarr/install", + "hu_len": 766, + "en_len": 691, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/radarr/install -> 200 'Radarr — Telepítés — Felhom.eu' | shot /root/shots/radarr-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/radarr/install -> 200 'Radarr — Telepítés — Felhom.eu' | shot /root/shots/radarr-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 40, + "front_door": true, + "seconds_to_front_door": 41 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fradarr.tester4.test%2F", + "http_port_80": "301 https://radarr.tester4.test/", + "guide": { + "path": "/apps/radarr/guide", + "hu_len": 3654, + "en_len": 3347, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/radarr", + "hu_len": 727, + "en_len": 731, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/radarr/guide -> 200 'Radarr — Felhom.eu' | shot /root/shots/radarr-after-guide-phone-hu.png hscroll=False", + "goto https://radarr.tester4.test/ -> 200 'Radarr' | shot /root/shots/radarr-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.601712837s\", \"last_run\": \"2026-10-24T14:33:21.721783471Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"radarr\", \"started_at\": \"2026-10-24T14:34:41.646082159Z\", \"last\": {\"op\": \"restore\", \"stack\": \"radarr\", \"ok\": true, \"message\": \"A(z) radarr: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:34:55.614502835Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "radarr": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "radarr": 99.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 211 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-front-desktop-hu.png new file mode 100644 index 00000000..01de8ea3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-guide-phone-hu.png new file mode 100644 index 00000000..70a99d1f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-desktop-en.png new file mode 100644 index 00000000..3614308a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-phone-hu.png new file mode 100644 index 00000000..c079710a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radarr/screens/radarr-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radarr/walk.log b/documentation/audits/catalog-sweep-2026-10-24/radarr/walk.log new file mode 100644 index 00000000..fec74cd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radarr/walk.log @@ -0,0 +1,15 @@ +14:32:16Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:32:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:32:56Z [1] deployed, controller state=running, pinned={'radarr': 'lscr.io/linuxserver/radarr:6.4.4'} +14:32:56Z gate: radarr is gated — passed as the household (cookie set) +14:32:57Z [1] installed: deployed 40 s, front door 41 s +14:32:57Z radarr: tag create http=201 +14:32:57Z radarr: tags http=200 marker_present=True +14:33:17Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:34:02Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'radarr', 'volumes_removed': ['radarr_radarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:34:11Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:34:41Z radarr: tags http=200 marker_present=False +14:34:41Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:34:56Z radarr: tags http=200 marker_present=True +14:35:39Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'radarr', 'volumes_removed': ['radarr_radarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:35:47Z == radarr done in 211 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale.console.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale.console.txt new file mode 100644 index 00000000..94178d28 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale.console.txt @@ -0,0 +1,15 @@ +13:09:29Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['RADICALE_USER', 'RADICALE_PASSWORD'] +13:09:29Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:09:54Z [1] deployed, controller state=running, pinned={'radicale': 'ghcr.io/kozea/radicale:3.8.1'} +13:09:54Z [1] installed: deployed 25 s, front door 25 s +13:09:54Z radicale: MKCALENDAR /csalad/felhom-c0022413/ http=201 +13:09:55Z radicale: PUT event http=201 +13:09:58Z radicale: readback http=200 found=True (controls: no auth 401, wrong 401, absent 404) +13:10:15Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:10:58Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'radicale', 'volumes_removed': ['radicale_radicale_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +13:11:06Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['RADICALE_PASSWORD', 'RADICALE_USER'] +13:11:30Z radicale: readback http=404 found=False (controls: no auth 401, wrong 401, absent 404) +13:11:30Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:11:47Z radicale: readback http=200 found=True (controls: no auth 401, wrong 401, absent 404) +13:12:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'radicale', 'volumes_removed': ['radicale_radicale_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +13:12:35Z == radicale done in 186 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-en.txt new file mode 100644 index 00000000..53a64693 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-en.txt @@ -0,0 +1 @@ +Radicale — Guide — Felhom.eu ← Apps Radicale Calendar and contacts on your own server - your phone syncs with it ● Running calendar.tester4.test Open ↗ What is it for? Your phone calendar and contacts on your own server, not with Google or Apple A shared family calendar that everyone sees on their phone On Android DAVx5, on iPhone and Mac the built-in calendar syncs with it Thunderbird and other desktop calendars can use it too First steps Open calendar.tester4.test and sign in with the name and password shown on the settings page Create a calendar and an address book („Create a new addressbook or calendar”) On Android install DAVx5 and enter: https://calendar.tester4.test, the name and the password On iPhone: Settings, Calendar, Accounts, Add Account, Other, CalDAV account - server: calendar.tester4.test A calendar for every family member Even with one shared login, everyone can have their own calendar in their own colour. On calendar.tester4.test, select the plus sign labelled „Create a new addressbook or calendar”. In the „Type:” list, choose „Calendar”. Type the family member's name in „Title:”, and pick a colour in „Color:”. Select „Create”. On the phone, turn the new calendar on for syncing. Bring over an existing calendar or contacts You bring over your old calendar as an .ics file and your contacts as a .vcf file. In your old calendar or contacts app, save the data into an .ics or .vcf file. On calendar.tester4.test, select the upload sign labelled „Upload an addressbook or calendar”. In „File:”, choose the file and select „Upload”. When you see the upload succeeded, select „Close”: the calendar shows in the list. The calendar on a computer Thunderbird and other desktop calendars connect with the calendar's address. On calendar.tester4.test you see the calendar's address under its name; the copy button next to it puts it on the clipboard. In the desktop calendar, add a new network (CalDAV) calendar and paste the address. When it asks you to sign in, enter the same name and password as on your phone. Rename or delete a calendar You can change a calendar's name and colour at any time. Under the calendar, select the „Edit” sign, change „Title:” or „Color:”, and select „Save”. To delete it, select the „Delete” sign and type the word shown into the box. Select „Delete”. Deleting is final, and the calendar goes from the phones too. Frequently asked questions Do family members see each other's calendars? Yes. Radicale has one shared login, so everyone sees every calendar and address book. On their phone, each person chooses which ones to show. Can I reach it away from home? Yes. The box made it reachable on calendar.tester4.test, so your phone syncs from anywhere with the name and the password. I made a calendar, but it is not on my phone. Why? The phone does not always turn a new calendar on by itself. Open the account in the sync app, refresh the list of calendars and turn the new one on. Can I keep a task list too? Yes. For a new collection, choose „Tasks” or „Calendar and tasks” in the „Type:” list. On the phone, a task app that speaks CalDAV shows it. What happens if I delete a calendar? The calendar and all its events are gone for good, from the phones too. If you are unsure, first save a copy to your computer with the download sign under the calendar. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-hu.txt new file mode 100644 index 00000000..3f64ff81 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-guide-hu.txt @@ -0,0 +1 @@ +Radicale — Felhom.eu ← Alkalmazások Radicale Naptár és névjegyek a saját szervereden - a telefonod szinkronizál vele ● Fut calendar.tester4.test Megnyitás ↗ Mire használható? A telefonod naptára és névjegyei a saját szervereden, nem a Google-nél vagy az Apple-nél Közös családi naptár, amit mindenki lát a telefonján Androidon a DAVx5, iPhone-on és Macen a beépített naptár szinkronizál vele Thunderbird és más asztali naptárak is használhatják Első lépések Nyisd meg a calendar.tester4.test címet, és jelentkezz be a Beállítások oldalon látható névvel és jelszóval Hozz létre egy naptárat és egy címjegyzéket („Create a new addressbook or calendar”) Androidon telepítsd a DAVx5-öt, és add meg: https://calendar.tester4.test, a nevet és a jelszót iPhone-on: Beállítások, Naptár, Fiókok, Új fiók, Egyéb, CalDAV-fiók - szerver: calendar.tester4.test Saját naptár minden családtagnak Egy közös bejelentkezés mellett is lehet mindenkinek külön naptára, saját színnel. A calendar.tester4.test oldalon kattints a plusz jelre, amelynek a felirata „Create a new addressbook or calendar” (új címjegyzék vagy naptár). A „Type:” (típus) listában válaszd a „Calendar” (naptár) pontot. A „Title:” (cím) mezőbe írd be a családtag nevét, a „Color:” (szín) mezőben válassz színt. Kattints a „Create” (létrehozás) gombra. A telefonon kapcsold be az új naptárat a szinkronizálásban. Meglévő naptár vagy névjegyek áthozása A régi naptáradat .ics, a névjegyeidet .vcf fájlként hozhatod át. A régi naptár- vagy névjegy-alkalmazásodban mentsd ki az adatokat .ics vagy .vcf fájlba. A calendar.tester4.test oldalon kattints a feltöltés jelre, amelynek a felirata „Upload an addressbook or calendar” (címjegyzék vagy naptár feltöltése). A „File:” (fájl) mezőben válaszd ki a fájlt, és kattints az „Upload” (feltöltés) gombra. Ha a sikeres feltöltés üzenetét látod, kattints a „Close” (bezárás) gombra: a naptár megjelenik a listában. Naptár a számítógépen A Thunderbird és más asztali naptárak a naptár címével csatlakoznak. A calendar.tester4.test oldalon a naptár neve alatt látod a címét; a mellette lévő másolás gombbal vágólapra teszed. Az asztali naptárban adj hozzá új hálózati (CalDAV) naptárat, és illeszd be a címet. Bejelentkezéskor ugyanazt a nevet és jelszót add meg, mint a telefonodon. Naptár átnevezése vagy törlése A naptár nevét és színét bármikor módosíthatod. A naptár alatt kattints az „Edit” (szerkesztés) jelre, írd át a „Title:” vagy a „Color:” mezőt, és kattints a „Save” (mentés) gombra. Törléshez kattints a „Delete” (törlés) jelre, és írd be a mezőbe a megjelenő szót. Kattints a „Delete” gombra. A törlés végleges, és a telefonokról is eltűnik a naptár. Gyakori kérdések Látják a családtagok egymás naptárát? Igen. A Radicale-ban egy közös bejelentkezés van, ezért mindenki minden naptárat és címjegyzéket lát. A telefonján mindenki kiválaszthatja, melyiket mutassa. Elérem otthonon kívül is? Igen. A doboz a calendar.tester4.test címen elérhetővé tette, így a telefonod bárhonnan szinkronizál a névvel és a jelszóval. Létrehoztam egy naptárat, de nincs a telefonomon. Miért? A telefon az új naptárat nem mindig kapcsolja be magától. Nyisd meg a fiókot a szinkronizáló appban, frissítsd a naptárak listáját, és kapcsold be az újat. Tudok feladatlistát is vezetni? Igen. Új gyűjteménynél a „Type:” listában válaszd a „Tasks” (feladatok) vagy a „Calendar and tasks” (naptár és feladatok) típust. A telefonon olyan feladat-app jeleníti meg, amely tud CalDAV-ot. Mi történik, ha törlök egy naptárat? A naptár és minden eseménye végleg eltűnik, a telefonokról is. Ha bizonytalan vagy, előtte a naptár alatti letöltés jellel ments egy példányt a gépedre. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-en.txt new file mode 100644 index 00000000..5a2dd45d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-en.txt @@ -0,0 +1 @@ +Radicale — Install — Felhom.eu ← Back Radicale — Install Calendar and contacts on your own server (CalDAV / CardDAV) ~40M RAM Full description, screenshots Memory 40 MB / 7479 MB (0%) Current usage (0 MB) Radicale (+40 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). User name * cannot be changed after install You sign in with this name on your phone and in the browser Password * cannot be changed after install 👁 Generate Generated at install. Your phone calendar and contacts sign in with it too. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-hu.txt new file mode 100644 index 00000000..6255f808 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-install-hu.txt @@ -0,0 +1 @@ +Radicale — Telepítés — Felhom.eu ← Vissza Radicale — Telepítés Naptár és névjegyek a saját szervereden (CalDAV / CardDAV) ~40M RAM Részletes leírás, képernyőképek Memória 40 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Radicale (+40 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Felhasználónév * telepítés után nem módosítható Ezzel a névvel jelentkezel be a telefonodon és a böngészőben Jelszó * telepítés után nem módosítható 👁 Generálás Telepítéskor generált jelszó. A telefonod naptára és névjegyei is ezzel jelentkeznek be. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-en.txt new file mode 100644 index 00000000..765b9c14 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-en.txt @@ -0,0 +1 @@ +Radicale — Settings — Felhom.eu ← Apps Radicale Calendar and contacts on your own server - your phone syncs with it ● Running calendar.tester4.test Open ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. User name Password Show Address and keys These were created at install time and cannot be changed. Address calendar.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-hu.txt new file mode 100644 index 00000000..19b86903 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/page-overview-hu.txt @@ -0,0 +1 @@ +Radicale — Felhom.eu ← Alkalmazások Radicale Naptár és névjegyek a saját szervereden - a telefonod szinkronizál vele ● Fut calendar.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Felhasználónév Jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím calendar.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/record.json b/documentation/audits/catalog-sweep-2026-10-24/radicale/record.json new file mode 100644 index 00000000..164b0564 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/record.json @@ -0,0 +1,129 @@ +{ + "app": "radicale", + "sub": "calendar", + "fixture": "Radicale", + "started": "2026-10-24T13:09:15Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "RADICALE_USER", + "text", + true + ], + [ + "RADICALE_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/radicale/install", + "hu_len": 1135, + "en_len": 1039, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/radicale/install -> 200 'Radicale — Telepítés — Felhom.eu' | shot /root/shots/radicale-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/radicale/install -> 200 'Radicale — Telepítés — Felhom.eu' | shot /root/shots/radicale-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://192.168.0.157/.web", + "http_port_80": "301 https://calendar.tester4.test/", + "guide": { + "path": "/apps/radicale/guide", + "hu_len": 3690, + "en_len": 3358, + "english_words_in_hu": [ + "and" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/radicale", + "hu_len": 433, + "en_len": 420, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/radicale/guide -> 200 'Radicale — Felhom.eu' | shot /root/shots/radicale-after-guide-phone-hu.png hscroll=False", + "goto https://calendar.tester4.test/.web/ -> 200 'Radicale Web Interface - https://calendar.tester4.test - Login' | shot /root/shots/radicale-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.540777595s\", \"last_run\": \"2026-10-24T13:10:17.27113277Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"radicale\", \"started_at\": \"2026-10-24T13:11:30.353164623Z\", \"last\": {\"op\": \"restore\", \"stack\": \"radicale\", \"ok\": true, \"message\": \"A(z) radicale: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:11:41.035296152Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "radicale": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "radicale": 32.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 186 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-front-desktop-hu.png new file mode 100644 index 00000000..b63aa86b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-guide-phone-hu.png new file mode 100644 index 00000000..a2294e88 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-desktop-en.png new file mode 100644 index 00000000..854c2e1b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-phone-hu.png new file mode 100644 index 00000000..63f2dbb8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/radicale/screens/radicale-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/radicale/walk.log b/documentation/audits/catalog-sweep-2026-10-24/radicale/walk.log new file mode 100644 index 00000000..94178d28 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/radicale/walk.log @@ -0,0 +1,15 @@ +13:09:29Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['RADICALE_USER', 'RADICALE_PASSWORD'] +13:09:29Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:09:54Z [1] deployed, controller state=running, pinned={'radicale': 'ghcr.io/kozea/radicale:3.8.1'} +13:09:54Z [1] installed: deployed 25 s, front door 25 s +13:09:54Z radicale: MKCALENDAR /csalad/felhom-c0022413/ http=201 +13:09:55Z radicale: PUT event http=201 +13:09:58Z radicale: readback http=200 found=True (controls: no auth 401, wrong 401, absent 404) +13:10:15Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:10:58Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'radicale', 'volumes_removed': ['radicale_radicale_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stac +13:11:06Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['RADICALE_PASSWORD', 'RADICALE_USER'] +13:11:30Z radicale: readback http=404 found=False (controls: no auth 401, wrong 401, absent 404) +13:11:30Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:11:47Z radicale: readback http=200 found=True (controls: no auth 401, wrong 401, absent 404) +13:12:26Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'radicale', 'volumes_removed': ['radicale_radicale_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső +13:12:35Z == radicale done in 186 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly.console.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly.console.txt new file mode 100644 index 00000000..caf3d353 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly.console.txt @@ -0,0 +1,10 @@ +20:53:35Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:54:45Z [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'} +20:54:45Z gate: poll is gated — passed as the household (cookie set) +20:54:45Z [1] installed: deployed 71 s, front door 71 s +20:54:46Z rallly: sign-up http=400 +20:54:46Z rallly: refused :: HTTP/2 400 content-security-policy: frame-ancestors 'none' content-type: application/json date: Sat, 24 Oct 2026 20:54:46 GMT strict-transport-security: max-age=86400 vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch {"message":"Email and password sign up is not e +20:55:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:56:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +20:58:12Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +20:58:20Z == rallly done in 286 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/console.txt new file mode 100644 index 00000000..5b7f5f00 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/console.txt @@ -0,0 +1,10 @@ +16:22:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:23:15Z [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'} +16:23:15Z gate: poll is gated — passed as the household (cookie set) +16:23:15Z [1] installed: deployed 61 s, front door 61 s +16:23:16Z rallly: sign-up http=400 +16:23:38Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:23:59Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:25:12Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +16:27:02Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +16:27:10Z == rallly done in 296 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-en.txt new file mode 100644 index 00000000..7bc65255 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Rallly — Guide — Felhom.eu ← Apps Rallly Vote on a date - a Doodle alternative on your own server ● Running poll.tester4.test Open ↗ What is it for? Agree on a time together, by voting Organise meetings and events People can vote without signing up E-mail notices and reminders A simple, clean interface First steps Open poll.tester4.test in your browser Create a new poll Enter the possible dates Share the link with everybody Choose the final date When everyone has voted, you choose the winning date. Open the poll and select the „Manage” menu. Choose „Schedule”. Pick the date most people said yes to, and select „Schedule”. On the poll page, „Add to calendar” puts the date into your calendar. A new date for the poll If none of the dates suits, you can add new ones. On the poll, select the „Manage” menu and choose „Edit options”. Mark new days or times in the calendar. Select „Save”. The earlier votes stay. A secret vote You can set it so that participants do not see each other's votes or names. On the poll, select the „Manage” menu and choose „Edit settings”. Turn on „Hide votes” or „Hide participant names”. Select „Save”. Close the poll When you expect no more votes, you can close the poll. On the poll, select the „Manage” menu and choose „Close”. After that nobody can vote. If you need it again, „Reopen poll” in the same place opens it again. „Export to CSV” in the „Manage” menu saves the result as a spreadsheet. Frequently asked questions Do you need an account to vote? Voters do not. The participant opens the link, picks the dates that suit, types their name and selects „Save availability”. To create a poll, though, you must be signed in. Why does no e-mail come from Rallly? Rallly sends its sign-in code and its notices by e-mail, so without e-mail you cannot even sign in. On the dashboard, turn on „Allow sending e-mail for this app” on Rallly's „Settings” tab. What does the „If need be” answer mean? That the date is not ideal, but the participant can make it. Keep it in mind when you choose the final date. I got my vote wrong. Can I fix it? Yes. In the list of participants, choose „Edit votes” in the menu next to your name. How do I delete a poll? Open the poll, choose „Delete” in the „Manage” menu, and confirm. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-hu.txt new file mode 100644 index 00000000..d6afc6fe --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Rallly — Felhom.eu ← Alkalmazások Rallly Időpont szavazás - Doodle alternatíva a saját szerveren ● Fut poll.tester4.test Megnyitás ↗ Mire használható? Közös időpont egyeztetés szavazással Találkozók, események szervezése Résztvevők regisztráció nélkül szavazhatnak Email értesítések és emlékeztetők Egyszerű, tiszta felület Első lépések Nyisd meg a poll.tester4.test címet a böngészőben Hozz létre egy új szavazást Add meg a lehetséges időpontokat Oszd meg a linket a résztvevőkkel A végleges időpont kiválasztása Ha mindenki szavazott, kiválasztod a nyertes időpontot. Nyisd meg a szavazást, és kattints a „Kezelés” menüre. Válaszd a „Véglegesítés” pontot. Jelöld ki az időpontot, amelyre a legtöbben mondtak igent, és kattints a „Véglegesítés” gombra. A szavazás oldalán a „Hozzáadás a naptárhoz” gombbal beteheted az időpontot a naptáradba. Új időpont a szavazáshoz Ha egyik időpont sem jó, újakat adhatsz hozzá. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Lehetőségek módosítása” pontot. Jelölj ki új napokat vagy időpontokat a naptárban. Kattints a „Mentés” gombra. A régi szavazatok megmaradnak. Titkos szavazás Beállíthatod, hogy a résztvevők ne lássák egymás szavazatát vagy nevét. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Beállítások szerkesztése” pontot. Kapcsold be a „Szavazatok elrejtése” vagy a „Résztvevők nevének elrejtése” beállítást. Kattints a „Mentés” gombra. A szavazás lezárása Ha már nem vársz több szavazatot, lezárhatod a szavazást. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Szüneteltetés” pontot. Ezután senki nem tud szavazni. Ha mégis kell, ugyanitt a „Szavazás újranyitása” ponttal újra megnyithatod. Az eredményt a „Kezelés” menü „Exportálás CSV fájlba” pontjával táblázatba mentheted. Gyakori kérdések Kell fiók a szavazáshoz? A szavazóknak nem. A résztvevő megnyitja a linket, kiválasztja a jó időpontokat, beírja a nevét, és az „Elérhetőség mentése” gombra kattint. Szavazást létrehozni viszont csak belépve lehet. Miért nem jön e-mail a Rallly-tól? A Rallly e-mailben küldi a belépő kódot és az értesítéseket, ezért e-mail nélkül belépni sem tudsz. A vezérlőpulton, a Rallly „Beállítások” fülén kapcsold be az „Email-küldés engedélyezése ennél az alkalmazásnál” lehetőséget. Mit jelent a „Ha szükséges” válasz? Azt, hogy az időpont nem ideális, de a résztvevő meg tudja oldani. Véglegesítéskor ezt is érdemes figyelembe venni. Elrontottam a szavazatomat. Javíthatom? Igen. A résztvevők listájában a neved melletti menüben válaszd a „Szavazatok szerkesztése” pontot. Hogyan törlök egy szavazást? Nyisd meg a szavazást, a „Kezelés” menüben válaszd a „Törlés” pontot, és erősítsd meg. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-en.txt new file mode 100644 index 00000000..a4b76fd7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-en.txt @@ -0,0 +1 @@ +Rallly — Install — Felhom.eu ← Back Rallly — Install Vote on a date (a Doodle alternative) ~384M RAM Full description, screenshots Memory 384 MB / 7479 MB (5%) Current usage (0 MB) Rallly (+384 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-hu.txt new file mode 100644 index 00000000..cbeefd1d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Rallly — Telepítés — Felhom.eu ← Vissza Rallly — Telepítés Időpont szavazás (Doodle alternatíva) ~384M RAM Részletes leírás, képernyőképek Memória 384 MB / 7479 MB (5%) Jelenlegi használat (0 MB) Rallly (+384 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-en.txt new file mode 100644 index 00000000..c0bf87a3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Rallly — Settings — Felhom.eu ← Apps Rallly Vote on a date - a Doodle alternative on your own server ● Running poll.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app This app signs you in with a link by e-mail. It needs the app's e-mail sending (Settings tab). Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: rallly@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address poll.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-hu.txt new file mode 100644 index 00000000..386aca75 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Rallly — Felhom.eu ← Alkalmazások Rallly Időpont szavazás - Doodle alternatíva a saját szerveren ● Fut poll.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Ez az alkalmazás e-mailben küld belépési linket. Ehhez az alkalmazás e-mail küldése kell (Beállítások fül). Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: rallly@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím poll.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/record.json new file mode 100644 index 00000000..42ca5d00 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/record.json @@ -0,0 +1,131 @@ +{ + "app": "rallly", + "sub": "poll", + "fixture": "Rallly", + "started": "2026-10-24T16:21:56Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_PASSWORD", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/rallly/install", + "hu_len": 970, + "en_len": 871, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/rallly/install -> 200 'Rallly — Telepítés — Felhom.eu' | shot /root/shots/rallly-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/rallly/install -> 200 'Rallly — Telepítés — Felhom.eu' | shot /root/shots/rallly-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 61, + "front_door": true, + "seconds_to_front_door": 61 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fpoll.tester4.test%2F", + "http_port_80": "301 https://poll.tester4.test/", + "guide": { + "path": "/apps/rallly/guide", + "hu_len": 2697, + "en_len": 2292, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/rallly", + "hu_len": 1148, + "en_len": 1073, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/rallly/guide -> 200 'Rallly — Felhom.eu' | shot /root/shots/rallly-after-guide-phone-hu.png hscroll=False", + "goto https://poll.tester4.test/ -> 200 'Főoldal' | shot /root/shots/rallly-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"18.430127207s\", \"last_run\": \"2026-10-24T16:23:57.248287163Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 30, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"rallly\", \"started_at\": \"2026-10-24T16:23:59.028040353Z\", \"last\": {\"op\": \"restore\", \"stack\": \"rallly\", \"ok\": true, \"message\": \"A(z) rallly: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:24:27.179255729Z\"}, \"last_recent\": true}", + "state": "running" + }, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "rallly": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "rallly-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "rallly": 337.6, + "rallly-postgres": 38.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 296 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-front-desktop-hu.png new file mode 100644 index 00000000..444a750f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-guide-phone-hu.png new file mode 100644 index 00000000..cc7ee600 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-desktop-en.png new file mode 100644 index 00000000..252c3be0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-phone-hu.png new file mode 100644 index 00000000..fc08a763 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/screens/rallly-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/walk.log new file mode 100644 index 00000000..5b7f5f00 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/first-run/walk.log @@ -0,0 +1,10 @@ +16:22:14Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:23:15Z [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'} +16:23:15Z gate: poll is gated — passed as the household (cookie set) +16:23:15Z [1] installed: deployed 61 s, front door 61 s +16:23:16Z rallly: sign-up http=400 +16:23:38Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:23:59Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:25:12Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +16:27:02Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +16:27:10Z == rallly done in 296 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-en.txt new file mode 100644 index 00000000..7bc65255 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-en.txt @@ -0,0 +1 @@ +Rallly — Guide — Felhom.eu ← Apps Rallly Vote on a date - a Doodle alternative on your own server ● Running poll.tester4.test Open ↗ What is it for? Agree on a time together, by voting Organise meetings and events People can vote without signing up E-mail notices and reminders A simple, clean interface First steps Open poll.tester4.test in your browser Create a new poll Enter the possible dates Share the link with everybody Choose the final date When everyone has voted, you choose the winning date. Open the poll and select the „Manage” menu. Choose „Schedule”. Pick the date most people said yes to, and select „Schedule”. On the poll page, „Add to calendar” puts the date into your calendar. A new date for the poll If none of the dates suits, you can add new ones. On the poll, select the „Manage” menu and choose „Edit options”. Mark new days or times in the calendar. Select „Save”. The earlier votes stay. A secret vote You can set it so that participants do not see each other's votes or names. On the poll, select the „Manage” menu and choose „Edit settings”. Turn on „Hide votes” or „Hide participant names”. Select „Save”. Close the poll When you expect no more votes, you can close the poll. On the poll, select the „Manage” menu and choose „Close”. After that nobody can vote. If you need it again, „Reopen poll” in the same place opens it again. „Export to CSV” in the „Manage” menu saves the result as a spreadsheet. Frequently asked questions Do you need an account to vote? Voters do not. The participant opens the link, picks the dates that suit, types their name and selects „Save availability”. To create a poll, though, you must be signed in. Why does no e-mail come from Rallly? Rallly sends its sign-in code and its notices by e-mail, so without e-mail you cannot even sign in. On the dashboard, turn on „Allow sending e-mail for this app” on Rallly's „Settings” tab. What does the „If need be” answer mean? That the date is not ideal, but the participant can make it. Keep it in mind when you choose the final date. I got my vote wrong. Can I fix it? Yes. In the list of participants, choose „Edit votes” in the menu next to your name. How do I delete a poll? Open the poll, choose „Delete” in the „Manage” menu, and confirm. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-hu.txt new file mode 100644 index 00000000..d6afc6fe --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-guide-hu.txt @@ -0,0 +1 @@ +Rallly — Felhom.eu ← Alkalmazások Rallly Időpont szavazás - Doodle alternatíva a saját szerveren ● Fut poll.tester4.test Megnyitás ↗ Mire használható? Közös időpont egyeztetés szavazással Találkozók, események szervezése Résztvevők regisztráció nélkül szavazhatnak Email értesítések és emlékeztetők Egyszerű, tiszta felület Első lépések Nyisd meg a poll.tester4.test címet a böngészőben Hozz létre egy új szavazást Add meg a lehetséges időpontokat Oszd meg a linket a résztvevőkkel A végleges időpont kiválasztása Ha mindenki szavazott, kiválasztod a nyertes időpontot. Nyisd meg a szavazást, és kattints a „Kezelés” menüre. Válaszd a „Véglegesítés” pontot. Jelöld ki az időpontot, amelyre a legtöbben mondtak igent, és kattints a „Véglegesítés” gombra. A szavazás oldalán a „Hozzáadás a naptárhoz” gombbal beteheted az időpontot a naptáradba. Új időpont a szavazáshoz Ha egyik időpont sem jó, újakat adhatsz hozzá. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Lehetőségek módosítása” pontot. Jelölj ki új napokat vagy időpontokat a naptárban. Kattints a „Mentés” gombra. A régi szavazatok megmaradnak. Titkos szavazás Beállíthatod, hogy a résztvevők ne lássák egymás szavazatát vagy nevét. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Beállítások szerkesztése” pontot. Kapcsold be a „Szavazatok elrejtése” vagy a „Résztvevők nevének elrejtése” beállítást. Kattints a „Mentés” gombra. A szavazás lezárása Ha már nem vársz több szavazatot, lezárhatod a szavazást. A szavazásnál kattints a „Kezelés” menüre, és válaszd a „Szüneteltetés” pontot. Ezután senki nem tud szavazni. Ha mégis kell, ugyanitt a „Szavazás újranyitása” ponttal újra megnyithatod. Az eredményt a „Kezelés” menü „Exportálás CSV fájlba” pontjával táblázatba mentheted. Gyakori kérdések Kell fiók a szavazáshoz? A szavazóknak nem. A résztvevő megnyitja a linket, kiválasztja a jó időpontokat, beírja a nevét, és az „Elérhetőség mentése” gombra kattint. Szavazást létrehozni viszont csak belépve lehet. Miért nem jön e-mail a Rallly-tól? A Rallly e-mailben küldi a belépő kódot és az értesítéseket, ezért e-mail nélkül belépni sem tudsz. A vezérlőpulton, a Rallly „Beállítások” fülén kapcsold be az „Email-küldés engedélyezése ennél az alkalmazásnál” lehetőséget. Mit jelent a „Ha szükséges” válasz? Azt, hogy az időpont nem ideális, de a résztvevő meg tudja oldani. Véglegesítéskor ezt is érdemes figyelembe venni. Elrontottam a szavazatomat. Javíthatom? Igen. A résztvevők listájában a neved melletti menüben válaszd a „Szavazatok szerkesztése” pontot. Hogyan törlök egy szavazást? Nyisd meg a szavazást, a „Kezelés” menüben válaszd a „Törlés” pontot, és erősítsd meg. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-en.txt new file mode 100644 index 00000000..a4b76fd7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-en.txt @@ -0,0 +1 @@ +Rallly — Install — Felhom.eu ← Back Rallly — Install Vote on a date (a Doodle alternative) ~384M RAM Full description, screenshots Memory 384 MB / 7479 MB (5%) Current usage (0 MB) Rallly (+384 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-hu.txt new file mode 100644 index 00000000..cbeefd1d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-install-hu.txt @@ -0,0 +1 @@ +Rallly — Telepítés — Felhom.eu ← Vissza Rallly — Telepítés Időpont szavazás (Doodle alternatíva) ~384M RAM Részletes leírás, képernyőképek Memória 384 MB / 7479 MB (5%) Jelenlegi használat (0 MB) Rallly (+384 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-en.txt new file mode 100644 index 00000000..c0bf87a3 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-en.txt @@ -0,0 +1 @@ +Rallly — Settings — Felhom.eu ← Apps Rallly Vote on a date - a Doodle alternative on your own server ● Running poll.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app This app signs you in with a link by e-mail. It needs the app's e-mail sending (Settings tab). Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: rallly@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address poll.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-hu.txt new file mode 100644 index 00000000..386aca75 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/page-overview-hu.txt @@ -0,0 +1 @@ +Rallly — Felhom.eu ← Alkalmazások Rallly Időpont szavazás - Doodle alternatíva a saját szerveren ● Fut poll.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Ez az alkalmazás e-mailben küld belépési linket. Ehhez az alkalmazás e-mail küldése kell (Beállítások fül). Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: rallly@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím poll.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/record.json b/documentation/audits/catalog-sweep-2026-10-24/rallly/record.json new file mode 100644 index 00000000..9f987cc9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/record.json @@ -0,0 +1,126 @@ +{ + "app": "rallly", + "sub": "poll", + "fixture": "Rallly", + "started": "2026-10-24T20:53:15Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_PASSWORD", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/rallly/install", + "hu_len": 970, + "en_len": 871, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/rallly/install -> 200 'Rallly — Telepítés — Felhom.eu' | shot /root/shots/rallly-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/rallly/install -> 200 'Rallly — Telepítés — Felhom.eu' | shot /root/shots/rallly-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 71 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fpoll.tester4.test%2F", + "http_port_80": "301 https://poll.tester4.test/", + "guide": { + "path": "/apps/rallly/guide", + "hu_len": 2697, + "en_len": 2292, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/rallly", + "hu_len": 1148, + "en_len": 1073, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/rallly/guide -> 200 'Rallly — Felhom.eu' | shot /root/shots/rallly-after-guide-phone-hu.png hscroll=False", + "goto https://poll.tester4.test/ -> 200 'Főoldal' | shot /root/shots/rallly-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"18.788176714s\", \"last_run\": \"2026-10-24T20:55:29.14370305Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "rallly": { + "limit_mib": 768, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "rallly-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "rallly-postgres": 37.5, + "rallly": 352.2 + }, + "mem_anon_peak_mib": { + "rallly": 337.8, + "rallly-postgres": 8.3 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 286 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-front-desktop-hu.png new file mode 100644 index 00000000..444a750f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-guide-phone-hu.png new file mode 100644 index 00000000..cc7ee600 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-desktop-en.png new file mode 100644 index 00000000..252c3be0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-phone-hu.png new file mode 100644 index 00000000..fc08a763 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/rallly/screens/rallly-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/rallly/walk.log b/documentation/audits/catalog-sweep-2026-10-24/rallly/walk.log new file mode 100644 index 00000000..caf3d353 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/rallly/walk.log @@ -0,0 +1,10 @@ +20:53:35Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +20:54:45Z [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'} +20:54:45Z gate: poll is gated — passed as the household (cookie set) +20:54:45Z [1] installed: deployed 71 s, front door 71 s +20:54:46Z rallly: sign-up http=400 +20:54:46Z rallly: refused :: HTTP/2 400 content-security-policy: frame-ancestors 'none' content-type: application/json date: Sat, 24 Oct 2026 20:54:46 GMT strict-transport-security: max-age=86400 vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch {"message":"Email and password sign up is not e +20:55:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +20:56:13Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'S +20:58:12Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü +20:58:20Z == rallly done in 286 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer.console.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer.console.txt new file mode 100644 index 00000000..fc97bd01 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer.console.txt @@ -0,0 +1,10 @@ +13:12:50Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:13:15Z [1] deployed, controller state=running, pinned={'recipe-importer': 'gitea.dooplex.hu/admin/recipe-importer:v0.9.11'} +13:13:15Z gate: recipe-importer is gated — passed as the household (cookie set) +13:13:15Z [1] installed: deployed 25 s, front door 25 s +13:13:15Z [3] no fixture for this app — the front door answering is the smallest honest check +13:13:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:13:41Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:14:29Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'recipe-importer', 'volumes_removed': ['recipe-importer_recipe_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'mes +13:15:32Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'recipe-importer', 'volumes_removed': ['recipe-importer_recipe_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +13:15:40Z == recipe-importer done in 171 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-en.txt new file mode 100644 index 00000000..f23a1118 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-en.txt @@ -0,0 +1 @@ +Recipe Importer — Guide — Felhom.eu ← Apps Recipe Importer Import Hungarian recipe sites without fuss - one at a time or in bulk, into Mealie and Tandoor ● Running recipe-importer.tester4.test Open ↗ What is it for? Import recipes from 6 Hungarian sites: mindmegette.hu, streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu and gastrohobbi.hu - ingredients, steps, pictures and tags are picked out for you Bulk import: paste several addresses at once, either reviewing each recipe or letting it run on its own Edit before importing - structured ingredients (amount, unit, food, note), changes to the steps, and the tags Mealie and Tandoor Recipes at the same time - pick one, or import into both at once For a site it does not know, it reads schema.org JSON-LD instead (recipeIngredient, recipeInstructions, keywords) First steps Open recipe-importer.tester4.test in your browser Go to the Settings page and enter the Mealie and/or Tandoor address and API key (Mealie: Profile -> API Tokens; Tandoor: Settings -> API Browser -> Auth Token) Set a user name and password to keep it to yourself Paste a recipe address on the import page, select the read button below it, then, once you have checked it, the Mealie or Tandoor import button (the buttons of the app are in Hungarian) Before you start Mealie and/or Tandoor Recipes installed and reachable on the network An API key created in the target app (Mealie and/or Tandoor) Many recipes at once If you have collected many recipes, you can bring them all in at once. On the import page, choose the second tab, the one for bulk import. Paste the recipe addresses into the big box, each on a new line. Choose the first option to review each recipe, or the second one to import them all without a check. Select the import button for Mealie, for Tandoor or for both. If you change your mind while reviewing, the button for the rest brings in the others by itself. Fix a recipe before you import it After you read a recipe in, you can still change it before you send it. Check the list of ingredients: amount, unit and ingredient each have their own field. For a missing ingredient or a new step, use the buttons with a plus sign under the lists. Under the tags you can remove or add tags. When you are done, select the import button. Find and fix recipes You can also find and fix the recipes you already brought in. Open the recipes page from the top menu and choose the „Mealie” or the „Tandoor” tab. Type the word you are looking for and select the search button. The pencil button next to a recipe opens it; fix it and save with the button at the bottom. When importing does not work Most of the time the connection to Mealie or Tandoor has broken. Open the settings page from the top menu. In the Mealie or the Tandoor part, select the button that tests the connection. If it reports an error, create a new API key in Mealie or Tandoor, enter it in the API key field, and save. Frequently asked questions Where do the recipes go? Into Mealie or Tandoor, depending on the button you choose. Recipe Importer itself stores no recipes. Which sites can it import from? From the Hungarian recipe sites listed above the address field. It also tries other sites if the page publishes standard recipe data. Do I have to enter the internal address? No. The box did that: Recipe Importer reaches Mealie and Tandoor directly inside the box. You only enter the address you use in the browser and the API key. I do not want the website's tags. What do I do? For a bulk import in automatic mode, choose the option without tags. When you import one at a time, remove them under the tags. Can I undo a delete? No. Deleting a recipe here deletes it from Mealie or Tandoor for good. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-hu.txt new file mode 100644 index 00000000..e2f08d25 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-guide-hu.txt @@ -0,0 +1 @@ +Recipe Importer — Felhom.eu ← Alkalmazások Recipe Importer Magyar receptoldalak importálása egyszerűen: egyedi és tömeges import Mealie-be és Tandoor-ba ● Fut recipe-importer.tester4.test Megnyitás ↗ Mire használható? Receptek importálása 6 magyar oldalról: mindmegette.hu, streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu és gastrohobbi.hu. Hozzávalók, lépések, képek és címkék automatikus felismerése Tömeges importálás: több URL beillesztése egyszerre, recept-áttekintéssel vagy teljesen automatikus módban Importálás előtti szerkesztés: strukturált hozzávalók (mennyiség, mértékegység, étel, megjegyzés), lépések módosítása, címkék kezelése Mealie és Tandoor Recipes egyidejű támogatás: választhatsz célrendszert, vagy mindkettőbe importálhatsz egyszerre Ismeretlen oldalak esetén schema.org JSON-LD alapú automatikus feldolgozás (recipeIngredient, recipeInstructions, keywords) Első lépések Nyisd meg a recipe-importer.tester4.test címet a böngészőben Menj a Beállítások oldalra és add meg a Mealie és/vagy Tandoor URL-t és API kulcsot (Mealie: Profil → API Tokens; Tandoor: Beállítások → API Browser → Auth Token) Állíts be felhasználónevet és jelszót a hozzáférés védelméhez Illeszd be egy recept URL-jét az importálás oldalon, kattints a „Beolvasás” gombra, majd ellenőrzés után az „Importálás Mealie-be” vagy az „Importálás Tandoor-ba” gombra Előfeltételek Mealie és/vagy Tandoor Recipes telepítve és elérhető a hálózaton API kulcs a célalkalmazásban (Mealie és/vagy Tandoor) létrehozva Sok recept egyszerre Ha sok receptet gyűjtöttél, egyszerre is behozhatod őket. Az „Importálás” oldalon válaszd a „Tömeges importálás” fület. Az „URL-ek (soronként egy)” mezőbe másold be a receptek címét, mindegyiket új sorba. Válaszd a „Receptek egyenkénti áttekintése” módot, ha mindet megnéznéd, vagy az „Automatikus importálás” módot, ha nem. Kattints az „Importálás Mealie-be”, az „Importálás Tandoor-ba” vagy az „Importálás mindkettőbe” gombra. Ha áttekintés közben meggondolod magad, a „Maradékot automatikusan” gombbal a többit már magától hozza be. Recept javítása importálás előtt A „Beolvasás” után a receptet még átírhatod, mielőtt elküldöd. Nézd át a „Hozzávalók” listát: a mennyiség, az egység és a hozzávaló külön mezőben van. Hiányzó sorhoz kattints a „+ Hozzávaló”, új lépéshez a „+ Lépés hozzáadása” gombra. A „Címkék” résznél törölheted vagy kiegészítheted a címkéket. Ha kész, kattints az importálás gombra. Receptek keresése és javítása A már behozott recepteket is innen keresheted és javíthatod. Nyisd meg a „Receptek” oldalt, és válaszd a „Mealie” vagy a „Tandoor” fület. Írd be a keresett szót, és kattints a „Keresés” gombra. A recept melletti „Szerkesztés” gombbal megnyitod, javítod, majd a „Mentés” gombbal elmented. Ha az importálás nem sikerül A legtöbbször a kapcsolat a Mealie-vel vagy a Tandoorral szakad meg. Nyisd meg a „Beállítások” oldalt. A „Mealie kapcsolat” vagy a „Tandoor kapcsolat” résznél kattints a „Kapcsolat tesztelése” gombra. Ha hibát jelez, hozz létre új API kulcsot a Mealie-ben vagy a Tandoorban, írd be az „API kulcs” mezőbe, és kattints a „Mentés” gombra. Gyakori kérdések Hova kerülnek a receptek? A Mealie-be vagy a Tandoorba, attól függően, melyik gombot választod. A Recipe Importer maga nem tárol recepteket. Melyik oldalakról tud importálni? A beolvasó mező fölött felsorolt magyar receptoldalakról. Más oldalakról is megpróbálja, ha az oldal szabványos receptadatot tesz közzé. Kell a belső címet megadnom? Nem. A doboz ezt elintézte: a Recipe Importer a dobozon belül közvetlenül éri el a Mealie-t és a Tandoort. Te csak a böngészőből elérhető címet és az API kulcsot adod meg. Nem kellenek a weboldal címkéi. Mit tegyek? Tömeges importálásnál, automatikus módban válaszd a „Címkék nélkül” lehetőséget. Egyenként importálva a „Címkék” résznél törölheted őket. Visszavonhatom a törlést? Nem. A „Recept törlése” a receptet a Mealie-ből vagy a Tandoorból is végleg törli. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-en.txt new file mode 100644 index 00000000..de8a391f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-en.txt @@ -0,0 +1 @@ +Recipe Importer — Install — Felhom.eu ← Back Recipe Importer — Install Import Hungarian recipe sites into Mealie and Tandoor ~70M RAM Full description, screenshots Memory 70 MB / 7479 MB (0%) Current usage (0 MB) Recipe Importer (+70 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Secret key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-hu.txt new file mode 100644 index 00000000..48c4c47c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-install-hu.txt @@ -0,0 +1 @@ +Recipe Importer — Telepítés — Felhom.eu ← Vissza Recipe Importer — Telepítés Magyar receptoldalak importálása Mealie-be és Tandoor-ba ~70M RAM Részletes leírás, képernyőképek Memória 70 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Recipe Importer (+70 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkos kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-en.txt new file mode 100644 index 00000000..e772298d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-en.txt @@ -0,0 +1 @@ +Recipe Importer — Settings — Felhom.eu ← Apps Recipe Importer Import Hungarian recipe sites without fuss - one at a time or in bulk, into Mealie and Tandoor ● Running recipe-importer.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address recipe-importer.tester4.test Secret key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-hu.txt new file mode 100644 index 00000000..2962b207 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/page-overview-hu.txt @@ -0,0 +1 @@ +Recipe Importer — Felhom.eu ← Alkalmazások Recipe Importer Magyar receptoldalak importálása egyszerűen: egyedi és tömeges import Mealie-be és Tandoor-ba ● Fut recipe-importer.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím recipe-importer.tester4.test Titkos kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/record.json b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/record.json new file mode 100644 index 00000000..ccb96b34 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/record.json @@ -0,0 +1,119 @@ +{ + "app": "recipe-importer", + "sub": "recipe-importer", + "fixture": null, + "started": "2026-10-24T13:12:36Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/recipe-importer/install", + "hu_len": 954, + "en_len": 860, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/recipe-importer/install -> 200 'Recipe Importer — Telepítés — Felhom.eu' | shot /root/shots/recipe-importer-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/recipe-importer/install -> 200 'Recipe Importer — Telepítés — Felhom.eu' | shot /root/shots/recipe-importer-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Frecipe-importer.tester4.test%2F", + "http_port_80": "301 https://recipe-importer.tester4.test/", + "guide": { + "path": "/apps/recipe-importer/guide", + "hu_len": 3969, + "en_len": 3754, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/recipe-importer", + "hu_len": 804, + "en_len": 805, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/recipe-importer/guide -> 200 'Recipe Importer — Felhom.eu' | shot /root/shots/recipe-importer-after-guide-phone-hu.png hscroll=False", + "goto https://recipe-importer.tester4.test/settings -> 200 'Beállítások — Recept Importáló' | shot /root/shots/recipe-importer-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.60381977s\", \"last_run\": \"2026-10-24T13:13:33.446411082Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"recipe-importer\", \"started_at\": \"2026-10-24T13:13:41.958597385Z\", \"last\": {\"op\": \"restore\", \"stack\": \"recipe-importer\", \"ok\": true, \"message\": \"A(z) recipe-importer: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:13:52.27203337Z\"}, \"last_recent\": true}", + "state": "running" + }, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "recipe-importer": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "recipe-importer": 66.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 171 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-front-desktop-hu.png new file mode 100644 index 00000000..4b19db2b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-guide-phone-hu.png new file mode 100644 index 00000000..09c30117 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-desktop-en.png new file mode 100644 index 00000000..da9dc4bc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-phone-hu.png new file mode 100644 index 00000000..9b0e3bb5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/screens/recipe-importer-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/walk.log b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/walk.log new file mode 100644 index 00000000..fc97bd01 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/recipe-importer/walk.log @@ -0,0 +1,10 @@ +13:12:50Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:13:15Z [1] deployed, controller state=running, pinned={'recipe-importer': 'gitea.dooplex.hu/admin/recipe-importer:v0.9.11'} +13:13:15Z gate: recipe-importer is gated — passed as the household (cookie set) +13:13:15Z [1] installed: deployed 25 s, front door 25 s +13:13:15Z [3] no fixture for this app — the front door answering is the smallest honest check +13:13:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:13:41Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:14:29Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'recipe-importer', 'volumes_removed': ['recipe-importer_recipe_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'mes +13:15:32Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'recipe-importer', 'volumes_removed': ['recipe-importer_recipe_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját +13:15:40Z == recipe-importer done in 171 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm.console.txt b/documentation/audits/catalog-sweep-2026-10-24/romm.console.txt new file mode 100644 index 00000000..7e7d26fd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm.console.txt @@ -0,0 +1,18 @@ +17:14:37Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:14:37Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:16:32Z [1] deployed, controller state=running, pinned={'romm': 'rommapp/romm:5.3.1', 'romm-db': 'mariadb:11.8', 'romm-redis': 'redis:7-alpine'} +17:16:33Z gate: arcade is gated — passed as the household (cookie set) +17:16:33Z [1] installed: deployed 116 s, front door 116 s +17:16:45Z romm: POST /api/users http=201 +17:16:46Z romm: login as the seeded user http=200 ok=True +17:17:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:17:35Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:19:12Z romm: login as the seeded user http=200 ok=True +17:19:50Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'romm', 'volumes_removed': ['romm_romm_assets', 'romm_romm_config', 'romm_romm_db_data', 'romm_romm_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mn +17:19:58Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:20:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:20:02Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) RomM megőrzött adatainak betöltése elindult.'} +17:20:22Z [1] deployed, controller state=running, pinned={'romm': 'rommapp/romm:5.3.1', 'romm-db': 'mariadb:11.8', 'romm-redis': 'redis:7-alpine'} +17:21:44Z romm: login as the seeded user http=200 ok=True +17:22:28Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'romm', 'volumes_removed': ['romm_romm_assets', 'romm_romm_config', 'romm_romm_db_data', 'romm_romm_redis_data'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appda +17:22:37Z == romm done in 480 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-en.txt new file mode 100644 index 00000000..5912ca8b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-en.txt @@ -0,0 +1 @@ +RomM — Guide — Felhom.eu ← Apps RomM Retro game collection manager, browser and player ● Running Up to date arcade.tester4.test Open ↗ Files ↗ What is it for? Sort and browse a retro game collection in your browser Game details download themselves - cover art, descriptions, ratings Filter and search the whole collection by platform Upload and download ROM files in your browser Several people in the household can have their own account First steps Open arcade.tester4.test in your browser On the first visit, create your admin account Upload the ROM files into the roms/ folder in the File manager (FileBrowser), sorted into platform folders (for example roms/gba/, roms/snes/) If a console needs a BIOS file, put it in the roms-bios/ folder, in that console's folder (for example roms-bios/psx/) Select your profile picture at the top right, choose „Scan”, and start a scan to read the ROMs in Optional: set up metadata providers so cover art and descriptions download themselves (see below) Before you start An external hard drive is needed to keep the ROM files and cover art on At least 1 GB of free RAM is recommended (MariaDB + Redis + RomM) ROM files sorted into platform folders (for example roms/gba/, roms/snes/) Play in the browser Games for many retro platforms run right in the browser, with nothing to install. Select „Platforms” at the top and choose the platform. Select the game: its page opens. Select „Play”. If there is no such button, the browser cannot run this platform; „Download” gets the game for your own emulator. Own accounts for the family Everyone signs in with their own account, so their favourites stay separate. Select your profile picture at the top right and choose „Administration”. Under „Users”, select „Add”. Fill in „Username” and „Password”, type the password again in „Repeat password”, and select „Create”. If the family member should choose their own password, make a link under „Invite link” with „Generate”, and send it to them with „Copy link”. Favourites and collections In collections you can group games, for example the ones for the children. Open the game and select „Manage collections”. For a new collection, select „Create collection”, type its name and select „Create”. Tick the collections the game should go into. You find your collections under „Collections” at the top. Upload from the browser You can upload a few games straight from the browser, without the file manager. Select your profile picture at the top right and choose „Upload ROMs”. In „Select a platform”, choose which console the game is for. Drag the files onto „Drop files here” and select „Upload”. RomM then reads them in by itself. Frequently asked questions Can it be in Hungarian? Yes. Select your profile picture, choose „User interface”, and under „Language” choose Hungarian, listed under its own name. The setting applies to each browser separately. Which games may I upload? Only games that are yours: for example a copy you made of your own cartridge or disc. Why do the games have no cover or description? That needs a metadata provider. Set one up on the dashboard, on RomM's „Settings” tab, then run an „Update metadata” scan on RomM's „Scan” page. Why does it not recognise the game? RomM looks the game up by the file name. Rename the file to the game's exact title and run a scan again on the „Scan” page. How do I change my password? Select your profile picture, choose „Profile”, then „Change password”. Enter the new password twice and select „Confirm”. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-hu.txt new file mode 100644 index 00000000..08612968 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-guide-hu.txt @@ -0,0 +1 @@ +RomM — Felhom.eu ← Alkalmazások RomM Retró játékgyűjtemény kezelő, böngésző és lejátszó ● Fut Naprakész arcade.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Retró játékgyűjtemény rendszerezése és böngészése webes felületen Játékok metaadatainak automatikus letöltése: borítók, leírások, értékelések Platformonkénti szűrés és keresés a teljes gyűjteményben ROM fájlok webes feltöltése és letöltése Többfelhasználós hozzáférés a háztartás tagjai számára Első lépések Nyisd meg az arcade.tester4.test címet a böngészőben Az első megnyitáskor hozd létre az admin fiókodat Töltsd fel a ROM fájlokat a Fájlkezelőben (FileBrowser) a roms/ mappába, platform mappákba rendezve (pl. roms/gba/, roms/snes/) Ha egy géphez BIOS fájl kell, tedd a roms-bios/ mappába, a gép mappájába (pl. roms-bios/psx/) Kattints jobb felül a profilképedre, válaszd a „Scan” (Szkennelés) pontot, és indíts egy szkennelést a ROM-ok beolvasásához Opcionális: állíts be metaadat-szolgáltatókat a borítóképek és leírások automatikus letöltéséhez (lásd lent) Előfeltételek Külső HDD szükséges a ROM fájlok és borítóképek tárolásához Legalább 1 GB szabad RAM ajánlott (MariaDB + Redis + RomM) ROM fájlok platform mappákba rendezve (pl. roms/gba/, roms/snes/) Játék a böngészőben Sok retró platform játéka közvetlenül a böngészőben fut, telepítés nélkül. Kattints felül a „Platforms” (Platformok) menüre, és válaszd ki a platformot. Kattints a játékra: megnyílik az oldala. Kattints a „Play” (Indítás) gombra. Ha nincs ilyen gomb, ezt a platformot a böngésző nem tudja futtatni; a „Download” (Letöltés) gombbal a saját emulátorodba töltheted le. Saját fiók a családtagoknak Mindenki saját fiókkal lép be, így a kedvencei külön maradnak. Kattints jobb felül a profilképedre, és válaszd az „Administration” (Adminisztráció) pontot. A „Users” (Felhasználók) részben kattints az „Add” (Hozzáadás) gombra. Add meg a „Username” (felhasználónév) és a „Password” (jelszó) mezőt, a „Repeat password” mezőbe írd be újra a jelszót, és kattints a „Create” (létrehozás) gombra. Ha inkább a családtag választ jelszót, az „Invite link” (meghívó link) gombbal készíts linket a „Generate” gombbal, és küldd el neki a „Copy link” gombbal. Kedvencek és gyűjtemények A gyűjteményekbe összeválogathatod a játékokat, például a gyerekeknek valókat. Nyisd meg a játékot, és kattints a „Manage collections” (gyűjtemények kezelése) gombra. Új gyűjteményhez kattints a „Create collection” (gyűjtemény létrehozása) pontra, írd be a nevét, és kattints a „Create” gombra. Jelöld be, melyik gyűjteménybe kerüljön a játék. A gyűjteményeidet felül a „Collections” (Gyűjtemények) menüben találod. Feltöltés a böngészőből Néhány játékot a fájlkezelő nélkül, közvetlenül a böngészőből is feltölthetsz. Kattints jobb felül a profilképedre, és válaszd az „Upload ROMs” (ROM-ok feltöltése) pontot. A „Select a platform” (platform választása) listában válaszd ki, melyik géphez tartozik a játék. Húzd a fájlokat a „Drop files here” (húzd ide a fájlokat) részre, és kattints az „Upload” (feltöltés) gombra. A RomM utána magától beolvassa őket. Gyakori kérdések Lehet magyarul? Igen. Kattints a profilképedre, válaszd a „User interface” (felhasználói felület) pontot, és a „Language” (nyelv) résznél válaszd a „Magyar” nyelvet. A beállítás böngészőnként külön érvényes. Milyen játékot tölthetek fel? Csak olyat, amely a tiéd: például a saját kazettádról vagy lemezedről készített mentést. Miért nincs borító és leírás a játékoknál? Ehhez metaadat-szolgáltató kell. Állítsd be a vezérlőpulton, a RomM „Beállítások” fülén, majd a RomM „Scan” (Szkennelés) oldalán futtass „Update metadata” (metaadatok frissítése) szkennelést. Miért nem ismeri fel a játékot? A RomM a fájl nevéből keresi meg a játékot. Nevezd át a fájlt a játék pontos címére, és futtass újra egy szkennelést a „Scan” oldalon. Hogyan változtatok jelszót? Kattints a profilképedre, válaszd a „Profile” (Profil) pontot, majd a „Change password” (jelszó módosítása) gombot. Add meg az új jelszót kétszer, és kattints a „Confirm” (megerősítés) gombra. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-en.txt new file mode 100644 index 00000000..3bb36376 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-en.txt @@ -0,0 +1 @@ +RomM — Install — Felhom.eu ← Back RomM — Install Retro game collection manager ~600M RAM Needs a hard drive Full description, screenshots Memory 600 MB / 7479 MB (8%) Current usage (0 MB) RomM (+600 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show MariaDB root password Generated automatically Show Sign-in encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Data storage path * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The path to the external hard drive where the ROMs and cover art are kept Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-hu.txt new file mode 100644 index 00000000..a637ceef --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-install-hu.txt @@ -0,0 +1 @@ +RomM — Telepítés — Felhom.eu ← Vissza RomM — Telepítés Retró játékgyűjtemény kezelő ~600M RAM HDD szükséges Részletes leírás, képernyőképek Memória 600 MB / 7479 MB (8%) Jelenlegi használat (0 MB) RomM (+600 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés MariaDB root jelszó Automatikusan generálva Megjelenítés Hitelesítési titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Adattárolási útvonal * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A külső merevlemez elérési útja, ahol a ROM-ok és borítóképek tárolódnak Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-en.txt new file mode 100644 index 00000000..d8e4a103 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-en.txt @@ -0,0 +1 @@ +RomM — Settings — Felhom.eu ← Apps RomM Retro game collection manager, browser and player ● Running Up to date arcade.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Optional settings Metadata providers So that cover art, descriptions and ratings download themselves. IGDB is the one worth setting up first. All of them are free after you sign up. IGDB Client ID 1) Sign up or sign in on the Twitch developer portal (dev.twitch.tv). 2) Create a new application (any name will do). 3) Copy the Client ID across. Sign-up guide ↗ IGDB Client Secret The Client Secret of your Twitch application (the "New Secret" button makes one). SteamGridDB API Key Sign up on SteamGridDB, then select the "Generate API key" button under Preferences -> API. Sign-up guide ↗ ScreenScraper user name Sign up on screenscraper.fr. Your account name is the API user name. Sign-up guide ↗ ScreenScraper password The password of your screenscraper.fr account. MobyGames API Key Sign up on MobyGames, then ask for a key on the API page. It gives detailed game information and credits. Sign-up guide ↗ Save Address and keys These were created at install time and cannot be changed. Address arcade.tester4.test Storage Külső tárhely (hdd_1) Database password Show MariaDB root password Show Sign-in encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-hu.txt new file mode 100644 index 00000000..92fd1f43 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/page-overview-hu.txt @@ -0,0 +1 @@ +RomM — Felhom.eu ← Alkalmazások RomM Retró játékgyűjtemény kezelő, böngésző és lejátszó ● Fut Naprakész arcade.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Opcionális beállítások Metaadat-szolgáltatók Játékok borítóinak, leírásainak és értékeléseinek automatikus letöltéséhez. Legalább az IGDB beállítása ajánlott. Mindegyik ingyenesen használható regisztráció után. IGDB Client ID 1) Regisztrálj / jelentkezz be a Twitch fejlesztői portálon (dev.twitch.tv). 2) Hozz létre egy új alkalmazást (bármilyen névvel). 3) Másold be a Client ID-t. Regisztrációs útmutató ↗ IGDB Client Secret A Twitch alkalmazásod Client Secret-je (a „New Secret" gombbal generálhatod). SteamGridDB API Key Regisztrálj a SteamGridDB oldalon, majd a Preferences → API fül alatt kattints a „Generate API key" gombra. Regisztrációs útmutató ↗ ScreenScraper felhasználónév Regisztrálj a screenscraper.fr oldalon. A felhasználóneved lesz az API felhasználónév. Regisztrációs útmutató ↗ ScreenScraper jelszó A screenscraper.fr fiókod jelszava. MobyGames API Key Regisztrálj a MobyGames oldalon, majd az API oldalon igényelj kulcsot. Részletes játékinformációkat és krediteket biztosít. Regisztrációs útmutató ↗ Mentés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím arcade.tester4.test Tárhely Külső tárhely (hdd_1) Adatbázis jelszó Megjelenítés MariaDB root jelszó Megjelenítés Hitelesítési titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/record.json b/documentation/audits/catalog-sweep-2026-10-24/romm/record.json new file mode 100644 index 00000000..6cce2c58 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/record.json @@ -0,0 +1,153 @@ +{ + "app": "romm", + "sub": "arcade", + "fixture": "Romm", + "started": "2026-10-24T17:14:18Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "MYSQL_ROOT_PASSWORD", + "secret", + false + ], + [ + "ROMM_AUTH_SECRET_KEY", + "secret", + false + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/romm/install", + "hu_len": 1402, + "en_len": 1254, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/romm/install -> 200 'RomM — Telepítés — Felhom.eu' | shot /root/shots/romm-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/romm/install -> 200 'RomM — Telepítés — Felhom.eu' | shot /root/shots/romm-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 116, + "front_door": true, + "seconds_to_front_door": 116 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Farcade.tester4.test%2F", + "http_port_80": "301 https://arcade.tester4.test/", + "guide": { + "path": "/apps/romm/guide", + "hu_len": 4075, + "en_len": 3543, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/romm", + "hu_len": 1860, + "en_len": 1719, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/romm/guide -> 200 'RomM — Felhom.eu' | shot /root/shots/romm-after-guide-phone-hu.png hscroll=False", + "goto https://arcade.tester4.test/ -> 200 'RomM' | shot /root/shots/romm-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 25, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"24.698767671s\", \"last_run\": \"2026-10-24T17:17:35.151060808Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 85, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"romm\", \"started_at\": \"2026-10-24T17:17:35.65848304Z\", \"last\": {\"op\": \"restore\", \"stack\": \"romm\", \"ok\": true, \"message\": \"A(z) romm: 4 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T17:18:57.073391603Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/romm", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "409", + "body": "{\"ok\": false, \"data\": {\"code\": \"kept_data_choice\", \"title\": \"Ennek az alkalmazásnak megvannak a régi adatai\", \"body\": \"A(z) RomM korábbi adatai (0 B, 2026-10-24) még a lemezen vannak. Mit csináljunk velük?\", \"use_label\": \"A megőrzött adataimat használom\", \"use_desc\": \"Az adatbázist innen töltjük vissza: saját mentés, 2026-10-24 19:17. A régi fájlokkal indítjuk az alkalmazást. Ami ezután változott, hiányozhat.\", \"use_off\": \"\", \"use_offered\": true, \"fresh_label\": \"Tiszta lappal kezdem\", \"fresh_desc\": \"A régi adatok egy mai dátummal jelölt mappába kerülnek. Nem törlünk semmit.\", \"not_backed_up\": \"Erről nem készül mentés.\"}, \"error\": \"Ennek az alkalmazásnak megvannak a régi adatai\"}" + }, + "kept": { + "offered": true, + "use_ok": true + }, + "seed_read_after_reinstall": true, + "containers": { + "romm": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "romm-redis": { + "limit_mib": 128, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "romm-db": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "romm-redis": 15.4, + "romm": 599.4, + "romm-db": 133.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "/mnt/felhom-drives/hdd_1/appdata/romm", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 480 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-front-desktop-hu.png new file mode 100644 index 00000000..89dfbdac Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-guide-phone-hu.png new file mode 100644 index 00000000..ef1d71df Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-desktop-en.png new file mode 100644 index 00000000..09a75bb0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-phone-hu.png new file mode 100644 index 00000000..957dcd91 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/romm/screens/romm-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/romm/walk.log b/documentation/audits/catalog-sweep-2026-10-24/romm/walk.log new file mode 100644 index 00000000..7e7d26fd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/romm/walk.log @@ -0,0 +1,18 @@ +17:14:37Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:14:37Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:16:32Z [1] deployed, controller state=running, pinned={'romm': 'rommapp/romm:5.3.1', 'romm-db': 'mariadb:11.8', 'romm-redis': 'redis:7-alpine'} +17:16:33Z gate: arcade is gated — passed as the household (cookie set) +17:16:33Z [1] installed: deployed 116 s, front door 116 s +17:16:45Z romm: POST /api/users http=201 +17:16:46Z romm: login as the seeded user http=200 ok=True +17:17:10Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:17:35Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:19:12Z romm: login as the seeded user http=200 ok=True +17:19:50Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'romm', 'volumes_removed': ['romm_romm_assets', 'romm_romm_config', 'romm_romm_db_data', 'romm_romm_redis_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mn +17:19:58Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:20:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +17:20:02Z [1] deploy -> 202 {'ok': True, 'message': 'A(z) RomM megőrzött adatainak betöltése elindult.'} +17:20:22Z [1] deployed, controller state=running, pinned={'romm': 'rommapp/romm:5.3.1', 'romm-db': 'mariadb:11.8', 'romm-redis': 'redis:7-alpine'} +17:21:44Z romm: login as the seeded user http=200 ok=True +17:22:28Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'romm', 'volumes_removed': ['romm_romm_assets', 'romm_romm_config', 'romm_romm_db_data', 'romm_romm_redis_data'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appda +17:22:37Z == romm done in 480 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd.console.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd.console.txt new file mode 100644 index 00000000..0c3b6f10 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd.console.txt @@ -0,0 +1,15 @@ +16:27:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'SAB_ADMIN_PASSWORD'] +16:27:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:27:55Z [1] deployed, controller state=running, pinned={'sabnzbd': 'lscr.io/linuxserver/sabnzbd:version-5.1.3'} +16:27:55Z [1] installed: deployed 25 s, front door 25 s +16:27:58Z sabnzbd: addfile felhom802272a3 http=200 ok=True +16:28:02Z sabnzbd: category felhom802272a3 created +16:28:09Z sabnzbd: job kept, category present=True +16:28:30Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:29:16Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sabnzbd', 'volumes_removed': ['sabnzbd_sabnzbd_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/medi +16:29:24Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SAB_ADMIN_PASSWORD', 'HDD_PATH'] +16:29:48Z sabnzbd: the queued job felhom802272a3 is GONE +16:29:49Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:30:11Z sabnzbd: job kept, category present=True +16:30:54Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sabnzbd', 'volumes_removed': ['sabnzbd_sabnzbd_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/medi +16:31:03Z == sabnzbd done in 213 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-en.txt new file mode 100644 index 00000000..b5308e20 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-en.txt @@ -0,0 +1 @@ +SABnzbd — Guide — Felhom.eu ← Apps SABnzbd Usenet downloading with the full interface: queues, categories, automatic unpacking ● Running usenet.tester4.test Open ↗ Files ↗ What is it for? Download NZB files to your own drive, with the repair and unpacking that follows Radarr, Sonarr and Jellyseerr can hand the job to it: this is the Usenet-side downloader You see the finished files in the file browser and in your media player If you want a simpler interface and even less memory, NZBGet is the other choice First steps Open usenet.tester4.test and sign in as admin with the password generated at install Enter your Usenet provider on the „Servers” page of the „Config” menu (server, port, username, password). Without it nothing will download Finished downloads land on your drive, in the media/usenet/complete folder Download only what you have the right to Before you start IT NEEDS A PAID USENET SERVICE, which you bring yourself: the content lives on the provider's servers and reaching it is a subscription. Without one the app starts and you can sign in, but nothing will download NZB files, or an indexer service, are yours to add too - the app contains neither It needs no inbound port: Usenet downloading makes outgoing connections only, so the box's closed ports cost you nothing here Add an NZB file The NZB file tells SABnzbd what to download from your provider; add only one whose content you have the right to. Select the plus sign in the bar at the top: the „Add NZB” window opens. Under „Upload NZB”, select „Browse” and choose the file. If you like, choose a category in „Category”, for example movies. Select „Add”. The download appears in the queue. You can also drag the file into the window. Pause the downloads When you need your internet line for something else, you can stop the downloads at any time. Select the pause button in the bar at the top („Pause”). The same button carries on („Resume”). With the arrow next to it, set how long it waits, for example „Pause for 1 hour”. To stop a single download, use the button at the start of its row in the queue. Download only at night You can make SABnzbd wait during the day and download at night. Select the gear („Config”) and open the „Scheduling” page. Choose the morning time, tick the days under „Frequency”, and set „Action” to „Pause”. Select „Add Schedule”. In the same way, add an evening time with the „Resume” action. When a download fails The „History” list under the queue shows the finished and the failed downloads. A failed download says „Failed”. Select „Retry”. If nothing downloads at all, open the „Servers” page of „Config” and select „Test Server”. If the test shows an error, correct your provider's details and select „Save Changes”. If the test is fine but the download fails again, the content may be incomplete at the provider: try another NZB file. Frequently asked questions Where do unfinished downloads go? On your drive, into the media/usenet/incomplete folder. When a download is done, SABnzbd moves it to the complete folder; leave the unfinished files alone. Why does the end of a download take so long? After the download, SABnzbd checks the files, repairs them if needed and unpacks them. Depending on the size this can take a while; the „History” list shows where it is. Can I slow the downloads down? Yes. On the „General” page of „Config”, enter your line speed in „Maximum line speed” and how much of it SABnzbd may use in „Percentage of line speed”, then select „Save Changes”. Does the box connect it to Sonarr and Radarr? No. The box connects the torrent download clients (qBittorrent, Transmission) to Sonarr and Radarr. SABnzbd downloads the NZB files you add yourself. Do I have to open a port for it? No. SABnzbd only connects outwards to your provider, so the box's closed ports do not slow it down. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-hu.txt new file mode 100644 index 00000000..afb36885 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-guide-hu.txt @@ -0,0 +1 @@ +SABnzbd — Felhom.eu ← Alkalmazások SABnzbd Usenet letöltés teljes felülettel: sorok, kategóriák, automatikus kicsomagolás ● Fut usenet.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? NZB fájlok letöltése a saját meghajtódra, a letöltés utáni kicsomagolással és javítással együtt A Radarr, a Sonarr és a Jellyseerr ide adhatja le a munkát: ez a Usenet oldali letöltő A kész fájlokat a fájlböngészőben és a médialejátszódban is látod Ha egyszerűbb felületet és még kisebb fogyasztást szeretnél, az NZBGet a másik választás Első lépések Nyisd meg az usenet.tester4.test címet, és lépj be az admin névvel és a telepítéskor kapott jelszóval Add meg a Usenet szolgáltatód adatait a „Config” (beállítások) menü „Servers” (szerverek) oldalán (szerver, port, felhasználónév, jelszó). Enélkül a letöltés nem indul el A kész letöltések a meghajtódon, a media/usenet/complete mappába kerülnek Csak olyan tartalmat tölts le, amihez jogod van Előfeltételek FIZETŐS USENET SZOLGÁLTATÁS KELL hozzá, amit neked kell hoznod: a tartalom a szolgáltató szerverein van, és az elérése előfizetés. Enélkül az alkalmazás elindul és bejelentkezni is tudsz, de letölteni nem NZB fájlokat vagy indexelő szolgáltatást is te adsz hozzá - ezeket sem tartalmazza az alkalmazás Befelé irányuló portot nem igényel: a Usenet letöltés kizárólag kimenő kapcsolatokat használ, így a doboz zárt portjai itt semmit nem vesznek el NZB fájl hozzáadása Az NZB fájl mondja meg a SABnzbd-nek, mit töltsön le a szolgáltatódtól; csak olyat adj hozzá, amelynek a tartalmához jogod van. Kattints a felső sávban a plusz jelre: megnyílik az „Add NZB” (NZB hozzáadása) ablak. Az „Upload NZB” (NZB feltöltése) részben kattints a „Browse” (Tallózás) gombra, és válaszd ki a fájlt. Ha szeretnéd, a „Category” (kategória) mezőben válassz kategóriát, például movies. Kattints az „Add” (Hozzáadás) gombra. A letöltés megjelenik a sorban. A fájlt az ablakba húzva is hozzáadhatod. Letöltés szüneteltetése Ha épp másra kell az internet, a letöltést bármikor megállíthatod. Kattints a felső sávban a szünet gombra („Pause”, szünet). Ugyanez a gomb folytatja („Resume”, folytatás). A gomb melletti nyíllal megadhatod, meddig álljon, például „Pause for 1 hour” (szünet 1 órára). Egyetlen letöltést a sorban, a sora elején lévő gombbal állíthatsz meg. Letöltés csak éjjel Beállíthatod, hogy a SABnzbd napközben álljon, és éjjel töltsön. Kattints a fogaskerékre („Config”, beállítások), és nyisd meg a „Scheduling” (ütemezés) lapot. Válaszd ki a reggeli időpontot, a „Frequency” (gyakoriság) alatt jelöld be a napokat, az „Action” (művelet) legyen „Pause” (szünet). Kattints az „Add Schedule” (ütemezés hozzáadása) gombra. Ugyanígy adj hozzá egy esti időpontot a „Resume” (folytatás) művelettel. Ha egy letöltés nem sikerül A kész és a sikertelen letöltéseket a sor alatti „History” (előzmények) lista mutatja. A sikertelen letöltés mellett „Failed” (sikertelen) áll. Kattints a „Retry” (újra) gombra. Ha semmi sem töltődik, nyisd meg a „Config” (beállítások) „Servers” (szerverek) lapját, és kattints a „Test Server” (szerver tesztelése) gombra. Ha a teszt hibát ad, javítsd a szolgáltatód adatait, és kattints a „Save Changes” (változások mentése) gombra. Ha a teszt rendben van, de a letöltés újra sikertelen, a tartalom hiányos lehet a szolgáltatónál: próbálj másik NZB fájlt. Gyakori kérdések Hová kerülnek a félkész letöltések? A meghajtódon a media/usenet/incomplete mappába. Amikor egy letöltés elkészül, a SABnzbd átteszi a complete mappába; a félkész fájlokhoz ne nyúlj. Miért tart sokáig a letöltés vége? Letöltés után a SABnzbd ellenőrzi, szükség esetén javítja és kicsomagolja a fájlokat. Ez a letöltés méretétől függően eltarthat egy ideig, közben a „History” (előzmények) listában látod az állapotát. Lassíthatom a letöltést? Igen. A „Config” (beállítások) „General” (általános) lapján add meg a „Maximum line speed” (legnagyobb sebesség) mezőben a kapcsolatod sebességét, a „Percentage of line speed” (százalék) mezőben azt, mennyit használhat, majd kattints a „Save Changes” (változások mentése) gombra. Összeköti a doboz a Sonarrral és a Radarral? Nem. A doboz a Sonarrba és a Radarrba a torrent letöltőket (qBittorrent, Transmission) köti be. A SABnzbd azokat az NZB fájlokat tölti le, amelyeket te adsz hozzá. Kell portot nyitnom hozzá? Nem. A SABnzbd csak kifelé kapcsolódik a szolgáltatódhoz, így a doboz zárt portjai itt nem lassítanak. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-en.txt new file mode 100644 index 00000000..7e22e47c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-en.txt @@ -0,0 +1 @@ +SABnzbd — Install — Felhom.eu ← Back SABnzbd — Install A full-featured Usenet downloader ~192M RAM Needs a hard drive Full description, screenshots Memory 192 MB / 7479 MB (2%) Current usage (0 MB) SABnzbd (+192 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain API key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Downloads drive * cannot be changed after install Belső tárhely — 52.0 GB free (default) Külső tárhely (hdd_1) — 185.5 GB free Külső tárhely (hdd_2) — 139.1 GB free The chosen storage is almost full. The chosen drive stores the app’s files (media, documents). The database runs on the fast internal SSD — and it is backed up together with the app. The drive the downloads go to Sign-in password * cannot be changed after install 👁 Generate The web interface password (username: admin). Generated at install; change it in the app afterwards. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-hu.txt new file mode 100644 index 00000000..5a302cd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-install-hu.txt @@ -0,0 +1 @@ +SABnzbd — Telepítés — Felhom.eu ← Vissza SABnzbd — Telepítés Usenet letöltő teljes felülettel ~192M RAM HDD szükséges Részletes leírás, képernyőképek Memória 192 MB / 7479 MB (2%) Jelenlegi használat (0 MB) SABnzbd (+192 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain API kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Letöltések meghajtója * telepítés után nem módosítható Belső tárhely — 52,0 GB szabad (alapértelmezett) Külső tárhely (hdd_1) — 185,5 GB szabad Külső tárhely (hdd_2) — 139,1 GB szabad A kiválasztott tárhely majdnem megtelt. A kiválasztott meghajtón az alkalmazás fájljai (média, dokumentumok) tárolódnak. Az adatbázis a gyors belső SSD-n fut — és az alkalmazással együtt készül róla biztonsági mentés. A meghajtó, amelyre a letöltések kerülnek Belépési jelszó * telepítés után nem módosítható 👁 Generálás A webes felület jelszava (felhasználónév: admin). A telepítéskor készül, utána a felületen változtathatod meg. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-en.txt new file mode 100644 index 00000000..6cc4f10c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-en.txt @@ -0,0 +1 @@ +SABnzbd — Settings — Felhom.eu ← Apps SABnzbd Usenet downloading with the full interface: queues, categories, automatic unpacking ● Running usenet.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Sign-in password Show Address and keys These were created at install time and cannot be changed. Address usenet.tester4.test Storage Külső tárhely (hdd_1) API key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-hu.txt new file mode 100644 index 00000000..771ab2de --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/page-overview-hu.txt @@ -0,0 +1 @@ +SABnzbd — Felhom.eu ← Alkalmazások SABnzbd Usenet letöltés teljes felülettel: sorok, kategóriák, automatikus kicsomagolás ● Fut usenet.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Belépési jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím usenet.tester4.test Tárhely Külső tárhely (hdd_1) API kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/record.json b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/record.json new file mode 100644 index 00000000..82bb0296 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/record.json @@ -0,0 +1,132 @@ +{ + "app": "sabnzbd", + "sub": "usenet", + "fixture": "SABnzbdBox", + "started": "2026-10-24T16:27:12Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "SAB_ADMIN_PASSWORD", + "password", + true + ], + [ + "SAB_API_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/sabnzbd/install", + "hu_len": 1425, + "en_len": 1271, + "english_words_in_hu": [], + "accented_in_en": 8, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/sabnzbd/install -> 200 'SABnzbd — Telepítés — Felhom.eu' | shot /root/shots/sabnzbd-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/sabnzbd/install -> 200 'SABnzbd — Telepítés — Felhom.eu' | shot /root/shots/sabnzbd-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "303 https://192.168.0.157/login/", + "http_port_80": "301 https://usenet.tester4.test/", + "guide": { + "path": "/apps/sabnzbd/guide", + "hu_len": 4436, + "en_len": 3865, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/sabnzbd", + "hu_len": 490, + "en_len": 479, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/sabnzbd/guide -> 200 'SABnzbd — Felhom.eu' | shot /root/shots/sabnzbd-after-guide-phone-hu.png hscroll=False", + "goto https://usenet.tester4.test/login/ -> 200 'SABnzbd - Log in' | shot /root/shots/sabnzbd-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.72906595s\", \"last_run\": \"2026-10-24T16:28:34.853078771Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"sabnzbd\", \"started_at\": \"2026-10-24T16:29:49.011566581Z\", \"last\": {\"op\": \"restore\", \"stack\": \"sabnzbd\", \"ok\": true, \"message\": \"A(z) sabnzbd: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T16:30:02.799675599Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "sabnzbd": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "sabnzbd": 68.6 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 213 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-front-desktop-hu.png new file mode 100644 index 00000000..c8546ea1 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-guide-phone-hu.png new file mode 100644 index 00000000..ee3c2fbc Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-desktop-en.png new file mode 100644 index 00000000..84abd47b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-phone-hu.png new file mode 100644 index 00000000..be3f3695 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/screens/sabnzbd-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/walk.log b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/walk.log new file mode 100644 index 00000000..0c3b6f10 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sabnzbd/walk.log @@ -0,0 +1,15 @@ +16:27:30Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'SAB_ADMIN_PASSWORD'] +16:27:30Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:27:55Z [1] deployed, controller state=running, pinned={'sabnzbd': 'lscr.io/linuxserver/sabnzbd:version-5.1.3'} +16:27:55Z [1] installed: deployed 25 s, front door 25 s +16:27:58Z sabnzbd: addfile felhom802272a3 http=200 ok=True +16:28:02Z sabnzbd: category felhom802272a3 created +16:28:09Z sabnzbd: job kept, category present=True +16:28:30Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:29:16Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sabnzbd', 'volumes_removed': ['sabnzbd_sabnzbd_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/medi +16:29:24Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SAB_ADMIN_PASSWORD', 'HDD_PATH'] +16:29:48Z sabnzbd: the queued job felhom802272a3 is GONE +16:29:49Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +16:30:11Z sabnzbd: job kept, category present=True +16:30:54Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sabnzbd', 'volumes_removed': ['sabnzbd_sabnzbd_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/medi +16:31:03Z == sabnzbd done in 213 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr.console.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr.console.txt new file mode 100644 index 00000000..8b48e571 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr.console.txt @@ -0,0 +1,9 @@ +20:58:42Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:00:12Z [1] deployed, controller state=running, pinned={'seerr': 'fallenbagel/jellyseerr:2.7.3'} +21:00:12Z gate: seerr is gated — passed as the household (cookie set) +21:00:13Z [1] installed: deployed 91 s, front door 92 s +21:00:14Z [3] no fixture for this app — the front door answering is the smallest honest check +21:00:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:01:21Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack seerr +21:03:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +21:03:39Z == seerr done in 298 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/console.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/console.txt new file mode 100644 index 00000000..e3ea6980 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/console.txt @@ -0,0 +1,12 @@ +13:45:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:46:24Z [1] deployed, controller state=running, pinned={'seerr': 'fallenbagel/jellyseerr:2.7.3'} +13:46:25Z gate: seerr is gated — passed as the household (cookie set) +13:53:59Z app never answered on seerr/ (last rc=0 code=307) +13:53:59Z [1] installed: deployed 81 s, front door 535 s +13:53:59Z [3] no fixture for this app — the front door answering is the smallest honest check +13:54:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:54:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:55:22Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack seerr +14:04:15Z app never answered on seerr/ (last rc=0 code=307) +14:04:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +14:05:03Z == seerr done in 1199 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-en.txt new file mode 100644 index 00000000..d632b1ed --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-en.txt @@ -0,0 +1 @@ +Jellyseerr — Guide — Felhom.eu ← Apps Jellyseerr The household asks for a film or a series here ● Running Up to date seerr.tester4.test Open ↗ What is it for? The household can ask for films and series without fuss Sonarr/Radarr fetch them on their own Browse what is already there, on a good-looking page Follow what has happened to a request Per-person quotas and permissions First steps Open seerr.tester4.test in your browser Follow the setup wizard Connect your Jellyfin or Plex server Connect your Sonarr and Radarr Invite the household Before you start A Jellyfin or Plex server is needed Sonarr and/or Radarr is needed for the downloading Ask for a film or a series Anyone in the family can ask for a film or a series, and Jellyseerr hands it to Radarr or Sonarr. Type the title into the „Search Movies & TV” box at the top. Open the result and select „Request”. For a series, tick the seasons you want. Confirm the request with the button at the bottom of the window. Approve requests A family member's request waits until you approve it. Open the „Requests” page in the menu on the left. A waiting request says „Pending”. Select „Approve”, and the request goes to Radarr or Sonarr. „Decline” drops it. Requests without approval For someone you trust, you do not have to approve each request. Open the „Users” page and select „Edit” in the family member's row. Open the „Permissions” tab and tick „Auto-Approve”. Select „Save Changes”. Report a problem with a film If a film came with the wrong audio or without subtitles, a family member can tell you. Open the film and select the warning sign („Report an Issue”). Choose what is wrong, for example „Audio” or „Subtitle”, and describe it briefly. Select „Submit Issue”. You see the reports on the „Issues” page. Frequently asked questions I approved it, but it does not download. Why? The box gave Sonarr and Radarr a tag for every drive (for example hdd-1), and only a tagged item gets a download client. On the „Services” page of Jellyseerr's „Settings”, make „Root Folder” and „Tags” for Radarr and Sonarr name the folder and the tag of the same drive. What do I enter as the address of Radarr and Sonarr? In „Hostname or IP Address” enter radarr, and in „Port” 7878; for Sonarr, sonarr and 8989. You find the API key in Radarr's and Sonarr's own settings. What does „Available” mean? The film or series has downloaded, and you can watch it in Jellyfin or Plex. Can the interface be in Hungarian? Yes. On the „General” tab of „Settings”, choose Hungarian in „Display Language”, then select „Save Changes”. What may I ask for? Only content you have the right to, for example films under a free licence. Where the download comes from is your choice in Prowlarr. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-hu.txt new file mode 100644 index 00000000..a7ad31a4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-guide-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Felhom.eu ← Alkalmazások Jellyseerr Film és sorozat igénylő a háztartás tagjai számára ● Fut Naprakész seerr.tester4.test Megnyitás ↗ Mire használható? Családtagok filmeket és sorozatokat igényelhetnek egyszerűen Automatikus letöltés Sonarr/Radarr integrációval Elérhető tartalmak böngészése szép felületen Igénylések állapotának követése Felhasználói kvóták és jogosultságok kezelése Első lépések Nyisd meg a seerr.tester4.test címet a böngészőben Kövesd a beállítás varázslót Csatlakoztasd a Jellyfin vagy Plex szerveredet Csatlakoztasd a Sonarr és Radarr példányokat Hívd meg a családtagokat Előfeltételek Jellyfin vagy Plex szerver szükséges Sonarr és/vagy Radarr szükséges az automatikus letöltéshez Film vagy sorozat kérése Bármelyik családtag kérhet filmet vagy sorozatot, a Jellyseerr pedig továbbadja a Radarrnak vagy a Sonarrnak. Írd be a címet a felső „Search Movies & TV” (keresés) mezőbe. Nyisd meg a találatot, és kattints a „Request” (kérés) gombra. Sorozatnál jelöld be a kívánt évadokat. Erősítsd meg a kérést az ablak alján lévő gombbal. Kérések jóváhagyása A családtag kérése addig vár, amíg jóvá nem hagyod. Nyisd meg a bal oldali menüben a „Requests” (kérések) oldalt. A várakozó kérés mellett „Pending” (függőben) áll. Kattints az „Approve” (jóváhagyás) gombra, és a kérés a Radarrhoz vagy a Sonarrhoz kerül. A „Decline” (elutasítás) elveti. Kérés jóváhagyás nélkül Akiben megbízol, annak a kérését nem kell külön jóváhagynod. Nyisd meg a „Users” (felhasználók) oldalt, és a családtag sorában kattints az „Edit” (szerkesztés) gombra. Nyisd meg a „Permissions” (jogosultságok) lapot, és jelöld be az „Auto-Approve” (automatikus jóváhagyás) jelölőt. Kattints a „Save Changes” (változások mentése) gombra. Hiba jelzése egy filmnél Ha egy film rossz hanggal vagy felirat nélkül érkezett, a családtag jelezheti neked. Nyisd meg a filmet, és kattints a figyelmeztető jelre („Report an Issue”, hiba jelzése). Válaszd ki, mi a gond, például „Audio” (hang) vagy „Subtitle” (felirat), és írd le röviden. Kattints a „Submit Issue” (beküldés) gombra. A beküldött jelzéseket az „Issues” (hibák) oldalon látod. Gyakori kérdések Jóváhagytam, de nem töltődik le. Miért? A doboz a Sonarrban és a Radarrban minden meghajtóhoz címkét adott (például hdd-1), és csak a címkézett tétel kap letöltőt. A Jellyseerr „Settings” (beállítások) „Services” (szolgáltatások) oldalán a Radarrnál és a Sonarrnál a „Root Folder” (gyökérmappa) és a „Tags” (címkék) ugyanannak a meghajtónak a mappáját és címkéjét válassza. Mit írjak be a Radarr és a Sonarr címéhez? A „Hostname or IP Address” (cím) mezőbe radarr, a „Port” mezőbe 7878 kerül; a Sonarrnál sonarr és 8989. Az API kulcsot a Radarr és a Sonarr saját beállításaiban találod. Mit jelent az „Available” állapot? A film vagy a sorozat letöltődött, és a Jellyfinben vagy a Plexben nézheted. Lehet magyar a felület? Igen. A „Settings” (beállítások) „General” (általános) lapján a „Display Language” (megjelenítési nyelv) mezőben válaszd a magyart, majd kattints a „Save Changes” (változások mentése) gombra. Mit kérhetek? Csak olyan tartalmat, amihez jogod van, például szabad licencű filmeket. Hogy honnan jön a letöltés, azt a Prowlarrban te döntöd el. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-en.txt new file mode 100644 index 00000000..59a69e22 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-en.txt @@ -0,0 +1 @@ +Jellyseerr — Install — Felhom.eu ← Back Jellyseerr — Install Media requests, wired into Jellyfin/Plex ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Jellyseerr (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-hu.txt new file mode 100644 index 00000000..205dc9cf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-install-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Telepítés — Felhom.eu ← Vissza Jellyseerr — Telepítés Média igénylés kezelő Jellyfin/Plex integrációval ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Jellyseerr (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-en.txt new file mode 100644 index 00000000..d3e6b610 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-en.txt @@ -0,0 +1 @@ +Jellyseerr — Settings — Felhom.eu ← Apps Jellyseerr The household asks for a film or a series here ● Running Up to date seerr.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address seerr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-hu.txt new file mode 100644 index 00000000..9560bcd0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/page-overview-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Felhom.eu ← Alkalmazások Jellyseerr Film és sorozat igénylő a háztartás tagjai számára ● Fut Naprakész seerr.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím seerr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/record.json b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/record.json new file mode 100644 index 00000000..c7deea37 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/record.json @@ -0,0 +1,116 @@ +{ + "app": "seerr", + "sub": "seerr", + "fixture": null, + "started": "2026-10-24T13:44:48Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/seerr/install", + "hu_len": 885, + "en_len": 795, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/seerr/install -> 200 'Jellyseerr — Telepítés — Felhom.eu' | shot /root/shots/seerr-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/seerr/install -> 200 'Jellyseerr — Telepítés — Felhom.eu' | shot /root/shots/seerr-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 81, + "front_door": false, + "seconds_to_front_door": 535 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fseerr.tester4.test%2F", + "http_port_80": "301 https://seerr.tester4.test/", + "guide": { + "path": "/apps/seerr/guide", + "hu_len": 3248, + "en_len": 2761, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/seerr", + "hu_len": 715, + "en_len": 722, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/seerr/guide -> 200 'Jellyseerr — Felhom.eu' | shot /root/shots/seerr-after-guide-phone-hu.png hscroll=False", + "goto https://seerr.tester4.test/setup -> 200 'Setup - Jellyseerr' | shot /root/shots/seerr-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.294386358s\", \"last_run\": \"2026-10-24T13:54:20.789082703Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"seerr\", \"started_at\": \"2026-10-24T13:54:29.611300641Z\", \"last\": {\"op\": \"restore\", \"stack\": \"seerr\", \"ok\": true, \"message\": \"A(z) seerr: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:54:44.901892789Z\"}, \"last_recent\": true}", + "state": "running" + }, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "seerr": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "seerr": 198.3 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 1199 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-front-desktop-hu.png new file mode 100644 index 00000000..a8211e0c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-guide-phone-hu.png new file mode 100644 index 00000000..53337ae7 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-desktop-en.png new file mode 100644 index 00000000..5456cd20 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-phone-hu.png new file mode 100644 index 00000000..ff507421 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/screens/seerr-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/walk.log b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/walk.log new file mode 100644 index 00000000..e3ea6980 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/first-run/walk.log @@ -0,0 +1,12 @@ +13:45:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:46:24Z [1] deployed, controller state=running, pinned={'seerr': 'fallenbagel/jellyseerr:2.7.3'} +13:46:25Z gate: seerr is gated — passed as the household (cookie set) +13:53:59Z app never answered on seerr/ (last rc=0 code=307) +13:53:59Z [1] installed: deployed 81 s, front door 535 s +13:53:59Z [3] no fixture for this app — the front door answering is the smallest honest check +13:54:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:54:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:55:22Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack seerr +14:04:15Z app never answered on seerr/ (last rc=0 code=307) +14:04:53Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +14:05:03Z == seerr done in 1199 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-en.txt new file mode 100644 index 00000000..ff2e5cc0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-en.txt @@ -0,0 +1 @@ +Jellyseerr — Guide — Felhom.eu ← Apps Jellyseerr The household asks for a film or a series here ● Running seerr.tester4.test Open ↗ What is it for? The household can ask for films and series without fuss Sonarr/Radarr fetch them on their own Browse what is already there, on a good-looking page Follow what has happened to a request Per-person quotas and permissions First steps Open seerr.tester4.test in your browser Follow the setup wizard Connect your Jellyfin or Plex server Connect your Sonarr and Radarr Invite the household Before you start A Jellyfin or Plex server is needed Sonarr and/or Radarr is needed for the downloading Ask for a film or a series Anyone in the family can ask for a film or a series, and Jellyseerr hands it to Radarr or Sonarr. Type the title into the „Search Movies & TV” box at the top. Open the result and select „Request”. For a series, tick the seasons you want. Confirm the request with the button at the bottom of the window. Approve requests A family member's request waits until you approve it. Open the „Requests” page in the menu on the left. A waiting request says „Pending”. Select „Approve”, and the request goes to Radarr or Sonarr. „Decline” drops it. Requests without approval For someone you trust, you do not have to approve each request. Open the „Users” page and select „Edit” in the family member's row. Open the „Permissions” tab and tick „Auto-Approve”. Select „Save Changes”. Report a problem with a film If a film came with the wrong audio or without subtitles, a family member can tell you. Open the film and select the warning sign („Report an Issue”). Choose what is wrong, for example „Audio” or „Subtitle”, and describe it briefly. Select „Submit Issue”. You see the reports on the „Issues” page. Frequently asked questions I approved it, but it does not download. Why? The box gave Sonarr and Radarr a tag for every drive (for example hdd-1), and only a tagged item gets a download client. On the „Services” page of Jellyseerr's „Settings”, make „Root Folder” and „Tags” for Radarr and Sonarr name the folder and the tag of the same drive. What do I enter as the address of Radarr and Sonarr? In „Hostname or IP Address” enter radarr, and in „Port” 7878; for Sonarr, sonarr and 8989. You find the API key in Radarr's and Sonarr's own settings. What does „Available” mean? The film or series has downloaded, and you can watch it in Jellyfin or Plex. Can the interface be in Hungarian? Yes. On the „General” tab of „Settings”, choose Hungarian in „Display Language”, then select „Save Changes”. What may I ask for? Only content you have the right to, for example films under a free licence. Where the download comes from is your choice in Prowlarr. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-hu.txt new file mode 100644 index 00000000..4aeda5df --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-guide-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Felhom.eu ← Alkalmazások Jellyseerr Film és sorozat igénylő a háztartás tagjai számára ● Fut seerr.tester4.test Megnyitás ↗ Mire használható? Családtagok filmeket és sorozatokat igényelhetnek egyszerűen Automatikus letöltés Sonarr/Radarr integrációval Elérhető tartalmak böngészése szép felületen Igénylések állapotának követése Felhasználói kvóták és jogosultságok kezelése Első lépések Nyisd meg a seerr.tester4.test címet a böngészőben Kövesd a beállítás varázslót Csatlakoztasd a Jellyfin vagy Plex szerveredet Csatlakoztasd a Sonarr és Radarr példányokat Hívd meg a családtagokat Előfeltételek Jellyfin vagy Plex szerver szükséges Sonarr és/vagy Radarr szükséges az automatikus letöltéshez Film vagy sorozat kérése Bármelyik családtag kérhet filmet vagy sorozatot, a Jellyseerr pedig továbbadja a Radarrnak vagy a Sonarrnak. Írd be a címet a felső „Search Movies & TV” (keresés) mezőbe. Nyisd meg a találatot, és kattints a „Request” (kérés) gombra. Sorozatnál jelöld be a kívánt évadokat. Erősítsd meg a kérést az ablak alján lévő gombbal. Kérések jóváhagyása A családtag kérése addig vár, amíg jóvá nem hagyod. Nyisd meg a bal oldali menüben a „Requests” (kérések) oldalt. A várakozó kérés mellett „Pending” (függőben) áll. Kattints az „Approve” (jóváhagyás) gombra, és a kérés a Radarrhoz vagy a Sonarrhoz kerül. A „Decline” (elutasítás) elveti. Kérés jóváhagyás nélkül Akiben megbízol, annak a kérését nem kell külön jóváhagynod. Nyisd meg a „Users” (felhasználók) oldalt, és a családtag sorában kattints az „Edit” (szerkesztés) gombra. Nyisd meg a „Permissions” (jogosultságok) lapot, és jelöld be az „Auto-Approve” (automatikus jóváhagyás) jelölőt. Kattints a „Save Changes” (változások mentése) gombra. Hiba jelzése egy filmnél Ha egy film rossz hanggal vagy felirat nélkül érkezett, a családtag jelezheti neked. Nyisd meg a filmet, és kattints a figyelmeztető jelre („Report an Issue”, hiba jelzése). Válaszd ki, mi a gond, például „Audio” (hang) vagy „Subtitle” (felirat), és írd le röviden. Kattints a „Submit Issue” (beküldés) gombra. A beküldött jelzéseket az „Issues” (hibák) oldalon látod. Gyakori kérdések Jóváhagytam, de nem töltődik le. Miért? A doboz a Sonarrban és a Radarrban minden meghajtóhoz címkét adott (például hdd-1), és csak a címkézett tétel kap letöltőt. A Jellyseerr „Settings” (beállítások) „Services” (szolgáltatások) oldalán a Radarrnál és a Sonarrnál a „Root Folder” (gyökérmappa) és a „Tags” (címkék) ugyanannak a meghajtónak a mappáját és címkéjét válassza. Mit írjak be a Radarr és a Sonarr címéhez? A „Hostname or IP Address” (cím) mezőbe radarr, a „Port” mezőbe 7878 kerül; a Sonarrnál sonarr és 8989. Az API kulcsot a Radarr és a Sonarr saját beállításaiban találod. Mit jelent az „Available” állapot? A film vagy a sorozat letöltődött, és a Jellyfinben vagy a Plexben nézheted. Lehet magyar a felület? Igen. A „Settings” (beállítások) „General” (általános) lapján a „Display Language” (megjelenítési nyelv) mezőben válaszd a magyart, majd kattints a „Save Changes” (változások mentése) gombra. Mit kérhetek? Csak olyan tartalmat, amihez jogod van, például szabad licencű filmeket. Hogy honnan jön a letöltés, azt a Prowlarrban te döntöd el. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-en.txt new file mode 100644 index 00000000..59a69e22 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-en.txt @@ -0,0 +1 @@ +Jellyseerr — Install — Felhom.eu ← Back Jellyseerr — Install Media requests, wired into Jellyfin/Plex ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Jellyseerr (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-hu.txt new file mode 100644 index 00000000..205dc9cf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-install-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Telepítés — Felhom.eu ← Vissza Jellyseerr — Telepítés Média igénylés kezelő Jellyfin/Plex integrációval ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Jellyseerr (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-en.txt new file mode 100644 index 00000000..6dbdf99c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-en.txt @@ -0,0 +1 @@ +Jellyseerr — Settings — Felhom.eu ← Apps Jellyseerr The household asks for a film or a series here ● Running seerr.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address seerr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-hu.txt new file mode 100644 index 00000000..d99e7cae --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/page-overview-hu.txt @@ -0,0 +1 @@ +Jellyseerr — Felhom.eu ← Alkalmazások Jellyseerr Film és sorozat igénylő a háztartás tagjai számára ● Fut seerr.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím seerr.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/record.json b/documentation/audits/catalog-sweep-2026-10-24/seerr/record.json new file mode 100644 index 00000000..1b5d4a38 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/record.json @@ -0,0 +1,110 @@ +{ + "app": "seerr", + "sub": "seerr", + "fixture": null, + "started": "2026-10-24T20:58:22Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/seerr/install", + "hu_len": 885, + "en_len": 795, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/seerr/install -> 200 'Jellyseerr — Telepítés — Felhom.eu' | shot /root/shots/seerr-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/seerr/install -> 200 'Jellyseerr — Telepítés — Felhom.eu' | shot /root/shots/seerr-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 91, + "front_door": true, + "seconds_to_front_door": 92 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fseerr.tester4.test%2F", + "http_port_80": "301 https://seerr.tester4.test/", + "guide": { + "path": "/apps/seerr/guide", + "hu_len": 3238, + "en_len": 2750, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/seerr", + "hu_len": 705, + "en_len": 711, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/seerr/guide -> 200 'Jellyseerr — Felhom.eu' | shot /root/shots/seerr-after-guide-phone-hu.png hscroll=False", + "goto https://seerr.tester4.test/setup -> 200 'Setup - Jellyseerr' | shot /root/shots/seerr-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.322191159s\", \"last_run\": \"2026-10-24T21:00:40.741156905Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "seerr": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "seerr": 191.4 + }, + "mem_anon_peak_mib": { + "seerr": 165.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 298 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-front-desktop-hu.png new file mode 100644 index 00000000..a360e1b5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-guide-phone-hu.png new file mode 100644 index 00000000..c7843fbd Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-desktop-en.png new file mode 100644 index 00000000..5456cd20 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-phone-hu.png new file mode 100644 index 00000000..ff507421 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/seerr/screens/seerr-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/seerr/walk.log b/documentation/audits/catalog-sweep-2026-10-24/seerr/walk.log new file mode 100644 index 00000000..8b48e571 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/seerr/walk.log @@ -0,0 +1,9 @@ +20:58:42Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:00:12Z [1] deployed, controller state=running, pinned={'seerr': 'fallenbagel/jellyseerr:2.7.3'} +21:00:12Z gate: seerr is gated — passed as the household (cookie set) +21:00:13Z [1] installed: deployed 91 s, front door 92 s +21:00:14Z [3] no fixture for this app — the front door answering is the smallest honest check +21:00:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:01:21Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack seerr +21:03:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'seerr', 'volumes_removed': ['seerr_seerr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső meghaj +21:03:39Z == seerr done in 298 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr.console.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr.console.txt new file mode 100644 index 00000000..d3cd2c51 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr.console.txt @@ -0,0 +1,15 @@ +14:36:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:36:06Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:36:46Z [1] deployed, controller state=running, pinned={'sonarr': 'lscr.io/linuxserver/sonarr:4.0.20'} +14:36:46Z gate: sonarr is gated — passed as the household (cookie set) +14:36:46Z [1] installed: deployed 40 s, front door 41 s +14:36:46Z sonarr: tag create http=201 +14:36:46Z sonarr: tags http=200 marker_present=True +14:37:06Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:37:51Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sonarr', 'volumes_removed': ['sonarr_sonarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:38:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:38:20Z sonarr: tags http=200 marker_present=False +14:38:20Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:38:36Z sonarr: tags http=200 marker_present=True +14:39:18Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sonarr', 'volumes_removed': ['sonarr_sonarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:39:26Z == sonarr done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-en.txt new file mode 100644 index 00000000..e29b54d9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-en.txt @@ -0,0 +1 @@ +Sonarr — Guide — Felhom.eu ← Apps Sonarr Series download and file themselves ● Running sonarr.tester4.test Open ↗ Files ↗ What is it for? Series are downloaded and filed on their own A wish list - new episodes arrive as they appear Quality rules (480p to 4K, with an upgrade when a better copy shows up) Works with Jellyfin/Plex and with download clients Subtitles are fetched on their own First steps Open sonarr.tester4.test and create your own sign-in Add your indexers (or use Prowlarr) Search for a series and add it to your list When you are done, press „Done, I set it up” on the dashboard Before you start An external hard drive is needed to keep the media files on A download client is needed (qBittorrent, for example - installed separately) Access to an indexer is needed for searching Add your first series Sonarr watches a series and downloads each new episode as it comes out. In the menu on the left, under „Series”, select „Add New”. Type the title of the series and select the right result. In „Root Folder”, choose the media/tv folder of the drive you want the series on. In „Tags”, type the tag of that same drive, for example hdd-1. Without a tag the series gets no download client. Leave „Start search for missing episodes” ticked and add the series. Follow a download Downloads run in the background, so you can close the page. The „Queue” tab of the „Activity” menu shows what is downloading now. When an episode is done, Sonarr moves it into the series folder by itself. Plex and Jellyfin see it there. The „Calendar” shows when the next episode is due. Search for missing episodes If an older season is missing, you can search for it in one go. Open the „Missing” tab of the „Wanted” menu. Tick the episodes you want and select „Search Selected”. To search for all of them, use „Search All”. When something does not work Sonarr tells you itself when something is wrong. Look at the „Status” tab of the „System” menu: the „Health” part lists the problems. The „Download Clients” page of the „Settings” menu shows the download clients the box connected. If nothing is found, look at the „Indexers” page in Prowlarr: you need at least one source. Frequently asked questions Where does Sonarr download from? From the sources (indexers) you add in Prowlarr. The box connects the two, but it neither provides nor suggests a source: that is your choice. Do I have to set up the download client and the folders? No. For every drive, the box connected the installed download clients (qBittorrent, Transmission), the root folder and the tag. You only add the series. Why is the same file in both the torrents and the tv folder? It does not take double space: it is one file with two names (a hardlink). The download client can keep sharing it, and your library stays tidy. It downloaded, but it is not in the library. Why? Sonarr does not import if less than 10 GB would be left on the drive. The box set this: „Settings”, „Media Management”, „Minimum Free Space”. Free up some space and it goes on at the next check. Where do I watch the series? In Plex or Jellyfin. Sonarr only downloads and files; it cannot play anything. What may I download? Only content you have the right to, for example shows under a free licence. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-hu.txt new file mode 100644 index 00000000..78d0b893 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-guide-hu.txt @@ -0,0 +1 @@ +Sonarr — Felhom.eu ← Alkalmazások Sonarr Automatikus sorozat letöltő és rendszerező ● Fut sonarr.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Sorozatok automatikus letöltése és rendszerezése Kívánságlista kezelés - új epizódok automatikus letöltése Minőség kezelés (480p-tól 4K-ig, automatikus frissítés) Integráció Jellyfin/Plex és letöltő kliensekkel Felirat automatikus letöltés Első lépések Nyisd meg a sonarr.tester4.test címet, és hozd létre a saját belépésedet Add hozzá az indexereket (vagy használj Prowlarr-t) Keress rá egy sorozatra és add hozzá a listádhoz Ha kész, a vezérlőpulton nyomd meg: „Kész, beállítottam” Előfeltételek Külső HDD szükséges a médiafájlok tárolásához Letöltő kliens szükséges (pl. qBittorrent - külön telepítendő) Indexer hozzáférés szükséges a kereséshez Első sorozat hozzáadása A Sonarr figyeli a sorozatot, és letölti az új részeket, amint megjelennek. A bal oldali menüben a „Series” (Sorozatok) alatt kattints az „Add New” (Új hozzáadása) pontra. Írd be a sorozat címét, és kattints a megfelelő találatra. A „Root Folder” (gyökérmappa) mezőben válaszd annak a meghajtónak a media/tv mappáját, ahová a sorozatot szeretnéd. A „Tags” (címkék) mezőbe írd ugyanannak a meghajtónak a címkéjét, például hdd-1. Címke nélkül a sorozat nem kap letöltőt. Hagyd bejelölve a „Start search for missing episodes” (hiányzó részek keresése) jelölőt, és add hozzá a sorozatot. A letöltés követése A letöltés a háttérben fut, az oldalt be is zárhatod. Az „Activity” (Tevékenység) menü „Queue” (Sor) lapján látod, mi töltődik éppen. Ha egy rész letöltődött, a Sonarr magától átteszi a sorozat mappájába. A Plex és a Jellyfin innen látja. A „Calendar” (Naptár) mutatja, mikor jön a következő rész. Hiányzó részek keresése Ha egy régebbi évad hiányzik, egyszerre kerestetheted. Nyisd meg a „Wanted” (Keresett) menü „Missing” (Hiányzó) lapját. Jelöld be a kívánt részeket, és kattints a „Search Selected” (kijelöltek keresése) gombra. Ha mindet keresnéd, használd a „Search All” (összes keresése) gombot. Ha valami nem működik A Sonarr maga jelzi, ha valami hibás. Nézd meg a „System” (Rendszer) menü „Status” (Állapot) lapját: a „Health” (állapot) rész sorolja a hibákat. A „Settings” (Beállítások) menü „Download Clients” (letöltő kliensek) oldalán látod a letöltőket, amelyeket a doboz bekötött. Ha nincs találat, nézd meg a Prowlarr „Indexers” (indexerek) oldalát: legalább egy forrás kell. Gyakori kérdések Honnan tölt le a Sonarr? Azokról a forrásokról (indexerekről), amelyeket te adsz meg a Prowlarrban. A doboz összeköti a kettőt, de forrást nem ad és nem ajánl: ez a te döntésed. Be kell állítanom a letöltő klienst és a mappákat? Nem. A doboz minden meghajtódhoz bekötötte a telepített letöltőket (qBittorrent, Transmission), a gyökérmappát és a címkét. Neked csak a sorozatot kell hozzáadnod. Miért van ugyanaz a fájl a torrents és a tv mappában is? Nem foglal dupla helyet: ugyanaz a fájl két néven (hardlink). A letöltő tovább oszthatja, a könyvtárad pedig rendezett marad. Letöltötte, de nem került a könyvtárba. Miért? Ha a meghajtón kevesebb mint 10 GB maradna, a Sonarr nem importál. Ezt a doboz állította be: „Settings”, „Media Management”, „Minimum Free Space” (legkevesebb szabad hely). Szabadíts fel helyet, és a következő ellenőrzéskor folytatja. Hol nézhetem meg a sorozatokat? A Plexben vagy a Jellyfinben. A Sonarr csak letölt és rendez, lejátszani nem tud. Mit tölthetek le? Csak olyan tartalmat, amihez jogod van, például szabad licencű műsorokat. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-en.txt new file mode 100644 index 00000000..b0b130ab --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-en.txt @@ -0,0 +1 @@ +Sonarr — Install — Felhom.eu ← Back Sonarr — Install Series download and file themselves ~150M RAM Needs a hard drive Full description, screenshots Memory 150 MB / 7479 MB (2%) Current usage (0 MB) Sonarr (+150 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-hu.txt new file mode 100644 index 00000000..93d52059 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-install-hu.txt @@ -0,0 +1 @@ +Sonarr — Telepítés — Felhom.eu ← Vissza Sonarr — Telepítés Automatikus sorozat letöltő és rendszerező ~150M RAM HDD szükséges Részletes leírás, képernyőképek Memória 150 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Sonarr (+150 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-en.txt new file mode 100644 index 00000000..94b895c2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-en.txt @@ -0,0 +1 @@ +Sonarr — Settings — Felhom.eu ← Apps Sonarr Series download and file themselves ● Running sonarr.tester4.test Open ↗ Files ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address sonarr.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-hu.txt new file mode 100644 index 00000000..7adb9a18 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/page-overview-hu.txt @@ -0,0 +1 @@ +Sonarr — Felhom.eu ← Alkalmazások Sonarr Automatikus sorozat letöltő és rendszerező ● Fut sonarr.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím sonarr.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/record.json b/documentation/audits/catalog-sweep-2026-10-24/sonarr/record.json new file mode 100644 index 00000000..b043780f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/record.json @@ -0,0 +1,124 @@ +{ + "app": "sonarr", + "sub": "sonarr", + "fixture": "Arr", + "started": "2026-10-24T14:35:48Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ] + ], + "install_page": { + "path": "/apps/sonarr/install", + "hu_len": 769, + "en_len": 692, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/sonarr/install -> 200 'Sonarr — Telepítés — Felhom.eu' | shot /root/shots/sonarr-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/sonarr/install -> 200 'Sonarr — Telepítés — Felhom.eu' | shot /root/shots/sonarr-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 40, + "front_door": true, + "seconds_to_front_door": 41 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fsonarr.tester4.test%2F", + "http_port_80": "301 https://sonarr.tester4.test/", + "guide": { + "path": "/apps/sonarr/guide", + "hu_len": 3537, + "en_len": 3276, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/sonarr", + "hu_len": 730, + "en_len": 732, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/sonarr/guide -> 200 'Sonarr — Felhom.eu' | shot /root/shots/sonarr-after-guide-phone-hu.png hscroll=False", + "goto https://sonarr.tester4.test/ -> 200 'Sonarr' | shot /root/shots/sonarr-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"4.46896322s\", \"last_run\": \"2026-10-24T14:37:10.624958195Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"sonarr\", \"started_at\": \"2026-10-24T14:38:20.864711456Z\", \"last\": {\"op\": \"restore\", \"stack\": \"sonarr\", \"ok\": true, \"message\": \"A(z) sonarr: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:38:34.462920036Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "sonarr": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "sonarr": 80.3 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 201 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-front-desktop-hu.png new file mode 100644 index 00000000..0b96b95a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-guide-phone-hu.png new file mode 100644 index 00000000..222346b4 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-desktop-en.png new file mode 100644 index 00000000..5bf2de44 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-phone-hu.png new file mode 100644 index 00000000..eef6ef10 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sonarr/screens/sonarr-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sonarr/walk.log b/documentation/audits/catalog-sweep-2026-10-24/sonarr/walk.log new file mode 100644 index 00000000..d3cd2c51 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sonarr/walk.log @@ -0,0 +1,15 @@ +14:36:05Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:36:06Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:36:46Z [1] deployed, controller state=running, pinned={'sonarr': 'lscr.io/linuxserver/sonarr:4.0.20'} +14:36:46Z gate: sonarr is gated — passed as the household (cookie set) +14:36:46Z [1] installed: deployed 40 s, front door 41 s +14:36:46Z sonarr: tag create http=201 +14:36:46Z sonarr: tags http=200 marker_present=True +14:37:06Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:37:51Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sonarr', 'volumes_removed': ['sonarr_sonarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:38:00Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH'] +14:38:20Z sonarr: tags http=200 marker_present=False +14:38:20Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:38:36Z sonarr: tags http=200 marker_present=True +14:39:18Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sonarr', 'volumes_removed': ['sonarr_sonarr_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_1/userdata/media ( +14:39:26Z == sonarr done in 201 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness.console.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness.console.txt new file mode 100644 index 00000000..999b96d8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness.console.txt @@ -0,0 +1,16 @@ +17:42:45Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:44:16Z [1] deployed, controller state=unhealthy, pinned={'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.3', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.3'} +17:44:16Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +17:44:16Z gate: sparky is gated — passed as the household (cookie set) +17:44:16Z [1] installed: deployed 91 s, front door 91 s +17:44:16Z sparkyfitness: sign-up http=200 +17:44:17Z sparkyfitness: check-in http=200 +17:44:17Z sparkyfitness: seeded user drille44564 with a weight of 59.96 on 2026-09-01 +17:44:17Z sparkyfitness: readback of the seeded weight http=200 equal=True +17:44:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:45:52Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sparkyfitness', 'volumes_removed': ['sparkyfitness_sparkyfitness_backup', 'sparkyfitness_sparkyfitness_db_data', 'sparkyfitness_sparkyfitness_uploads'], 'hdd_paths_re +17:47:11Z sparkyfitness: the seeded user could not sign in (http 401) +17:47:11Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:47:57Z sparkyfitness: readback of the seeded weight http=200 equal=True +17:48:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sparkyfitness', 'volumes_removed': ['sparkyfitness_sparkyfitness_backup', 'sparkyfitness_sparkyfitness_db_data', 'sparkyfitness_sparkyfitness_uploads'], 'hdd_paths_re +17:48:46Z == sparkyfitness done in 361 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-en.txt new file mode 100644 index 00000000..5ba9c8c7 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-en.txt @@ -0,0 +1 @@ +SparkyFitness — Guide — Felhom.eu ← Apps SparkyFitness A food diary, calorie counter and exercise tracker - on your own server ● Not healthy sparky.tester4.test Open ↗ What is it for? Log what you eat and how many calories it comes to Track your weight and measurements on a graph Record workouts and movement Set nutrition targets (protein, carbohydrate, fat) and follow them See how you are getting on, over time and in numbers First steps Open sparky.tester4.test in your browser Sign up with an e-mail address and a password Set your profile and your daily targets Start logging your meals and workouts Before you start On the first start the server runs its database migrations - this can take a minute or two before the app answers Log a food On the „Diary” page you record what you ate, meal by meal. On the card of „Breakfast” or another meal, select the cutlery icon („Add a new food item”). Type the name of the food into the search box. Results from the online database appear next to your own foods. Choose the food. For an online result, save its details first: that puts it among your own foods. Enter how much you ate in „Quantity”, and select „Add to Meal”. Record your weight You keep your weight and measurements on the „Check-In” page. Open the „Check-In” page. Enter your weight in „Weight”. If you like, add your waist and hip measurements too. Select „Save Check-In”. The „Reports” page shows the change on a chart. Add a family member Every family member keeps their own diary with their own account. On the dashboard, on the app's „Settings” tab, select „Open sign-up for 15 minutes”. During that time the family member opens sparky.tester4.test and signs up. When the 15 minutes are over, sign-up closes by itself. Share your diary with a family member You can let a family member see your reports, or keep your diary for you. Open the „Settings” page, and under „Family Access” select „Add Family Member”. In „Family Member Email”, enter the address they signed up with. Tick what they may do, for example „Can View Reports” or „Can Manage Diary”, and save. The family member can switch to your profile in the top right corner. Frequently asked questions Can the interface be in Hungarian? Yes. On the „Settings” page, open „Preferences”, choose Hungarian in „Language”, and select „Save Preferences”. I cannot find a food. What can I do? In the food search window, „Custom Food” lets you add it with its nutrition values. Next time you find it among your own foods. Can family members see my diary? No. Only someone you give access to under „Family Access” can see into it. Is there a phone app? There is one for iPhone in the App Store; for Android a test version is available for now. The app connects to sparky.tester4.test. Where do I see that my diary is saved? The data is on the box. The dashboard shows the state of its backup on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-hu.txt new file mode 100644 index 00000000..b07ce5ba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-guide-hu.txt @@ -0,0 +1 @@ +SparkyFitness — Felhom.eu ← Alkalmazások SparkyFitness Táplálkozási napló, kalóriaszámláló és edzéskövető – önállóan üzemeltetve ● Nem egészséges sparky.tester4.test Megnyitás ↗ Mire használható? Napi étkezések és kalóriabevitel naplózása Testsúly és testméretek követése grafikonokkal Edzések és mozgás rögzítése Tápanyag-célok (fehérje, szénhidrát, zsír) beállítása és követése Haladás áttekintése idővonalon és statisztikákon Első lépések Nyisd meg a sparky.tester4.test címet a böngészőben Regisztrálj egy fiókot e-mail címmel és jelszóval Állítsd be a profilodat és a napi céljaidat Kezdd el naplózni az étkezéseidet és edzéseidet Előfeltételek Az első indításkor a szerver lefuttatja az adatbázis-migrációkat – ez akár 1-2 percig is eltarthat, mire az alkalmazás elérhetővé válik Étel felvétele a naplóba A „Diary” (Napló) oldalon étkezésenként rögzíted, mit ettél. A „Breakfast” (Reggeli) vagy egy másik étkezés kártyáján kattints az evőeszköz ikonra („Add a new food item”, étel hozzáadása). Írd be az étel nevét a keresőbe. A saját ételeid mellett az online adatbázis találatai is megjelennek. Válaszd ki az ételt. Az online találat adatait előbb mentsd: így a saját ételeid közé kerül. A „Quantity” (mennyiség) mezőben add meg, mennyit ettél, és kattints az „Add to Meal” (hozzáadás az étkezéshez) gombra. Testsúly rögzítése A testsúlyodat és a méreteidet a „Check-In” (napi mérés) oldalon vezeted. Nyisd meg a „Check-In” oldalt. Írd be a súlyodat a „Weight” (testsúly) mezőbe. Ha szeretnéd, a derék- és a csípőméretet is. Kattints a „Save Check-In” (mentés) gombra. A változást a „Reports” (kimutatások) oldalon grafikonon látod. Családtag hozzáadása Minden családtag saját fiókkal vezeti a saját naplóját. A vezérlőpulton az alkalmazás „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtag ezalatt megnyitja a sparky.tester4.test címet, és regisztrál. A 15 perc letelte után a regisztráció magától bezárul. Napló megosztása családtaggal Megengedheted egy családtagnak, hogy lássa a kimutatásaidat, vagy helyetted vezesse a naplódat. Nyisd meg a „Settings” (Beállítások) oldalt, és a „Family Access” (családi hozzáférés) részben kattints az „Add Family Member” (családtag hozzáadása) gombra. A „Family Member Email” (a családtag e-mail címe) mezőbe írd be azt a címet, amellyel regisztrált. Jelöld be, mit tehet, például „Can View Reports” (kimutatások megtekintése) vagy „Can Manage Diary” (napló vezetése), és mentsd. A családtag a jobb felső sarokban válthat át a te profilodra. Gyakori kérdések Lehet magyar a felület? Igen. A „Settings” (Beállítások) oldalon nyisd meg a „Preferences” (beállítások) részt, a „Language” (nyelv) mezőben válaszd a magyart, és kattints a „Save Preferences” (mentés) gombra. Nem találom az ételt. Mit tehetek? Az étel keresőablakában a „Custom Food” (saját étel) gombbal felveheted a tápértékeivel együtt. Legközelebb már a saját ételeid között megtalálod. Látják a családtagok a naplómat? Nem. Csak az lát bele, akinek a „Family Access” (családi hozzáférés) részben hozzáférést adsz. Van telefonos app? Van iPhone-ra az App Store-ban, Androidra egyelőre tesztváltozat érhető el. Az app a sparky.tester4.test címhez kapcsolódik. Hol látom, hogy a naplóm el van mentve? Az adatok a dobozon vannak. A mentésük állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-en.txt new file mode 100644 index 00000000..9ad38992 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-en.txt @@ -0,0 +1 @@ +SparkyFitness — Install — Felhom.eu ← Back SparkyFitness — Install A food and exercise tracker ~400M RAM Full description, screenshots Memory 400 MB / 7479 MB (5%) Current usage (0 MB) SparkyFitness (+400 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Database password Generated automatically Show Application database password Generated automatically Show Data encryption key Generated automatically Show Session signing key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-hu.txt new file mode 100644 index 00000000..13933adb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-install-hu.txt @@ -0,0 +1 @@ +SparkyFitness — Telepítés — Felhom.eu ← Vissza SparkyFitness — Telepítés Táplálkozás- és edzéskövető ~400M RAM Részletes leírás, képernyőképek Memória 400 MB / 7479 MB (5%) Jelenlegi használat (0 MB) SparkyFitness (+400 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Adatbázis jelszó Automatikusan generálva Megjelenítés Alkalmazás adatbázis jelszó Automatikusan generálva Megjelenítés Adattitkosítási kulcs Automatikusan generálva Megjelenítés Munkamenet aláíró kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-en.txt new file mode 100644 index 00000000..cd8ec450 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-en.txt @@ -0,0 +1 @@ +SparkyFitness — Settings — Felhom.eu ← Apps SparkyFitness A food diary, calorie counter and exercise tracker - on your own server ● Not healthy sparky.tester4.test Open ↗ Running Not healthy Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address sparky.tester4.test Database password Show Application database password Show Data encryption key Show Session signing key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-hu.txt new file mode 100644 index 00000000..0bab0e76 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/page-overview-hu.txt @@ -0,0 +1 @@ +SparkyFitness — Felhom.eu ← Alkalmazások SparkyFitness Táplálkozási napló, kalóriaszámláló és edzéskövető – önállóan üzemeltetve ● Nem egészséges sparky.tester4.test Megnyitás ↗ Működés Nem egészséges Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím sparky.tester4.test Adatbázis jelszó Megjelenítés Alkalmazás adatbázis jelszó Megjelenítés Adattitkosítási kulcs Megjelenítés Munkamenet aláíró kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/record.json b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/record.json new file mode 100644 index 00000000..8f9aa980 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/record.json @@ -0,0 +1,157 @@ +{ + "app": "sparkyfitness", + "sub": "sparky", + "fixture": "Sparkyfitness", + "started": "2026-10-24T17:42:23Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "DB_PASSWORD", + "secret", + false + ], + [ + "APP_DB_PASSWORD", + "secret", + false + ], + [ + "API_ENCRYPTION_KEY", + "secret", + false + ], + [ + "BETTER_AUTH_SECRET", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/sparkyfitness/install", + "hu_len": 1111, + "en_len": 995, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/sparkyfitness/install -> 200 'SparkyFitness — Telepítés — Felhom.eu' | shot /root/shots/sparkyfitness-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/sparkyfitness/install -> 200 'SparkyFitness — Telepítés — Felhom.eu' | shot /root/shots/sparkyfitness-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 91, + "front_door": true, + "seconds_to_front_door": 91 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fsparky.tester4.test%2F", + "http_port_80": "301 https://sparky.tester4.test/", + "guide": { + "path": "/apps/sparkyfitness/guide", + "hu_len": 3396, + "en_len": 2936, + "english_words_in_hu": [ + "settings" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/sparkyfitness", + "hu_len": 977, + "en_len": 929, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/sparkyfitness/guide -> 200 'SparkyFitness — Felhom.eu' | shot /root/shots/sparkyfitness-after-guide-phone-hu.png hscroll=False", + "goto https://sparky.tester4.test/ -> 200 'SparkyFitness' | shot /root/shots/sparkyfitness-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 40, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"35.788702448s\", \"last_run\": \"2026-10-24T17:45:14.922667056Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 45, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"sparkyfitness\", \"started_at\": \"2026-10-24T17:47:11.856213122Z\", \"last\": {\"op\": \"restore\", \"stack\": \"sparkyfitness\", \"ok\": true, \"message\": \"A(z) sparkyfitness: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T17:47:55.258479057Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "sparkyfitness": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "sparkyfitness-server": { + "limit_mib": 1024, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "sparkyfitness-db": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 3, + "sample": [ + "sparkyfitness: NGINX_ERROR_LOG=/var/log/nginx/error.log", + "sparkyfitness-server: 2026-10-24T17:47:57.392Z ERROR [Better Auth]: Invalid password", + "sparkyfitness-db: 2026-10-24 19:47:20.255 CEST [42] FATAL: database \"sparky\" does not exist" + ] + }, + "mem_peak_mib": { + "sparkyfitness-server": 357.5, + "sparkyfitness-db": 52.9, + "sparkyfitness": 6.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 361 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-front-desktop-hu.png new file mode 100644 index 00000000..9c25c47a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-guide-phone-hu.png new file mode 100644 index 00000000..33a580b2 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-desktop-en.png new file mode 100644 index 00000000..e5ce8a0d Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-phone-hu.png new file mode 100644 index 00000000..53734bf0 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/screens/sparkyfitness-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/walk.log b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/walk.log new file mode 100644 index 00000000..999b96d8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/sparkyfitness/walk.log @@ -0,0 +1,16 @@ +17:42:45Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:44:16Z [1] deployed, controller state=unhealthy, pinned={'sparkyfitness-db': 'postgres:18-alpine', 'sparkyfitness-frontend': 'codewithcj/sparkyfitness:v0.17.3', 'sparkyfitness-server': 'codewithcj/sparkyfitness_server:v0.17.3'} +17:44:16Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +17:44:16Z gate: sparky is gated — passed as the household (cookie set) +17:44:16Z [1] installed: deployed 91 s, front door 91 s +17:44:16Z sparkyfitness: sign-up http=200 +17:44:17Z sparkyfitness: check-in http=200 +17:44:17Z sparkyfitness: seeded user drille44564 with a weight of 59.96 on 2026-09-01 +17:44:17Z sparkyfitness: readback of the seeded weight http=200 equal=True +17:44:39Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:45:52Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'sparkyfitness', 'volumes_removed': ['sparkyfitness_sparkyfitness_backup', 'sparkyfitness_sparkyfitness_db_data', 'sparkyfitness_sparkyfitness_uploads'], 'hdd_paths_re +17:47:11Z sparkyfitness: the seeded user could not sign in (http 401) +17:47:11Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:47:57Z sparkyfitness: readback of the seeded weight http=200 equal=True +17:48:37Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'sparkyfitness', 'volumes_removed': ['sparkyfitness_sparkyfitness_backup', 'sparkyfitness_sparkyfitness_db_data', 'sparkyfitness_sparkyfitness_uploads'], 'hdd_paths_re +17:48:46Z == sparkyfitness done in 361 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor.console.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor.console.txt new file mode 100644 index 00000000..a447a616 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor.console.txt @@ -0,0 +1,15 @@ +17:22:57Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:25:53Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +17:25:53Z gate: recipes is gated — passed as the household (cookie set) +17:25:53Z [1] installed: deployed 176 s, front door 177 s +17:26:08Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully. +17:26:12Z tandoor: seeded superuser drill01dc05 +17:26:22Z tandoor: readback of the seeded account found=True +17:26:44Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:27:32Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +17:30:47Z tandoor: readback of the seeded account found=False +17:30:47Z tandoor: :: Running django-vite in production mode (no HMR) 72 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +17:30:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:32:48Z tandoor: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: n3.13/site-packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "tandoo +17:33:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +17:33:39Z == tandoor done in 642 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-en.txt new file mode 100644 index 00000000..75bf9b32 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-en.txt @@ -0,0 +1 @@ +Tandoor Recipes — Guide — Felhom.eu ← Apps Tandoor Recipes A recipe manager and meal planner for the household ● Running Up to date recipes.tester4.test Open ↗ What is it for? Keep all your recipes in one place Import a recipe from a web page with one click Plan the week's meals and get a shopping list out of it Several people - the household can plan together Share a recipe by link with family and friends First steps Open recipes.tester4.test in your browser Create the admin account Import your first recipe from a web page (Bookmarklet) Try the meal planner Invite the household A shopping list from a recipe You can put a recipe's ingredients on the shopping list in a few clicks. Open the recipe and select the three dots in the top right corner. Choose „Add to Shopping”, and in „Servings” enter how many servings you cook. Select the „Add to Shopping” button. When you shop, open the „Shopping” page in the menu and tick off what you have bought. Scale the servings and print Tandoor adjusts the ingredient amounts to the number of servings. On the recipe page, select the number of servings („Servings”). Enter how many servings you cook and select „Save”. The ingredient amounts follow. To print, choose „Print” in the three-dot menu: it prints with the scaled servings. Share a recipe With a link you can show a recipe even to someone who has no account. Open the recipe, select the three dots and choose „Share”. Copy the link with the button next to the „Link” field. Send the link, for example in a message. Whoever gets it sees this one recipe without signing in. Find a recipe Once you have many recipes, search and filters find the one you want quickly. Open the „Search” page in the menu. Type part of the recipe's name. To narrow it down, select the „Add Filter” box and choose, for example, a filter by keyword. Frequently asked questions Why are some labels in English? Tandoor follows your browser's language, and its Hungarian translation is not complete yet. Where there is no translation, the English label shows. Can my family see my recipes? Yes, everyone in the shared space sees the recipes. If one is only for you, tick „Private Recipe” when you edit it. Is the shopping list shared? People in the same household (Household) see the meal plan and the shopping list together. You put a member into a household in the space settings, in the list of members. Is there a phone app? There is no separate app, but you can put Tandoor on your home screen from your phone's browser. It then starts like an app and shows recently opened recipes even without internet. Where do I see that my recipes are saved? The recipes and the pictures are on the box. The dashboard shows the state of their backup on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-hu.txt new file mode 100644 index 00000000..9ede650c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-guide-hu.txt @@ -0,0 +1 @@ +Tandoor Recipes — Felhom.eu ← Alkalmazások Tandoor Recipes Receptkezelő és étkezés tervező a családnak ● Fut Naprakész recipes.tester4.test Megnyitás ↗ Mire használható? Receptek gyűjtése és rendszerezése egy helyen Receptek importálása weboldalakról egy kattintással Heti étkezés tervezés és bevásárlólista generálás Több felhasználó - a család együtt tervezhet Receptek megosztása linkkel családtagokkal, barátokkal Első lépések Nyisd meg a recipes.tester4.test címet a böngészőben Hozd létre az admin fiókot Importáld az első receptet egy weboldalról (Bookmarklet) Próbáld ki az étkezés tervezőt Hívd meg a családtagokat Bevásárlólista egy receptből Egy recept hozzávalóit néhány kattintással a bevásárlólistára teheted. Nyisd meg a receptet, és kattints a jobb felső sarokban a három pontra. Válaszd a „Hozzáadás a bevásárlólistához” pontot, és az „Adag” mezőben add meg, hány adagot főzöl. Kattints a „Hozzáadás a bevásárlólistához” gombra. Vásárláskor nyisd meg a menüben a „Bevásárlás” oldalt, és pipáld ki, amit már megvettél. Adag átszámolása és nyomtatás A Tandoor a hozzávalók mennyiségét az adagszámhoz igazítja. A recept oldalán kattints az adagszámra („Adag”). Írd be, hány adagot főzöl, és kattints a „Mentés” gombra. A hozzávalók mennyisége ehhez igazodik. Nyomtatáshoz a három pont menüben válaszd a „Nyomtatás” pontot: az átszámolt adaggal nyomtat. Recept megosztása Egy receptet linkkel olyannak is megmutathatsz, akinek nincs fiókja. Nyisd meg a receptet, kattints a három pontra, és válaszd a „Megosztás” pontot. A „Link” mező melletti gombbal másold ki a linket. Küldd el a linket, például üzenetben. Aki megkapja, bejelentkezés nélkül látja ezt az egy receptet. Recept keresése Ha már sok recepted van, kereséssel és szűrőkkel hamar megtalálod, amit akarsz. Nyisd meg a menüben a „Keresés” oldalt. Írd be a recept nevének egy részét. Szűkítéshez kattints a „Szűrő hozzáadása” mezőbe, és válassz például kulcsszó szerinti szűrőt. Gyakori kérdések Miért angol néhány felirat? A Tandoor a böngésződ nyelvét követi, és a magyar fordítása még nem teljes. Ahol nincs fordítás, ott angol felirat jelenik meg. Látják a családtagok a receptjeimet? Igen, a közös térben mindenki látja a recepteket. Ha egyet csak magadnak szánsz, szerkesztéskor jelöld be a „Privát recept” jelölőt. Közös a bevásárlólista? Akik ugyanabba a háztartásba (Household) tartoznak, azok közösen látják a menütervet és a bevásárlólistát. Egy tagot a tér beállításaiban, a tagok listáján sorolhatsz háztartásba. Van telefonos app? Külön app nincs, de a Tandoort a telefonod böngészőjéből a kezdőképernyőre teheted. Így appként indul, és a nemrég megnyitott recepteket net nélkül is mutatja. Hol látom, hogy a receptjeim el vannak mentve? A receptek és a képek a dobozon vannak. A mentésük állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-en.txt new file mode 100644 index 00000000..584e5f03 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-en.txt @@ -0,0 +1 @@ +Tandoor Recipes — Install — Felhom.eu ← Back Tandoor Recipes — Install A recipe manager and meal planner ~900M RAM Full description, screenshots Memory 900 MB / 7479 MB (12%) Current usage (0 MB) Tandoor Recipes (+900 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-hu.txt new file mode 100644 index 00000000..52f12a13 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-install-hu.txt @@ -0,0 +1 @@ +Tandoor Recipes — Telepítés — Felhom.eu ← Vissza Tandoor Recipes — Telepítés Receptkezelő és étkezés tervező ~900M RAM Részletes leírás, képernyőképek Memória 900 MB / 7479 MB (12%) Jelenlegi használat (0 MB) Tandoor Recipes (+900 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-en.txt new file mode 100644 index 00000000..5ffeeb5f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-en.txt @@ -0,0 +1 @@ +Tandoor Recipes — Settings — Felhom.eu ← Apps Tandoor Recipes A recipe manager and meal planner for the household ● Running Up to date recipes.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address recipes.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-hu.txt new file mode 100644 index 00000000..6d20cffb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/page-overview-hu.txt @@ -0,0 +1 @@ +Tandoor Recipes — Felhom.eu ← Alkalmazások Tandoor Recipes Receptkezelő és étkezés tervező a családnak ● Fut Naprakész recipes.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím recipes.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/record.json b/documentation/audits/catalog-sweep-2026-10-24/tandoor/record.json new file mode 100644 index 00000000..5e1d4e40 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/record.json @@ -0,0 +1,139 @@ +{ + "app": "tandoor", + "sub": "recipes", + "fixture": "Django", + "started": "2026-10-24T17:22:38Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SECRET_KEY", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/tandoor/install", + "hu_len": 992, + "en_len": 895, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/tandoor/install -> 200 'Tandoor Recipes — Telepítés — Felhom.eu' | shot /root/shots/tandoor-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/tandoor/install -> 200 'Tandoor Recipes — Telepítés — Felhom.eu' | shot /root/shots/tandoor-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 176, + "front_door": true, + "seconds_to_front_door": 177 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Frecipes.tester4.test%2F", + "http_port_80": "301 https://recipes.tester4.test/", + "guide": { + "path": "/apps/tandoor/guide", + "hu_len": 2886, + "en_len": 2799, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/tandoor", + "hu_len": 783, + "en_len": 784, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/tandoor/guide -> 200 'Tandoor Recipes — Felhom.eu' | shot /root/shots/tandoor-after-guide-phone-hu.png hscroll=False", + "goto https://recipes.tester4.test/accounts/login/?next=/ -> 200 'Bejelentkezés' | shot /root/shots/tandoor-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"13.64440852s\", \"last_run\": \"2026-10-24T17:26:57.908029553Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 116, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"tandoor\", \"started_at\": \"2026-10-24T17:30:47.229433732Z\", \"last\": {\"op\": \"restore\", \"stack\": \"tandoor\", \"ok\": true, \"message\": \"A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T17:32:41.465333131Z\"}, \"last_recent\": true}", + "state": "starting" + }, + "seed_read_after_unit_restore": false, + "containers": { + "tandoor": { + "limit_mib": 1280, + "restarts": 0, + "status": "running", + "health": "starting" + }, + "tandoor-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 152, + "sample": [ + "tandoor: Traceback (most recent call last):", + "tandoor: psycopg2.OperationalError: connection to server at \"tandoor-postgres\" (172.20.0.2), port 5432 failed: FATAL: password authentication failed for user \"tandoor\"", + "tandoor: The above exception was the direct cause of the following exception:", + "tandoor: Traceback (most recent call last):" + ] + }, + "mem_peak_mib": { + "tandoor-postgres": 43.0, + "tandoor": 1009.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 642 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-front-desktop-hu.png new file mode 100644 index 00000000..916494f8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-guide-phone-hu.png new file mode 100644 index 00000000..c52e298c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-desktop-en.png new file mode 100644 index 00000000..2aaf8cf1 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-phone-hu.png new file mode 100644 index 00000000..d9f04ed7 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/tandoor/screens/tandoor-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/tandoor/walk.log b/documentation/audits/catalog-sweep-2026-10-24/tandoor/walk.log new file mode 100644 index 00000000..a447a616 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tandoor/walk.log @@ -0,0 +1,15 @@ +17:22:57Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +17:25:53Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'} +17:25:53Z gate: recipes is gated — passed as the household (cookie set) +17:25:53Z [1] installed: deployed 176 s, front door 177 s +17:26:08Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully. +17:26:12Z tandoor: seeded superuser drill01dc05 +17:26:22Z tandoor: readback of the seeded account found=True +17:26:44Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +17:27:32Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +17:30:47Z tandoor: readback of the seeded account found=False +17:30:47Z tandoor: :: Running django-vite in production mode (no HMR) 72 objects imported automatically (use -v 2 for details). DRILL_ANSWER=False +17:30:47Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +17:32:48Z tandoor: READBACK UNUSABLE — a username that cannot exist did not read as absent (None) :: n3.13/site-packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: connection to server at "tandoo +17:33:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], +17:33:39Z == tandoor done in 642 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix.console.txt b/documentation/audits/catalog-sweep-2026-10-24/termix.console.txt new file mode 100644 index 00000000..c730a9ac --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix.console.txt @@ -0,0 +1,10 @@ +13:28:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:29:16Z [1] deployed, controller state=running, pinned={'termix': 'ghcr.io/lukegus/termix:2.8.0'} +13:29:16Z gate: termix is gated — passed as the household (cookie set) +13:29:16Z [1] installed: deployed 61 s, front door 61 s +13:29:16Z [3] no fixture for this app — the front door answering is the smallest honest check +13:29:35Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:29:45Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:30:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'termix', 'volumes_removed': ['termix_termix_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack term +13:31:56Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'termix', 'volumes_removed': ['termix_termix_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +13:32:04Z == termix done in 229 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-en.txt new file mode 100644 index 00000000..41cf3091 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-en.txt @@ -0,0 +1 @@ +Termix — Guide — Felhom.eu ← Apps Termix An SSH terminal in your browser - reach a server from anywhere ● Running termix.tester4.test Open ↗ What is it for? Reach your server over SSH from a browser No SSH client needed on the computer you are sitting at Everyday server jobs from anywhere First steps Open termix.tester4.test in your browser Connect to your server over SSH Save a server You connect to a saved server later with one click. In the bar on the left, select „Add Host”. Enter the server's address in „Address / IP”, and a name that makes sense to you in „Friendly Name”. Fill in „Username”, and under „Authentication Method” choose whether you sign in with a password or a key. Select „Add Host”. The server appears in the list. Upload and download files Next to the terminal, a file manager reaches the server's files too. In the server's row, select the folder icon („Files”). To upload, select „Upload”, or drag the file into the window. To download, right-click the file and choose „Download”. „New Folder” creates a new folder. Two-step sign-in Termix lets you into your servers, so it is worth protecting the sign-in with a code from your phone too. Open the „User Profile” panel, and in it the „Security” part. Next to „TOTP Authenticator”, select „Enable”. Scan the QR code with the authenticator app on your phone, and select „Continue to Verify”. Enter the six-digit code from the app and select „Verify”. Write down the „Backup Codes” that appear and keep them somewhere safe. Add a family member Every family member uses Termix with their own account and their own servers. On the dashboard, on the app's „Settings” tab, select „Open sign-up for 15 minutes”. During that time the family member opens termix.tester4.test and creates an account. When the 15 minutes are over, sign-up closes by itself. Frequently asked questions Can the interface be in Hungarian? Yes. In the „User Profile” panel, choose Hungarian in „Language”. The translation is inaccurate in places, so this guide uses the English labels. Which servers can I connect to? Any server the box can reach over SSH, for example another computer at home. The box makes the connection, not your own computer. Can I sign in with a key instead of a password? Yes. In the server's details, choose the key as the sign-in method and paste your key into „SSH Private Key”. I lost the phone with the two-step code. What do I do? Sign in with one of the backup codes you got when you switched it on. Then you can set up a new device in the „Security” part. Where do I see that my saved servers are backed up? The saved servers and sign-in details are on the box. The dashboard shows the state of their backup on the app's „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-hu.txt new file mode 100644 index 00000000..ac167f75 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-guide-hu.txt @@ -0,0 +1 @@ +Termix — Felhom.eu ← Alkalmazások Termix Webes SSH terminál - szerver hozzáférés a böngészőből ● Fut termix.tester4.test Megnyitás ↗ Mire használható? SSH hozzáférés a szerveredhez böngészőből Nincs szükség SSH kliensre a számítógépen Alapvető szerver menedzsment feladatok bárhonnan Első lépések Nyisd meg a termix.tester4.test címet a böngészőben Csatlakozz a szerveredhez SSH-n keresztül Szerver elmentése Egy elmentett szerverhez később egy kattintással csatlakozol. A bal oldali sávban kattints az „Add Host” (gép hozzáadása) gombra. Az „Address / IP” (cím) mezőbe írd a szerver címét, a „Friendly Name” (megjelenő név) mezőbe egy neked érthető nevet. Töltsd ki a „Username” (felhasználónév) mezőt, és az „Authentication Method” (belépés módja) alatt válaszd, hogy jelszóval vagy kulccsal lépsz be. Kattints az „Add Host” gombra. A szerver megjelenik a listában. Fájlok fel- és letöltése A terminál mellett fájlkezelővel is eléred a szerver fájljait. A szerver sorában kattints a mappa ikonra („Files”, fájlok). Feltöltéshez kattints az „Upload” (feltöltés) gombra, vagy húzd a fájlt az ablakba. Letöltéshez kattints jobb gombbal a fájlra, és válaszd a „Download” (letöltés) pontot. Új mappát a „New Folder” (új mappa) gombbal hozol létre. Kétlépcsős belépés A Termix a szervereidhez enged be, ezért érdemes a belépést egy telefonos kóddal is védeni. Nyisd meg a „User Profile” (felhasználói profil) panelt, és azon belül a „Security” (biztonság) részt. A „TOTP Authenticator” (hitelesítő app) mellett kattints az „Enable” (bekapcsolás) gombra. Olvasd be a QR-kódot a telefonod hitelesítő appjával, és kattints a „Continue to Verify” (tovább az ellenőrzéshez) gombra. Írd be az appban látott hatjegyű kódot, és kattints a „Verify” (ellenőrzés) gombra. A megjelenő „Backup Codes” (tartalék kódok) listát írd le, és tedd el biztos helyre. Családtag hozzáadása Minden családtag saját fiókkal, a saját szervereivel használja a Termixet. A vezérlőpulton az alkalmazás „Beállítások” fülén kattints a „Regisztráció megnyitása 15 percre” gombra. A családtag ezalatt megnyitja a termix.tester4.test címet, és létrehozza a fiókját. A 15 perc letelte után a regisztráció magától bezárul. Gyakori kérdések Lehet magyar a felület? Igen. A „User Profile” (felhasználói profil) panelen a „Language” (nyelv) mezőben válaszd a magyart. A fordítás helyenként pontatlan, ezért ez az útmutató az angol feliratokat használja. Melyik szerverre tudok csatlakozni? Bármelyikre, amely a dobozról SSH-n elérhető, például egy másik otthoni gépre. A kapcsolatot a doboz építi fel, nem a te számítógéped. Kulccsal is beléphetek jelszó helyett? Igen. A szerver adatainál a belépés módjánál válaszd a kulcsot, és illeszd be a kulcsodat az „SSH Private Key” (privát kulcs) mezőbe. Elvesztettem a telefonomat a kétlépcsős kóddal. Mit tegyek? Lépj be az egyik tartalék kóddal, amelyet a bekapcsoláskor kaptál. Utána a „Security” (biztonság) részben új eszközt állíthatsz be. Hol látom, hogy a mentett szervereim el vannak mentve? A mentett szerverek és belépési adatok a dobozon vannak. A mentésük állapotát a vezérlőpulton, az alkalmazás „Adatok és mentés” fülén látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-en.txt new file mode 100644 index 00000000..480f3a27 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-en.txt @@ -0,0 +1 @@ +Termix — Install — Felhom.eu ← Back Termix — Install SSH and server management in a browser ~150M RAM Full description, screenshots Memory 150 MB / 7479 MB (2%) Current usage (0 MB) Termix (+150 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-hu.txt new file mode 100644 index 00000000..ec819837 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-install-hu.txt @@ -0,0 +1 @@ +Termix — Telepítés — Felhom.eu ← Vissza Termix — Telepítés Webes SSH és szerver menedzser ~150M RAM Részletes leírás, képernyőképek Memória 150 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Termix (+150 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-en.txt new file mode 100644 index 00000000..5acdc200 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-en.txt @@ -0,0 +1 @@ +Termix — Settings — Felhom.eu ← Apps Termix An SSH terminal in your browser - reach a server from anywhere ● Running termix.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address termix.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-hu.txt new file mode 100644 index 00000000..3a14282f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/page-overview-hu.txt @@ -0,0 +1 @@ +Termix — Felhom.eu ← Alkalmazások Termix Webes SSH terminál - szerver hozzáférés a böngészőből ● Fut termix.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím termix.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/record.json b/documentation/audits/catalog-sweep-2026-10-24/termix/record.json new file mode 100644 index 00000000..32bbb27a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/record.json @@ -0,0 +1,114 @@ +{ + "app": "termix", + "sub": "termix", + "fixture": null, + "started": "2026-10-24T13:28:00Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/termix/install", + "hu_len": 854, + "en_len": 781, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/termix/install -> 200 'Termix — Telepítés — Felhom.eu' | shot /root/shots/termix-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/termix/install -> 200 'Termix — Telepítés — Felhom.eu' | shot /root/shots/termix-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 61, + "front_door": true, + "seconds_to_front_door": 61 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Ftermix.tester4.test%2F", + "http_port_80": "301 https://termix.tester4.test/", + "guide": { + "path": "/apps/termix/guide", + "hu_len": 3179, + "en_len": 2762, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/termix", + "hu_len": 756, + "en_len": 764, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/termix/guide -> 200 'Termix — Felhom.eu' | shot /root/shots/termix-after-guide-phone-hu.png hscroll=False", + "goto https://termix.tester4.test/ -> 200 'Termix' | shot /root/shots/termix-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"2.065983999s\", \"last_run\": \"2026-10-24T13:29:37.402252549Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"termix\", \"started_at\": \"2026-10-24T13:29:45.451115172Z\", \"last\": {\"op\": \"restore\", \"stack\": \"termix\", \"ok\": true, \"message\": \"A(z) termix: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:29:56.21321236Z\"}, \"last_recent\": true}", + "state": "running" + }, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "termix": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "termix": 110.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 229 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-front-desktop-hu.png new file mode 100644 index 00000000..cd528727 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-guide-phone-hu.png new file mode 100644 index 00000000..f63604df Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-desktop-en.png new file mode 100644 index 00000000..e55512f3 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-phone-hu.png new file mode 100644 index 00000000..1bfc300f Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/termix/screens/termix-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/termix/walk.log b/documentation/audits/catalog-sweep-2026-10-24/termix/walk.log new file mode 100644 index 00000000..c730a9ac --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/termix/walk.log @@ -0,0 +1,10 @@ +13:28:16Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:29:16Z [1] deployed, controller state=running, pinned={'termix': 'ghcr.io/lukegus/termix:2.8.0'} +13:29:16Z gate: termix is gated — passed as the household (cookie set) +13:29:16Z [1] installed: deployed 61 s, front door 61 s +13:29:16Z [3] no fixture for this app — the front door answering is the smallest honest check +13:29:35Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:29:45Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:30:33Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'termix', 'volumes_removed': ['termix_termix_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'message': 'Stack term +13:31:56Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'termix', 'volumes_removed': ['termix_termix_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot külső megha +13:32:04Z == termix done in 229 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/batch.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/batch.sh new file mode 100755 index 00000000..407fccd2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/batch.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# batch.sh ORDERFILE — the sweep, one app after another; every 5th app also restores from its recovery unit. +E=/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24 +export SC=/run/user/1000/sweep-sc TARGET=sweep BASE=https://192.168.0.157 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 SWEEP_EV=$E +cd $E/tools; n=0 +while read -r app; do + [ -n "$app" ] || continue; n=$((n+1)); [ -f "$E/$app/record.json" ] && [ "${REDO:-}" != "$app" ] && { echo "$(date -u +%T) SKIP $app (has a record)" >> $E/progress.log; continue; } + r=""; [ $((n % 5)) -eq 0 ] && r="--restore" + case "$app" in immich|nextcloud|onlyoffice|home-assistant|plex|jellyfin|emby|n8n|gitea|outline|calcom) lim=5400;; *) lim=2700;; esac + echo "$(date -u +%T) START $n $app $r" >> $E/progress.log + timeout $lim python3 sweep.py "$app" $r > $E/$app.console.txt 2>&1 < /dev/null; rc=$? + echo "$(date -u +%T) END $n $app rc=$rc" >> $E/progress.log + left=$(ssh -n -o BatchMode=yes root@192.168.0.138 "pct exec 9201 -- sh -c 'ls /opt/docker/stacks/*/app.yaml 2>/dev/null'" 2>/dev/null) + [ -n "$left" ] && echo "$(date -u +%T) WARN installed after $app: $left" >> $E/progress.log +done < "$1" +echo "$(date -u +%T) BATCH DONE" >> $E/progress.log diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/bind.py b/documentation/audits/catalog-sweep-2026-10-24/tools/bind.py new file mode 100644 index 00000000..1e1da339 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/bind.py @@ -0,0 +1,45 @@ +#!/opt/pw/bin/python +"""bind.py — the household's self-bind page, in real Chromium (rehearsal 2026-10-20, B2). + +Env (handed in by brun.sh, never on a command line): BIND_TOKEN, PAIRING, PASS. + --typo : change ONE character of PASS before sending (a household's typo; the value is never printed) +Screenshots are taken BEFORE the fields are filled and AFTER the answer page loads — the passphrase field +is type=text, so a filled-form screenshot would show it. Prints the answer page's visible text. +usage: bind.py OUTPREFIX [--typo] [--size phone|desktop] [--lang hu|en] [--get-only] +""" +import os, re, sys +from playwright.sync_api import sync_playwright + +out = sys.argv[1]; args = sys.argv[2:] +size = args[args.index("--size") + 1] if "--size" in args else "phone" +lang = args[args.index("--lang") + 1] if "--lang" in args else "hu" +vp = {"phone": dict(viewport={"width": 390, "height": 844}, device_scale_factor=2, is_mobile=True, has_touch=True), + "desktop": dict(viewport={"width": 1366, "height": 768})}[size] +loc = {"hu": "hu-HU", "en": "en-US"}[lang] +url = "https://hub.felhom.eu/bind/" + os.environ["BIND_TOKEN"] +with sync_playwright() as p: + b = p.chromium.launch(executable_path="/usr/bin/chromium", args=["--no-sandbox"]) + ctx = b.new_context(locale=loc, extra_http_headers={"Accept-Language": loc}, timezone_id="Europe/Budapest", **vp) + pg = ctx.new_page() + r = pg.goto(url, wait_until="networkidle") + pg.screenshot(path=f"{out}-1-open-{size}-{lang}.png", full_page=True) + print("GET", r.status, pg.title()) + body = pg.inner_text("body") + print(re.sub(r"\s+", " ", body)[:600]) + if "--get-only" in args or not pg.locator("#pairing_code").count(): + b.close(); sys.exit(0) + pw = os.environ["PASS"] + if "--typo" in args: # swap one inner letter for its neighbour in the alphabet + i = len(pw) // 2 + while not pw[i].isalpha(): + i += 1 + pw = pw[:i] + ("b" if pw[i] != "b" else "c") + pw[i + 1:] + pg.fill("#pairing_code", os.environ["PAIRING"]) + pg.fill("#passphrase", pw) + with pg.expect_navigation(wait_until="networkidle"): + pg.click("button[type=submit]") + # blank both inputs before the screenshot, in case a re-rendered form echoes a value + pg.evaluate("document.querySelectorAll('input').forEach(e => e.value = '')") + pg.screenshot(path=f"{out}-2-answer-{size}-{lang}.png", full_page=True) + print("POST answer:", re.sub(r"\s+", " ", pg.inner_text("body"))[:600]) + b.close() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/box_walk.py b/documentation/audits/catalog-sweep-2026-10-24/tools/box_walk.py new file mode 100644 index 00000000..bacdfef2 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/box_walk.py @@ -0,0 +1,918 @@ +#!/usr/bin/env python3 +"""box_walk.py — the BOX venue's client (moved into the catalog 2026-09-30 from the audits' walk.py, so the monthly +re-test `retest-floating.py` has a stable home). ONE app's walk on scratch guest 9202, through the product's own +endpoints. Configuration by environment: SC (a 0600 scratch dir holding `.ctlpw`, the 9202 dashboard password — +never committed), EV (where evidence goes), GUEST/BASE/DOMAIN as before. + +EVIDENCE, NOT PRODUCT. It presses exactly the buttons a person presses: + POST /api/stacks//deploy · POST /api/sync · POST /api/stacks/rescan + POST /api/stacks//update · POST /api/stacks//remove +and reads GET /api/stacks/. No controller code exists for it. + +The walk, per `09` §6.4 and the update-night brief §4: + 1 deploy from the DRILL catalog at the LIVE pin + 2 seed through the app's OWN front door (R-156: never a volume, never SQL) + 3 read the seed back <- control C1; a fixture that cannot prove itself proves nothing + 4 „Mentés most" + 5 commit the real one-step bump to the DRILL repo, sync, rescan, read the badge in BOTH languages + 6 press the guarded Update, record every phase with timestamps + 7 read the seed back through the front door + 8 the four version observables side by side + 9 write the verdict record in `09`'s JSON shape + +`inconclusive` is a first-class verdict and is NEVER collapsed into `failed`. +""" +import argparse, json, os, re, subprocess, sys, time +from datetime import datetime, timezone + +SC = os.environ.get('SC', os.path.expanduser('~/.felhom-retest')) +EV = os.environ.get('EV', os.path.join(SC, 'evidence')) +DRILL = "/mnt/5_hdd/felhom.eu/drill/app-catalog-drill" +# THE TARGETS (R-892, 2026-10-06): one row per box the walk may drive. `hp` is the box's NAME for the guards +# (upgrade_fixtures_box.BOX_ADMIN_SEED_GUESTS keys on (hp, guest)); `ssh` is how its Proxmox host is reached, with an +# optional `jump` (never an edit of DooPlex's ~/.ssh/config); `guest` the customer LXC; `base` and `domain` its dashboard. +# TARGET=9202 (default) scratch guest 9202 on demo-hp +# TARGET=9201 demo-hp's hub-enabled guest (the mail proof) — household-shaped, never seeded through an admin +# TARGET=tester-1 the Tester 1 box: VM 341 on the HP box (`09` §3 decision 158), its node `felhom` at +# 192.168.0.154, guest 9201 (DHCP — read at start) for felhom.enkicsifelhom.hu (identity matched +# 2026-10-06: the agent's report `host.node=felhom` = the VM's certificate; the guest answers +# that domain, the other one 404 — `felhom.eu/documentation/audits/readback-2026-10-07/`) +# GUEST= still selects a demo-hp row (the old switch), unless TARGET is set. +TARGETS = { + # 9202 takes its address by DHCP (.114 until 2026-10-19, then .121), so its row names none: it is read from the + # guest at start (resolve_base below); BASE= still wins. + "9202": {"hp": "demo-hp", "ssh": "demo-hp", "jump": None, "guest": "9202", + "base": None, "domain": "enkisfelhom.hu"}, + "9201": {"hp": "demo-hp", "ssh": "demo-hp", "jump": None, "guest": "9201", + "base": "https://192.168.0.155", "domain": "enkisfelhom.hu"}, + # catalog sweep 2026-10-24: the fresh Tester4 box (nested VM 9360 on demo-hp, host 192.168.0.138, DHCP) — SWEEP COPY + "sweep": {"hp": "sweep", "ssh": "root@192.168.0.138", "jump": None, "guest": "9201", + "base": None, "domain": "tester4.test"}, + "tester-1": {"hp": "tester-1", "ssh": "root@192.168.0.154", "jump": "demo-hp", "guest": "9201", + "base": None, "domain": "enkicsifelhom.hu"}, # DHCP: .101 until 2026-10-23, then .148 — read +} +TARGET = os.environ.get("TARGET") or os.environ.get("GUEST", "9202") +if TARGET not in TARGETS: + raise SystemExit(f"box_walk: unknown TARGET {TARGET!r} — one of {sorted(TARGETS)}") +_T = TARGETS[TARGET] +GUEST = _T["guest"] + + +def ssh_args(): + """The ssh argv prefix that reaches the target's Proxmox host (a jump when the row names one).""" + a = ["ssh", "-o", "ConnectTimeout=20", "-o", "StrictHostKeyChecking=accept-new"] + if _T["jump"]: + a += ["-J", _T["jump"]] + return a + [_T["ssh"]] + +LOG = [] + + +def resolve_base(): + """A DHCP guest's dashboard address, read from the guest itself over the host's pct (no guessing).""" + r = subprocess.run(ssh_args() + ["pct", "exec", _T["guest"], "--", "ip", "-4", "-o", + "addr", "show", "eth0"], capture_output=True, text=True, timeout=60) + m = re.search(r"inet (\d+\.\d+\.\d+\.\d+)/", r.stdout) + if not m: + raise SystemExit("box_walk: could not read guest %s's address (%s) — set BASE=https://" + % (_T["guest"], (r.stderr or r.stdout).strip()[-120:])) + return "https://" + m.group(1) + + +BASE = os.environ.get("BASE") or _T["base"] or resolve_base() +DOMAIN = os.environ.get("DOMAIN") or _T["domain"] +HOSTHDR = f"Host: felhom.{DOMAIN}" +HP = _T["hp"] + + +def say(*a): + line = " ".join(str(x) for x in a) + ts = datetime.now().strftime("%H:%M:%S") + print(f"{ts} {line}", flush=True) + LOG.append(f"{ts} {line}") + + +def sh(args, timeout=300, inp=None): + try: + return subprocess.run(args, capture_output=True, text=True, timeout=timeout, input=inp) + except (subprocess.TimeoutExpired, OSError) as e: + return subprocess.CompletedProcess(args, 124, "", f"{e}") + + +def guest(script, timeout=600): + """Run a bash script inside guest 9202. Piped as a file — never as an argument (quoting).""" + # ONE TEMP FILE PER CALL (night 2026-09-23): the shared /tmp/w.sh swapped scripts under + # two concurrent walks (memory: guest-helper-shares-one-tmp-file). + import secrets as _s + t = f"/tmp/w{GUEST}-{os.getpid()}-{_s.token_hex(4)}.sh" + r = sh(ssh_args() + [ + f"export LC_ALL=C; cat > {t}; pct push {GUEST} {t} {t} >/dev/null 2>&1; " + f"pct exec {GUEST} -- bash {t}; pct exec {GUEST} -- rm -f {t}; rm -f {t}"], + timeout=timeout, inp=script) + return r.stdout or "" + + +def login(): + pw = open(f"{SC}/.ctlpw").read().strip() + sh(["curl", "-sk", "-D", f"{SC}/hdr{os.getpid()}.txt", "-o", "/dev/null", "-H", HOSTHDR, + "-X", "POST", "--data-urlencode", f"password={pw}", f"{BASE}/login"]) + h = open(f"{SC}/hdr{os.getpid()}.txt").read() + m = re.search(r"felhom_session=[A-Za-z0-9._-]+", h, re.I) + if not m: + sys.exit("login failed: no session cookie") + open(f"{SC}/sess{os.getpid()}.txt", "w").write(m.group(0)) + r = sh(["curl", "-sk", "-L", "-H", HOSTHDR, "-H", f"Cookie: {m.group(0)}", f"{BASE}/"]) + c = re.search(r' the felhom_gate cookie the household's browser would hold (setup gate, v0.280.0) + + +def _loc(out): + m = re.search(r"(?im)^location:\s*(\S+)", out or "") + return m.group(1) if m else "" + + +def gate_cookie(sub): + """Pass the setup gate (`09` decision 46) the way the HOUSEHOLD does: the app host redirects to the + dashboard's /__gate/start, which (with the dashboard session) redirects back to the app host's + /__felhom_gate/cb, which sets `felhom_gate`. Never printed.""" + import urllib.parse + sess = open(f"{SC}/sess{os.getpid()}.txt").read().strip() + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", "Accept: text/html", "-H", f"Host: {sub}.{DOMAIN}", f"{BASE}/"]) + loc = _loc(r.stdout) + st = re.match(r"HTTP/\S+ (\d+)", r.stdout or "") + if not loc and (not st or st.group(1) in ("404", "502", "503", "504")): + # the app is not routed at this moment (a restart, an update's stop): NOT the same as "not gated" — a cached "" + # here sent every later call past nothing and read the gate's 401 as the app's (2026-10-02, grim-step) + say(f" gate: {sub} not routed right now ({st.group(1) if st else 'no answer'}) — not cached, asked again next call") + return "" + if "/__family/start" in loc: # v0.287.0: the FAMILY gate — the household's dashboard session vouches, as for + return family_cookie(sub, loc, sess) # the setup gate (decisions 63/64) + if "/__gate/start" not in loc: + GATE[sub] = "" + return "" # not gated (open, or no gate for this app) + u = urllib.parse.urlsplit(loc) + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", "Accept: text/html", "-H", f"Host: {u.hostname}", "-H", f"Cookie: {sess}", + f"{BASE}{u.path}?{u.query}"]) + loc = _loc(r.stdout) + u = urllib.parse.urlsplit(loc) + if "/__felhom_gate/cb" not in u.path: + say(f" gate: the dashboard did not hand back a callback for {sub} ({loc[:80]})") + return "" + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", "Accept: text/html", "-H", f"Host: {u.hostname}", f"{BASE}{u.path}?{u.query}"]) + m = re.search(r"(?im)^set-cookie:\s*(felhom_gate=[^;\r\n]+)", r.stdout or "") + GATE[sub] = m.group(1) if m else "" + say(f" gate: {sub} is gated — passed as the household (cookie {'set' if GATE[sub] else 'NOT set'})") + return GATE[sub] + + +def family_cookie(sub, loc, sess): + """Pass the FAMILY gate (controller >= 0.287.0) as the household: /__family/start on the dashboard host with the + dashboard session → the app host's /__felhom_gate/fcb → `felhom_famgate`. Never printed.""" + import urllib.parse + u = urllib.parse.urlsplit(loc) + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", "Accept: text/html", "-H", f"Host: {u.hostname}", "-H", f"Cookie: {sess}", + f"{BASE}{u.path}?{u.query}"]) + u = urllib.parse.urlsplit(_loc(r.stdout)) + if "/__felhom_gate/fcb" not in u.path: + say(f" family gate: the dashboard did not hand back a callback for {sub}") + GATE[sub] = "" + return "" + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", "Accept: text/html", "-H", f"Host: {u.hostname}", f"{BASE}{u.path}?{u.query}"]) + m = re.search(r"(?im)^set-cookie:\s*(felhom_famgate=[^;\r\n]+)", r.stdout or "") + GATE[sub] = m.group(1) if m else "" + say(f" family gate: {sub} is family-gated — passed as the household (cookie {'set' if GATE[sub] else 'NOT set'})") + return GATE[sub] + + +def app_curl(sub, path, *extra, method=None, data=None, timeout=45, _retry=True): + """A call to the APP's own front door on 9202 — the household's route, not ours. Carries the setup + gate's cookie when the app is gated, merged into a fixture's own Cookie header (never a second one).""" + raw = list(extra) + gc = GATE[sub] if sub in GATE else gate_cookie(sub) + ext = list(raw) + if gc: + merged = False + for i, a in enumerate(ext): + if isinstance(a, str) and a.lower().startswith("cookie:") and i > 0 and ext[i - 1] == "-H": + ext[i] = a + "; " + gc + merged = True + if not merged: + ext = ["-H", f"Cookie: {gc}"] + ext + args = ["curl", "-sSk", "--max-time", str(timeout), "-H", f"Host: {sub}.{DOMAIN}", + "-w", "\n%{http_code} %{redirect_url}"] + if method: + args += ["-X", method] + if data is not None: + args += ["--data-binary", "@-"] + args += ext + [f"{BASE}{path}"] + r = sh(args, timeout=timeout + 30, inp=data) + body, _, tail = (r.stdout or "").rpartition("\n") + code, _, redir = tail.strip().partition(" ") + if _retry and ("/__gate/start" in redir or "/__family/start" in redir): + GATE.pop(sub, None) # the gate cookie expired or was never taken — log in as the household again + return app_curl(sub, path, *raw, method=method, data=data, timeout=timeout, _retry=False) + return r.returncode, code.strip(), body + + +def stack(name): + _, d = ctl("GET", f"/api/stacks/{name}") + return (d.get("data") or {}) if isinstance(d, dict) else {} + + +def wait_app(sub, path="/", want=("200", "302", "303", "401", "403"), tries=60, delay=5): + """Settling says the container runs; this says the APP answers. Not the same thing.""" + last = None + for _ in range(tries): + rc, code, _ = app_curl(sub, path, timeout=15) + last = (rc, code) + if rc == 0 and code in want: + return True + time.sleep(delay) + say(f" app never answered on {sub}{path} (last rc={last[0]} code={last[1]})") + return False + + +# ------------------------------------------------------------------ the walk + + +DRIVE_ROOT = os.environ.get("DRIVE_ROOT", "/mnt/felhom-drives/scratch_hdd") # SWEEP COPY: env override +DRIVE = DRIVE_ROOT + "/userdata" + +# What THIS run generated for a deploy, per app. Deploy secrets are ENCRYPTED AT REST in +# `app.yaml` (`ENC:…`), which is right and which means a fixture cannot read an app's admin +# password back off the box — the household sees it once. So the value the harness itself +# generated is kept here for the life of the run, and nowhere else. +GENERATED = {} +# The apps THIS run installed (deploy() adds one on its 202). The test-box admin seed refuses an app not in it: an app +# the walk merely reused may be a household's (upgrade_fixtures_box.box_admin_seed_allowed, R-890). +DEPLOYED_THIS_RUN = set() + + +def deploy_values(name, sub, given=None): + """Fill EVERY required deploy field the way the wizard would, by asking the box what this app + asks for — `GET /api/stacks//deploy-fields` — instead of assuming DOMAIN+SUBDOMAIN. + + Measured 2026-09-21: three apps in one batch refused at the deploy with a correct 400 because + a required field was absent — `HDD_PATH` (navidrome, audiobookshelf) and an admin password + (grafana). The refusals happen BEFORE anything is created (`deploy.go:324`), which is the only + reason this was safe to discover by running it (live-probes rule). + + A `path` field must name a directory that ALREADY EXISTS (`deploy.go:330`), so one is made on + the scratch drive first — the same act the drive browser performs for a household. + """ + code, d = ctl("GET", f"/api/stacks/{name}/deploy-fields") + fields = (((d.get("data") or {}).get("metadata") or {}).get("deploy_fields")) or [] + values = {"DOMAIN": DOMAIN, "SUBDOMAIN": sub} + values.update(given or {}) # a caller's own value wins, and no drive folder is made for it (2026-10-16: a passed + made = [] # HDD_PATH still got DRIVE/ created, an empty folder nobody asked for) + for f in fields: + ev, ty = f.get("env_var"), f.get("type") + if ev in values: + continue + # `type: password` is MANDATORY whatever `required` says — `deploy.go:305-312` refuses + # when the caller sends none, deliberately ("the user needs to know their password"), + # while `.felhom.yml` declares `required: false` and the API serves that verbatim. A + # caller that trusts the contract gets a 400. Measured tonight on grafana; filed. + if not f.get("required") and ty != "password": + continue # the controller generates the optional secrets itself + if ty == "path" and ev == "HDD_PATH": + # R-839 (controller): the deploy API refuses an HDD_PATH that is a folder INSIDE a registered drive — + # the app's data place is the drive itself. Measured 2026-10-24: DRIVE/ came back 409. + values[ev] = DRIVE_ROOT + elif ty == "path": + p = f"{DRIVE}/{name}" + values[ev] = p + made.append(p) + elif ty in ("secret", "password"): + import secrets as _s + values[ev] = "Drill-" + _s.token_hex(12) + GENERATED.setdefault(name, {})[ev] = values[ev] + elif f.get("default"): + values[ev] = f["default"] + else: + values[ev] = f"drill-{name}" + if made: + guest("mkdir -p " + " ".join(made) + "; ls -ld " + " ".join(made)) + say(f" [1] made the drive paths this app requires: {made}") + extra = [k for k in values if k not in ("DOMAIN", "SUBDOMAIN")] + if extra: + say(f" [1] required fields filled beyond DOMAIN/SUBDOMAIN: {extra}") + return values + + +def deploy(name, sub, extra_values=None): + st = stack(name) + if st.get("deployed"): + say(f" [1] {name} already deployed — reusing") + return True + values = deploy_values(name, sub, extra_values) + body = {"values": values} + if os.environ.get("KEPT"): # decision 36: the household's answer when the drive holds old data ("fresh" moves it aside, deletes nothing) + body["kept_data"] = os.environ["KEPT"] + code, d = ctl("POST", f"/api/stacks/{name}/deploy", body) + say(f" [1] deploy -> {code} {str(d)[:120]}") + if code != "202": + return False + DEPLOYED_THIS_RUN.add(name) + # WAIT FOR `deployed`, NOT FOR `running`. Measured 2026-09-21 on tandoor: docker reported the + # container `healthy` while the controller's own state read `unhealthy` — a gate on `running` + # alone therefore times out on an app that is up. The state is RECORDED rather than required; + # the real gate is the fixture's own `wait_app`, which asks whether the APP answers. + seen = None + for _ in range(90): + time.sleep(5) + st = stack(name) + seen = st.get("state") + # `deployed` alone is NOT enough and `state` alone is NOT right. Measured 2026-09-21: + # tandoor reads `unhealthy` while serving (R-618), so gating on "running" hangs; and romm + # read `deployed=True, state=degraded, pinned_images=None` twenty seconds in, i.e. the + # deploy had not finished writing app.yaml. The PIN is the deploy's own completion mark + # (`runComposeDeploy` writes it), so that is what to wait for. + pins = (st.get("app_config") or {}).get("pinned_images") + if st.get("deployed") and pins and seen in ("running", "unhealthy", "degraded"): + say(f" [1] deployed, controller state={seen}, " + f"pinned={(st.get('app_config') or {}).get('pinned_images')}") + if seen != "running": + say(f" [1] NOTE: the controller's own state is {seen!r}, not 'running' — recorded, " + f"not treated as a failure; the fixture's front-door wait is the real gate") + return True + say(f" [1] never became deployed (last controller state={seen!r})") + return False + + +def backup_now(name): + """R-648 (2026-09-23): NO whole-box „Mentés most" from a drill, ever. + + `POST /api/backup/run` is the only backup endpoint and it is WHOLE-BOX: on 9201 it stopped and + restarted 9 of 10 standing apps twice, and on 9202 it broke a deploy in flight (R-634). The product + has NO per-app backup endpoint (router.go: /backup/run, /backup/tier2 only); the per-app backup + exists only inside the guarded update, whose `backing-up` phase calls RunAppBackupNow for the one + app. So this presses nothing: the update takes the throwaway app's own backup, and says so in its + phase list. A seed written "after the backup" is therefore written before the update's own backup + — the undo's last-second copy is still the one that must bring it back.""" + say(f" [4] backup press SKIPPED for {name} (R-648: whole-box only; the update's backing-up phase backs up {name} alone)") + return None + +def drill_bump(app, frm, to, service_hint=None): + """Serialised across concurrent walks: one git working tree, one lock.""" + import fcntl + with open(f"{SC}/drill.lock", "w") as lk: + fcntl.flock(lk, fcntl.LOCK_EX) + sh(["git", "-C", DRILL, "pull", "-q", "--rebase", "origin", "main"], timeout=120) + return _drill_bump(app, frm, to, service_hint) + + +def _drill_bump(app, frm, to, service_hint=None): + """Commit the edge to the DRILL repo. catalog_since set by hand (the drill repo has no gates). + + `frm`/`to` may be comma-separated lists of the SAME length: an app whose own version lives in + two images (adventurelog's backend and frontend) moves both in one edge, while its engine + sidecar stays where it is — `09` §3b Q3's rule is per SERVICE, and an app-half edge must move + every service that carries the app's own version and no others. + """ + comp = f"{DRILL}/templates/{app}/docker-compose.yml" + fy = f"{DRILL}/templates/{app}/.felhom.yml" + s = open(comp).read() + froms = [x.strip() for x in frm.split(",") if x.strip()] + tos = [x.strip() for x in to.split(",") if x.strip()] + if len(froms) != len(tos): + say(f" [5] from/to lists differ in length: {froms} vs {tos}") + return None + for f1, t1 in zip(froms, tos): + if f"image: {f1}" not in s: + say(f" [5] FROM ref not found in compose: {f1}") + return None + s = s.replace(f"image: {f1}", f"image: {t1}") + open(comp, "w").write(s) + f = open(fy).read() + today = datetime.now().strftime("%Y-%m-%d") + f = re.sub(r'^catalog_since:.*$', f'catalog_since: "{today}"', f, count=1, flags=re.M) + open(fy, "w").write(f) + sh(["git", "-C", DRILL, "add", "-A"]) + sh(["git", "-C", DRILL, "commit", "-q", "-m", f"DRILL {app}: {frm} -> {to}"]) + r = sh(["git", "-C", DRILL, "push", "-q", "origin", "main"], timeout=120) + h = sh(["git", "-C", DRILL, "rev-parse", "--short=12", "HEAD"]).stdout.strip() + say(f" [5] drill commit {h}: {app} {frm} -> {to} (push rc={r.returncode})") + refresh_box_mirror() + return h + + +BOX_VOL = "/var/lib/docker/volumes/felhom-controller-data/_data" # the controller's data volume, guest path +BOX_CVOL = "/opt/docker/felhom-controller" # the same, inside the controller container +MIRROR_URL = f"file://{BOX_CVOL}/drill-catalog.git" + + +def refresh_box_mirror(): + """A box pointed at the drill through its LOCAL MIRROR (R-992: no catalog credential on the box — the mirror method of + felhom.eu audits/burndown-3-2026-10-17/tools/repoint.py) sees a drill commit only after the mirror is loaded again. + Without this a drill commit reaches Gitea and never the box, and a walk then presses Update on nothing. A box on any + other catalog URL is left alone (it fetches the drill itself).""" + conf = guest(f"grep -E '^\\s+repo_url:' {BOX_VOL}/controller.yaml") + if MIRROR_URL not in conf: + return False + import secrets as _s + b = f"/tmp/drill-walk-{os.getpid()}-{_s.token_hex(4)}.bundle" + sh(["git", "-C", DRILL, "bundle", "create", b, "main"]) + sh(["scp", "-q", "-o", "StrictHostKeyChecking=accept-new"] + (["-J", _T["jump"]] if _T["jump"] else []) + + [b, f"{_T['ssh']}:{b}"], timeout=120) + sh(ssh_args() + [f"pct push {GUEST} {b} {BOX_VOL}/{os.path.basename(b)} && rm -f {b}"], timeout=120) + out = guest(f"""docker exec felhom-controller sh -c 'git -C {BOX_CVOL}/drill-catalog.git fetch -q {BOX_CVOL}/{os.path.basename(b)} +main:main && rm -f {BOX_CVOL}/{os.path.basename(b)}; git -C {BOX_CVOL}/drill-catalog.git log -1 --format="%h" main'""") + os.remove(b) + say(f" [5] the box's drill mirror now at {out.strip()}") + return True + + +def sync_rescan(expect_app=None, expect_ref=None, tries=12, delay=5): + """Sync, rescan, and — when told what to expect — WAIT FOR THE BADGE TO CATCH UP. + + R-607: `POST /api/sync` answers "nincs valtozas" while the catalog HAS moved, and + `catalog_images` stays stale until a separate rescan. Tonight showed the rescan alone is not + enough either: mealie's badge read "Naprakesz" seconds after its bump was pushed, and the + Update that followed moved nothing and still reported "Frissitve". So when the caller knows + which reference should appear, this polls for it and SAYS HOW LONG IT TOOK — which is the + NUMBER R-607 asks for and has never had. + """ + t0 = time.time() + ctl("POST", "/api/sync") + time.sleep(2) + ctl("POST", "/api/stacks/rescan") + time.sleep(2) + if not expect_app or not expect_ref: + return None + for i in range(tries): + cat = stack(expect_app).get("catalog_images") or {} + if expect_ref in cat.values(): + waited = round(time.time() - t0, 1) + if i: + say(f" [sync] the badge needed {waited}s and {i+1} sync+rescan rounds to catch up " + f"to {expect_ref} — R-607's window, measured") + return waited + time.sleep(delay) + ctl("POST", "/api/sync") + time.sleep(1) + ctl("POST", "/api/stacks/rescan") + say(f" [sync] the badge NEVER caught up to {expect_ref} in {round(time.time()-t0,1)}s — " + f"catalog_images = {stack(expect_app).get('catalog_images')}") + return None + + +def badges(name): + out = {} + for lang, suffix in (("hu", ""), ("en", "?lang=en")): + h = page(f"/apps/{name}{suffix}") + m = re.findall(r']*title="([^"]*)"[^>]*>([^<]*)<', h) + out[lang] = [{"title": a.strip(), "text": b.strip()} for a, b in m][:3] + return out + + +def press_update(name, poll=1.0, cap_s=1800): + code, d = ctl("POST", f"/api/stacks/{name}/update") + say(f" [6] Update -> {code} {str(d)[:220]}") + if code not in ("202", "200"): + return {"accepted": False, "http": code, "refusal": d, "phases": [], "duration_s": 0} + phases, seen, t0 = [], None, time.time() + while time.time() - t0 < cap_s: + st = stack(name) + ph = st.get("update_phase") + if ph != seen: + seen = ph + rec = {"t": round(time.time() - t0, 1), "phase": ph, + "label": st.get("update_phase_label"), "updating": st.get("updating"), + "error": st.get("update_error"), "hold": st.get("hold_reason")} + phases.append(rec) + say(f" +{rec['t']:>6.1f}s phase={ph} label={rec['label']} " + f"err={rec['error']} hold={rec['hold']}") + if not st.get("updating") and ph in ("done", "failed", "undone", None) and time.time() - t0 > 3: + break + time.sleep(poll) + st = stack(name) + return {"accepted": True, "http": code, "phases": phases, + "duration_s": round(time.time() - t0, 1), + "final_phase": st.get("update_phase"), "update_error": st.get("update_error"), + "hold_reason": st.get("hold_reason"), "state": st.get("state")} + + +def observables(name): + st = stack(name) + ac = st.get("app_config") or {} + live = guest(f""" +grep -E '^\\s+image:' /opt/docker/stacks/{name}/docker-compose.yml 2>/dev/null | sed 's/^ *//' +echo '---inspect---' +for c in $(docker ps -a --filter label=com.docker.compose.project={name} --format '{{{{.Names}}}}'); do + echo -n "$c "; docker inspect "$c" --format '{{{{.Config.Image}}}} running={{{{.State.Running}}}} restarts={{{{.RestartCount}}}}' +done +""") + a, _, b = live.partition("---inspect---") + return { + "pinned_images": ac.get("pinned_images"), + "installed_images": {k: (v.get("ref") if isinstance(v, dict) else v) + for k, v in (ac.get("installed_images") or {}).items()}, + "catalog_images": st.get("catalog_images"), + "live_compose_image_lines": [x for x in a.strip().splitlines() if x.strip()], + "docker_inspect": [x for x in b.strip().splitlines() if x.strip()], + } + + +def app_logs(name, lines=400): + """The app's own container log, DECODED. The endpoint answers a JSON envelope whose `logs` is + one string with escaped newlines — a scan over the envelope sees a single enormous line and + finds nothing, which reads exactly like "the app printed no migration line" and is not. R-96 + rule 3 in a new place: an absent line is not evidence when the instrument cannot see lines.""" + code, d = ctl("GET", f"/api/stacks/{name}/logs?lines={lines}") + if isinstance(d, dict): + data = d.get("data") + if isinstance(data, dict) and isinstance(data.get("logs"), str): + return data["logs"] + if isinstance(d.get("_raw"), str): + return d["_raw"] + return str(d) + + +def write_verdict(rec, appdir): + os.makedirs(appdir, exist_ok=True) + p = os.path.join(appdir, "verdict.json") + json.dump(rec, open(p, "w"), indent=2, ensure_ascii=False) + say(f" [9] verdict {rec['verdict']} -> {p}") + + +def remove(name): + """Remove through the PRODUCT, never `docker rm` (live-probes rule). The remove endpoint + refuses a running stack — `409 still running` — so the stop is part of the act, not a tidy-up.""" + c1, d1 = ctl("POST", f"/api/stacks/{name}/stop") + say(f" [X] stop -> {c1} {str(d1)[:100]}") + for _ in range(24): + time.sleep(5) + if stack(name).get("state") != "running": + break + code, d = ctl("POST", f"/api/stacks/{name}/remove", + {"remove_hdd_data": True, "remove_backups": True}) + say(f" [X] remove (with drive data) -> {code} {str(d)[:160]}") + if code == "409": + # R-442's fail-closed guard: when the storage subsystem cannot RESOLVE the app's drive + # path, the removal is REFUSED and the app is kept rather than half-deleted. On guest 9202 + # `/api/disks` answers `agent not configured`, so every app deployed with an HDD_PATH hits + # this. The household's other choice — remove the app, KEEP the data — is accepted, and the + # harness takes it, then tidies its own directory by name at teardown. + say(" [X] refused because the drive path cannot be resolved (R-442, fail-closed and right)" + " — removing the app and KEEPING the drive data instead") + code, d = ctl("POST", f"/api/stacks/{name}/remove", + {"remove_hdd_data": False, "remove_backups": True}) + say(f" [X] remove (keeping drive data) -> {code} {str(d)[:160]}") + time.sleep(5) + st = stack(name) + # The stack folder itself stays: it is the catalog's template copy (every app has one). An install leaves its record, + # app.yaml — that is the leftover to look for (2026-10-24: the folder alone read as a leftover after a clean remove). + left = guest(f"ls -d /opt/docker/stacks/{name}/app.yaml 2>/dev/null; " + f"docker ps -a --filter label=com.docker.compose.project={name} --format '{{{{.Names}}}}'") + say(f" [X] after remove: deployed={st.get('deployed')} leftovers={left.strip()!r}") + return code + + +def app_env(name, key): + """Read one deploy value the CUSTOMER was given (e.g. the generated admin password) from the + app's own `app.yaml`. This is not seeding — it is how the household logs in; the controller + shows them the same value. Data still goes in through the app's own front door.""" + out = guest(f"grep -E '^\\s*{key}:' /opt/docker/stacks/{name}/app.yaml 2>/dev/null | head -1") + if ":" in out: + return out.split(":", 1)[1].strip().strip('"').strip("'") + return "" + + +def snapshots(name): + """The restorable copies the backups page offers for this app.""" + code, d = ctl("GET", f"/api/backup/snapshots?stack={name}") + data = d.get("data") if isinstance(d, dict) else None + if isinstance(data, dict): + for k in ("snapshots", "items", "restore_points"): + if isinstance(data.get(k), list): + return data[k] + return data if isinstance(data, list) else [] + + +def restore(name, snapshot_id=None, wait_s=1200): + """The household's own way out: the „Visszaállítás a mentésből" button on the backups page. + + A FORM post, not an API call — `POST /backup/restore` with `_csrf`, `stack_name`, + `snapshot_id` — because that is the button the sentence tells them to press. + """ + snaps = snapshots(name) + if snapshot_id is None: + if not snaps: + say(f" [R] no restorable copy offered for {name}") + return {"ok": False, "why": "no snapshot offered", "snapshots": snaps} + first = snaps[0] + snapshot_id = first.get("id") or first.get("snapshot_id") or first.get("short_id") + say(f" [R] restoring {name} from snapshot {snapshot_id!r} (of {len(snaps)} offered)") + sess = open(f"{SC}/sess{os.getpid()}.txt").read().strip() + csrf = open(f"{SC}/csrf{os.getpid()}.txt").read().strip() + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", HOSTHDR, "-H", f"Cookie: {sess}", + "-X", "POST", + "--data-urlencode", f"_csrf={csrf}", + "--data-urlencode", f"stack_name={name}", + "--data-urlencode", f"snapshot_id={snapshot_id}", + f"{BASE}/backup/restore"], timeout=180) + head = (r.stdout or "").split("\n")[0].strip() + loc = [l for l in (r.stdout or "").split("\n") if l.lower().startswith("location:")] + say(f" [R] POST /backup/restore -> {head} {loc[:1]}") + t0 = time.time() + last = None + while time.time() - t0 < wait_s: + code, d = ctl("GET", "/api/backup/restore-status") + dd = d.get("data") or {} + cur = (dd.get("running"), dd.get("phase") or dd.get("state"), dd.get("message")) + if cur != last: + say(f" +{round(time.time()-t0,1):>6.1f}s restore {cur}") + last = cur + if not dd.get("running", False) and time.time() - t0 > 5: + break + time.sleep(2) + st = stack(name) + say(f" [R] after restore: state={st.get('state')} hold={st.get('hold_reason')!r} " + f"phase={st.get('update_phase')}") + return {"ok": True, "snapshot_id": snapshot_id, "snapshots": snaps, + "http": head, "location": loc[:1], "seconds": round(time.time() - t0, 1), + "state_after": st.get("state"), "hold_after": st.get("hold_reason"), + "observables_after": observables(name)} + + +# ------------------------------------------------------------------ the security-fix walk (D39 = B) + +SECURITY_WALK_VERSION = 1 +SOAK_DEFAULT_S = 600 + + +def soak(name, seconds, interval=10): + """The box's memory soak (`09` §3 decision 255): every `interval` s for `seconds`, per container of the app, the + app's own memory (cgroup `anon`, decision 22 — the cgroup peak counts the file cache) against its limit, the + cgroup peak, the OOM-kill counter and the restart count. One guest call; the guest prints one JSON line a sample.""" + script = f""" +set -u +ids=$(docker ps -a --filter label=com.docker.compose.project={name} --format '{{{{.ID}}}}') +end=$(( $(date +%s) + {int(seconds)} )) +while :; do + for id in $ids; do + full=$(docker inspect -f '{{{{.Id}}}}' $id); nm=$(docker inspect -f '{{{{.Name}}}}' $id | tr -d /) + rc=$(docker inspect -f '{{{{.RestartCount}}}}' $id); run=$(docker inspect -f '{{{{.State.Running}}}}' $id) + start=$(docker inspect -f '{{{{.State.StartedAt}}}}' $id); oomk=$(docker inspect -f '{{{{.State.OOMKilled}}}}' $id) + cg=""; for c in /sys/fs/cgroup/system.slice/docker-$full.scope /sys/fs/cgroup/docker/$full; do [ -d "$c" ] && cg=$c; done + anon=0; mx=max; pk=0; ok=0 + if [ -n "$cg" ]; then + anon=$(awk '$1=="anon"{{print $2}}' $cg/memory.stat); mx=$(cat $cg/memory.max) + pk=$(cat $cg/memory.peak 2>/dev/null || echo 0); ok=$(awk '$1=="oom_kill"{{print $2}}' $cg/memory.events) + fi + printf '{{"t":%s,"c":"%s","anon":%s,"max":"%s","peak":%s,"oom_kill":%s,"restarts":%s,"running":"%s","started":"%s","oomkilled":"%s","cg":"%s"}}\\n' \\ + "$(date +%s)" "$nm" "${{anon:-0}}" "$mx" "${{pk:-0}}" "${{ok:-0}}" "$rc" "$run" "$start" "$oomk" "$cg" + done + [ "$(date +%s)" -ge "$end" ] && break + sleep {int(interval)} +done +""" + out = guest(script, timeout=int(seconds) + 300) + samples = [] + for line in out.splitlines(): + try: + samples.append(json.loads(line)) + except ValueError: + continue + per = {} + for s in samples: + c = per.setdefault(s["c"], {"samples": 0, "anon_peak": 0, "cg_peak": 0, "limit": None, "oom_kill": [], + "restarts": [], "running": [], "started": set(), "oomkilled": False, "cgroup": s["cg"]}) + c["samples"] += 1 + c["anon_peak"] = max(c["anon_peak"], int(s["anon"])) + c["cg_peak"] = max(c["cg_peak"], int(s["peak"])) + c["limit"] = int(s["max"]) if str(s["max"]).isdigit() else None + c["oom_kill"].append(int(s["oom_kill"])) + c["restarts"].append(int(s["restarts"])) + c["running"].append(s["running"] == "true") + c["started"].add(s["started"]) + c["oomkilled"] = c["oomkilled"] or s["oomkilled"] == "true" + res = {"soak_s": int(seconds), "interval_s": interval, "samples": len(samples), "containers": {}} + kills = restarts = 0 + peaks = [] + for nm, c in per.items(): + k = (max(c["oom_kill"]) - min(c["oom_kill"])) if c["oom_kill"] else 0 + r = (max(c["restarts"]) - min(c["restarts"])) + (len(c["started"]) - 1) + kills += k + (1 if c["oomkilled"] else 0) + restarts += r + pct = round(100.0 * c["anon_peak"] / c["limit"], 1) if c["limit"] else None + cgp = round(100.0 * c["cg_peak"] / c["limit"], 1) if c["limit"] else None + if pct is not None: + peaks.append(pct) + res["containers"][nm] = {"samples": c["samples"], "anon_peak_bytes": c["anon_peak"], "limit_bytes": c["limit"], + "anon_peak_pct": pct, "cgroup_peak_pct": cgp, "oom_kill_delta": k, + "oom_killed_flag": c["oomkilled"], "restarts_delta": r, + "running_all_samples": all(c["running"]), "cgroup": c["cgroup"]} + res["oom_kills"], res["restarts"] = kills, restarts + res["peak_pct"] = max(peaks) if peaks else None + return res + + +def setup_gate_probe(sub): + """How the setup gate (decision 46) answers this app right now, as the household's browser and as a script: status and + redirect target only (the cookie is never printed).""" + out = {} + for label, hdr in (("browser", ["-H", "Accept: text/html"]), ("script", [])): + r = sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", f"Host: {sub}.{DOMAIN}"] + hdr + [f"{BASE}/identity"]) + st = re.match(r"HTTP/\S+ (\d+)", r.stdout or "") + loc = _loc(r.stdout) + out[label] = {"status": st.group(1) if st else None, "redirect": re.sub(r"\?.*", "?…", loc) if loc else None} + return out + + +def security_walk(app, frm, to, evdir, soak_s=SOAK_DEFAULT_S, values=None): + """`box_walk.py --security --from --to --ev [--soak N] [--value K=V …]` — the BOX venue of a + security-fix step (`09` §3 decision 255, D39 = B), on scratch guest 9202 pointed at the DRILL catalog, through the + product's own endpoints only: + 1. the drill's template for must stand at FROM (the caller puts it there; this walk never guesses); + 2. is installed fresh; the four version observables must read FROM; + 3. seed + read-back when a box fixture has the app, else `seed: "none"` — written, never hidden; + 4. a DRILL-only commit moves the compose FROM -> TO; sync + rescan until the box's catalog_images carry TO; + 5. the product's guarded Update, every phase with its time; + 6. after: final phase `done`, no undo, no hold, the app running, the four observables equal TO, the seed read back; + 7. the memory soak (default 600 s): a kill or a restart = failed; + 8. /box-verdict-.json: `proven` only if all of that holds; `inconclusive` stays `inconclusive`. + The app is removed through the product at the end unless KEEP=1.""" + import upgrade_fixtures_box as fixtures + import upgrade_fixtures_box28 as _f28 + global LOG + LOG = [] + FX = dict(_f28.FIXTURES28) + FX.update(fixtures.FIXTURES) + os.makedirs(evdir, exist_ok=True) + rec = {"app": app, "walk": "security", "box_walk_version": SECURITY_WALK_VERSION, "verdict": "inconclusive", + "venue": f"box {GUEST} (drill catalog), the guarded Update", "from": frm, "to": to} + + def finish(verdict, why): + rec["verdict"], rec["why"] = verdict, why + rec["log"] = LOG + write_verdict(rec, evdir) + os.replace(os.path.join(evdir, "verdict.json"), os.path.join(evdir, f"box-verdict-{app}.json")) + say(f"RESULT {verdict} — {why}") + if not os.environ.get("KEEP") and stack(app).get("deployed"): + remove(app) + return 0 if verdict == "proven" else 1 + + login() + conf = guest("grep -A3 '^git:' /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml") + if "app-catalog-drill" not in conf and MIRROR_URL not in conf: + return finish("inconclusive", f"guest {GUEST} is not on the drill catalog (nor its local mirror) — nothing done") + sh(["git", "-C", DRILL, "pull", "-q", "--rebase", "origin", "main"], timeout=120) + drill_imgs = images_of(open(f"{DRILL}/templates/{app}/docker-compose.yml").read()) + if drill_imgs != frm: + return finish("inconclusive", f"the drill's {app} is at {drill_imgs}, not at FROM {frm} — put it there first") + fx = FX.get(app) + sub = getattr(fx, "sub", app) if fx else app + if stack(app).get("deployed"): + say(f" [1] removing the existing {app} first (scratch box)") + remove(app) + sync_rescan() + if not deploy(app, sub, values): + return finish("inconclusive", "the install at FROM did not complete — nothing was tested") + wait_app(sub, "/identity" if app == "plex" else "/", tries=60) + rec["observables_before"] = observables(app) + if rec["observables_before"]["pinned_images"] != frm: + return finish("inconclusive", f"installed at {rec['observables_before']['pinned_images']}, not at FROM") + rec["setup_gate_before"] = setup_gate_probe(sub) + say(f" [2] setup gate as installed: {rec['setup_gate_before']}") + tok = None + if fx is None or fx.__class__.__name__ == "NoRoute": + rec["seed"] = "none" + rec["seed_why"] = getattr(fx, "tried", "no box fixture for this app") + say(f" [3] seed: none — {rec['seed_why']}") + else: + tok = fx.seed(w_self(), sub, say) + if tok is None or not fx.verify(w_self(), sub, tok, say): + return finish("inconclusive", "C1: the fixture could not seed and read back before the update") + rec["seed"] = "read_back" + froms = ",".join(frm[s] for s in sorted(frm) if frm[s] != to.get(s)) + tos = ",".join(to[s] for s in sorted(frm) if frm[s] != to.get(s)) + rec["drill_commit"] = drill_bump(app, froms, tos) + if not rec["drill_commit"]: + return finish("inconclusive", "the drill could not be moved FROM -> TO") + moved = [s for s in sorted(to) if frm.get(s) != to[s]] + rec["sync_waited_s"] = sync_rescan(app, to[moved[0]], tries=40, delay=10) + if rec["sync_waited_s"] is None: + return finish("inconclusive", f"the box never read TO {to[moved[0]]} from the drill catalog — nothing pressed") + rec["badge_before"] = badges(app) + rec["measured_at"] = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") + rec["update"] = press_update(app, poll=1.0, cap_s=1800) + time.sleep(15) + st = stack(app) + rec["observables_after"] = obs = observables(app) + rec["badge_after"] = badges(app) + rec["state_after"], rec["hold_after"] = st.get("state"), st.get("hold_reason") + ii = (st.get("app_config") or {}).get("installed_images") or {} + rec["to_digests"] = {s: (ii.get(s) or {}).get("digest") if isinstance(ii.get(s), dict) else None for s in to} + u = rec["update"] + if not u.get("accepted"): + return finish("failed", f"the Update was refused: {u.get('http')} {str(u.get('refusal'))[:200]}") + if u.get("final_phase") != "done" or u.get("update_error") or rec["hold_after"]: + return finish("failed", f"the update ended {u.get('final_phase')!r} (error {u.get('update_error')!r}, hold {rec['hold_after']!r})") + live = sorted({l.split("image:", 1)[1].strip() for l in obs.get("live_compose_image_lines") or [] if "image:" in l}) + four = {"pinned": obs.get("pinned_images"), "installed": obs.get("installed_images"), "catalog": obs.get("catalog_images"), + "live_compose": live} + rec["four_observables"] = four + running = {l.split()[1] for l in obs.get("docker_inspect") or [] if "running=true" in l} + bad = {k: v for k, v in four.items() if k != "live_compose" and v != to} + if bad or set(live) != set(to.values()) or not set(to.values()) <= running: + return finish("failed", f"the version observables are not TO: {bad or four['live_compose']}, running {sorted(running)}") + if rec["state_after"] != "running": + return finish("failed", f"the app is {rec['state_after']!r} after the update") + if tok is not None: + rec["seed_read_after"] = fx.verify(w_self(), sub, tok, say) + if not rec["seed_read_after"]: + return finish("failed", "the seed did not read back after the update") + if any(not d for d in rec["to_digests"].values()): + return finish("inconclusive", f"the box recorded no digest for a TO service: {rec['to_digests']}") + rec["setup_gate_after"] = setup_gate_probe(sub) + say(f" [7] memory soak {soak_s} s …") + rec["memory"] = m = soak(app, soak_s) + say(f" [7] soak: peak {m.get('peak_pct')}% of the limit (anon), kills {m.get('oom_kills')}, restarts {m.get('restarts')}") + if m.get("samples", 0) == 0 or m.get("peak_pct") is None: + return finish("inconclusive", "the soak read no sample — not a pass") + if m["oom_kills"] or m["restarts"] or not all(c["running_all_samples"] for c in m["containers"].values()): + return finish("failed", f"the soak saw {m['oom_kills']} OOM kill(s) and {m['restarts']} restart(s)") + return finish("proven", "the security-fix step ran on the box through the guarded Update; healthy, TO on all four " + "observables, no undo, no hold, a clean soak" + ("" if tok is None else ", seed read back")) + + +def images_of(compose_text): + sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + import ladder + return ladder.images_in(compose_text) + + +def w_self(): + return sys.modules[__name__] + + +def _refs(spec): + """`svc=ref,svc2=ref2` -> {svc: ref}.""" + out = {} + for part in spec.split(","): + k, _, v = part.strip().partition("=") + if k and v: + out[k] = v + return out + + +def main(argv): + ap = argparse.ArgumentParser(prog="box_walk.py") + ap.add_argument("--security", metavar="APP", required=True, + help="the security-fix walk (09 decision 255) for this app") + ap.add_argument("--from", dest="frm", required=True, help="svc=ref,… the drill must stand at") + ap.add_argument("--to", required=True, help="svc=ref,… the step moves to") + ap.add_argument("--ev", required=True, help="evidence directory") + ap.add_argument("--soak", type=int, default=SOAK_DEFAULT_S) + ap.add_argument("--value", action="append", default=[], metavar="KEY=VAL", + help="a deploy field the wizard would get from the household (e.g. HDD_PATH=)") + a = ap.parse_args(argv) + frm, to = _refs(a.frm), _refs(a.to) + if set(frm) != set(to): + print("box_walk: --from and --to must name the same services") + return 2 + vals = dict(v.split("=", 1) for v in a.value if "=" in v) + return security_walk(a.security, frm, to, a.ev, a.soak, vals or None) + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/brpull.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/brpull.sh new file mode 100755 index 00000000..ba788b44 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/brpull.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# brpull.sh DEST — copy every new screenshot out of the browser LXC into DEST, then empty /root/shots there. +set -euo pipefail; mkdir -p "$1" +ssh demo-hp "LC_ALL=C pct exec ${BR_CT:-9361} -- tar cf - -C /root/shots ." | tar xf - -C "$1" +ssh demo-hp "LC_ALL=C pct exec ${BR_CT:-9361} -- find /root/shots -type f -delete" +ls "$1" | wc -l diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/brun.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/brun.sh new file mode 100755 index 00000000..c394fd59 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/brun.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# brun.sh [--env A,B] [--push LOCALFILE]... -- CMD ARGS — run CMD in the browser LXC (CT 9330 on demo-hp). +# Secrets named with --env are read from THIS process's env (run brun.sh under `sec run A,B -- …`) and +# travel on stdin through envrun.py, never on a command line. Files pushed land in /root/work/. +set -euo pipefail +CT=${BR_CT:-9361}; envs=""; pushes=() +while [ "$1" != "--" ]; do + case "$1" in --env) envs=$2; shift 2;; --push) pushes+=("$2"); shift 2;; *) echo "brun: bad arg $1" >&2; exit 1;; esac +done; shift +for f in "${pushes[@]}"; do + ssh demo-hp "cat > /tmp/brun-push-$(basename "$f")" < "$f" + ssh demo-hp "LC_ALL=C pct push $CT /tmp/brun-push-$(basename "$f") /root/work/$(basename "$f") && rm -f /tmp/brun-push-$(basename "$f")" +done +{ + IFS=, read -ra names <<< "$envs" + # each entry is NAME or SRC:DST (send the value of SRC under the name DST) + for n in "${names[@]}"; do [ -n "$n" ] || continue; src=${n%%:*}; dst=${n##*:} + printf '%s=%s\n' "$dst" "$(printf '%s' "${!src}" | base64 -w0)"; done + printf '\n' +} | ssh demo-hp "LC_ALL=C pct exec $CT -- /usr/local/bin/envrun.py $(printf '%q ' "$@")" diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/chain2.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/chain2.sh new file mode 100755 index 00000000..aa865308 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/chain2.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# chain2.sh — D22 put-back on two apps, then the re-run list (first-run evidence kept in /first-run/) +E=/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24 +export SC=/run/user/1000/sweep-sc TARGET=sweep BASE=https://192.168.0.157 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 SWEEP_EV=$E +cd $E/tools +for a in privatebin vikunja; do + echo "$(date -u +%T) START putback $a" >> $E/progress.log + timeout 2400 python3 putback.py $a > $E/_putback-$a.console.txt 2>&1 < /dev/null + echo "$(date -u +%T) END putback $a rc=$?" >> $E/progress.log +done +while read -r app; do + [ -n "$app" ] || continue + if [ -d "$E/$app" ] && [ ! -d "$E/$app/first-run" ]; then mkdir -p "$E/$app/first-run.tmp"; mv "$E/$app"/* "$E/$app/first-run.tmp/" 2>/dev/null; mv "$E/$app/first-run.tmp" "$E/$app/first-run"; fi + [ -f "$E/$app.console.txt" ] && mv "$E/$app.console.txt" "$E/$app/first-run/console.txt" + echo "$(date -u +%T) START redo $app" >> $E/progress.log + timeout 2700 python3 sweep.py "$app" > $E/$app.console.txt 2>&1 < /dev/null + echo "$(date -u +%T) END redo $app rc=$?" >> $E/progress.log + left=$(ssh -n -o BatchMode=yes root@192.168.0.138 "pct exec 9201 -- sh -c 'ls /opt/docker/stacks/*/app.yaml 2>/dev/null'" 2>/dev/null) + [ -n "$left" ] && echo "$(date -u +%T) WARN installed after $app: $left" >> $E/progress.log +done < "$E/tools/redo-live.txt" +echo "$(date -u +%T) CHAIN2 DONE" >> $E/progress.log diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/chain3.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/chain3.sh new file mode 100755 index 00000000..1876545a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/chain3.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# chain3.sh — re-run Calibre-Web + Grimmory on the LIVE catalog, then the DRILL pass (n8n, opengist, vaultwarden), then back to live. +E=/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24 +export SC=/run/user/1000/sweep-sc TARGET=sweep BASE=https://192.168.0.157 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 SWEEP_EV=$E +cd $E/tools +VOL=/var/lib/docker/volumes/felhom-controller-data/_data +G() { ssh -n -o BatchMode=yes root@192.168.0.138 "pct exec 9201 -- bash -c \"$1\""; } +keep_first() { a=$1; if [ -d "$E/$a" ] && [ ! -d "$E/$a/run-$2" ]; then mkdir -p "$E/$a/run-$2"; find "$E/$a" -maxdepth 1 -mindepth 1 ! -name 'first-run' ! -name 'run-*' -exec mv {} "$E/$a/run-$2/" \; ; fi; } +relogin() { sec run SWEEP_2026_10_24_DASH_PW -- bash brun.sh --env SWEEP_2026_10_24_DASH_PW:PW --push steps-login.json -- /opt/pw/bin/python /root/work/ui.py /root/work/steps-login.json > /dev/null 2>&1; } +wait_ctl() { for i in $(seq 1 60); do s=$(G "docker inspect -f {{.State.Health.Status}} felhom-controller" 2>/dev/null); [ "$s" = healthy ] && return 0; sleep 5; done; return 1; } +for a in calibre-web grimmory; do + keep_first $a 2 + echo "$(date -u +%T) START redo2 $a" >> $E/progress.log + timeout 2700 python3 sweep.py $a > $E/$a.console.txt 2>&1 < /dev/null + echo "$(date -u +%T) END redo2 $a rc=$?" >> $E/progress.log +done +# --- the drill pass --- +echo "$(date -u +%T) REPOINT drill" >> $E/progress.log +python3 repoint.py drill >> $E/_drill-repoint.txt 2>&1 +wait_ctl; sleep 20; relogin +G "docker logs --since 3m felhom-controller 2>&1 | grep -iE 'catalog sync|Pulling latest' | tail -3" >> $E/_drill-repoint.txt 2>&1 +for a in n8n opengist vaultwarden; do + keep_first $a drill-pre + echo "$(date -u +%T) START drill $a" >> $E/progress.log + if [ $a = vaultwarden ]; then FELHOM_BOX_ADMIN_SEED=1 timeout 2700 python3 sweep.py $a > $E/$a.console.txt 2>&1 < /dev/null; else timeout 2700 python3 sweep.py $a > $E/$a.console.txt 2>&1 < /dev/null; fi + echo "$(date -u +%T) END drill $a rc=$?" >> $E/progress.log +done +# --- back to live, byte for byte --- +python3 repoint.py live >> $E/_drill-repoint.txt 2>&1 +wait_ctl; sleep 20; relogin +echo "$(date -u +%T) REPOINT live; CHAIN3 DONE" >> $E/progress.log diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/chain4.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/chain4.sh new file mode 100644 index 00000000..6f272ad8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/chain4.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# chain4.sh — the drill pass again, through the box's local mirror (chain3's drill pass ran on the live templates: +# the box's clone of the private drill repo failed, see repoint.py). n8n, opengist, vaultwarden: chain3's runs are kept +# as run-live-2 (they are live-catalog runs). Stops before any install if the drill is not CONFIRMED on the box. +E=/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24 +export SC=/run/user/1000/sweep-sc TARGET=sweep BASE=https://192.168.0.157 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 SWEEP_EV=$E +cd $E/tools +G() { ssh -n -o BatchMode=yes root@192.168.0.138 "pct exec 9201 -- bash -c \"$1\""; } +keep_first() { a=$1; if [ -d "$E/$a" ] && [ ! -d "$E/$a/run-$2" ]; then mkdir -p "$E/$a/run-$2"; find "$E/$a" -maxdepth 1 -mindepth 1 ! -name 'first-run' ! -name 'run-*' -exec mv {} "$E/$a/run-$2/" \; ; fi; } +relogin() { sec run SWEEP_2026_10_24_DASH_PW -- bash brun.sh --env SWEEP_2026_10_24_DASH_PW:PW --push steps-login.json -- /opt/pw/bin/python /root/work/ui.py /root/work/steps-login.json > /dev/null 2>&1; } +wait_ctl() { for i in $(seq 1 60); do s=$(G "docker inspect -f {{.State.Health.Status}} felhom-controller" 2>/dev/null); [ "$s" = healthy ] && return 0; sleep 5; done; return 1; } +echo "$(date -u +%T) REPOINT drill (mirror)" >> $E/progress.log +if ! python3 repoint.py drill >> $E/_drill-repoint.txt 2>&1 < /dev/null; then + echo "$(date -u +%T) WARN drill NOT confirmed — no install; back to live" >> $E/progress.log + python3 repoint.py live >> $E/_drill-repoint.txt 2>&1 < /dev/null + wait_ctl; sleep 20; relogin + echo "$(date -u +%T) REPOINT live; CHAIN4 DONE (aborted)" >> $E/progress.log + exit 1 +fi +wait_ctl; sleep 20; relogin +# the positive observable for a601950: the RUNNING n8n container carries the variable (only that line is read) +( for i in $(seq 1 120); do + v=$(G "docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' n8n 2>/dev/null | grep -E '^N8N_DIAGNOSTICS_ENABLED='") + if [ -n "$v" ]; then echo "$(date -u +%T) n8n container env: $v" >> $E/_drill-repoint.txt; break; fi + sleep 10 + done ) & +for a in n8n opengist vaultwarden; do + keep_first $a live-2 + echo "$(date -u +%T) START drill2 $a" >> $E/progress.log + if [ $a = vaultwarden ]; then FELHOM_BOX_ADMIN_SEED=1 timeout 2700 python3 sweep.py $a > $E/$a.console.txt 2>&1 < /dev/null; else timeout 2700 python3 sweep.py $a > $E/$a.console.txt 2>&1 < /dev/null; fi + echo "$(date -u +%T) END drill2 $a rc=$?" >> $E/progress.log +done +python3 repoint.py live >> $E/_drill-repoint.txt 2>&1 < /dev/null +wait_ctl; sleep 20; relogin +echo "$(date -u +%T) REPOINT live; CHAIN4 DONE" >> $E/progress.log diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/chain5.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/chain5.sh new file mode 100644 index 00000000..af6484ef --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/chain5.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# chain5.sh — F14 settled by measurement: OpenGist on the LIVE template (128M) once more, with the cgroup's +# memory.events and swap sampled every 3 s by tools/memprobe-guest.sh inside the guest. The drill-2 run is kept as +# run-drill-2. Question: does 128M reach its limit (events max/oom_kill) or push the app into swap? +E=/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/catalog-sweep-2026-10-24 +export SC=/run/user/1000/sweep-sc TARGET=sweep BASE=https://192.168.0.157 DRIVE_ROOT=/mnt/felhom-drives/hdd_1 SWEEP_EV=$E +cd $E/tools +keep_first() { a=$1; if [ -d "$E/$a" ] && [ ! -d "$E/$a/run-$2" ]; then mkdir -p "$E/$a/run-$2"; find "$E/$a" -maxdepth 1 -mindepth 1 ! -name 'first-run' ! -name 'run-*' -exec mv {} "$E/$a/run-$2/" \; ; fi; } +G() { ssh -n -o BatchMode=yes root@192.168.0.138 "pct exec 9201 -- bash -c \"$1\""; } +grep -q 'app-catalog-felhom.eu' <(G "grep repo_url /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml") || { echo "$(date -u +%T) WARN chain5: box not on live — nothing done" >> $E/progress.log; exit 1; } +keep_first opengist drill-2 +G "rm -f /root/mp-opengist.txt; nohup /root/memprobe-guest.sh opengist /root/mp-opengist.txt 600 >/dev/null 2>&1 &" +echo "$(date -u +%T) START memprobe opengist (live 128M)" >> $E/progress.log +timeout 2700 python3 sweep.py opengist > $E/opengist.console.txt 2>&1 < /dev/null +rc=$? +sleep 10 +G "cat /root/mp-opengist.txt" > $E/opengist/memprobe-128M.txt +echo "$(date -u +%T) END memprobe opengist rc=$rc ($(wc -l < $E/opengist/memprobe-128M.txt) samples); CHAIN5 DONE" >> $E/progress.log diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/claim.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/claim.sh new file mode 100755 index 00000000..1fc2d214 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/claim.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# claim.sh BASE DOMAIN CODE_ENV PW_ENV [WRONG] — the household's „A szerver beállítása" page, headless. +# BASE = https://; DOMAIN = the customer domain (Host: felhom.). CODE_ENV / PW_ENV are the NAMES +# of env vars holding the setup code and the new dashboard password (run under `sec run`). With WRONG=1 one letter +# of the code is changed (a household's typo). Prints status codes, the Location and the page's visible message — +# never a secret. Endpoint-level: the same POST the page's form sends. +set -euo pipefail +BASE=$1; DOM=$2; CODE=${!3}; PW=${!4}; WRONG=${5:-0} +H="Host: felhom.$DOM"; T=$(mktemp -d); chmod 700 "$T"; trap 'rm -rf "$T"' EXIT +if [ "$WRONG" = 1 ]; then CODE="${CODE:0:2}$( [ "${CODE:2:1}" = q ] && echo w || echo q )${CODE:3}"; fi +curl -sk -H "$H" -D "$T/h1" -o "$T/b1" "$BASE/claim" +echo "GET /claim $(head -1 "$T/h1" | tr -d '\r')" +CK=$(grep -oiE 'felhom_claim_csrf=[^;]+' "$T/h1" | head -1) +CS=$(grep -oE 'name="_csrf" value="[^"]+"' "$T/b1" | head -1 | sed 's/.*value="//;s/"$//') +echo "csrf_len ${#CS} cookie_present $([ -n "$CK" ] && echo yes || echo no)" +curl -sk -H "$H" -H "Cookie: $CK" -D "$T/h2" -o "$T/b2" -X POST \ + --data-urlencode "_csrf=$CS" --data-urlencode "code=$CODE" \ + --data-urlencode "new_password=$PW" --data-urlencode "confirm_password=$PW" "$BASE/claim" +echo "POST /claim $(head -1 "$T/h2" | tr -d '\r') $(grep -i '^location:' "$T/h2" | tr -d '\r')" +python3 - "$T/b2" <<'EOF' +import re, sys, html +t = open(sys.argv[1], encoding="utf-8", errors="replace").read() +for cls in ("error", "alert", "flash", "banner", "notice"): + for m in re.finditer(r'class="[^"]*%s[^"]*"[^>]*>(.*?)]+>", " ", m.group(1)))).strip() + if s: + print("message:", s[:300]) +EOF diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/ctl.py b/documentation/audits/catalog-sweep-2026-10-24/tools/ctl.py new file mode 100644 index 00000000..2e2115c4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/ctl.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +"""ctl.py — a minimal headless client for a Felhom controller dashboard (rehearsal 2026-10-20). + +The same requests the dashboard's pages send (endpoint-level validation): POST /login, then JSON calls with the +session cookie and the X-CSRF-Token header. Configuration by env: CTL_BASE (https://), CTL_DOMAIN (Host: +felhom.), CTL_PW_ENV (the NAME of the env var holding the dashboard password — run under `sec run`). +Session files live in a 0700 temp dir per process; nothing secret is printed. + +usage as a CLI: ctl.py GET /api/stacks + ctl.py POST /api/stacks/x/stop '{"a":1}' +""" +import json, os, re, subprocess, sys, tempfile + +BASE = os.environ["CTL_BASE"] +HOST = "Host: felhom." + os.environ["CTL_DOMAIN"] +_T = tempfile.mkdtemp(prefix="ctl-") +os.chmod(_T, 0o700) +_SESS = _CSRF = None + + +def _curl(args, inp=None, timeout=600): + r = subprocess.run(["curl", "-sk", "-H", HOST] + args, capture_output=True, text=True, timeout=timeout, input=inp) + return r.stdout + + +def login(): + global _SESS, _CSRF + pw = os.environ[os.environ["CTL_PW_ENV"]] + hdr = os.path.join(_T, "h") + # the password goes on stdin (curl --data-urlencode password@-), never on a command line + _curl(["-D", hdr, "-o", "/dev/null", "-X", "POST", "--data-urlencode", "password@-", BASE + "/login"], inp=pw) + m = re.search(r"felhom_session=[A-Za-z0-9._-]+", open(hdr).read(), re.I) + if not m: + sys.exit("ctl: login failed (no session cookie)") + _SESS = m.group(0) + body = _curl(["-L", "-H", "Cookie: " + _SESS, BASE + "/"]) + c = re.search(r' 3 else None + code, body = call(m, p, d) + print(code) + print(json.dumps(body, ensure_ascii=False, indent=1)[:6000]) + + +def form(path, fields, timeout=600): + """A form POST (application/x-www-form-urlencoded) with the session and the X-CSRF-Token header.""" + import urllib.parse + if _SESS is None: + login() + out = _curl(["-H", "Cookie: " + _SESS, "-H", "X-CSRF-Token: " + _CSRF, "-w", "\n%{http_code}", "-X", "POST", + "--data-binary", "@-", "-H", "Content-Type: application/x-www-form-urlencoded", BASE + path], + inp=urllib.parse.urlencode(fields), timeout=timeout) + body, _, code = out.rpartition("\n") + try: + return code, json.loads(body) + except ValueError: + return code, {"_raw": body[:800]} diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/envrun.py b/documentation/audits/catalog-sweep-2026-10-24/tools/envrun.py new file mode 100755 index 00000000..a2b9808f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/envrun.py @@ -0,0 +1,12 @@ +#!/usr/bin/python3 +"""envrun.py — read NAME=base64value lines from stdin until an empty line, put them in the environment, exec argv. +Lets DooPlex hand a secret to a command in the browser LXC without it ever touching a command line.""" +import base64, os, sys +env = dict(os.environ) +for line in sys.stdin: + line = line.rstrip("\n") + if not line: + break + k, v = line.split("=", 1) + env[k] = base64.b64decode(v).decode() +os.execvpe(sys.argv[1], sys.argv[1:], env) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/escrow.py b/documentation/audits/catalog-sweep-2026-10-24/tools/escrow.py new file mode 100644 index 00000000..7d4dc288 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/escrow.py @@ -0,0 +1,80 @@ +#!/opt/pw/bin/python +"""escrow.py — the household's recovery code ceremony in real Chromium (rehearsal 2026-10-20, B2). + +Env: PW (the dashboard password). The recovery code is read off the page into /root/work/rc (0600) — never printed — +and DooPlex moves it into `sec` and shreds the file. Before every screenshot the code block is replaced by black +bars (the page keeps the code in a JS closure, so the check still works). +usage: escrow.py OUTPREFIX [--size phone|desktop] +""" +import os, re, sys, time +from playwright.sync_api import sync_playwright + +out = sys.argv[1] +size = sys.argv[sys.argv.index("--size") + 1] if "--size" in sys.argv else "phone" +vp = {"phone": dict(viewport={"width": 390, "height": 844}, device_scale_factor=2, is_mobile=True, has_touch=True), + "desktop": dict(viewport={"width": 1366, "height": 768})}[size] +T0 = time.time() + + +def say(*a): + print(f"+{time.time() - T0:6.1f}s", *a, flush=True) + + +def shot(pg, name): + pg.evaluate("""() => { const b = document.getElementById('code-block'); if (b && b.textContent) b.textContent = '█████-█████-█████-█████-█████-█████-█████-█████-█████-█████'; + document.querySelectorAll('input').forEach(e => { if (e.type !== 'checkbox') e.value = ''; }); }""") + pg.screenshot(path=f"{out}-{name}-{size}-hu.png", full_page=True) + + +with sync_playwright() as p: + b = p.chromium.launch(executable_path="/usr/bin/chromium", args=["--no-sandbox"]) + ctx = b.new_context(locale="hu-HU", timezone_id="Europe/Budapest", ignore_https_errors=True, + storage_state="/root/work/state-dash.json", **vp) + pg = ctx.new_page() + pg.goto("https://felhom.tester4.test/backup/escrow", wait_until="networkidle") + pg.wait_for_selector("#warn-card", state="visible", timeout=60000) + pg.fill("#reauth-password", os.environ["PW"]) + pg.click("#start-btn") + say("start pressed") + pg.wait_for_timeout(1500) + shot(pg, "2-progress") + try: + pg.wait_for_selector("#reveal-card, #void-card", state="visible", timeout=300000) + except Exception: + say("no reveal within 300 s:", re.sub(r"\s+", " ", pg.inner_text("#progress-card"))[:400]) + shot(pg, "2b-stuck") + sys.exit(2) + if pg.is_visible("#void-card"): + say("VOID card:", re.sub(r"\s+", " ", pg.inner_text("#void-card"))[:400]) + shot(pg, "3-void") + sys.exit(3) + say("reveal card shown") + shot(pg, "3-reveal-gate") + pg.click("#reveal-btn") + pg.wait_for_selector("#reveal-shown", state="visible", timeout=60000) + code = pg.inner_text("#code-block").strip() + fd = os.open("/root/work/rc", os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600) + os.write(fd, code.encode()) + os.close(fd) + words = code.split("-") + say(f"code read off the page: {len(words)} words, {len(code)} characters (stored 0600, not printed)") + label = pg.inner_text("#verify-label") + pos = [int(x) for x in re.findall(r"\d+", label)][:2] + say("the page asks for words at positions", pos, "| label:", label) + shot(pg, "4-code-shown-REDACTED") + pg.fill("#verify-w1", words[pos[0] - 1]) + pg.fill("#verify-w2", words[pos[1] - 1]) + pg.click("#verify-btn") + pg.wait_for_timeout(4000) + if pg.is_visible("#verify-error"): + say("verify error:", pg.inner_text("#verify-error")) + pg.wait_for_selector("#finish-block", state="visible", timeout=60000) + say("words accepted; finish block:", re.sub(r"\s+", " ", pg.inner_text("#finish-block"))[:400]) + shot(pg, "5-words-ok") + pg.check("#finish-check") + pg.click("#finish-btn") + pg.wait_for_load_state("networkidle") + pg.wait_for_timeout(3000) + say("after finish:", pg.url, re.sub(r"\s+", " ", pg.inner_text("main") if pg.locator("main").count() else pg.inner_text("body"))[:900]) + shot(pg, "6-after-finish") + b.close() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/file_rows.py b/documentation/audits/catalog-sweep-2026-10-24/tools/file_rows.py new file mode 100644 index 00000000..cf609a15 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/file_rows.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +"""file_rows.py [--apply] — the sweep's register rows A–I into OPEN-ITEMS.md, each in its category section in +severity order, IDs from the highest R-number in BOTH registers + 1, section heading counts updated; a note on R-739. +Prints the letter → ID map (README, table.py and the report use it). Without --apply it changes nothing.""" +import json, os, re, sys + +FE = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../..")) +OPEN = os.path.join(FE, "documentation/backlog/OPEN-ITEMS.md") +CLOSED = os.path.join(FE, "documentation/backlog/CLOSED-ITEMS.md") +EV = "`audits/catalog-sweep-2026-10-24/" + +ROWS = [ + ("A", "Backup & restore", "P2", + "**A reinstall's own capture rewrites the unit that „remove — keep backups” kept, so restoring that unit breaks the app and the household's item is gone.** " + f"Catalog sweep 2026-10-24, reproduced on its own ({EV}_unitprobe/tandoor/`): install Tandoor, one account, „Mentés most”, remove keeping data and backups, " + "install again (a volume app: no kept-data question) → 19:50:32 „Recovery unit captured for tandoor” rewrote ONLY the unit's `app.yaml` (checksum `0f366c97…` → `4438c1c5…`, " + "`created_at` 19:45:26 → 19:50:32) beside the OLD data → „Visszaállítás” paired the NEW install's database password with the OLD data: „password authentication failed” ×42 (app) / ×22 (postgres), " + "state `starting`, the account not there. Seen three times (the sweep's Tandoor cycle, this probe, AdventureLog's re-run 20:03:18 → 20:05:32 → restore); AdventureLog's first run worked only because no capture fell between. " + "The comment at `felhom-controller/controller/internal/backup/recovery_unit.go:101-103` says the refresh never rewrites the definition away from its data. Household order: „I reinstalled, my recipes are gone — restore the backup”. " + "The data itself is not deleted (the old volumes are in the unit).", + "OPEN", "—", "Design + fix in the controller: a capture of a NEW install must not adopt a unit whose data belongs to an earlier install (a new unit, or the old one set aside); a test in this order that fails today; then `tools/unitprobe.py` again", "CC"), + ("B", "Backup & restore", "P2", + "**A unit restore reports success while the app never came up.** Catalog sweep 2026-10-24: the controller logged „tandoor restored but health check failed: stack tandoor did not reach running state within 1m30s after restore”, " + "and the status the restore page reads said `ok: true` — „A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.” (17:32:41; again in the unitprobe, 19:52:38). " + f"The household is told it worked ({EV}tandoor/`, `_unitprobe/tandoor/record.json`).", + "OPEN", "—", "The restore's verdict consults the health result; the message says the app did not start and what to do; a test that fails today", "CC"), + ("C", "Backup & restore", "P2", + "**„Use my kept data” loaded ANOTHER box's database — a future-dated off-site copy of the rehearsal box — under today's kept files.** Catalog sweep 2026-10-24: Tester4's off-site store holds copies from the 2026-10-20 rehearsal, " + "whose box clock was set to 2026-10-28. On the new box the question said „Az adatbázist innen töltjük vissza: távoli mentés, 2026-10-28 07:39” for Paperless-ngx, Nextcloud and Immich, and loaded it: the seeded account / user / album " + "was not there, and Immich never answered again (404 for 20 min). RomM, whose newest copy was its own („saját mentés, 2026-10-24 19:17”), got its item back. " + "`07` §6.5 says the load is refused when the unit „was taken of another drive” — the rehearsal box's drive was another disk, so that check did not hold here (which field it compares: not measured). " + f"The household's own local unit stays (nothing deleted). Same future-dated copies as R-1206 (that row: retention only). Evidence {EV}paperless-ngx/`, `nextcloud/`, `immich/`.", + "OPEN", "—", "Read which drive identity the load compares and why the rehearsal unit passed; refuse a unit of another drive or one dated after now (or say so); a test with both; then the sweep's kept-data cycle on one app", "CC"), + ("D", "Apps & catalog", "P3", + "**Homepage answers a stranger with no gate at all**, while Glance — the same class of dashboard — is behind the family gate (decision 221, S26). A stranger who reaches `homepage.` sees the box's CPU, memory and disk figures " + f"and, once the family edits it, their own links ({EV}homepage/`; the stranger request → 200).", + "WAITING-ON-OPERATOR", "the operator's word", "Decide: `family_gate: true` like Glance (CC's pick: one line in the template, proven on the drill first) or leave it open", "operator"), + ("E", "Install & onboarding", "P3", + "**An install that fails on the image registry's rate limit tells the household only „exit code 1”.** Catalog sweep 2026-10-24, code-server 16:01:37: `lscr.io … toomanyrequests` → the product cleaned up right (R-649) but the event and the card say " + f"„Alkalmazás telepítése nem sikerült: Code-Server — exit code 1”; nothing says the download server is busy and a later try works. The same install went through later ({EV}code-server/`).", + "OPEN", "—", "Recognise `toomanyrequests` (and a pull timeout) in the deploy error and say „the app's download server is busy — try again in an hour”; a test with the stderr line", "CC"), + ("F", "Backup & restore", "P3", + "**The restore refusal tells the household to „turn on remote backup, or connect a second drive” when the box has both and their first copy has not run yet.** Catalog sweep 2026-10-24, Grimmory and Calibre-Web: „Mentés most” makes the local copy only " + "(`07` §8, by design), so the drive files had no copy yet; the refusal's sentence is `restore.refuse.files.none` (`felhom-controller/controller/internal/web/handlers.go:1835`) whatever the box has. " + "The Hungarian sentence is frozen by `i18n_go_parity`, so the fix is a NEW key („the first copy is made in tonight's backup”) chosen when a tier is set up but holds nothing yet.", + "OPEN", "—", "The new key + the branch + a test", "CC"), + ("G", "Storage & devices", "P4", + "**An English household sees the drive names in Hungarian** on the install page (and wherever a storage label shows): „Belső tárhely — 52.0 GB free (default)”, „Külső tárhely (hdd_1)” (catalog sweep 2026-10-24, " + f"{EV}navidrome/page-install-en.txt`). The label is stored once, in Hungarian, when the drive is found (`felhom-controller/controller/internal/settings/settings.go` `InferStorageLabel`); a household may rename it.", + "OPEN", "—", "Render a label that still equals the inferred default in the reader's language; a test per language", "CC"), + ("H", "Storage & devices", "P4", + "**„Remove with data” leaves the app's empty parent folder** (`/appdata/`) when the template binds a subfolder: Grimmory, RomM, Paperless-ngx (catalog sweep 2026-10-24; 4 KB each; the bound folders were removed). " + "Harmless (empty, not counted as old data), untidy for a household that browses the drive.", + "OPEN", "—", "Remove the parent when it is empty after the bound folders go; a test", "CC"), + ("I", "Process & tooling", "P4", + "**The catalog's box fixtures drifted from the apps they test** — fixed only in the sweep's copy " + f"({EV}tools/upgrade_fixtures_box.py`, marked SWEEP COPY): OpenGist 1.15 signs up at `/-/register`; Calibre-Web's admin is the generated ADMIN_USER; Mealie's after_install replaces the factory password (the seed raced it); " + "Papra 26.6 needs an Origin header; Rallly 4.15 closed password sign-up (no fixture possible by password); Vaultwarden 1.37.4 answers 404 on `POST /identity/accounts/register` (the fixture was written on 1.36; the admin invite works, the invited sign-up has no route — the newer clients' register/finish flow);the read-back through a family gate needs a fresh cookie after the setup gate opens (Grimmory stayed inconclusive). " + "New fixtures for Homebox, Immich, Komga, Jellyfin, Ghost, Radarr, Sonarr in `tools/sweep_fixtures.py`; `box_walk.py` gained a `sweep` target.", + "OPEN", "—", "Port them into `app-catalog-felhom.eu/scripts/` with the bench tests", "CC"), +] +R739_NOTE = (" **2026-10-24 (catalog sweep):** seen again on a box without DNS — Wanderer unhealthy and 404 for this reason " + "(`audits/catalog-sweep-2026-10-24/wanderer/`).") +R1267_NOTE = (" **2026-10-24 (catalog sweep):** the same class for OnlyOffice and RomM (RomM's image volume `/romm` holds only the " + "empty mount points of its binds); after every catalog app had been removed WITH data, the sweep box still held 52 " + "such volumes (PrivateBin 21, OnlyOffice 8, RomM 8, Immich 3, and 12 from 12:50–12:52 before the batch, holding the same nginx folders as PrivateBin's) — remove-with-data " + "does not see them (no compose project label). All small (4–72 KB), no household data " + "(`audits/catalog-sweep-2026-10-24/_box/anon-volumes.txt`).") +SEV_ORDER = {"P1": 1, "P2": 2, "P3": 3, "P4": 4} + + +def main(apply): + text = open(OPEN).read() + ids = [int(x) for x in re.findall(r"\bR-(\d+)\b", text + open(CLOSED).read())] + nxt = max(ids) + 1 + lines = text.split("\n") + idmap = {} + for letter, cat, sev, what, state, blocked, action, owner in ROWS: + rid = f"R-{nxt}"; nxt += 1 + idmap[letter] = rid + row = f"| **{rid}** | {cat} | {sev} | {what} | {state} | {blocked} | {action} | {owner} |" + h = next(i for i, l in enumerate(lines) if re.match(rf"^## {re.escape(cat)} — \d+ rows", l)) + end = next((i for i in range(h + 1, len(lines)) if lines[i].startswith("## ")), len(lines)) + rows_at = [i for i in range(h, end) if lines[i].startswith("| **R-")] + pos = None + for i in rows_at: + s = lines[i].split(" | ")[2].strip() + if SEV_ORDER.get(s, 9) > SEV_ORDER[sev]: + pos = i; break + if pos is None: + pos = rows_at[-1] + 1 if rows_at else h + 4 + lines.insert(pos, row) + # heading: total + per-sev counts, recomputed from the rows of THIS category in the section + m = re.match(r"^(## .+? — )(\d+) rows \((.*)\)$", lines[h]) + counts = {} + for p in re.findall(r"(P\d) (\d+)", m.group(3)): + counts[p[0]] = int(p[1]) + counts[sev] = counts.get(sev, 0) + 1 + lines[h] = f"{m.group(1)}{int(m.group(2)) + 1} rows ({', '.join(f'{k} {counts[k]}' for k in sorted(counts))})" + for rid, note in (("R-739", R739_NOTE), ("R-1267", R1267_NOTE)): + i = next(i for i, l in enumerate(lines) if l.startswith(f"| **{rid}** |")) + cells = lines[i].split(" | ") + assert len(cells) == 8, (rid, len(cells)) + if "catalog sweep" not in lines[i]: + cells[4] = cells[4] + note # the State cell, dated + lines[i] = " | ".join(cells) + print(json.dumps(idmap)) + if apply: + open(OPEN, "w").write("\n".join(lines)) + + +if __name__ == "__main__": + main("--apply" in sys.argv) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/letters_to_ids.py b/documentation/audits/catalog-sweep-2026-10-24/tools/letters_to_ids.py new file mode 100644 index 00000000..8ff62792 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/letters_to_ids.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +"""letters_to_ids.py '' — replace „row A", „row A, B" with the filed R-numbers in the +README and in table.py (the drafts used letters because the IDs are taken only after the last pull).""" +import json, os, re, sys + +EV = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ids = json.loads(sys.argv[1]) +rx = re.compile(r"\brows? ([A-I](?:, [A-I])*)\b") +for p in (os.path.join(EV, "README.md"), os.path.join(EV, "tools", "table.py")): + s = open(p).read() + s2 = rx.sub(lambda m: ", ".join(ids[x] for x in m.group(1).split(", ")), s) + open(p, "w").write(s2) + print(p, "replaced", len(rx.findall(s)), "left", len(rx.findall(s2))) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/memprobe-guest.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/memprobe-guest.sh new file mode 100644 index 00000000..3fb99447 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/memprobe-guest.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# runs IN the guest: memprobe-guest.sh [samples] +c=$1; out=$2; n=${3:-400}; seen=0 +for i in $(seq 1 $n); do + id=$(docker inspect -f '{{.Id}}' "$c" 2>/dev/null) + d=/sys/fs/cgroup/system.slice/docker-$id.scope + if [ -n "$id" ] && [ -d "$d" ]; then + seen=1 + echo "$(date -u +%T) anon=$(awk '/^anon /{print int($2/1048576)}' $d/memory.stat)MiB swap=$(( $(cat $d/memory.swap.current 2>/dev/null || echo 0) / 1048576 ))MiB max=$(cat $d/memory.max) $(tr '\n' ' ' < $d/memory.events)" >> "$out" + elif [ $seen = 1 ] && [ -z "$id" ]; then + break + fi + sleep 3 +done diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/order.txt b/documentation/audits/catalog-sweep-2026-10-24/tools/order.txt new file mode 100644 index 00000000..0830d382 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/order.txt @@ -0,0 +1,62 @@ +gokapi +opengist +privatebin +radicale +recipe-importer +actualbudget +homebox +homepage +navidrome +termix +vaultwarden +vikunja +bentopdf +grocy +seerr +uptime-kuma +audiobookshelf +ghost +lubelogger +nzbget +prowlarr +radarr +sonarr +transmission +wishlist +claper +kimai +bookstack +calibre-web +grafana +komga +metube +papra +zipline +adventurelog +mealie +code-server +gramps-web +qbittorrent +rallly +sabnzbd +wanderer +docmost +grimmory +romm +tandoor +paperless-ngx +sparkyfitness +crafty-controller +dawarich +karakeep +gitea +outline +calcom +n8n +home-assistant +jellyfin +emby +plex +onlyoffice +nextcloud +immich diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/putback.py b/documentation/audits/catalog-sweep-2026-10-24/tools/putback.py new file mode 100644 index 00000000..ee43478a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/putback.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 +"""putback.py — D22 (the put-back covers every restore) on the sweep box, the 10-21 night's method +(`audits/night-2026-10-21/P3-restore/`): install, seed one item through the front door, „Mentés most", then the FAULT — +the recovery unit's largest volume archive truncated to half (a damaged backup, the only hand-made change) — then the +household's „Visszaállítás" of that unit. Expected: the restore reports failure, the LIVE data and definition are put +back, the app runs, and the item reads back. Then remove with data. + +usage: SC=… SWEEP_EV=… DRIVE_ROOT=… python3 putback.py (evidence: /_putback//) +""" +import json, os, sys, time + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import sweep as sw # noqa: E402 + +w, fxm = sw.w, sw.fxm + + +def main(app): + d = os.path.join(sw.EV, "_putback", app) + os.makedirs(d, exist_ok=True) + log = open(os.path.join(d, "walk.log"), "a") + + def say(*a): + line = time.strftime("%H:%M:%SZ", time.gmtime()) + " " + " ".join(str(x) for x in a) + print(line, flush=True) + log.write(sw.scrub(line) + "\n") + log.flush() + + w.say = say + fx = fxm.FIXTURES[app] + sub = getattr(fx, "sub", app) + rec = {"app": app} + w.login() + try: + rec["install"] = w.deploy(app, sub) and w.wait_app(sub, "/", tries=90, delay=5) + tok = fx.seed(w, sub, say) + rec["seed"] = bool(tok) + sw.backup_now(rec, say) + units = sw.g(f"ls -la --time-style=+%T /mnt/sys_drive/felhom-data/backups/primary/{app}/volume-dumps/ 2>&1") + say(" unit before the fault:\n" + units) + big = sw.g(f"ls -S /mnt/sys_drive/felhom-data/backups/primary/{app}/volume-dumps/*.tar 2>/dev/null | head -1").strip() + size = sw.g(f"stat -c %s {big}").strip() + sw.g(f"truncate -s $(( {size} / 2 )) {big}") + after = sw.g(f"stat -c %s {big}").strip() + say(f" THE FAULT: {big} {size} -> {after}") + rec["fault"] = {"file": big, "from": size, "to": after} + sw.restore_unit(app, rec, say) + rec["state_after"] = w.stack(app).get("state") + rec["item_after"] = bool(tok) and bool(fx.verify(w, sub, tok, say)) + rec["controller_log"] = sw.g("docker logs --since 10m felhom-controller 2>&1 | grep -iE 'put back|R-893|restore failed|put-back' | tail -5") + say(" controller: " + rec["controller_log"].strip()[:600]) + finally: + sw.remove(app, keep=False, say=say) + rec["after_remove"] = sw.leftovers(app, sub) + json.dump(rec, open(os.path.join(d, "record.json"), "w"), ensure_ascii=False, indent=1) + say(" == putback " + json.dumps({k: rec.get(k) for k in ("seed", "state_after", "item_after")})) + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/redo-live.txt b/documentation/audits/catalog-sweep-2026-10-24/tools/redo-live.txt new file mode 100644 index 00000000..fc90b79f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/redo-live.txt @@ -0,0 +1,11 @@ +adventurelog +calibre-web +code-server +gokapi +grimmory +homebox +mealie +opengist +papra +rallly +seerr diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/repoint.py b/documentation/audits/catalog-sweep-2026-10-24/tools/repoint.py new file mode 100644 index 00000000..66ae2774 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/repoint.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""repoint.py drill|live|status — point the sweep box's controller at the drill catalog, or put the saved +controller.yaml back byte for byte. + +The drill repo on Gitea is PRIVATE (R-992) and the box holds no catalog credential, so the drill is MIRRORED onto the +box: a bare git repository in the controller's own data volume, loaded from a git bundle, and +`git.repo_url: file:///opt/docker/felhom-controller/drill-catalog.git` — the method of +`audits/burndown-3-2026-10-17/tools/repoint.py`. The first version of this file set repo_url to the Gitea URL and +believed the repo public; the box's clone then failed („could not read Username", 21:18:11) and the controller ran on +the templates it already had — the first drill pass proved nothing (README, „Drill fixes"). + +`drill` ends with a POSITIVE check, not the absence of an error: the box's catalog cache must be at the drill's main +commit, and every `EXPECT` line must be in the box's copy of that template. Prints repo_url, never a token.""" +import os, subprocess, sys, time +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +os.environ.setdefault("TARGET", "sweep") +import box_walk as w + +DRILL = "/mnt/5_hdd/felhom.eu/drill/app-catalog-drill" +VOL = "/var/lib/docker/volumes/felhom-controller-data/_data" # guest path of the controller's data volume +CVOL = "/opt/docker/felhom-controller" # the same, inside the controller container +SAVE = f"{VOL}/controller.yaml.pre-sweep-drill" +MIRROR_URL = f"file://{CVOL}/drill-catalog.git" +EXPECT = [("n8n/docker-compose.yml", "N8N_DIAGNOSTICS_ENABLED=false"), ("opengist/docker-compose.yml", "256M")] + + +def status(): + print(w.guest(f"""grep -n 'repo_url' {VOL}/controller.yaml; ls -l {SAVE} 2>&1 | tail -1 +docker exec felhom-controller sh -c 'git -C {CVOL}/drill-catalog.git log -1 --format="mirror main %h" main 2>&1; + git -C {CVOL}/data/catalog-cache log -1 --format="cache HEAD %h" 2>&1; git -C {CVOL}/data/catalog-cache remote get-url origin'""")) + + +def mirror(): + b = f"/tmp/drill-sweep1024-{os.getpid()}.bundle" + subprocess.run(["git", "-C", DRILL, "bundle", "create", b, "main"], check=True, capture_output=True) + subprocess.run(["scp", "-q", "-o", "StrictHostKeyChecking=accept-new", b, f"{w._T['ssh']}:{b}"], check=True) + subprocess.run(w.ssh_args() + [f"pct push {w.GUEST} {b} {VOL}/{os.path.basename(b)} && rm -f {b}"], check=True) + print(w.guest(f"""set -e +docker exec felhom-controller sh -c 'test -d {CVOL}/drill-catalog.git || git init -q --bare -b main {CVOL}/drill-catalog.git +git -C {CVOL}/drill-catalog.git fetch -q {CVOL}/{os.path.basename(b)} +main:main && rm -f {CVOL}/{os.path.basename(b)} +git -C {CVOL}/drill-catalog.git log -1 --format="mirror main %h" main'""")) + os.remove(b) + + +def restart_sync(): + w.guest("docker restart felhom-controller >/dev/null") + for _ in range(60): + time.sleep(3) + try: + w.login() + break + except SystemExit: + continue + w.sync_rescan() + time.sleep(5) + print(w.guest("docker logs --since 3m felhom-controller 2>&1 | grep -E '\\[sync\\]' | grep -v DEBUG | tail -6 | cut -c1-200")) + + +def drill(): + head = subprocess.run(["git", "-C", DRILL, "rev-parse", "--short=7", "main"], capture_output=True, text=True).stdout.strip() + mirror() + print(w.guest(f"""set -e +test -f {SAVE} || cp -p {VOL}/controller.yaml {SAVE} +sed -i -E 's#^(\\s+repo_url: ).*$#\\1{MIRROR_URL}#' {VOL}/controller.yaml +grep -n 'repo_url' {VOL}/controller.yaml""")) + restart_sync() + cache = w.guest(f"docker exec felhom-controller git -C {CVOL}/data/catalog-cache log -1 --format=%h").strip() + ok = cache.startswith(head) + for f, want in EXPECT: + got = w.guest(f"docker exec felhom-controller grep -c -- '{want}' {CVOL}/data/catalog-cache/templates/{f} || true").strip() + print(f" expect {f} ∋ {want}: {got}") + ok = ok and got not in ("", "0") + print(f"drill main {head}, box cache {cache}: " + ("DRILL-CONFIRMED" if ok else "DRILL-NOT-CONFIRMED")) + sys.exit(0 if ok else 1) + + +def live(): + print(w.guest(f"""set -e +cp -p {SAVE} {VOL}/controller.yaml +cmp {SAVE} {VOL}/controller.yaml && echo RESTORED-IDENTICAL; grep -n 'repo_url' {VOL}/controller.yaml""")) + restart_sync() + status() + + +{"drill": drill, "live": live, "status": status}[sys.argv[1]]() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/shot.py b/documentation/audits/catalog-sweep-2026-10-24/tools/shot.py new file mode 100755 index 00000000..9e2f0964 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/shot.py @@ -0,0 +1,67 @@ +#!/opt/pw/bin/python +"""shot.py — open a page in real Chromium (Playwright) and screenshot it, phone and computer, HU and EN. + +Rehearsal 2026-10-20, A4. Runs in the throwaway LXC rehearsal1020-browser on demo-hp. +Chromium is Debian's package (pinned by the image: `chromium --version` is in A4-browser/versions.txt); +Playwright 1.52.0 from PyPI drives it via executable_path. + +usage: shot.py URL OUTPREFIX [--sizes phone,desktop] [--langs hu,en] [--state FILE] [--host-header H] + [--url-env NAME] [--wait MS] [--full] + --url-env NAME read the URL (or its secret tail) from env NAME and append it to URL — so a capability + link never appears on a command line or in this script's output. + --state FILE Playwright storage_state JSON (cookies) to load — a logged-in session. +Writes OUTPREFIX--.png and prints one line per shot: status, final path (secret tails masked), title. +""" +import argparse, os, re, sys +from playwright.sync_api import sync_playwright + +SIZES = {"phone": dict(width=390, height=844, is_mobile=True, device_scale_factor=2, has_touch=True), + "desktop": dict(width=1366, height=768, is_mobile=False, device_scale_factor=1, has_touch=False)} +LANGS = {"hu": "hu-HU", "en": "en-US"} +UA_PHONE = ("Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/155.0.0.0 Mobile Safari/537.36") + + +def mask(u: str) -> str: + return re.sub(r"[0-9a-f]{32,}", "", u) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("url"); ap.add_argument("out") + ap.add_argument("--sizes", default="phone,desktop"); ap.add_argument("--langs", default="hu,en") + ap.add_argument("--state"); ap.add_argument("--url-env"); ap.add_argument("--wait", type=int, default=1500) + ap.add_argument("--full", action="store_true"); ap.add_argument("--ignore-https-errors", action="store_true") + a = ap.parse_args() + url = a.url + (os.environ[a.url_env] if a.url_env else "") + with sync_playwright() as p: + b = p.chromium.launch(executable_path="/usr/bin/chromium", args=["--no-sandbox"]) + for s in a.sizes.split(","): + for l in a.langs.split(","): + kw = dict(viewport={"width": SIZES[s]["width"], "height": SIZES[s]["height"]}, + device_scale_factor=SIZES[s]["device_scale_factor"], is_mobile=SIZES[s]["is_mobile"], + has_touch=SIZES[s]["has_touch"], locale=LANGS[l], + extra_http_headers={"Accept-Language": LANGS[l] + "," + l + ";q=0.9"}, + ignore_https_errors=a.ignore_https_errors, timezone_id="Europe/Budapest") + if s == "phone": + kw["user_agent"] = UA_PHONE + if a.state: + kw["storage_state"] = a.state + ctx = b.new_context(**kw) + pg = ctx.new_page() + try: + r = pg.goto(url, wait_until="networkidle", timeout=45000) + st = r.status if r else "-" + except Exception as e: # noqa: BLE001 — a failed load is a result, recorded + st = "ERR " + type(e).__name__ + pg.wait_for_timeout(a.wait) + out = f"{a.out}-{s}-{l}.png" + pg.screenshot(path=out, full_page=a.full) + hw = pg.evaluate("document.documentElement.scrollWidth > window.innerWidth") + print(f"{st}\t{s}\t{l}\t{mask(pg.url)}\t{pg.title()!r}\thscroll={hw}\t{out}") + ctx.close() + b.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/steps-login.json b/documentation/audits/catalog-sweep-2026-10-24/tools/steps-login.json new file mode 100644 index 00000000..981d67ca --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/steps-login.json @@ -0,0 +1,3 @@ +{"size": "phone", "lang": "hu", "state": "/root/work/state-dash.json", "out": "/root/shots/box-login", + "steps": [{"goto": "https://felhom.tester4.test/login"}, {"fill": "input[name=password]", "env": "PW"}, + {"expect_nav": true}, {"click": "button[type=submit].btn-primary"}, {"shot": "1-launcher"}]} diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/steps-unlock.json b/documentation/audits/catalog-sweep-2026-10-24/tools/steps-unlock.json new file mode 100644 index 00000000..c7041786 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/steps-unlock.json @@ -0,0 +1,11 @@ +{"size": "phone", "lang": "hu", "state": "/root/work/state-dash.json", "out": "/root/shots/box-recovery", + "steps": [ + {"goto": "https://felhom.tester4.test/login"}, + {"fill": "input[name=password]", "env": "PW"}, + {"expect_nav": true}, {"click": "button[type=submit].btn-primary"}, + {"goto": "https://felhom.tester4.test/recovery"}, + {"shot": "1-page"}, + {"fill": "#recovery_code", "env": "RC"}, + {"expect_nav": true}, {"click": "form[action='/recovery/unlock'] button[type=submit]"}, + {"wait": 4000}, {"text": true}, {"shot": "2-after-unlock"} + ]} diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/summarize.py b/documentation/audits/catalog-sweep-2026-10-24/tools/summarize.py new file mode 100644 index 00000000..360f81b8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/summarize.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""summarize.py — read every /record.json of the sweep and print one review line per app: the measured facts and +a FIRST verdict hint. The hint is a filter for the reader, not the verdict: README.md carries the verdict after each +app's evidence was read.""" +import glob, json, os, re, sys + +EV = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +EN_IN_HU = re.compile(r"(?i)\b(the|and|your|you|please|click|with|this|password|settings|open|first|login)\b") + + +def hint(r): + probs, broken = [], [] + inst = r.get("install") or {} + if not inst.get("ok"): + broken.append("install failed") + elif not inst.get("front_door"): + broken.append("front door never answered") + if r.get("exception"): + broken.append("cycle raised: " + r["exception"][:80]) + if r.get("fixture") and r.get("seed") is False: + probs.append("seed failed") + if r.get("seed") and r.get("seed_read_now") is False: + probs.append("item not read back at once") + back = r.get("seed_read_after_reinstall") + if r.get("seed") and back is False and not r.get("seed_read_after_unit_restore"): + probs.append("item NOT back after keep-data reinstall + unit restore") + if r.get("seed_read_after_restore") is False: + probs.append("item not back after the unit restore") + if (r.get("kept") or {}).get("offered") and (r.get("kept") or {}).get("use_ok") is False: + probs.append("use-my-kept-data failed") + left = r.get("after_final_remove") or {} + if any(left.get(k) for k in ("containers", "volumes", "appyaml", "appdata", "kept")): + probs.append("leftovers after remove: " + json.dumps({k: v for k, v in left.items() if v and k != "subdomain"})) + if left.get("subdomain") and not left["subdomain"].startswith("404"): + probs.append("subdomain after remove: " + left["subdomain"][:40]) + for c, v in (r.get("containers") or {}).items(): + anon = (r.get("mem_anon_peak_mib") or {}).get(c) + lim, peak = v.get("limit_mib"), anon if anon is not None else (r.get("mem_peak_mib") or {}).get(c) + if lim and peak and peak > 0.9 * lim: + probs.append(f"memory {c} {peak}/{lim} MiB ({'anon' if anon is not None else 'docker stats, may include cache'})") + if v.get("restarts"): + probs.append(f"restarts {c} {v['restarts']}") + if v.get("health") == "unhealthy": + probs.append(f"unhealthy {c}") + errs = [l for l in (r.get("errors") or {}).get("sample", []) + if not re.search(r"(?i)wrong (username|password)|invalid password|failed login|login fail|unauthori[sz]ed|status=40[13]|bad credentials", l)] + n = (r.get("errors") or {}).get("count", 0) - (len((r.get("errors") or {}).get("sample", [])) - len(errs)) + if n > 0: # the negative controls' own wrong-password logins are expected and not counted + probs.append(f"error lines {n}") + if r.get("http_port_80") and not r["http_port_80"].startswith(("301", "308")): + probs.append("http :80 → " + r["http_port_80"][:30]) + for tab, fname in (("install_page", "install"), ("guide", "guide")): + t = r.get(tab) or {} + try: # English OUTSIDE quotes: a quoted „Settings” is the app's own label, glossed in Hungarian — correct + txt = open(os.path.join(EV, r["app"], f"page-{fname}-hu.txt")).read() + bare = re.sub(r"„[^”]*”|“[^”]*”|\"[^\"]*\"|\([^)]*\)", " ", txt) + words = sorted(set(m.lower() for m in EN_IN_HU.findall(bare))) + except OSError: + words = t.get("english_words_in_hu") or [] + if words: + probs.append(f"{tab} EN words in HU {words[:5]}") + if t.get("accented_in_en"): + probs.append(f"{tab} HU letters in EN {t['accented_in_en']}") + if t.get("same_text"): + probs.append(f"{tab} same text HU/EN") + for s in (r.get("shots_install") or []) + (r.get("shots_after") or []): + if "hscroll=True" in s: + probs.append("sideways scroll in a screenshot") + if "STEP FAILED" in s: + probs.append("a screenshot step failed") + v = "broken" if broken else ("problem?" if probs else "works") + return v, broken + probs + + +def main(): + rows = [] + for f in sorted(glob.glob(os.path.join(EV, "*", "record.json"))): + r = json.load(open(f)) + v, why = hint(r) + inst = r.get("install") or {} + peak = sum((r.get("mem_peak_mib") or {}).values()) + lim = sum((c.get("limit_mib") or 0) for c in (r.get("containers") or {}).values()) + rows.append((r["app"], v, round(peak), lim, inst.get("seconds_to_front_door"), r.get("fixture") or "-", + r.get("stranger", "")[:40], "; ".join(why))) + for row in rows: + print("\t".join(str(x) for x in row)) + print(f"# {len(rows)} records; " + ", ".join(f"{k} {sum(1 for r in rows if r[1] == k)}" for k in ("works", "problem?", "broken")), + file=sys.stderr) + + +if __name__ == "__main__": + main() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/sweep.py b/documentation/audits/catalog-sweep-2026-10-24/tools/sweep.py new file mode 100644 index 00000000..3228d081 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/sweep.py @@ -0,0 +1,362 @@ +#!/usr/bin/env python3 +"""sweep.py — the catalog sweep of 2026-10-24: every app, one at a time, the household's cycle, endpoint-level. + +The same requests the dashboard's pages send (POST /api/stacks//deploy, /stop, /remove, /api/backup/run, +POST /backup/restore), and the app's own front door through traefik (Host: .tester4.test) for the seed and the +read-back (`upgrade_fixtures_box.py`, the R-156 rule: nothing is planted by hand). No docker exec changes state; the +docker commands here only READ (ps, stats, inspect, logs, volume ls). + +usage: SC=<0700 dir with .ctlpw> SWEEP_EV= DRIVE_ROOT= python3 sweep.py [--restore] + +Per app it writes //record.json and walk.log. A step that fails is recorded and the cycle goes on +where it can; the app is always removed (with its data) at the end, so the next app starts on an empty box. +""" +import json, os, re, sys, threading, time + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +os.environ.setdefault("TARGET", "sweep") +import box_walk as w # noqa: E402 (the sweep copy: a `sweep` target row, DRIVE_ROOT from env) +import upgrade_fixtures_box as fxm # noqa: E402 +from sweep_fixtures import SWEEP_FIXTURES # noqa: E402 (fixtures written for this sweep; never override the catalog's) +for _k, _v in SWEEP_FIXTURES.items(): + fxm.FIXTURES.setdefault(_k, _v) + +EV = os.environ["SWEEP_EV"] +CATALOG = os.environ.get("CATALOG", "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu") +SECRET_RE = re.compile(r"(?i)(pass(?:word)?|secret|token|api[_-]?key|authorization|cookie)(\s*[:=]\s*)\S+") + + +def scrub(s): + return SECRET_RE.sub(lambda m: m.group(1) + m.group(2) + "", s) + + +def g(script, timeout=300): + return w.guest(script, timeout=timeout) + + +def containers(app): + out = g(f"docker ps -a --filter label=com.docker.compose.project={app} --format '{{{{.Names}}}}'") + return [c for c in out.split() if c] + + +class MemWatch(threading.Thread): + """docker stats every 15 s for the app's containers; peak per container (docker stats excludes the file cache).""" + + def __init__(self, app): + super().__init__(daemon=True) + self.app, self.peak, self.anon, self.stop_ev = app, {}, {}, threading.Event() + + def run(self): + while not self.stop_ev.is_set(): + out = g(f"c=$(docker ps --filter label=com.docker.compose.project={self.app} -q); " + "[ -n \"$c\" ] && docker stats --no-stream --format '{{.Name}} {{.MemUsage}}' $c", timeout=60) + # anon memory from the cgroup (the file cache excluded — the project's measure, memory note + # harness-memory-peak-includes-page-cache); docker stats above can include active file cache + an = g(f"for c in $(docker ps --filter label=com.docker.compose.project={self.app} -q); do " + "n=$(docker inspect -f '{{.Name}}' $c); id=$(docker inspect -f '{{.Id}}' $c); " + "echo $n $(grep -E '^anon ' /sys/fs/cgroup/system.slice/docker-$id.scope/memory.stat | cut -d' ' -f2); done", timeout=60) + for line in an.splitlines(): + p = line.split() + if len(p) == 2 and p[1].isdigit(): + k = p[0].lstrip("/") + self.anon[k] = max(self.anon.get(k, 0), round(int(p[1]) / 1048576, 1)) + for line in out.splitlines(): + m = re.match(r"(\S+) ([\d.]+)([KMG]i?B)", line) + if m: + v = float(m.group(2)) * {"KiB": 1 / 1024, "KB": 1 / 1024, "MiB": 1, "MB": 1, "GiB": 1024, "GB": 1024}.get(m.group(3), 1) + self.peak[m.group(1)] = max(self.peak.get(m.group(1), 0), round(v, 1)) + self.stop_ev.wait(15) + + +def limits(app): + out = g(f"for c in $(docker ps -a --filter label=com.docker.compose.project={app} -q); do " + "docker inspect -f '{{.Name}} {{.HostConfig.Memory}} {{.RestartCount}} {{.State.Status}} {{if .State.Health}}{{.State.Health.Status}}{{end}}' $c; done") + res = {} + for line in out.splitlines(): + p = line.split() + if len(p) >= 4: + res[p[0].lstrip("/")] = {"limit_mib": round(int(p[1]) / 1048576) if p[1].isdigit() else None, + "restarts": int(p[2]) if p[2].isdigit() else None, "status": p[3], + "health": p[4] if len(p) > 4 else ""} + return res + + +def error_lines(app, since): + out = g(f"for c in $(docker ps -a --filter label=com.docker.compose.project={app} --format '{{{{.Names}}}}'); do " + f"docker logs --since {int(since)} $c 2>&1 | grep -iE '(^|[^a-z_])(error|fatal|panic|exception|traceback)([^a-z_]|$)' " + "| grep -viE 'error_reporting|errorlog|level=info|no error|0 errors|errors: 0|\"level\":\"info\"' | sed \"s/^/$c: /\"; done", timeout=180) + lines = [l for l in out.splitlines() if l.strip()] + return {"count": len(lines), "sample": [scrub(l)[:200] for l in lines[:4]]} + + +def page_text(path, lang="hu"): + """The page as the household reads it (?lang= is the page's own language switch), menu and footer cut off.""" + import html as _h + sess = open(f"{w.SC}/sess{os.getpid()}.txt").read().strip() + sep = "&" if "?" in path else "?" + r = w.sh(["curl", "-sk", "-L", "-H", w.HOSTHDR, "-H", f"Cookie: {sess}", f"{w.BASE}{path}{sep}lang={lang}"]) + t = re.sub(r"(?s)||", " ", r.stdout or "") + t = _h.unescape(re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", t))).strip() + m = re.search(r"\d+\.\d+\.\d+ Magyar English", t) + return t[m.end():].strip() if m else t + + +EN_IN_HU = re.compile(r"(?i)\b(the|and|your|you|please|click|with|this|password|settings|open|first|login)\b") +HU_IN_EN = re.compile(r"[őűŐŰáéíóöúüÁÉÍÓÖÚÜ]") + + +def slug_of(app): + try: + m = re.search(r'(?m)^slug:\s*"?([a-z0-9-]+)', open(f"{CATALOG}/templates/{app}/.felhom.yml").read()) + return m.group(1) if m else app + except OSError: + return app + + +def texts(app, tab, d): + """A tab of the app page in both languages, saved whole; English words in the Hungarian text and Hungarian letters + in the English text are counted (a first filter for a reader, not a verdict).""" + slug = slug_of(app) + path = f"/apps/{slug}" + (f"/{tab}" if tab else "") + hu, en = page_text(path, "hu"), page_text(path, "en") + open(os.path.join(d, f"page-{tab or 'overview'}-hu.txt"), "w").write(hu) + open(os.path.join(d, f"page-{tab or 'overview'}-en.txt"), "w").write(en) + return {"path": path, "hu_len": len(hu), "en_len": len(en), + "english_words_in_hu": sorted(set(m.lower() for m in EN_IN_HU.findall(hu)))[:15], + "accented_in_en": len(HU_IN_EN.findall(en)), "same_text": hu == en} + + +def shots(app, sub, phase, d): + """Real Chromium: the install page before the install; after it the guide (phone, HU) and the app's own first + screen as the household opens it (computer, HU), the setup gate passed by the dashboard session.""" + import subprocess + slug = slug_of(app) + out = f"/root/shots/{app}-{phase}" + if phase == "install": + steps = [{"goto": f"https://felhom.tester4.test/apps/{slug}/install"}, {"wait": 1500}, {"shot": "install"}] + spec = [("phone", "hu", steps), ("desktop", "en", steps)] + else: + spec = [("phone", "hu", [{"goto": f"https://felhom.tester4.test/apps/{slug}/guide"}, {"wait": 1500}, {"shot": "guide"}]), + ("desktop", "hu", [{"goto": f"https://{sub}.tester4.test/", "until": "load"}, {"wait": 5000}, {"shot": "front"}])] + res = [] + for size, lang, st in spec: + env = dict(os.environ, UI_STEPS=json.dumps({"size": size, "lang": lang, "state": "/root/work/state-dash.json", + "out": out, "steps": st})) + r = subprocess.run(["bash", os.path.join(os.path.dirname(os.path.abspath(__file__)), "brun.sh"), "--env", "UI_STEPS", "--", + "/opt/pw/bin/python", "/root/work/ui.py", "-"], capture_output=True, text=True, timeout=240, env=env) + res.append(" | ".join(l[:160] for l in (r.stdout or r.stderr).splitlines() if l.startswith(("goto", "shot", "STEP")))[:400]) + pull = subprocess.run(["bash", os.path.join(os.path.dirname(os.path.abspath(__file__)), "brpull.sh"), os.path.join(d, "screens")], + capture_output=True, text=True, timeout=120) + return res + + +def front(sub, scheme="https", cookie=None): + a = ["curl", "-sk", "--max-time", "20", "-o", "/dev/null", "-w", "%{http_code} %{redirect_url}", + "-H", "Accept: text/html", "-H", f"Host: {sub}.{w.DOMAIN}"] + if cookie: + a += ["-H", f"Cookie: {cookie}"] + base = w.BASE if scheme == "https" else w.BASE.replace("https://", "http://") + r = w.sh(a + [f"{base}/"]) + return (r.stdout or "").strip()[:200] + + +def backup_now(rec, say): + t0 = time.time() + c, d = w.ctl("POST", "/api/backup/run") + say(f" [4] Mentés most -> {c} {str(d)[:140]}") + last = None + for _ in range(240): + time.sleep(5) + c2, st = w.ctl("GET", "/api/backup/status") + s = (st.get("data") or {}) if isinstance(st, dict) else {} + last = s + if not s.get("running") and time.time() - t0 > 10: + break + rec["backup"] = {"code": c, "seconds": round(time.time() - t0), "status": json.dumps(last, ensure_ascii=False)[:900]} + + +def snapshots(app): + c, d = w.ctl("GET", f"/api/backup/snapshots?stack={app}") + data = d.get("data") if isinstance(d, dict) else None + if isinstance(data, dict): + for k in ("snapshots", "items", "restore_points"): + if isinstance(data.get(k), list): + return data[k] + return data if isinstance(data, list) else [] + + +def restore_unit(app, rec, say): + pts = snapshots(app) + rec["restore"] = {"points": len(pts)} + if not pts: + say(" [6] no restore point offered") + return + sid = pts[0].get("short_id") or pts[0].get("id") + sess = open(f"{w.SC}/sess{os.getpid()}.txt").read().strip() + csrf = open(f"{w.SC}/csrf{os.getpid()}.txt").read().strip() + r = w.sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", w.HOSTHDR, "-H", f"Cookie: {sess}", "-X", "POST", + "--data-urlencode", f"_csrf={csrf}", "--data-urlencode", f"stack_name={app}", + "--data-urlencode", f"snapshot_id={sid}", f"{w.BASE}/backup/restore"]) + head = (r.stdout or "").splitlines() + loc = [l for l in head if l.lower().startswith("location")] + say(f" [6] POST /backup/restore -> {head[0] if head else '?'} {loc[:1]}") + t0, last = time.time(), None + while time.time() - t0 < 1800: + time.sleep(5) + c, d = w.ctl("GET", "/api/backup/restore-status") + dd = (d.get("data") or {}) if isinstance(d, dict) else {} + last = dd + if not dd.get("running") and time.time() - t0 > 10: + break + rec["restore"].update({"location": loc[:1], "seconds": round(time.time() - t0), + "status": json.dumps(last, ensure_ascii=False)[:600], "state": w.stack(app).get("state")}) + + +def leftovers(app, sub): + out = g(f"echo containers: $(docker ps -a --filter label=com.docker.compose.project={app} --format '{{{{.Names}}}}'); " + f"echo volumes: $(docker volume ls -q --filter label=com.docker.compose.project={app}); " + f"echo appyaml: $(ls /opt/docker/stacks/{app}/app.yaml 2>/dev/null); " + f"echo appdata: $(ls -d /mnt/felhom-drives/*/appdata/{app} 2>/dev/null); " + f"echo kept: $(ls -d /mnt/felhom-drives/*/kept/{app} 2>/dev/null)") + res = {k.strip(): v.strip() for k, _, v in (l.partition(":") for l in out.splitlines()) if k} + res["subdomain"] = front(sub) + return res + + +def remove(app, keep, say): + c1, _ = w.ctl("POST", f"/api/stacks/{app}/stop") + for _ in range(36): + time.sleep(5) + if w.stack(app).get("state") not in ("running", "unhealthy", "degraded", "starting"): + break + body = {"remove_hdd_data": not keep, "remove_backups": not keep} + c, d = w.ctl("POST", f"/api/stacks/{app}/remove", body) + say(f" [{'5' if keep else '7'}] stop {c1}, remove {'KEEPING data' if keep else 'with data'} -> {c} {str(d)[:200]}") + for _ in range(24): + time.sleep(5) + if not w.stack(app).get("deployed"): + break + return c, d + + +def fresh_verify(fx, sub, tok, say): + """Ask the gate again before every read-back: once the box opens an app's SETUP gate (the first admin exists), + a family-gated app sits behind the FAMILY gate, which answers an old setup-gate cookie with 401 (measured on + Grimmory 2026-10-24, „setup gate OPENED by probe" 20:23:32).""" + w.GATE.pop(sub, None) + return fx.verify(w, sub, tok, say) + + +def run(app, do_restore=False): + d = os.path.join(EV, app) + os.makedirs(d, exist_ok=True) + log = open(os.path.join(d, "walk.log"), "a") + + def say(*a): + line = time.strftime("%H:%M:%SZ", time.gmtime()) + " " + " ".join(str(x) for x in a) + print(line, flush=True) + log.write(scrub(line) + "\n") + log.flush() + + w.say = lambda *a: say(*a) # the helper's own lines into this app's log + fx = fxm.FIXTURES.get(app) + sub = getattr(fx, "sub", app) if fx else app + rec = {"app": app, "sub": sub, "fixture": type(fx).__name__ if fx else None, "started": time.strftime("%FT%TZ", time.gmtime())} + w.login() + t0 = time.time() + mw = MemWatch(app) + try: + # 1. install + df = w.ctl("GET", f"/api/stacks/{app}/deploy-fields")[1] + meta = ((df.get("data") or {}).get("metadata") or {}) if isinstance(df, dict) else {} + rec["deploy_fields"] = [(f.get("env_var"), f.get("type"), bool(f.get("required"))) for f in meta.get("deploy_fields") or []] + rec["install_page"] = texts(app, "install", d) + rec["shots_install"] = shots(app, sub, "install", d) + mw.start() + t0 = time.time() + ok = w.deploy(app, sub) + rec["install"] = {"ok": ok, "seconds_to_deployed": round(time.time() - t0)} + if not ok: + rec["verdict_hint"] = "install failed" + return rec + t1 = time.time() + rec["install"]["front_door"] = w.wait_app(sub, "/", want=("200", "301", "302", "303", "307", "308", "401", "403"), tries=90, delay=5) + rec["install"]["seconds_to_front_door"] = round(time.time() - t0) + say(f" [1] installed: deployed {rec['install']['seconds_to_deployed']} s, front door {rec['install']['seconds_to_front_door']} s") + # 2. first login / gate, the household and a stranger; https only + rec["stranger"] = front(sub) + rec["http_port_80"] = front(sub, scheme="http") + rec["guide"] = texts(app, "guide", d) + rec["overview"] = texts(app, "", d) + # 3. use: one item through the front door + tok = None + if fx: + try: + tok = fx.seed(w, sub, say) + except Exception as e: # a fixture crash is a recorded result + say(f" [3] seed raised {type(e).__name__}: {str(e)[:200]}") + rec["seed"] = bool(tok) + if tok: + rec["seed_read_now"] = bool(fresh_verify(fx, sub, tok, say)) + else: + rec["seed"] = None + say(" [3] no fixture for this app — the front door answering is the smallest honest check") + rec["shots_after"] = shots(app, sub, "after", d) # after the seed: a visit must not close a sign-up first + # 4. Mentés most + backup_now(rec, say) + rec["snapshots_after_backup"] = len(snapshots(app)) + # 6. restore from the recovery unit (every fifth app) + if do_restore: + restore_unit(app, rec, say) + if tok: + rec["seed_read_after_restore"] = bool(fresh_verify(fx, sub, tok, say)) + # 5. remove keeping data, install again + remove(app, keep=True, say=say) + rec["after_keep_remove"] = leftovers(app, sub) + os.environ.pop("KEPT", None) + again = w.ctl("POST", f"/api/stacks/{app}/deploy", + {"values": dict(w.deploy_values(app, sub, dict(w.GENERATED.get(app) or {})))}) + rec["reinstall_first_answer"] = {"code": again[0], "body": scrub(json.dumps(again[1], ensure_ascii=False))[:700]} + if again[0] == "409": + os.environ["KEPT"] = "use" + w.DEPLOYED_THIS_RUN.discard(app) + ok2 = w.deploy(app, sub, dict(w.GENERATED.get(app) or {})) + os.environ.pop("KEPT", None) + rec["kept"] = {"offered": True, "use_ok": ok2} + else: + rec["kept"] = {"offered": False, "plain_install_code": again[0]} + if again[0] == "202": + for _ in range(90): + time.sleep(5) + st = w.stack(app) + if st.get("deployed") and (st.get("app_config") or {}).get("pinned_images"): + break + w.wait_app(sub, "/", want=("200", "301", "302", "303", "307", "308", "401", "403"), tries=90, delay=5) + if tok: + rec["seed_read_after_reinstall"] = bool(fresh_verify(fx, sub, tok, say)) + if not rec["seed_read_after_reinstall"] and not rec["kept"]["offered"]: + # the household's other route back: the recovery unit kept by „keep my data" + restore_unit(app, rec, say) + rec["seed_read_after_unit_restore"] = bool(fresh_verify(fx, sub, tok, say)) + # 8. measured while it ran + rec["containers"] = limits(app) + rec["errors"] = error_lines(app, t0 - 5) + except Exception as e: + say(f" !! the cycle raised {type(e).__name__}: {str(e)[:300]}") + rec["exception"] = f"{type(e).__name__}: {str(e)[:300]}" + finally: + mw.stop_ev.set() + rec["mem_peak_mib"] = mw.peak + rec["mem_anon_peak_mib"] = mw.anon + # 7. remove with data; nothing left + if w.stack(app).get("deployed"): + remove(app, keep=False, say=say) + rec["after_final_remove"] = leftovers(app, sub) + rec["total_seconds"] = round(time.time() - t0) + json.dump(rec, open(os.path.join(d, "record.json"), "w"), ensure_ascii=False, indent=1) + say(f" == {app} done in {rec['total_seconds']} s") + return rec + + +if __name__ == "__main__": + run(sys.argv[1], "--restore" in sys.argv) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/sweep_fixtures.py b/documentation/audits/catalog-sweep-2026-10-24/tools/sweep_fixtures.py new file mode 100644 index 00000000..6f811394 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/sweep_fixtures.py @@ -0,0 +1,222 @@ +"""sweep_fixtures.py — seed/read-back fixtures written for the catalog sweep of 2026-10-24, for apps the catalog's +upgrade_fixtures_box.py does not cover. Same rule (R-156): everything goes in through the app's own API at its front +door (traefik, the household's setup gate passed); verify() asks the app, with a negative control where one exists. +Not in the catalog yet — candidates for upgrade_fixtures_box.py once they have run on more than one box.""" +import json, re, secrets + + +def _j(w, sub, path, body=None, method=None, headers=()): + args = ["-H", "Content-Type: application/json"] + for h in headers: + args += ["-H", h] + rc, code, out = w.app_curl(sub, path, *args, method=method or ("POST" if body is not None else None), + data=json.dumps(body) if body is not None else None) + try: + return code, json.loads(out) + except Exception: + return code, out + + +class Homebox: + """Homebox: the first account through /api/v1/users/register, a location named by a marker, read back by name.""" + sub = "homebox" + + def _login(self, w, sub, email, pw): + rc, code, out = w.app_curl(sub, "/api/v1/users/login", "--data-urlencode", f"username={email}", + "--data-urlencode", f"password={pw}", method="POST") + try: + return code, json.loads(out).get("token", "") + except Exception: + return code, "" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200",), tries=72): + return None + email, pw, mark = f"sweep-{secrets.token_hex(3)}@sweep.invalid", "Sweep-" + secrets.token_hex(8), "loc-" + secrets.token_hex(5) + code, out = _j(w, sub, "/api/v1/users/register", {"name": "Sweep", "email": email, "password": pw}) + say(f" homebox: register http={code}") + code, tok = self._login(w, sub, email, pw) + if not tok: + say(f" homebox: login http={code}, no token") + return None + for path in ("/api/v1/locations", "/api/v1/entities"): # 0.26 moved items and locations to /entities + code, out = _j(w, sub, path, {"name": mark, "description": "catalog sweep"}, headers=[f"Authorization: {tok}"]) + say(f" homebox: create on {path} http={code}") + if code in ("200", "201"): + return {"email": email, "pw": pw, "mark": mark, "path": path} + return None + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200",), tries=72): + return False + code, tok = self._login(w, sub, t["email"], t["pw"]) + if not tok: + say(f" homebox: login as the seeded account http={code} — no token") + return False + code, out = _j(w, sub, t.get("path", "/api/v1/locations") + "?pageSize=500", headers=[f"Authorization: {tok}"]) + rows = out if isinstance(out, list) else (out.get("items") or []) if isinstance(out, dict) else [] + names = [x.get("name") for x in rows if isinstance(x, dict)] + ok = t["mark"] in names and ("loc-absent-" + secrets.token_hex(3)) not in names + say(f" homebox: list http={code} rows={len(names)} marker_present={t['mark'] in names}") + return ok + + +class Immich: + """Immich: the admin sign-up, an album named by a marker, read back through the album list.""" + sub = "immich" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/server/ping", want=("200",), tries=120): + return None + email, pw, mark = f"sweep-{secrets.token_hex(3)}@sweep.invalid", "Sweep-" + secrets.token_hex(8), "album-" + secrets.token_hex(5) + code, out = _j(w, sub, "/api/auth/admin-sign-up", {"email": email, "password": pw, "name": "Sweep"}) + say(f" immich: admin sign-up http={code}") + tok = self._token(w, sub, email, pw) + if not tok: + return None + code, out = _j(w, sub, "/api/albums", {"albumName": mark}, headers=[f"Authorization: Bearer {tok}"]) + say(f" immich: album create http={code}") + return {"email": email, "pw": pw, "mark": mark} if code in ("200", "201") else None + + def _token(self, w, sub, email, pw): + code, out = _j(w, sub, "/api/auth/login", {"email": email, "password": pw}) + return out.get("accessToken", "") if isinstance(out, dict) else "" + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/server/ping", want=("200",), tries=120): + return False + if self._token(w, sub, t["email"], "wrong-" + secrets.token_hex(4)): + say(" immich: READBACK UNUSABLE — a wrong password logged in") + return False + tok = self._token(w, sub, t["email"], t["pw"]) + if not tok: + say(" immich: login as the seeded admin failed") + return False + code, out = _j(w, sub, "/api/albums", headers=[f"Authorization: Bearer {tok}"]) + names = [a.get("albumName") for a in out] if isinstance(out, list) else [] + say(f" immich: albums http={code} marker_present={t['mark'] in names}") + return t["mark"] in names + + +class Komga: + """Komga: the first account through its own claim endpoint; read back by signing in (a wrong password must fail).""" + sub = "komga" + + def _me(self, w, sub, email, pw): + rc, code, out = w.app_curl(sub, "/api/v2/users/me", "-u", f"{email}:{pw}") + return code + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200",), tries=90): + return None + email, pw = f"sweep-{secrets.token_hex(3)}@sweep.invalid", "Sweep-" + secrets.token_hex(8) + rc, code, out = w.app_curl(sub, "/api/v1/claim", "-H", f"X-Komga-Email: {email}", "-H", f"X-Komga-Password: {pw}", method="POST") + say(f" komga: claim http={code}") + return {"email": email, "pw": pw} if code in ("200", "201") else None + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200",), tries=90): + return False + bad = self._me(w, sub, t["email"], "wrong-" + secrets.token_hex(4)) + good = self._me(w, sub, t["email"], t["pw"]) + say(f" komga: me wrong-pw http={bad}, right-pw http={good}") + return good == "200" and bad != "200" + + +class Jellyfin: + """Jellyfin: its own startup wizard API makes the first user; read back by AuthenticateByName.""" + sub = "jellyfin" + AUTH = 'Authorization: MediaBrowser Client="sweep", Device="sweep", DeviceId="sweep-1024", Version="1.0"' + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/health", want=("200",), tries=120): + return None + user, pw = "sweep" + secrets.token_hex(3), "Sweep-" + secrets.token_hex(8) + for path, body in (("/Startup/Configuration", {"UICulture": "hu-HU", "MetadataCountryCode": "HU", "PreferredMetadataLanguage": "hu"}),): + code, _ = _j(w, sub, path, body, headers=[self.AUTH]) + say(f" jellyfin: {path} http={code}") + _j(w, sub, "/Startup/User", headers=[self.AUTH]) + code, _ = _j(w, sub, "/Startup/User", {"Name": user, "Password": pw}, headers=[self.AUTH]) + say(f" jellyfin: /Startup/User http={code}") + _j(w, sub, "/Startup/RemoteAccess", {"EnableRemoteAccess": True, "EnableAutomaticPortMapping": False}, headers=[self.AUTH]) + code, _ = _j(w, sub, "/Startup/Complete", {}, headers=[self.AUTH]) + say(f" jellyfin: /Startup/Complete http={code}") + return {"user": user, "pw": pw} if self._auth(w, sub, user, pw) else None + + def _auth(self, w, sub, user, pw): + code, out = _j(w, sub, "/Users/AuthenticateByName", {"Username": user, "Pw": pw}, headers=[self.AUTH]) + return code == "200" and isinstance(out, dict) and bool(out.get("AccessToken")) + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/health", want=("200",), tries=120): + return False + bad, good = self._auth(w, sub, t["user"], "wrong-" + secrets.token_hex(4)), self._auth(w, sub, t["user"], t["pw"]) + say(f" jellyfin: sign-in wrong-pw ok={bad}, right-pw ok={good}") + return good and not bad + + +class Ghost: + """Ghost: the owner through /ghost/api/admin/authentication/setup; read back by an admin session sign-in.""" + sub = "ghost" + + def _origin(self, w, sub): + return f"Origin: https://{sub}.{w.DOMAIN}" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/ghost/api/admin/site/", want=("200",), tries=120): + return None + email, pw = f"sweep-{secrets.token_hex(3)}@sweep.invalid", "Sweep-" + secrets.token_hex(10) + code, out = _j(w, sub, "/ghost/api/admin/authentication/setup/", + {"setup": [{"name": "Sweep", "email": email, "password": pw, "blogTitle": "Sweep"}]}, headers=[self._origin(w, sub)]) + say(f" ghost: setup http={code}") + return {"email": email, "pw": pw} if code in ("200", "201") else None + + def _session(self, w, sub, email, pw): + code, _ = _j(w, sub, "/ghost/api/admin/session/", {"username": email, "password": pw}, headers=[self._origin(w, sub)]) + return code + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/ghost/api/admin/site/", want=("200",), tries=120): + return False + bad, good = self._session(w, sub, t["email"], "wrong-" + secrets.token_hex(5)), self._session(w, sub, t["email"], t["pw"]) + say(f" ghost: session wrong-pw http={bad}, right-pw http={good}") + return good in ("200", "201") and bad not in ("200", "201") + + +class Arr: + """Radarr / Sonarr: the API key the app hands its own web page (initialize.json), a tag named by a marker.""" + + def __init__(self, sub): + self.sub = sub + + def _key(self, w, sub, say): + for p in ("/initialize.json", "/initialize.js"): + rc, code, out = w.app_curl(sub, p) + m = re.search(r'"?apiKey"?\s*[:=]\s*["\']([0-9a-f]{32})', out or "") + if m: + return m.group(1) + say(f" {sub}: no API key on initialize.json/js (http={code})") + return "" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/ping", want=("200",), tries=90): + return None + key, mark = self._key(w, sub, say), "sweep" + secrets.token_hex(4) + if not key: + return None + code, out = _j(w, sub, "/api/v3/tag", {"label": mark}, headers=[f"X-Api-Key: {key}"]) + say(f" {sub}: tag create http={code}") + return {"mark": mark} if code in ("200", "201") else None + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/ping", want=("200",), tries=90): + return False + key = self._key(w, sub, say) + code, out = _j(w, sub, "/api/v3/tag", headers=[f"X-Api-Key: {key}"]) if key else ("-", []) + labels = [x.get("label") for x in out] if isinstance(out, list) else [] + say(f" {sub}: tags http={code} marker_present={t['mark'] in labels}") + return t["mark"] in labels and ("absent" + secrets.token_hex(3)) not in labels + + +SWEEP_FIXTURES = {"homebox": Homebox(), "immich": Immich(), "komga": Komga(), "jellyfin": Jellyfin(), + "ghost": Ghost(), "radarr": Arr("radarr"), "sonarr": Arr("sonarr")} diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/table.py b/documentation/audits/catalog-sweep-2026-10-24/tools/table.py new file mode 100644 index 00000000..8ec299f5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/table.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""table.py — the README's 65-row table: the measured facts from each /record.json, and the VERDICT set by hand +after reading that app's evidence (VERDICTS below — the reviewer's call, not the summarize.py hint).""" +import json, os, sys + +EV = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +W, P, B, N, T = "works", "works with a problem", "broken", "not installed", "not testable on this box" + +# app: (verdict, one line, row/fix) +VERDICTS = { + "actualbudget": (W, "the seeded item back after the restore", ""), + "adventurelog": (P, "works; but the keep-backups → reinstall → restore path breaks it (DB password from the new install over the old data) — reproduced in its re-run", "R-1269, R-1270"), + "audiobookshelf": (W, "the seeded item back after the restore", "drive names: R-1275"), + "bentopdf": (W, "stateless (nothing to keep); installs, answers, removes clean", ""), + "bookstack": (W, "the seeded item back after the restore", ""), + "calcom": (W, "the seeded item back after the restore; 2 start-up messages of the image itself", ""), + "calibre-web": (W, "the book (its own upload) is listed again after the keep-data reinstall; the fixture's download check gets 401 (its sign-in for /download, not the app); the admin name is the box's generated one (re-run 2)", "R-1277"), + "claper": (W, "the seeded item back after the restore", ""), + "code-server": (W, "first install refused by the registry's rate limit, told as „exit code 1”; the re-run installed and worked (no seed: the editor has no API)", "R-1273"), + "crafty-controller": (W, "the seeded item back after the restore", ""), + "dawarich": (W, "the seeded item back after the restore (every-5th: restore also before the reinstall)", ""), + "docmost": (W, "the seeded item back after the restore", ""), + "emby": (W, "installs, answers, removes clean; no seed (no fixture for its wizard)", ""), + "ghost": (W, "the seeded item back after the restore", ""), + "gitea": (W, "the seeded item back after the restore", ""), + "glance": (W, "family gate holds a stranger; config-only (nothing to keep); the app's own headings are English", ""), + "gokapi": (W, "installs, own login, removes clean; no seed (API key only in its UI)", ""), + "grafana": (W, "the seeded item back after the restore", ""), + "gramps-web": (W, "installs, answers, removes clean; no seed fixture", ""), + "grimmory": (P, "first admin, library and an EPUB upload work; setup gate then family gate work as designed; the read-back through the family gate stayed inconclusive (the harness's gate logic, R-1277); remove-with-data leaves the empty parent folder", "R-1276, R-1277"), + "grocy": (W, "the seeded item back after the restore", ""), + "home-assistant": (W, "the seeded item back after the restore", ""), + "homebox": (W, "the seeded item back after the restore", ""), + "homepage": (P, "no gate at all: a stranger sees the box's CPU/RAM/disk (and later the family's links); still the upstream sample page", "R-1272"), + "immich": (P, "album (new fixture) in; „use my kept data” loaded the rehearsal's future-dated database and Immich never answered again (404, 20 min)", "R-1271"), + "jellyfin": (W, "first user (new fixture, its wizard API) back after the restore", ""), + "karakeep": (W, "the seeded item back after the restore", ""), + "kimai": (W, "own login; a Hungarian browser lands on /hu/ (curl without a language gets /en/)", ""), + "komga": (W, "the seeded item back after the restore", "drive names: R-1275"), + "lubelogger": (W, "the seeded item back after the restore", ""), + "mealie": (W, "the seeded item back after the restore (the fixture raced after_install on the first run)", ""), + "metube": (W, "family gate holds a stranger; download queue entry back", ""), + "n8n": (P, "the owner back after the restore; on the live template it tries to send usage data out ([Rudder] lines, 6 in the live re-run) — the drill fix: the variable in the running container, 0 error lines", "drill a601950 (morning list)"), + "navidrome": (W, "the seeded item back after the restore", "drive names: R-1275"), + "nextcloud": (P, "user in; „use my kept data” loaded the rehearsal's future-dated database beside today's files — the user was not there", "R-1271"), + "nzbget": (W, "the seeded item back after the restore; „no news server” until the family adds one (the guide says so)", ""), + "onlyoffice": (W, "document server (no household data to keep); installs, answers, removes clean (every-5th restore)", ""), + "opengist": (P, "the gist owner back after the restore; but 128M is too small: one sign-up + sign-in hit the limit 443 times and swapped 98 MiB (memprobe-128M.txt); at 256M (drill) anon 216 MiB", "drill 405077f (morning list)"), + "outline": (W, "the seeded item back after the restore", ""), + "paperless-ngx": (P, "account in; „use my kept data” loaded the rehearsal's future-dated database — the account was not there", "R-1271, R-1276"), + "papra": (W, "the seeded item back after the restore (Papra 26.6 needs an Origin header — a browser sends it)", ""), + "plant-it": (N, "lifecycle: abandoned — not offered for a new install (by design)", ""), + "plex": (W, "installs, answers, removes clean; no seed (a server is claimed with a plex.tv account)", ""), + "privatebin": (W, "the seeded item back after the restore; D22 put-back PASS", ""), + "prowlarr": (W, "the seeded item back after the restore", ""), + "qbittorrent": (W, "the seeded item back after the restore", ""), + "radarr": (W, "the seeded item back after the restore", ""), + "radicale": (W, "the seeded item back after the restore", ""), + "rallly": (W, "installs, answers, removes clean; no seed: Rallly 4.15 closed password sign-up (login by e-mail code); the guide's polls need no account", "R-1277"), + "recipe-importer": (W, "stateless helper; installs, answers, removes clean (every-5th restore)", ""), + "romm": (P, "item back through „use my kept data” (its own copy); remove-with-data left the empty parent folder", "R-1276"), + "sabnzbd": (W, "the seeded item back after the restore", ""), + "seerr": (W, "installs, answers (307 to its setup), removes clean; no seed (needs a media server)", ""), + "sonarr": (W, "the seeded item back after the restore", ""), + "sparkyfitness": (W, "the seeded item back after the restore", ""), + "tandoor": (P, "works; but the keep-backups → reinstall → restore path breaks it (DB password from the new install over the old data), and the restore still said success — reproduced on its own", "R-1269, R-1270"), + "termix": (W, "installs, answers, removes clean (every-5th restore); no seed fixture", ""), + "transmission": (W, "the seeded item back after the restore", ""), + "uptime-kuma": (W, "the seeded item back after the restore", ""), + "vaultwarden": (W, "installs in 25 s, its own login page, sign-up closed (404); the box admin's invite works (run-live-2), but 1.37.4 has no route for the fixture's invited sign-up, so no item was seeded", "R-1277"), + "vikunja": (W, "the seeded item back after the restore; D22 put-back PASS", ""), + "wanderer": (T, "not testable on this box: its web part calls its database at the PUBLIC name, which tester4.test cannot resolve (known, R-739) — unhealthy, 404", "R-739"), + "wger": (N, "lifecycle: hidden — not offered for a new install (by design)", ""), + "wishlist": (W, "the seeded item back after the restore", ""), + "zipline": (W, "the seeded item back after the restore", ""), +} + + +def mem(r): + anon = r.get("mem_anon_peak_mib") or {} + src = anon if anon else (r.get("mem_peak_mib") or {}) + lim = sum((c.get("limit_mib") or 0) for c in (r.get("containers") or {}).values()) + return f"{round(sum(src.values()))}{'' if anon else '*'} / {lim}" if src else "–" + + +def main(): + rows = ["| App | Verdict | Peak memory / limit (MiB) | Install → answering (s) | What we saw | Row / fix |", "|---|---|---|---|---|---|"] + for app in sorted(VERDICTS): + v, line, ref = VERDICTS[app] + f = os.path.join(EV, app, "record.json") + r = json.load(open(f)) if os.path.exists(f) else {} + inst = (r.get("install") or {}).get("seconds_to_front_door") + rows.append(f"| {app} | **{v or 'PENDING'}** | {mem(r) if r else '–'} | {inst if inst is not None else '–'} | {line} | {ref} |") + c = {} + for v, _, _ in VERDICTS.values(): + c[v or "PENDING"] = c.get(v or "PENDING", 0) + 1 + rows.append("\n" + ", ".join(f"{k}: {n}" for k, n in c.items()) + f" (of {len(VERDICTS)})") + out = "\n".join(rows) + if "--write" in sys.argv: # replace the block between the markers in ../README.md + p = os.path.join(EV, "README.md") + s = open(p).read() + a, b = s.index("") + len(""), s.index("") + open(p, "w").write(s[:a] + "\n" + out + "\n" + s[b:]) + print(out) + + +if __name__ == "__main__": + main() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/ui.py b/documentation/audits/catalog-sweep-2026-10-24/tools/ui.py new file mode 100644 index 00000000..878d216f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/ui.py @@ -0,0 +1,118 @@ +#!/opt/pw/bin/python +"""ui.py — drive the household's screens in real Chromium, step by step (rehearsal 2026-10-20). + +usage: ui.py STEPS.json (STEPS may also be '-' to read JSON from the env var UI_STEPS) +STEPS = {"size": "phone"|"desktop", "lang": "hu"|"en", "state": "/root/work/state-dash.json" (load+save cookies), + "out": "/root/shots/", "steps": [ ... ]} +step kinds: + {"goto": URL} {"click": SELECTOR} / {"click_text": TEXT} + {"fill": SELECTOR, "env": NAME} — the value comes from env NAME (never printed) + {"fill": SELECTOR, "value": TEXT} — a non-secret value + {"fill": SELECTOR, "env": NAME, "typo": true} — one letter changed (a household's typo) + {"shot": NAME} — blanks every text/password/textarea input first, then screenshots full page + {"wait": MS} {"text": true} + {"wait_for": SELECTOR, "timeout": MS} {"fill_all": SELECTOR, "env": NAME} — every enabled match gets the secret + {"select": SELECTOR, "option": VALUE} — prints the visible page text (trimmed) + {"expect_nav": true} before a click — waits for the navigation the click causes +Every step prints one line: what it did, the URL (any 32+ hex run masked), the HTTP status of navigations. +""" +import json, os, re, sys +from playwright.sync_api import sync_playwright + +spec = json.loads(os.environ["UI_STEPS"]) if sys.argv[1] == "-" else json.load(open(sys.argv[1])) +SIZES = {"phone": dict(viewport={"width": 390, "height": 844}, device_scale_factor=2, is_mobile=True, has_touch=True, + user_agent="Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/155.0.0.0 Mobile Safari/537.36"), + "desktop": dict(viewport={"width": 1366, "height": 768})} +LOC = {"hu": "hu-HU", "en": "en-US"} +mask = lambda u: re.sub(r"[0-9a-f]{32,}", "", u) +size, lang = spec.get("size", "phone"), spec.get("lang", "hu") +out = spec.get("out", "/root/shots/x") + + +def typo(v): + i = len(v) // 2 + while i < len(v) and not v[i].isalpha(): + i += 1 + return v[:i] + ("q" if v[i] != "q" else "w") + v[i + 1:] if i < len(v) else v + "x" + + +with sync_playwright() as p: + b = p.chromium.launch(executable_path="/usr/bin/chromium", args=["--no-sandbox"]) + kw = dict(locale=LOC[lang], extra_http_headers={"Accept-Language": LOC[lang]}, timezone_id="Europe/Budapest", + ignore_https_errors=True, **SIZES[size]) + st = spec.get("state") + if st and os.path.exists(st): + kw["storage_state"] = st + ctx = b.new_context(**kw) + pg = ctx.new_page() + resp = {"s": None} + pg.on("response", lambda r: resp.update(s=r.status) if r.request.is_navigation_request() else None) + nav_next = False + for s in spec["steps"]: + try: + if "goto" in s: + r = pg.goto(s["goto"], wait_until=s.get("until", "networkidle"), timeout=60000) + title = "" + for _ in range(5): # an app that redirects right after load destroys the context mid-title (sweep 2026-10-24) + try: + pg.wait_for_load_state("load", timeout=15000) + title = pg.title() + break + except Exception: + pg.wait_for_timeout(1500) + print(f"goto {mask(pg.url)} -> {r.status if r else '-'} {title!r}") + elif "fill" in s: + v = os.environ[s["env"]] if "env" in s else s["value"] + if s.get("typo"): + v = typo(v) + pg.fill(s["fill"], v) + print(f"fill {s['fill']} ({'secret ' + s['env'] if 'env' in s else repr(v)}{', with a typo' if s.get('typo') else ''})") + elif "click" in s or "click_text" in s: + target = pg.locator(s["click"]) if "click" in s else pg.get_by_text(s["click_text"], exact=False) + if nav_next: + with pg.expect_navigation(wait_until="networkidle", timeout=60000): + target.first.click() + nav_next = False + else: + target.first.click() + try: + pg.wait_for_load_state("networkidle", timeout=15000) + except Exception: # an app that keeps a live connection never goes idle — not a failure + pass + print(f"click {s.get('click') or s.get('click_text')!r} -> {mask(pg.url)} status={resp['s']}") + elif "expect_nav" in s: + nav_next = True + elif "wait_for" in s: + pg.wait_for_selector(s["wait_for"], state="visible", timeout=s.get("timeout", 600000)) + print(f"visible {s['wait_for']}") + elif "fill_all" in s: + n = 0 + for el in pg.locator(s["fill_all"]).all(): + if el.is_enabled(): + el.fill(os.environ[s["env"]]); n += 1 + print(f"fill_all {s['fill_all']} ({n} fields, secret {s['env']})") + elif "select" in s: + pg.select_option(s["select"], s["option"]) + print(f"select {s['select']} = {s['option']!r}") + elif "wait" in s: + pg.wait_for_timeout(s["wait"]) + elif "shot" in s: + # blank every text/password field FOR THE PHOTO ONLY, then put the values back (a blanked form that is + # submitted afterwards refuses — the 2026-10-20 Nextcloud slip) + pg.evaluate("window.__keep = []; document.querySelectorAll('input[type=text],input[type=password],input:not([type]),textarea')" + ".forEach(e => { if (e.value) { window.__keep.push([e, e.value]); e.value = ''; } })") + f = f"{out}-{s['shot']}-{size}-{lang}.png" + pg.screenshot(path=f, full_page=True) + pg.evaluate("(window.__keep || []).forEach(([e, v]) => { e.value = v; }); window.__keep = [];") + hs = pg.evaluate("document.documentElement.scrollWidth > window.innerWidth") + print(f"shot {f} hscroll={hs}") + elif "text" in s: + print("text:", re.sub(r"\s+", " ", pg.inner_text("body"))[:1500]) + except Exception as e: # noqa: BLE001 — a failing step is a result; record it and stop + print(f"STEP FAILED {s}: {type(e).__name__}: {str(e)[:300]}") + break + if st: + ctx.storage_state(path=st) + os.chmod(st, 0o600) + b.close() diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/unitprobe.py b/documentation/audits/catalog-sweep-2026-10-24/tools/unitprobe.py new file mode 100644 index 00000000..d4cc709d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/unitprobe.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +"""unitprobe.py — F10 of the sweep: does a reinstall's own capture rewrite the unit a „keep backups" remove kept? + +The household's order, endpoint-level: install, one item, „Mentés most", remove KEEPING data and backups, install the +app again (a fresh install — no kept-data question for a volume app), WAIT for the controller's next capture of the +new install, then „Visszaállítás" of the kept unit. Observed without reading any secret: the unit's manifest (its data +time, its definition checksums) before the reinstall and after the capture, the controller's own lines, the app's state +and its database log after the restore, and the item through the front door. + +usage: SC=… SWEEP_EV=… DRIVE_ROOT=… python3 unitprobe.py (evidence: /_unitprobe//) +""" +import json, os, sys, time + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import sweep as sw # noqa: E402 + +w, fxm = sw.w, sw.fxm +UNIT = "/mnt/sys_drive/felhom-data/backups/primary/{app}" + + +def manifest(app): + out = sw.g(f"cd {UNIT.format(app=app)} 2>/dev/null && ls -la --time-style=+%FT%T . volume-dumps db-dumps 2>/dev/null; " + f"for f in manifest.json recovery.json unit.json; do [ -f $f ] && echo \"== $f\" && cat $f; done") + return out + + +def main(app): + d = os.path.join(sw.EV, "_unitprobe", app) + os.makedirs(d, exist_ok=True) + log = open(os.path.join(d, "walk.log"), "a") + + def say(*a): + line = time.strftime("%H:%M:%SZ", time.gmtime()) + " " + " ".join(str(x) for x in a) + print(line, flush=True) + log.write(sw.scrub(line) + "\n") + log.flush() + + w.say = say + fx = fxm.FIXTURES[app] + sub = getattr(fx, "sub", app) + rec = {"app": app} + w.login() + try: + rec["install"] = w.deploy(app, sub) and w.wait_app(sub, "/", tries=90, delay=5) + tok = fx.seed(w, sub, say) + rec["seed"] = bool(tok) + sw.backup_now(rec, say) + open(os.path.join(d, "unit-1-after-backup.txt"), "w").write(sw.scrub(manifest(app))) + sw.remove(app, keep=True, say=say) + open(os.path.join(d, "unit-2-after-keep-remove.txt"), "w").write(sw.scrub(manifest(app))) + t_re = time.time() + rec["reinstall"] = w.deploy(app, sub, dict(w.GENERATED.get(app) or {})) + # wait for the controller's next capture of the NEW install (the line it logs), at most 10 minutes + captured = "" + for _ in range(60): + time.sleep(10) + captured = sw.g(f"docker logs --since {int(t_re)} felhom-controller 2>&1 | grep 'Recovery unit captured for {app} '") + if captured.strip(): + break + rec["capture_after_reinstall"] = captured.strip()[:300] + say(" capture after the reinstall: " + (captured.strip()[:200] or "NONE within 10 min")) + open(os.path.join(d, "unit-3-after-reinstall-capture.txt"), "w").write(sw.scrub(manifest(app))) + sw.restore_unit(app, rec, say) + time.sleep(20) + rec["state_after_restore"] = w.stack(app).get("state") + rec["item_after_restore"] = bool(tok) and bool(fx.verify(w, sub, tok, say)) + rec["db_auth_errors_after_restore"] = sw.g( + f"for c in $(docker ps -a --filter label=com.docker.compose.project={app} --format '{{{{.Names}}}}'); do " + f"docker logs --since 5m $c 2>&1 | grep -ciE 'password authentication failed|access denied for user' | sed \"s/^/$c: /\"; done").strip() + rec["controller_restore_lines"] = sw.scrub(sw.g( + f"docker logs --since {int(t_re)} felhom-controller 2>&1 | grep -E '{app}' | grep -iE 'restor|captured|health|come from the backup' | cut -c1-240")) + say(" state after restore: %s, item: %s, db auth errors: %s" % (rec["state_after_restore"], rec["item_after_restore"], + rec["db_auth_errors_after_restore"])) + finally: + sw.remove(app, keep=False, say=say) + rec["after_remove"] = sw.leftovers(app, sub) + json.dump(rec, open(os.path.join(d, "record.json"), "w"), ensure_ascii=False, indent=1) + + +if __name__ == "__main__": + main(sys.argv[1]) diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/upgrade_fixtures_box.py b/documentation/audits/catalog-sweep-2026-10-24/tools/upgrade_fixtures_box.py new file mode 100644 index 00000000..073660c1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/upgrade_fixtures_box.py @@ -0,0 +1,3148 @@ +# PORTED 2026-09-23 (night shift, R-462) VERBATIM from felhom.eu/documentation/audits/update-night-2026-09-21/ +# fixtures.py (as carried forward in night-2026-09-23/). The box walk and the test bench now read the +# SAME seed/verify code; upgrade_boxport.py adapts it to the bench. Edit here, not in the audit copy. +#!/usr/bin/env python3 +"""Box-side seed/verify fixtures for walk.py, guest 9202. + +THE ONE RULE (R-156), carried verbatim from `app-catalog-felhom.eu/scripts/upgrade_fixtures.py`: +*nothing is ever seeded into a volume by hand.* Every seed here goes in through the app's OWN +interface — its HTTP API through the household's real front door (traefik, `Host: .`), +or its own CLI running inside its own container. A raw SQL INSERT or a planted file is never used. + +If an app has no non-browser route, its fixture returns None and the edge is recorded +`inconclusive — no non-browser seed route`, WITH WHAT WAS TRIED. That is a result, not a gap. + +Each fixture: + seed(w, sub, say) -> an opaque token, or None + verify(w, sub, tok, say) -> True / False +verify() must ask the APP, never the filesystem: a migration is supposed to rewrite files. +Where a fixture can prove itself (a negative control that must read as absent) it does so on EVERY +call, so a readback that has broken into always saying "found" fails instead of passing everything. +""" +import base64, json, os, re, secrets, time + + +def _gx(w, container, *cmd, timeout=240): + """Run a command inside the app's OWN container on 9202 (its own CLI, not our SQL).""" + import shlex + line = " ".join(shlex.quote(c) for c in cmd) + return w.guest(f"docker exec {container} {line} 2>&1", timeout=timeout) + + + +class QBittorrentBox: + """qBittorrent through traefik: a category and a torrent go in with the household's own + generated password, and the same API is asked for them back after the update. The negative + control is a category name nobody created - if the readback has broken into always saying + "found", that is what catches it.""" + sub = "torrent" + + def _pw(self, w): + return (w.GENERATED.get("qbittorrent") or {}).get("QBT_ADMIN_PASSWORD", "") + + def _sid(self, w, sub, say): + pw = self._pw(w) + if not pw: + say(" qbittorrent: this run holds no generated password for the app") + return "" + hdr = "/tmp/qbt-box-hdr.txt" + w.sh(["curl", "-sSk", "--max-time", "25", "-H", f"Host: {sub}.{w.DOMAIN}", + "-H", f"Referer: https://{sub}.{w.DOMAIN}", "-D", hdr, "-o", "/dev/null", + "--data-urlencode", "username=admin", "--data-urlencode", f"password={pw}", + f"{w.BASE}/api/v2/auth/login"]) + h = (w.sh(["cat", hdr]).stdout or "") + # qBittorrent 5.x names the session cookie QBT_SID_, not SID (measured on + # 9202, 2026-10-12: "set-cookie: QBT_SID_8080=..."). Match either, and carry the whole + # name=value pair back - the name is part of the cookie. + m = re.search(r"((?:QBT_SID_[0-9]+|SID)=[A-Za-z0-9+/=._%-]+)", h) + if not m: + # say WHAT came back: a readback that fails silently is the thing this harness exists + # to avoid, and a missing cookie has several possible causes + first = " | ".join(l.strip() for l in h.splitlines()[:6] if l.strip()) + say(" qbittorrent: no session cookie in the response (%s)" % (first[:300] or "no headers at all")) + return m.group(1) if m else "" + + def _api(self, w, sub, sid, path, *extra, method=None): + args = ["curl", "-sSk", "--max-time", "40", "-H", f"Host: {sub}.{w.DOMAIN}", + "-H", f"Referer: https://{sub}.{w.DOMAIN}", "-H", f"Cookie: {sid}", + "-w", "\n%{http_code}"] + if method: + args += ["-X", method] + args += list(extra) + [f"{w.BASE}{path}"] + r = w.sh(args) + body, _, code = (r.stdout or "").rpartition("\n") + return code.strip(), body + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "401", "403")): + return None + sid = self._sid(w, sub, say) + if not sid: + return None + cat = "felhom" + secrets.token_hex(4) + code, out = self._api(w, sub, sid, "/api/v2/torrents/createCategory", + "--data-urlencode", f"category={cat}", method="POST") + say(f" qbittorrent: createCategory {cat} http={code}") + if code != "200": + say(f" qbittorrent: refused {out[:160]}") + return None + magnet = ("magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c" + "&dn=Big+Buck+Bunny") + code, out = self._api(w, sub, sid, "/api/v2/torrents/add", + "-F", f"urls={magnet}", "-F", f"category={cat}", method="POST") + say(f" qbittorrent: torrents/add http={code}") + if code != "200": + return None + return {"category": cat, "hash": "dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c"} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "401", "403"), tries=36): + return False + sid = self._sid(w, sub, say) + if not sid: + return False + code, out = self._api(w, sub, sid, "/api/v2/torrents/categories") + if code != "200": + say(f" qbittorrent: categories http={code}") + return False + ghost = "felhom" + secrets.token_hex(4) + if ghost in out: + say(" qbittorrent: READBACK UNUSABLE - a category nobody created is present") + return False + if t["category"] not in out: + say(f" qbittorrent: the seeded category {t['category']} is GONE") + return False + code, out = self._api(w, sub, sid, "/api/v2/torrents/info") + ok = code == "200" and t["hash"] in out + say(f" qbittorrent: category kept, torrent present={ok}") + return ok + + +class ProwlarrBox: + """Prowlarr's own API (v1), called inside its own container with its own API key (read from its own config file + in that container — the key is the app's, never printed). Added 2026-10-15 (R-1048). A tag and an app profile go in; + the same API is asked for both back. Prowlarr is behind the setup gate on 9202, so the calls stay inside the + container rather than crossing traefik — still the app's own interface (R-156). The negative control is a tag + nobody created.""" + sub = "prowlarr" + container = "prowlarr" + + def _key(self, w, say): + for _ in range(30): + out = _gx(w, self.container, "cat", "/config/config.xml", timeout=60) or "" + m = re.search(r"([0-9a-fA-F]{20,})", out) + if m: + return m.group(1) + time.sleep(5) + say(" prowlarr: no API key in the app's own config after 150 s") + return "" + + def _api(self, w, key, path, body=None, method=None): + cmd = ["curl", "-sS", "--max-time", "40", "-w", "\n%{http_code}", "-H", "X-Api-Key: " + key] + if method: + cmd += ["-X", method] + if body is not None: + cmd += ["-H", "Content-Type: application/json", "--data-binary", json.dumps(body)] + cmd.append("http://127.0.0.1:9696/api/v1" + path) + out = _gx(w, self.container, *cmd, timeout=90) or "" + b, _, code = out.rpartition("\n") + return code.strip(), b + + def seed(self, w, sub, say): + key = self._key(w, say) + if not key: + return None + for _ in range(24): + code, _b = self._api(w, key, "/system/status") + if code == "200": + break + time.sleep(5) + label = "felhom" + secrets.token_hex(4) + code, out = self._api(w, key, "/tag", {"label": label}, method="POST") + say(f" prowlarr: POST /tag {label} http={code}") + if code not in ("200", "201"): + say(f" prowlarr: refused {out[:160]}") + return None + prof = "felhom-profile-" + secrets.token_hex(3) + code, out = self._api(w, key, "/appprofile", {"name": prof, "enableRss": True, "enableAutomaticSearch": True, + "enableInteractiveSearch": True, "minimumSeeders": 1}, method="POST") + say(f" prowlarr: POST /appprofile {prof} http={code}") + if code not in ("200", "201"): + say(f" prowlarr: refused {out[:160]}") + return None + return {"tag": label, "profile": prof} + + def verify(self, w, sub, t, say): + key = self._key(w, say) + if not key: + return False + for _ in range(36): + code, _b = self._api(w, key, "/system/status") + if code == "200": + break + time.sleep(5) + code, out = self._api(w, key, "/tag") + if code != "200": + say(f" prowlarr: GET /tag http={code}") + return False + ghost = "felhom" + secrets.token_hex(4) + if ghost in out: + say(" prowlarr: READBACK UNUSABLE - a tag nobody created is present") + return False + if t["tag"] not in out: + say(f" prowlarr: the seeded tag {t['tag']} is GONE") + return False + code, out = self._api(w, key, "/appprofile") + ok = code == "200" and t["profile"] in out + say(f" prowlarr: tag kept, app profile present={ok}") + return ok + + +class TransmissionBox: + """Transmission through traefik: a distinctive speed limit and a torrent go in over its RPC with + the household's own generated password, and the same RPC is asked for them back. The session id + comes from the 409 the first call answers, taken with an anchored sed - an awk over the headers + picks the header NAME up too and the app then answers 400 to everything (measured on the bench, + 2026-10-12).""" + sub = "transmission" + + def _pw(self, w): + return (w.GENERATED.get("transmission") or {}).get("TR_ADMIN_PASSWORD", "") + + def _rpc(self, w, sub, payload, say): + pw = self._pw(w) + if not pw: + say(" transmission: this run holds no generated password for the app") + return "", "" + hdr = "/tmp/tr-box-hdr.txt" + w.sh(["curl", "-sSk", "--max-time", "25", "-H", f"Host: {sub}.{w.DOMAIN}", + "-u", f"admin:{pw}", "-D", hdr, "-o", "/dev/null", + f"{w.BASE}/transmission/rpc"]) + h = (w.sh(["cat", hdr]).stdout or "") + m = re.search(r"(?im)^X-Transmission-Session-Id:\s*(\S+)", h) + sid = m.group(1) if m else "" + r = w.sh(["curl", "-sSk", "--max-time", "40", "-H", f"Host: {sub}.{w.DOMAIN}", + "-u", f"admin:{pw}", "-H", f"X-Transmission-Session-Id: {sid}", + "-w", "\n%{http_code}", "--data-binary", payload, + f"{w.BASE}/transmission/rpc"]) + body, _, code = (r.stdout or "").rpartition("\n") + return code.strip(), body + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "401", "409")): + return None + limit = 300 + secrets.randbelow(600) + code, out = self._rpc(w, sub, '{"method":"session-set","arguments":' + '{"speed-limit-down":%d,"speed-limit-down-enabled":true}}' % limit, say) + say(f" transmission: session-set speed-limit-down={limit} http={code}") + if code != "200" or '"success"' not in out: + say(f" transmission: refused {out[:160]}") + return None + magnet = ("magnet:?xt=urn:btih:dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c" + "&dn=Big+Buck+Bunny") + code, out = self._rpc(w, sub, '{"method":"torrent-add","arguments":{"filename":"%s"}}' % magnet, say) + ok = code == "200" and '"success"' in out + say(f" transmission: torrent-add http={code} ok={ok}") + return {"limit": limit, "hash": "dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c"} if ok else None + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "401", "409"), tries=36): + return False + code, out = self._rpc(w, sub, '{"method":"session-get","arguments":' + '{"fields":["speed-limit-down","speed-limit-down-enabled"]}}', say) + if code != "200": + say(f" transmission: session-get http={code}") + return False + if ('"speed-limit-down":%d' % (t["limit"] + 1)) in out: + say(" transmission: READBACK UNUSABLE - the app reports a limit nobody set") + return False + if ('"speed-limit-down":%d' % t["limit"]) not in out: + say(f" transmission: the seeded limit {t['limit']} is GONE") + return False + code, out = self._rpc(w, sub, '{"method":"torrent-get","arguments":{"fields":["hashString"]}}', say) + ok = code == "200" and t["hash"] in out + say(f" transmission: limit kept, torrent present={ok}") + return ok + + +# ============================================================================================= +class PrivateBin: + """PrivateBin's own JSON API. A paste is a POST and reading it back is a GET — an + application-level round trip. File-backed, no database: this single seed IS the file half.""" + sub = "paste" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200",)): + return None + marker = "upg-" + secrets.token_hex(8) + ct = base64.b64encode(marker.encode()).decode() + body = json.dumps({ + "v": 2, + "adata": [[base64.b64encode(secrets.token_bytes(16)).decode(), + base64.b64encode(secrets.token_bytes(8)).decode(), + 100000, 256, 128, "aes", "gcm", "none"], "plaintext", 0, 0], + "ct": ct, "meta": {"expire": "never"}}) + rc, code, out = w.app_curl(sub, "/", "-H", "X-Requested-With: JSONHttpRequest", + "-H", "Content-Type: application/json", + data=body, method="POST") + try: + j = json.loads(out) + except Exception: + say(f" privatebin: POST returned non-JSON (http {code}): {out[:200]}") + return None + if j.get("status") != 0 or not j.get("id"): + say(f" privatebin: POST refused: {out[:250]}") + return None + say(f" privatebin: seeded paste id={j['id']}") + return {"id": j["id"], "marker": ct} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200",), tries=36): + return False + # negative control, every call: a paste id that cannot exist must NOT read back + rc, code, out = w.app_curl(sub, "/?pasteid=" + secrets.token_hex(8), + "-H", "X-Requested-With: JSONHttpRequest") + if t["marker"] in out: + say(" privatebin: READBACK UNUSABLE — a paste id that cannot exist returned the marker") + return False + rc, code, out = w.app_curl(sub, "/?pasteid=" + t["id"], + "-H", "X-Requested-With: JSONHttpRequest") + got = code == "200" and t["marker"] in out + say(f" privatebin: readback http={code} marker_present={got}") + return got + + +# ============================================================================================= +class Docmost: + """Docmost's own REST API: create the first workspace+user, then prove the account survives by + asking the app to AUTHENTICATE it. Login is version-stable across the API churn.""" + sub = "docs" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302", "404")): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + body = json.dumps({"workspaceName": "drill", "name": "drill", "email": email, "password": pw}) + rc, code, out = w.app_curl(sub, "/api/auth/setup", "-H", "Content-Type: application/json", + data=body, method="POST") + say(f" docmost: /api/auth/setup http={code} rc={rc}") + if code not in ("200", "201"): + say(f" docmost: setup refused: {out[:250]}") + return None + return {"email": email, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302", "404"), tries=36): + return False + # negative control: a password that was never set must NOT authenticate + bad = json.dumps({"email": t["email"], "password": "definitely-" + secrets.token_hex(8)}) + rc, code, _ = w.app_curl(sub, "/api/auth/login", "-H", "Content-Type: application/json", + data=bad, method="POST") + if code in ("200", "201"): + say(" docmost: READBACK UNUSABLE — a wrong password authenticated") + return False + body = json.dumps({"email": t["email"], "password": t["pw"]}) + rc, code, out = w.app_curl(sub, "/api/auth/login", "-H", "Content-Type: application/json", + data=body, method="POST") + ok = code in ("200", "201") + say(f" docmost: login as the seeded user http={code} ok={ok}") + if not ok: + say(f" docmost: login body {out[:200]}") + return ok + + +# ============================================================================================= +class BookStack: + """BookStack mints no API token without a browser, so BOTH halves go through `php artisan` — + BookStack's OWN CLI, inside its own container, against its own User model. + + The exit code carries no information here (`bookstack:reset-mfa` exits 1 for a user it FOUND + and for one it did not), so the discriminator is the OUTPUT: the positive sentence required and + the not-found sentence required absent. The negative control runs on every verify. + + LIMITATION (R-460): this seeds the DATABASE half only. The FILE half needs the API token the + app cannot mint headlessly — so a bookstack edge is at best HALF-proven here. + """ + sub = "wiki" + + def _artisan(self, w, *args): + for path in ("/app/www/artisan", "/var/www/html/artisan"): + out = _gx(w, "bookstack", "php", path, *args) + if "Could not open input file" not in out: + return " ".join(out.split()) + return " ".join(out.split()) + + def _lookup(self, w, email): + out = self._artisan(w, "bookstack:reset-mfa", f"--email={email}") + found = f"Email: {email}" in out + missing = "could not be found" in out + if found == missing: + return None, out + return found, out + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/login", want=("200",), tries=72): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + out = self._artisan(w, "bookstack:create-admin", f"--email={email}", + f"--name=drill-{secrets.token_hex(3)}", f"--password={pw}") + say(f" bookstack: artisan create-admin :: {out[:140]}") + if "successfully created" not in out: + return None + return {"email": email, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/login", want=("200",), tries=72): + say(" bookstack: the app never served /login") + return False + absent, _ = self._lookup(w, f"nobody-{secrets.token_hex(6)}@gate.invalid") + if absent is not False: + say(f" bookstack: READBACK UNUSABLE — an email that cannot exist did not read absent ({absent})") + return False + found, out = self._lookup(w, t["email"]) + say(f" bookstack: readback of the seeded account found={found} :: {out[:140]}") + return found is True + + +# ============================================================================================= +class Gitea: + """The first user comes from gitea's own FIRST-RUN INSTALLER (R-624, 2026-09-30): the template sets no + INSTALL_LOCK, so a fresh instance serves the installer form at `/`, and `gitea admin user create` + refuses (`MustInstalled()`). The household fills that form in; so does this fixture — `POST /` with the + form's OWN default values (read from the page, never typed) plus an admin account. Measured on the bench + 2026-09-30 (1.27.0): no CSRF field on the install form; 200, gitea restarts its web server in-process, and + the admin's Basic auth answers `/api/v1/user` 200 within seconds. On a box the setup gate (decision 46) is + in front; walk.app_curl passes it as the household does. An instance that is ALREADY installed falls back + to the admin CLI (the old route). Its own REST API (basic auth) then creates a repository and reads it + back. All of these are the app's own interfaces.""" + sub = "git" + FORM_DEFAULTS = ("db_path", "app_name", "repo_root_path", "lfs_root_path", "run_user", "domain", + "ssh_port", "http_port", "app_url", "log_root_path") + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302")): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, page = w.app_curl(sub, "/") + if 'name="db_type"' in (page or "") and 'name="admin_name"' in (page or ""): + args = ["--data-urlencode", "db_type=sqlite3", "--data-urlencode", "password_algorithm=pbkdf2"] + for n in self.FORM_DEFAULTS: + m = re.search(r'name="%s" value="([^"]*)"' % n, page) + if m: + args += ["--data-urlencode", f"{n}={m.group(1)}"] + args += ["--data-urlencode", f"admin_name={user}", "--data-urlencode", f"admin_passwd={pw}", + "--data-urlencode", f"admin_confirm_passwd={pw}", + "--data-urlencode", f"admin_email={user}@gate.invalid"] + rc, code, body = w.app_curl(sub, "/", *args, method="POST", timeout=120) + say(f" gitea: first-run installer POST / http={code}") + ok = False + for _ in range(40): # the installer restarts gitea's web server in-process + rc, c2, _ = w.app_curl(sub, "/api/v1/user", "-u", f"{user}:{pw}", timeout=15) + if c2 == "200": + ok = True + break + time.sleep(3) + if not ok: + self.tried = f"installer POST / -> {code}; the admin never authenticated (last {c2})" + say(f" gitea: {self.tried} :: {' '.join((body or '').split())[:160]}") + return None + say(" gitea: installed through its own first-run form; the admin authenticates") + else: + out = _gx(w, "gitea", "su", "git", "-c", + f"gitea admin user create --username {user} --password {pw} " + f"--email {user}@gate.invalid --admin --must-change-password=false") + say(f" gitea: already installed — admin user create :: {' '.join(out.split())[:140]}") + if "successfully created" not in out: + return None + repo = "drillrepo" + secrets.token_hex(3) + rc, code, body = w.app_curl(sub, "/api/v1/user/repos", "-u", f"{user}:{pw}", + "-H", "Content-Type: application/json", + data=json.dumps({"name": repo, "private": True}), method="POST") + say(f" gitea: create repo http={code}") + if code not in ("201", "200"): + say(f" gitea: repo refused {body[:200]}") + return None + return {"user": user, "pw": pw, "repo": repo} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=36): + return False + rc, code, _ = w.app_curl(sub, f"/api/v1/repos/{t['user']}/nope{secrets.token_hex(4)}", + "-u", f"{t['user']}:{t['pw']}") + if code == "200": + say(" gitea: READBACK UNUSABLE — a repo that cannot exist returned 200") + return False + rc, code, body = w.app_curl(sub, f"/api/v1/repos/{t['user']}/{t['repo']}", + "-u", f"{t['user']}:{t['pw']}") + ok = code == "200" and t["repo"] in body + say(f" gitea: readback of the seeded repo http={code} ok={ok}") + return ok + + +# ============================================================================================= +class Navidrome: + """Navidrome's own REST API: create the first admin through /auth/createAdmin, then prove the + account survives by logging in through the same door.""" + sub = "music" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302")): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, out = w.app_curl(sub, "/auth/createAdmin", "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "password": pw}), method="POST") + say(f" navidrome: createAdmin http={code}") + if code not in ("200", "201"): + say(f" navidrome: refused {out[:200]}") + return None + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=36): + return False + bad = json.dumps({"username": t["user"], "password": "wrong-" + secrets.token_hex(6)}) + rc, code, _ = w.app_curl(sub, "/auth/login", "-H", "Content-Type: application/json", + data=bad, method="POST") + if code in ("200", "201"): + say(" navidrome: READBACK UNUSABLE — a wrong password authenticated") + return False + body = json.dumps({"username": t["user"], "password": t["pw"]}) + rc, code, out = w.app_curl(sub, "/auth/login", "-H", "Content-Type: application/json", + data=body, method="POST") + ok = code in ("200", "201") + say(f" navidrome: login as the seeded user http={code} ok={ok}") + return ok + + +# ============================================================================================= +# --- R-624 (`09` §3 decision 146): the BENCH may hold an app's admin secret to seed it, the bench ONLY ---------------- +BENCH_ADMIN_SEED_ENV = "FELHOM_BENCH_ADMIN_SEED" # the run's explicit opt-in; the bench command sets it to 1 +BOX_MARKER = "/opt/docker/stacks" # every Felhom box has it: the controller syncs templates there + + +def bench_admin_seed_allowed(w): + """(True, "") only on the test bench; (False, why) everywhere else. THE BENCH IS RECOGNISED BY ALL THREE: + 1. the venue is the bench's (`upgrade_boxport.Venue` sets VENUE = "bench"; the box walk's object has none); + 2. the run opted in: FELHOM_BENCH_ADMIN_SEED=1 in the environment (the bench command sets it, nothing else); + 3. the machine is not a Felhom box: /opt/docker/stacks does not exist (a box's controller syncs the catalog + there — this is what tells guest 9202, which also ran /opt/upg on 2026-09-23, from the bench LXC 9401). + Pinned by scripts/test_upgrade_bench.py (BenchAdminSeedGuard: each condition alone refuses).""" + if getattr(w, "VENUE", None) != "bench": + return False, "not the bench venue (the box walk never holds an admin secret)" + if os.environ.get(BENCH_ADMIN_SEED_ENV) != "1": + return False, "%s=1 is not set for this run" % BENCH_ADMIN_SEED_ENV + if os.path.exists(BOX_MARKER): + return False, "%s exists — this machine is a Felhom box, not the bench" % BOX_MARKER + return True, "" + + +# --- R-890 (`09` §3 decision 149): the TEST BOXES may seed vaultwarden through its admin route too --------------------- +BOX_ADMIN_SEED_ENV = "FELHOM_BOX_ADMIN_SEED" # the run's explicit opt-in on a box walk +# The test boxes, as (box_walk target's `hp` name, guest): scratch 9202 on demo-hp and the Tester 1 box's guest 9201 +# (VM 341 on the HP box, `09` §3 decisions 149 and 158 — disposable). demo-hp's 9201 is household-shaped and is NEVER +# here: a demo box's household apps are never seeded through their admin. +BOX_ADMIN_SEED_GUESTS = {("demo-hp", "9202"), ("tester-1", "9201"), ("sweep", "9201")} # SWEEP COPY +DRILL_CATALOG_MARK = "app-catalog-drill" # a test run points the box at the drill catalog (`09` §6.5) + + +def box_admin_seed_allowed(w, app): + """(True, "") only on a TEST BOX walk; (False, why) everywhere else. ALL FIVE must hold: + 1. not the bench venue (the bench has its own guard, bench_admin_seed_allowed); + 2. the run opted in: FELHOM_BOX_ADMIN_SEED=1; + 3. the walk targets a listed test box (BOX_ADMIN_SEED_GUESTS) — never 9201, never a household box; + 4. THIS run installed the app (box_walk.deploy records it): an app the walk merely reused may be someone's; + 5. the box itself says it is on the drill catalog (its controller.yaml names it) — a household box never is. + Pinned by scripts/test_upgrade_bench.py (BoxAdminSeedGuard: each condition alone refuses).""" + if getattr(w, "VENUE", None) == "bench": + return False, "the bench venue (its own guard decides there)" + if os.environ.get(BOX_ADMIN_SEED_ENV) != "1": + return False, "%s=1 is not set for this run" % BOX_ADMIN_SEED_ENV + where = (getattr(w, "HP", None), str(getattr(w, "GUEST", None))) + if where not in BOX_ADMIN_SEED_GUESTS: + return False, "%s guest %s is not a test box" % where + if app not in (getattr(w, "DEPLOYED_THIS_RUN", None) or set()): + return False, "this run did not install %s (a reused app may be a household's)" % app + conf = w.guest("grep -A3 '^git:' /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml") + if DRILL_CATALOG_MARK not in (conf or ""): + return False, "the box is not on the drill catalog — not a test run" + return True, "" + + +# Runs INSIDE the guest. The admin token is read from the container's own environment into a shell variable and handed +# to curl on stdin (`printf` is a builtin: never on a command line); the admin session cookie lives in a 0600 file that +# is shredded. Only HTTP codes come back. The cookie is sent by hand because vaultwarden marks it Secure (its DOMAIN is +# https) and the call goes to the container's own address over plain http. +BOX_ADMIN_INVITE_SH = r"""set -u +c=vaultwarden +ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' "$c" 2>/dev/null | awk '{print $1}') +[ -n "$ip" ] || { echo "RESULT noip"; exit 0; } +T=$(docker exec "$c" printenv ADMIN_TOKEN 2>/dev/null) +[ -n "$T" ] || { echo "RESULT notoken"; exit 0; } +H=$(mktemp); chmod 600 "$H" +code=$(printf %s "$T" | curl -s -o /dev/null -D "$H" -w '%{http_code}' --max-time 30 --data-urlencode token@- "http://$ip:80/admin") +T= +ck=$(grep -i '^set-cookie: *VW_ADMIN=' "$H" | head -1 | sed -e 's/^[Ss]et-[Cc]ookie: *//' -e 's/;.*//' | tr -d ' +') +if [ -z "$ck" ]; then shred -u "$H"; echo "RESULT signin=$code session=no"; exit 0; fi +printf 'Cookie: %s +' "$ck" > "$H"; ck= +inv=$(curl -s -o /dev/null -w '%{http_code}' --max-time 30 -H @"$H" -H 'Content-Type: application/json' --data '{"email":"__EMAIL__"}' "http://$ip:80/admin/invite") +shred -u "$H" +echo "RESULT signin=$code session=yes invite=$inv" +""" + + +def box_admin_invite(w, email): + """Invite `email` through vaultwarden's admin page, inside the test box (see BOX_ADMIN_INVITE_SH). Returns + (signin code, session yes/no, invite code) as the box printed them, or None when it printed no RESULT line.""" + if not re.fullmatch(r"[a-z0-9.-]+@gate\.invalid", email): + raise ValueError("only a drill address is ever invited") + out = w.guest(BOX_ADMIN_INVITE_SH.replace("__EMAIL__", email)) + m = re.search(r"^RESULT (.*)$", out or "", re.M) + if not m: + return None + kv = dict(p.split("=", 1) for p in m.group(1).split() if "=" in p) + return kv.get("signin", m.group(1)), kv.get("session", "no"), kv.get("invite", "") + + +def _curl_with_header_file(w, sub, path, header, *extra, **kw): + """w.app_curl with ONE secret header read by curl from a 0600 temp file (`-H @file`), so the value is never + on a command line; the file is overwritten and removed afterwards, whatever happens.""" + import tempfile + fd, hp = tempfile.mkstemp(prefix=".felhom-h-") + try: + os.fchmod(fd, 0o600) + os.write(fd, (header + "\n").encode()) + os.close(fd) + fd = None + return w.app_curl(sub, path, "-H", "@" + hp, *extra, **kw) + finally: + if fd is not None: + os.close(fd) + _shred(hp) + + +def _shred(path): + """Overwrite a small secret file with zeros, then remove it. A missing file is fine.""" + try: + n = os.path.getsize(path) + with open(path, "r+b") as fh: + fh.write(b"\0" * n) + fh.flush() + os.fsync(fh.fileno()) + os.unlink(path) + except OSError: + pass + + +def _encstring(n=32): + """A Bitwarden EncString-shaped opaque value ("2.||"). The server stores it and never opens it.""" + b = lambda k: base64.b64encode(secrets.token_bytes(k)).decode() + return "2.%s|%s|%s" % (b(16), b(n), b(32)) + + +class Vaultwarden: + """Vaultwarden's own account API. The catalog CLOSES self-registration on purpose (SIGNUPS_ALLOWED=false, R-512), so + a stranger's `POST /identity/accounts/register` answers 400 „Registration not allowed" — measured on 9202 + 2026-09-15 (`audits/evidence-p1fixes-2026-09-15/E1-vaultwarden-spike.txt`), where the route that DOES make an + account was measured too: the admin page signs in with ADMIN_TOKEN (`POST /admin`, form `token=`), invites an + address (`POST /admin/invite`, JSON `{"email"}`; with mail off the invitation is stored, nothing is sent), and that + address may then register (`POST /identity/accounts/register` → 200). `/api/accounts/register` is 404 on 1.36. + + ON THE BENCH ONLY (R-624, `09` §3 decision 146; bench_admin_seed_allowed). ADMIN_TOKEN is the deploy secret the + bench itself GENERATED for this run (build_env, `generate: hex:32`) — held in memory, sent to curl on stdin, never + printed; the admin session cookie travels in a 0600 header file that is shredded. Everywhere else the seed tries + the household's own route only and the edge stays `inconclusive`, with what was tried — the honest answer while + sign-up is closed. The readback asks the app to issue a token for the account (its own login endpoint).""" + sub = "vault" + + def _register(self, w, sub, email, key): + body = json.dumps({"email": email, "name": "drill", "masterPasswordHash": key, "masterPasswordHint": None, + "key": _encstring(), + "keys": {"encryptedPrivateKey": _encstring(64), + "publicKey": base64.b64encode(secrets.token_bytes(64)).decode()}, + "kdf": 0, "kdfIterations": 600000}) + return w.app_curl(sub, "/identity/accounts/register", "-H", "Content-Type: application/json", + data=body, method="POST") + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/alive", want=("200",)): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + # Vaultwarden stores an already-hashed master key; the value is opaque to the server. + key = base64.b64encode(secrets.token_bytes(32)).decode() + rc, code, out = self._register(w, sub, email, key) + say(f" vaultwarden: self-registration http={code} (closed by design, R-512 — 400 expected)") + if code in ("200", "204"): + return {"email": email, "key": key} + tried = f"POST /identity/accounts/register -> {code} (sign-up closed by design)" + ok, why = bench_admin_seed_allowed(w) + if not ok: + okb, whyb = box_admin_seed_allowed(w, "vaultwarden") + if not okb: + self.tried = tried + f"; the admin invite was NOT tried: bench — {why}; box — {whyb}" + say(f" vaultwarden: {self.tried}") + return None + got = box_admin_invite(w, email) + say(f" vaultwarden: test-box admin sign-in and invite (inside the box) -> {got}") + if not got or got[1] != "yes" or got[2] != "200": + self.tried = tried + f"; the test-box admin invite -> {got}" + return None + return self._invited(w, sub, email, key, tried, say) + token = (getattr(w, "GENERATED", {}).get("vaultwarden") or {}).get("ADMIN_TOKEN") or "" + if not token: + self.tried = tried + "; the bench generated no ADMIN_TOKEN for this run" + say(f" vaultwarden: {self.tried}") + return None + import urllib.parse + rc, code, page = w.app_curl(sub, "/admin", "-i", "-H", "Content-Type: application/x-www-form-urlencoded", + data="token=" + urllib.parse.quote(token, safe=""), method="POST") + cookie = "; ".join(p for p in _set_cookies(page).split("; ") if p.startswith("VW_ADMIN=")) + say(f" vaultwarden: bench admin sign-in http={code} session={'yes' if cookie else 'no'}") + if not cookie: + self.tried = tried + f"; POST /admin -> {code}, no admin session" + return None + try: + rc, code, out = _curl_with_header_file(w, sub, "/admin/invite", "Cookie: " + cookie, + "-H", "Content-Type: application/json", + data=json.dumps({"email": email}), method="POST") + finally: + cookie = None + say(f" vaultwarden: bench admin invite http={code}") + if code != "200": + self.tried = tried + f"; POST /admin/invite -> {code}" + return None + return self._invited(w, sub, email, key, tried, say) + + def _invited(self, w, sub, email, key, tried, say): + """The invited address registers through the household's own front door.""" + rc, code, out = self._register(w, sub, email, key) + say(f" vaultwarden: invited registration http={code}") + if code not in ("200", "204"): + self.tried = tried + f"; invited POST /identity/accounts/register -> {code}" + say(f" vaultwarden: refused {out[:200]}") + return None + return {"email": email, "key": key} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/alive", want=("200",), tries=36): + return False + def login(pwhash): + import urllib.parse + return w.app_curl(sub, "/identity/connect/token", + "-H", "Content-Type: application/x-www-form-urlencoded", + data=("grant_type=password&scope=api%20offline_access" + f"&client_id=web&deviceType=9&deviceIdentifier=drill" + f"&deviceName=drill&username={urllib.parse.quote(t['email'], safe='')}" + f"&password={urllib.parse.quote(pwhash, safe='')}"), + method="POST") + rc, code, _ = login(base64.b64encode(secrets.token_bytes(32)).decode()) + if code == "200": + say(" vaultwarden: READBACK UNUSABLE — a wrong master key authenticated") + return False + rc, code, out = login(t["key"]) + ok = code == "200" and "access_token" in out + say(f" vaultwarden: token for the seeded account http={code} ok={ok}") + if not ok: + say(f" vaultwarden: body {out[:200]}") + return ok + + +# ============================================================================================= +class Django: + """A Django app's OWN management CLI, inside its own container, against its own User model. + + Same category as BookStack's `php artisan`: the app's own code and its own ORM, never a raw SQL + INSERT and never a planted file (R-156). `createsuperuser --noinput` is Django's own documented + non-interactive route, and the readback asks the SAME ORM whether the account exists. + + THE FIXTURE PROVES ITSELF ON EVERY CALL: each verify() also asks for a username that cannot + exist and requires the answer False. A readback that has broken into always saying True + therefore fails instead of passing everything. + + LIMITATION, recorded rather than papered over: this seeds the DATABASE half only. An app whose + data is also FILES (adventurelog's images) has a file half this fixture does not touch. + """ + + def __init__(self, container, sub, ready_path="/", ready=("200", "302", "301", "404"), + python="python", workdir=None): + # `python` and `workdir` are per-app because the image decides them: adventurelog's + # interpreter is on PATH, tandoor ships a VENV and the bare `python` cannot import Django + # at all ("Couldn't import Django. Are you sure it's installed…"). Measured, not guessed. + self.container = container + self.sub = sub + self.ready_path = ready_path + self.ready = ready + self.python = python + self.workdir = workdir + + def _wd(self): + return f"-w {self.workdir} " if self.workdir else "" + + def _manage(self, w, code): + # -c is passed to `manage.py shell`; the app's own shell, its own ORM. + return w.guest( + f"docker exec {self._wd()}{self.container} {self.python} manage.py shell " + f"-c {json.dumps(code)} 2>&1", timeout=300) + + def _exists(self, w, username): + # ONE LINE, semicolon-separated. A `\n` inside a double-quoted shell argument reaches + # python as a literal backslash-n and is a SyntaxError — which is exactly how the first + # adventurelog run read as `inconclusive`. The fixture refused to guess, which is right, + # but the instrument was the thing that was broken. + out = self._manage(w, ( + "from django.contrib.auth import get_user_model; " + f"print('DRILL_ANSWER=' + str(get_user_model().objects.filter(username={username!r}).exists()))" + )) + m = re.search(r"DRILL_ANSWER=(True|False)", out) + return (m.group(1) == "True") if m else None, " ".join(out.split())[-300:] + + def seed(self, w, sub, say): + if not w.wait_app(sub, self.ready_path, want=self.ready, tries=90): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + out = w.guest( + f"docker exec -e DJANGO_SUPERUSER_PASSWORD={pw} {self._wd()}{self.container} " + f"{self.python} manage.py createsuperuser --noinput " + f"--username {user} --email {user}@gate.invalid 2>&1", timeout=300) + say(f" {self.container}: createsuperuser :: {' '.join(out.split())[:160]}") + got, detail = self._exists(w, user) + if got is not True: + say(f" {self.container}: the account did not appear in the app's own ORM :: {detail[:200]}") + return None + say(f" {self.container}: seeded superuser {user}") + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, self.ready_path, want=self.ready, tries=90): + say(f" {self.container}: the app never served {self.ready_path}") + return False + absent, detail = self._exists(w, "nobody" + secrets.token_hex(6)) + if absent is not False: + say(f" {self.container}: READBACK UNUSABLE — a username that cannot exist did not " + f"read as absent ({absent}) :: {detail[:200]}") + return False + found, detail = self._exists(w, t["user"]) + say(f" {self.container}: readback of the seeded account found={found}") + if found is not True: + say(f" {self.container}: :: {detail[:250]}") + return found is True + + +# ============================================================================================= +class Calcom: + """Cal.com's OWN first-run API: `POST /api/auth/setup` creates the first (admin) user while the + instance has none — the route its own setup wizard calls (upstream v6.2.0 + `apps/web/app/api/auth/setup/route.ts`). The readback is the user's PUBLIC booking page, `GET + /`, rendered by the app from its own database. Measured on 9202 2026-09-28 (v6.2.0, + PostgreSQL 16, memory raised to 2048M in the DRILL catalog only — R-703): setup → 200, a second + setup → 400 "No setup needed.", the page → 200, an unknown name → 404. + + THE FIXTURE PROVES ITSELF ON EVERY CALL: verify() also asks for a name that cannot exist and + requires 404 — a readback that has broken into "always 200" fails instead of passing everything. + """ + sub = "cal" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/auth/providers", want=("200",), tries=120): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(6) + "Aa9x" # >= 15 chars, a digit, both cases (its own rule) + body = json.dumps({"username": user, "full_name": "Drill Gate", "email_address": f"{user}@gate.invalid", + "password": pw}) + rc, code, out = w.app_curl(sub, "/api/auth/setup", "-H", "Content-Type: application/json", + data=body, method="POST") + say(f" calcom: /api/auth/setup http={code} :: {out[:120]}") + if code not in ("200", "201"): + return None + rc, code, _ = w.app_curl(sub, "/" + user, timeout=60) + if code != "200": + say(f" calcom: the seeded user's page answered {code}, not 200") + return None + say(f" calcom: seeded user {user}") + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/auth/providers", want=("200",), tries=120): + say(" calcom: the app never served /api/auth/providers") + return False + rc, code, _ = w.app_curl(sub, "/nobody" + secrets.token_hex(6), timeout=60) + if code != "404": + say(f" calcom: READBACK UNUSABLE — a name that cannot exist answered {code}, not 404") + return False + rc, code, _ = w.app_curl(sub, "/" + t["user"], timeout=60) + say(f" calcom: readback — the seeded user's page http={code}") + return code == "200" + + +# ============================================================================================= +class Claper: + """Claper's OWN release CLI inside its own container: `bin/claper rpc` runs Elixir code in the + RUNNING node, against the app's own `Claper.Accounts` context (its changeset, its password hash). + Not SQL, not a planted file (R-156). `eval` would boot a second, app-less VM — `rpc` asks the + live one. Measured on 9202 2026-09-28 (claper 2.5.1, PostgreSQL 16): register_user → {:ok, id=2}; + the readback authenticated with the right password and REFUSED a wrong one. + + THE FIXTURE PROVES ITSELF ON EVERY CALL: verify() also asks the same function with a password + that was never set and requires False — a readback that has broken into "always found" fails. + """ + container = "claper" + + def _rpc(self, w, code): + # ELIXIR_ERL_OPTIONS=+fnu: the release otherwise warns about latin1 on every call (noise only). + out = w.guest(f"docker exec -e ELIXIR_ERL_OPTIONS=+fnu {self.container} /app/bin/claper rpc " + f"{json.dumps(code)} 2>&1", timeout=240) + return " ".join(out.split()) + + def _auth(self, w, email, pw): + out = self._rpc(w, f'IO.puts("DRILL_ANSWER=#{{Claper.Accounts.get_user_by_email_and_password({json.dumps(email)}, {json.dumps(pw)}) != nil}}")') + m = re.search(r"DRILL_ANSWER=(true|false)", out) + return (m.group(1) == "true") if m else None, out[-300:] + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + out = self._rpc(w, ('case Claper.Accounts.register_user(%{email: ' + json.dumps(email) + ', password: ' + + json.dumps(pw) + '}) do {:ok, u} -> IO.puts("DRILL_SEEDED=#{u.id}"); ' + '{:error, cs} -> IO.inspect(cs.errors, label: "DRILL_REFUSED") end')) + say(f" claper: register_user :: {out[-160:]}") + got, detail = self._auth(w, email, pw) + if got is not True: + say(f" claper: the account does not authenticate in the app's own context :: {detail[:200]}") + return None + say(f" claper: seeded user {email}") + return {"email": email, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + say(" claper: the app never served /") + return False + wrong, detail = self._auth(w, t["email"], "definitely-" + secrets.token_hex(8)) + if wrong is not False: + say(f" claper: READBACK UNUSABLE — a wrong password did not read as refused ({wrong}) :: {detail[:200]}") + return False + ok, detail = self._auth(w, t["email"], t["pw"]) + say(f" claper: readback — the seeded account authenticates={ok}") + if ok is not True: + say(f" claper: :: {detail[:250]}") + return ok is True + + +# ============================================================================================= +class Nextcloud: + """Nextcloud's OWN admin CLI, `occ`, inside its own container: its own code, its own user + backend. Not a SQL INSERT and not a planted file (R-156). + + `occ user:info` is the readback, and it PROVES ITSELF on every call: a uid that cannot exist + must answer "user not found". A readback that has broken into always succeeding therefore + fails instead of passing everything. + + This is the app chosen for the MariaDB engine-major edge (`09` §3 decision 5, R-469 lifted): + the app image does NOT move, only the `mariadb:` sidecar, so the edge carries exactly one + migration and a failure is readable. + """ + sub = "cloud" + + def _occ(self, w, *args, timeout=420): + import shlex + line = " ".join(shlex.quote(a) for a in args) + return w.guest(f"docker exec -u www-data nextcloud php occ {line} 2>&1", timeout=timeout) + + def _info(self, w, uid): + out = self._occ(w, "user:info", uid) + flat = " ".join(out.split()) + if "user not found" in flat.lower() or "could not be found" in flat.lower(): + return False, flat + if f"user_id: {uid}" in flat or f"- user_id: {uid}" in flat or f"user_id: {uid}" in out: + return True, flat + return None, flat + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/status.php", want=("200",), tries=120): + return None + # /status.php answers 200 while the image's own first-run install is still going — measured + # 2026-09-23 night on a loaded bench: `occ` then says "Nextcloud is not installed". Ask occ. + for i in range(60): + st = self._occ(w, "status", timeout=120) + if "installed: true" in st: + break + time.sleep(5) + else: + say(f" nextcloud: occ status never said installed: {' '.join(st.split())[:160]}") + return None + uid = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + out = w.guest( + f"docker exec -u www-data -e OC_PASS={pw} nextcloud php occ user:add " + f"--password-from-env --display-name={uid} {uid} 2>&1", timeout=420) + say(f" nextcloud: occ user:add :: {' '.join(out.split())[:160]}") + got, flat = self._info(w, uid) + if got is not True: + say(f" nextcloud: the account did not appear via occ user:info :: {flat[:220]}") + return None + say(f" nextcloud: seeded user {uid}") + return {"uid": uid, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/status.php", want=("200",), tries=120): + say(" nextcloud: the app never served /status.php") + return False + absent, flat = self._info(w, "nobody" + secrets.token_hex(6)) + if absent is not False: + say(f" nextcloud: READBACK UNUSABLE — a uid that cannot exist did not read absent " + f"({absent}) :: {flat[:200]}") + return False + found, flat = self._info(w, t["uid"]) + say(f" nextcloud: readback of the seeded user found={found}") + if found is not True: + say(f" nextcloud: :: {flat[:250]}") + return found is True + + +# ============================================================================================= +class Grafana: + """Grafana's own HTTP API as the admin the DEPLOY created. The password is the one the + controller showed the household — read from the app's own `app.yaml`, not invented — and the + data (a folder) goes in and comes back through the app's own REST API.""" + sub = "grafana" + + def _auth(self, w, name="grafana"): + # app.yaml stores this ENCRYPTED (`ENC:…`), so it cannot be read back off the box — which + # is correct, and is why the harness uses the value IT generated for the deploy. + pw = (w.GENERATED.get(name) or {}).get("GF_SECURITY_ADMIN_PASSWORD") or "admin" + return f"admin:{pw}" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=72): + return None + au = self._auth(w) + title = "drill-" + secrets.token_hex(5) + rc, code, body = w.app_curl(sub, "/api/folders", "-u", au, + "-H", "Content-Type: application/json", + data=json.dumps({"title": title}), method="POST") + say(f" grafana: create folder http={code}") + if code not in ("200", "201"): + say(f" grafana: refused {body[:220]}") + return None + try: + uid = json.loads(body)["uid"] + except Exception: + say(f" grafana: no uid in {body[:200]}") + return None + return {"uid": uid, "title": title} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=72): + return False + au = self._auth(w) + rc, code, _ = w.app_curl(sub, "/api/folders/nope" + secrets.token_hex(5), "-u", au) + if code == "200": + say(" grafana: READBACK UNUSABLE — a folder uid that cannot exist returned 200") + return False + rc, code, body = w.app_curl(sub, f"/api/folders/{t['uid']}", "-u", au) + ok = code == "200" and t["title"] in body + say(f" grafana: readback of the seeded folder http={code} ok={ok}") + return ok + + +# ============================================================================================= +class AudiobookShelf: + """audiobookshelf's own /init endpoint creates the first root account; its own /login proves + the account survived. Both are the app's own API.""" + sub = "audiobooks" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/status", want=("200",), tries=72): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl(sub, "/init", "-H", "Content-Type: application/json", + data=json.dumps({"newRoot": {"username": user, "password": pw}}), + method="POST") + say(f" audiobookshelf: /init http={code}") + if code not in ("200", "204"): + say(f" audiobookshelf: refused {body[:220]}") + return None + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/status", want=("200",), tries=72): + return False + bad = json.dumps({"username": t["user"], "password": "wrong-" + secrets.token_hex(6)}) + rc, code, _ = w.app_curl(sub, "/login", "-H", "Content-Type: application/json", + data=bad, method="POST") + if code == "200": + say(" audiobookshelf: READBACK UNUSABLE — a wrong password authenticated") + return False + rc, code, body = w.app_curl(sub, "/login", "-H", "Content-Type: application/json", + data=json.dumps({"username": t["user"], "password": t["pw"]}), + method="POST") + ok = code == "200" and t["user"] in body + say(f" audiobookshelf: login as the seeded root http={code} ok={ok}") + return ok + + +# ============================================================================================= +class ActualBudget: + """Actual's own bootstrap API sets the server password; its own login proves it survived.""" + sub = "budget" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=72): + return None + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl(sub, "/account/bootstrap", + "-H", "Content-Type: application/json", + data=json.dumps({"password": pw}), method="POST") + say(f" actualbudget: /account/bootstrap http={code} :: {body[:140]}") + if code not in ("200", "201") or '"status":"ok"' not in body: + return None + return {"pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=72): + return False + def login(p): + return w.app_curl(sub, "/account/login", "-H", "Content-Type: application/json", + data=json.dumps({"loginMethod": "password", "password": p}), + method="POST") + rc, code, body = login("wrong-" + secrets.token_hex(6)) + if '"status":"ok"' in body: + say(" actualbudget: READBACK UNUSABLE — a wrong password authenticated") + return False + rc, code, body = login(t["pw"]) + ok = '"status":"ok"' in body + say(f" actualbudget: login with the seeded password http={code} ok={ok}") + if not ok: + say(f" actualbudget: body {body[:200]}") + return ok + + +# ============================================================================================= +class Mealie: + """Mealie ships a documented first-run admin. We log in as it through the app's own OAuth-style + token endpoint, create a recipe through the app's own API, and read the recipe back.""" + sub = "recipes" + + def _token(self, w, sub, pw=None): + # SWEEP COPY 2026-10-24: the template's after_install replaces MyPassword with the generated ADMIN_PASSWORD + # (decision 45) a few seconds after the install; a seed that raced it used MyPassword and a restored copy then + # refused it. Use the generated one (waiting up to a minute for the after_install), MyPassword only as a fallback. + import time as _t + cands = [pw] if pw else [(w.GENERATED.get("mealie") or {}).get("ADMIN_PASSWORD"), "MyPassword"] + last = (None, "no password") + for attempt in range(6): + for p in [c for c in cands if c and (c != "MyPassword" or attempt == 5 or pw)]: + rc, code, body = w.app_curl( + sub, "/api/auth/token", "-H", "Content-Type: application/x-www-form-urlencoded", + data="username=changeme%40example.com&password=" + __import__("urllib.parse").parse.quote(p), method="POST") + if code == "200": + try: + return json.loads(body)["access_token"], "" + except Exception: + last = (None, body[:200]) + else: + last = (None, f"http={code} {body[:200]}") + if p != "MyPassword" or attempt == 5: + pass + if pw: + break + _t.sleep(10) + return last + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/app/about", want=("200",), tries=90): + return None + tok, why = self._token(w, sub) + if not tok: + say(f" mealie: could not authenticate as the first-run admin :: {why}") + return None + name = "drill-" + secrets.token_hex(5) + rc, code, body = w.app_curl(sub, "/api/recipes", "-H", f"Authorization: Bearer {tok}", + "-H", "Content-Type: application/json", + data=json.dumps({"name": name}), method="POST") + say(f" mealie: create recipe http={code}") + if code not in ("200", "201"): + say(f" mealie: refused {body[:220]}") + return None + slug = body.strip().strip('"') + return {"slug": slug, "name": name} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/app/about", want=("200",), tries=90): + return False + tok, why = self._token(w, sub) + if not tok: + say(f" mealie: could not authenticate after the update :: {why}") + return False + rc, code, _ = w.app_curl(sub, "/api/recipes/nope" + secrets.token_hex(5), + "-H", f"Authorization: Bearer {tok}") + if code == "200": + say(" mealie: READBACK UNUSABLE — a slug that cannot exist returned 200") + return False + rc, code, body = w.app_curl(sub, f"/api/recipes/{t['slug']}", + "-H", f"Authorization: Bearer {tok}") + ok = code == "200" and t["name"] in body + say(f" mealie: readback of the seeded recipe http={code} ok={ok}") + return ok + + +# ============================================================================================= +class N8n: + """n8n's own owner-setup API creates the first account; its own login proves it survived.""" + sub = "auto" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/healthz", want=("200",), tries=90): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + pw = "Drill" + secrets.token_hex(8) + "1" + rc, code, body = w.app_curl(sub, "/rest/owner/setup", "-H", "Content-Type: application/json", + data=json.dumps({"email": email, "firstName": "drill", + "lastName": "drill", "password": pw}), + method="POST") + say(f" n8n: /rest/owner/setup http={code}") + if code not in ("200", "201"): + say(f" n8n: refused {body[:220]}") + return None + return {"email": email, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/healthz", want=("200",), tries=90): + return False + def login(p): + return w.app_curl(sub, "/rest/login", "-H", "Content-Type: application/json", + data=json.dumps({"emailOrLdapLoginId": t["email"], "password": p}), + method="POST") + rc, code, wb = login("wrong-" + secrets.token_hex(6)) + if code == "200": + say(" n8n: READBACK UNUSABLE — a wrong password authenticated :: " + re.sub(r"\s+", " ", wb or "")[:240]) # SWEEP COPY + return False + rc, code, body = login(t["pw"]) + ok = code == "200" and t["email"] in body + say(f" n8n: login as the seeded owner http={code} ok={ok} :: " + re.sub(r"\s+", " ", body or "")[:200]) # SWEEP COPY + return ok + + +# ============================================================================================= +class Zipline: + """Zipline's own setup/login API. Zipline 4 creates the first user through its own endpoint.""" + sub = "img" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/healthcheck", want=("200",), tries=90): + if not w.wait_app(sub, "/", want=("200", "302", "307"), tries=30): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + # /api/setup is Zipline 4's first-run route (measured on the bench 2026-09-30, v4.6.1: GET -> {"firstSetup":true}, + # POST {username,password} -> 200 with a SUPERADMIN, the seeded user logs in). The two others were guesses + # (R-624 read this app as "no route" because of them); they stay as fallbacks. + for path in ("/api/setup", "/api/auth/register", "/api/auth/setup"): + rc, code, body = w.app_curl(sub, path, "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "password": pw}), + method="POST") + say(f" zipline: {path} http={code} :: {body[:160]}") + if code in ("200", "201"): + return {"user": user, "pw": pw} + say(" zipline: neither register nor setup accepted a first user") + return None + + def verify(self, w, sub, t, say): + # 2026-09-30: `/` answers 301 on 9202 once set up — the old wait (200/302/307) never saw the app and the + # readback returned False with no line in the log. The seed's own health route is the wait now. + if not w.wait_app(sub, "/api/healthcheck", want=("200",), tries=60): + say(" zipline: /api/healthcheck never answered 200") + return False + def login(p): + return w.app_curl(sub, "/api/auth/login", "-H", "Content-Type: application/json", + data=json.dumps({"username": t["user"], "password": p}), + method="POST") + # The RIGHT password first (2026-09-30): zipline rate-limits logins, and a wrong attempt first made the + # right one answer 429 on the bench and on 9202. The wrong one after — any non-200 (401/429) is a refusal. + code = None + for _ in range(6): + rc, code, body = login(t["pw"]) + if code != "429": + break + time.sleep(20) + ok = code == "200" + say(f" zipline: login as the seeded user http={code} ok={ok}") + rc, bad, _ = login("wrong-" + secrets.token_hex(6)) + if bad == "200": + say(" zipline: READBACK UNUSABLE — a wrong password authenticated") + return False + return ok + + +# ============================================================================================= +class Vikunja: + """Vikunja's own REST API: register a user, log in, create a project, read the project back. + Four calls, all the app's own front door.""" + sub = "tasks" + + def _token(self, w, sub, t, pw=None): + rc, code, body = w.app_curl(sub, "/api/v1/login", "-H", "Content-Type: application/json", + data=json.dumps({"username": t["user"], + "password": pw or t["pw"]}), method="POST") + if code != "200": + return None, f"http={code} {body[:160]}" + try: + return json.loads(body)["token"], "" + except Exception: + return None, body[:160] + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/v1/info", want=("200",), tries=72): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl(sub, "/api/v1/register", "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "password": pw, + "email": f"{user}@gate.invalid"}), + method="POST") + say(f" vikunja: register http={code}") + if code not in ("200", "201"): + say(f" vikunja: refused {body[:220]}") + return None + t = {"user": user, "pw": pw} + tok, why = self._token(w, sub, t) + if not tok: + say(f" vikunja: could not log in after registering :: {why}") + return None + title = "drill-" + secrets.token_hex(5) + # Vikunja CREATES with PUT, not POST — a POST answers `405 Method Not Allowed`, which + # reads like a broken fixture and is really the wrong verb. Measured 2026-09-21. + rc, code, body = w.app_curl(sub, "/api/v1/projects", "-H", f"Authorization: Bearer {tok}", + "-H", "Content-Type: application/json", + data=json.dumps({"title": title}), method="PUT") + say(f" vikunja: create project http={code}") + if code not in ("200", "201"): + say(f" vikunja: project refused {body[:220]}") + return None + t["title"] = title + t["pid"] = json.loads(body).get("id") + return t + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/v1/info", want=("200",), tries=72): + return False + bad, why = self._token(w, sub, t, pw="wrong-" + secrets.token_hex(6)) + if bad: + say(" vikunja: READBACK UNUSABLE — a wrong password authenticated") + return False + tok, why = self._token(w, sub, t) + if not tok: + say(f" vikunja: the seeded account no longer authenticates :: {why}") + return False + rc, code, body = w.app_curl(sub, f"/api/v1/projects/{t['pid']}", + "-H", f"Authorization: Bearer {tok}") + ok = code == "200" and t["title"] in body + say(f" vikunja: readback of the seeded project http={code} ok={ok}") + return ok + + +# ============================================================================================= +class OpenGist: + """Opengist's own sign-up and sign-in FORMS. + + Two things had to be measured. Its sign-up is CSRF-protected: a bare POST answers 500 with an + HTML page, which reads like a broken app and is really a missing token — fetch the form, keep + its cookie, send its `_csrf` back. And its REST API refuses the account's own password + (`401 {"message":"Bad crendentials"}`) because it wants a token the app will not mint without a + browser. So the SEEDED DATA is the account itself and the READBACK is a real sign-in, which is + the same shape the docmost and navidrome fixtures use. + + LIMITATION, recorded rather than papered over: this is the DATABASE half. A gist's CONTENT is + not seeded, because that needs the API token above. + """ + sub = "gist" + + def _form(self, w, sub, path, jar, fields): + rc, code, html = w.app_curl(sub, path, "-b", jar, "-c", jar) + m = re.search(r'name="_csrf"[^>]*value="([^"]+)"', html or "") + if not m: + return None, f"no _csrf on {path} (http={code})" + body = "&".join([f"_csrf={m.group(1)}"] + [f"{k}={v}" for k, v in fields.items()]) + rc, code, out = w.app_curl(sub, path, "-b", jar, "-c", jar, + "-H", "Content-Type: application/x-www-form-urlencoded", + data=body, method="POST") + return code, out + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=72): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + jar = f"/tmp/og-{secrets.token_hex(4)}.jar" + # SWEEP COPY 2026-10-24: OpenGist 1.15 serves sign-up at /-/register (the catalog's signup_block names that + # path); /register is 404 there. Try the new path first, the old one second. + code, out = self._form(w, sub, "/-/register", jar, {"username": user, "password": pw}) + if code is None or str(code) == "404": + code, out = self._form(w, sub, "/register", jar, {"username": user, "password": pw}) + say(f" opengist: /register (with its own _csrf) http={code}") + if code not in ("200", "302", "303"): + say(f" opengist: refused {str(out)[:200]}") + return None + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + # Wait for the LOGIN FORM, not for the root page. Measured 2026-09-21: immediately after a + # successful update the root answers while /login does not yet carry its `_csrf`, so the + # sign-in silently fails and the app looks like it lost the account. It had not. + # 1.15 moved every page under `/-/` (`/-/login`, `/-/all`; `/login` answers 404) — measured + # 2026-09-23 night. Ask the app which shape it serves instead of assuming one. + pre, home_path = "", "/" + for _ in range(72): + if w.app_curl(sub, "/-/login")[1] == "200": + pre, home_path = "/-", "/-/all" + break + if w.app_curl(sub, "/login")[1] == "200": + break + time.sleep(5) + else: + say(" opengist: neither /login nor /-/login came back after the update") + return False + say(f" opengist: sign-in form at {pre}/login") + for _ in range(24): + rc, code, html = w.app_curl(sub, pre + "/login") + if code == "200" and '_csrf' in (html or ""): + break + time.sleep(5) + jar = f"/tmp/og-{secrets.token_hex(4)}.jar" + code, _ = self._form(w, sub, pre + "/login", jar, + {"username": t["user"], "password": "wrong-" + secrets.token_hex(5)}) + rc, c2, home = w.app_curl(sub, home_path, "-b", jar) + if t["user"] in (home or ""): + say(" opengist: READBACK UNUSABLE — a wrong password signed in") + return False + jar2 = f"/tmp/og-{secrets.token_hex(4)}.jar" + code, _ = self._form(w, sub, pre + "/login", jar2, {"username": t["user"], "password": t["pw"]}) + rc, c2, home = w.app_curl(sub, home_path, "-b", jar2) + signed_in = t["user"] in (home or "") + # The ACCOUNT's own public page is the readback that does not depend on a cookie: 1.15 marks its + # session cookie Secure, so a plain-HTTP bench cannot send it back (measured 2026-09-23 night). + # A user that was never created must 404 on the same call, or the readback proves nothing. + rc, pc, prof = w.app_curl(sub, "/" + t["user"]) + rc, nc, _ = w.app_curl(sub, "/nobody" + secrets.token_hex(4)) + profile = pc == "200" and t["user"] in (prof or "") + if nc == "200": + say(" opengist: READBACK UNUSABLE — a never-created user's page answered 200") + return None + say(f" opengist: account page /{t['user']} http={pc} found={profile} (never-created user {nc}); " + f"sign-in http={code} name_on_page={signed_in}") + return profile + + +# ============================================================================================= +class Papra: + """Papra's own e-mail sign-up and sign-in endpoints.""" + sub = "papra" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=72): + if not w.wait_app(sub, "/", want=("200", "302"), tries=30): + return None + email = f"drill-{secrets.token_hex(4)}@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl(sub, "/api/auth/sign-up/email", + "-H", "Content-Type: application/json", "-H", f"Origin: https://{sub}.{w.DOMAIN}", # SWEEP COPY: Papra 26.6 wants an Origin + + data=json.dumps({"email": email, "password": pw, + "name": "drill"}), method="POST") + say(f" papra: sign-up http={code}") + if code not in ("200", "201"): + say(f" papra: refused {body[:220]}") + return None + return {"email": email, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=72): + return False + def signin(p): + return w.app_curl(sub, "/api/auth/sign-in/email", + "-H", "Content-Type: application/json", "-H", f"Origin: https://{sub}.{w.DOMAIN}", # SWEEP COPY: Papra 26.6 wants an Origin + + data=json.dumps({"email": t["email"], "password": p}), method="POST") + rc, code, _ = signin("wrong-" + secrets.token_hex(6)) + if code == "200": + say(" papra: READBACK UNUSABLE — a wrong password authenticated") + return False + rc, code, body = signin(t["pw"]) + ok = code == "200" + say(f" papra: sign-in as the seeded account http={code} ok={ok}") + return ok + + +# ============================================================================================= +class HomeAssistant: + """Home Assistant's own onboarding API creates the owner account and hands back a code the + same API exchanges for a token. Both are the app's own documented non-browser route.""" + sub = "ha" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=120): + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl(sub, "/api/onboarding/users", + "-H", "Content-Type: application/json", + data=json.dumps({"client_id": f"https://{sub}.felhom.invalid/", + "name": "drill", "username": user, + "password": pw, "language": "en"}), + method="POST") + say(f" home-assistant: /api/onboarding/users http={code}") + if code not in ("200", "201"): + say(f" home-assistant: refused {body[:220]}") + return None + return {"user": user, "pw": pw} + + def _login(self, w, sub, user, pw): + """The app's own login flow: start it, then answer it. A 200 with a step_id of + `mfa`/`init` means the credentials were REFUSED; only `create_entry` is a pass.""" + rc, code, body = w.app_curl(sub, "/auth/login_flow", + "-H", "Content-Type: application/json", + data=json.dumps({"client_id": f"https://{sub}.felhom.invalid/", + "handler": ["homeassistant", None], + "redirect_uri": f"https://{sub}.felhom.invalid/", + "type": "authorize"}), method="POST") + if code not in ("200", "201"): + return None, f"flow start http={code} {body[:160]}" + try: + fid = json.loads(body)["flow_id"] + except Exception: + return None, body[:160] + rc, code, body = w.app_curl(sub, f"/auth/login_flow/{fid}", + "-H", "Content-Type: application/json", + data=json.dumps({"client_id": f"https://{sub}.felhom.invalid/", + "username": user, "password": pw}), + method="POST") + try: + j = json.loads(body) + except Exception: + return None, body[:160] + return (j.get("result") if j.get("type") == "create_entry" else None), body[:200] + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=120): + return False + bad, why = self._login(w, sub, t["user"], "wrong-" + secrets.token_hex(6)) + if bad: + say(" home-assistant: READBACK UNUSABLE — a wrong password authenticated") + return False + good, why = self._login(w, sub, t["user"], t["pw"]) + ok = bool(good) + say(f" home-assistant: login as the seeded owner ok={ok}") + if not ok: + say(f" home-assistant: {why}") + return ok + + +# ============================================================================================= +class Romm: + """RomM's own user API, driven the way RomM's own front end drives it. + + Three things had to be measured rather than guessed, and each one answered a 403 or a 422 that + looked like a different fault: RomM sets a **`romm_csrftoken` cookie** on any GET and requires + it back in an **`x-csrftoken` header** (a bare POST is `403 CSRF token verification failed`, + which reads like an auth problem); the fields go in the **JSON body**, not the query string (a + query-string POST is `422 Field required` for every field it was just given); and `email` is + required alongside username, password and role. + + On a fresh install with no admin the first `POST /api/users` is accepted unauthenticated; + afterwards it is not — which is what makes the readback (`POST /api/login` as that user) a real + authentication rather than a repeat of the seed. + + LIMITATION: this is the DATABASE half. RomM's other half is the ROM library on the drive, which + this does not populate. + """ + sub = "arcade" + + def _csrf(self, w, sub): + jar = f"/tmp/romm-{secrets.token_hex(4)}.jar" + w.app_curl(sub, "/api/heartbeat", "-c", jar) + out = w.sh(["bash", "-lc", f"grep -i csrf {jar} | awk '{{print $7}}'"]).stdout or "" + return jar, out.strip() + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/heartbeat", want=("200",), tries=120): + if not w.wait_app(sub, "/", want=("200", "302"), tries=30): + return None + jar, tok = self._csrf(w, sub) + if not tok: + say(" romm: no romm_csrftoken cookie was set on /api/heartbeat") + return None + user = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(10) + rc, code, body = w.app_curl( + sub, "/api/users", "-b", jar, "-H", f"x-csrftoken: {tok}", + "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "email": f"{user}@gate.invalid", + "password": pw, "role": "admin"}), method="POST") + say(f" romm: POST /api/users http={code}") + if code not in ("200", "201"): + say(f" romm: refused {body[:220]}") + return None + return {"user": user, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/heartbeat", want=("200",), tries=120): + return False + jar, tok = self._csrf(w, sub) + rc, code, _ = w.app_curl(sub, "/api/login", "-b", jar, "-H", f"x-csrftoken: {tok}", + "-u", f"{t['user']}:wrong-{secrets.token_hex(5)}", method="POST") + if code == "200": + say(" romm: READBACK UNUSABLE — a wrong password authenticated") + return False + rc, code, body = w.app_curl(sub, "/api/login", "-b", jar, "-H", f"x-csrftoken: {tok}", + "-u", f"{t['user']}:{t['pw']}", method="POST") + ok = code == "200" + say(f" romm: login as the seeded user http={code} ok={ok}") + if not ok: + say(f" romm: body {body[:200]}") + return ok + + + +# ============================================================================================= +class Wishlist: + """Wishlist's own SvelteKit FORM actions (added night 2026-09-23, R-612's app). Sign-up at + /signup, then prove the account survived by signing in at /login — and by a wrong password being + REFUSED on the same call, so a readback that always says "ok" fails instead of passing. + SvelteKit refuses a cross-site form post: the Origin must be the app's own https origin.""" + sub = "wishlist" + + def _post(self, w, sub, path, body): + origin = "https://" + getattr(w, "host", lambda s: f"{s}.{w.DOMAIN}")(sub) # the Host the request carries + rc, code, out = w.app_curl(sub, path, "-H", f"Origin: {origin}", "-H", "x-sveltekit-action: true", + "-H", "Content-Type: application/x-www-form-urlencoded", + data=body, method="POST") + try: + return code, json.loads(out) + except Exception: + return code, {"type": "unparsed", "raw": (out or "")[:200]} + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/signup", want=("200",), tries=72): + return None + u = "drill" + secrets.token_hex(3) + pw = "Drill-" + secrets.token_hex(8) + code, j = self._post(w, sub, "/signup", + f"name=Drill&username={u}&email={u}%40example.invalid&password={pw}&tokenId=") + say(f" wishlist: /signup http={code} type={j.get('type')}") + if j.get("type") not in ("success", "redirect"): + self.tried = f"POST /signup -> {code} {str(j)[:150]}" + return None + return {"u": u, "pw": pw} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/login", want=("200",), tries=72): + say(" wishlist: /login never came back") + return False + c1, bad = self._post(w, sub, "/login", f"username={t['u']}&password=wrong-{secrets.token_hex(5)}") + if bad.get("type") != "failure": + say(f" wishlist: READBACK UNUSABLE — a wrong password was not refused ({bad.get('type')})") + return None + c2, good = self._post(w, sub, "/login", f"username={t['u']}&password={t['pw']}") + ok = good.get("type") in ("success", "redirect") + say(f" wishlist: sign-in as the seeded user type={good.get('type')} ok={ok} (wrong password refused)") + return ok + +# ============================================================================================= +def _set_cookies(out): + """The `name=value` pairs of every Set-Cookie in a `curl -D -` answer (headers + body), joined for + a Cookie header. Kept in the fixture's own memory only; never printed.""" + pairs = re.findall(r"(?im)^set-cookie:\s*([^=;\s]+=[^;\r\n]*)", out or "") + return "; ".join(pairs) + + +class Sparkyfitness: + """SparkyFitness's OWN better-auth API: `POST /api/auth/sign-up/email` makes the first account (the + household's own first-run route — the box's sign-up block goes up only AFTER the setup, decision 47), + `POST /api/auth/sign-in/email` gives the session cookie, `POST /api/measurements/check-in` stores a + weight for one date, `GET /api/measurements/check-in/` reads it back. Measured on the bench + 2026-09-30 (v0.17.3, PostgreSQL 15): sign-up 200, check-in 200, readback equal, an empty date → `{}`, + a wrong password → 401. + + THE FIXTURE PROVES ITSELF ON EVERY CALL: verify() also requires a wrong password to be refused and a + date with no check-in to read back without the weight. + """ + sub = "sparky" + + def _signin(self, w, sub, email, pw): + # better-auth rate-limits sign-in per client address (a box's traefik is ONE address): a 429 is waited + # out, never read as a verdict (measured on 9202 2026-09-30: seed sign-in + wrong + right within 1 s → 429). + for _ in range(4): + rc, code, out = w.app_curl(sub, "/api/auth/sign-in/email", "-D", "-", "-H", "Content-Type: application/json", + "-H", f"Origin: https://{sub}.{w.DOMAIN}", + data=json.dumps({"email": email, "password": pw}), method="POST") + if code != "429": + break + time.sleep(15) + return code, _set_cookies(out) + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=120): + if not w.wait_app(sub, "/", want=("200",), tries=30): + return None + email = "drill" + secrets.token_hex(3) + "@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + weight = round(50 + secrets.randbelow(4000) / 100, 2) + rc, code, out = w.app_curl(sub, "/api/auth/sign-up/email", "-H", "Content-Type: application/json", + "-H", f"Origin: https://{sub}.{w.DOMAIN}", + data=json.dumps({"email": email, "password": pw, "name": "Drill"}), method="POST") + say(f" sparkyfitness: sign-up http={code}") + if code not in ("200", "201"): + self.tried = f"POST /api/auth/sign-up/email -> {code} {out[:120]}" + return None + code, ck = self._signin(w, sub, email, pw) + if code != "200" or not ck: + self.tried = f"POST /api/auth/sign-in/email -> {code}" + return None + rc, code, out = w.app_curl(sub, "/api/measurements/check-in", "-H", f"Cookie: {ck}", + "-H", "Content-Type: application/json", "-H", f"Origin: https://{sub}.{w.DOMAIN}", + data=json.dumps({"entry_date": "2026-09-01", "weight": weight}), method="POST") + say(f" sparkyfitness: check-in http={code}") + if code != "200": + self.tried = f"POST /api/measurements/check-in -> {code} {out[:120]}" + return None + say(f" sparkyfitness: seeded user {email.split('@')[0]} with a weight of {weight} on 2026-09-01") + return {"email": email, "pw": pw, "weight": weight} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200",), tries=120): + say(" sparkyfitness: the app never served /") + return False + code, _ = self._signin(w, sub, t["email"], "wrong-" + secrets.token_hex(6)) + if code == "200": + say(" sparkyfitness: READBACK UNUSABLE — a wrong password signed in") + return False + code, ck = self._signin(w, sub, t["email"], t["pw"]) + if code != "200" or not ck: + say(f" sparkyfitness: the seeded user could not sign in (http {code})") + return False + rc, code, out = w.app_curl(sub, "/api/measurements/check-in/1999-01-01", "-H", f"Cookie: {ck}") + if code != "200" or '"weight"' in (out or ""): + say(f" sparkyfitness: READBACK UNUSABLE — an empty date answered {code} {out[:80]}") + return False + rc, code, out = w.app_curl(sub, "/api/measurements/check-in/2026-09-01", "-H", f"Cookie: {ck}") + try: + got = json.loads(out).get("weight") + except Exception: + got = None + say(f" sparkyfitness: readback of the seeded weight http={code} equal={got == t['weight']}") + return got == t["weight"] + + +class Rallly: + """Rallly's OWN better-auth API and its own tRPC, the household's route: `POST /api/better-auth/sign-up/email` + makes the account, which then needs the six-digit code Rallly e-mails. **The one step that is not the front + door:** the code is READ (a SELECT, never a write) from the app's own `verifications` row, standing in for the + household's mailbox — this venue has none. The code is then given back through the front door + (`POST /api/better-auth/email-otp/verify-email`), the session comes from `sign-in/email`, and a poll is made + with `polls.make` (tRPC). The readback is the public `polls.get` by the poll's id. Nothing is written by hand + (R-156). Measured on the bench 2026-09-30 (v4.11.1, PostgreSQL 16): sign-up 200 (the mail send fails — + ESOCKET — and the code is stored anyway), verify 200, `polls.make` 200, `polls.get` 200 with the title, an + unknown id → 404 "Poll not found". + + THE FIXTURE PROVES ITSELF ON EVERY CALL: verify() also requires an id that cannot exist to be not found. + """ + sub = "poll" + + def _auth(self, w, sub, path, body): + return w.app_curl(sub, "/api/better-auth/" + path, "-D", "-", "-H", "Content-Type: application/json", + "-H", f"Origin: https://{sub}.{w.DOMAIN}", data=json.dumps(body), method="POST") + + def _get(self, w, sub, poll_id): + q = json.dumps({"json": {"urlId": poll_id}}, separators=(",", ":")) + import urllib.parse + return w.app_curl(sub, "/api/trpc/polls.get?input=" + urllib.parse.quote(q)) + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/login", want=("200",), tries=90): + return None + email = "drill" + secrets.token_hex(3) + "@gate.invalid" + pw = "Drill-" + secrets.token_hex(10) + rc, code, out = self._auth(w, sub, "sign-up/email", {"email": email, "password": pw, "name": "Drill"}) + say(f" rallly: sign-up http={code}") + if code != "200": + say(" rallly: refused :: " + re.sub(r"\s+", " ", (out or "").split("\r\n\r\n")[-1])[:300]) # SWEEP COPY: say why + self.tried = f"POST /api/better-auth/sign-up/email -> {code}" + return None + otp = "" + for _ in range(10): + otp = w.guest("docker exec rallly-postgres psql -U rallly -d rallly -Atc " + f"\"select split_part(value,':',1) from verifications where identifier=" + f"'email-verification-otp-{email}' order by created_at desc limit 1\" 2>&1").strip() + if re.fullmatch(r"\d{6}", otp): + break + time.sleep(2) + if not re.fullmatch(r"\d{6}", otp): + self.tried = "the e-mail code was not in the app's own verifications table" + say(" rallly: no e-mail code found in the app's own table") + return None + rc, code, out = self._auth(w, sub, "email-otp/verify-email", {"email": email, "otp": otp}) + say(f" rallly: verify-email with the code http={code}") + if code != "200": + self.tried = f"POST /api/better-auth/email-otp/verify-email -> {code}" + return None + rc, code, out = self._auth(w, sub, "sign-in/email", {"email": email, "password": pw}) + ck = _set_cookies(out) + if code != "200" or "session_token" not in ck: + self.tried = f"POST /api/better-auth/sign-in/email -> {code}" + return None + title = "drillpoll-" + secrets.token_hex(4) + rc, code, out = w.app_curl(sub, "/api/trpc/polls.make", "-H", f"Cookie: {ck}", "-H", "Content-Type: application/json", + "-H", f"Origin: https://{sub}.{w.DOMAIN}", + data=json.dumps({"json": {"title": title, "timeZone": "Europe/Budapest", + "options": [{"startDate": "2026-12-01"}]}}), method="POST") + try: + pid = json.loads(out)["result"]["data"]["json"]["data"]["id"] + except Exception: + self.tried = f"POST /api/trpc/polls.make -> {code} {out[:120]}" + say(f" rallly: polls.make -> {code} {out[:120]}") + return None + say(f" rallly: seeded poll {title} ({pid})") + return {"id": pid, "title": title} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/login", want=("200",), tries=90): + say(" rallly: the app never served /login") + return False + rc, code, out = self._get(w, sub, "Nope" + secrets.token_hex(4)) + if code != "404": + say(f" rallly: READBACK UNUSABLE — an id that cannot exist answered {code}") + return False + rc, code, out = self._get(w, sub, t["id"]) + found = code == "200" and t["title"] in (out or "") + say(f" rallly: readback of the seeded poll http={code} found={found}") + return found + + +class Outline: + """Outline's OWN first-run API, the household's route while the app holds no workspace: + `POST /api/installation.create` makes the workspace and its admin and signs them in (Outline mounts it + only on self-hosted installs, and refuses it once a team exists). The session makes an API key + (`apiKeys.create`, with Outline's own CSRF cookie + header), the key makes a collection and a published + document, and the readback is `documents.info` with the key. Measured on the bench 2026-09-30 (v1.9.1, + PostgreSQL 16): every call 200, the title and body read back, an unknown id → 404, a wrong key → 401. + + THE FIXTURE PROVES ITSELF ON EVERY CALL: verify() also requires an unknown document id to be not found + and a wrong key to be refused. + """ + sub = "kb" + ZERO = "00000000-0000-4000-8000-000000000000" + + def _api(self, w, sub, call, body, key): + return w.app_curl(sub, "/api/" + call, "-H", f"Authorization: Bearer {key}", "-H", + "Content-Type: application/json", data=json.dumps(body), method="POST") + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/_health", want=("200",), tries=90): + return None + o = f"https://{sub}.{w.DOMAIN}" + rc, code, out = w.app_curl(sub, "/api/installation.create", "-D", "-", "-H", "Content-Type: application/json", + "-H", f"Origin: {o}", + data=json.dumps({"teamName": "Drill", "userName": "Drill", + "userEmail": "drill" + secrets.token_hex(3) + "@gate.invalid"}), + method="POST") + ck = _set_cookies(out) + say(f" outline: installation.create http={code}") + if code not in ("200", "302") or "accessToken=" not in ck: + self.tried = f"POST /api/installation.create -> {code}" + return None + rc, code, out = w.app_curl(sub, "/home", "-D", "-", "-o", "/dev/null", "-H", f"Cookie: {ck}") + # R-744: Outline 1.10 names the cookie `__Host-csrfToken` on a secure request (server/utils/csrf.ts getCookieName, + # shared/constants.ts CSRF.secureCookieName) and `csrfToken` over plain HTTP — 1.9.1 always said `csrfToken`. + # The double-submit check compares the cookie under the request's own name with the x-csrf-token header. + csrf = re.search(r"(?im)^set-cookie:\s*((?:__Host-)?csrfToken)=([^;\r\n]+)", out or "") + if not csrf: + self.tried = "no csrfToken / __Host-csrfToken cookie from GET /home" + return None + cn, cs = csrf.group(1), csrf.group(2) + say(f" outline: CSRF cookie {cn}") + rc, code, out = w.app_curl(sub, "/api/apiKeys.create", "-H", f"Cookie: {ck}; {cn}={cs}", "-H", f"x-csrf-token: {cs}", + "-H", "Content-Type: application/json", "-H", f"Origin: {o}", + data=json.dumps({"name": "drill"}), method="POST") + try: + key = json.loads(out)["data"]["value"] + except Exception: + self.tried = f"POST /api/apiKeys.create -> {code} {out[:120]}" + return None + rc, code, out = self._api(w, sub, "collections.create", {"name": "Drill"}, key) + try: + col = json.loads(out)["data"]["id"] + except Exception: + self.tried = f"POST /api/collections.create -> {code} {out[:120]}" + return None + title, body = "drilldoc-" + secrets.token_hex(4), "drill body " + secrets.token_hex(6) + rc, code, out = self._api(w, sub, "documents.create", + {"title": title, "text": body, "collectionId": col, "publish": True}, key) + try: + did = json.loads(out)["data"]["id"] + except Exception: + self.tried = f"POST /api/documents.create -> {code} {out[:120]}" + return None + say(f" outline: seeded document {title}") + return {"key": key, "id": did, "title": title, "body": body} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/_health", want=("200",), tries=90): + say(" outline: the app never served /_health") + return False + rc, code, _ = self._api(w, sub, "documents.info", {"id": self.ZERO}, t["key"]) + if code != "404": + say(f" outline: READBACK UNUSABLE — an unknown document answered {code}") + return False + rc, code, _ = self._api(w, sub, "documents.info", {"id": t["id"]}, "ol_api_" + secrets.token_hex(19)) + if code != "401": + say(f" outline: READBACK UNUSABLE — a wrong key answered {code}") + return False + rc, code, out = self._api(w, sub, "documents.info", {"id": t["id"]}, t["key"]) + found = code == "200" and t["title"] in (out or "") and t["body"] in (out or "") + say(f" outline: readback of the seeded document http={code} found={found}") + return found + + +# ============================================================================================= +class CalibreWeb: + """Calibre-Web Automated (2026-09-30, R-462). THE FRONT DOOR is the household's own „Upload" button: log in + through the login form (Flask-WTF CSRF token read from the page), then `POST /upload` with the book, exactly + the form the page posts. The other door — dropping a file into the ingest folder (`${IMPORT_PATH}/calibre`, + reached through FileBrowser) — is NOT used: from here it would be a file planted in a mount (R-156). + Measured on the bench 2026-09-30: uploads are ON in a fresh v4.0.6; the book lands in the household's + library folder (`${USERDATA_PATH}/media/books// (<id>)/`, backup class `mandatory`). + + THE ADMIN PASSWORD. On a box the product's `after_install` (the app's own CLI, `cps.py -s admin:<pw>`) sets + it from the deploy field, and the walk holds the value it generated. The bench runs no `after_install`, so + when the generated password does not log in, the fixture runs THE SAME command the product runs — the + app's own CLI inside its own container — and says so. + + READBACK: the app's OPDS feed (HTTP Basic, the route e-readers use): the search must list the title, and the + book's own download must be the uploaded book (the marker read out of the EPUB the app serves). Negative + controls on every call: a wrong password must answer 401, and a title that cannot exist must not be found.""" + sub = "books" + + @staticmethod + def _epub(marker): + import io, zipfile + buf = io.BytesIO() + z = zipfile.ZipFile(buf, "w") + z.writestr(zipfile.ZipInfo("mimetype"), "application/epub+zip") + z.writestr("META-INF/container.xml", + '<?xml version="1.0"?><container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">' + '<rootfiles><rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>' + '</rootfiles></container>') + z.writestr("OEBPS/content.opf", + '<?xml version="1.0" encoding="UTF-8"?><package xmlns="http://www.idpf.org/2007/opf" ' + 'unique-identifier="bid" version="2.0"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/" ' + f'xmlns:opf="http://www.idpf.org/2007/opf"><dc:title>{marker}</dc:title>' + '<dc:creator opf:role="aut">Drill Author</dc:creator><dc:language>en</dc:language>' + f'<dc:identifier id="bid">urn:uuid:{marker}</dc:identifier></metadata><manifest>' + '<item id="c1" href="c1.xhtml" media-type="application/xhtml+xml"/>' + '<item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/></manifest>' + '<spine toc="ncx"><itemref idref="c1"/></spine></package>') + z.writestr("OEBPS/toc.ncx", + '<?xml version="1.0"?><ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">' + f'<head><meta name="dtb:uid" content="urn:uuid:{marker}"/></head><docTitle><text>{marker}</text>' + '</docTitle><navMap><navPoint id="n1" playOrder="1"><navLabel><text>One</text></navLabel>' + '<content src="c1.xhtml"/></navPoint></navMap></ncx>') + z.writestr("OEBPS/c1.xhtml", + '<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml"><head>' + f'<title>{marker}

{marker}-body the household keeps this.

') + z.close() + return buf.getvalue() + + @staticmethod + def _name(w): # SWEEP COPY 2026-10-24: after_install renames `admin` to the generated ADMIN_USER (decision 45) + g = w.GENERATED.setdefault("calibre-web", {}) + if not g.get("ADMIN_USER"): + # the BOX generates it (an optional secret): read it the way the household does — the app page's + # reveal button, POST /stacks/calibre-web/auto-field/reveal (R-254). Never printed. + import json as _json + sess = open(f"{w.SC}/sess{os.getpid()}.txt").read().strip() + csrf = open(f"{w.SC}/csrf{os.getpid()}.txt").read().strip() + r = w.sh(["curl", "-sk", "-H", w.HOSTHDR, "-H", f"Cookie: {sess}", "-H", f"X-CSRF-Token: {csrf}", + "--data-urlencode", "env_var=ADMIN_USER", "--data-urlencode", f"_csrf={csrf}", + f"{w.BASE}/stacks/calibre-web/auto-field/reveal"]) + try: + d = _json.loads(r.stdout or "{}") + g["ADMIN_USER"] = (d.get("data") or d).get("value") or "" + except Exception: + g["ADMIN_USER"] = "" + return g.get("ADMIN_USER") or "admin" + + def _opds(self, w, sub, pw, path): + return w.app_curl(sub, path, "-u", f"{self._name(w)}:{pw}") + + def seed(self, w, sub, say): + import os, tempfile + if not w.wait_app(sub, "/login", want=("200",), tries=72): + return None + pw = (w.GENERATED.get("calibre-web") or {}).get("ADMIN_PASSWORD") or "" + rc, code, _ = self._opds(w, sub, pw, "/opds") + if code != "200": + say(f" calibre-web: the generated admin password does not log in (opds http={code}) — running the " + "template's own after_install command (the app's CLI, as the product does after an install)") + import shlex # as the template's after_install: `user: abc` (docker exec -u keeps the image's PATH; `su` does not) + out = w.guest("docker exec -u abc calibre-web python3 /app/calibre-web-automated/cps.py -p /config/app.db -s " + + shlex.quote(f"{self._name(w)}:{pw}") + " 2>&1") + say(f" calibre-web: after_install :: {' '.join(out.split())[-80:]}") + rc, code, _ = self._opds(w, sub, pw, "/opds") + if code != "200": + self.tried = f"admin login after after_install -> {code}" + return None + jar = tempfile.mktemp(prefix="cw-jar-") + try: + rc, code, page = w.app_curl(sub, "/login", "-c", jar, "-b", jar) + m = re.search(r'name="csrf_token" value="([^"]+)"', page or "") + if not m: + self.tried = f"GET /login -> {code}, no csrf_token" + return None + rc, code, _ = w.app_curl(sub, "/login", "-c", jar, "-b", jar, "--data-urlencode", f"csrf_token={m.group(1)}", + "--data-urlencode", f"username={self._name(w)}", "--data-urlencode", f"password={pw}", + "--data-urlencode", "remember_me=on", method="POST") + rc, code, home = w.app_curl(sub, "/", "-c", jar, "-b", jar) + m = re.search(r'name="csrf_token" value="([^"]+)"', home or "") + has_form = 'action="/upload"' in (home or "") + if code != "200" or not has_form or not m: + self.tried = f"login -> home {code}, upload form present={has_form}" + say(f" calibre-web: {self.tried}") + return None + marker = "upg" + secrets.token_hex(6) + book = tempfile.mktemp(prefix="cw-", suffix=".epub") + open(book, "wb").write(self._epub(marker)) + rc, code, out = w.app_curl(sub, "/upload", "-c", jar, "-b", jar, "-H", f"X-CSRFToken: {m.group(1)}", + "-F", f"csrf_token={m.group(1)}", + "-F", f"btn-upload=@{book};type=application/epub+zip", method="POST") + os.unlink(book) + say(f" calibre-web: POST /upload http={code} {out[:80]}") + if code != "200": + self.tried = f"POST /upload -> {code} {out[:120]}" + return None + finally: + if os.path.exists(jar): + os.unlink(jar) + t = {"pw": pw, "marker": marker} + for _ in range(24): # the upload is a task; the library entry follows within seconds + rc, code, feed = self._opds(w, sub, pw, f"/opds/search/{marker}") + if marker in (feed or ""): + say(f" calibre-web: seeded book {marker} is in the library") + return t + time.sleep(5) + self.tried = "uploaded, but the book never appeared in the OPDS search" + return None + + def verify(self, w, sub, t, say): + import io, os, tempfile, zipfile + if not w.wait_app(sub, "/login", want=("200",), tries=72): + say(" calibre-web: the app never served /login") + return False + rc, code, _ = self._opds(w, sub, "wrong-" + secrets.token_hex(6), "/opds") + if code != "401": + say(f" calibre-web: READBACK UNUSABLE — a wrong password answered {code}") + return False + ghost = "upg" + secrets.token_hex(6) + rc, code, feed = self._opds(w, sub, t["pw"], f"/opds/search/{ghost}") + if code != "200" or "" in (feed or ""): + say(f" calibre-web: READBACK UNUSABLE — a title that cannot exist: http={code}, entries={(feed or '').count('')}") + return False + feed = "" + for _ in range(12): + rc, code, feed = self._opds(w, sub, t["pw"], f"/opds/search/{t['marker']}") + if code == "200" and f"{t['marker']}" in (feed or ""): + break + time.sleep(5) + listed = f"{t['marker']}" in (feed or "") + m = re.search(r'href="(/opds/download/\d+/epub/?)"', feed or "") + served = False + if listed and m: + f = tempfile.mktemp(prefix="cw-dl-") + rc, code, _ = w.app_curl(sub, m.group(1), "-u", f"admin:{t['pw']}", "-o", f) + try: + z = zipfile.ZipFile(io.BytesIO(open(f, "rb").read())) + served = any(f"{t['marker']}-body" in z.read(n).decode("utf-8", "replace") for n in z.namelist()) + except Exception as e: + say(f" calibre-web: the download is not a readable EPUB (http={code}): {e}") + finally: + if os.path.exists(f): + os.unlink(f) + say(f" calibre-web: readback — listed={listed} download_link={bool(m)} book_content_served={served}") + return listed and served + + +# ============================================================================================= +class Wger: + """wger (2026-09-30, R-462). THE FRONT DOOR is the web login form (`/en/user/login`, Django CSRF), then the + app's own REST API with that session: `POST /api/v2/weightentry/` (a weight on a date — household data in its + SQLite), read back with `GET /api/v2/weightentry/?weight=`. Measured on the bench 2026-09-30 (2.6). + NOT the app-API login (`/allauth/app/v1/auth/login`): it answers 500 on a CORRECT password on this template + (no JWT_PRIVATE_KEY — filed, R-737). THE ADMIN PASSWORD: as calibre-web — the box's `after_install` sets it; + the bench runs the template's own command (password as the last argument) when the generated one does not + log in. Negative controls on every readback: no session answers 403, a weight never entered counts 0.""" + sub = "fitness" + SET_PW = ("import os, sys; sys.path.insert(0, '/home/wger/src'); os.chdir('/home/wger/src'); " + "os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.main'); import django; django.setup(); " + "from django.contrib.auth.models import User; u = User.objects.get(username='admin'); " + "u.set_password(sys.argv[1]); u.save(); print('FELHOM_AFTER_INSTALL_OK')") + + @staticmethod + def _host(w, sub): + return w.host(sub) if hasattr(w, "host") else f"{sub}.{w.DOMAIN}" + + def _login(self, w, sub, pw, jar): + o = f"https://{self._host(w, sub)}" + hdr = ["-H", f"Origin: {o}", "-H", f"Referer: {o}/en/user/login", "-c", jar, "-b", jar] + rc, code, page = w.app_curl(sub, "/en/user/login", *hdr) + m = re.search(r'name="csrfmiddlewaretoken" value="([^"]+)"', page or "") + if not m: + return None, f"GET /en/user/login -> {code}, no csrf" + rc, code, _ = w.app_curl(sub, "/en/user/login", *hdr, "--data-urlencode", f"csrfmiddlewaretoken={m.group(1)}", + "--data-urlencode", "login=admin", "--data-urlencode", f"password={pw}", method="POST") + jt = open(jar).read() if os.path.exists(jar) else "" + if code != "302" or "sessionid" not in jt: + return None, f"POST /en/user/login -> {code}" + csrf = re.search(r"csrftoken\s+(\S+)", jt) + return hdr + ["-H", f"X-CSRFToken: {csrf.group(1) if csrf else ''}"], "ok" + + def seed(self, w, sub, say): + import shlex, tempfile + if not w.wait_app(sub, "/en/user/login", want=("200",), tries=72): + return None + pw = (w.GENERATED.get("wger") or {}).get("ADMIN_PASSWORD") or "" + jar = tempfile.mktemp(prefix="wger-jar-") + try: + hdr, why = self._login(w, sub, pw, jar) + if hdr is None: + say(f" wger: the generated admin password does not log in ({why}) — running the template's own " + "after_install command (the app's CLI, as the product does after an install)") + out = w.guest("docker exec wger python3 -c " + shlex.quote(self.SET_PW) + " " + shlex.quote(pw) + " 2>&1") + say(f" wger: after_install :: {' '.join(out.split())[-60:]}") + hdr, why = self._login(w, sub, pw, jar) + if hdr is None: + self.tried = f"web login after after_install: {why}" + return None + weight = "%d.%02d" % (60 + secrets.randbelow(60), secrets.randbelow(100)) + rc, code, out = w.app_curl(sub, "/api/v2/weightentry/", *hdr, "-H", "Content-Type: application/json", + data=json.dumps({"date": "2026-09-30T10:00:00Z", "weight": weight}), method="POST") + say(f" wger: POST /api/v2/weightentry/ http={code}") + if code != "201": + self.tried = f"POST /api/v2/weightentry/ -> {code} {out[:120]}" + return None + return {"pw": pw, "weight": weight} + finally: + if os.path.exists(jar): + os.unlink(jar) + + def verify(self, w, sub, t, say): + import tempfile + if not w.wait_app(sub, "/en/user/login", want=("200",), tries=72): + say(" wger: the app never served /en/user/login") + return False + rc, code, _ = w.app_curl(sub, f"/api/v2/weightentry/?weight={t['weight']}") + if code not in ("401", "403"): + say(f" wger: READBACK UNUSABLE — no session answered {code}") + return False + jar = tempfile.mktemp(prefix="wger-jar-") + try: + hdr, why = self._login(w, sub, t["pw"], jar) + if hdr is None: + say(f" wger: login failed: {why}") + return False + rc, code, out = w.app_curl(sub, "/api/v2/weightentry/?weight=199.99", *hdr) + if code != "200" or '"count":0' not in (out or "").replace(" ", ""): + say(f" wger: READBACK UNUSABLE — a weight never entered: http={code} {out[:80]}") + return False + rc, code, out = w.app_curl(sub, f"/api/v2/weightentry/?weight={t['weight']}", *hdr) + ok = code == "200" and f'"weight":"{t["weight"]}"' in (out or "").replace(" ", "") + say(f" wger: readback of the seeded weight entry http={code} found={ok}") + return ok + finally: + if os.path.exists(jar): + os.unlink(jar) + + +# ============================================================================================= +class Crafty: + """Crafty Controller 4 (2026-09-30, R-462). Its own REST API v2, behind its own HTTPS port (the template tells + traefik `scheme=https`; the bench adapter reads that label): `POST /api/v2/auth/login` as `admin` with the + deploy's CRAFTY_PASSWORD (the compose entrypoint writes it into default.json), then `POST /api/v2/roles` — a + role is a record in crafty's own database, created the way its panel creates one — read back with + `GET /api/v2/roles`. Measured on the bench 2026-09-30 (4.10.7): the POST needs `mfa_required` (500 without). + Negative control on every readback: a wrong token must answer 401/403.""" + sub = "minecraft" + + def _token(self, w, sub, pw): + rc, code, out = w.app_curl(sub, "/api/v2/auth/login", "-H", "Content-Type: application/json", + data=json.dumps({"username": "admin", "password": pw}), method="POST") + try: + return json.loads(out)["data"]["token"], code + except Exception: + return None, f"{code} {(out or '')[:120]}" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + return None + pw = (w.GENERATED.get("crafty-controller") or {}).get("CRAFTY_PASSWORD") or "" + tok, why = None, None + for _ in range(12): # crafty answers `/` before its API accepts the seeded admin + tok, why = self._token(w, sub, pw) + if tok: + break + time.sleep(5) + if not tok: + self.tried = f"POST /api/v2/auth/login -> {why}" + return None + role = "upg" + secrets.token_hex(5) + rc, code, out = w.app_curl(sub, "/api/v2/roles", "-H", f"Authorization: Bearer {tok}", + "-H", "Content-Type: application/json", + data=json.dumps({"name": role, "servers": [], "mfa_required": False}), method="POST") + say(f" crafty: POST /api/v2/roles http={code} {out[:60]}") + if code != "200" or '"ok"' not in (out or ""): + self.tried = f"POST /api/v2/roles -> {code} {out[:120]}" + return None + return {"pw": pw, "role": role} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + say(" crafty: the app never answered /") + return False + tok = None + for _ in range(12): + tok, why = self._token(w, sub, t["pw"]) + if tok: + break + time.sleep(5) + if not tok: + say(f" crafty: login failed: {why}") + return False + rc, code, _ = w.app_curl(sub, "/api/v2/roles", "-H", f"Authorization: Bearer x{tok}") + if code not in ("401", "403"): + say(f" crafty: READBACK UNUSABLE — a wrong token answered {code}") + return False + rc, code, out = w.app_curl(sub, "/api/v2/roles", "-H", f"Authorization: Bearer {tok}") + names = [r.get("role_name") for r in (json.loads(out).get("data") or [])] if code == "200" else [] + ok = t["role"] in names + say(f" crafty: readback of the seeded role http={code} found={ok} (roles listed: {len(names)})") + return ok + + +# ============================================================================================= +class UptimeKuma: + """Uptime Kuma 2 (2026-09-30, R-462). Its web page talks to the server over socket.io, and its first-run setup, + login and every edit exist ONLY there — so the fixture speaks socket.io's plain HTTP long-polling transport + (Engine.IO v4: `GET/POST /socket.io/?EIO=4&transport=polling`) through the app's own front door, exactly the + messages the page sends: `setup` (the first admin), `login`, `addStatusPage` (a status page is a record in its + own SQLite). READBACK through its public REST route `GET /api/status-page/` (the page households share), + which must carry the seeded title; negative control: a slug never made must not answer 200 with a title.""" + sub = "status" + RS = "\x1e" + + class _IO: + def __init__(self, w, sub): + self.w, self.sub, self.sid, self.buf, self.ack = w, sub, None, [], 0 + + def _get(self): + rc, code, out = self.w.app_curl(self.sub, f"/socket.io/?EIO=4&transport=polling&sid={self.sid}", timeout=30) + if code != "200": + raise RuntimeError(f"poll http={code} {out[:80]}") + for p in (out or "").split(UptimeKuma.RS): + if p == "2": # ping → pong + self._post("3") + elif p: + self.buf.append(p) + + def _post(self, body): + rc, code, out = self.w.app_curl(self.sub, f"/socket.io/?EIO=4&transport=polling&sid={self.sid}", + "-H", "Content-Type: text/plain;charset=UTF-8", data=body, method="POST") + if code != "200": + raise RuntimeError(f"post http={code} {out[:80]}") + + def open(self): + rc, code, out = self.w.app_curl(self.sub, "/socket.io/?EIO=4&transport=polling") + m = re.search(r'"sid":"([^"]+)"', out or "") + if code != "200" or not m: + raise RuntimeError(f"handshake http={code} {out[:80]}") + self.sid = m.group(1) + self._post("40") + for _ in range(10): + self._get() + if any(p.startswith("40") for p in self.buf): + return self + raise RuntimeError("no socket.io connect") + + def call(self, event, *args): + n = self.ack + self.ack += 1 + self._post(f"42{n}" + json.dumps([event, *args])) + for _ in range(30): + for p in list(self.buf): + if p.startswith(f"43{n}["): + self.buf.remove(p) + return json.loads(p[len(f"43{n}"):])[0] + self._get() + raise RuntimeError(f"no answer to {event}") + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + return None + user, pw = "drill" + secrets.token_hex(3), "Drill-" + secrets.token_hex(10) + "A1" + try: + io = self._IO(w, sub).open() + r = io.call("setup", user, pw) + say(f" uptime-kuma: setup ok={r.get('ok')} {str(r.get('msg'))[:60]}") + if not r.get("ok"): + self.tried = f"socket.io setup -> {r}" + return None + io = self._IO(w, sub).open() + r = io.call("login", {"username": user, "password": pw, "token": ""}) + if not r.get("ok"): + self.tried = f"socket.io login -> {str(r)[:120]}" + return None + title, slug = "Drill " + secrets.token_hex(4), "upg" + secrets.token_hex(4) + r = io.call("addStatusPage", title, slug) + say(f" uptime-kuma: addStatusPage ok={r.get('ok')} {str(r.get('msg'))[:60]}") + if not r.get("ok"): + self.tried = f"socket.io addStatusPage -> {str(r)[:120]}" + return None + except Exception as e: + self.tried = f"socket.io: {e}" + say(f" uptime-kuma: {self.tried}") + return None + return {"user": user, "pw": pw, "title": title, "slug": slug} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "302"), tries=90): + say(" uptime-kuma: the app never answered /") + return False + rc, code, out = w.app_curl(sub, f"/api/status-page/upgnever{secrets.token_hex(4)}") + if code == "200" and '"title"' in (out or ""): + say(f" uptime-kuma: READBACK UNUSABLE — a slug never made answered {code} with a title") + return False + found = False + for _ in range(12): + rc, code, out = w.app_curl(sub, f"/api/status-page/{t['slug']}") + try: + found = code == "200" and json.loads(out)["config"]["title"] == t["title"] + except Exception: + found = False + if found: + break + time.sleep(5) + say(f" uptime-kuma: readback of the seeded status page http={code} found={found}") + return found + + +# ============================================================================================= +class Radicale: + """Radicale (2026-10-01, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is CalDAV itself, the route every + phone and desktop calendar uses: HTTP basic auth with the box's generated login (`RADICALE_USER`, default + "csalad"; `RADICALE_PASSWORD`). Seed: MKCALENDAR a calendar, PUT one event (a unique UID and SUMMARY); read back + with GET. Negative controls on every readback: no credentials 401, a wrong password 401, an event never created + 404 — so a read that says "found" cannot be an open door or a catch-all.""" + sub = "calendar" + + @staticmethod + def _creds(w): + g = w.GENERATED.get("radicale") or {} + return g.get("RADICALE_USER") or "csalad", g.get("RADICALE_PASSWORD") or "" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/.web/", want=("200",), tries=60): + self.tried = "/.web/ never answered 200" + return None + user, pw = self._creds(w) + cal = "felhom-" + secrets.token_hex(4) + uid = "ev-" + secrets.token_hex(6) + "@felhom" + summary = "Felhom teszt " + secrets.token_hex(3) + rc, code, _ = w.app_curl(sub, f"/{user}/{cal}/", "-u", f"{user}:{pw}", method="MKCALENDAR") + say(f" radicale: MKCALENDAR /{user}/{cal}/ http={code}") + if code != "201": + self.tried = f"MKCALENDAR -> {code}" + return None + ics = ("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//felhom//fixture//EN\r\nBEGIN:VEVENT\r\n" + f"UID:{uid}\r\nDTSTAMP:20261001T100000Z\r\nDTSTART:20261002T100000Z\r\nSUMMARY:{summary}\r\n" + "END:VEVENT\r\nEND:VCALENDAR\r\n") + rc, code, _ = w.app_curl(sub, f"/{user}/{cal}/{uid}.ics", "-u", f"{user}:{pw}", "-H", "Content-Type: text/calendar", + data=ics, method="PUT") + say(f" radicale: PUT event http={code}") + if code != "201": + self.tried = f"PUT event -> {code}" + return None + return {"user": user, "pw": pw, "cal": cal, "uid": uid, "summary": summary} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/.web/", want=("200",), tries=60): + say(" radicale: /.web/ never answered") + return False + path = f"/{t['user']}/{t['cal']}/{t['uid']}.ics" + rc, c_none, _ = w.app_curl(sub, path) + rc, c_wrong, _ = w.app_curl(sub, path, "-u", f"{t['user']}:{t['pw']}x") + rc, c_absent, _ = w.app_curl(sub, f"/{t['user']}/{t['cal']}/never-{secrets.token_hex(3)}.ics", "-u", f"{t['user']}:{t['pw']}") + if c_none != "401" or c_wrong != "401" or c_absent != "404": + say(f" radicale: READBACK UNUSABLE — no auth {c_none}, wrong password {c_wrong}, absent event {c_absent}") + return False + rc, code, out = w.app_curl(sub, path, "-u", f"{t['user']}:{t['pw']}") + ok = code == "200" and f"SUMMARY:{t['summary']}" in (out or "") + say(f" radicale: readback http={code} found={ok} (controls: no auth {c_none}, wrong {c_wrong}, absent {c_absent})") + return ok + + +# ============================================================================================= +class Karakeep: + """Karakeep (2026-10-01, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is the app's own: the first account + is made by its sign-up call (tRPC `users.create` — the first account becomes the admin; through the setup gate on the + box, as the household), then the route its phone app uses to sign in — `apiKeys.exchange` (email + password -> an API + key) — and the REST API: `POST /api/v1/bookmarks` (a text bookmark with a unique title), read back with + `GET /api/v1/bookmarks/`. Negative controls on every readback: no key 401, a wrong key 401, an id never made 404. + A text bookmark, not a URL: the crawler's success depends on the internet, the read-back must not.""" + sub = "bookmarks" + + @staticmethod + def _trpc(w, sub, proc, payload): + rc, code, out = w.app_curl(sub, f"/api/trpc/{proc}?batch=1", "-H", "Content-Type: application/json", + data=json.dumps({"0": {"json": payload}}), method="POST") + try: + return code, json.loads(out)[0] + except Exception: + return code, {"_raw": (out or "")[:200]} + + def _key(self, w, sub, t): + code, r = self._trpc(w, sub, "apiKeys.exchange", {"keyName": "felhom-" + secrets.token_hex(3), + "email": t["email"], "password": t["pw"]}) + return ((r.get("result") or {}).get("data") or {}).get("json", {}).get("key") if code == "200" else None + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=72): + self.tried = "/api/health never answered 200" + return None + email = "admin-" + secrets.token_hex(3) + "@felhom.invalid" + pw = "Kk-" + secrets.token_hex(10) + code, r = self._trpc(w, sub, "users.create", {"name": "Felhom", "email": email, "password": pw, "confirmPassword": pw}) + role = ((r.get("result") or {}).get("data") or {}).get("json", {}).get("role") + say(f" karakeep: users.create (the first account) http={code} role={role}") + if code != "200": + self.tried = f"users.create -> {code} {str(r)[:120]}" + return None + t = {"email": email, "pw": pw} + key = self._key(w, sub, t) + if not key: + self.tried = "apiKeys.exchange gave no key" + return None + title = "felhom-seed-" + secrets.token_hex(4) + rc, code, out = w.app_curl(sub, "/api/v1/bookmarks", "-H", f"Authorization: Bearer {key}", "-H", "Content-Type: application/json", + data=json.dumps({"type": "text", "text": "Felhom teszt jegyzet " + title, "title": title}), method="POST") + say(f" karakeep: POST /api/v1/bookmarks http={code}") + try: + bid = json.loads(out)["id"] + except Exception: + self.tried = f"POST bookmark -> {code} {(out or '')[:120]}" + return None + t.update({"id": bid, "title": title, "role": role}) + return t + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/health", want=("200",), tries=72): + say(" karakeep: /api/health never answered") + return False + key = self._key(w, sub, t) + if not key: + say(" karakeep: the household's email + password no longer give a key") + return False + rc, c_none, _ = w.app_curl(sub, f"/api/v1/bookmarks/{t['id']}") + rc, c_wrong, _ = w.app_curl(sub, f"/api/v1/bookmarks/{t['id']}", "-H", "Authorization: Bearer ak1_felhom_wrong") + rc, c_absent, _ = w.app_curl(sub, "/api/v1/bookmarks/never" + secrets.token_hex(4), "-H", f"Authorization: Bearer {key}") + if c_none != "401" or c_wrong != "401" or c_absent != "404": + say(f" karakeep: READBACK UNUSABLE — no key {c_none}, wrong key {c_wrong}, absent id {c_absent}") + return False + rc, code, out = w.app_curl(sub, f"/api/v1/bookmarks/{t['id']}", "-H", f"Authorization: Bearer {key}") + ok = code == "200" and t["title"] in (out or "") + say(f" karakeep: readback http={code} found={ok} (controls: no key {c_none}, wrong {c_wrong}, absent {c_absent})") + return ok + + +# ============================================================================================= +class Dawarich: + """Dawarich (2026-10-01, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is the route the phone apps use: + `POST /api/v1/overland/batches?api_key=` (Overland's GeoJSON — one point with a unique place and time), read back + with `GET /api/v1/points?api_key=…&start_at=…&end_at=…`. The API key is the account's own (the household copies it + from its settings page); the fixture reads it with the app's own CLI (`bin/rails runner` in the app's container — + R-156's allowed route, nothing planted). Negative controls on every readback: no key 401, a wrong key 401, a range + with nothing in it answers [].""" + sub = "timeline" + + @staticmethod + def _key(w): + out = w.guest("docker exec dawarich bin/rails runner 'puts User.order(:id).first.api_key' 2>/dev/null | tail -1") + k = (out or "").strip() + return k if re.fullmatch(r"[A-Za-z0-9_-]{20,}", k) else None + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/api/v1/health", want=("200",), tries=90): + self.tried = "/api/v1/health never answered 200" + return None + key = self._key(w) + if not key: + self.tried = "no API key from the app's own CLI" + return None + lat = round(47.40 + secrets.randbelow(2000) / 10000.0, 4) + lon = round(19.00 + secrets.randbelow(2000) / 10000.0, 4) + ts = "2026-09-%02dT%02d:%02d:00Z" % (1 + secrets.randbelow(28), secrets.randbelow(24), secrets.randbelow(60)) + body = {"locations": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [lon, lat]}, + "properties": {"timestamp": ts, "altitude": 110, "speed": 0, "horizontal_accuracy": 5, + "device_id": "felhom-fixture"}}]} + rc, code, out = w.app_curl(sub, f"/api/v1/overland/batches?api_key={key}", "-H", "Content-Type: application/json", + data=json.dumps(body), method="POST") + say(f" dawarich: POST /api/v1/overland/batches http={code} ({lat},{lon} at {ts})") + if code not in ("200", "201"): + self.tried = f"overland batch -> {code} {(out or '')[:120]}" + return None + return {"lat": lat, "lon": lon, "ts": ts} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/v1/health", want=("200",), tries=90): + say(" dawarich: /api/v1/health never answered") + return False + key = self._key(w) + day = t["ts"][:10] + rng = f"start_at={day}T00:00:00Z&end_at={day}T23:59:59Z" + rc, c_none, _ = w.app_curl(sub, f"/api/v1/points?{rng}") + rc, c_wrong, _ = w.app_curl(sub, f"/api/v1/points?api_key=felhom-wrong-key&{rng}") + rc, c_empty, o_empty = w.app_curl(sub, f"/api/v1/points?api_key={key}&start_at=2001-01-01T00:00:00Z&end_at=2001-01-02T00:00:00Z") + if c_none != "401" or c_wrong != "401" or (o_empty or "").strip() != "[]": + say(f" dawarich: READBACK UNUSABLE — no key {c_none}, wrong key {c_wrong}, empty range {(o_empty or '')[:40]!r}") + return False + found = False + for _ in range(12): # the batch is stored by a background job + rc, code, out = w.app_curl(sub, f"/api/v1/points?api_key={key}&{rng}") + # the point's fields are read as text: the unique coordinates must both appear in the answer + found = code == "200" and str(t["lat"]) in (out or "") and str(t["lon"]) in (out or "") + if found: + break + time.sleep(5) + say(f" dawarich: readback http={code} found={found} (controls: no key {c_none}, wrong {c_wrong}, empty range [])") + return found + + + +# ============================================================================================= +class Grocy: + """Grocy (2026-10-10, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is the household's own + browser session plus grocy's REST API, which the same session authenticates — measured on the bench + 2026-10-10 (4.7.1): `GET /api/system/info` answers 200 with the login cookie and **401 without it**, so + the API is not a second, open door. + + Sign-in is `POST /login` with `username=admin` and `password_base64=` — grocy's + form base64-encodes the password client-side, and the server reads that field name (its login page's own + input is `password_base64`). The password is the one the box generated and `after_install` installed. + + Seed, all through grocy's own routes: read a location and a quantity unit (a fresh install has one of + each), `POST /api/objects/products` with a marker name, then `POST /api/stock/products//add` — the + stock route, so the seed exercises what grocy is actually for, not just one table. + + Readback asks the APP for the stock, not the file: `GET /api/stock/products/` must return the marker + name AND `stock_amount` 5. + + THE FIXTURE PROVES ITSELF ON EVERY VERIFY: a call with no cookie must be 401, a product id that cannot + exist must be 404, and a session minted from a WRONG password must be 401. If any control misreads, the + readback is declared unusable rather than passed — a readback that has broken into always saying "found" + would otherwise pass every edge. + """ + sub = "kamra" + + # THE TWO VENUES DIFFER HERE, and saying so is the honest part. On the BOX the controller runs + # `after_install`, so the generated password is the live one. On the BENCH there is no controller and + # `after_install` never runs (check-volume-persistence.build_env generates the value, nothing applies + # it), so grocy still carries its image default. The fixture tries the generated password FIRST and + # falls back to the documented default, and records which one answered — a silent fallback would hide + # a box-side after_install that had stopped working. + DEFAULT_PW = "admin" + + def _login_pw(self, w, sub, say): + g = w.GENERATED.get("grocy") or {} + for pw, src in ((g.get("ADMIN_PASSWORD") or "", "the box's generated password"), + (self.DEFAULT_PW, "grocy's image default (no after_install on the bench)")): + if not pw: + continue + if self._session(w, sub, pw): + say(" grocy: signed in with %s" % src) + return pw, src + return "", "neither the generated password nor the image default signed in" + + def _session(self, w, sub, pw): + """Grocy's own login route; returns the Cookie header value, or ''. + + BOTH field names are sent on purpose, and that was measured, not guessed: grocy 4.7 renamed the + form field to `password_base64` (LoginController base64-decodes it into `password` and unsets it), + while 4.6 — the FROM side of the first ladder step — reads a plain `password` and ignores the new + name. Sending both signs in on 4.6.0 AND on 4.7.1 (measured 2026-10-10 on the bench, Set-Cookie + on both), so one fixture spans the edge. The two releases even name the cookie differently + (`grocy_session` vs `grocy_session_access_token`), which is why the cookie is read by pattern. + """ + body = ("username=admin&password=" + (pw or "") + + "&password_base64=" + base64.b64encode((pw or "").encode()).decode()) + rc, code, out = w.app_curl(sub, "/login", "-D", "-", "-o", "/dev/null", + "-H", "Content-Type: application/x-www-form-urlencoded", + data=body, method="POST") + return _set_cookies(out) if rc == 0 else "" + + @staticmethod + def _first_id(out): + m = re.search(r'"id":\s*"?(\d+)"?', out or "") + return m.group(1) if m else None + + def seed(self, w, sub, say): + # GET / is what runs grocy's migrations (measured on 4.6.0: /login answered 200 with a + # ZERO-BYTE database, / created the schema and the admin row), so the wait dials / first. + if not w.wait_app(sub, "/", want=("200", "302"), tries=72): + self.tried = "/ never answered" + return None + w.app_curl(sub, "/stockoverview") + pw, src = self._login_pw(w, sub, say) + if not pw: + self.tried = src + say(" grocy: " + src) + return None + ck = self._session(w, sub, pw) + if not ck: + self.tried = "POST /login gave no session cookie" + say(" grocy: login gave no session cookie") + return None + rc, code, out = w.app_curl(sub, "/api/objects/locations", "-H", "Cookie: " + ck) + loc = self._first_id(out) + rc, code, out = w.app_curl(sub, "/api/objects/quantity_units", "-H", "Cookie: " + ck) + qu = self._first_id(out) + if not loc or not qu: + self.tried = "no location (%s) or quantity unit (%s) to hang a product on" % (loc, qu) + say(" grocy: " + self.tried) + return None + mark = "felhom-upg-" + secrets.token_hex(4) + body = json.dumps({"name": mark, "location_id": int(loc), "qu_id_purchase": int(qu), + "qu_id_stock": int(qu), "min_stock_amount": 2}) + rc, code, out = w.app_curl(sub, "/api/objects/products", "-H", "Cookie: " + ck, + "-H", "Content-Type: application/json", data=body, method="POST") + say(" grocy: POST /api/objects/products http=%s :: %s" % (code, (out or "")[:120])) + if code != "200": + self.tried = "POST /api/objects/products -> %s" % code + return None + m = re.search(r'"created_object_id":\s*"?(\d+)"?', out or "") + if not m: + self.tried = "the product POST answered 200 with no created_object_id" + return None + pid = m.group(1) + rc, code, out = w.app_curl(sub, "/api/stock/products/%s/add" % pid, "-H", "Cookie: " + ck, + "-H", "Content-Type: application/json", + data=json.dumps({"amount": 5, "transaction_type": "purchase"}), method="POST") + say(" grocy: POST /api/stock/products/%s/add http=%s" % (pid, code)) + if code != "200": + self.tried = "stock add -> %s" % code + return None + return {"pw": pw, "pw_src": src, "pid": pid, "mark": mark, "amount": 5} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/login", want=("200",), tries=72): + say(" grocy: /login never answered") + return False + path = "/api/stock/products/%s" % t["pid"] + rc, c_none, _ = w.app_curl(sub, path) + bad = self._session(w, sub, t["pw"] + "x") + rc, c_wrong, _ = w.app_curl(sub, path, *(["-H", "Cookie: " + bad] if bad else [])) + ck = self._session(w, sub, t["pw"]) + if not ck: + say(" grocy: the household's own password no longer signs in after the step") + return False + rc, c_absent, _ = w.app_curl(sub, "/api/objects/products/999999", "-H", "Cookie: " + ck) + if c_none != "401" or c_wrong != "401" or c_absent != "404": + say(" grocy: READBACK UNUSABLE - no cookie %s, wrong password %s, absent id %s" + % (c_none, c_wrong, c_absent)) + return False + rc, code, out = w.app_curl(sub, path, "-H", "Cookie: " + ck) + found = False + if code == "200": + try: + d = json.loads(out or "{}") + found = (str(d.get("stock_amount")) in (str(t["amount"]), "%s.0" % t["amount"]) + and (d.get("product") or {}).get("name") == t["mark"]) + except ValueError: + found = False + say(" grocy: readback http=%s found=%s (controls: no cookie %s, wrong %s, absent %s)" + % (code, found, c_none, c_wrong, c_absent)) + return found + + +# ============================================================================================= +class LubeLogger: + """LubeLogger (2026-10-10, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is the app's own login + form plus its REST API, both of which exist only because our template turns authentication ON: the image + ships `EnableAuth: false`, and with that an anonymous stranger is handed the `IsRootUser` role (measured + on the bench 2026-10-10: a stranger created a vehicle through `POST /Vehicle/SaveVehicle`). The container + entrypoint exports `EnableAuth=true` plus the SHA-256 of the generated name and password, so BOTH VENUES + behave the same here — unlike grocy, nothing depends on `after_install`. + + Seed, through the app's own routes: sign in at `POST /Login/Login`, create a vehicle with a marker plate + at `POST /Vehicle/SaveVehicle`, then add a service record with a marker description at + `POST /api/vehicle/servicerecords/add` — so the seed covers the vehicle table AND a child record. + + Readback asks the APP: `GET /api/vehicles` must still carry the plate, and + `GET /api/vehicle/servicerecords?vehicleId=` must still carry the description and the cost. + + THE FIXTURE PROVES ITSELF ON EVERY VERIFY: no cookie must be 401, a session minted from a WRONG password + must be 401, and a vehicleId that cannot exist must answer an EMPTY list (measured: 200 `[]`). If any + control misreads, the readback is unusable rather than passed. + """ + sub = "garazs" + + @staticmethod + def _creds(w): + g = w.GENERATED.get("lubelogger") or {} + return g.get("ROOT_USER") or "csalad", g.get("ROOT_PASSWORD") or "" + + def _session(self, w, sub, user, pw): + rc, code, out = w.app_curl(sub, "/Login/Login", "-D", "-", "-o", "/dev/null", + "-H", "Content-Type: application/x-www-form-urlencoded", + data="UserName=%s&Password=%s" % (user, pw), method="POST") + return _set_cookies(out) if rc == 0 else "" + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/Login/Index", want=("200",), tries=72): + self.tried = "/Login/Index never answered 200" + return None + user, pw = self._creds(w) + if not pw: + self.tried = "no generated ROOT_PASSWORD for lubelogger in this run" + return None + ck = self._session(w, sub, user, pw) + if not ck: + self.tried = "POST /Login/Login gave no session cookie" + say(" lubelogger: login gave no session cookie") + return None + plate = "FEL-" + secrets.token_hex(3).upper() + desc = "Felhom teszt szerviz " + secrets.token_hex(3) + rc, code, out = w.app_curl(sub, "/Vehicle/SaveVehicle", "-H", "Cookie: " + ck, + "-H", "Content-Type: application/x-www-form-urlencoded", + data=("Year=2019&Make=Skoda&Model=Octavia&LicensePlate=%s" + "&IsElectric=false&IsDiesel=true&UseHours=false" % plate), + method="POST") + say(" lubelogger: POST /Vehicle/SaveVehicle http=%s :: %s" % (code, (out or "")[:100])) + if code != "200" or '"success":true' not in (out or ""): + self.tried = "SaveVehicle -> %s %s" % (code, (out or "")[:120]) + return None + rc, code, out = w.app_curl(sub, "/api/vehicles", "-H", "Cookie: " + ck) + vid = None + try: + for v in json.loads(out or "[]"): + if str(v.get("licensePlate")) == plate: + vid = str(v.get("id")) + except ValueError: + pass + if not vid: + self.tried = "the new vehicle did not come back from /api/vehicles" + say(" lubelogger: " + self.tried) + return None + rc, code, out = w.app_curl(sub, "/api/vehicle/servicerecords/add", "-H", "Cookie: " + ck, + "-H", "Content-Type: application/x-www-form-urlencoded", + data=("vehicleId=%s&date=2026-10-01&odometer=123456&description=%s" + "&cost=19900¬es=felhom-fixture" + % (vid, desc.replace(" ", "+"))), method="POST") + say(" lubelogger: POST servicerecords/add http=%s :: %s" % (code, (out or "")[:110])) + if code != "200" or '"success":true' not in (out or ""): + self.tried = "servicerecords/add -> %s" % code + return None + return {"user": user, "pw": pw, "plate": plate, "vid": vid, "desc": desc, "cost": "19900"} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/Login/Index", want=("200",), tries=72): + say(" lubelogger: /Login/Index never answered") + return False + rc, c_none, _ = w.app_curl(sub, "/api/vehicles") + bad = self._session(w, sub, t["user"], t["pw"] + "x") + rc, c_wrong, _ = w.app_curl(sub, "/api/vehicles", *(["-H", "Cookie: " + bad] if bad else [])) + ck = self._session(w, sub, t["user"], t["pw"]) + if not ck: + say(" lubelogger: the household's own password no longer signs in after the step") + return False + rc, c_absent, absent_body = w.app_curl(sub, "/api/vehicle/servicerecords?vehicleId=999999", + "-H", "Cookie: " + ck) + empty = c_absent == "200" and (absent_body or "").strip() in ("[]", "[ ]") + if c_none != "401" or c_wrong != "401" or not empty: + say(" lubelogger: READBACK UNUSABLE - no cookie %s, wrong password %s, absent vehicle %s %s" + % (c_none, c_wrong, c_absent, (absent_body or "")[:40])) + return False + rc, code, out = w.app_curl(sub, "/api/vehicles", "-H", "Cookie: " + ck) + plate_ok = code == "200" and ('"%s"' % t["plate"]) in (out or "") + rc, code2, out2 = w.app_curl(sub, "/api/vehicle/servicerecords?vehicleId=%s" % t["vid"], + "-H", "Cookie: " + ck) + rec_ok = code2 == "200" and t["desc"] in (out2 or "") and t["cost"] in (out2 or "") + say(" lubelogger: readback vehicle=%s (http=%s) service record=%s (http=%s) " + "(controls: no cookie %s, wrong %s, absent list empty)" + % (plate_ok, code, rec_ok, code2, c_none, c_wrong)) + return bool(plate_ok and rec_ok) + +# ============================================================================================= +class Grimmory: + """Grimmory (2026-10-01, new app through NEW-APP-CHECKLIST.md). THE FRONT DOOR is the app's own API, the one its web + client calls: the first admin by `POST /api/v1/setup` (through the setup gate on the box, as the household), sign in + with `POST /api/v1/auth/login` (a bearer token), a library on `/books`, and a real EPUB (built here, with a unique + title) uploaded with `POST /api/v1/files/upload` — the app writes it into the household's book folder. Read back: + `GET /api/v1/books` lists the title. Negative controls on every readback: no token 401, a wrong password 401, and a + second `POST /api/v1/setup` refused (403) — the readback is not an open door.""" + sub = "library" + + @staticmethod + def _epub(title): + import io as _io, zipfile + b = _io.BytesIO() + z = zipfile.ZipFile(b, "w") + z.writestr(zipfile.ZipInfo("mimetype"), "application/epub+zip") + z.writestr("META-INF/container.xml", '') + z.writestr("OEBPS/content.opf", f'{title}Felhom{title}hu') + z.writestr("OEBPS/c1.xhtml", 'c

Szia!

') + z.close() + return b.getvalue() + + def _token(self, w, sub, user, pw): + rc, code, out = w.app_curl(sub, "/api/v1/auth/login", "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "password": pw}), method="POST") + try: + return code, json.loads(out).get("accessToken") + except Exception: + return code, None + + def seed(self, w, sub, say): + import tempfile + if not w.wait_app(sub, "/api/v1/healthcheck", want=("200",), tries=90): + self.tried = "/api/v1/healthcheck never answered 200" + return None + user, pw = "admin", "Gm-" + secrets.token_hex(10) + rc, code, out = w.app_curl(sub, "/api/v1/setup", "-H", "Content-Type: application/json", + data=json.dumps({"username": user, "password": pw, "email": "admin@felhom.invalid", "name": "Felhom"}), method="POST") + say(f" grimmory: POST /api/v1/setup (the first admin) http={code}") + if code != "200": + self.tried = f"setup -> {code} {(out or '')[:120]}" + return None + code, tok = self._token(w, sub, user, pw) + if not tok: + self.tried = f"login -> {code}" + return None + auth = ["-H", f"Authorization: Bearer {tok}"] + rc, code, out = w.app_curl(sub, "/api/v1/libraries", *auth, "-H", "Content-Type: application/json", + data=json.dumps({"name": "Konyvek", "icon": "book", "iconType": "LUCIDE", "paths": [{"path": "/books"}], + "watch": True, "metadataSource": "EMBEDDED", "organizationMode": "BOOK_PER_FILE"}), method="POST") + try: + lib = json.loads(out) + lid, pid = lib["id"], lib["paths"][0]["id"] + except Exception: + self.tried = f"create library -> {code} {(out or '')[:120]}" + return None + title = "Felhom Teszt " + secrets.token_hex(4) + fn = tempfile.mktemp(suffix=".epub") + open(fn, "wb").write(self._epub(title)) + if hasattr(w, "put_file"): + fn = w.put_file(fn) + rc, code, out = w.app_curl(sub, "/api/v1/files/upload", *auth, "-F", f"file=@{fn};type=application/epub+zip", + "-F", f"libraryId={lid}", "-F", f"pathId={pid}", method="POST") + say(f" grimmory: library {lid}, upload of an EPUB http={code}") + if code not in ("200", "201", "204"): + self.tried = f"upload -> {code} {(out or '')[:120]}" + return None + return {"user": user, "pw": pw, "title": title} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/api/v1/healthcheck", want=("200",), tries=90): + say(" grimmory: /api/v1/healthcheck never answered") + return False + rc, c_none, _ = w.app_curl(sub, "/api/v1/books") + c_wrong, _ = self._token(w, sub, t["user"], t["pw"] + "x") + rc, c_setup, _ = w.app_curl(sub, "/api/v1/setup", "-H", "Content-Type: application/json", + data=json.dumps({"username": "x" + secrets.token_hex(2), "password": "Gm-" + secrets.token_hex(8), + "email": "x@felhom.invalid", "name": "X"}), method="POST") + if c_none != "401" or c_wrong != "401" or c_setup != "403": + say(f" grimmory: READBACK UNUSABLE — no token {c_none}, wrong password {c_wrong}, second setup {c_setup}") + return False + code, tok = self._token(w, sub, t["user"], t["pw"]) + found = False + for _ in range(12): + rc, code, out = w.app_curl(sub, "/api/v1/books", "-H", f"Authorization: Bearer {tok}") + found = code == "200" and t["title"] in (out or "") + if found: + break + time.sleep(5) + say(f" grimmory: readback http={code} found={found} (controls: no token {c_none}, wrong {c_wrong}, second setup {c_setup})") + return found + + +class MeTube: + """MeTube (2026-10-02, new app through NEW-APP-CHECKLIST.md, published behind the family gate). THE FRONT DOOR is its + own web API, the one its page calls: `POST /add` a link, then `GET /history` until the item is `finished`; the file is + served back at `GET /download/`. The link is a 1 MB public test video (yt-dlp's generic extractor — no + video-service account, no cookies). Negative control on every readback: a file never downloaded answers 404, so a + read that says "found" cannot be a catch-all. On the box the family gate is passed as the household (box_walk).""" + sub = "video" + URL = "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4" + + @classmethod + def add_body(cls): + """The `POST /add` body. `download_type` is listed as REQUIRED by upstream's validator; 2026.09.28/.29 answered + 200 without it (R-799), a later tag may not. Pinned by test_upgrade_fixtures_metube.py.""" + return {"url": cls.URL, "download_type": "video", "quality": "best", "format": "any", "auto_start": True} + + def _hist(self, w, sub): + rc, code, out = w.app_curl(sub, "/history") + try: + return code, json.loads(out) + except Exception: + return code, {} + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200",), tries=60): + self.tried = "/ never answered 200" + return None + rc, code, out = w.app_curl(sub, "/add", "-H", "Content-Type: application/json", "-H", f"Origin: https://{sub}.{w.DOMAIN}", + data=json.dumps(self.add_body()), method="POST") + say(f" metube: POST /add http={code} {(out or '')[:40]}") + if code != "200": + self.tried = f"add -> {code} {(out or '')[:80]}" + return None + for _ in range(60): + code, h = self._hist(w, sub) + done = [d for d in h.get("done", []) if d.get("url") == self.URL and d.get("status") == "finished"] + if done: + fn = done[0].get("filename") or (done[0].get("title", "") + ".mp4") + say(f" metube: the download finished ({done[0].get('size')} bytes)") + return {"filename": fn, "size": done[0].get("size")} + time.sleep(3) + self.tried = "the download never finished" + return None + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200",), tries=60): + say(" metube: / never answered") + return False + import urllib.parse + rc, c_absent, _ = w.app_curl(sub, "/download/never-" + secrets.token_hex(4) + ".mp4") + if c_absent != "404": + say(f" metube: READBACK UNUSABLE — a file never downloaded answered {c_absent}") + return False + code, h = self._hist(w, sub) + in_hist = any(d.get("url") == self.URL and d.get("status") == "finished" for d in h.get("done", [])) + rc, code, out = w.app_curl(sub, "/download/" + urllib.parse.quote(t["filename"]), "-o", "/dev/null") + say(f" metube: history has it={in_hist}; GET /download/ http={code}") + return code == "200" and in_hist + + +# The NZB both Usenet box fixtures seed with: article names that do not exist, because without a +# paid provider nothing can be fetched anyway and what is being measured is the QUEUE. +BOX_NZB = ( + '\n' + '\n' + '%(name)s\n' + '\n' + 'alt.binaries.test\n' + '%(name)s-1@example.invalid\n' + '\n\n' +) + + +class SABnzbdBox: + """SABnzbd through traefik, with the household's own generated API key. + + The web UI is session-based and requires a login for every proxied visitor (this template sets + local_ranges so that nothing a proxy presents counts as local), but the API authenticates with + the key - which is the route Radarr and Sonarr use, so it is the route the fixture uses too. + Both stores are seeded: a queued job (the queue index, /config/admin/queue10.sab) and a category + (sabnzbd.ini).""" + sub = "usenet" + + def _key(self, w): + """The key the household was given. `walk.GENERATED` does not hold it - deploy_values skips + an OPTIONAL `type: secret` field, because the controller generates those itself - so the box + is asked for the value out of the app's own app.yaml, which is where the household reads it + too (measured on 9202, 2026-10-12: the first run had no key and could not seed).""" + k = (w.GENERATED.get("sabnzbd") or {}).get("SAB_API_KEY", "") + if k: + return k + # app.yaml stores a deploy secret ENCRYPTED (`SAB_API_KEY: ENC:...`), so app_env returns + # ciphertext and the app answers "API Key Incorrect" (measured on 9202, 2026-10-12). The + # value the APP holds is in its own environment - the same place the bench fixture reads it. + return w.guest("docker exec sabnzbd printenv SAB_API_KEY").strip() + + def _pw(self, w): + p = (w.GENERATED.get("sabnzbd") or {}).get("SAB_ADMIN_PASSWORD", "") + return p or w.guest("docker exec sabnzbd printenv SAB_ADMIN_PASSWORD").strip() + + def _api(self, w, sub, query, say, extra=None): + key = self._key(w) + if not key: + say(" sabnzbd: this run holds no generated API key for the app") + return "", "" + args = ["curl", "-sSk", "--max-time", "40", "-H", f"Host: {sub}.{w.DOMAIN}", + "-w", "\n%{http_code}"] + if extra: + args += extra + args.append(f"{w.BASE}/api?output=json&apikey={key}&{query}") + r = w.sh(args) + out, _, code = (r.stdout or "").rpartition("\n") + return code.strip(), out + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "303", "401", "403")): + return None + name = "felhom" + secrets.token_hex(4) + # the NZB is written on the harness host and posted through the front door + path = os.path.join(w.SC, name + ".nzb") + with open(path, "w") as f: + f.write(BOX_NZB % {"name": name}) + code, out = self._api(w, sub, "mode=addfile", say, + extra=["-F", f"name=@{path}", "-F", f"nzbname={name}"]) + ok = code == "200" and '"status"' in out and "true" in out + say(f" sabnzbd: addfile {name} http={code} ok={ok}") + if not ok: + say(f" sabnzbd: refused {out[:200]}") + return None + code, out = self._api(w, sub, + f"mode=set_config§ion=categories&keyword={name}&name={name}&dir={name}", say) + if code != "200": + say(f" sabnzbd: the category was refused (http={code}) {out[:160]}") + return None + say(f" sabnzbd: category {name} created") + return {"name": name} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "303", "401", "403"), tries=36): + return False + code, out = self._api(w, sub, "mode=queue", say) + if code != "200": + say(f" sabnzbd: mode=queue http={code}") + return False + ghost = "felhom" + secrets.token_hex(4) + if ghost in out: + say(" sabnzbd: READBACK UNUSABLE - a job nobody queued is present") + return False + if t["name"] not in out: + say(f" sabnzbd: the queued job {t['name']} is GONE") + return False + code, out = self._api(w, sub, "mode=get_config§ion=categories", say) + ok = code == "200" and t["name"] in out + say(f" sabnzbd: job kept, category present={ok}") + return ok + + +class NZBGetBox: + """NZBGet through traefik, with the household's own generated password over Basic auth. + + One store, and it is the one that matters: the queue, which this template keeps in the config + volume (the app ships it on the drive, which the backup classification calls optional).""" + sub = "nzbget" + + def _pw(self, w): + p = (w.GENERATED.get("nzbget") or {}).get("NZB_ADMIN_PASSWORD", "") + # app.yaml keeps deploy secrets encrypted, so the app's own environment is the source + return p or w.guest("docker exec nzbget printenv NZBGET_PASS").strip() + + def _rpc(self, w, sub, say, payload_file=None, path=""): + pw = self._pw(w) + if not pw: + say(" nzbget: this run holds no generated password for the app") + return "", "" + args = ["curl", "-sSk", "--max-time", "40", "-H", f"Host: {sub}.{w.DOMAIN}", + "-u", f"admin:{pw}", "-w", "\n%{http_code}"] + if payload_file: + args += ["-H", "Content-Type: application/json", "--data", "@" + payload_file] + args.append(f"{w.BASE}/jsonrpc/{path}") + r = w.sh(args) + out, _, code = (r.stdout or "").rpartition("\n") + return code.strip(), out + + def seed(self, w, sub, say): + if not w.wait_app(sub, "/", want=("200", "401")): + return None + name = "felhom" + secrets.token_hex(4) + nzb = (BOX_NZB % {"name": name}).encode() + payload = json.dumps({"method": "append", + "params": [name + ".nzb", base64.b64encode(nzb).decode(), "", + 0, False, True, "", 0, "SCORE", []], + "id": 1}) + pf = os.path.join(w.SC, name + ".json") + with open(pf, "w") as f: + f.write(payload) + code, out = self._rpc(w, sub, say, payload_file=pf) + ok = code == "200" and '"result" : -1' not in out and '"result":-1' not in out + say(f" nzbget: append {name} http={code} ok={ok}") + if not ok: + say(f" nzbget: refused {out[:200]}") + return None + return {"name": name} + + def verify(self, w, sub, t, say): + if not w.wait_app(sub, "/", want=("200", "401"), tries=36): + return False + code, out = self._rpc(w, sub, say, path="listgroups") + if code != "200": + say(f" nzbget: listgroups http={code}") + return False + ghost = "felhom" + secrets.token_hex(4) + if ghost in out: + say(" nzbget: READBACK UNUSABLE - a job nobody queued is present") + return False + ok = t["name"] in out + say(f" nzbget: the queued job is present={ok}") + return ok + + +FIXTURES = { + "uptime-kuma": UptimeKuma(), + "crafty-controller": Crafty(), + "wger": Wger(), + "calibre-web": CalibreWeb(), + "sparkyfitness": Sparkyfitness(), + "metube": MeTube(), + "rallly": Rallly(), + "outline": Outline(), + "home-assistant": HomeAssistant(), + "romm": Romm(), + "vikunja": Vikunja(), + "opengist": OpenGist(), + "papra": Papra(), + "mealie": Mealie(), + "n8n": N8n(), + "zipline": Zipline(), + "grafana": Grafana(), + "audiobookshelf": AudiobookShelf(), + "actualbudget": ActualBudget(), + "nextcloud": Nextcloud(), + "adventurelog": Django("adventurelog", "travel", "/admin/login/"), + "tandoor": Django("tandoor", "recipes", "/accounts/login/", + python="/opt/recipes/venv/bin/python", workdir="/opt/recipes"), + # 2026-09-26 (version-travel Part B): paperless-ngx is Django too — `manage.py` in its WORKDIR + # (/usr/src/paperless/src), python3 on PATH; measured on 9202 (the readback answered False for a + # username that cannot exist) before this line was written. + "paperless-ngx": Django("paperless-webserver", "paperless", "/accounts/login/"), + "privatebin": PrivateBin(), + "docmost": Docmost(), + "bookstack": BookStack(), + "gitea": Gitea(), + "navidrome": Navidrome(), + "vaultwarden": Vaultwarden(), + "wishlist": Wishlist(), + "claper": Claper(), + "calcom": Calcom(), + "radicale": Radicale(), + "karakeep": Karakeep(), + "dawarich": Dawarich(), + "grimmory": Grimmory(), + "grocy": Grocy(), + "lubelogger": LubeLogger(), + "qbittorrent": QBittorrentBox(), + "prowlarr": ProwlarrBox(), + "transmission": TransmissionBox(), + "sabnzbd": SABnzbdBox(), + "nzbget": NZBGetBox(), +} diff --git a/documentation/audits/catalog-sweep-2026-10-24/tools/vmctl.sh b/documentation/audits/catalog-sweep-2026-10-24/tools/vmctl.sh new file mode 100755 index 00000000..43607833 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/tools/vmctl.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# vmctl.sh — drive a nested VM's console on demo-hp from DooPlex (rehearsal 2026-10-20). +# The installer keeps the HUNGARIAN keyboard (as a household would), so characters are sent as the +# scancodes a Hungarian-layout keyboard produces: y<->z swapped, '-' on the US '/' key, '0' on the +# US '`' key, '@' = AltGr+V. Only the characters below are supported — anything else is refused. +# +# vmctl.sh shot console screenshot (QEMU screendump → PNG on DooPlex) +# vmctl.sh key ... send raw keys (e.g. ret, tab, right, alt-n) +# vmctl.sh type type text with the Hungarian mapping +# vmctl.sh typevar type the value of an env var (use inside `sec run`; never echoed) +set -euo pipefail +VMID=$1; CMD=$2; shift 2 +HOST=${VMHOST:-demo-hp} + +map_char() { + local c=$1 + case "$c" in + [a-x]) echo "$c" ;; + y) echo "z" ;; z) echo "y" ;; + [A-X]) echo "shift-${c,,}" ;; + Y) echo "shift-z" ;; Z) echo "shift-y" ;; + [1-9]) echo "$c" ;; + 0) echo "grave_accent" ;; + .) echo "dot" ;; + ,) echo "comma" ;; + -) echo "slash" ;; + _) echo "shift-slash" ;; + @) echo "alt_r-v" ;; + " ") echo "spc" ;; + *) echo "UNSUPPORTED" ;; + esac +} + +send_text() { + local s=$1 keys=() k i + for (( i=0; i<${#s}; i++ )); do + k=$(map_char "${s:$i:1}") + if [ "$k" = UNSUPPORTED ]; then echo "vmctl: unsupported character at position $i" >&2; exit 2; fi + keys+=("$k") + done + # one ssh, one qm sendkey per key (qm sendkey takes one key combo) + printf '%s\n' "${keys[@]}" | ssh "$HOST" "while read -r k; do LC_ALL=C qm sendkey $VMID \"\$k\" >/dev/null 2>&1 || exit 3; sleep 0.08; done" +} + +case "$CMD" in + shot) + out=$1 + ssh "$HOST" "rm -f /tmp/vmshot-$VMID.ppm; echo 'screendump /tmp/vmshot-$VMID.ppm' | LC_ALL=C qm monitor $VMID >/dev/null 2>&1; sleep 1; cat /tmp/vmshot-$VMID.ppm" > "$out.ppm" + convert "$out.ppm" "$out"; rm -f "$out.ppm"; echo "shot: $out" ;; + key) + for k in "$@"; do ssh "$HOST" "LC_ALL=C qm sendkey $VMID '$k'"; sleep 0.3; done ;; + type) + send_text "$1" ;; + typevar) + v=${!1:-}; [ -n "$v" ] || { echo "vmctl: env $1 empty" >&2; exit 2; } + send_text "$v" ;; + *) echo "usage: see header" >&2; exit 1 ;; +esac diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission.console.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission.console.txt new file mode 100644 index 00000000..0be88c68 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission.console.txt @@ -0,0 +1,15 @@ +14:39:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'TR_ADMIN_PASSWORD'] +14:39:44Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:40:04Z [1] deployed, controller state=running, pinned={'transmission': 'lscr.io/linuxserver/transmission:version-4.1.3-r0'} +14:40:04Z [1] installed: deployed 20 s, front door 20 s +14:40:04Z transmission: session-set speed-limit-down=529 http=200 +14:40:04Z transmission: torrent-add http=200 ok=True +14:40:05Z transmission: limit kept, torrent present=True +14:40:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:41:05Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'transmission', 'volumes_removed': ['transmission_transmission_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_ +14:41:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['TR_ADMIN_PASSWORD', 'HDD_PATH'] +14:41:29Z transmission: the seeded limit 529 is GONE +14:41:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:41:45Z transmission: limit kept, torrent present=True +14:42:27Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'transmission', 'volumes_removed': ['transmission_transmission_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_ +14:42:36Z == transmission done in 172 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-en.txt new file mode 100644 index 00000000..8145675f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-en.txt @@ -0,0 +1 @@ +Transmission — Guide — Felhom.eu ← Apps Transmission Simple torrent downloading, on almost no resources ● Running transmission.tester4.test Open ↗ Files ↗ What is it for? Download torrents to your own drive from a simple interface You see the finished files in the file browser and in your media player It uses very little: it fits on a small machine beside everything else If you want full control (queues, scheduling, detailed rules), qBittorrent is the stronger choice First steps Open transmission.tester4.test and sign in as admin with the password generated at install Finished downloads land on your drive, in the media/transmission/complete folder. Sonarr and Radarr take them from there without using extra space Download only what you have the right to. Downloads go out from your household's internet address, and by the nature of a torrent the other participants see that address. Before you start Downloading uses your household's internet connection, and so does the uploading It accepts no incoming connections, because the box opens no port at home. Downloading works anyway: measured at 34 seeds and 4 MB/s on a well-seeded torrent. Only poorly seeded torrents are slower, and you upload less. If you want it, you can switch port forwarding on yourself in the app's own settings Add a torrent Add only a torrent whose content you have the right to, for example a Linux installer from its publisher's own site. Select „Open” in the bar at the top: the „Add Torrents” window opens. Choose the torrent file, or paste the torrent or magnet link into the URL box. Leave „Start when added” ticked and select „Add”. A torrent file in the watched folder Transmission starts a torrent file by itself when you put it into its watched folder. In the file browser, open the media/transmission/watch folder on the downloads drive. Upload the torrent file there. A few seconds later the torrent appears in Transmission's list and starts. Stop and remove You can stop or remove a torrent at any time. Select the torrent and select „Pause”. „Start” carries on. To remove it, select „Delete”, then „Remove”. The downloaded files stay. To delete the files as well, right-click the torrent and choose „Trash data and remove from list…”. Slower downloads by day You can make it use less of your internet line during the day. Select the menu button in the bar at the top, then „Edit preferences”. Open the „Speed” tab, and under „Alternative Speed Limits” enter lower values. Tick „Scheduled times” and set when and on which days it applies. The setting applies at once; there is no separate save. Frequently asked questions Do I have to connect it to Sonarr and Radarr? No. For every drive, the box connected Transmission to Sonarr and Radarr. What they ask for goes into the media/transmission/tv or media/transmission/movies folder of that drive. If I remove the torrent, does the film leave the library too? No. Sonarr and Radarr put the same file into the library under a second name, and that stays after the torrent and its files are deleted. Can I switch on the temporary folder? Do not. „Use temporary folder:” is one folder for every drive, so every download bound for another drive would have to be copied over at the end. The box switches it off at every start. Can I change where it saves? Do not. Transmission sees only the media/transmission folder on your drives; a file saved anywhere else is not on the drive, and Sonarr and Radarr cannot find it. A setting was lost after a power cut. Why? Transmission writes its settings only when it shuts down properly. After a power cut, check your settings and enter them again if needed. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-hu.txt new file mode 100644 index 00000000..68ffbf51 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-guide-hu.txt @@ -0,0 +1 @@ +Transmission — Felhom.eu ← Alkalmazások Transmission Torrent letöltés egyszerűen, alig észrevehető erőforrásból ● Fut transmission.tester4.test Megnyitás ↗ Fájlok ↗ Mire használható? Torrentek letöltése a saját meghajtódra, egyszerű felületről A kész fájlokat a fájlböngészőben és a médialejátszódban is látod Nagyon keveset fogyaszt: kisebb gépen is elfér a többi alkalmazás mellett Ha a teljes vezérlést szeretnéd (sorok, ütemezés, részletes szabályok), a qBittorrent az erősebb választás Első lépések Nyisd meg a transmission.tester4.test címet, és lépj be az admin névvel és a telepítéskor kapott jelszóval A kész letöltések a meghajtódon, a media/transmission/complete mappába kerülnek. A Sonarr és a Radarr innen veszi át őket, külön hely nélkül Csak olyan tartalmat tölts le, amihez jogod van. A letöltés a háztartásod internetcíméről történik, és a torrent természetéből adódóan a többi résztvevő látja a címedet. Előfeltételek A letöltés a háztartásod internetkapcsolatát használja, és a feltöltés is onnan megy Befelé irányuló kapcsolatot nem fogad, mert a doboz otthon egyetlen portot sem nyit. A letöltés ettől működik: mérve 34 forrás és 4 MB/s egy jól ellátott torrenten. Csak a kevés forrású torrentek lassabbak, és keveset tudsz visszatölteni. Ha szeretnéd, az alkalmazás saját beállításaiban te magad bekapcsolhatod a port-nyitást Torrent hozzáadása Csak olyan torrentet adj hozzá, amelynek a tartalmához jogod van, például egy Linux telepítőét a kiadó saját oldaláról. Kattints a felső sávban az „Open” (megnyitás) gombra: megnyílik az „Add Torrents” (torrentek hozzáadása) ablak. Válaszd ki a torrentfájlt, vagy illeszd be a torrent vagy a magnet linkjét az URL mezőbe. Hagyd bejelölve a „Start when added” (indítás hozzáadáskor) jelölőt, és kattints az „Add” (hozzáadás) gombra. Torrentfájl a figyelt mappába A Transmission magától elindítja a torrentfájlt, amelyet a figyelt mappájába teszel. Nyisd meg a fájlböngészőben a letöltések meghajtóján a media/transmission/watch mappát. Töltsd fel ide a torrentfájlt. Néhány másodperc múlva a torrent megjelenik a Transmission listájában, és elindul. Leállítás és törlés Egy torrentet bármikor megállíthatsz vagy eltávolíthatsz. Jelöld ki a torrentet, és kattints a „Pause” (szünet) gombra. A „Start” (indítás) folytatja. Eltávolításhoz kattints a „Delete” (törlés) gombra, majd a „Remove” (eltávolítás) gombra. A letöltött fájlok megmaradnak. Ha a fájlokat is törölnéd, kattints jobb gombbal a torrentre, és válaszd a „Trash data and remove from list…” (fájlok törlése és eltávolítás) pontot. Lassabb letöltés napközben Beállíthatod, hogy napközben kevésbé terhelje az internetkapcsolatodat. Kattints a felső sávban a menü gombra, majd az „Edit preferences” (beállítások) pontra. Nyisd meg a „Speed” (sebesség) lapot, és az „Alternative Speed Limits” (másodlagos korlát) részben adj meg alacsonyabb értékeket. Jelöld be a „Scheduled times” (ütemezés) jelölőt, és add meg, mikor és mely napokon legyen érvényes. A beállítás azonnal érvényes, külön mentés nem kell. Gyakori kérdések Be kell állítanom a Sonarr és a Radarr kapcsolatát? Nem. A doboz minden meghajtódhoz bekötötte a Transmissiont a Sonarrba és a Radarrba. Amit ők kérnek, az a meghajtó media/transmission/tv vagy media/transmission/movies mappájába kerül. Ha eltávolítom a torrentet, eltűnik a film a könyvtárból is? Nem. A Sonarr és a Radarr ugyanazt a fájlt egy második néven tette a könyvtárba, ez a torrent és a fájljai törlése után is megmarad. Bekapcsolhatom az ideiglenes mappát? Ne tedd. A „Use temporary folder:” (ideiglenes mappa) egyetlen mappa minden meghajtónak, így minden más meghajtóra menő letöltést a végén át kellene másolni. A doboz minden indításkor kikapcsolja. Megváltoztathatom, hová mentsen? Ne tedd. A Transmission csak a media/transmission mappát látja a meghajtóidon, máshová mentett fájl nem a meghajtóra kerül, és a Sonarr meg a Radarr sem találja. Áramszünet után elveszett egy beállításom. Miért? A Transmission a beállításait csak szabályos leálláskor írja ki. Áramszünet után nézd meg a beállításaidat, és ha kell, add meg őket újra. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-en.txt new file mode 100644 index 00000000..2cb16b2f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-en.txt @@ -0,0 +1 @@ +Transmission — Install — Felhom.eu ← Back Transmission — Install A simple torrent downloader that barely uses the machine ~64M RAM Needs a hard drive Full description, screenshots Memory 64 MB / 7479 MB (0%) Current usage (0 MB) Transmission (+64 MB) The app’s data goes to the data drive chosen below. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Sign-in password * cannot be changed after install 👁 Generate The web interface password (username: admin). Generated at install; the box uses it to link the downloader with Sonarr and Radarr. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-hu.txt new file mode 100644 index 00000000..b7b528cf --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-install-hu.txt @@ -0,0 +1 @@ +Transmission — Telepítés — Felhom.eu ← Vissza Transmission — Telepítés Egyszerű torrent letöltő, kevés erőforrásból ~64M RAM HDD szükséges Részletes leírás, képernyőképek Memória 64 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Transmission (+64 MB) Az alkalmazás adatai az alább kiválasztott adatmeghajtóra kerülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Belépési jelszó * telepítés után nem módosítható 👁 Generálás A webes felület jelszava (felhasználónév: admin). A telepítéskor készül, és a doboz ezzel köti össze a letöltőt a Sonarrral és a Radarrral. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-en.txt new file mode 100644 index 00000000..e5306ffb --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-en.txt @@ -0,0 +1 @@ +Transmission — Settings — Felhom.eu ← Apps Transmission Simple torrent downloading, on almost no resources ● Running transmission.tester4.test Open ↗ Files ↗ Running Running Restart Stop Signing in to the app For the first sign-in. If you change the password in the app, the old one stays here. Sign-in password Show Address and keys These were created at install time and cannot be changed. Address transmission.tester4.test Storage Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-hu.txt new file mode 100644 index 00000000..230aa346 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/page-overview-hu.txt @@ -0,0 +1 @@ +Transmission — Felhom.eu ← Alkalmazások Transmission Torrent letöltés egyszerűen, alig észrevehető erőforrásból ● Fut transmission.tester4.test Megnyitás ↗ Fájlok ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az első bejelentkezéshez. Ha az alkalmazásban megváltoztatod a jelszót, itt a régi marad. Belépési jelszó Megjelenítés Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím transmission.tester4.test Tárhely Külső tárhely (hdd_1) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/record.json b/documentation/audits/catalog-sweep-2026-10-24/transmission/record.json new file mode 100644 index 00000000..0fa3da6a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/record.json @@ -0,0 +1,130 @@ +{ + "app": "transmission", + "sub": "transmission", + "fixture": "TransmissionBox", + "started": "2026-10-24T14:39:27Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "HDD_PATH", + "path", + true + ], + [ + "TR_ADMIN_PASSWORD", + "password", + true + ] + ], + "install_page": { + "path": "/apps/transmission/install", + "hu_len": 987, + "en_len": 921, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/transmission/install -> 200 'Transmission — Telepítés — Felhom.eu' | shot /root/shots/transmission-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/transmission/install -> 200 'Transmission — Telepítés — Felhom.eu' | shot /root/shots/transmission-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 20, + "front_door": true, + "seconds_to_front_door": 20 + }, + "stranger": "401", + "http_port_80": "301 https://transmission.tester4.test/", + "guide": { + "path": "/apps/transmission/guide", + "hu_len": 4133, + "en_len": 3681, + "english_words_in_hu": [ + "and", + "open" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/transmission", + "hu_len": 469, + "en_len": 455, + "english_words_in_hu": [], + "accented_in_en": 3, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/transmission/guide -> 200 'Transmission — Felhom.eu' | shot /root/shots/transmission-after-guide-phone-hu.png hscroll=False", + "STEP FAILED {'goto': 'https://transmission.tester4.test/', 'until': 'load'}: Error: Page.goto: net::ERR_INVALID_AUTH_CREDENTIALS at https://transmission.tester4" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"5.327514644s\", \"last_run\": \"2026-10-24T14:40:24.827374382Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"transmission\", \"started_at\": \"2026-10-24T14:41:29.853837603Z\", \"last\": {\"op\": \"restore\", \"stack\": \"transmission\", \"ok\": true, \"message\": \"A(z) transmission: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:41:44.19114893Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "transmission": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "transmission": 6.2 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 172 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-after-guide-phone-hu.png new file mode 100644 index 00000000..45012dd8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-desktop-en.png new file mode 100644 index 00000000..ba126976 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-phone-hu.png new file mode 100644 index 00000000..2207778b Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/transmission/screens/transmission-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/transmission/walk.log b/documentation/audits/catalog-sweep-2026-10-24/transmission/walk.log new file mode 100644 index 00000000..0be88c68 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/transmission/walk.log @@ -0,0 +1,15 @@ +14:39:44Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'TR_ADMIN_PASSWORD'] +14:39:44Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:40:04Z [1] deployed, controller state=running, pinned={'transmission': 'lscr.io/linuxserver/transmission:version-4.1.3-r0'} +14:40:04Z [1] installed: deployed 20 s, front door 20 s +14:40:04Z transmission: session-set speed-limit-down=529 http=200 +14:40:04Z transmission: torrent-add http=200 ok=True +14:40:05Z transmission: limit kept, torrent present=True +14:40:19Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:41:05Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'transmission', 'volumes_removed': ['transmission_transmission_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_ +14:41:14Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['TR_ADMIN_PASSWORD', 'HDD_PATH'] +14:41:29Z transmission: the seeded limit 529 is GONE +14:41:29Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:41:45Z transmission: limit kept, torrent present=True +14:42:27Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'transmission', 'volumes_removed': ['transmission_transmission_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': ['/mnt/felhom-drives/hdd_ +14:42:36Z == transmission done in 172 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma.console.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma.console.txt new file mode 100644 index 00000000..ba9c8308 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma.console.txt @@ -0,0 +1,14 @@ +14:05:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:06:35Z [1] deployed, controller state=running, pinned={'uptime-kuma': 'louislam/uptime-kuma:2.5.5'} +14:06:35Z gate: status is gated — passed as the household (cookie set) +14:06:35Z [1] installed: deployed 76 s, front door 76 s +14:06:36Z uptime-kuma: setup ok=True successAdded +14:06:36Z uptime-kuma: addStatusPage ok=True successAdded +14:06:36Z uptime-kuma: readback of the seeded status page http=200 found=True +14:06:55Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:07:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messag +14:09:51Z uptime-kuma: readback of the seeded status page http=404 found=False +14:09:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:10:06Z uptime-kuma: readback of the seeded status page http=200 found=True +14:10:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ada +14:10:57Z == uptime-kuma done in 337 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-en.txt new file mode 100644 index 00000000..d15f5361 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-en.txt @@ -0,0 +1 @@ +Uptime Kuma — Guide — Felhom.eu ← Apps Uptime Kuma Service monitoring - it tells you when something stops working ● Running status.tester4.test Open ↗ What is it for? Watch whether your websites and services answer HTTP, TCP, DNS, ping and other checks Alerts by e-mail, Telegram, Discord and more A public status page for the people who use them Clear graphs of how much of the time things were up First steps Open status.tester4.test in your browser Create the admin account the first time you open it Add your first monitor (your own website, for example) Set up alerts (e-mail, Telegram and so on) Optional: build a public status page Announce maintenance When you switch something off on purpose, you get no alerts during the maintenance. In the top right corner, open your profile menu and select „Maintenance”. Select „Schedule Maintenance” and fill in its „Title”, for example: new router. In „Affected Monitors”, choose what you are switching off. In „Strategy”, choose „Single Maintenance Window”, set the start and the end, then select „Save”. Fewer false alerts A new monitor alerts at the first failed check, and you can relax that. Open the monitor in the list on the left and select „Edit”. In „Retries”, type 2 or 3. Select „Save”. The monitor then goes to „Pending” first and alerts only if the retries fail too. Sort monitors into groups With many monitors, groups and tags help you find your way. Select „Add New Monitor” and in „Monitor Type” choose „Group”, for example: Home. For the other monitors, on the „Edit” page choose this group in „Monitor Group”. In the „Tags” part you can also give a monitor a coloured tag, for example: family. If one member of the group goes down, the group itself shows as down. Protect your account With two factor authentication you need your phone as well as your password to sign in. In your profile menu select „Settings”, then the „Security” page. Select „2FA Settings”, type your password into „Current Password” and select „Enable 2FA”. Scan the QR code with the authenticator app on your phone, type the six-digit code and select „Verify Token”. If the code is right, select „Save”. Frequently asked questions Does Uptime Kuma tell me when the box itself goes down? It cannot: Uptime Kuma runs on the box, so when the box or the home internet goes down, it goes down too. It watches other devices and websites. How do I stop a monitor for a while? Open the monitor, select „Pause” and confirm. To watch it again, select „Resume”. Can I switch off the sign-in? Do not. After „Disable Auth” on the „Security” page, anyone who knows the status.tester4.test address gets in and can change everything. How long does it keep the history? 365 days by default. On the „Monitor History” page of „Settings” you can make it shorter to use less space. Why is some text in English? Uptime Kuma follows your browser's language and shows English where a translation is missing. You can change it in „Language” on the „Appearance” page of „Settings”. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-hu.txt new file mode 100644 index 00000000..c789cd2d --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-guide-hu.txt @@ -0,0 +1 @@ +Uptime Kuma — Felhom.eu ← Alkalmazások Uptime Kuma Szolgáltatás monitoring - értesítés ha valami nem működik ● Fut status.tester4.test Megnyitás ↗ Mire használható? Weboldalak és szolgáltatások elérhetőségének figyelése HTTP, TCP, DNS, ping és egyéb protokollok támogatása Értesítések emailben, Telegramon, Discord-on, stb. Nyilvános státusz oldal a felhasználóknak Szép grafikonok a rendelkezésre állásról Első lépések Nyisd meg a status.tester4.test címet a böngészőben Hozd létre az admin fiókot az első megnyitáskor Add hozzá az első monitort (pl. a saját weboldalad) Állíts be értesítéseket (email, Telegram, stb.) Opcionálisan: hozz létre egy nyilvános státusz oldalt Karbantartás bejelentése Ha szándékosan kikapcsolsz valamit, a karbantartás idejére nem kapsz riasztást. A jobb felső sarokban nyisd meg a profilod menüjét, és kattints a „Karbantartás” pontra. Kattints a „Karbantartás ütemezése” gombra, és töltsd ki a „Cím” mezőt, például: router csere. Az „Érintett monitorok” mezőben válaszd ki, mit kapcsolsz ki. A „Stratégia” mezőben válaszd az „Egyetlen karbantartási ablak” lehetőséget, add meg a kezdést és a véget, majd kattints a „Mentés” gombra. Kevesebb téves riasztás Egy új monitor már az első sikertelen próbánál riaszt, ezt lazíthatod. Nyisd meg a monitort a bal oldali listában, és kattints a „Szerkesztés” gombra. Az „Újrapróbálkozás” mezőbe írj 2-t vagy 3-at. Kattints a „Mentés” gombra. A monitor ezután „Függőben” állapotba kerül, és csak akkor riaszt, ha az újrapróbálkozások is sikertelenek. Monitorok csoportba rendezése Sok monitornál a csoport és a címke segít eligazodni. Kattints az „Új monitor hozzáadása” gombra, és a „Monitor típusa” mezőben válaszd a „Csoport” lehetőséget, például: Otthon. A többi monitornál a „Szerkesztés” oldalon a „Monitor csoport” mezőben válaszd ki ezt a csoportot. A „Címkék” résznél színes címkét is adhatsz egy monitornak, például: család. Ha a csoport egy tagja leáll, maga a csoport is leállást mutat. A fiókod védelme A kétfaktoros hitelesítéssel a jelszó mellett a telefonod is kell a belépéshez. A profilod menüjében kattints a „Beállítások” pontra, majd a „Biztonság” lapra. Kattints a „2FA beállítások” gombra, írd be a „Jelenlegi jelszó” mezőbe a jelszavad, és kattints a „2FA engedélyezése” gombra. Olvasd be a QR-kódot a telefonod hitelesítő appjával, írd be a hatjegyű kódot, és kattints a „Token ellenőrzése” gombra. Ha a kód jó, kattints a „Mentés” gombra. Gyakori kérdések Szól az Uptime Kuma, ha maga a doboz áll le? Nem tud: az Uptime Kuma a dobozon fut, ezért ha a doboz vagy az otthoni internet leáll, vele együtt áll le. Más eszközöket és weboldalakat figyel. Hogyan állítok le egy monitort egy időre? Nyisd meg a monitort, kattints a „Szünet” gombra, és erősítsd meg. Ha újra figyelnéd, kattints a „Folytatás” gombra. Kikapcsolhatom a bejelentkezést? Ne tedd. A „Biztonság” lapon a „Hitelesítés tiltása” után bárki, aki ismeri a status.tester4.test címet, belép és mindent átírhat. Meddig őrzi az előzményeket? Alapból 365 napig. A „Beállítások” „Vizsgálatok előzményei” lapján ezt rövidebbre is veheted, ha kevesebb helyet használnál. Miért angol egy-egy felirat? Az Uptime Kuma a böngésződ nyelvét követi, és ahol nincs magyar fordítás, angolul ír. A nyelvet a „Beállítások” „Megjelenés” lapján a „Nyelv” mezőben válthatod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-en.txt new file mode 100644 index 00000000..e9e83711 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-en.txt @@ -0,0 +1 @@ +Uptime Kuma — Install — Felhom.eu ← Back Uptime Kuma — Install Watch your services and websites ~150M RAM Full description, screenshots Memory 150 MB / 7479 MB (2%) Current usage (0 MB) Uptime Kuma (+150 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-hu.txt new file mode 100644 index 00000000..9b99a357 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-install-hu.txt @@ -0,0 +1 @@ +Uptime Kuma — Telepítés — Felhom.eu ← Vissza Uptime Kuma — Telepítés Szolgáltatás és weboldal monitoring ~150M RAM Részletes leírás, képernyőképek Memória 150 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Uptime Kuma (+150 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-en.txt new file mode 100644 index 00000000..91b450b4 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-en.txt @@ -0,0 +1 @@ +Uptime Kuma — Settings — Felhom.eu ← Apps Uptime Kuma Service monitoring - it tells you when something stops working ● Running status.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address status.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-hu.txt new file mode 100644 index 00000000..5ec529f0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/page-overview-hu.txt @@ -0,0 +1 @@ +Uptime Kuma — Felhom.eu ← Alkalmazások Uptime Kuma Szolgáltatás monitoring - értesítés ha valami nem működik ● Fut status.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím status.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/record.json b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/record.json new file mode 100644 index 00000000..0ea1d002 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/record.json @@ -0,0 +1,117 @@ +{ + "app": "uptime-kuma", + "sub": "status", + "fixture": "UptimeKuma", + "started": "2026-10-24T14:05:04Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/uptime-kuma/install", + "hu_len": 874, + "en_len": 790, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/uptime-kuma/install -> 200 'Uptime Kuma — Telepítés — Felhom.eu' | shot /root/shots/uptime-kuma-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/uptime-kuma/install -> 200 'Uptime Kuma — Telepítés — Felhom.eu' | shot /root/shots/uptime-kuma-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 76, + "front_door": true, + "seconds_to_front_door": 76 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fstatus.tester4.test%2F", + "http_port_80": "301 https://status.tester4.test/", + "guide": { + "path": "/apps/uptime-kuma/guide", + "hu_len": 3350, + "en_len": 3036, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/uptime-kuma", + "hu_len": 716, + "en_len": 731, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/uptime-kuma/guide -> 200 'Uptime Kuma — Felhom.eu' | shot /root/shots/uptime-kuma-after-guide-phone-hu.png hscroll=False", + "goto https://status.tester4.test/dashboard -> 200 'Uptime Kuma - Login' | shot /root/shots/uptime-kuma-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"5.664357159s\", \"last_run\": \"2026-10-24T14:07:01.396839236Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 15, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"uptime-kuma\", \"started_at\": \"2026-10-24T14:09:51.366636218Z\", \"last\": {\"op\": \"restore\", \"stack\": \"uptime-kuma\", \"ok\": true, \"message\": \"A(z) uptime-kuma: 1 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:10:05.630465442Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "uptime-kuma": { + "limit_mib": 384, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "uptime-kuma": 120.1 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 337 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-front-desktop-hu.png new file mode 100644 index 00000000..8bfce0dd Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-guide-phone-hu.png new file mode 100644 index 00000000..508b2c83 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-desktop-en.png new file mode 100644 index 00000000..1b730175 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-phone-hu.png new file mode 100644 index 00000000..0331ceba Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/screens/uptime-kuma-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/walk.log b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/walk.log new file mode 100644 index 00000000..ba9c8308 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/uptime-kuma/walk.log @@ -0,0 +1,14 @@ +14:05:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:06:35Z [1] deployed, controller state=running, pinned={'uptime-kuma': 'louislam/uptime-kuma:2.5.5'} +14:06:35Z gate: status is gated — passed as the household (cookie set) +14:06:35Z [1] installed: deployed 76 s, front door 76 s +14:06:36Z uptime-kuma: setup ok=True successAdded +14:06:36Z uptime-kuma: addStatusPage ok=True successAdded +14:06:36Z uptime-kuma: readback of the seeded status page http=200 found=True +14:06:55Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:07:42Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messag +14:09:51Z uptime-kuma: readback of the seeded status page http=404 found=False +14:09:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:10:06Z uptime-kuma: readback of the seeded status page http=200 found=True +14:10:48Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ada +14:10:57Z == uptime-kuma done in 337 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden.console.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden.console.txt new file mode 100644 index 00000000..fe3bb9ba --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden.console.txt @@ -0,0 +1,9 @@ +21:46:40Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:47:05Z [1] deployed, controller state=running, pinned={'vaultwarden': 'vaultwarden/server:1.37.4-alpine'} +21:47:05Z [1] installed: deployed 25 s, front door 25 s +21:47:05Z vaultwarden: self-registration http=404 (closed by design, R-512 — 400 expected) +21:47:08Z vaultwarden: POST /identity/accounts/register -> 404 (sign-up closed by design); the admin invite was NOT tried: bench — not the bench venue (the box walk never holds an admin secret); box — the box is not on the drill catalog — not a test run +21:47:33Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +21:48:15Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'vaultwarden', 'volumes_removed': ['vaultwarden_vaultwarden_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messag +21:49:18Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vaultwarden', 'volumes_removed': ['vaultwarden_vaultwarden_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ada +21:49:27Z == vaultwarden done in 167 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-en.txt new file mode 100644 index 00000000..828ce560 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-en.txt @@ -0,0 +1 @@ +Vaultwarden — Guide — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ What is it for? Keep your passwords safely and let them fill themselves in Every Bitwarden client works (browser, phone, desktop) Share a password with the household inside an organisation Keep two-factor (TOTP) codes Keep secure notes and card details First steps Open vault.tester4.test/admin and sign in with the admin panel token (Settings -> Automatically generated values) On the "Users" tab, use "Invite User" to invite your own and the household's e-mail addresses - unless you allowed sign-ups at the installation (not recommended), only an invited address can sign up Open vault.tester4.test, choose "Create account" with the invited address, and set a strong master password Install the Bitwarden extension in your browser Install the Bitwarden app on your phone Import the passwords you already have (Chrome, Firefox, LastPass and so on) Connect the Bitwarden extension and app to your box By default the Bitwarden apps look for Bitwarden's own server, so you enter your box's address once. Open the Bitwarden extension or app and go to the sign-in screen. In the server choice, pick the self-hosted server. As the server address, type vault.tester4.test and save it. Sign in with your e-mail address and your master password. Save a new password Whatever you put into the vault, the extension and the app see too, and fill in for you. On vault.tester4.test, in the „Vaults” menu, select „New” and choose „Login”. Fill in the „Item name”, „Username” and „Password” fields. In the „Website” field, type the address of the site: the extension offers to fill in on that site. Select „Save”. Turn on two-step login Besides the master password, a code from your phone is needed too, so a stolen password alone is not enough. In the menu on the left, open „Settings”, then „Security”. Choose the „Two-step login” tab. In the „Authenticator app” row, select „Manage” and follow the steps in the window. Then select „View recovery code” and write the code down on paper. Find weak passwords Vaultwarden shows which of your passwords are weak and which you use in more than one place. In the menu on the left, open „Reports”. Choose „Weak passwords” or „Reused passwords”. Change the password on the site concerned, then change it in the vault too. Frequently asked questions I forgot my master password. What can I do? Nobody is able to reset it, not even the box: your master password encrypts your vault. Write it down and keep it somewhere safe. Why can my family member not sign up? Signing up is closed by default. Invite them in the admin panel as the first steps say, or allow sign-ups on the dashboard, on Vaultwarden's „Settings” tab. Can I share a password with the family? Yes, with an organisation. In the filter of the „Vaults” page, select „New organization”, then invite the family on the organisation's „Members” page. Do I need an account with Bitwarden? No. Vaultwarden is a server running on your box, and the Bitwarden apps and extensions connect to it. Where are my passwords, and are they backed up? On the box, encrypted. For their backup, look at the „Data and backup” tab of Vaultwarden. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-hu.txt new file mode 100644 index 00000000..7d382b66 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-guide-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Mire használható? Jelszavak biztonságos tárolása és automatikus kitöltése Bitwarden kliensek teljes kompatibilitása (böngésző, mobil, asztali) Jelszavak megosztása családtagokkal szervezeten belül Kétfaktoros hitelesítés (TOTP) kódok tárolása Biztonságos jegyzetek és bankkártya adatok tárolása Első lépések Nyisd meg a vault.tester4.test/admin címet, és lépj be az admin panel tokenjével (Beállítások → Automatikusan generált értékek) A „Users" fülön az „Invite User" mezőben hívd meg a saját és a családtagok e-mail címét. Ha a telepítéskor nem engedélyezted a regisztrációt (ez az ajánlott), csak meghívott cím nyithat fiókot Nyisd meg a vault.tester4.test címet, válaszd a „Create account" lehetőséget a meghívott címmel, és adj meg erős mesterjelszót Telepítsd a Bitwarden bővítményt a böngésződbe Telepítsd a Bitwarden alkalmazást a telefonodra Importáld a meglévő jelszavaidat (Chrome, Firefox, LastPass, stb.) A Bitwarden bővítmény és app összekötése a dobozzal A Bitwarden appok alapból a Bitwarden saját szerverét keresik, ezért egyszer meg kell adnod a dobozod címét. Nyisd meg a Bitwarden bővítményt vagy appot, és menj a bejelentkező képernyőre. A szerverválasztóban válaszd a saját üzemeltetésű (self-hosted) szervert. Szervercímnek írd be: vault.tester4.test, és mentsd el. Jelentkezz be az e-mail címeddel és a mesterjelszavaddal. Új jelszó mentése Amit a széfbe teszel, azt a bővítmény és az app is látja, és kitölti helyetted. A vault.tester4.test oldalon a „Széfek” menüben kattints az „Új” gombra, és válaszd a „Bejelentkezés” pontot. Töltsd ki az „Elem neve”, a „Felhasználónév” és a „Jelszó” mezőt. A „Webhely” mezőbe írd be az oldal címét: a bővítmény ezen az oldalon ajánlja fel a kitöltést. Kattints a „Mentés” gombra. Kétlépcsős bejelentkezés bekapcsolása A mesterjelszó mellé egy telefonos kód is kell, így egy ellopott jelszó önmagában kevés. A bal oldali menüben nyisd meg a „Beállítások”, majd a „Biztonság” pontot. Válaszd a „Kétlépcsős bejelentkezés” lapot. A „Hitelesítő alkalmazás” sorában kattints a „Kezelés” gombra, és kövesd az ablak lépéseit. Utána kattints a „Helyreállító kód megtekintése” gombra, és írd le a kódot papírra. Gyenge jelszavak keresése A Vaultwarden megmutatja, melyik jelszavad gyenge, és melyiket használod több helyen. A bal oldali menüben nyisd meg a „Jelentések” pontot. Válaszd a „Gyenge jelszavak jelentés” vagy az „Újrahasznált jelszavak jelentés” lehetőséget. Cseréld le a jelszót az érintett oldalon, majd írd át a széfben is. Gyakori kérdések Elfelejtettem a mesterjelszót. Mit tehetek? Senki nem tudja visszaállítani, a doboz sem: a széfedet a mesterjelszó titkosítja. Írd le, és tartsd biztos helyen. Miért nem tud regisztrálni a családtagom? A regisztráció alapból le van zárva. Hívd meg az admin panelen az első lépések szerint, vagy a vezérlőpulton, a Vaultwarden „Beállítások” fülén engedélyezd a regisztrációt. Megoszthatok jelszót a családdal? Igen, egy szervezettel. A „Széfek” oldal szűrőjében kattints az „Új szervezet” pontra, majd a szervezet „Tagok” oldalán hívd meg a családtagokat. Kell fiókot nyitnom a Bitwardennél? Nem. A Vaultwarden a te dobozodon futó szerver, a Bitwarden appok és bővítmények ehhez kapcsolódnak. Hol vannak a jelszavaim, és van róluk mentés? A dobozon, titkosítva. A mentésükről a Vaultwarden „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-en.txt new file mode 100644 index 00000000..4d48c5c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-en.txt @@ -0,0 +1 @@ +Vaultwarden — Install — Felhom.eu ← Back Vaultwarden — Install A password manager (Bitwarden-compatible) ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Vaultwarden (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin panel token Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Allow sign-ups No - by invitation only (recommended) Yes - anybody who knows the address can sign up Closed by default: you invite the household from the admin panel (see First steps). With sign-ups open, anybody who guesses the address can sign up. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-hu.txt new file mode 100644 index 00000000..4bfc6763 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-install-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Telepítés — Felhom.eu ← Vissza Vaultwarden — Telepítés Jelszókezelő (Bitwarden-kompatibilis) ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Vaultwarden (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin panel token Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Regisztráció engedélyezése Nem – csak meghívással (ajánlott) Igen – bárki regisztrálhat, aki ismeri a címet Alapból lezárva: a család tagjait az admin panelen hívod meg (lásd Első lépések). Nyitott regisztrációval bárki fiókot nyithat, aki kitalálja a címet. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-en.txt new file mode 100644 index 00000000..37516c26 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-en.txt @@ -0,0 +1 @@ +Vaultwarden — Settings — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ Running Running Restart Stop Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: vaultwarden@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address vault.tester4.test Admin panel token Show Allow sign-ups No - by invitation only (recommended) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-hu.txt new file mode 100644 index 00000000..6d1c7779 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/page-overview-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: vaultwarden@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím vault.tester4.test Admin panel token Megjelenítés Regisztráció engedélyezése Nem – csak meghívással (ajánlott) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/record.json b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/record.json new file mode 100644 index 00000000..11f7416a --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/record.json @@ -0,0 +1,118 @@ +{ + "app": "vaultwarden", + "sub": "vault", + "fixture": "Vaultwarden", + "started": "2026-10-24T21:46:19Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_TOKEN", + "secret", + false + ], + [ + "SIGNUPS_ALLOWED", + "select", + false + ] + ], + "install_page": { + "path": "/apps/vaultwarden/install", + "hu_len": 1187, + "en_len": 1093, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "200", + "http_port_80": "301 https://vault.tester4.test/", + "guide": { + "path": "/apps/vaultwarden/guide", + "hu_len": 3522, + "en_len": 3304, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/vaultwarden", + "hu_len": 889, + "en_len": 849, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/vaultwarden/guide -> 200 'Vaultwarden — Felhom.eu' | shot /root/shots/vaultwarden-after-guide-phone-hu.png hscroll=False", + "goto https://vault.tester4.test/ -> 200 'Vaultwarden Web' | shot /root/shots/vaultwarden-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.635660342s\", \"last_run\": \"2026-10-24T21:47:34.786906087Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "vaultwarden": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "vaultwarden": 38.3 + }, + "mem_anon_peak_mib": { + "vaultwarden": 36.9 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 167 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-en.txt new file mode 100644 index 00000000..828ce560 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-en.txt @@ -0,0 +1 @@ +Vaultwarden — Guide — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ What is it for? Keep your passwords safely and let them fill themselves in Every Bitwarden client works (browser, phone, desktop) Share a password with the household inside an organisation Keep two-factor (TOTP) codes Keep secure notes and card details First steps Open vault.tester4.test/admin and sign in with the admin panel token (Settings -> Automatically generated values) On the "Users" tab, use "Invite User" to invite your own and the household's e-mail addresses - unless you allowed sign-ups at the installation (not recommended), only an invited address can sign up Open vault.tester4.test, choose "Create account" with the invited address, and set a strong master password Install the Bitwarden extension in your browser Install the Bitwarden app on your phone Import the passwords you already have (Chrome, Firefox, LastPass and so on) Connect the Bitwarden extension and app to your box By default the Bitwarden apps look for Bitwarden's own server, so you enter your box's address once. Open the Bitwarden extension or app and go to the sign-in screen. In the server choice, pick the self-hosted server. As the server address, type vault.tester4.test and save it. Sign in with your e-mail address and your master password. Save a new password Whatever you put into the vault, the extension and the app see too, and fill in for you. On vault.tester4.test, in the „Vaults” menu, select „New” and choose „Login”. Fill in the „Item name”, „Username” and „Password” fields. In the „Website” field, type the address of the site: the extension offers to fill in on that site. Select „Save”. Turn on two-step login Besides the master password, a code from your phone is needed too, so a stolen password alone is not enough. In the menu on the left, open „Settings”, then „Security”. Choose the „Two-step login” tab. In the „Authenticator app” row, select „Manage” and follow the steps in the window. Then select „View recovery code” and write the code down on paper. Find weak passwords Vaultwarden shows which of your passwords are weak and which you use in more than one place. In the menu on the left, open „Reports”. Choose „Weak passwords” or „Reused passwords”. Change the password on the site concerned, then change it in the vault too. Frequently asked questions I forgot my master password. What can I do? Nobody is able to reset it, not even the box: your master password encrypts your vault. Write it down and keep it somewhere safe. Why can my family member not sign up? Signing up is closed by default. Invite them in the admin panel as the first steps say, or allow sign-ups on the dashboard, on Vaultwarden's „Settings” tab. Can I share a password with the family? Yes, with an organisation. In the filter of the „Vaults” page, select „New organization”, then invite the family on the organisation's „Members” page. Do I need an account with Bitwarden? No. Vaultwarden is a server running on your box, and the Bitwarden apps and extensions connect to it. Where are my passwords, and are they backed up? On the box, encrypted. For their backup, look at the „Data and backup” tab of Vaultwarden. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-hu.txt new file mode 100644 index 00000000..7d382b66 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-guide-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Mire használható? Jelszavak biztonságos tárolása és automatikus kitöltése Bitwarden kliensek teljes kompatibilitása (böngésző, mobil, asztali) Jelszavak megosztása családtagokkal szervezeten belül Kétfaktoros hitelesítés (TOTP) kódok tárolása Biztonságos jegyzetek és bankkártya adatok tárolása Első lépések Nyisd meg a vault.tester4.test/admin címet, és lépj be az admin panel tokenjével (Beállítások → Automatikusan generált értékek) A „Users" fülön az „Invite User" mezőben hívd meg a saját és a családtagok e-mail címét. Ha a telepítéskor nem engedélyezted a regisztrációt (ez az ajánlott), csak meghívott cím nyithat fiókot Nyisd meg a vault.tester4.test címet, válaszd a „Create account" lehetőséget a meghívott címmel, és adj meg erős mesterjelszót Telepítsd a Bitwarden bővítményt a böngésződbe Telepítsd a Bitwarden alkalmazást a telefonodra Importáld a meglévő jelszavaidat (Chrome, Firefox, LastPass, stb.) A Bitwarden bővítmény és app összekötése a dobozzal A Bitwarden appok alapból a Bitwarden saját szerverét keresik, ezért egyszer meg kell adnod a dobozod címét. Nyisd meg a Bitwarden bővítményt vagy appot, és menj a bejelentkező képernyőre. A szerverválasztóban válaszd a saját üzemeltetésű (self-hosted) szervert. Szervercímnek írd be: vault.tester4.test, és mentsd el. Jelentkezz be az e-mail címeddel és a mesterjelszavaddal. Új jelszó mentése Amit a széfbe teszel, azt a bővítmény és az app is látja, és kitölti helyetted. A vault.tester4.test oldalon a „Széfek” menüben kattints az „Új” gombra, és válaszd a „Bejelentkezés” pontot. Töltsd ki az „Elem neve”, a „Felhasználónév” és a „Jelszó” mezőt. A „Webhely” mezőbe írd be az oldal címét: a bővítmény ezen az oldalon ajánlja fel a kitöltést. Kattints a „Mentés” gombra. Kétlépcsős bejelentkezés bekapcsolása A mesterjelszó mellé egy telefonos kód is kell, így egy ellopott jelszó önmagában kevés. A bal oldali menüben nyisd meg a „Beállítások”, majd a „Biztonság” pontot. Válaszd a „Kétlépcsős bejelentkezés” lapot. A „Hitelesítő alkalmazás” sorában kattints a „Kezelés” gombra, és kövesd az ablak lépéseit. Utána kattints a „Helyreállító kód megtekintése” gombra, és írd le a kódot papírra. Gyenge jelszavak keresése A Vaultwarden megmutatja, melyik jelszavad gyenge, és melyiket használod több helyen. A bal oldali menüben nyisd meg a „Jelentések” pontot. Válaszd a „Gyenge jelszavak jelentés” vagy az „Újrahasznált jelszavak jelentés” lehetőséget. Cseréld le a jelszót az érintett oldalon, majd írd át a széfben is. Gyakori kérdések Elfelejtettem a mesterjelszót. Mit tehetek? Senki nem tudja visszaállítani, a doboz sem: a széfedet a mesterjelszó titkosítja. Írd le, és tartsd biztos helyen. Miért nem tud regisztrálni a családtagom? A regisztráció alapból le van zárva. Hívd meg az admin panelen az első lépések szerint, vagy a vezérlőpulton, a Vaultwarden „Beállítások” fülén engedélyezd a regisztrációt. Megoszthatok jelszót a családdal? Igen, egy szervezettel. A „Széfek” oldal szűrőjében kattints az „Új szervezet” pontra, majd a szervezet „Tagok” oldalán hívd meg a családtagokat. Kell fiókot nyitnom a Bitwardennél? Nem. A Vaultwarden a te dobozodon futó szerver, a Bitwarden appok és bővítmények ehhez kapcsolódnak. Hol vannak a jelszavaim, és van róluk mentés? A dobozon, titkosítva. A mentésükről a Vaultwarden „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-en.txt new file mode 100644 index 00000000..4d48c5c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-en.txt @@ -0,0 +1 @@ +Vaultwarden — Install — Felhom.eu ← Back Vaultwarden — Install A password manager (Bitwarden-compatible) ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Vaultwarden (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin panel token Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Allow sign-ups No - by invitation only (recommended) Yes - anybody who knows the address can sign up Closed by default: you invite the household from the admin panel (see First steps). With sign-ups open, anybody who guesses the address can sign up. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-hu.txt new file mode 100644 index 00000000..4bfc6763 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-install-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Telepítés — Felhom.eu ← Vissza Vaultwarden — Telepítés Jelszókezelő (Bitwarden-kompatibilis) ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Vaultwarden (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin panel token Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Regisztráció engedélyezése Nem – csak meghívással (ajánlott) Igen – bárki regisztrálhat, aki ismeri a címet Alapból lezárva: a család tagjait az admin panelen hívod meg (lásd Első lépések). Nyitott regisztrációval bárki fiókot nyithat, aki kitalálja a címet. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-en.txt new file mode 100644 index 00000000..37516c26 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-en.txt @@ -0,0 +1 @@ +Vaultwarden — Settings — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ Running Running Restart Stop Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: vaultwarden@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address vault.tester4.test Admin panel token Show Allow sign-ups No - by invitation only (recommended) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-hu.txt new file mode 100644 index 00000000..6d1c7779 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/page-overview-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: vaultwarden@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím vault.tester4.test Admin panel token Megjelenítés Regisztráció engedélyezése Nem – csak meghívással (ajánlott) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/record.json b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/record.json new file mode 100644 index 00000000..43c6ccf1 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/record.json @@ -0,0 +1,115 @@ +{ + "app": "vaultwarden", + "sub": "vault", + "fixture": "Vaultwarden", + "started": "2026-10-24T13:32:05Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_TOKEN", + "secret", + false + ], + [ + "SIGNUPS_ALLOWED", + "select", + false + ] + ], + "install_page": { + "path": "/apps/vaultwarden/install", + "hu_len": 1187, + "en_len": 1093, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "200", + "http_port_80": "301 https://vault.tester4.test/", + "guide": { + "path": "/apps/vaultwarden/guide", + "hu_len": 3522, + "en_len": 3304, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/vaultwarden", + "hu_len": 889, + "en_len": 849, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/vaultwarden/guide -> 200 'Vaultwarden — Felhom.eu' | shot /root/shots/vaultwarden-after-guide-phone-hu.png hscroll=False", + "goto https://vault.tester4.test/ -> 200 'Vaultwarden Web' | shot /root/shots/vaultwarden-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.228124005s\", \"last_run\": \"2026-10-24T13:33:07.631034942Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "vaultwarden": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "vaultwarden": 38.5 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 159 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-front-desktop-hu.png new file mode 100644 index 00000000..17edf490 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-guide-phone-hu.png new file mode 100644 index 00000000..80328476 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-desktop-en.png new file mode 100644 index 00000000..519dab88 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-phone-hu.png new file mode 100644 index 00000000..6095cb3a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/screens/vaultwarden-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/walk.log b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/walk.log new file mode 100644 index 00000000..495584ec --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-drill-pre/walk.log @@ -0,0 +1,9 @@ +13:32:21Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:32:46Z [1] deployed, controller state=running, pinned={'vaultwarden': 'vaultwarden/server:1.37.4-alpine'} +13:32:46Z [1] installed: deployed 25 s, front door 25 s +13:32:46Z vaultwarden: self-registration http=404 (closed by design, R-512 — 400 expected) +13:32:46Z vaultwarden: POST /identity/accounts/register -> 404 (sign-up closed by design); the admin invite was NOT tried: bench — not the bench venue (the box walk never holds an admin secret); box — FELHOM_BOX_ADMIN_SEED=1 is not set for this run +13:33:06Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:33:48Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'vaultwarden', 'volumes_removed': ['vaultwarden_vaultwarden_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True}, 'messag +13:34:51Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vaultwarden', 'volumes_removed': ['vaultwarden_vaultwarden_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját ada +13:35:00Z == vaultwarden done in 159 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-en.txt new file mode 100644 index 00000000..828ce560 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-en.txt @@ -0,0 +1 @@ +Vaultwarden — Guide — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ What is it for? Keep your passwords safely and let them fill themselves in Every Bitwarden client works (browser, phone, desktop) Share a password with the household inside an organisation Keep two-factor (TOTP) codes Keep secure notes and card details First steps Open vault.tester4.test/admin and sign in with the admin panel token (Settings -> Automatically generated values) On the "Users" tab, use "Invite User" to invite your own and the household's e-mail addresses - unless you allowed sign-ups at the installation (not recommended), only an invited address can sign up Open vault.tester4.test, choose "Create account" with the invited address, and set a strong master password Install the Bitwarden extension in your browser Install the Bitwarden app on your phone Import the passwords you already have (Chrome, Firefox, LastPass and so on) Connect the Bitwarden extension and app to your box By default the Bitwarden apps look for Bitwarden's own server, so you enter your box's address once. Open the Bitwarden extension or app and go to the sign-in screen. In the server choice, pick the self-hosted server. As the server address, type vault.tester4.test and save it. Sign in with your e-mail address and your master password. Save a new password Whatever you put into the vault, the extension and the app see too, and fill in for you. On vault.tester4.test, in the „Vaults” menu, select „New” and choose „Login”. Fill in the „Item name”, „Username” and „Password” fields. In the „Website” field, type the address of the site: the extension offers to fill in on that site. Select „Save”. Turn on two-step login Besides the master password, a code from your phone is needed too, so a stolen password alone is not enough. In the menu on the left, open „Settings”, then „Security”. Choose the „Two-step login” tab. In the „Authenticator app” row, select „Manage” and follow the steps in the window. Then select „View recovery code” and write the code down on paper. Find weak passwords Vaultwarden shows which of your passwords are weak and which you use in more than one place. In the menu on the left, open „Reports”. Choose „Weak passwords” or „Reused passwords”. Change the password on the site concerned, then change it in the vault too. Frequently asked questions I forgot my master password. What can I do? Nobody is able to reset it, not even the box: your master password encrypts your vault. Write it down and keep it somewhere safe. Why can my family member not sign up? Signing up is closed by default. Invite them in the admin panel as the first steps say, or allow sign-ups on the dashboard, on Vaultwarden's „Settings” tab. Can I share a password with the family? Yes, with an organisation. In the filter of the „Vaults” page, select „New organization”, then invite the family on the organisation's „Members” page. Do I need an account with Bitwarden? No. Vaultwarden is a server running on your box, and the Bitwarden apps and extensions connect to it. Where are my passwords, and are they backed up? On the box, encrypted. For their backup, look at the „Data and backup” tab of Vaultwarden. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-hu.txt new file mode 100644 index 00000000..7d382b66 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-guide-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Mire használható? Jelszavak biztonságos tárolása és automatikus kitöltése Bitwarden kliensek teljes kompatibilitása (böngésző, mobil, asztali) Jelszavak megosztása családtagokkal szervezeten belül Kétfaktoros hitelesítés (TOTP) kódok tárolása Biztonságos jegyzetek és bankkártya adatok tárolása Első lépések Nyisd meg a vault.tester4.test/admin címet, és lépj be az admin panel tokenjével (Beállítások → Automatikusan generált értékek) A „Users" fülön az „Invite User" mezőben hívd meg a saját és a családtagok e-mail címét. Ha a telepítéskor nem engedélyezted a regisztrációt (ez az ajánlott), csak meghívott cím nyithat fiókot Nyisd meg a vault.tester4.test címet, válaszd a „Create account" lehetőséget a meghívott címmel, és adj meg erős mesterjelszót Telepítsd a Bitwarden bővítményt a böngésződbe Telepítsd a Bitwarden alkalmazást a telefonodra Importáld a meglévő jelszavaidat (Chrome, Firefox, LastPass, stb.) A Bitwarden bővítmény és app összekötése a dobozzal A Bitwarden appok alapból a Bitwarden saját szerverét keresik, ezért egyszer meg kell adnod a dobozod címét. Nyisd meg a Bitwarden bővítményt vagy appot, és menj a bejelentkező képernyőre. A szerverválasztóban válaszd a saját üzemeltetésű (self-hosted) szervert. Szervercímnek írd be: vault.tester4.test, és mentsd el. Jelentkezz be az e-mail címeddel és a mesterjelszavaddal. Új jelszó mentése Amit a széfbe teszel, azt a bővítmény és az app is látja, és kitölti helyetted. A vault.tester4.test oldalon a „Széfek” menüben kattints az „Új” gombra, és válaszd a „Bejelentkezés” pontot. Töltsd ki az „Elem neve”, a „Felhasználónév” és a „Jelszó” mezőt. A „Webhely” mezőbe írd be az oldal címét: a bővítmény ezen az oldalon ajánlja fel a kitöltést. Kattints a „Mentés” gombra. Kétlépcsős bejelentkezés bekapcsolása A mesterjelszó mellé egy telefonos kód is kell, így egy ellopott jelszó önmagában kevés. A bal oldali menüben nyisd meg a „Beállítások”, majd a „Biztonság” pontot. Válaszd a „Kétlépcsős bejelentkezés” lapot. A „Hitelesítő alkalmazás” sorában kattints a „Kezelés” gombra, és kövesd az ablak lépéseit. Utána kattints a „Helyreállító kód megtekintése” gombra, és írd le a kódot papírra. Gyenge jelszavak keresése A Vaultwarden megmutatja, melyik jelszavad gyenge, és melyiket használod több helyen. A bal oldali menüben nyisd meg a „Jelentések” pontot. Válaszd a „Gyenge jelszavak jelentés” vagy az „Újrahasznált jelszavak jelentés” lehetőséget. Cseréld le a jelszót az érintett oldalon, majd írd át a széfben is. Gyakori kérdések Elfelejtettem a mesterjelszót. Mit tehetek? Senki nem tudja visszaállítani, a doboz sem: a széfedet a mesterjelszó titkosítja. Írd le, és tartsd biztos helyen. Miért nem tud regisztrálni a családtagom? A regisztráció alapból le van zárva. Hívd meg az admin panelen az első lépések szerint, vagy a vezérlőpulton, a Vaultwarden „Beállítások” fülén engedélyezd a regisztrációt. Megoszthatok jelszót a családdal? Igen, egy szervezettel. A „Széfek” oldal szűrőjében kattints az „Új szervezet” pontra, majd a szervezet „Tagok” oldalán hívd meg a családtagokat. Kell fiókot nyitnom a Bitwardennél? Nem. A Vaultwarden a te dobozodon futó szerver, a Bitwarden appok és bővítmények ehhez kapcsolódnak. Hol vannak a jelszavaim, és van róluk mentés? A dobozon, titkosítva. A mentésükről a Vaultwarden „Adatok és mentés” fülén tájékozódhatsz. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-en.txt new file mode 100644 index 00000000..4d48c5c0 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-en.txt @@ -0,0 +1 @@ +Vaultwarden — Install — Felhom.eu ← Back Vaultwarden — Install A password manager (Bitwarden-compatible) ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Vaultwarden (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Admin panel token Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Allow sign-ups No - by invitation only (recommended) Yes - anybody who knows the address can sign up Closed by default: you invite the household from the admin panel (see First steps). With sign-ups open, anybody who guesses the address can sign up. Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-hu.txt new file mode 100644 index 00000000..4bfc6763 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-install-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Telepítés — Felhom.eu ← Vissza Vaultwarden — Telepítés Jelszókezelő (Bitwarden-kompatibilis) ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Vaultwarden (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Admin panel token Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Regisztráció engedélyezése Nem – csak meghívással (ajánlott) Igen – bárki regisztrálhat, aki ismeri a címet Alapból lezárva: a család tagjait az admin panelen hívod meg (lásd Első lépések). Nyitott regisztrációval bárki fiókot nyithat, aki kitalálja a címet. Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-en.txt new file mode 100644 index 00000000..37516c26 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-en.txt @@ -0,0 +1 @@ +Vaultwarden — Settings — Felhom.eu ← Apps Vaultwarden A password manager - Bitwarden-compatible, on your own server ● Running vault.tester4.test Open ↗ Running Running Restart Stop Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Sending e-mail This app can send e-mail (for example password resets, invitations) through Felhom, without setting up a separate provider. The sender address: vaultwarden@felhom.eu . App e-mail is turned off globally right now. Turn it on on the Settings page for it to work here too. Allow sending e-mail for this app Save Saving restarts the app. Address and keys These were created at install time and cannot be changed. Address vault.tester4.test Admin panel token Show Allow sign-ups No - by invitation only (recommended) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-hu.txt new file mode 100644 index 00000000..6d1c7779 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/page-overview-hu.txt @@ -0,0 +1 @@ +Vaultwarden — Felhom.eu ← Alkalmazások Vaultwarden Jelszókezelő - Bitwarden kompatibilis, a saját szerveren ● Fut vault.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Email-küldés Ez az alkalmazás tud emailt küldeni (pl. jelszó-visszaállítás, meghívók) a Felhom-on keresztül, külön szolgáltató beállítása nélkül. A feladó címe: vaultwarden@felhom.eu . Az alkalmazás-email jelenleg ki van kapcsolva globálisan. Kapcsold be a Beállítások oldalon, hogy itt is működjön. Email-küldés engedélyezése ennél az alkalmazásnál Mentés A mentés újraindítja az alkalmazást. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím vault.tester4.test Admin panel token Megjelenítés Regisztráció engedélyezése Nem – csak meghívással (ajánlott) \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/record.json b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/record.json new file mode 100644 index 00000000..f641b272 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/record.json @@ -0,0 +1,118 @@ +{ + "app": "vaultwarden", + "sub": "vault", + "fixture": "Vaultwarden", + "started": "2026-10-24T21:30:00Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "ADMIN_TOKEN", + "secret", + false + ], + [ + "SIGNUPS_ALLOWED", + "select", + false + ] + ], + "install_page": { + "path": "/apps/vaultwarden/install", + "hu_len": 1187, + "en_len": 1093, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/vaultwarden/install -> 200 'Vaultwarden — Telepítés — Felhom.eu' | shot /root/shots/vaultwarden-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 25, + "front_door": true, + "seconds_to_front_door": 25 + }, + "stranger": "200", + "http_port_80": "301 https://vault.tester4.test/", + "guide": { + "path": "/apps/vaultwarden/guide", + "hu_len": 3522, + "en_len": 3304, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/vaultwarden", + "hu_len": 889, + "en_len": 849, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": false, + "shots_after": [ + "goto https://felhom.tester4.test/apps/vaultwarden/guide -> 200 'Vaultwarden — Felhom.eu' | shot /root/shots/vaultwarden-after-guide-phone-hu.png hscroll=False", + "goto https://vault.tester4.test/ -> 200 'Vaultwarden Web' | shot /root/shots/vaultwarden-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.283893367s\", \"last_run\": \"2026-10-24T21:31:19.640595204Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "vaultwarden": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "vaultwarden": 36.2 + }, + "mem_anon_peak_mib": { + "vaultwarden": 34.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 171 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-front-desktop-hu.png new file mode 100644 index 00000000..17edf490 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-guide-phone-hu.png new file mode 100644 index 00000000..80328476 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-desktop-en.png new file mode 100644 index 00000000..519dab88 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-phone-hu.png new file mode 100644 index 00000000..6095cb3a Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/screens/vaultwarden-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/walk.log b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/walk.log new file mode 100644 index 00000000..627b1acd --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vaultwarden/run-live-2/walk.log @@ -0,0 +1,15 @@ +21:30:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +21:30:45Z [1] deployed, controller state=running, pinned={'vaultwarden': 'vaultwarden/server:1.37.4-alpine'} +21:30:46Z [1] installed: deployed 25 s, front door 25 s +21:30:46Z vaultwarden: self-registration http=404 (closed by design, R-512 — 400 expected) +21:30:54Z vaultwarden: test-box admin sign-in and invite (inside the box) -> ('200', 'yes', '200') +21:30:54Z vaultwarden: invited registration http=404 +21:30:54Z vaultwarden: refused + + + + HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:36:59Z vikunja: readback of the seeded project http=200 ok=True +13:37:38Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +13:37:47Z == vikunja done in 150 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-en.txt new file mode 100644 index 00000000..ce2df416 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-en.txt @@ -0,0 +1 @@ +Vikunja — Guide — Felhom.eu ← Apps Vikunja Task management - lists, Kanban boards and Gantt charts ● Running tasks.tester4.test Open ↗ What is it for? Keep your task lists and to-dos A Kanban board view (Trello-like) A Gantt chart for scheduling a project Shared lists, so a team can work together Reminders, due dates, labels and priorities First steps Open tasks.tester4.test in your browser Create your account Create your first project and task list Try the Kanban and List views Invite the household, or your colleagues Add a task quickly In one line you can give the task, its label and its priority. Open the project and click into the top field where you type a new task. Type the task and add a label with an asterisk, for example: Milk *shop. Set the priority with an exclamation mark and a number from 1 to 5, for example: !4. The higher the number, the more important it is. Press Enter. If the label does not exist yet, Vikunja creates it. A repeating chore Taking out the bins every week or paying a monthly bill only has to be added once. Open the task, select „Set Due Date” and set the first time. Select „Set Repeating Interval” and choose „Every Week”. When you mark the task done, Vikunja moves the due date to the next time and the task stays open. Share a project with the family Everyone sees and adds to the shared shopping list from their own account. The family member needs their own account: on the dashboard, on the Vikunja page, select „Open sign-up for 15 minutes”, and they sign up meanwhile. In the list on the left, open the project's menu and select „Share”. In the users part, type the family member's exact username, choose them and select „Share”. Next to them you can set whether they only read the project or can edit it too. What is due this week? You see the coming tasks of all your projects in one place. In the menu on the left, select „Upcoming”. It shows the tasks due from today until a week from now. Tick „Show overdue tasks” to see the tasks you missed as well. Frequently asked questions Do I get reminders? No. Vikunja would send reminders by e-mail, but the box did not set up mail for it, so „Set Reminders” does not reach you here. The „Upcoming” view shows what is due. Why can I not find my family member when sharing? They have to sign up with their own account first. Type their exact username into the search, not their full name. Can I give a due date in the quick add? Yes, but Vikunja understands the words only in English, for example tomorrow or next monday. Otherwise use „Set Due Date”. Why is some text in English? Vikunja follows your browser's language, and its Hungarian translation is not complete. You can change it in „Language” under „General Settings” in „Settings”. How do I hide a finished project? In the project's menu, select „Archive”. An archived project stays, but you cannot edit it until you take it back. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-hu.txt new file mode 100644 index 00000000..983f70ca --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-guide-hu.txt @@ -0,0 +1 @@ +Vikunja — Felhom.eu ← Alkalmazások Vikunja Feladatkezelő - listák, Kanban táblák és Gantt diagramok ● Fut tasks.tester4.test Megnyitás ↗ Mire használható? Feladatlisták és teendők kezelése Kanban tábla nézet (Trello-szerű) Gantt diagram projekt ütemezéshez Megosztott listák és csapat együttműködés Emlékeztetők, lejárati dátumok, címkék és prioritások Első lépések Nyisd meg a tasks.tester4.test címet a böngészőben Hozd létre a fiókodat Hozd létre az első projektet és feladatlistát Próbáld ki a Kanban és Lista nézeteket Hívd meg a családtagokat vagy kollégákat Feladat gyors felvétele Egy sorban megadhatod a feladatot, a címkéjét és a fontosságát. Nyisd meg a projektet, és kattints a felső mezőbe, ahová az új feladatot írod. Írd be a feladatot, és csillaggal tegyél mellé címkét, például: Tej *bolt. A fontosságot felkiáltójellel és egy 1 és 5 közötti számmal adod meg, például: !4. Minél nagyobb a szám, annál fontosabb. Nyomj Entert. Ha a címke még nem létezik, a Vikunja létrehozza. Ismétlődő teendő A heti szemétkihordást vagy a havi számlát elég egyszer felvenni. Nyisd meg a feladatot, kattints a „Határidő beállítása” gombra, és add meg az első alkalmat. Kattints az „Állítsa be az ismétlési intervallumot” gombra, és válaszd a „Minden héten” lehetőséget. Ha a feladatot késznek jelölöd, a Vikunja a határidőt a következő alkalomra teszi, és a feladat nyitva marad. Projekt megosztása a családdal A közös bevásárlólistát mindenki a saját fiókjából látja és bővíti. A családtagnak saját fiók kell: a vezérlőpulton, a Vikunja oldalán kattints a „Regisztráció megnyitása 15 percre” gombra, és ő közben regisztrál. A bal oldali listában nyisd meg a projekt menüjét, és kattints a „Megosztás” pontra. A felhasználók résznél írd be pontosan a családtag felhasználónevét, válaszd ki, és kattints a „Megosztás” gombra. Mellette beállíthatod, hogy csak olvassa vagy szerkessze is a projektet. Mi esedékes a héten? Egy helyen látod az összes projekt közelgő feladatait. A bal oldali menüben kattints a „Hamarosan” pontra. Itt a mai naptól egy hétig esedékes feladatok látszanak. Jelöld be „A lejárt feladatok megjelenítése” jelölőt, hogy a lekésett feladatok is látszódjanak. Gyakori kérdések Kapok emlékeztetőt? Nem. A Vikunja az emlékeztetőt e-mailben küldené, de a doboz nem állított be neki levelezést, ezért az „Emlékeztető beállítása” itt nem jut el hozzád. A „Hamarosan” nézet mutatja, mi esedékes. Miért nem találom a családtagomat a megosztásnál? Előbb regisztrálnia kell a saját fiókjával. A keresőbe a pontos felhasználónevét írd, nem a teljes nevét. Megadhatok határidőt a gyors felvételnél? Igen, de a Vikunja a szavakat csak angolul érti, például tomorrow vagy next monday. Magyarul inkább a „Határidő beállítása” gombot használd. Miért angol néhány felirat? A Vikunja a böngésződ nyelvét követi, és a magyar fordítása nem teljes. A nyelvet a „Beállítások” „Általános beállítások” részén, a „Nyelv” mezőben válthatod. Hogyan tüntetem el a lezárt projektet? A projekt menüjében kattints az „Archiválás” pontra. Az archivált projekt megmarad, de nem szerkeszthető, amíg vissza nem veszed. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-en.txt new file mode 100644 index 00000000..8ae5eb43 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-en.txt @@ -0,0 +1 @@ +Vikunja — Install — Felhom.eu ← Back Vikunja — Install Task lists and boards (a Todoist/Trello alternative) ~50M RAM Full description, screenshots Memory 50 MB / 7479 MB (0%) Current usage (0 MB) Vikunja (+50 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain JWT encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-hu.txt new file mode 100644 index 00000000..e27e41e9 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-install-hu.txt @@ -0,0 +1 @@ +Vikunja — Telepítés — Felhom.eu ← Vissza Vikunja — Telepítés Feladatkezelő listák és táblák (Todoist/Trello alternatíva) ~50M RAM Részletes leírás, képernyőképek Memória 50 MB / 7479 MB (0%) Jelenlegi használat (0 MB) Vikunja (+50 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain JWT titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-en.txt new file mode 100644 index 00000000..ecda1492 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-en.txt @@ -0,0 +1 @@ +Vikunja — Settings — Felhom.eu ← Apps Vikunja Task management - lists, Kanban boards and Gantt charts ● Running tasks.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. For this the app restarts once and is briefly unavailable meanwhile. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address tasks.tester4.test JWT encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-hu.txt new file mode 100644 index 00000000..d06d5d31 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/page-overview-hu.txt @@ -0,0 +1 @@ +Vikunja — Felhom.eu ← Alkalmazások Vikunja Feladatkezelő - listák, Kanban táblák és Gantt diagramok ● Fut tasks.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím tasks.tester4.test JWT titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/record.json b/documentation/audits/catalog-sweep-2026-10-24/vikunja/record.json new file mode 100644 index 00000000..ae50c353 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/record.json @@ -0,0 +1,124 @@ +{ + "app": "vikunja", + "sub": "tasks", + "fixture": "Vikunja", + "started": "2026-10-24T13:35:01Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "VIKUNJA_SERVICE_JWTSECRET", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/vikunja/install", + "hu_len": 942, + "en_len": 843, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/vikunja/install -> 200 'Vikunja — Telepítés — Felhom.eu' | shot /root/shots/vikunja-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/vikunja/install -> 200 'Vikunja — Telepítés — Felhom.eu' | shot /root/shots/vikunja-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 10, + "front_door": true, + "seconds_to_front_door": 10 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Ftasks.tester4.test%2F", + "http_port_80": "301 https://tasks.tester4.test/", + "guide": { + "path": "/apps/vikunja/guide", + "hu_len": 3142, + "en_len": 2931, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/vikunja", + "hu_len": 816, + "en_len": 807, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/vikunja/guide -> 200 'Vikunja — Felhom.eu' | shot /root/shots/vikunja-after-guide-phone-hu.png hscroll=False", + "goto https://tasks.tester4.test/ -> 200 'Vikunja' | shot /root/shots/vikunja-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.83657661s\", \"last_run\": \"2026-10-24T13:35:48.677171356Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 10, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-24T13:36:49.511179197Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": true, \"message\": \"A(z) vikunja: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T13:36:55.912262348Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "vikunja": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "" + } + }, + "errors": { + "count": 1, + "sample": [ + "vikunja: time=2026-10-24T15:36:59.764+02:00 level=ERROR component=http remote_ip=192.168.0.180 method=POST uri=/api/v1/login status=403 latency=129.145722ms user_agent=curl/8.14.1 err=\"Wrong username " + ] + }, + "mem_peak_mib": { + "vikunja": 37.4 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 150 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-front-desktop-hu.png new file mode 100644 index 00000000..ea6e6bb5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-guide-phone-hu.png new file mode 100644 index 00000000..9597ab07 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-desktop-en.png new file mode 100644 index 00000000..d36b1917 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-phone-hu.png new file mode 100644 index 00000000..40d320a5 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/vikunja/screens/vikunja-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/vikunja/walk.log b/documentation/audits/catalog-sweep-2026-10-24/vikunja/walk.log new file mode 100644 index 00000000..cca2be7f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/vikunja/walk.log @@ -0,0 +1,15 @@ +13:35:17Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:35:27Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'} +13:35:27Z gate: tasks is gated — passed as the household (cookie set) +13:35:27Z [1] installed: deployed 10 s, front door 10 s +13:35:27Z vikunja: register http=200 +13:35:28Z vikunja: create project http=201 +13:35:28Z vikunja: readback of the seeded project http=200 ok=True +13:35:46Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +13:36:29Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verified': True +13:36:48Z vikunja: the seeded account no longer authenticates :: http=403 {"code":1011,"message":"Wrong username or password."} + +13:36:49Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +13:36:59Z vikunja: readback of the seeded project http=200 ok=True +13:37:38Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt +13:37:47Z == vikunja done in 150 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer.console.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer.console.txt new file mode 100644 index 00000000..50327468 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer.console.txt @@ -0,0 +1,193 @@ +16:31:23Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SUBDOMAIN_DB'] +16:31:23Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:33:54Z [1] deployed, controller state=unhealthy, pinned={'wanderer': 'flomp/wanderer-web:v0.20.0', 'wanderer-db': 'flomp/wanderer-db:v0.20.0', 'wanderer-search': 'getmeili/meilisearch:v1.36.0'} +16:33:54Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +16:33:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:33:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:29Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:34Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:10Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:01Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:06Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:11Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:16Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:21Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:26Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:31Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:51Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:56Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:01Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:06Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:11Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:16Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:21Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:26Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:31Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:47Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:43Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:28Z app never answered on wanderer/ (last rc=0 code=404) +16:41:28Z [1] installed: deployed 151 s, front door 605 s +16:41:28Z [3] no fixture for this app — the front door answering is the smallest honest check +16:41:48Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:42:37Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'wanderer', 'volumes_removed': ['wanderer_wanderer_data', 'wanderer_wanderer_meili_data', 'wanderer_wanderer_plugins', 'wanderer_wanderer_uploads'], 'hdd_paths_removed +16:42:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SUBDOMAIN_DB'] +16:43:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:51Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:56Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:47Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:28Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:33Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:38Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:43Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:28Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:33Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:29Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:34Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:10Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:10Z app never answered on wanderer/ (last rc=0 code=404) +16:51:52Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'wanderer', 'volumes_removed': ['wanderer_wanderer_data', 'wanderer_wanderer_meili_data', 'wanderer_wanderer_plugins', 'wanderer_wanderer_uploads'], 'hdd_paths_removed +16:52:01Z == wanderer done in 1238 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-en.txt new file mode 100644 index 00000000..c6dbbd04 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-en.txt @@ -0,0 +1 @@ +Wanderer — Guide — Felhom.eu ← Apps Wanderer A hike planner - routes, GPX tracks and terrain maps ● Not healthy Up to date wanderer.tester4.test Open ↗ What is it for? Plan and keep hiking routes Import and export GPX files Terrain profiles and statistics Add photos and notes to a route Share a route with other people First steps Open wanderer.tester4.test in your browser Create your account right after the install, then close sign-up on the app page. Until then, anyone who finds the address can make an account. Import a GPX file, or plan a new route Have a look at the map view Record a finished hike In the summit book you keep when and with whom you walked the route. Open the route and choose the „Summit Book” tab at the bottom. Select „Add Entry”. Set the „Date”, write a few lines in „Text”, upload photos and select „Save”. After the first entry, Wanderer asks whether to mark the route as completed. Sort routes into lists With a list you keep, for example, the family's summer hikes in one place. In the top menu, open the lists page and select the plus button. Give the list a name and select „Save List”. On a route's page, open the three-dot menu, select „Manage lists” and choose the list. Share a route with the family Your family member sees a shared route in their own account. The family member needs their own account: on the dashboard, on the Wanderer page, select „Open sign-up for 15 minutes”, and they sign up meanwhile. Open the route's three-dot menu and select „Share”. Type the family member's username into the search and select their name. Next to it you can choose: „View” (they can only look) or „Edit”. A route on your GPS or phone You can download the route as a file and load it into your hiking watch or map app. Open the route's three-dot menu and select „Export”. In „File format”, keep GPX: most devices know it. Select „Export” and copy the file to your device. Frequently asked questions Who sees my routes? Only you, by default. You can change this on the „Privacy” page of „Settings”, and decide for each route too. How do I switch between kilometres and miles? On the „Settings” page, in the language and „Units” part, choose „Metric” or „Imperial”. Why is so much text in English? Wanderer follows your browser's language, but its Hungarian translation is not complete, so many buttons stay in English there. The Hungarian guide writes them as they appear on screen. Can I download all my routes at once? Yes: on the import and export page of „Settings”, select „Export all trails”. Where does Wanderer keep my data? On the box, not with an outside provider. You see the state of its backup on the dashboard, on the „Data and backup” tab. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-hu.txt new file mode 100644 index 00000000..3e262335 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-guide-hu.txt @@ -0,0 +1 @@ +Wanderer — Felhom.eu ← Alkalmazások Wanderer Túra tervező - útvonalak, GPX nyomok és domborzati térképek ● Nem egészséges Naprakész wanderer.tester4.test Megnyitás ↗ Mire használható? Túra útvonalak tervezése és mentése GPX fájlok importálása és exportálása Domborzati profilok és statisztikák Fotók és jegyzetek hozzáadása az útvonalakhoz Útvonalak megosztása másokkal Első lépések Nyisd meg a wanderer.tester4.test címet a böngészőben Hozd létre a fiókodat azonnal a telepítés után, aztán az alkalmazás oldalán zárd le a regisztrációt. Addig bárki, aki megtalálja a címet, fiókot hozhat létre. Importálj egy GPX fájlt vagy tervezz új útvonalat Fedezd fel a térképes megjelenítést Teljesített túra rögzítése A csúcspont könyvben eltárolod, mikor és kivel jártad végig az útvonalat. Nyisd meg az útvonalat, és lent válaszd a „Csúcspont könyv” fület. Kattints a „Bejegyzés hozzáadása” gombra. Add meg a „Dátum” mezőt, a „Szöveg” mezőbe írj pár sort, tölts fel képeket, és kattints a „Mentés” gombra. Az első bejegyzés után a Wanderer megkérdezi, hogy teljesítettnek jelölje-e az útvonalat. Útvonalak listába rendezése A listával egy helyre gyűjtöd például a nyári családi túrákat. A felső menüben nyisd meg a listák oldalát, és kattints a plusz gombra. Adj nevet a listának, és kattints a „Save List” (lista mentése) gombra. Egy útvonal oldalán nyisd meg a három pontos menüt, kattints a „Hozzáadás a listához” pontra, és válaszd ki a listát. Útvonal megosztása a családdal A megosztott útvonalat a családtag a saját fiókjában látja. A családtagnak saját fiók kell: a vezérlőpulton, a Wanderer oldalán kattints a „Regisztráció megnyitása 15 percre” gombra, és ő közben regisztrál. Nyisd meg az útvonal három pontos menüjét, és kattints a „Share” (megosztás) pontra. A keresőbe írd be a családtag felhasználónevét, és kattints a nevére. Mellette választhatsz: „View” (csak megnézheti) vagy „Szerkesztés”. Útvonal a GPS-re vagy a telefonra Az útvonalat fájlként letöltheted, és betöltheted a túraórádba vagy a térképes appodba. Nyisd meg az útvonal három pontos menüjét, és kattints az „Export” pontra. A „File format” (fájlformátum) mezőben hagyd a GPX-et, ezt a legtöbb eszköz ismeri. Kattints az „Export” gombra, és a fájlt másold át az eszközödre. Gyakori kérdések Ki látja az útvonalaimat? Alapból csak te. A „Beállítások” „Privacy” (adatvédelem) oldalán ezt megváltoztathatod, és útvonalanként is eldöntheted. Hogyan válthatok kilométerre vagy mérföldre? A „Beállítások” oldalon, a nyelv és a „Mértékegységek” résznél válaszd a „Metrikus” vagy az „Angolszász” lehetőséget. Miért angol sok felirat? A Wanderer a böngésződ nyelvét követi, de a magyar fordítása nem teljes, ezért sok gomb angolul marad. Az útmutató ezeket úgy írja, ahogy a képernyőn látod. Le tudom tölteni egyszerre az összes útvonalamat? Igen: a „Beállítások” import és export oldalán kattints az „Export all trails” (összes útvonal exportálása) gombra. Hol tárolja a Wanderer az adataimat? A dobozon, nem külső szolgáltatónál. A mentésük állapotát a vezérlőpulton, az „Adatok és mentés” fülön látod. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-en.txt new file mode 100644 index 00000000..cf33c1f5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-en.txt @@ -0,0 +1 @@ +Wanderer — Install — Felhom.eu ← Back Wanderer — Install A hike planner that follows your tracks ~350M RAM Full description, screenshots Memory 350 MB / 7479 MB (4%) Current usage (0 MB) Wanderer (+350 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Search engine key Generated automatically Show Database encryption key Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Database subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-hu.txt new file mode 100644 index 00000000..4f838a33 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-install-hu.txt @@ -0,0 +1 @@ +Wanderer — Telepítés — Felhom.eu ← Vissza Wanderer — Telepítés Túra tervező és nyomkövetéssel ~350M RAM Részletes leírás, képernyőképek Memória 350 MB / 7479 MB (4%) Jelenlegi használat (0 MB) Wanderer (+350 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Keresőmotor kulcs Automatikusan generálva Megjelenítés Adatbázis titkosítási kulcs Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Adatbázis aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-en.txt new file mode 100644 index 00000000..9b043928 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-en.txt @@ -0,0 +1 @@ +Wanderer — Settings — Felhom.eu ← Apps Wanderer A hike planner - routes, GPX tracks and terrain maps ● Not healthy Up to date wanderer.tester4.test Open ↗ Running Not healthy Restart Stop Sign-up Anyone who finds this app's address can sign up. Close sign-up now — you can still add your family afterwards. For this the app restarts once and is briefly unavailable meanwhile. Close sign-up now Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address wanderer.tester4.test Search engine key Show Database encryption key Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-hu.txt new file mode 100644 index 00000000..efd85403 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/page-overview-hu.txt @@ -0,0 +1 @@ +Wanderer — Felhom.eu ← Alkalmazások Wanderer Túra tervező - útvonalak, GPX nyomok és domborzati térképek ● Nem egészséges Naprakész wanderer.tester4.test Megnyitás ↗ Működés Nem egészséges Újraindítás Leállítás Regisztráció Ennél az alkalmazásnál bárki regisztrálhat, aki megtalálja a címét. Zárd le a regisztrációt most — a családtagjaidat utána is fel tudod venni. Ehhez az alkalmazás egyszer újraindul, és közben rövid ideig nem érhető el. Regisztráció lezárása most Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím wanderer.tester4.test Keresőmotor kulcs Megjelenítés Adatbázis titkosítási kulcs Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/record.json b/documentation/audits/catalog-sweep-2026-10-24/wanderer/record.json new file mode 100644 index 00000000..1257dc37 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/record.json @@ -0,0 +1,136 @@ +{ + "app": "wanderer", + "sub": "wanderer", + "fixture": null, + "started": "2026-10-24T16:31:04Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "SUBDOMAIN_DB", + "subdomain", + true + ], + [ + "MEILI_MASTER_KEY", + "secret", + false + ], + [ + "POCKETBASE_ENCRYPTION_KEY", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/wanderer/install", + "hu_len": 1187, + "en_len": 1075, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/wanderer/install -> 200 'Wanderer — Telepítés — Felhom.eu' | shot /root/shots/wanderer-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/wanderer/install -> 200 'Wanderer — Telepítés — Felhom.eu' | shot /root/shots/wanderer-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 151, + "front_door": false, + "seconds_to_front_door": 605 + }, + "stranger": "404", + "http_port_80": "301 https://wanderer.tester4.test/", + "guide": { + "path": "/apps/wanderer/guide", + "hu_len": 3108, + "en_len": 2727, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/wanderer", + "hu_len": 769, + "en_len": 692, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": null, + "shots_after": [ + "goto https://felhom.tester4.test/apps/wanderer/guide -> 200 'Wanderer — Felhom.eu' | shot /root/shots/wanderer-after-guide-phone-hu.png hscroll=False", + "goto https://wanderer.tester4.test/ -> 404 '' | shot /root/shots/wanderer-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 15, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"14.729222959s\", \"last_run\": \"2026-10-24T16:42:03.717608703Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "containers": { + "wanderer": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "unhealthy" + }, + "wanderer-db": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "wanderer-search": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 1, + "sample": [ + "wanderer-search: \u001b[2m2026-10-24T16:43:31.338784Z\u001b[0m \u001b[33m WARN\u001b[0m \u001b[1mHTTP request\u001b[0m\u001b[1m{\u001b[0m\u001b[3mmethod\u001b[0m\u001b[2m=\u001b[0mGET \u001b[3mhost\u001b[0m\u001b[2m=\u001b[0m\"wanderer-search:7700\" \u001b[3mroute\u001b[0m\u001b[2m=\u001b[0m/indexes/a" + ] + }, + "mem_peak_mib": { + "wanderer-db": 15.5, + "wanderer-search": 60.0, + "wanderer": 65.0 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 1238 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-front-desktop-hu.png new file mode 100644 index 00000000..2969e2aa Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-guide-phone-hu.png new file mode 100644 index 00000000..f4a56d41 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-desktop-en.png new file mode 100644 index 00000000..77e83001 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-phone-hu.png new file mode 100644 index 00000000..aebafe98 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wanderer/screens/wanderer-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wanderer/walk.log b/documentation/audits/catalog-sweep-2026-10-24/wanderer/walk.log new file mode 100644 index 00000000..50327468 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wanderer/walk.log @@ -0,0 +1,193 @@ +16:31:23Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SUBDOMAIN_DB'] +16:31:23Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +16:33:54Z [1] deployed, controller state=unhealthy, pinned={'wanderer': 'flomp/wanderer-web:v0.20.0', 'wanderer-db': 'flomp/wanderer-db:v0.20.0', 'wanderer-search': 'getmeili/meilisearch:v1.36.0'} +16:33:54Z [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate +16:33:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:33:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:29Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:34Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:34:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:35:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:10Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:36:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:01Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:06Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:11Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:16Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:21Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:26Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:31Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:51Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:37:56Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:01Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:06Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:11Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:16Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:21Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:26Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:31Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:38:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:47Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:39:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:43Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:40:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:41:28Z app never answered on wanderer/ (last rc=0 code=404) +16:41:28Z [1] installed: deployed 151 s, front door 605 s +16:41:28Z [3] no fixture for this app — the front door answering is the smallest honest check +16:41:48Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +16:42:37Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'wanderer', 'volumes_removed': ['wanderer_wanderer_data', 'wanderer_wanderer_meili_data', 'wanderer_wanderer_plugins', 'wanderer_wanderer_uploads'], 'hdd_paths_removed +16:42:46Z [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['SUBDOMAIN_DB'] +16:43:36Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:41Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:46Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:51Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:43:56Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:47Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:52Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:44:57Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:02Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:07Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:12Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:17Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:22Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:27Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:32Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:37Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:42Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:45:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:28Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:33Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:38Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:43Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:48Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:53Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:46:58Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:03Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:08Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:13Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:18Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:23Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:28Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:33Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:47:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:29Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:34Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:39Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:44Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:49Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:54Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:48:59Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:04Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:09Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:14Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:19Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:24Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:49:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:10Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:15Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:20Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:25Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:30Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:35Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:40Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:45Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:50Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:50:55Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:00Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:05Z gate: wanderer not routed right now (404) — not cached, asked again next call +16:51:10Z app never answered on wanderer/ (last rc=0 code=404) +16:51:52Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'wanderer', 'volumes_removed': ['wanderer_wanderer_data', 'wanderer_wanderer_meili_data', 'wanderer_wanderer_plugins', 'wanderer_wanderer_uploads'], 'hdd_paths_removed +16:52:01Z == wanderer done in 1238 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist.console.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist.console.txt new file mode 100644 index 00000000..0249d26f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist.console.txt @@ -0,0 +1,16 @@ +14:42:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:44:05Z [1] deployed, controller state=running, pinned={'wishlist': 'ghcr.io/cmintey/wishlist:v0.67.1'} +14:44:05Z gate: wishlist is gated — passed as the household (cookie set) +14:44:05Z [1] installed: deployed 71 s, front door 71 s +14:44:06Z wishlist: /signup http=200 type=success +14:44:07Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:44:27Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:44:37Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:44:58Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:45:30Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'wishlist', 'volumes_removed': ['wishlist_wishlist_data', 'wishlist_wishlist_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verif +14:52:51Z app never answered on wishlist/login (last rc=0 code=302) +14:52:51Z wishlist: /login never came back +14:52:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:53:12Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:53:51Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'wishlist', 'volumes_removed': ['wishlist_wishlist_data', 'wishlist_wishlist_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás +14:54:00Z == wishlist done in 665 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-en.txt new file mode 100644 index 00000000..7aa68cae --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-en.txt @@ -0,0 +1 @@ +Wishlist — Guide — Felhom.eu ← Apps Wishlist A family wish list - for Christmas and birthdays ● Running wishlist.tester4.test Open ↗ What is it for? Make wish lists for Christmas and birthdays Invite the household so each keeps their own list Claim a gift without spoiling the surprise Add prices and links to the gifts Organise a present several people chip in for First steps Open wishlist.tester4.test in your browser Create your account Create your first wish list Invite the household Add a wish from a web shop link When you have the product's link, Wishlist fills in its name, price and picture by itself. On the „My Lists” page, open your list and select the plus button in the bottom right corner. Paste the product's link into „Item URL” and wait while the data loads. In „Notes”, write what matters, for example the size or the colour. If you want this most of all, switch on „Most wanted”, then select „Create item”. Claim a gift Claim what you are going to buy, so that two people do not buy the same thing. On the „Home” page, open the family member's list. At the gift, select „Claim”, then „Claim” again in the window that opens. The owner of the list does not see what was claimed, but the other family members see your name next to the gift. The gifts you claimed You see in one place what you took on and what you have already bought. Select „My Claims”. When you have bought the gift, select the bag icon next to it, the „Mark item as purchased” button. If you are not going to buy it after all, select „Unclaim”, then again in the window that opens, so that someone else can claim it. An idea for someone else's list You can suggest a wish to someone else too, but it only goes on the list if they accept it. Open the family member's list and select the plus button in the bottom right corner. Fill in the wish the same way as your own and select „Create item”. The owner of the list sees the suggestion under „Approvals” and accepts or declines it. Frequently asked questions Does my family member see what I claimed from their list? No: the owner of a list does not see the claims. The other family members see that you claimed it, so nobody buys it twice. Why does the invite link not work? Sign-up is open only after you press „Open sign-up for 15 minutes” on the dashboard, on the Wishlist page. Open the invite link during that time. Is there a Hungarian version? Not in this version: Wishlist shows in English, whatever your browser's language. That is why the Hungarian guide gives the meaning of the labels in brackets. Can I upload my own picture for a wish? Yes: when you edit the wish, select „Upload Image”. This helps when the product is not from a web shop. How do I put my wishes in order? On your list, select „Reorder”, set the order, then select „Finish”. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-hu.txt new file mode 100644 index 00000000..8bbaf335 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-guide-hu.txt @@ -0,0 +1 @@ +Wishlist — Felhom.eu ← Alkalmazások Wishlist Családi kívánságlista - karácsonyra, születésnapokra ● Fut wishlist.tester4.test Megnyitás ↗ Mire használható? Kívánságlisták létrehozása karácsonyra, születésnapokra Családtagok meghívása saját listáik kezeléséhez Ajándékok lefoglalása meglepetés nélkül Árak és linkek hozzáadása az ajándékokhoz Csoportos ajándékok szervezése Első lépések Nyisd meg a wishlist.tester4.test címet a böngészőben Hozd létre a fiókodat Hozd létre az első kívánságlistádat Hívd meg a családtagokat Kívánság felvétele webshop linkből Ha megvan a termék linkje, a Wishlist maga tölti ki a nevét, az árát és a képét. A „My Lists” (saját listáim) oldalon nyisd meg a listádat, és kattints a jobb alsó sarokban a plusz gombra. Másold be a termék linkjét az „Item URL” (termék címe) mezőbe, és várd meg, amíg az adatok betöltődnek. A „Notes” (megjegyzés) mezőbe írd be, ami fontos, például méretet vagy színt. Ha ez a legnagyobb vágyad, kapcsold be a „Most wanted” (legjobban vágyott) jelölőt, majd kattints a „Create item” (létrehozás) gombra. Ajándék lefoglalása Foglald le, amit megveszel, így ketten nem veszik meg ugyanazt. A „Home” (kezdőlap) oldalon nyisd meg a családtag listáját. Az ajándéknál kattints a „Claim” (lefoglalom) gombra, majd a megjelenő ablakban is a „Claim” gombra. A lista gazdája nem látja, hogy mit foglaltak le, a többi családtag viszont látja a neved az ajándék mellett. A lefoglalt ajándékaid Egy helyen látod, mit vállaltál, és mit vettél már meg. Kattints a „My Claims” (foglalásaim) pontra. Ha megvetted az ajándékot, kattints a mellette lévő táska ikonra, a „Mark item as purchased” (megvettem) gombra. Ha mégsem veszed meg, kattints az „Unclaim” (foglalás törlése) gombra, majd a megjelenő ablakban is, hogy más lefoglalhassa. Ötlet más listájára Másnak is javasolhatsz kívánságot, de az csak akkor kerül fel, ha ő elfogadja. Nyisd meg a családtag listáját, és kattints a jobb alsó sarokban a plusz gombra. Töltsd ki a kívánságot ugyanúgy, mint a sajátodnál, és kattints a „Create item” gombra. A lista gazdája az „Approvals” (jóváhagyások) résznél látja a javaslatot, és elfogadja vagy elutasítja. Gyakori kérdések Látja a családtag, hogy mit foglaltam le a listájáról? Nem: a lista gazdája nem látja a foglalásokat. A többi családtag látja, hogy te foglaltad le, így nem veszik meg kétszer. Miért nem működik a meghívó link? A regisztráció csak akkor nyitott, amikor a vezérlőpulton, a Wishlist oldalán a „Regisztráció megnyitása 15 percre” gombot megnyomod. A meghívó linket ebben az időben kell megnyitni. Van magyar nyelve? Ebben a változatban nincs: a Wishlist angolul jelenik meg, a böngésző nyelvétől függetlenül. Az útmutató ezért zárójelben megadja a feliratok jelentését. Feltölthetek saját képet egy kívánsághoz? Igen: a kívánság szerkesztésekor kattints az „Upload Image” (kép feltöltése) gombra. Ez akkor jó, ha a termék nem webshopból van. Hogyan rendezem a kívánságaimat? A listádon kattints a „Reorder” (átrendezés) gombra, állítsd be a sorrendet, majd kattints a „Finish” (kész) gombra. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-en.txt new file mode 100644 index 00000000..4873398f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-en.txt @@ -0,0 +1 @@ +Wishlist — Install — Felhom.eu ← Back Wishlist — Install Wish lists shared across the household ~120M RAM Full description, screenshots Memory 120 MB / 7479 MB (1%) Current usage (0 MB) Wishlist (+120 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-hu.txt new file mode 100644 index 00000000..e5e2827f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-install-hu.txt @@ -0,0 +1 @@ +Wishlist — Telepítés — Felhom.eu ← Vissza Wishlist — Telepítés Családi kívánságlista megosztás ~120M RAM Részletes leírás, képernyőképek Memória 120 MB / 7479 MB (1%) Jelenlegi használat (0 MB) Wishlist (+120 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-en.txt new file mode 100644 index 00000000..cc7213b8 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-en.txt @@ -0,0 +1 @@ +Wishlist — Settings — Felhom.eu ← Apps Wishlist A family wish list - for Christmas and birthdays ● Running wishlist.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, press this button. Until then, phone apps and the rest of your family cannot reach it. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address wishlist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-hu.txt new file mode 100644 index 00000000..80ceee6f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/page-overview-hu.txt @@ -0,0 +1 @@ +Wishlist — Felhom.eu ← Alkalmazások Wishlist Családi kívánságlista - karácsonyra, születésnapokra ● Fut wishlist.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím wishlist.tester4.test \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/record.json b/documentation/audits/catalog-sweep-2026-10-24/wishlist/record.json new file mode 100644 index 00000000..0eb281c5 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/record.json @@ -0,0 +1,118 @@ +{ + "app": "wishlist", + "sub": "wishlist", + "fixture": "Wishlist", + "started": "2026-10-24T14:42:38Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ] + ], + "install_page": { + "path": "/apps/wishlist/install", + "hu_len": 861, + "en_len": 787, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/wishlist/install -> 200 'Wishlist — Telepítés — Felhom.eu' | shot /root/shots/wishlist-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/wishlist/install -> 200 'Wishlist — Telepítés — Felhom.eu' | shot /root/shots/wishlist-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 71, + "front_door": true, + "seconds_to_front_door": 71 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fwishlist.tester4.test%2F", + "http_port_80": "301 https://wishlist.tester4.test/", + "guide": { + "path": "/apps/wishlist/guide", + "hu_len": 3096, + "en_len": 2834, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/wishlist", + "hu_len": 709, + "en_len": 715, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/wishlist/guide -> 200 'Wishlist — Felhom.eu' | shot /root/shots/wishlist-after-guide-phone-hu.png hscroll=False", + "goto https://wishlist.tester4.test/login?redirectTo=%2F -> 200 'Sign in' | shot /root/shots/wishlist-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 10, + "status": "{\"db_dump\": {\"count\": 0, \"duration\": \"1.695388609s\", \"last_run\": \"2026-10-24T14:44:28.716028086Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 20, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"wishlist\", \"started_at\": \"2026-10-24T14:52:51.472432603Z\", \"last\": {\"op\": \"restore\", \"stack\": \"wishlist\", \"ok\": true, \"message\": \"A(z) wishlist: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T14:53:07.949444237Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_restore": true, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "seed_read_after_unit_restore": true, + "containers": { + "wishlist": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "wishlist": 199.7 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 665 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-front-desktop-hu.png new file mode 100644 index 00000000..8bebf440 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-guide-phone-hu.png new file mode 100644 index 00000000..f43b805c Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-desktop-en.png new file mode 100644 index 00000000..2abc9ac6 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-phone-hu.png new file mode 100644 index 00000000..d9741c35 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/wishlist/screens/wishlist-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/wishlist/walk.log b/documentation/audits/catalog-sweep-2026-10-24/wishlist/walk.log new file mode 100644 index 00000000..0249d26f --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/wishlist/walk.log @@ -0,0 +1,16 @@ +14:42:55Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +14:44:05Z [1] deployed, controller state=running, pinned={'wishlist': 'ghcr.io/cmintey/wishlist:v0.67.1'} +14:44:05Z gate: wishlist is gated — passed as the household (cookie set) +14:44:05Z [1] installed: deployed 71 s, front door 71 s +14:44:06Z wishlist: /signup http=200 type=success +14:44:07Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:44:27Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +14:44:37Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:44:58Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:45:30Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'wishlist', 'volumes_removed': ['wishlist_wishlist_data', 'wishlist_wishlist_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'userdata_kept': [], 'verif +14:52:51Z app never answered on wishlist/login (last rc=0 code=302) +14:52:51Z wishlist: /login never came back +14:52:51Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +14:53:12Z wishlist: sign-in as the seeded user type=success ok=True (wrong password refused) +14:53:51Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'wishlist', 'volumes_removed': ['wishlist_wishlist_data', 'wishlist_wishlist_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás +14:54:00Z == wishlist done in 665 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline.console.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline.console.txt new file mode 100644 index 00000000..191df724 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline.console.txt @@ -0,0 +1,13 @@ +15:37:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:39:12Z [1] deployed, controller state=running, pinned={'zipline': 'ghcr.io/diced/zipline:4.8.0', 'zipline-postgres': 'postgres:16-alpine'} +15:39:12Z gate: img is gated — passed as the household (cookie set) +15:39:12Z [1] installed: deployed 81 s, front door 81 s +15:39:12Z zipline: /api/setup http=200 :: {"firstSetup":false,"user":{"id":"b377itg3lycmhwc35c9ufbjd","username":"drill8de5fa","createdAt":"2026-10-24T15:39:12.712Z","updatedAt":"2026-10-24T15:39:12.715 +15:39:12Z zipline: login as the seeded user http=200 ok=True +15:39:33Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:40:36Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'zipline', 'volumes_removed': ['zipline_zipline_postgres_data', 'zipline_zipline_public', 'zipline_zipline_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [ +15:42:05Z zipline: login as the seeded user http=400 ok=False +15:42:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:42:40Z zipline: login as the seeded user http=200 ok=True +15:43:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'zipline', 'volumes_removed': ['zipline_zipline_postgres_data', 'zipline_zipline_public', 'zipline_zipline_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [ +15:43:39Z == zipline done in 348 s diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-en.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-en.txt new file mode 100644 index 00000000..f2ba6151 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-en.txt @@ -0,0 +1 @@ +Zipline — Guide — Felhom.eu ← Apps Zipline A screenshot and file sharing server that works with ShareX/Flameshot ● Running img.tester4.test Open ↗ What is it for? Screenshots upload themselves from ShareX/Flameshot Shorten a URL and share text (paste) A gallery view and albums An API, for integrations of your own User accounts and invitations First steps Open img.tester4.test in your browser On the first visit, create your admin account Point ShareX or Flameshot at the API address Upload a screenshot to check it works Before you start ShareX (Windows) or Flameshot (Linux) is recommended for uploading screenshots Send a file with a link Zipline gives an uploaded file a link that you can send to anyone. In the menu on the left, open „Upload” and select „File”. Drag the file onto the page, or click the box and choose it. Select the upload button at the bottom. After the upload the link appears: the copy icon puts it on the clipboard so you can send it. A file that deletes itself For a short-lived file you can set it to disappear after a while, or to ask for a password. On the upload page, select „Options”. In the „Upload Options” window, choose after how long the file deletes itself, for example: 1 week. If only the people you tell should open it, type a password into „Password”. Select „Close” and upload the file. Your browser remembers the setting for the next upload too. A shared folder for the family In a public folder you can share several files with one link, for example the holiday photos. On the „Folders” page, select the button that creates a folder. Fill in „Name”, switch on „Public” and select „Create”. When you upload, choose this folder in „Add to a Folder” in the „Options” window. In the folder's menu, „Copy URL” gives you the folder's link. An account for a family member Everyone uploads with their own account, so the files do not get mixed up. In the menu on the left, open „Administrator” and select „Users”. Select „Create”. Fill in „Username” and „Password”, and leave „Role” on „User”. Select „Create” and give the family member the name and the password. Frequently asked questions Who can see an uploaded file? Anyone you send the link to, even without signing in. If you do not want that, set a password in the „Options” window before you upload. How big a file can I upload? By default, up to 100 MB per file. Can I make a short link from a long address? Yes: on the „URLs” page select „Create”, paste the address into „URL” and select „Create”. A family member forgot their password. What do I do? On the „Users” page, in the menu of the family member's card, select „Edit”, type a new password into „Password” and select „Update user”. Why is Zipline in English? Zipline is only available in English. That is why the Hungarian guide gives the meaning of the labels in brackets. Documentation Official documentation ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-hu.txt new file mode 100644 index 00000000..2b061141 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-guide-hu.txt @@ -0,0 +1 @@ +Zipline — Felhom.eu ← Alkalmazások Zipline Screenshot és fájlmegosztó szerver ShareX/Flameshot integrációval ● Fut img.tester4.test Megnyitás ↗ Mire használható? Screenshotok automatikus feltöltése ShareX/Flameshot-ból URL rövidítés és szöveg megosztás (paste) Galéria nézet és album kezelés API támogatás egyedi integrációkhoz Felhasználói fiókok és meghívó rendszer Első lépések Nyisd meg az img.tester4.test címet a böngészőben Az első megnyitáskor hozd létre az admin fiókodat Konfiguráld a ShareX-et vagy Flameshot-ot az API URL-lel Tölts fel egy screenshot-ot a teszteléshez Előfeltételek ShareX (Windows) vagy Flameshot (Linux) ajánlott a screenshot feltöltéshez Fájl küldése linkkel A feltöltött fájlhoz a Zipline linket ad, ezt elküldheted bárkinek. A bal oldali menüben nyisd meg az „Upload” (feltöltés) menüt, és kattints a „File” (fájl) pontra. Húzd a fájlt az oldalra, vagy kattints a mezőre, és válaszd ki. Kattints a lenti feltöltés gombra. A feltöltés után megjelenik a link: a másolás ikonnal vágólapra teszed, és elküldheted. Fájl, ami magától törlődik Egy átmeneti fájlnál beállíthatod, hogy egy idő után eltűnjön, vagy jelszót kérjen. A feltöltés oldalán kattints az „Options” (beállítások) gombra. Az „Upload Options” ablakban válaszd ki, mennyi idő múlva törlődjön a fájl, például: 1 week. Ha csak az nyithassa meg, akinek megmondod, írj jelszót a „Password” (jelszó) mezőbe. Kattints a „Close” (bezárás) gombra, és töltsd fel a fájlt. A beállítást a böngésződ megjegyzi a következő feltöltésre is. Közös mappa a családnak Egy nyilvános mappában egy linkkel több fájlt is megoszthatsz, például a nyaralás képeit. A „Folders” (mappák) oldalon kattints a mappa létrehozása gombra. Írd be a „Name” (név) mezőt, kapcsold be a „Public” (nyilvános) kapcsolót, és kattints a „Create” (létrehozás) gombra. Feltöltéskor az „Options” ablak „Add to a Folder” (mappába tétel) mezőjében válaszd ki ezt a mappát. A mappa menüjében a „Copy URL” (link másolása) ponttal kapod meg a mappa linkjét. Fiók a családtagnak Mindenki a saját fiókjával tölthet fel, így a fájlok nem keverednek. A bal oldali menüben nyisd meg az „Administrator” (adminisztrátor) menüt, és kattints a „Users” (felhasználók) pontra. Kattints a „Create” gombra. Írd be a „Username” (felhasználónév) és a „Password” mezőt, a „Role” (szerep) mezőben hagyd a „User” (felhasználó) értéket. Kattints a „Create” gombra, és add át a családtagnak a nevet és a jelszót. Gyakori kérdések Ki láthatja a feltöltött fájlt? Bárki, akinek elküldöd a linket, bejelentkezés nélkül is. Ha ezt nem szeretnéd, feltöltés előtt adj meg jelszót az „Options” ablakban. Mekkora fájlt tölthetek fel? Alapból fájlonként legfeljebb 100 MB-osat. Tudok rövid linket készíteni egy hosszú címből? Igen: az „URLs” (linkek) oldalon kattints a „Create” gombra, másold be a címet az „URL” mezőbe, és kattints a „Create” gombra. Elfelejtette a jelszavát a családtag. Mit tegyek? A „Users” oldalon a családtag kártyájának menüjében kattints az „Edit” (szerkesztés) pontra, írj új jelszót a „Password” mezőbe, és kattints az „Update user” (mentés) gombra. Miért angol a Zipline? A Zipline csak angolul érhető el. Az útmutató ezért zárójelben megadja a feliratok jelentését. Dokumentáció Hivatalos dokumentáció ↗ \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-en.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-en.txt new file mode 100644 index 00000000..9a38a575 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-en.txt @@ -0,0 +1 @@ +Zipline — Install — Felhom.eu ← Back Zipline — Install A ShareX/Flameshot server - screenshots and file sharing ~200M RAM Full description, screenshots Memory 200 MB / 7479 MB (2%) Current usage (0 MB) Zipline (+200 MB) Where the data goes: this app has no separate data drive choice, so its data goes to the system drive ( /mnt/sys_drive ). Its backups are made all the same. Automatically generated values These values are saved together with the install. Write down the passwords you need! Domain Encryption key Generated automatically Show Database password Generated automatically Show Settings Subdomain * cannot be changed after install .tester4.test The subdomain cannot be changed after install. To change it, remove the app and install it again (all data is deleted). Start install Cancel Installing... Saving the configuration... Starting the container(s)... Initialising the app... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-hu.txt new file mode 100644 index 00000000..32e86df6 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-install-hu.txt @@ -0,0 +1 @@ +Zipline — Telepítés — Felhom.eu ← Vissza Zipline — Telepítés ShareX/Flameshot szerver - screenshot és fájlmegosztás ~200M RAM Részletes leírás, képernyőképek Memória 200 MB / 7479 MB (2%) Jelenlegi használat (0 MB) Zipline (+200 MB) Hol lesznek az adatok: ennél az alkalmazásnál nincs külön adatmeghajtó-választás, ezért az adatai a rendszermeghajtóra kerülnek ( /mnt/sys_drive ). A mentései így is elkészülnek. Automatikusan generált értékek Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat! Domain Titkosítási kulcs Automatikusan generálva Megjelenítés Adatbázis jelszó Automatikusan generálva Megjelenítés Beállítások Aldomain * telepítés után nem módosítható .tester4.test Az aldomain telepítés után nem módosítható. Megváltoztatáshoz az alkalmazás eltávolítása és újratelepítése szükséges (minden adat törlődik). Telepítés indítása Mégsem Telepítés folyamatban... Konfiguráció mentése... Konténer(ek) indítása... Alkalmazás inicializálása... \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-en.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-en.txt new file mode 100644 index 00000000..c846fc9b --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-en.txt @@ -0,0 +1 @@ +Zipline — Settings — Felhom.eu ← Apps Zipline A screenshot and file sharing server that works with ShareX/Flameshot ● Running img.tester4.test Open ↗ Running Running Restart Stop First setup Right now only you can reach this app, while you are signed in to the dashboard. So nobody else can create its first admin account. Open it and finish the first setup. When you are done, the box notices it by itself and opens the app for everyone. Done, I set it up Signing in to the app You create the admin account on the first visit. The box does not know the password — keep it in your password manager. Address and keys These were created at install time and cannot be changed. Address img.tester4.test Encryption key Show Database password Show \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-hu.txt b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-hu.txt new file mode 100644 index 00000000..359ef66c --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/page-overview-hu.txt @@ -0,0 +1 @@ +Zipline — Felhom.eu ← Alkalmazások Zipline Screenshot és fájlmegosztó szerver ShareX/Flameshot integrációval ● Fut img.tester4.test Megnyitás ↗ Működés Fut Újraindítás Leállítás Első beállítás Most csak te éred el ezt az alkalmazást, amíg be vagy jelentkezve a vezérlőpultba. Így más nem hozhatja létre az első admin fiókot. Nyisd meg, és végezd el az első beállítást. Ha kész, a doboz magától észreveszi, és mindenkinek megnyitja az alkalmazást. Kész, beállítottam Belépés az alkalmazásba Az admin fiókot az első megnyitáskor te hozod létre. A jelszót a doboz nem tudja — írd fel a jelszókezelődbe. Cím és kulcsok Ezek telepítéskor jöttek létre, és nem módosíthatók. Cím img.tester4.test Titkosítási kulcs Megjelenítés Adatbázis jelszó Megjelenítés \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/record.json b/documentation/audits/catalog-sweep-2026-10-24/zipline/record.json new file mode 100644 index 00000000..4c72b0aa --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/record.json @@ -0,0 +1,136 @@ +{ + "app": "zipline", + "sub": "img", + "fixture": "Zipline", + "started": "2026-10-24T15:37:34Z", + "deploy_fields": [ + [ + "DOMAIN", + "domain", + true + ], + [ + "SUBDOMAIN", + "subdomain", + true + ], + [ + "CORE_SECRET", + "secret", + false + ], + [ + "DB_PASSWORD", + "secret", + false + ] + ], + "install_page": { + "path": "/apps/zipline/install", + "hu_len": 990, + "en_len": 893, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "shots_install": [ + "goto https://felhom.tester4.test/apps/zipline/install -> 200 'Zipline — Telepítés — Felhom.eu' | shot /root/shots/zipline-install-install-phone-hu.png hscroll=False", + "goto https://felhom.tester4.test/apps/zipline/install -> 200 'Zipline — Telepítés — Felhom.eu' | shot /root/shots/zipline-install-install-desktop-en.png hscroll=False" + ], + "install": { + "ok": true, + "seconds_to_deployed": 81, + "front_door": true, + "seconds_to_front_door": 81 + }, + "stranger": "302 https://felhom.tester4.test/__gate/start?rd=https%3A%2F%2Fimg.tester4.test%2F", + "http_port_80": "301 https://img.tester4.test/", + "guide": { + "path": "/apps/zipline/guide", + "hu_len": 3249, + "en_len": 2871, + "english_words_in_hu": [ + "password" + ], + "accented_in_en": 0, + "same_text": false + }, + "overview": { + "path": "/apps/zipline", + "hu_len": 749, + "en_len": 741, + "english_words_in_hu": [], + "accented_in_en": 0, + "same_text": false + }, + "seed": true, + "seed_read_now": true, + "shots_after": [ + "goto https://felhom.tester4.test/apps/zipline/guide -> 200 'Zipline — Felhom.eu' | shot /root/shots/zipline-after-guide-phone-hu.png hscroll=False", + "goto https://img.tester4.test/auth/login -> 200 'Zipline' | shot /root/shots/zipline-after-front-desktop-hu.png hscroll=False" + ], + "backup": { + "code": "200", + "seconds": 20, + "status": "{\"db_dump\": {\"count\": 1, \"duration\": \"19.407399992s\", \"last_run\": \"2026-10-24T15:39:52.769748154Z\", \"success\": true}, \"enabled\": true, \"running\": false}" + }, + "snapshots_after_backup": 1, + "after_keep_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "reinstall_first_answer": { + "code": "202", + "body": "{\"ok\": true, \"message\": \"Telepítés elindítva – az állapot a kártyán követhető\"}" + }, + "kept": { + "offered": false, + "plain_install_code": "202" + }, + "seed_read_after_reinstall": false, + "restore": { + "points": 1, + "location": [ + "location: /backups/restore?flash=flash.restore.started" + ], + "seconds": 35, + "status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"zipline\", \"started_at\": \"2026-10-24T15:42:05.498157076Z\", \"last\": {\"op\": \"restore\", \"stack\": \"zipline\", \"ok\": true, \"message\": \"A(z) zipline: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-24T15:42:35.650944262Z\"}, \"last_recent\": true}", + "state": "running" + }, + "seed_read_after_unit_restore": true, + "containers": { + "zipline": { + "limit_mib": 512, + "restarts": 0, + "status": "running", + "health": "healthy" + }, + "zipline-postgres": { + "limit_mib": 256, + "restarts": 0, + "status": "running", + "health": "healthy" + } + }, + "errors": { + "count": 0, + "sample": [] + }, + "mem_peak_mib": { + "zipline": 191.3, + "zipline-postgres": 41.8 + }, + "after_final_remove": { + "containers": "", + "volumes": "", + "appyaml": "", + "appdata": "", + "kept": "", + "subdomain": "404" + }, + "total_seconds": 348 +} \ No newline at end of file diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-front-desktop-hu.png b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-front-desktop-hu.png new file mode 100644 index 00000000..39a387e8 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-front-desktop-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-guide-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-guide-phone-hu.png new file mode 100644 index 00000000..ffab9690 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-after-guide-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-desktop-en.png b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-desktop-en.png new file mode 100644 index 00000000..ac050a89 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-desktop-en.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-phone-hu.png b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-phone-hu.png new file mode 100644 index 00000000..6319bf58 Binary files /dev/null and b/documentation/audits/catalog-sweep-2026-10-24/zipline/screens/zipline-install-install-phone-hu.png differ diff --git a/documentation/audits/catalog-sweep-2026-10-24/zipline/walk.log b/documentation/audits/catalog-sweep-2026-10-24/zipline/walk.log new file mode 100644 index 00000000..191df724 --- /dev/null +++ b/documentation/audits/catalog-sweep-2026-10-24/zipline/walk.log @@ -0,0 +1,13 @@ +15:37:51Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +15:39:12Z [1] deployed, controller state=running, pinned={'zipline': 'ghcr.io/diced/zipline:4.8.0', 'zipline-postgres': 'postgres:16-alpine'} +15:39:12Z gate: img is gated — passed as the household (cookie set) +15:39:12Z [1] installed: deployed 81 s, front door 81 s +15:39:12Z zipline: /api/setup http=200 :: {"firstSetup":false,"user":{"id":"b377itg3lycmhwc35c9ufbjd","username":"drill8de5fa","createdAt":"2026-10-24T15:39:12.712Z","updatedAt":"2026-10-24T15:39:12.715 +15:39:12Z zipline: login as the seeded user http=200 ok=True +15:39:33Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'} +15:40:36Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'zipline', 'volumes_removed': ['zipline_zipline_postgres_data', 'zipline_zipline_public', 'zipline_zipline_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [ +15:42:05Z zipline: login as the seeded user http=400 ok=False +15:42:05Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started'] +15:42:40Z zipline: login as the seeded user http=200 ok=True +15:43:30Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'zipline', 'volumes_removed': ['zipline_zipline_postgres_data', 'zipline_zipline_public', 'zipline_zipline_uploads'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [ +15:43:39Z == zipline done in 348 s diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index 538b1e17..4ddf613f 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -113,21 +113,23 @@ match what the reader sees is how an instrument stops being believed (R-421). It **nothing was proven on the day this line was drawn** and a stopping line that moves a status is a stopping line that lies. -## Install & onboarding — 6 rows (P3 4, P4 2) +## Install & onboarding — 7 rows (P3 5, P4 2) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| | **R-980** | Install & onboarding | P3 | **A person cannot check that the installer is ours: the ISO's first boot runs the install script from a movable tag with no hash or signature, and the ISO checksum sits on the same website as the download.** Fix: a signed manifest (or signature) checked by the ISO before it runs the script, and the public key printed in the guide. Security review 2026-10-12 (`audits/security-review-2026-10-12/`); detail held off-git for the operator (`/mnt/5_hdd/felhom.eu/evidence/security-review-2026-10-12-PRIVATE/`). | OPEN — design-proposal | — | Design note, then build | CC | | **R-250** | Install & onboarding | P3 | **A customer create can fail fail-closed because the host-key scan ladder is shorter than the DNS/AAAA settle time.** Found 2026-08-07 creating the fifth walk's venue. `POST /configs/new` with off-site enabled provisions the Storage Box sub-account and then scans its SSH host key to pin it — **fail-closed by design** (`offsite.go:111-121`, *"don't serve a descriptor the controller can't verify"*), with `defaultScanBackoff` = 2+4+8+16+30 ≈ **60 s**, sized by its own comment to *"the observed DNS propagation lag"*. **Measured, both halves:** the first create exhausted the ladder — five `no such host`, then `dial tcp [2a01:4f8:bacc:2:200::d30]:23: connect: network is unreachable` (the name had just begun resolving, **AAAA-first, into a pod with no IPv6 route**) — and the hub logged `[ERROR] offsite provision for walk5`. An **identical second POST succeeded** ~70 s later on its own final rung (`shared already provisioned … (subaccount 285351)`). **Total settle ≈ 100 s against a 60 s budget.** The endpoint was never the problem: verified afterwards from both the node and the hub pod, by name, `SSH-2.0-OpenSSH_9.6p1`. **Two distinct things are wrong and should not be merged:** (1) the budget is sized against DNS *existence*, but what actually bit is the **AAAA-before-A** window, a different and longer phenomenon — lengthen the ladder and/or prefer the A record for the scan dial; (2) **the operator is told nothing actionable** — the create fails with a generic error, the remedy is "press it again", and nothing says so. The retry is genuinely safe (idempotent on the label; confirmed afterwards — `one_time_secrets` 1, one sub-account, no double-provision) **but that safety is invisible to the person deciding whether pressing again will double-charge them.** **Severity LOW-MEDIUM:** self-clearing, no data at risk — but it is the first thing a new customer's provisioning does and it fails looking like an outage. | **VERIFY** — **2026-10-12: hub 0.147.0 live** (S29, decision 224): the host-key scan dials IPv4 first, waits ~2 min (was ~1), and when it still runs out says the store was created and it is safe to press Save again (`TestScannerDialsIPv4First`, `TestScanOutOfRetriesSaysSafeToPressAgain`, red-proved). Known limit: the hub Ingress reads for 60 s, so a very slow first try can show a gateway timeout while provisioning finishes in the background (pressing again is safe). **READY** — operator ruling 2026-10-12 (S29, `09` §3 decision 224): yes — the scan prefers IPv4, waits longer, and the error says „safe to press again". **READY** — owner Viktor | — | The next real off-site setup (a new customer): read the hub log for the scan; success or the new message → close | CC | | **R-516** | Install & onboarding | P3 | **[P3-LOW] English a customer meets on a fresh box and its apps' first screens — enumerated by the big night.** MEASURED 2026-09-14 (BIGNIGHT, VM 333, ISO 1.27.1, controller 0.242.0). Felhom-owned: (1) the dashboard menu item **„Debug"**; (2) the dashboard CPU tile **„Load: 0.29 / 0.39 / 0.37"**; (3) the launcher tile **„Filebrowser"** opens a login in English with no Felhom text (R-513); (4) the storage page mixes formal „Adjon hozzá / Csatlakoztasson" with the product's „te". App first screens a household meets before any Felhom text helps: (5) **Uptime Kuma 2.4 opens on „Which database would you like to use?"** (SQLite / Embedded MariaDB, „Next") — the app card's „Első lépések" does not mention it; (6) PrivateBin, Gokapi, AdventureLog and FileBrowser UIs are English (the apps' own). Already rows: the Proxmox installer screens (R-495, answered by the guide), `wiki.DOMAIN` (R-498). **Fix shape:** rename „Debug"/„Load" (controller); add the Uptime Kuma database step to its card, or pre-seed `db-config.json` for SQLite in the template (catalog). **Added by F4 (20:04:54Z):** (7) the storage page prints the disconnect time as a raw ISO UTC string „Leválasztva: 2026-09-14T19:58:02Z"; (8) the „Meghajtó leválasztva" banner appears twice on every page; (9) „4 telepített alkalmazás nem fut — nézze meg a rendszermonitort" uses the formal form. **Added by F7 (20:50–21:00Z, system disk at 95 %):** (10) a banner on every page in English, „**SSD disk usage high: 90%**"; (11) the dashboard tile reads „Rendszer (/) 61.8 GB / 68.7 GB (**90%**)" while `df` reports **95 %** (reserved blocks ignored), and „(/)" labels the data volume `/mnt/sys_drive`; the deploy page says nothing about free disk. **Added by the i18n spike (2026-09-17, controller v0.247.0):** (12) **six formal („ön") forms in the converted dashboard copy** — „Olvassa be telefonnal" (launcher QR hint), „Biztosan kikapcsolja a megosztást?" (launcher), „Ha újratelepíti … importálnia kell" (the layout's remove-app modal), „Kérjük, vegye fel a kapcsolatot" (backups empty state). They were NOT fixed — a localisation release may not change Hungarian bytes — and are now COUNTED by `controller/scripts/i18n_missing_gate.py` (`HU_FORMAL_CEILING` = 6, a ratchet: a new one convicts, fixing one lowers it). The inventory (`audits/I18N-INVENTORY-2026-09-17.md`) is the list this row closes against in localisation slice 6 (R-561). **Extended 2026-09-17 by slice 1 (controller v0.248.0–v0.250.0):** the converted copy now counts **16** formal forms (`HU_FORMAL_CEILING` 6 → 10 → 12 → 16, each raise stated, Hungarian unchanged by rule) — and the count is an UNDER-count: the gate's stem list sees 4 on the release C pages (storage, drive wizards, debug), while a wider list („írja be”, „adja meg”, „adjon hozzá”, „válassza ki”, „biztosan eltávolítja”, „engedélyezze”, „hozzon létre”, „kattintson”) finds at least **22** keys there alone (login „Adja meg a jelszavát”, the NAS guide, the storage confirms). Widen the stems when this row is worked; the ceiling rises with them. **NARROWED 2026-09-20 by localisation slice 6's walk, item by item** (`audits/i18n-slice6-2026-09-20/R-516-item-by-item.md`): item 2 FIXED (slice 1), items 3 and 6 APP-OWNED (and for an English household item 6 is an advantage), item 11 is a wrong NUMBER rather than a language and needs its own row, item 1 is correct English for an English reader and still open for a Hungarian one. **Items 4, 7, 8, 9 and 10 are NOT DECIDABLE FROM AN ENGLISH WALK** - they are about Hungarian copy quality, a disconnected drive and a full disk, none of which this walk had. **What this row is now waiting for is a HUNGARIAN walk on a box with a second drive**, not another English one; saying it closed would be the kind of closure that makes a register stop meaning anything. **-- 2026-10-08:** the recovery screen's own answers are Go literals in Hungarian only — 14 `renderRecovery` messages in `controller/internal/web/recovery_handlers.go` (seen: the safe default „A művelet nem fejeződött be…" rendered on an English page in a red-proof run). Today's new R-304 sentence is a bundle key in both languages; the 14 old ones are not. | **NARROWED 2026-09-20 - rank P3-LOW; owner: CC; needs a Hungarian walk** **2026-10-05 (burn-down night): items 1 and 4 FIXED on controller `main`** (`d7efa7b`): the menu says „Hibakeresés” (English „Debug”); the storage pages use the te-form (formal-form ceiling 17 → 14; 116 parity fixtures changed by exactly those bytes). Item 2 was already fixed. **Left:** items 5–6 (apps' own screens) and the rest. **2026-10-06: items 1 and 4 DELIVERED** (controller v0.298.0). **2026-10-06 (burn-down night, later): items 7–10 and 12 FIXED on controller `main`** (`e4774e6`, `2e5ef7e`): the disconnect time in local time; one banner per unplugged drive; „nézd meg”; the disk/memory/CPU/temperature banners in the household's language (`health.*` keys; the wire text to the hub unchanged and pinned); the last eleven counted formal forms are te-form (ceiling 14 → 0; 119 parity fixtures changed by exactly those bytes). **Left:** items 5–6 (apps' own screens); about 20 formal forms the gate does not count yet („írja be”, „adja meg”, „hozzon létre”, …) on the debug, storage, network-storage and security pages. Item 11 moved to its own row **R-889**. **2026-10-06 02:40: the bundle has NO formal form left** (controller `4c3c203`, unreleased): 49 sentences in the te-form; the gate's stem list widened (it counted 61 on the previous bundle, 0 now) with decoys and one listed third-person exception. **Left (narrowed):** Felhom-owned formal forms in Go and template literals the gate cannot read yet — the network-storage attach errors, escrow and share handlers, the single-copy notice, a settings refusal, the SMART mail, a fill-watch „Kérjük”, and the setup wizard pages; each moves into the bundle in the te-form. Items 5–6 are the apps' own screens (not ours). **2026-10-06: items 7–10, 12 and the bundle's 49 formal forms DELIVERED** in controller v0.299.0. **2026-10-06 night: the Go-literal leftover moved** (controller main `3d6ba28`, unreleased): 22 Go-literal messages — escrow handler (6), share password page (2), export upload (1), network-storage uid/remove/attach failures (13) — are bundle keys (`api.escrow.*`, `api.share.*`, `api.export.*`, `api.netstorage.*`) in the te-form with English (14 were formal); a detached attach failure renders in the reader's language; the NAS refusal says „Válassz". `TestR516_GoLiteralFormalFormsAreGone` (source scan + positive control), `TestR516_NetAddFailureFollowsTheReader`; red-proofs `audits/night-burndown-2026-10-06/ctrl/R-516-red*.txt`. **Left:** the setup wizard and recovery-info.txt (R-554); the SMART and fill-watch texts (the hub event's message — wire text, needs the household-copy producer shape); items 5–6 (apps' own screens). | — | — | CC | +| **R-1273** | Install & onboarding | P3 | **An install that fails on the image registry's rate limit tells the household only „exit code 1”.** Catalog sweep 2026-10-24, code-server 16:01:37: `lscr.io … toomanyrequests` → the product cleaned up right (R-649) but the event and the card say „Alkalmazás telepítése nem sikerült: Code-Server — exit code 1”; nothing says the download server is busy and a later try works. The same install went through later (`audits/catalog-sweep-2026-10-24/code-server/`). | OPEN | — | Recognise `toomanyrequests` (and a pull timeout) in the deploy error and say „the app's download server is busy — try again in an hour”; a test with the stderr line | CC | | **R-494** | Install & onboarding | P4 | **NARROWED 2026-09-14 by operator ruling → [P3-LOW] the hub COULD create the tunnel at customer creation, for a domain already on Cloudflare. Not blocking: every customer has their own domain and the operator creates the tunnel per day-0 A.1 (`architecture/01-topology-and-trust.md`).** *Original finding, kept:* **[P1-HIGH] A new customer's dashboard has NO reachable address unless the operator hand-makes a Cloudflare tunnel — the link in the setup-code mail is dead.** MEASURED 2026-09-14 on a fresh install from the public ISO (drill intervention **I1**): the claim mail points at `https://felhom.drill0242.felhom.eu`; that name has **no A and no AAAA** record (`dig @1.1.1.1`, control `felhom.enkisfelhom.hu` resolves); the hub has **no tunnel- or DNS-creation code** (`hub/internal/cloudflare/` holds only geo-rule removal; `cf_tunnel_token` is a pasted, optional form field, `configs.go:1478`) — day-0 runbook A.1 makes it a manual Cloudflare-dashboard step that nothing on the customer-create page asks for; the box's own split-horizon resolver on the appliance LAN IP answered `google.com` but not the dashboard name at 13:27:39Z; the agent applied the record at **13:27:44Z** (`lanresolver: applied split-horizon record … ip=192.168.0.158`, 3 m 46 s after the controller started), so the box CAN answer the name — **but only to a device that uses the box as its DNS server, and no document, screen or mail tells a household to do that**; the router and the installer-offered DNS answer nothing. The page was reachable only at the guest's LAN address with the name forced (`curl --resolve …:443:192.168.0.158`). **A volunteer could not have done that.** **What it needs:** an operator ruling — the hub creates the tunnel and DNS at customer creation, or the product gives a household a LAN address that works with no DNS change. | **READY — rank P3-LOW; owner: CC** **Re-ranked 2026-10-03: P3→P4: operator-side automation; the operator creates the tunnel by hand per the day-0 runbook.** | — | — | CC | | **R-504** | Install & onboarding | P4 | **[P3-LOW] `iso.felhom.eu` cannot show an index page on its own — its root returns 404, and the download page lives on the website instead.** MEASURED 2026-09-14: `https://iso.felhom.eu/` and `/index.html` → 404; only named objects answer. The host is an R2 bucket behind a custom domain; whether R2 would serve an uploaded `index.html` at `/` was **not measured** (uploading anything to the public bucket is a publication). The ISO v1.27.0 task puts the Hungarian download page at `felhom.eu/letoltes` (published with the ISO, after the operator's yes). **Remaining:** a redirect from `iso.felhom.eu/` to that page needs a Cloudflare rule the session has no credential for. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator (Cloudflare rule)** **Re-ranked 2026-10-03: P3→P4: households are sent to the website's download page; the bare address is cosmetic.** | — | — | operator | -## Apps & catalog — 16 rows (P3 6, P4 10) +## Apps & catalog — 17 rows (P3 7, P4 10) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| | **R-1091** | Apps & catalog | P3 | **Catalog copy that is wrong or stale at the pinned tag, found writing the guides — each needs an operator word or a live check, so none was changed tonight.** From source at each app's tag (evidence per app in `audits/app-guides-2026-10-15/B/`): (1) and (2) **DONE 2026-10-16** (operator decision D12: reword): calcom's use case now names Apple Calendar or a CalDAV calendar instead of Google/Outlook, and bentopdf's tagline and use case say the browser does the work and the file stays on the device (catalog CHANGELOG 2026-10-16); (3) **sabnzbd**, **nzbget** use_cases say Radarr/Sonarr/Jellyseerr hand them jobs — the box wires only qBittorrent and Transmission (`mediawire.go`), and a hand link needs a path mapping; (4) **onlyoffice** first_steps 3–4 tell the household to wire Nextcloud by hand — the integration toggle does it (`internal/integrations/onlyoffice_nextcloud.go`); (5) **glance**, **homepage** first_steps send the household into config files in a Docker volume no household tool reaches; (6) **lubelogger** starts with only the „Dashboard" tab and in miles (shipped `appsettings.json`), so first step 3 cannot be done as written; (7) **home-assistant** first_steps promise auto-discovered devices — the app runs on a Docker bridge, where mDNS/SSDP were measured deaf (spike R-6); (8) **homebox** and **gitea** `add_people` name menus that moved or read differently at the tag; **bookstack** `default_creds` still says `admin@admin.com / password`, which after_install replaces; **dawarich** names the API key's page „Settings" (source suggests the account page); **code-server** says „install your tools" with no sudo; **komga** names the discontinued Tachiyomi; **seerr** `docs_url` points at Overseerr; **wanderer**'s comment still says it cannot close sign-up (R-714 is fixed in the same file); (9) **nzbget** and **grafana** deploy-field descriptions say the password can be changed later — nzbget re-applies its env password at every start and grafana ignores the field after first start (R-1086 is the qBittorrent/Transmission side). | OPEN — filed 2026-10-15 | — | Live-check (5)–(7) and (9) on 9202; fix (3), (4), (8) as copy with the freeze re-admitted; re-run the guide label check for any app whose copy moves | CC | +| **R-1272** | Apps & catalog | P3 | **Homepage answers a stranger with no gate at all**, while Glance — the same class of dashboard — is behind the family gate (decision 221, S26). A stranger who reaches `homepage.` sees the box's CPU, memory and disk figures and, once the family edits it, their own links (`audits/catalog-sweep-2026-10-24/homepage/`; the stranger request → 200). | WAITING-ON-OPERATOR | the operator's word | Decide: `family_gate: true` like Glance (CC's pick: one line in the template, proven on the drill first) or leave it open | operator | | **R-1092** | Apps & catalog | P4 | **Three apps show no guide: plant-it and home-assistant carry one HIDDEN (`checked_version: ""`), emby has none.** plant-it: `lifecycle: abandoned`, and its pinned image does not exist upstream, so there is no screen to check labels against. home-assistant: its frontend follows the browser language and the Hungarian strings are fetched at build time, not kept in git, so the Hungarian labels cannot be checked against source (the draft is written; the shipped frontend in the image could check them). emby: its server's web UI is in no public source at 4.11.0.4. Evidence: `audits/app-guides-2026-10-15/B/`. The other 62 templates show a checked guide (controller ≥ 0.315.0). | OPEN — filed 2026-10-15 | — | home-assistant: check the Hungarian labels against the frontend files in the pinned image (read-only, on a box running it), then set checked_version; emby: label-check against the image's own web files the same way; plant-it: nothing while abandoned | CC | | **R-676** | Apps & catalog | P3 | **[P3-LOW] Watch: immich's first start restarted 12 times — decision 28's crash-loop stop (6 in 10 min) would stop it.** From the 2026-09-17 chaos night (DB connection dropped during the first-start geocoding import on a 6 GB guest; it did not recover that night). No healthy app in any drill evidence restarts on a first start (1831 samples, 40 live containers), so the threshold stands; this row exists so the first immich install under v0.269.x is watched. `audits/night-2026-09-24/A3/40-first-start-restarts.txt` **2026-09-25 night (read from source, v0.271.0): a DEPLOY's first start is NOT covered by decision 28's suppression** — `Deploying` clears when `compose up -d` returns (`deploy.go` "Clear deploying flag"), and `ObserveUnhealthy` then samples the app; an automatic update's step, verify and undo ARE covered (`Updating`, pinned by `TestD28_NoCrashLoopStopDuringAnAutomaticStep`). So a first start that restarts ≥ 6 times in 10 min is stopped — which R-676 already accepts for a broken first start; a healthy slow first start would be stopped too. **-- 2026-09-30: the first-start restarts are explained.** immich's first-start geodata import OOM-kills its database at 512M on a guest with no swap (R-732, measured: 61–104 kills); the 2026-09-17 chaos-night case (DB connection dropped during the import on a 6 GB guest) fits it. Fixed in the catalog (`56c4888`, 768M). The watch itself (decision 28 on a DEPLOY's first start) is unchanged. | **OPEN — P3; owner: CC (watch)** | — | — | CC | | **R-1028** | Apps & catalog | P3 | **Plex's claim code can run out during the install, and the box cannot recover it.** plex.tv's code lives 4 minutes from the moment the household copies it; the clock covers the wizard, the image pull (`plexinc/pms-docker` is 351 MB, measured) and the first start. Plex reads `PLEX_CLAIM` only on its first run, and the field is `locked_after_deploy` — so a late code leaves an unclaimed server and the only way back is remove + install again. Reported by the operator during the 2026-10-14 test; on Tester 1's line the pull+start took 8.5 s and the claim worked (`audits/media-all-drives-2026-10-14/``G-auth/G3-plex-claim.txt`), so it bites on a slow line or a slow hand. **K6, 2026-10-14 night (`audits/media-drive-events-2026-10-14/``K6-1-unclaimed-plex.txt`):** an unclaimed Plex starts with no code at all, and `POST /myplex/claim?token=` on the RUNNING server reaches plex.tv (a wrong code → 500 after plex.tv's 401). So the box can pull + start first and ask for the code after: no race. A real claim needs the household's code — the morning step on the throwaway `plex-k6` on Tester 1. Narrowed 2026-10-14 night. **PROVEN 2026-10-15 morning (`K6-2-claim-after-start.txt`):** the operator's real code, given to the RUNNING unclaimed `plex-k6` → 200, `claimed` 0→1, `PlexOnlineToken` written, and the open door closed (no token → 401). `ADVERTISE_IP` was unset and the claim did not need it; whether clients find the server without it was not measurable (the throwaway had no published port). **BUILT 2026-10-15 (v0.313.0):** `after_start` field — not asked at install; the Plex page asks for the code once Plex runs and claims the running server; the gate opens only when Plex says claimed. Proven up to the code on 9201 (G5). | **NARROWED** — the dashboard claim with a real code is the last step | a household Plex code | Claim through the Plex page with a real code (G5c); then close | CC | @@ -142,7 +144,7 @@ stopping line that lies. | **R-1043** | Apps & catalog | P4 | **Sonarr, Radarr and Prowlarr build their login redirect as an absolute `http://` URL.** They trust forwarded headers only from their „Trusted networks” (the household set `192.168.0.0/24`; traefik is `172.18.x`), so they ignore `X-Forwarded-Proto: https` and answer `Location: http:///login` to an https visitor. Since controller v0.312.0 that hop is sent back to https by traefik (a GET, no password), so it is cosmetic; a template could seed traefik's network as trusted. (`audits/https-only-2026-10-14/``1A-3-4.txt`) | **OPEN** — filed 2026-10-14 | — | Seed the docker network as a trusted proxy in the *arr templates (with the R-1030 seed), measure the redirect | CC | | **R-1099** | Apps & catalog | P4 | **The N100 may hold RomM games in the old upload place, now shown under a fake „roms” platform.** Until 2026-10-16 RomM's own upload wrote to the drive's `roms/roms//`; after the mapping fix (catalog `fb18471`, R-1089) those files are at RomM's `library/roms/roms/…`. Measured on 9201: such a game showed as missing in its platform and again under a platform „roms” (`audits/romm-ghost-2026-10-16/B/b-after.txt`). Files put in with the file manager are not affected — they are now found. The N100 runs RomM (hub `/apps/romm`); CC does not log in to the lived-in box. | OPEN — filed 2026-10-16 | Operator: look at `roms/roms/` on the N100's drive in the file manager | If it holds platform folders: move them up one level into `roms/`, then run „Scan” in RomM; if it is empty, close | Operator | | **R-1215** | Apps & catalog | P4 | **One Immich photo upload hung 10 minutes with no answer and was not stored, while the box was healthy.** Night soak 2026-10-21 (`audits/night-2026-10-21/P1-soak/08-load/proof.log`): cycle 36, `IMG_20120021.jpg` sent 19:38:30 UTC, the uploader gave up at its 600 s read limit; Immich's database holds 302 photos for that user, the other cycles 303 (`P1-soak/09-immich-cycle36.txt`). At that moment memory „full" pressure was 3.9 % and `/api/health` answered in 0.26 s. 1 of about 26 000 uploads that night. Not diagnosed: Immich restarted at 02:16 for the off-site dump, so its log of 19:38 is gone. The Immich phone app retries a failed upload. | WATCHING — **2026-10-22 night:** not reproducible tonight; the Immich server log of 19:38 is gone (Immich restarted at 02:16 for the off-site dump). What the household sees: the upload fails after 10 minutes and the Immich phone app sends it again. | — | Watch the next long upload run with the Immich server log saved; file upstream only with a log | CC | -| **R-1267** | Apps & catalog | P4 | **Every recreate of Immich leaves one empty anonymous Docker volume behind: the image declares `VOLUME /data`, the template does not map it.** Found 2026-10-24 (review round 2, while putting 9202 back): 9202 holds 296 empty anonymous volumes; each night chain's recreate of `immich-server` made a new one (12:58, 13:00, 13:01 — the three test runs; the two dangling ones this session made were removed by name, nothing pruned). The photos are NOT affected: Immich picks `/usr/src/app/upload` whenever both folders exist (`detectMediaLocation` in the image's `server/dist/services/storage.service.js:28-39`), and the template binds that folder (`templates/immich/docker-compose.yml:49`) — NOT-A-FINDING for data placement. **Seen again 2026-10-24 night on Tester 1:** privatebin's image declares `/run`, `/tmp` and `/var/lib/nginx/tmp` as volumes — each recreate (the night dump's stop/start) leaves three empty anonymous volumes; the same class as Immich's `/data` (`audits/restore-holes-2026-10-24/P1-tester1/42-anon-volumes.txt`). | OPEN | — | declare the image's VOLUME paths as tmpfs or named volumes in the catalog (Immich, privatebin), or remove the dangling ones a recreate leaves, by name | CC | +| **R-1267** | Apps & catalog | P4 | **Every recreate of Immich leaves one empty anonymous Docker volume behind: the image declares `VOLUME /data`, the template does not map it.** Found 2026-10-24 (review round 2, while putting 9202 back): 9202 holds 296 empty anonymous volumes; each night chain's recreate of `immich-server` made a new one (12:58, 13:00, 13:01 — the three test runs; the two dangling ones this session made were removed by name, nothing pruned). The photos are NOT affected: Immich picks `/usr/src/app/upload` whenever both folders exist (`detectMediaLocation` in the image's `server/dist/services/storage.service.js:28-39`), and the template binds that folder (`templates/immich/docker-compose.yml:49`) — NOT-A-FINDING for data placement. **Seen again 2026-10-24 night on Tester 1:** privatebin's image declares `/run`, `/tmp` and `/var/lib/nginx/tmp` as volumes — each recreate (the night dump's stop/start) leaves three empty anonymous volumes; the same class as Immich's `/data` (`audits/restore-holes-2026-10-24/P1-tester1/42-anon-volumes.txt`). | OPEN **2026-10-24 (catalog sweep):** the same class for OnlyOffice and RomM (RomM's image volume `/romm` holds only the empty mount points of its binds); after every catalog app had been removed WITH data, the sweep box still held 52 such volumes (PrivateBin 21, OnlyOffice 8, RomM 8, Immich 3, and 12 from 12:50–12:52 before the batch, holding the same nginx folders as PrivateBin's) — remove-with-data does not see them (no compose project label). All small (4–72 KB), no household data (`audits/catalog-sweep-2026-10-24/_box/anon-volumes.txt`). | — | declare the image's VOLUME paths as tmpfs or named volumes in the catalog (Immich, privatebin), or remove the dangling ones a recreate leaves, by name | CC | | **R-1268** | Backup & restore | P3 | **Remove with „remove backups” leaves a restore's undo copy on the drive (`backups/restore-undo//`).** Seen 2026-10-24 night on Tester 1 (restore-holes Part 1, run 1): MeTube was held for support after a failed crash put-back, then removed with `remove_backups=true` — the 1.5 GB copy stayed (the removal deletes `backups/primary` and the second-drive mirror, not `restore-undo`), and nothing lists it (`audits/restore-holes-2026-10-24/P1-tester1/14-run1-teardown.txt`; removed by hand, CC's own test data). The copy is kept on purpose while a hold exists; after the app is gone it is orphaned. | OPEN | — | Remove with `remove_backups` also deletes the app's `restore-undo` folder (under the same path guard), or lists it as a kept copy | CC | @@ -156,7 +158,7 @@ stopping line that lies. | **R-683** | App updates | P3 | **[P3-LOW] Watch: after a power cut during an update's health check, the hold named an HOUR-OLD second-drive copy, not the one the update's own backup should have just made.** 2026-09-24 chaos round 3 (nextcloud, `backup_max_age: 1m`): no `backing-up` phase was seen and the hold named Tier 2 at 13:04 for an update pressed at 14:04; the pre-cut controller log was lost with the container (the runner now saves it at arm time — R-320). Round 11, the same action without a power cut, named a fresh 14:34 copy and logged the Tier-2 copy. The sentence was TRUE (it named the copy it offered); the question is why the update did not back up first. Not reproduced; watch the next power-cut drill. `audits/night-2026-09-24/E/round-03*.json`, `E/round-11-controller-pre.log` | **OPEN — P3; owner: CC (watch)** | — | — | CC | | **R-785** | App updates | P3 | **[P3-LOW] SparkyFitness is pinned 11 releases and a major behind upstream (v0.17.3; upstream v1.7.3, v1.6.0 dated 2026-07-24).** READ 2026-10-01 (`audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt`). **Needs:** an update walk 0.17 → 1.x through the ladder (bench + box), after R-784 is decided. | **OPEN — rank P3-LOW; owner: CC (after R-784)** | — | — | CC | -## Backup & restore — 52 rows (P1 1, P2 11, P3 22, P4 18) +## Backup & restore — 56 rows (P1 1, P2 14, P3 23, P4 18) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| @@ -167,6 +169,9 @@ stopping line that lies. | **R-1252** | Backup & restore | P2 | **One rejected backup block in an app's `.felhom.yml` makes that night's second-drive copy DELETE the app's copies of the household's files.** REPRODUCED on 9202 2026-10-24 (`audits/review-round-2-2026-10-24/``proofs/H2-bad-backup-block/`): audiobookshelf with a marker file in `media/audiobooks`; two unchanged runs kept the copy (the positive control); one bogus path in the block → „backup block rejected … matches no compose bind” → the legacy legs (appdata only) → „Tier 2 reconcile: removed stale dest dir userdata/media”; the original on the drive untouched. Mechanism: `internal/stacks/metadata.go:550-557` (any defect rejects the WHOLE block) → `appbackup/classify.go:217-221` → `backup/tier2_capture.go:84-100` → `tier2.go:492` `tier2Reconcile` (`:325-329`), against D25's own header (`tier2_kept.go:17-18`). Same family (static): a D25 kept copy is reconciled away when its leg leaves the declared set and its record stays (HUNT-2 H2, `tier2.go:485-492`); Remove with `remove_backups` deletes kept copies and leaves their records (HUNT-2 H9, `api/router.go:1086-1087`). **Fixed on main 2026-10-24 night** (controller `518a135`; Part 2): reconcile only under a valid classification; a rejected block is said on the app's status and once a day to the operator (`backup_run_failures`, leg `tier2-settings-unreadable`); kept copies stay in the keep set (H2); Remove drops the kept records it deleted (H9). **Proven live on 9202** (`audits/restore-holes-2026-10-24/P2-9202/`: two control runs, then the bogus path → „REJECTED … every existing copy … KEPT”). | **VERIFY** — fixed on main, waits for the release | the next controller release | release the controller (Monday list) | CC | | **R-1253** | Backup & restore | P2 | **An export with „stop the app first” during another app's restore overwrites the ONE app-stop marker file — the restore's crash record and its Undo are lost; a power cut then leaves the restored app on mixed data with no put-back.** Found 2026-10-24 (HUNT-1 H3): `AppStopGuard.Begin` writes unconditionally (`internal/backup/appstop_marker.go:279-292`) and `End()` removes the file (`:306-320`); the exporter takes the guard (`internal/appexport/export.go:139-143,262-266`) and neither `StartExport` (`:173-178`) nor the web handlers (`internal/web/handler_export*.go`, grep: no restore check) look for a running restore. Static. **Fixed on main 2026-10-24 night** (controller `c9b4b82`; Part 3): an export that stops its app refuses (409, „err.appexport.another_operation_running”) while another operation of this process holds the marker (`BusyWith`, `BeginExclusive`); picked over one marker per app (smaller: the exporter and one guard method). **Proven live on 9202** (`audits/restore-holes-2026-10-24/P3-9202/`: refused during a MeTube restore, uptime-kuma never stopped; the same export after it ran). | **VERIFY** — fixed on main, waits for the release | the next controller release | release the controller (Monday list) | CC | | **R-1254** | Backup & restore | P2 | **The hub saves a household's new escrow package in TWO writes; a failure between them leaves the new repository hash beside the OLD identity package, and the box then marks itself escrowed — on a total loss the written code opens nothing.** Found 2026-10-24 (HUNT-3 H1), read at `file:line`: `hub/internal/api/handler.go:1415` `SaveHostEscrow` commits blob + hash, `:1445` `SaveHostDRBundle` sets `identity_blob` in a second statement (`internal/store/store.go:3788-3796`; the upsert `:3490-3511` never touches it); the controller's confirm reads the hash (`felhom-controller/controller/internal/report/escrow_confirm.go:195-217`); the agent sends once. Same family (H2): a lost or late answer (30 s) tells the household „the previous code still works” when the hub may already hold the new package (`felhom-agent/internal/localapi/escrow_ceremony.go:79,532-534,639-641`). Static. **The hub half is fixed on main 2026-10-24 night** (felhom.eu `dcf4f84c`; Part 3): key, hash and identity blob in ONE transaction (`SaveHostEscrowWithIdentity`), a bad identity refused before any write; hub image `0.170.0-rc.r1254` built locally (`67db584a45d7`), NOT pushed, NOT deployed. The agent ceremony half (H2: „the previous code still works” after a lost answer) is still open. | **NARROWED** — the hub half fixed on main (waits for the hub release); the ceremony half open | the hub release (attended); the agent half | deploy hub v0.170.0 (Monday list); then the ceremony asks the hub what it holds before it says „the previous code still works” | CC | +| **R-1269** | Backup & restore | P2 | **A reinstall's own capture rewrites the unit that „remove — keep backups” kept, so restoring that unit breaks the app and the household's item is gone.** Catalog sweep 2026-10-24, reproduced on its own (`audits/catalog-sweep-2026-10-24/_unitprobe/tandoor/`): install Tandoor, one account, „Mentés most”, remove keeping data and backups, install again (a volume app: no kept-data question) → 19:50:32 „Recovery unit captured for tandoor” rewrote ONLY the unit's `app.yaml` (checksum `0f366c97…` → `4438c1c5…`, `created_at` 19:45:26 → 19:50:32) beside the OLD data → „Visszaállítás” paired the NEW install's database password with the OLD data: „password authentication failed” ×42 (app) / ×22 (postgres), state `starting`, the account not there. Seen three times (the sweep's Tandoor cycle, this probe, AdventureLog's re-run 20:03:18 → 20:05:32 → restore); AdventureLog's first run worked only because no capture fell between. The comment at `felhom-controller/controller/internal/backup/recovery_unit.go:101-103` says the refresh never rewrites the definition away from its data. Household order: „I reinstalled, my recipes are gone — restore the backup”. The data itself is not deleted (the old volumes are in the unit). | OPEN | — | Design + fix in the controller: a capture of a NEW install must not adopt a unit whose data belongs to an earlier install (a new unit, or the old one set aside); a test in this order that fails today; then `tools/unitprobe.py` again | CC | +| **R-1270** | Backup & restore | P2 | **A unit restore reports success while the app never came up.** Catalog sweep 2026-10-24: the controller logged „tandoor restored but health check failed: stack tandoor did not reach running state within 1m30s after restore”, and the status the restore page reads said `ok: true` — „A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.” (17:32:41; again in the unitprobe, 19:52:38). The household is told it worked (`audits/catalog-sweep-2026-10-24/tandoor/`, `_unitprobe/tandoor/record.json`). | OPEN | — | The restore's verdict consults the health result; the message says the app did not start and what to do; a test that fails today | CC | +| **R-1271** | Backup & restore | P2 | **„Use my kept data” loaded ANOTHER box's database — a future-dated off-site copy of the rehearsal box — under today's kept files.** Catalog sweep 2026-10-24: Tester4's off-site store holds copies from the 2026-10-20 rehearsal, whose box clock was set to 2026-10-28. On the new box the question said „Az adatbázist innen töltjük vissza: távoli mentés, 2026-10-28 07:39” for Paperless-ngx, Nextcloud and Immich, and loaded it: the seeded account / user / album was not there, and Immich never answered again (404 for 20 min). RomM, whose newest copy was its own („saját mentés, 2026-10-24 19:17”), got its item back. `07` §6.5 says the load is refused when the unit „was taken of another drive” — the rehearsal box's drive was another disk, so that check did not hold here (which field it compares: not measured). The household's own local unit stays (nothing deleted). Same future-dated copies as R-1206 (that row: retention only). Evidence `audits/catalog-sweep-2026-10-24/paperless-ngx/`, `nextcloud/`, `immich/`. | OPEN | — | Read which drive identity the load compares and why the rehearsal unit passed; refuse a unit of another drive or one dated after now (or say so); a test with both; then the sweep's kept-data cycle on one app | CC | | **R-314** | Backup & restore | P3 | **`StopAbandon` has no web route — a customer who telephones is served by a command line.** `--abandon-stop` exists on the controller binary (`cmd/controller/main.go:86`) and refuses rather than silently no-opping, which is right. But there is no handler: the only in-product way to cancel a countdown is the customer finding their recovery code (Scenario G cancels it at the moment the code proves they still have it). **An operator who is telephoned instead has to reach a shell on the customer's machine.** Used this session on the operator's ruling, container stopped first so the running controller could not overwrite `settings.json` from memory — a sequencing subtlety that is itself an argument for a route **-- 2026-10-08 design:** `audits/day-2026-10-08/design-R-314-279-177.md` — the box's own 14-day countdown has no operator door (the hub's 7-day phase does, decision 74); one door for R-314 + R-279: a fixed list of operator actions carried in the report reply. Question D1 on STATUS's decision sheet. **-- 2026-10-08 14:16 operator ruling D1 (`09` §3 decision 185):** yes — option A, a fixed list of operator actions carried in the box's report reply. | **VERIFY — 2026-10-09: DELIVERED (hub 0.144.0 + controller 0.304.0); `run_job fill-watch` proven live on the Tester 1 box (hub row „done — ran to its end"; control: the box log „checked 3 filesystem(s)"; an unknown action is refused 400). `abandon_stop` / `abandon_extend` NOT yet proven — no box has a deletion countdown; prove them on the first one.** **VERIFY — built on main 2026-10-08 (D1, decision 185), ships with tomorrow's controller + hub releases; closes after the live proof on 9202** (`abandon_stop` / `abandon_extend` through the hub's buttons). **READY (S) — NEW 2026-08-12, RANK 3** **2026-10-05 (burn-down night): NEEDS A DESIGN.** There is no operator door into a RUNNING controller (its HTTP surface is the household's session; the CLI runs in a separate process and cannot safely trigger a job in the running one). Same design as R-177 and R-279. | R-241, R-307 | An operator-authenticated POST that calls the same `StopAbandon`, so the telephone path and the code path converge | CC | | **R-401** | Backup & restore | P3 | **Revisit the off-site integrity depth when a real store is LARGE — the default rests on ONE measurement, on ONE 134 MB store.** Controller v0.228.0 (R-399) made `--read-data-subset=100%` the default for every box. The whole justification is a single data point: `demo-hp`, 2026-08-30, 140 829 678 B / 2 651 blobs / 67 snapshots, structure 35.0 s vs 100% **39.2 s** — four seconds. Re-proven live 2026-08-31 at 38.7 s. **It does not extrapolate, and the reason is structural: the structure check's cost tracks the INDEX, a read-data run's tracks the DATA.** A 50 GB store is ~370x the data and this curve says nothing about it. **Nothing was invented from that one point** — no rotation schedule, no size threshold, no bandwidth budget — because four production designs in this project were specced against unvalidated mechanisms and all four were wrong. **`readDataSubsetRe` already accepts `n/m`**, so a rotating schedule (`1/7` on a different seventh each week) needs no parser work when the time comes; the missing input is a measurement on a large store, not code. **THE TRIGGER IS AN EVENT, NOT A DATE:** the slow-check WARN from v0.228.0 firing on any box (`integritySlowNoticeThreshold`, 5 min) — that line names the duration, the depth and this row. **WHAT HAPPENS IF NOBODY ACTS:** every box re-reads its entire store every week, however large it grows, and the first person to notice is a customer whose upload is saturated. **Whoever acts must also revisit `integrityCheckTimeout` (30 min)**, which is now the number a large store meets first. | **OPEN — WATCHING** | — | When the WARN fires: measure the curve on that store, then choose between a rotation (`n/m`), a size-conditional default, or leaving it. Do NOT choose from this row's numbers — they are the small-store case. | CC | | **R-409** | Backup & restore | P3 | **Nothing in the product can vouch for the bytes of a restored recovery unit — the only hash record covers 0.002 % of it.** MEASURED on demo-hp 2026-08-31 against kimai's restored unit: `manifest.json`'s `checksums` object carries sha256 for `.felhom.yml` (2 235 B), `app.yaml` (488 B) and `docker-compose.yml` (2 195 B) — **4 918 bytes of a 213 231 242-byte unit**. The database dump (48 217 B) and the two named-volume tars (160 331 776 B + 52 845 056 B) — the recoverable data, 99.998 % of the bytes — have no recorded hash anywhere. **And nothing else supplies one:** restic 0.14.0's `restore --verify` is a size-and-mtime reconciliation (a size-and-mtime-preserving one-byte corruption of a 160 MB tar passed clean, red-proofed), and `restic ls --json` file nodes in 0.14.0 carry name, size, mode, uid/gid and three timestamps and **no content hash**. **So "the restore produced correct files" is currently unanswerable by any automated means.** **What is NOT claimed here:** `restic check --read-data-subset=100%` already proves the STORE's packs, and the config files that ARE hashed are the ones a wrong-content failure would be hardest to spot in. | **OPEN — MEDIUM** | R-87, R-361 | Cheapest fix, and it is already half-built: extend the capture's `checksums` to cover `db_dumps` and `volume_dumps` — R-361 already computes a canonical dump sha256 to prove itself, so the value exists at capture time. Then a restore-test has a real reference and R-87's narrow version becomes a content check rather than a completeness one. Evidence: `audits/SPIKE-restic-restore-test-2026-08-31.md` §Q2, §Q3. | CC | @@ -177,6 +182,7 @@ stopping line that lies. | **R-1255** | Backup & restore | P3 | **Escrow edge cases (review round 2, HUNT-3 H3/H4):** the R-1176 carry moves the newest kept package even when it holds no repository password (`hub/internal/store/escrow_carry.go:100-110` checks `identity_blob` only), while the right one stays under the deleted host (`store.go:3533-3534`); two set-asides on the same UTC day reuse a name and the purge can delete a still-stored copy's package (`hub/internal/offsitekeys/offsitekeys.go:378-385`; `store.go:4295-4300`). Static. | OPEN | — | carry the newest package that has a hash; a unique set-aside name per run; store tests | CC | | **R-1256** | Backup & restore | P3 | **Restore edge cases (review round 2, HUNT-1 H4/H5/H6/H8):** (H4) an off-site restore whose definition write fails AFTER the compose was written restarts the app on the snapshot's compose (`internal/backup/offbox_reconstitute.go:979-986`; `cmd/controller/main.go:3318-3331`); (H5) a put-back whose stop fails goes on and can merge (`restore_crash_putback.go:155-158`; `restore.go:218` ignores `volume rm -f`), then removes the copy; (H6) a second-drive mirror can start between the web refusal and the restore's own record (`web/restore_wizard.go:226`; `opstatus.go:56-66`), and the install-time kept-data load checks only RestoreStatus/IsRunning (`api/kept_install.go:89-92`); (H8) an unused restore copy is never cleaned up. Static. | OPEN | — | one attended pass over the restore paths with these four as tests | CC | | **R-1259** | Backup & restore | P3 | **The DooPlex→ep0 copy jobs: three edges and tomorrow's clock change (review round 2, HUNT-2 H6–H8, HUNT-4 H1).** The release copy keeps the newest 5 agent versions whether vouched or not, so five unvouched releases drop the vouched one from ep0 (`scripts/release-copy/felhom-release-copy:199,218,237`); its `rsync --delete` removes old versions during the transfer and mirrors a shrinking registry as deletions (`:190,237`); the hub-DB push has no lower age bound (`scripts/hub-db-backup/felhom-hub-db-backup:41,49-50`). VERIFIED on DooPlex: on 2026-10-25 the 02:30 CEST push runs at 00:30Z (`systemd-analyze calendar`) and the hub's 02:00 slot at 01:00Z (Go takes the repeated hour's second pass), so the push re-sends the 20:00 snapshot and the off-site hub DB is ~13.5 h old until 08:30. Operator data only. | OPEN | — | always keep the vouched agent; prune after a verified copy; a future-age bound; the push slot after the hub's in UTC | CC | +| **R-1274** | Backup & restore | P3 | **The restore refusal tells the household to „turn on remote backup, or connect a second drive” when the box has both and their first copy has not run yet.** Catalog sweep 2026-10-24, Grimmory and Calibre-Web: „Mentés most” makes the local copy only (`07` §8, by design), so the drive files had no copy yet; the refusal's sentence is `restore.refuse.files.none` (`felhom-controller/controller/internal/web/handlers.go:1835`) whatever the box has. The Hungarian sentence is frozen by `i18n_go_parity`, so the fix is a NEW key („the first copy is made in tonight's backup”) chosen when a tier is set up but holds nothing yet. | OPEN | — | The new key + the branch + a test | CC | | **R-91** | Backup & restore | P4 | Old 13 GB datastore copy at `/srv/pbs-felhom` on ep0's root disk **Checked from source 2026-10-05 (burn-down round 2):** Gate is long past (row waits on demo-felhom's first post-migration PBS backup, migration 2026-07-27). Last positive record of the copy: audits/CAMPAIGN-9-restore-proof-2026-07-28.md:759 'ep0 : /srv/pbs-felhom rollback copy intact (13G)'; CONTEXT.md:3666 still says it is 13 G of dead weight awaiting R-91. No later record of deletion found (grep srv/pbs-felhom across felhom.eu). Deleting is on ep0 (protected) and needs an operator word. | WATCHING | demo-felhom's first **post-migration** PBS backup | Delete once it lands; fix `CONTEXT.md:1018` same commit | CC | | **R-164** | Backup & restore | P4 | **C2's chain: the DB volume tar cannot be dropped until a SOUND dump predicate exists.** The unit carries both a volume tar and a SQL dump; the restore uses **both** — the dump is authoritative and replayed *after* the tar so it WINS (F17), with only the DB service up (R-47) — `internal/backup/restore_unit.go:262-266`. Dropping the DB container's tar would halve DB-app units **and** close the R-127(b) initdb-skip password trap (restored PGDATA ⇒ `POSTGRES_PASSWORD` ignored). | **BLOCKED** — on the predicate | a dump-validity predicate that is not `accounts has rows` | **The obvious gate is DEAD, measured:** `ValidateDump` warns when the `accounts` table is empty, and that warning was **correct** — the live DB genuinely had 0 accounts, and seeding one stopped the warning and put the row in the dump. But **a fresh appliance legitimately has zero accounts**, so promoting that predicate to a gate would **block every new customer's first backup**. Order: (1) a sound predicate — dump vs **live** per-table counts, not an absolute expectation; (2) warn→gate; (3) tar-drop. **Until (1), the tar is load-bearing** — not because dumps are bad, but because nothing can yet prove one is good. Pairs with **R-127** | CC | | **R-213** | Backup & restore | P4 | **Putting files back in place — the half the recovery screen deliberately does not do.** The screen (R-193, controller v0.200.0) unlocks the repository and LISTS what is in it; restoring is per-app and lives in the backups area, and the operator ruled the two separate on 2026-08-05: *a screen that unlocks and then offers to overwrite is two decisions wearing one button*. What is missing is the step after the listing — a customer who can now SEE their files still has to work out, per app, which restore to choose. **The operator named its requirement: a live-versus-backup comparison** — the customer must be able to see what would change before anything is overwritten | **DEFERRED** — operator ruling 2026-10-12 (S18, `09` §3 decision 213): designed after the first customers. Stays P4; re-dated: look again when the first paying household has run 30 days. **OPEN — not started, deliberately** | the comparison design (nothing exists for it yet) | After the first customers | Operator + CC | @@ -213,7 +219,7 @@ stopping line that lies. | **R-1235** | Backup & restore | P3 | **The release copy on ep0 (D33) is proven to load, not yet to restore a registry — and it follows the newest versions, not the ones the fleet needs.** Built 2026-10-23 (`scripts/release-copy/`, `audits/day-2026-10-23/08-release-copy-D33.txt`). (a) `total-loss-of-dooplex.md` „Restore the release copy” steps 2 (skopeo push back, same digest) and 3 (agent packages back) were never walked into a real new registry — only a `docker load` on 9202. (b) The copy keeps the newest 3 image tags and 5 agent versions; it does not ask the hub for the floor and the vouched agent and always include them — a vouch more than 5 releases behind would fall out. (c) The golden (`felhom-golden`, 637 MB for 0.331.0) is not copied: a new install after a DooPlex loss needs it (the brief named images + agent packages only; one golden fits under the 3 GB cap). | OPEN | — | (a) a throwaway registry on demo-hp, push one tag back, compare digests; (b) read `/configuration`'s floor + vouched agent; (c) the operator says whether the golden goes in | CC | | **R-1263** | Backup & restore | P4 | **Small items from review round 2:** a LOCAL restore's put-back mails the operator „its off-site restore FAILED” (`felhom-controller/controller/cmd/controller/main.go:1514-1518`, shared via `restore_unit.go:517-518`); Remove — even „keep my data” — deletes undeclared volumes labelled with the app's project, which no tier holds (`internal/stacks/delete.go:763-764`, R-1117); the capped copy's `--delete` reads the source in the daemon's mount view, the emptiness check in the controller's (`tier2.go:834` vs `:464`); stale comments — `felhom-agent/internal/localapi/backup_cap.go:15` („keep-last”) and `restore_crash_putback.go:32` (names a test file that does not exist); the qBittorrent password goes to whatever answers the DNS name `qbittorrent` (`upwatch/explain.go:94,108-113`); kept-copy Remove has a check-to-remove gap (`tier2_kept.go:92-111`); the release-copy restore check trusts hashes stored on ep0 (`runbooks/total-loss-of-dooplex.md`); rrsync without `-munge`/`-wo` (`audits/day-2026-10-23/08-release-copy-D33.txt:6`). | OPEN | — | fix in each repo's next attended pass | CC | -## Storage & devices — 11 rows (P3 4, P4 7) +## Storage & devices — 13 rows (P3 4, P4 9) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| @@ -228,6 +234,8 @@ stopping line that lies. | **R-1077** | Storage & devices | P4 | **No USB enclosure that hides or fakes a disk's serial has been measured.** The storage-identity spike (2026-10-15) had none at hand and found none in earlier evidence; the design's `usb_bridge` unknown rule (`architecture/16-storage-physical-identity.md` §3) is therefore an assumption. Cheap single- and dual-bay bridges are known to report one bridge serial for any disk. Evidence: `audits/storage-identity-2026-10-15/README.md` case 4b. | OPEN | — | Buy or borrow one cheap USB enclosure (single and dual bay), run `tools/physdisk_probe.py` against it, and set the rule from what it reports. | Operator (a device) then CC | | **R-1094** | Storage & devices | P4 | **The whole-disk format refusal tells the household to format the free part — which is refused while the other part is in use.** SEEN 2026-10-16 (controller 0.318.0): 409 „Ezen a lemezen egy használatban lévő meghajtó van, ezért a teljes lemez nem formázható. Csak a szabad részét formázhatod." — since agent 0.158.1 a part next to a mounted part can only be USED (the root wrapper trusts no „Felhom's own" claim). Evidence: `audits/storage-identity-buildB-2026-10-15/live/14-samedisk-refusal-offer.txt`. | READY | — | Reword `err.web.meghajto_hasznalatban_formazas` (hu + en): „… nem formázható. A szabad részét használatba veheted." Next controller release; the copy gates run. | CC | | **R-1213** | Storage & devices | P4 | **Operator detail still on two household pages:** the registered drive card's `ext4 · /dev/sdb1 · Model` line (`templates/storage.html`; W14 hid only the agent drive cards), and the heading „Távoli mentés (3. mentés) — titkosított, offsite" with the English „offsite". Found by the night helper 2026-10-21 (W11/W14 follow-up). | OPEN | — | Move the line behind „Részletek"; „…titkosított, házon kívüli" | CC | +| **R-1275** | Storage & devices | P4 | **An English household sees the drive names in Hungarian** on the install page (and wherever a storage label shows): „Belső tárhely — 52.0 GB free (default)”, „Külső tárhely (hdd_1)” (catalog sweep 2026-10-24, `audits/catalog-sweep-2026-10-24/navidrome/page-install-en.txt`). The label is stored once, in Hungarian, when the drive is found (`felhom-controller/controller/internal/settings/settings.go` `InferStorageLabel`); a household may rename it. | OPEN | — | Render a label that still equals the inferred default in the reader's language; a test per language | CC | +| **R-1276** | Storage & devices | P4 | **„Remove with data” leaves the app's empty parent folder** (`/appdata/`) when the template binds a subfolder: Grimmory, RomM, Paperless-ngx (catalog sweep 2026-10-24; 4 KB each; the bound folders were removed). Harmless (empty, not counted as old data), untidy for a household that browses the drive. | OPEN | — | Remove the parent when it is empty after the bound folders go; a test | CC | ## Security & access — 25 rows (P1 2, P2 4, P3 13, P4 6) @@ -342,7 +350,7 @@ stopping line that lies. | **R-990** | Business & legal | P4 | **Operator: read `documentation/audits/forum-research-2026-10-12/FELHOM.md` §5 and rule on each recommendation.** READ-ONLY research 2026-10-12: three years (#7943–#11092, 2,908 posts, 195 people, 82 beginner threads) of the public PROHARDVER! topic „Home server / házi szerver építése”, tagged and counted by person (`FINDINGS.md`, method and spot-check in `METHOD.md`; no username or post text in git). Ten ranked recommendations, none acted on; the top three: a „which machine works” page (8 of 33 beginners who name their hardware own only a Synology, a router disk or a Raspberry Pi — the installer cannot run there; the same gap is R-989's first recommendation from a different source, and the shipped-page half is R-991), „you do not choose an operating system — we do” (the biggest beginner question, 20 of 82 threads), and „bring your old office PC” as the cheap entry. Catalog gap (≥ 3 people): a DLNA server (7), an ad/DNS blocker (5), a camera recorder (5). | **WAITING-ON-OPERATOR** — filed 2026-10-12 | the operator's reading | Operator: rule on each of the ten (yes / no / later). If nothing is done: nothing changes; the research ages | operator | | **R-1035** | Business & legal | P4 | **Did the „felhő tárhely” page earn anything? Two dated checks.** **Baseline (reported by the operator from Search Console, 2026-10-14, last 3 months):** 1 click, 48 impressions, CTR 2.1 %, average position **73.6**; „felhő tárhely” 19 impressions, „felhőtárhely” 5, „felhő alapú tárhely” 3. CC measured separately that the phrase „felhő tárhely” appeared **0 times** on the home, FAQ and backup pages — Google was showing the home page for those queries by accident. `/sajat-felho-tarhely` + `/en/own-cloud-storage` published **2026-10-14**; full baseline, price sources and the power provenance in `audits/seo-2026-10-14/BASELINE.md`. **What to measure, both times:** impressions and average position for „felhő tárhely” and „saját felhő tárhely”, plus the new page's own impressions, clicks and position. **A null result at +4 weeks means nothing on its own** — a new page on a site at position 73.6 takes weeks to months to move, and „felhő tárhely” alone is held by Microsoft, Google and the big list sites; the page aims at the two longer phrases. That is why there are two checks and not one, and why neither should be read as a verdict on the copy. **There is no Search Console connector in this project, so CC cannot read these numbers** — the operator reads them, CC records and compares. **Blocked until the operator asks for indexing** (Search Console → URL-ellenőrzés → the URL → „Indexelés kérése”): until that happens, or Google finds the page itself, both checks read zero for a reason that is not the page. **This is a slow channel and does not replace talking to people.** | **WATCHING** | operator: request indexing, then supply the Search Console read | 2026-11-11: first read (+4 weeks); 2026-12-09: second (+8 weeks), compared with the first | operator + CC | -## Process & tooling — 33 rows (P3 9, P4 24) +## Process & tooling — 34 rows (P3 9, P4 25) | ID | Category | Sev | What | State | Blocked on | Next action | Owner | |---|---|---|---|---|---|---|---| @@ -363,7 +371,7 @@ stopping line that lies. | **R-579** | Process & tooling | P4 | **[P3-LOW] Five page shells loaded `style.css` with NO cache-buster, so a browser holding an older copy kept being served CSS that did not know about the newest UI.** FOUND 2026-09-18 by the operator's screenshot of the v0.254.0 language globe: it rendered as a bare, unstyled `
` — a stray triangle and two plain words outside the card — because `login.html`, `claim.html`, `recovery.html`, `launcher_shared.html` and `launcher_share_password.html` requested `/static/style.css` with no `?v=`, while `layout.html` has used `?v={{.Version}}` since v0.166.0. **`.Version` was also absent from three of those five data maps.** FIXED AND CLOSED in the same session (controller v0.255.0): the parameter on all five, and `Version` set once in `executeTemplateLang` so a new shell cannot miss it; `TestGlobeOnAnonymousShells` now refuses an absent or EMPTY `?v=`. **The general form, which is the part worth keeping: a template that loads a versioned asset WITHOUT its version is invisible to every test that reads markup — the markup is correct and the browser fetches the wrong file.** A gate over "every stylesheet/script link in a template carries `?v=`" would catch the class; not built, because 8 first-boot-wizard templates would fail it and R-554 deletes them. | **DEFERRED** (2026-10-03 triage: the row's verdict was finished, but it names open work no other row carries — the gate "every stylesheet/script link carries `?v=`" was deliberately not built until R-554 deletes the old wizard; nothing else owns it) — **CLOSED 2026-09-18 - controller v0.255.0** | — | — | CC | | **R-652** | Process & tooling | P4 | **[P3-LOW] The memory watch counted the kernel's file cache as the app's memory.** MEASURED 2026-09-23 night on the bench: nextcloud 34.0.4 read **100 %** of its 1 GiB and immich's PostgreSQL **100 %**, each with **0** kernel `oom_kill`s — `memory.peak` includes page cache, which the kernel drops before it kills anything. Under the watch as built (R-635 follow-up) both would be marked `memory_tight`, and the gate would demand a raised `mem_limit` — a customer-box capacity figure — for cache. **Done the same night (09 §3 decision 22, CC — operator may reverse):** the watch samples the app's own memory (`anon` of `memory.stat`) every 15 s; the mark and the ladder's `memory_peak_pct` read it where measured; the cgroup peak stays beside it (`memory_cgroup_peak_pct`). **Open:** romm's backfilled entry carries M1's 80.9 % cgroup peak (measured before the anon sample existed) — re-measure it on its next step; and decide whether an app whose anon is low but whose cgroup stays pinned at its limit (cache thrash) should be marked at all. Evidence: `audits/night-2026-09-23/apps/nextcloud/bench-1024M/`, `apps/immich/bench-noanon/`. | **READY — P3; owner: CC (catalog harness)** **Re-ranked 2026-10-03: P3→P4: the main fix is done; what is left is harness tuning, no household meets it.** | — | — | CC | | **R-693** | Process & tooling | P4 | **[P3-LOW] The memory watch marks a Node app `memory_tight` at any limit — its heap sizes itself from the limit.** Measured 2026-09-25 on the bench (docmost 0.96.0, harness v4): the app's own memory (`anon`) peaked at **349 MB of 384 MB (90.9 %)**, then, with the limit raised to 512 MB, at **431 MB of 512 MB (80.4 %)** — 0 OOM kills and 0 restarts in both 10-minute watches (~12 000 requests each). So the mark (decision 22's "does not fit the memory") fires for an app that fits, and the gate's remedy (raise the limit) cannot clear it. docmost moved with the limit raised to 512 MB (decision 39). **Needs:** a basis that tells growth-to-fill from pressure (e.g. kills/restarts plus a GC-pressure signal, or a second watch at a higher limit showing the peak scales), or a per-app `memory_scales_with_limit` fact. `audits/night-2026-09-26/C/bench-run1/`, `…/bench-run2/` | **OPEN — P3; owner: CC** **Re-ranked 2026-10-03: P3→P4: a harness judgement problem; no household meets it.** **2026-10-06 night: skipped — a design:** changing when an update is marked „memory tight" changes what the update ladder records and accepts; the row offers options. | — | — | CC | -| **R-739** | Process & tooling | P4 | **[P3-LOW] The test bench cannot run wanderer at all: its web server calls the database at the PUBLIC name `https://.`, which the bench has no name or TLS for.** MEASURED 2026-09-30 (more-night-apps brief, Part B): on bench 9401 the catalog template (v0.20.0) came up `wanderer-db` healthy, `wanderer-search` healthy, `wanderer` **unhealthy** for 12 min, every page 500 („Error 0: Something went wrong"); `PUBLIC_POCKETBASE_URL=https://hike-db.gate.invalid`. So the harness can only ever answer `inconclusive` at FROM for wanderer, never about an update. Its step `v0.20.0 → v0.21.0` (web + db) and meilisearch `v1.36 → v1.54` stay untested; **the brief's question — does the search index survive meilisearch's move or is it rebuilt — is NOT measured.** **Needs:** a bench venue that gives the stack the DB name (an `extra_hosts` + plain-http override in the bench's render only, stated in the verdict), or wanderer proven on the box venue alone with the operator's word. `audits/more-night-apps-2026-09-30/B/wanderer-probe.txt` **-- 2026-09-30 late: the bench CAN run wanderer now** — `upgrade-test.py` `BENCH_ENV_OVERRIDES` points `PUBLIC_POCKETBASE_URL` at the database container on the bench only (the only address the web image reads, measured in v0.20.0 and v0.21.0), recorded in every verdict: web 200, sign-up (`PUT /api/v1/user`) 200, login 200. **The meilisearch question, answered:** v1.54.2 REFUSES v1.36's database („Your database version (1.36.0) is incompatible”); with `MEILI_UPGRADE_DB=true` it upgrades in place and all three indexes (actors, lists, trails) are there — so wanderer's step needs that switch in the template first. Not done: a fixture (creating a list answered PocketBase's „Failed to create record” — likely a rule for unverified users), whether a household's record survives in the index, the step itself. `audits/night-rulings-2026-09-30/` | **NARROWED — the bench runs it; the step needs a fixture and `MEILI_UPGRADE_DB`; owner: CC** **Re-ranked 2026-10-03: P3→P4: test bench coverage; the template switch and fixture are tooling work.** | — | — | CC | +| **R-739** | Process & tooling | P4 | **[P3-LOW] The test bench cannot run wanderer at all: its web server calls the database at the PUBLIC name `https://.`, which the bench has no name or TLS for.** MEASURED 2026-09-30 (more-night-apps brief, Part B): on bench 9401 the catalog template (v0.20.0) came up `wanderer-db` healthy, `wanderer-search` healthy, `wanderer` **unhealthy** for 12 min, every page 500 („Error 0: Something went wrong"); `PUBLIC_POCKETBASE_URL=https://hike-db.gate.invalid`. So the harness can only ever answer `inconclusive` at FROM for wanderer, never about an update. Its step `v0.20.0 → v0.21.0` (web + db) and meilisearch `v1.36 → v1.54` stay untested; **the brief's question — does the search index survive meilisearch's move or is it rebuilt — is NOT measured.** **Needs:** a bench venue that gives the stack the DB name (an `extra_hosts` + plain-http override in the bench's render only, stated in the verdict), or wanderer proven on the box venue alone with the operator's word. `audits/more-night-apps-2026-09-30/B/wanderer-probe.txt` **-- 2026-09-30 late: the bench CAN run wanderer now** — `upgrade-test.py` `BENCH_ENV_OVERRIDES` points `PUBLIC_POCKETBASE_URL` at the database container on the bench only (the only address the web image reads, measured in v0.20.0 and v0.21.0), recorded in every verdict: web 200, sign-up (`PUT /api/v1/user`) 200, login 200. **The meilisearch question, answered:** v1.54.2 REFUSES v1.36's database („Your database version (1.36.0) is incompatible”); with `MEILI_UPGRADE_DB=true` it upgrades in place and all three indexes (actors, lists, trails) are there — so wanderer's step needs that switch in the template first. Not done: a fixture (creating a list answered PocketBase's „Failed to create record” — likely a rule for unverified users), whether a household's record survives in the index, the step itself. `audits/night-rulings-2026-09-30/` | **NARROWED — the bench runs it; the step needs a fixture and `MEILI_UPGRADE_DB`; owner: CC** **Re-ranked 2026-10-03: P3→P4: test bench coverage; the template switch and fixture are tooling work.** **2026-10-24 (catalog sweep):** seen again on a box without DNS — Wanderer unhealthy and 404 for this reason (`audits/catalog-sweep-2026-10-24/wanderer/`). | — | — | CC | | **R-759** | Process & tooling | P4 | **[P3-LOW] wger's onboarding record (the checklist pilot) keeps rows open that no other row owns.** 2026-10-01, `app-catalog-felhom.eu/onboarding/wger.md`: **2.5** no backup → remove → restore → read back of wger exists — the box has no per-app backup press outside an Update (R-648) and wger has no newer step to carry one; **3.7** changing the password and adding a family member not measured, and the template has no `add_people` text; **6.3** no forced-fail undo for wger; **8.2** the app page not read on 9202 this session; **9.1** the runtime volume-persistence gate not re-run (last CLEAN 2026-08-02). The other open rows have their own: 1.5 (R-755), 1.7/2.8 (R-762), 3.4 (R-763), 7.1 (R-764). wger is exempt from the onboarding gate (published before the checklist), so nothing blocks; this row is what keeps the record honest. **Needs:** the five measured on 9202 — 2.5 and 6.3 ride wger's next ladder step (the update's backing-up phase is the per-app backup). `audits/new-app-checklist-2026-10-01/` | **READY — rank P3-LOW; owner: CC (catalog)** **Re-ranked 2026-10-03: P3→P4: record-keeping for a hidden app; nothing blocks.** | — | — | CC | | **R-786** | Process & tooling | P4 | **[P3-LOW] SparkyFitness's onboarding record has six open rows** (`app-catalog-felhom.eu/onboarding/sparkyfitness.md`): 0.5 runtime internet (food search providers), 0.7 the phone app's sign-in route through traefik, 1.6 the env names the server reads, 1.7 the entrypoint read, 5.4 a second memory watch at another limit, 8.3 no logo/screenshots on felhom.eu (404). Everything else measured this session (bench + 9202). **Needs:** each row measured, or n/a with a reason. | **READY — rank P3-LOW; owner: CC (catalog)** **Re-ranked 2026-10-03: P3→P4: onboarding record completeness; no household meets it directly.** | — | — | CC | | **R-807** | Process & tooling | P4 | **[P3-LOW] 13 apps stay UNDETERMINED because their seeds write only to the database, so their upload / media / cache / redis volumes stay empty.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): claper, crafty-controller, dawarich (redis), docmost, gramps-web, immich (ML cache), outline (+redis), sparkyfitness, tandoor, vikunja, wger, wishlist, zipline — plus plex (no seed route: a plex.tv claim token) and wanderer (no fixture; unhealthy under the gate). None is BROKEN: nothing was written outside a preserved folder. **Needs:** per app, a seed that uploads one file (or the volume named n/a with a reason: a redis cache, an ML model cache). | **READY — rank P3-LOW; owner: CC** **Re-ranked 2026-10-03: P3→P4: test coverage; nothing was found broken.** | — | — | CC | @@ -379,6 +387,7 @@ stopping line that lies. | **R-1174** | Process & tooling | P4 | **The status gate becomes a refusal on 2026-10-27.** `scripts/status_view_gate.py` (2026-10-20) checks root `STATUS.md` on every push: at most 50 lines and 6,000 characters outside the decide table, one „Updated" paragraph of at most 3 sentences with no „Earlier" chain, English outside quotes, every cited R-n an open row, no decided, closed or done row in the decide table, the P1 row under „What is broken" or „decide", and every open row whose Owner names the operator under „decide" or „do". Until `SWITCH_DATE` (2026-10-27, one constant in the gate) a conviction prints a WARNING and exits 0; from that date it exits 1. INCONCLUSIVE (no sections, no register) exits 2 at once. Decoys: `scripts/test_status_view_gate.py` (39 cases; each check red-proved by removing it, the date red-proved on both sides), run by `test_gate_decoys.py` and `script_tests_gate.py`. | WATCHING — filed 2026-10-20 | the date | On or after 2026-10-27: see one real refusal (exit 1 on a page that breaks a check — a hand run on a copy is enough), write it here, clear the due check, close | CC | | **R-1236** | Process & tooling | P3 | **Gitea (the code and the registry) is OOM-killed at its 1 GiB limit — 4 restarts in 17 days, the last at 06:41:10 UTC on 2026-10-23, six seconds after the global floor moved three boxes to a new controller image.** Read 2026-10-23 (`kubectl get pod`: `lastState.terminated.reason OOMKilled`, exit 137; kernel: „git invoked oom-killer”; limit `memory: 1Gi`, request 256Mi; 620 Mi in use at rest). During a restart a box update, an agent package fetch, a CI clone or a push fails. Not changed: DooPlex's configuration is the operator's. | OPEN | the operator's yes (a DooPlex change) | Operator: raise the limit (e.g. 2 GiB; DooPlex has the RAM) — CC's pick; or keep it and accept a restart in release hours | operator | | **R-1264** | Process & tooling | P4 | **Skills tooling (review round 2, DOC-B U7/S22):** the grandfathered skill has no size cap — felhom-build-deploy is 240 lines while R-394 recorded 179 (`scripts/check_skills.py:45-47,98-101`); a NEW skill folder (`skills/felhom-web-design`) is not live until `install_skills.py` runs again (not run: no DooPlex change in this unattended run). | OPEN | — | cap the grandfathered entry at its current size; run install_skills.py in an attended session | CC | +| **R-1277** | Process & tooling | P4 | **The catalog's box fixtures drifted from the apps they test** — fixed only in the sweep's copy (`audits/catalog-sweep-2026-10-24/tools/upgrade_fixtures_box.py`, marked SWEEP COPY): OpenGist 1.15 signs up at `/-/register`; Calibre-Web's admin is the generated ADMIN_USER; Mealie's after_install replaces the factory password (the seed raced it); Papra 26.6 needs an Origin header; Rallly 4.15 closed password sign-up (no fixture possible by password); Vaultwarden 1.37.4 answers 404 on `POST /identity/accounts/register` (the fixture was written on 1.36; the admin invite works, the invited sign-up has no route — the newer clients' register/finish flow);the read-back through a family gate needs a fresh cookie after the setup gate opens (Grimmory stayed inconclusive). New fixtures for Homebox, Immich, Komga, Jellyfin, Ghost, Radarr, Sonarr in `tools/sweep_fixtures.py`; `box_walk.py` gained a `sweep` target. | OPEN | — | Port them into `app-catalog-felhom.eu/scripts/` with the bench tests | CC |