diff --git a/REPORT-filebrowser-memory-ci-2026-10-17.md b/REPORT-filebrowser-memory-ci-2026-10-17.md new file mode 100644 index 00000000..d1400583 --- /dev/null +++ b/REPORT-filebrowser-memory-ci-2026-10-17.md @@ -0,0 +1,172 @@ +# REPORT — FileBrowser never on its default password (D11 = A), real memory amounts (D10 = A), CI failure mail, STATUS (2026-10-17) + +Written in ASD-STE100 Simplified Technical English. Brief: the operator's „D11 = A, D10 = A, D12 = key set" task +(2026-10-17). Design read first: `01-topology-and-trust.md` §5 (now carries the `[DESIGN]` paragraph), +`02-controller-module-map.md` (the app page, R-513 states), controller `stacks/infra.go`, `stacks/deploy.go` +`memoryVerdict`. Evidence: `documentation/audits/filebrowser-memory-ci-2026-10-17/`. + +## Plain words first + +- **FileBrowser never answers on its default password any more** (controller 0.327.1, the floor for every box since + 12:06 UTC). FileBrowser's own password setting cannot do this: it overwrites the household's own password at every + restart (measured). So the box keeps FileBrowser off the internet until it has checked it. +- **One mistake in my release, found and fixed:** 0.327.0 made `files.` time out on demo-hp and on the N100 for + about 21 minutes. 0.327.1 fixed it by the normal update path. No data touched; the N100's diary has the line. +- **The install check uses real memory amounts** (your D10 = A), and its message and the install page now say what to + do. No box is over. The page and the check now show the same numbers (they did not before). +- **R-1129 was my mistake from earlier today.** The CI failure mail always worked: the „ALARM FAILED" text I found was the + CI printing its own script before running it. **Your key change did no harm.** A forced test mail went to + **admin@felhom.eu at 10:48:54 UTC** (CC saw it arrive in the catch-all). **Please confirm you have it** — subject + „[felhom CI] FORCED TEST, not a real failure - gates FAILED in admin/felhom.eu". +- **STATUS:** the other session had already given its decision a new number; D10, D11, D12 are now marked decided. + Tester 1's four leftover mount units are removed. + +## 1. FileBrowser (R-1126) + +- **Spike (1a), at the pinned tag `gtstef/filebrowser:1.5.6-stable`:** the admin password can come from + `auth.adminPassword` (`backend/common/settings/auth.go:52`) or `FILEBROWSER_ADMIN_PASSWORD` + (`backend/common/settings/config.go:923-926`); there is no password-file form. It is applied at EVERY start: + `validateUserInfo` (called at each start, `backend/cmd/root.go:144`) resets the admin user's password when the setting is + set (`backend/cmd/user.go:50-57`, „Resetting admin user to default username and password"). +- **Measured on 9202:** + - With the variable set, the default login was refused from the first answer. + - But a password the household set in FileBrowser was overwritten at the next restart: own login 401, the variable's + password 200 (`P1/A1b-env-password-spike.txt`). + - So **Path 1 fails the brief's condition, and Path 2 is built.** + - Also seen: FileBrowser 1.5.6 limits login tries (429 after 8 fast tries) — a small guard of its own. +- **Path 2, with one change from the brief's sketch:** FileBrowser starts on its own network, not on `traefik-public`; + the box joins it there after the check, by container ID. `files.` is a file route to `filebrowser:80` by name, + which resolves only while it is joined. + - Why the network decides: any container re-created by anyone starts unpublished. + - Why by ID: the commit's security review found a check-then-connect race when connecting by name; fixed before the + release. +- **0.327.0 used Docker labels, and that failed on two boxes.** Traefik kept the address it chose at container start, on + the wrong network, so `files.` timed out on demo-hp and the N100. 0.327.1 replaced the labels with the file + route. +- **9202 probes from outside, through Traefik (`P1/`):** + - rc.2 (labels): 143 probes, the default login never 200; 404 while unpublished. + - 0.327.1-rc.1 (file route): 140 probes, never 200; 502 while unpublished, then the page 200 and the default refused. +- **Box walk on 0.327.1:** all three boxes, through Traefik and publicly: `files.` page 200, default login 401. +- **Tests, each red-proved:** + - `TestFileBrowserRender_R1126_NotPublicAtStart` (no `traefik-public`, no labels, the route); + - `TestFileBrowserGate_PublishedOnlyAfterTheCheck`; + - `TestFileBrowserGate_ConnectsTheCheckedContainerById`. + +## 2. Memory (R-1125) + +**Every box the hub knows** (4, no customer box; `hosts` and `customer_configs` read; `P2/B1-boxes.txt`): + +| Box | Guest | Usable | Committed today → after | +|---|---|---|---| +| demo-hp | 25,898 MB | 25,514 | 2,478 → 3,682 | +| demo-felhom | 12,288 | 11,904 | 622 → 622 | +| Tester 1 | 4,096 | 3,712 | 680 → 840 | +| Tester-2 | 11,691 | 11,307 | 0 → 0 (no app; last report 2026-10-04) | + +No box is over; there was no STOP. + +**The refusal, before and after:** +- **Before:** „Nincs elég memória az alkalmazás telepítéséhez. Szükséges: … Elérhető: … (… ebből … használt …)" — no advice. +- **Now (check and page):** + - HU: „Nincs elég memória ehhez az alkalmazáshoz a már telepítettek mellett: kell 150 MB, szabad 50 MB (…). Távolíts + el egy alkalmazást, amelyre nincs szükséged, vagy használj több memóriájú gépet." + - EN: „There is not enough memory for this app next to the apps already installed: … Remove an app you do not need, or + use a machine with more memory." +- The install page shows its own memory box first; it now says the same. + +**Found and fixed:** the page used `/proc`'s host-wide figures, the check the guest's committed requests. On 9202 the +page said 12,637 MB „needed" against the check's 2,648. Now both read `stacks.InstallMemory`. + +**Promises:** an ASCII grep of the website, the estimator and the dashboard templates for `8 GB`/`8GB`/`8 GiB` (control: +the estimator data names an 8 GB box) found **no promise** that the household set fits 8 GB. The estimator says it does +not (`P2/B3-promise-grep.txt`). + +**The change:** catalog `1af6ea7`, 23 requests (`P2/B4-requests-applied.txt`). Also fixed: +- REUSE.md said „display-only", which was untrue; +- paperless-ngx's „display hint" comment; +- the README memory column. + +Step files unchanged. + +**Live:** +- 9201: Uptime Kuma (150 MB) accepted, then removed. +- 9202 made nearly full (reserve raised, then restored): 400 in HU and EN, nothing installed. The page is blocked with the + same numbers as the check (2,798 vs 2,698); screenshots `P2/shots/`. After the restore the page allows it. +- Tests `TestR1125_*` (2), red-proved. Fixtures `deploy_new_blocked`, `deploy_new_memory_blocked` re-captured as + `*_r1125` (only that sentence); every other fixture byte-identical. + +## 3. CI mail (R-1129) + +- **Key length:** all four repos' CI sees a key of length 36. A manual `workflow_dispatch` input `force_alarm` was added + in all four; push runs are unchanged. +- **The forced run:** felhom.eu job 1997 — `RESEND-ACCEPTED id=01a1497a-…` at **10:48:54 UTC**, to **admin@felhom.eu**. + The Gmail catch-all holds it (10:48:55Z). +- **R-1129 is closed as „not a defect":** + - my earlier reading took the script's own source line for its output; + - every cited job had in fact sent its mail; + - the four CLAUDE.md „emails on failure" lines were true all along. +- The controller CHANGELOG line that repeated my wrong claim is corrected. + +## 4. STATUS and Tester 1 + +- **STATUS:** + - The duplicate „D10" was already fixed by the cc-creds session: its decision moved to the „What works" list, and its + new decisions are D13–D16. + - D10, D11 and D12 are marked decided with your answers. +- **Tester 1 (R-1124):** + - Before: four `mnt-media_*.mount` units, „Managed by felhom-agent", inactive, for the removed drives' UUIDs. + - I disabled and removed them, then reloaded systemd. After: only adatlemez's units are left, and 3 minutes later the + agent had not written them back. + - **But the agent still lists the four drives** and logs „enrolled drive absent by UUID — will retry" every ~20 s. + That needs the agent change R-1124 names, and it waits for a vouched agent release. + +## 5. Versions, commits, fixtures + +- **Controller 0.327.1** (MinAgent 0.158.1, no golden), built from `71fbef6` in a fresh clean clone with that clone's own + build script. The shared clone had another session's open edits, so `FELHOM_REPO_DIR` pointed the build at the fresh + clone. + - Test images: + - 0.327.0-rc.1 — built, never deployed: the TOCTOU fix replaced it; + - rc.2, rc.3, rc.4 — on 9202; + - 0.327.1-rc.1 — on 9201 and 9202. + - 0.327.0 was released at 11:43 UTC to the three test boxes only. Its box walk found the timeout; it was never the + global floor. + - 0.327.1: per-box floors at 12:04:44; all three on it by 12:05:23; box walk green; https-only OK. Global floor + 12:06:54 UTC (303 `floor_set`), read back from `hub.db` + WAL (`0.327.1=0.158.1`, no per-box floor) and from the page. + - Controller commits: `e3bb775`, `8f029aa`, `67a4b45`, `a4c0d54`, `0c6ce95`, `71fbef6`. +- **Catalog:** `1af6ea7`. **Helper (CI):** `498b9139` felhom.eu, `411d776` controller, `c899c82` catalog, `344c4f9` agent. +- **Fixtures:** 2 replaced under new names; 155 byte-identical. +- 9202 runs 0.327.1. Its settings were put back byte-identical: `controller.yaml.pre-r1125` was copied back. + +## 6. Rows + +- **Before:** 181 (after the cc-creds session's push). +- **Closed:** R-1126, R-1125 and R-1129 (3). +- **Opened:** R-1135 (the CI mail's link uses the cluster address), R-1136 (felhom.eu CI runs longer than the 5 minutes + R-265 assumes), R-1137 (a rerun may overwrite a failed job's log — unproven) (3). +- **After:** 181. +- **R-1124** stays open, with the note above. + +## 7. Observations + +1. FileBrowser's own admin-password setting re-applies at every start. NOT-A-FINDING: the reason Path 2 was built (`01` §5). +2. 0.327.0's label route timed out on demo-hp and the N100 (~21 min). NOT-A-FINDING: found by the release's own box walk, fixed in 0.327.1 the same hour; N100 diary updated. +3. A TOCTOU in the first gate (connect by name). NOT-A-FINDING: found by the commit security review, fixed before any release. +4. The install page used `/proc`'s host-wide memory, unlike the check. NOT-A-FINDING: fixed in 0.327.0 (small). +5. R-1129's diagnosis was false (my misreading of CI logs). NOT-A-FINDING: row closed as not a defect, cause written in it. +6. The CI mail's „Run" link points at the in-cluster Gitea address. FILED: R-1135 +7. felhom.eu CI runs ~6.9 minutes, past the 5 minutes R-265 assumes. FILED: R-1136 +8. A CI rerun may overwrite a failed job's log. FILED: R-1137 +9. The agent keeps listing decommissioned, removed drives. NOT-A-FINDING: already R-1124, note added. +10. My first 9202 probe was stopped locally but ran on in the guest and upgraded it. NOT-A-FINDING: a scratch box; the upgrade was the intended next step, its log recorded. + +## 8. Teardown (three layers) + +- **Machine:** + - 9202: the probe scripts removed; FileBrowser re-created three times (scratch); its settings put back; it runs + 0.327.1. + - 9201: Uptime Kuma removed through the product (no volume left). + - Tester 1: as in §4. + - No throwaway container or volume left (`r1126-*` cleaned). +- **Host:** Tester 1's four mount units removed (§4); nothing else. +- **Hub:** per-box floors set and cleared; global floor 0.327.1 / MinAgent 0.158.1. diff --git a/STATUS.md b/STATUS.md index 4ee48b1d..fa1341f1 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,7 +2,7 @@ **Ready for the first real tester (Tester-2): yes. Tester 2 (a laptop) is off; nothing was sent to it.** -**Updated 2026-10-17 (afternoon).** Controller 0.326.0 is the floor for every box since 09:55 UTC: FileBrowser's default password is checked at every FileBrowser start. Tester 1 is back on the live app list (test apps and drives removed); six memory limits raised — `REPORT-tester1-limits-filebrowser-2026-10-17.md`. **Earlier today:** controller 0.325.0 was the floor since 08:21 UTC (after the three test boxes): two more password doors count a try before checking it, family sign-ins are stored as fingerprints, a file-share rename always applies; five apps' Redis saves snapshots now, which a full disk cannot damage — `REPORT-burndown-3-2026-10-17.md`. **Earlier (2026-10-17 night):** controller 0.324.0 was the floor for every box since 02:46 UTC (all three test boxes made tonight's off-site backup on it first): a restore now brings the database password back with the data (your 1A), restic 0.19.1 (your 2A), dashboard hardening — `REPORT-night-2026-10-17.md`. **Earlier (2026-10-16 evening):** 0.323.0, Debian 13 — `REPORT-debian13-restic-2026-10-16.md`. **Earlier (midday):** Controller 0.319.0 (the app page in panels, the login in one panel) is the floor, MinAgent 0.158.1 — `REPORT-app-page-tuning-2026-10-16.md`. **Earlier (morning):** Storage identity build B shipped: agent 0.158.1 and golden 0.318.0 vouched by you, controller 0.318.0 is the floor (MinAgent 0.158.1), installer 1.33.0 published — new one-disk boxes get their own data area. Open items: see `documentation/backlog/OPEN-ITEMS.md`. Older notes, day by day: +**Updated 2026-10-17 (afternoon, later).** Controller 0.327.1 is the floor for every box since 12:06 UTC: FileBrowser is published only after its default password is checked (your D11 = A), and the install check uses real memory amounts with a clear message (your D10 = A) — `REPORT-filebrowser-memory-ci-2026-10-17.md`. **Earlier:** Controller 0.326.0 is the floor for every box since 09:55 UTC: FileBrowser's default password is checked at every FileBrowser start. Tester 1 is back on the live app list (test apps and drives removed); six memory limits raised — `REPORT-tester1-limits-filebrowser-2026-10-17.md`. **Earlier today:** controller 0.325.0 was the floor since 08:21 UTC (after the three test boxes): two more password doors count a try before checking it, family sign-ins are stored as fingerprints, a file-share rename always applies; five apps' Redis saves snapshots now, which a full disk cannot damage — `REPORT-burndown-3-2026-10-17.md`. **Earlier (2026-10-17 night):** controller 0.324.0 was the floor for every box since 02:46 UTC (all three test boxes made tonight's off-site backup on it first): a restore now brings the database password back with the data (your 1A), restic 0.19.1 (your 2A), dashboard hardening — `REPORT-night-2026-10-17.md`. **Earlier (2026-10-16 evening):** 0.323.0, Debian 13 — `REPORT-debian13-restic-2026-10-16.md`. **Earlier (midday):** Controller 0.319.0 (the app page in panels, the login in one panel) is the floor, MinAgent 0.158.1 — `REPORT-app-page-tuning-2026-10-16.md`. **Earlier (morning):** Storage identity build B shipped: agent 0.158.1 and golden 0.318.0 vouched by you, controller 0.318.0 is the floor (MinAgent 0.158.1), installer 1.33.0 published — new one-disk boxes get their own data area. Open items: see `documentation/backlog/OPEN-ITEMS.md`. Older notes, day by day: `documentation/backlog/STATUS-HISTORY.md`. Reports: `REPORT-night-2026-10-14.md`, `REPORT-immich-rollout-2026-10-14.md`, `REPORT-seo-felho-tarhely-2026-10-14.md`, `REPORT-immich-repair-2026-10-14.md`, `REPORT-power-cut-fixes-2026-10-14.md`, `REPORT-night-power-2026-10-13.md`, `REPORT-poweroff.md`. ## What works @@ -57,9 +57,9 @@ | D6 | R-992 | The scratch box cannot read the private drill catalog: give it a read-only login, or make that copy readable? | **A read-only login** | Readable copy: the drill catalog becomes public | every new-app test needs hand-staging | new-app tests | | D7 | R-990, R-989 | Rule yes / no / later on the forum ideas (`audits/forum-research-2026-10-12/FELHOM.md` §5) and the selfh.st ideas (`audits/selfhst-survey-2026-10-12/FELHOM.md` §6) | — | — | nothing changes; the research ages | — | | D8 | R-206 | Install DooPlex's Docker settings from git (restarts Docker), and prune the build cache weekly: yes or no? | **Yes, in a quiet window** | — | a rebuild of DooPlex still has the settings in git | — | -| D10 | R-1125 | Raise the 23 memory requests to what the apps really use? Then an 8 GB box no longer installs the full household set (its sixth app is refused). | **Your call** — values ready | Keep: the box's install check stays optimistic | nothing changes | — | -| D11 | R-1126 | The tunnel runs before the claim (the claim needs it). Close FileBrowser's first-start window (A), or claim only at home (B)? | **A** — small, no promise changes | B: the claim mail and flow change, the household must be at home | FileBrowser's default is open for ~2 s at its first start | — | -| D12 | R-1129 | CI has never sent its failure mail (the key is empty in the runner since at least 2026-09-22). Set the key in the four repos? | **Yes** — you set it, or CC with your word (it is a credential) | — | a red CI run or a `--no-verify` push reaches nobody | — | +| D10 | R-1125 | **DECIDED 2026-10-17: A** — the 23 memory requests now match real use (catalog `1af6ea7`); the install refusal and page say what to do (controller 0.327.0). An 8 GB box no longer installs the whole household set. | done | — | — | — | +| D11 | R-1126 | **DECIDED 2026-10-17: A** — FileBrowser is published only after its default password is checked; it never answers on the default (controller 0.327.1). The tunnel still runs before the claim, by design (`01` §5). | done | — | — | — | +| D12 | R-1129 | **CLOSED 2026-10-17: not a defect** — CC misread the CI log; the failure mail always worked. A forced test mail went to admin@felhom.eu at 10:48:54 UTC (CC saw it arrive). Your key change did no harm. | done | — | — | — | | D13 | R-1119 | Remove `export RESEND_API=…` from your `~/.bashrc` (line 88)? The key is in CC's store now (`sec run RESEND_API`). | **Yes** — you, or CC with your word (it is your file) | Keep: every CC command carries the key | the key stays one `env` away from a record; the new guard refuses bare `env`/`printenv`, but not every shape | — | | D14 | R-1120 | homelab CC settings let `kubectl get secret -o yaml` run with no prompt. Add an `ask` rule too, or rely on the new guard alone? | **Add the ask rule too** — one line, two layers | Guard only: one layer, already proven | the guard alone refuses it in every session | — | | D15 | R-1130, R-1131, R-1132 | Three secrets are in old CC records: the registry password, and the demo-felhom and demo-hp recovery codes (printed today 10:27 by the JARR session, before the guards). Change them? | **Change the registry password; your call on the two demo codes** | Accept: no work; the values stay valid | the three values stay valid while copies sit in records Anthropic's API has seen | — | diff --git a/documentation/architecture/01-topology-and-trust.md b/documentation/architecture/01-topology-and-trust.md index 7f6dc901..8743dd4f 100644 --- a/documentation/architecture/01-topology-and-trust.md +++ b/documentation/architecture/01-topology-and-trust.md @@ -129,6 +129,18 @@ a trust boundary too: a default password, or a "first visitor creates the admin" household acts. Rule and per-app status: `09` §3 decision 45 and `app-catalog-felhom.eu/FIRST-ADMIN.md` (the audit of all 53 apps, 2026-09-28). +**[DESIGN, 2026-10-17, R-1126, operator decision D11 = A] The tunnel runs before the claim, and FileBrowser never +answers on a default password.** The box starts cloudflared as soon as it has a tunnel token, before it is claimed, +because the claim itself is reached through it: the claim mail links `https://felhom.` +(`hub/internal/notify/templates.go:27`). Before the claim a stranger reaches only the claim page (a code: 72 h life, 5 +tries, 15-minute lockout — controller `web/claim.go`) and `files.`. FileBrowser starts every new database on +admin/admin, and its own admin-password setting cannot replace that (it re-applies at every start and would overwrite +the household's own password — FileBrowser 1.5.6 `backend/cmd/user.go:50-57`, measured). So FileBrowser starts OFF +`traefik-public`, on its own network; the box checks THIS run's default login (and replaces it when it works), and only +then joins it to `traefik-public`; `files.` is a file route to `filebrowser:80` by name, which resolves only +while it is joined (controller v0.327.1, `stacks/filebrowser_gate.go`). Until then the route answers 502. Measured on +scratch 9202: FileBrowser and its data removed, 140 probes from outside over 5 minutes, the default login never 200. + **Who is the visitor — the address (recorded 2026-10-01, R-753, `09` §3 decision 63, controller ≥ 0.286.0).** Rule: *never believe an address a client can write.* Through the tunnel every visitor used to reach traefik as cloudflared's one docker-assigned address, so every per-address guard (the dashboard's login counter, an app's lock) was an diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1-env-password-spike.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1-env-password-spike.txt new file mode 100644 index 00000000..00a61910 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1-env-password-spike.txt @@ -0,0 +1,20 @@ +== 1. a NEW database with the env password: probe the default login from the first moment (every 0.25 s, 40 s) + default-login answers seen: 8 401 149 429 + env password login: 429 +== 2. the household sets its own password in FileBrowser (the API the box uses), then a restart +Traceback (most recent call last): + File "", line 1, in + import json,sys;print(json.load(sys.stdin)["id"]) + ~~~~~~~~~~~~~~~~~~~~^^^^^^ +KeyError: 'id' +Traceback (most recent call last): + File "", line 1, in + import json,sys;print(json.dumps({"which":["password"],"data":{"id":int(sys.argv[1]),"username":"admin","password":sys.stdin.read()}})) + ~~~^^^^^^^^^^^^^ +ValueError: invalid literal for int() with base 10: '' + PUT own password: 401; own login: 429; env login: 429 + AFTER RESTART — own login: 401; env login: 200; default login: 401 + log: 2026/10/17 10:32:13 [INFO ] Resetting admin user to default username and password. + log: 2026/10/17 10:33:02 [INFO ] Using admin password from FILEBROWSER_ADMIN_PASSWORD environment variable + log: 2026/10/17 10:33:02 [INFO ] Resetting admin user to default username and password. +== cleanup: 0 containers, 0 volumes left diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1b-env-password-spike.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1b-env-password-spike.txt new file mode 100644 index 00000000..e2124a48 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A1b-env-password-spike.txt @@ -0,0 +1,12 @@ +== 1. a NEW database with the env password: probe the default login from the first answer (1 s apart, 5 answers — + FileBrowser 1.5.6 limits login tries: the first run of this spike probed 4/s and was answered 429 after 8 tries) + default-login answers seen: 5 401 + waiting 90 s for FileBrowser's login limiter to clear + env password login: 200 +== 2. the household sets its own password in FileBrowser (the API the box uses), then a restart + PUT own password: 204; own login: 200; env login: 401 + AFTER RESTART — own login: 401; env login: 200; default login: 401 + log: 2026/10/17 10:33:21 [INFO ] Resetting admin user to default username and password. + log: 2026/10/17 10:34:57 [INFO ] Using admin password from FILEBROWSER_ADMIN_PASSWORD environment variable + log: 2026/10/17 10:34:57 [INFO ] Resetting admin user to default username and password. +== cleanup: 0 containers, 0 volumes left diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A2-9202-rc2-upgrade.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A2-9202-rc2-upgrade.txt new file mode 100644 index 00000000..1e70b472 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A2-9202-rc2-upgrade.txt @@ -0,0 +1,8 @@ +== the rc.2 upgrade on 9202 (the session's first ssh was stopped locally but ran on; its probe output was lost). Read afterwards: +2026/10/17 11:11:02 handlers.go:3886: [INFO] [web] FileBrowser mounts synced (recreated) — 11 storage path(s), config updated +2026/10/17 11:11:03 filebrowser_gate.go:68: [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126) +2026/10/17 11:11:05 filebrowser_gate.go:94: [INFO] [infra] filebrowser: default login refused for this run — joined traefik-public, files. served (R-1126) +== probe through Traefik right after (Host files.enkisfelhom.hu): +11:11:05 page=404 default-login=404 nets=[felhom-filebrowser ] +11:11:07 page=404 default-login=404 nets=[felhom-filebrowser traefik-public ] +11:11:09 page=200 default-login=401 nets=[felhom-filebrowser traefik-public ] diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A3-9202-recreate-rc2.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A3-9202-recreate-rc2.txt new file mode 100644 index 00000000..7fa47933 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A3-9202-recreate-rc2.txt @@ -0,0 +1,13 @@ +removed filebrowser + its data volume at 11:11:33 +11:11:33 page=404 default-login=404 nets=[] +11:16:03 page=404 default-login=404 nets=[felhom-filebrowser ] +11:16:05 page=404 default-login=404 nets=[felhom-filebrowser traefik-public ] +11:16:09 page=200 default-login=401 nets=[felhom-filebrowser traefik-public ] +11:16:26 page=200 default-login=429 nets=[felhom-filebrowser traefik-public ] +probes: 143, default login answered 200: 0 times +2026/10/17 11:11:02 handlers.go:3954: [INFO] [web] FileBrowser: drive /mnt/felhom-drives/scratch_hdd/userdata/metube not mounted — skipping userdata skeleton +2026/10/17 11:11:03 filebrowser_gate.go:68: [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126) +2026/10/17 11:11:05 filebrowser_gate.go:94: [INFO] [infra] filebrowser: default login refused for this run — joined traefik-public, files. served (R-1126) +2026/10/17 11:16:04 filebrowser_password.go:151: [WARN] [infra] filebrowser: admin/admin logs in again on a new FileBrowser run (recorded state "generated") — its data was re-created; replacing it (R-977) +2026/10/17 11:16:05 filebrowser_password.go:208: [INFO] [infra] filebrowser: admin/admin replaced by a generated password (value never logged); verified new=200 admin=401 +2026/10/17 11:16:05 filebrowser_gate.go:94: [INFO] [infra] filebrowser: default login refused for this run — joined traefik-public, files. served (R-1126) diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A4-9201-0.327.1-rc.1.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A4-9201-0.327.1-rc.1.txt new file mode 100644 index 00000000..9b88f7c3 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A4-9201-0.327.1-rc.1.txt @@ -0,0 +1,4 @@ +rc.1 at 11:57:43 +11:57:55 page 200 nets=[felhom-filebrowser traefik-public ] route=1 +public https://files.enkisfelhom.hu/: page 200, default login 401 +created 2026-10-17T11:57:45.226509967Z traefik-labels= diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A5-9202-recreate-0.327.1-rc.1.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A5-9202-recreate-0.327.1-rc.1.txt new file mode 100644 index 00000000..efc61ee3 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P1/A5-9202-recreate-0.327.1-rc.1.txt @@ -0,0 +1,8 @@ +removed filebrowser + its data volume at 11:58:55 +11:58:55 page=502 default-login=502 nets=[] +12:03:15 page=502 default-login=502 nets=[felhom-filebrowser ] +12:03:17 page=200 default-login=401 nets=[felhom-filebrowser traefik-public ] +12:03:32 page=200 default-login=429 nets=[felhom-filebrowser traefik-public ] +12:03:36 page=200 default-login=401 nets=[felhom-filebrowser traefik-public ] +12:03:38 page=200 default-login=429 nets=[felhom-filebrowser traefik-public ] +probes: 140, default login answered 200: 0 times diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B1-boxes.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B1-boxes.txt new file mode 100644 index 00000000..857e2dc5 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B1-boxes.txt @@ -0,0 +1,18 @@ +read hub.db + WAL; integrity: ok +customers in the hub: 0 +box report guestMB usable today after verdict +Tester-2 2026-10-04 11691 11307 0 0 fits apps=- +demo-felhom 2026-10-17 12288 11904 622 622 fits apps=opengist,prowlarr,qbittorrent,radarr,sonarr +demo-hp 2026-10-17 25898 25514 2478 3682 fits apps=adventurelog,bentopdf,bookstack,calibre-web,docmost,home-assistant,kimai,opengist,paperless-ngx,plex,privatebin,romm +tester-1 2026-10-17 4096 3712 680 840 fits apps=bookstack,paperless-ngx,privatebin +tables with customers/hosts: ['customer_notifications', 'customer_configs', 'hosts', 'host_reports', 'host_escrow', 'host_recovery', 'host_pbs_secrets', 'customer_claims', 'host_deletions', 'host_escrow_superseded', 'customer_resets', 'os_host_settings'] +hosts: 4 rows, columns shown ['host_id', 'customer_id'] + ('demo-felhom-8363b5', 'demo-felhom') + ('demo-hp-bb76ea', 'demo-hp') + ('Tester-2-be8404', 'Tester-2') + ('tester-1-d70be4', 'tester-1') +customer_configs: 4 rows, columns shown ['customer_id', 'status'] + ('demo-felhom', 'active') + ('demo-hp', 'active') + ('tester-1', 'active') + ('Tester-2', 'active') diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B3-promise-grep.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B3-promise-grep.txt new file mode 100644 index 00000000..aea8d593 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B3-promise-grep.txt @@ -0,0 +1,17 @@ +pattern: 8\s?(GB|GiB|gigab) (ASCII); roots: ['felhom.eu/website', 'felhom-controller/controller/internal/web/templates', 'felhom.eu/documentation/pilot'] +positive control — sizing-data.json contains an 8 GB box: True +felhom.eu/website/CHANGELOG.md: …nt, Paperless-ngx, Grimmory and 18 small ones). One answer is stricter: the household set without Immich on 8 GB now reads „fits, but tight" (0.5 MB over the fits-well line). The presets keep their verdicts. Data `?v=4`.… +felhom.eu/website/CHANGELOG.md: …y carry the same text. ## 2026-10-13 (night) — „Milyen gép kell?" is a main menu item; no „tight from" below 8 GB - **Menu:** „Milyen gép kell?" / „Which machine do I need?" left the Alkalmazások / Apps group and is a top-… +felhom.eu/website/CHANGELOG.md: …mator:** the legend's „Szűkösen elfér innen: …" item and the thin marker are hidden when that size is below 8 GB (the smallest size the page names) — with nothing ticked it read 2,1 GB. `sizing.js?v=5`; a test pins it (r… +felhom.eu/website/CHANGELOG.md: …). - **The explaining sentence:** its base figure was already the base of the box the bar draws (4.0 GB on an 8 GB bar, 4.6 GB for the household preset); a test now pins that. No JS, CSS or data change, so no cache version… +felhom.eu/website/CHANGELOG.md: …stimator v3.1: two fixes from the reviewer's browser check - **The bar is never drawn for a box smaller than 8 GB** (the smallest size the page names). With nothing or very little ticked, the „fits well" size was about 2.… +felhom.eu/website/CHANGELOG.md: ….3 GB, where the installer's ceiling clause gave a 1.6 GB base system no real box has. Now the parts are an 8 GB box's: base system 4.0 GB, Felhom 0.5 GB, spare 3.5 GB; the empty-selection sentence uses the same split. T… +felhom.eu/website/CHANGELOG.md: …s the recommended size. The typical figure moved into „Hogyan számol az oldal?". - **English article:** „an 8 GB machine" (the article comes from the page's own strings). - Cache versions `?v=3` for `sizing.css`, `sizing.j… +felhom.eu/website/assets/sizing.js: …-why-line'); var typicalLine = document.getElementById('sizer-typical'); // English needs "an 8 GB machine"; the article comes from the page's strings (none in Hungarian) var article = function (gb) {… +felhom.eu/documentation/pilot/PETI-tester-agreement.md: … point of the pilot is to prove the BYO trust boundary on someone else's box. **Peti's box:** an 80-core / 128 GB rack server already running his own workloads. The Felhom guest is capped at **12 cores / 32768 MiB** (noisy-… +felhom.eu/documentation/pilot/RUNBOOK-peti-return-2026-07-13.md: …- The agent's node (`host.node = "proxmox"`) reports **uptime 12,663 s (~3.5 h — rebooted ~12:35Z today), 128 GB RAM, 0 guests**. - The guest's controller reports **uptime 365,289 s (~4.2 days), i5-2500, 8 GB** — the guest… +felhom.eu/documentation/pilot/RUNBOOK-peti-return-2026-07-13.md: …Z today), 128 GB RAM, 0 guests**. - The guest's controller reports **uptime 365,289 s (~4.2 days), i5-2500, 8 GB** — the guest has been up longer than the node the agent runs on, on visibly different hardware. - ⇒ **The … +felhom.eu/documentation/pilot/GO-LIVE-PACKAGE.md: …ssert-bring-up-only F7, `:53`-must-be-free F6), exit rights (uninstall keeps data), Peti's box facts (80c/128 GB → caps 12/32768, `sajatfelhom.hu` tunnel re-point), the byo install command, and the onboarding sequence (p… +felhom.eu/documentation/pilot/GO-LIVE-PACKAGE.md: …**Open questions:** - G5: CPU/RAM cap values for Peti's guest — **RESOLVED: 12 cores / 32768 MiB** (his 80c/128 GB box). - G11/GL-7: the local backup TARGET on Peti's box, given `felhom-pbs` is unreachable from his LAN. **… +felhom.eu/documentation/pilot/DRILL-GL6-2026-07-08.md: …'s broken dnsmasq (F6) was failing.) - **Dashboard live:** "Demo Ügyfél", 3 running / 56 total apps, mem 1.1/8 GB, backup "Még nem futott". - **Drive re-enrollment (CC-driven UI):** Storage → Meghajtók showed all 3 drives d… +hits: 14 diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B4-requests-applied.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B4-requests-applied.txt new file mode 100644 index 00000000..e5dcfe7c --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B4-requests-applied.txt @@ -0,0 +1,24 @@ +adventurelog 100M -> 400M +bookstack 150M -> 200M +calcom 200M -> 800M +claper 100M -> 250M +docmost 200M -> 450M +grafana 100M -> 250M +home-assistant 256M -> 350M +homepage 50M -> 90M +kimai 100M -> 200M +komga 200M -> 450M +mealie 200M -> 300M +nextcloud 256M -> 350M +outline 200M -> 300M +paperless-ngx 500M -> 600M +papra 256M -> 300M +privatebin 30M -> 40M +recipe-importer 30M -> 70M +romm 300M -> 600M +seerr 100M -> 200M +tandoor 512M -> 900M +termix 30M -> 150M +uptime-kuma 50M -> 150M +zipline 100M -> 200M +README rows not matched by display name: [('recipe-importer', 'Recipe Importer')] diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9201-install-fits.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9201-install-fits.txt new file mode 100644 index 00000000..99bdfe62 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9201-install-fits.txt @@ -0,0 +1,10 @@ +sync: 200 {'ok': True, 'data': {'ok': True, 'updated': ['adventurelog', 'bookstack', 'calcom', 'claper', 'docmost', 'grafana', 'ho +catalog request now: mem_request: "150M" +13:17:50 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +13:18:56 [1] deployed, controller state=running, pinned={'uptime-kuma': 'louislam/uptime-kuma:2.5.5'} +deploy accepted and running: True +2026/10/17 11:17:50 deploy.go:1545: [INFO] [stacks] Memory check: total=25898MB, reserved=384MB, usable=25514MB, committed_used=3482MB, new_req=150MB, remaining=21882MB +13:19:04 [X] stop -> 200 {'ok': True, 'message': 'Stack uptime-kuma stop completed'} +13:19:36 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'uptime-kuma', 'volumes_removed': ['uptime-kuma_uptime_kuma_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_no +13:19:44 [X] after remove: deployed=False leftovers='/opt/docker/stacks/uptime-kuma' +remove: 200 diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-page-rc4.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-page-rc4.txt new file mode 100644 index 00000000..7026cd72 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-page-rc4.txt @@ -0,0 +1,3 @@ +signed in, at /launcher +{"path": "/apps/uptime-kuma/install", "box": "Nincs elég memória ehhez az alkalmazáshoz a már telepítettek mellett: telepítés után 2798 MB kellene, a gép 2698 MB-ot tud adni. Távolíts el egy alkalmazást, amelyre nincs szükséged, vagy használj több memóriájú gépet.", "button_disabled": true, "button_title": "Nincs elég memória"} +{"path": "/apps/uptime-kuma/install?lang=en", "box": "There is not enough memory for this app next to the apps already installed: after the install it would need 2798 MB, and the machine can give 2698 MB. Remove an app you do not need, or use a machine with more memory.", "button_disabled": true, "button_title": "Not enough memory"} diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-refusal.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-refusal.txt new file mode 100644 index 00000000..f4f9b6ff --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/B5-9202-refusal.txt @@ -0,0 +1,10 @@ +system: + reserved_memory_mb: 23200 +gitea.dooplex.hu/admin/felhom-controller:0.327.0-rc.2 Up 25 seconds (healthy) +deploy uptime-kuma (hu) -> HTTP 400: Nincs elég memória ehhez az alkalmazáshoz a már telepítettek mellett: kell 150 MB, szabad 50 MB (összesen 25898 MB, ebből 2648 MB-ot a telepített alkalmazások foglalnak, 23200 MB a rendszeré). Távolíts el egy alkalmazást, amelyre nincs szükséged, vagy használj több memóriájú gépet. +deploy uptime-kuma (en) -> HTTP 400: There is not enough memory for this app next to the apps already installed: it needs 150 MB, 50 MB is free (25898 MB in total, 2648 MB of it held by the installed apps, 23200 MB for the system). Remove an app you do not need, or use a machine with more memory. +2026/10/17 11:20:47 deploy.go:1545: [INFO] [stacks] Memory check: total=25898MB, reserved=23200MB, usable=2698MB, committed_used=2648MB, new_req=150MB, remaining=-100MB +deployed after the refusals: False +0 +Up 25 seconds (healthy) +{"path": "/apps/uptime-kuma/install", "box": null, "button_disabled": false, "button_title": null} diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page0.png b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page0.png new file mode 100644 index 00000000..33bf19db Binary files /dev/null and b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page0.png differ diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page1.png b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page1.png new file mode 100644 index 00000000..337580e6 Binary files /dev/null and b/documentation/audits/filebrowser-memory-ci-2026-10-17/P2/shots/page1.png differ diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log-ctl-1887.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log-ctl-1887.txt new file mode 100644 index 00000000..dfd1fbf7 --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log-ctl-1887.txt @@ -0,0 +1,253 @@ +HTTP 200 +2026-10-15T19:10:30.3398641Z felhom-gates-runner(version:v0.6.1) received task 1905 of job gates, be triggered by event: push +2026-10-15T19:10:30.3403557Z workflow prepared +2026-10-15T19:10:30.3404412Z evaluating expression 'success()' +2026-10-15T19:10:30.3405327Z expression 'success()' evaluated to 'true' +2026-10-15T19:10:30.3411729Z evaluating expression '' +2026-10-15T19:10:30.3412140Z expression '' evaluated to 'true' +2026-10-15T19:10:30.3412297Z ⭐ Run Main Fetch the pushed commit and the sibling clone it needs +2026-10-15T19:10:30.3417603Z Wrote command \n\n# Shallow, and pinned to the exact SHA that was pushed — not to the branch tip,\n# which can move under us if two pushes race.\nmkdir -p ws/felhom-controller\ncd ws/felhom-controller\ngit init -q .\ngit remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom-controller.git\ngit fetch -q --depth 1 origin "$GITHUB_SHA"\ngit checkout -q FETCH_HEAD\necho "checked out $(git rev-parse HEAD)"\ncd .. && git clone -q --depth 1 http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom.eu.git felhom.eu\necho "sibling felhom.eu present at $(cd felhom.eu && git rev-parse --short HEAD)"\n\n\n to 'workflow/0.sh' +2026-10-15T19:10:30.3419005Z ::group::Run # Shallow, and pinned to the exact SHA that was pushed — not to the branch tip, +2026-10-15T19:10:30.3419433Z # Shallow, and pinned to the exact SHA that was pushed — not to the branch tip, +2026-10-15T19:10:30.3419721Z # which can move under us if two pushes race. +2026-10-15T19:10:30.3419944Z mkdir -p ws/felhom-controller +2026-10-15T19:10:30.3420142Z cd ws/felhom-controller +2026-10-15T19:10:30.3420351Z git init -q . +2026-10-15T19:10:30.3420520Z git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom-controller.git +2026-10-15T19:10:30.3420654Z git fetch -q --depth 1 origin "$GITHUB_SHA" +2026-10-15T19:10:30.3420764Z git checkout -q FETCH_HEAD +2026-10-15T19:10:30.3420873Z echo "checked out $(git rev-parse HEAD)" +2026-10-15T19:10:30.3420984Z cd .. && git clone -q --depth 1 http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom.eu.git felhom.eu +2026-10-15T19:10:30.3421118Z echo "sibling felhom.eu present at $(cd felhom.eu && git rev-parse --short HEAD)" +2026-10-15T19:10:30.3421280Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-15T19:10:30.3421511Z ::endgroup:: +2026-10-15T19:10:33.9073828Z checked out c6a567122ecc7b03087a5eeb22b1e295209ef9d9 +2026-10-15T19:10:57.2946446Z sibling felhom.eu present at 22cd7c5 +2026-10-15T19:10:57.2961701Z ::group::Run cd ws/felhom-controller/controller && python3 scripts/controller_gates.py --fast +2026-10-15T19:10:57.2962152Z cd ws/felhom-controller/controller && python3 scripts/controller_gates.py --fast +2026-10-15T19:10:57.2962412Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-15T19:10:57.2962691Z ::endgroup:: +2026-10-15T19:10:57.4804777Z controller_gates — 18 gate(s) [--fast] +2026-10-15T19:10:57.4828459Z WARNING: this clone is UNARMED — core.hooksPath is unset, so the pre-push hook will not +2026-10-15T19:10:57.4829041Z run here. Switch it on once with: git config core.hooksPath .githooks +2026-10-15T19:10:57.4829352Z +2026-10-15T19:10:57.4829559Z ============================================================================== +2026-10-15T19:10:57.4829796Z == gate: template-id (template_id_gate.py) +2026-10-15T19:10:57.4830034Z ============================================================================== +2026-10-15T19:10:57.6070984Z integrity gate OK — every JS element-ID reference resolves in the page it renders on +2026-10-15T19:10:57.6640434Z +2026-10-15T19:10:57.6641448Z ============================================================================== +2026-10-15T19:10:57.6641751Z == gate: emoji (emoji_gate.py) +2026-10-15T19:10:57.6641996Z ============================================================================== +2026-10-15T19:11:02.1616134Z emoji gate OK — no emoji in web templates +2026-10-15T19:11:02.1761407Z +2026-10-15T19:11:02.1762107Z ============================================================================== +2026-10-15T19:11:02.1762413Z == gate: native-confirm (native_confirm_gate.py) +2026-10-15T19:11:02.1762653Z ============================================================================== +2026-10-15T19:11:02.4815590Z native-confirm gate OK — no native confirm()/prompt()/alert() in templates +2026-10-15T19:11:02.4900567Z +2026-10-15T19:11:02.4901273Z ============================================================================== +2026-10-15T19:11:02.4901736Z == gate: offbox-rename (offbox_rename_gate.py) +2026-10-15T19:11:02.4902038Z ============================================================================== +2026-10-15T19:11:02.6668110Z offbox rename gate OK — Tier-3 is 'Tavoli mentes' everywhere customer-facing (26 file(s) + 129 bundle value(s) named by them) +2026-10-15T19:11:02.6772354Z +2026-10-15T19:11:02.6772904Z ============================================================================== +2026-10-15T19:11:02.6773218Z == gate: app-row-dedup (app_row_dedup_gate.py) +2026-10-15T19:11:02.6773479Z ============================================================================== +2026-10-15T19:11:02.7727350Z app_row_dedup_gate: OK (row markup single-sourced in app_row.html; 44 templates scanned) +2026-10-15T19:11:02.7789277Z +2026-10-15T19:11:02.7789756Z ============================================================================== +2026-10-15T19:11:02.7789944Z == gate: mojibake (mojibake_gate.py) +2026-10-15T19:11:02.7790120Z ============================================================================== +2026-10-15T19:11:04.7585835Z mojibake_gate: OK (1141 files clean — no double-encoding signatures) +2026-10-15T19:11:04.7626742Z +2026-10-15T19:11:04.7627328Z ============================================================================== +2026-10-15T19:11:04.7627700Z == gate: docker-v (docker_run_volume_path_gate.py) +2026-10-15T19:11:04.7627945Z ============================================================================== +2026-10-15T19:11:05.0625636Z docker -v gate OK — every volume mount is named-volume or proven host-visible +2026-10-15T19:11:05.0700096Z +2026-10-15T19:11:05.0701336Z ============================================================================== +2026-10-15T19:11:05.0701689Z == gate: secret-markup (secret_in_markup_gate.py) +2026-10-15T19:11:05.0701932Z ============================================================================== +2026-10-15T19:11:05.2648228Z secret-in-markup gate OK — 44 templates, no secret-named expression rendered +2026-10-15T19:11:05.2648829Z (NAME-BASED: blind to a secret arriving under a neutral PAGE-DATA key — see the docstring) +2026-10-15T19:11:05.2707803Z +2026-10-15T19:11:05.2708204Z ============================================================================== +2026-10-15T19:11:05.2708534Z == gate: retrieval-promise (retrieval_promise_gate.py) +2026-10-15T19:11:05.2708775Z ============================================================================== +2026-10-15T19:11:05.6598722Z retrieval-promise gate OK — 45 surface(s) incl. 1 Go handler file(s), 18 registered claim(s) + 16 English, none unregistered +2026-10-15T19:11:05.6600522Z (BLIND SPOT: it registers WHERE the claim is made, not whether each conditional is wired +2026-10-15T19:11:05.6601085Z to a true predicate — that is what the R-302 render tests are for.) +2026-10-15T19:11:05.6683288Z +2026-10-15T19:11:05.6683851Z ============================================================================== +2026-10-15T19:11:05.6684231Z == gate: debug-routes (debug_route_gate.py) +2026-10-15T19:11:05.6684540Z ============================================================================== +2026-10-15T19:11:05.7031014Z debug route gate OK - 19 referenced address(es), all dispatched, none orphaned +2026-10-15T19:11:05.7080060Z +2026-10-15T19:11:05.7080826Z ============================================================================== +2026-10-15T19:11:05.7081168Z == gate: reuse-refs (reuse_refs_check.py /root/.cache/act/2ea1ebbc85faa62f/hostexecutor/ws/felhom-controller) +2026-10-15T19:11:05.7081576Z ============================================================================== +2026-10-15T19:11:05.8052080Z note [felhom-controller] line 15: backup/appbackup_bridge.go (resolved by suffix → controller/internal/backup/appbackup_bridge.go) +2026-10-15T19:11:05.8053453Z note [felhom-controller] line 19: appbackup/userdata.go (resolved by suffix → controller/internal/appbackup/userdata.go) +2026-10-15T19:11:05.8054847Z note [felhom-controller] line 19: stacks/skeleton_derive.go (resolved by suffix → controller/internal/stacks/skeleton_derive.go) +2026-10-15T19:11:05.8069340Z note [felhom-controller] line 64: internal/report/builder.go (resolved by suffix → controller/internal/report/builder.go) +2026-10-15T19:11:05.8083852Z note [felhom-controller] line 95: stacks/deploy.go (resolved by suffix → controller/internal/stacks/deploy.go) +2026-10-15T19:11:05.8596209Z note [felhom-controller] line 155: cmd/controller/main.go (resolved by suffix → controller/cmd/controller/main.go) +2026-10-15T19:11:05.8618633Z note [felhom-controller] line 172: internal/selfupdate/updater.go (resolved by suffix → controller/internal/selfupdate/updater.go) +2026-10-15T19:11:05.8629227Z note [felhom-controller] line 180: appbackup/appdata.go (resolved by suffix → controller/internal/appbackup/appdata.go) +2026-10-15T19:11:05.8651344Z note [felhom-controller] line 206: scripts/secret_in_markup_gate.py (resolved by suffix → controller/scripts/secret_in_markup_gate.py) +2026-10-15T19:11:06.1091820Z note [felhom-controller] line 248: hub/internal/api/handler.go (cross-repo → felhom.eu/hub/internal/api/handler.go) +2026-10-15T19:11:06.1092717Z note [felhom-controller] line 248: hub/internal/notify/dispatcher.go (cross-repo → felhom.eu/hub/internal/notify/dispatcher.go) +2026-10-15T19:11:06.1572023Z note [felhom-controller] line 265: monitor/deadline.go (cross-repo (suffix) → felhom.eu/hub/internal/monitor/deadline.go) +2026-10-15T19:11:06.1588594Z note [felhom-controller] line 308: wgsync/reconciler.go (cross-repo (suffix) → felhom.eu/hub/internal/wgsync/reconciler.go) +2026-10-15T19:11:06.1590698Z note [felhom-controller] line 313: templates/app_shell.html (resolved by suffix → controller/internal/web/templates/app_shell.html) +2026-10-15T19:11:06.1606039Z note [felhom-controller] line 349: api/router.go (resolved by suffix → controller/internal/api/router.go) +2026-10-15T19:11:06.1616777Z note [felhom-controller] line 366: cmd/controller/r856_wiring_test.go (resolved by suffix → controller/cmd/controller/r856_wiring_test.go) +2026-10-15T19:11:06.1622518Z note [felhom-controller] line 375: web/netprobe.go (resolved by suffix → controller/internal/web/netprobe.go) +2026-10-15T19:11:06.1623020Z note [felhom-controller] line 375: web/server.go (resolved by suffix → controller/internal/web/server.go) +2026-10-15T19:11:06.1630340Z note [felhom-controller] line 399: felhom.eu/scripts/golden_currency_gate.py (cross-repo → felhom.eu/scripts/golden_currency_gate.py) +2026-10-15T19:11:06.1641615Z OK [felhom-controller]: 225 cited paths — exact 206, suffix 14, ambiguous 0, cross-repo 5, FAILED 0 (siblings searched: felhom.eu) +2026-10-15T19:11:06.1746703Z +2026-10-15T19:11:06.1747665Z ============================================================================== +2026-10-15T19:11:06.1747818Z == gate: instructions (instructions_gate.py /root/.cache/act/2ea1ebbc85faa62f/hostexecutor/ws/felhom-controller) +2026-10-15T19:11:06.1748020Z ============================================================================== +2026-10-15T19:11:06.2834261Z instructions_gate: /root/.cache/act/2ea1ebbc85faa62f/hostexecutor/ws/felhom-controller +2026-10-15T19:11:06.7009123Z CLAUDE.md effective lines : 92 (ceiling 200) +2026-10-15T19:11:06.7010071Z version literals : 0 +2026-10-15T19:11:06.7010375Z TEMPORARY blocks : 0 +2026-10-15T19:11:06.7010747Z rule files : 5 (4 path-scoped) +2026-10-15T19:11:06.7011147Z workspace copy : n/a (not this workspace) +2026-10-15T19:11:06.7011345Z memory index : absent (.claude-memory/ not on this host — the auto-memory store is machine-local by design, so a clone elsewhere legitimately has none; PASS with reason) +2026-10-15T19:11:06.7011611Z register citations : 12 cited, 1043 register items known +2026-10-15T19:11:06.7011828Z +2026-10-15T19:11:06.7012139Z instructions_gate: OK +2026-10-15T19:11:06.7612490Z +2026-10-15T19:11:06.7613133Z ============================================================================== +2026-10-15T19:11:06.7613667Z == gate: observations (observations_gate.py /root/.cache/act/2ea1ebbc85faa62f/hostexecutor/ws/felhom-controller) +2026-10-15T19:11:06.7614115Z ============================================================================== +2026-10-15T19:11:06.7998287Z OBSERVATIONS GATE INCONCLUSIVE: found the section '## 11. Observations' but no numbered items under it. +2026-10-15T19:11:06.7999001Z Items must be a numbered list (`1.`, `2.` …). If the section is deliberately empty, remove the heading — an empty section reads as coverage while providing none. +2026-10-15T19:11:06.8567718Z +2026-10-15T19:11:06.8568458Z ============================================================================== +2026-10-15T19:11:06.8569170Z == gate: minagent-header (minagent_header_gate.py) +2026-10-15T19:11:06.8569456Z ============================================================================== +2026-10-15T19:11:06.9049987Z minagent header gate OK — v0.316.4 declares MinAgent 0.155.0 +2026-10-15T19:11:06.9621200Z +2026-10-15T19:11:06.9621876Z ============================================================================== +2026-10-15T19:11:06.9622372Z == gate: i18n (i18n_missing_gate.py) +2026-10-15T19:11:06.9622629Z ============================================================================== +2026-10-15T19:11:09.3988878Z i18n: 2037 markers in 44 templates; hu 2723 keys, en 2735 keys +2026-10-15T19:11:09.3989756Z i18n: English missing 0 (ceiling 0); Hungarian formal forms 0 (ceiling 0, R-516) +2026-10-15T19:11:09.3990304Z i18n gate OK +2026-10-15T19:11:09.4071499Z +2026-10-15T19:11:09.4072121Z ============================================================================== +2026-10-15T19:11:09.4072536Z == gate: go-parity (i18n_go_parity.py) +2026-10-15T19:11:09.4072745Z ============================================================================== +2026-10-15T19:11:18.8584741Z go-parity: base capture 736f54b49610 (7467 literals), 776 slice-2 keys listed, 250 pre-existing, 759 named in Go, 568 helper calls judged for arity +2026-10-15T19:11:18.8585604Z go-parity gate OK: every Go-side key carries base-commit text, byte for byte, and every judged call passes as many arguments as its message has verbs. +2026-10-15T19:11:18.8716251Z +2026-10-15T19:11:18.8716709Z ============================================================================== +2026-10-15T19:11:18.8716976Z == gate: gofmt (gofmt_gate.py) +2026-10-15T19:11:18.8717404Z ============================================================================== +2026-10-15T19:11:18.9850789Z gofmt gate NOT CHECKED in CI: no Go toolchain on the runner — the pre-push hook (with Go) enforces it +2026-10-15T19:11:18.9953671Z +2026-10-15T19:11:18.9954189Z ============================================================================== +2026-10-15T19:11:18.9954467Z == gate: golden-notice (golden_notice.py /root/.cache/act/2ea1ebbc85faa62f/hostexecutor/ws/felhom-controller) +2026-10-15T19:11:18.9954746Z ============================================================================== +2026-10-15T19:11:19.1961208Z ============================================================================== +2026-10-15T19:11:19.1961851Z NOTICE — v0.316.4 OWES A GOLDEN. (this NEVER blocks; see the docstring) +2026-10-15T19:11:19.1962044Z ============================================================================== +2026-10-15T19:11:19.1962170Z newest released controller : 0.316.4 (this repo's CHANGELOG.md) +2026-10-15T19:11:19.1962565Z newest golden baked : 0.313.0 (felhom.eu documentation/tests/) +2026-10-15T19:11:19.1962913Z +2026-10-15T19:11:19.1963110Z A machine installed right now would receive 0.313.0, not 0.316.4. +2026-10-15T19:11:19.1963355Z +2026-10-15T19:11:19.1963681Z This is a REMINDER AT THE ONE MOMENT IT IS USEFUL — you are in the repo where the +2026-10-15T19:11:19.1963991Z release happens. It does not block, and must not: at the moment a release is +2026-10-15T19:11:19.1964398Z committed the golden cannot exist yet. +2026-10-15T19:11:19.1964822Z +2026-10-15T19:11:19.1965103Z WHAT CLEARS IT: bake a golden (felhom.eu documentation/runbooks/RUNBOOK-manual-build.md +2026-10-15T19:11:19.1965469Z section 4.1), then vouch it — a THREE-field change: golden_version + agent_version + +2026-10-15T19:11:19.1965773Z min_agent. The bake record lands in felhom.eu documentation/tests/golden--/. +2026-10-15T19:11:19.1966124Z +2026-10-15T19:11:19.1966347Z If this release deliberately needs no golden, record a waiver row in +2026-10-15T19:11:19.1966587Z felhom.eu documentation/backlog/OPEN-ITEMS.md — never a habit of bypassing. +2026-10-15T19:11:19.1966940Z ============================================================================== +2026-10-15T19:11:19.2037655Z +2026-10-15T19:11:19.2038147Z ============================================================================== +2026-10-15T19:11:19.2038472Z == summary +2026-10-15T19:11:19.2038770Z ============================================================================== +2026-10-15T19:11:19.2039149Z template-id OK (exit 0) +2026-10-15T19:11:19.2039385Z emoji OK (exit 0) +2026-10-15T19:11:19.2039596Z native-confirm OK (exit 0) +2026-10-15T19:11:19.2039806Z offbox-rename OK (exit 0) +2026-10-15T19:11:19.2040031Z app-row-dedup OK (exit 0) +2026-10-15T19:11:19.2040304Z mojibake OK (exit 0) +2026-10-15T19:11:19.2040572Z docker-v OK (exit 0) +2026-10-15T19:11:19.2040861Z secret-markup OK (exit 0) +2026-10-15T19:11:19.2041116Z retrieval-promise OK (exit 0) +2026-10-15T19:11:19.2041427Z debug-routes OK (exit 0) +2026-10-15T19:11:19.2041629Z reuse-refs OK (exit 0) +2026-10-15T19:11:19.2041831Z instructions OK (exit 0) +2026-10-15T19:11:19.2042099Z observations INCONCLUSIVE (exit 2) +2026-10-15T19:11:19.2042306Z minagent-header OK (exit 0) +2026-10-15T19:11:19.2042516Z i18n OK (exit 0) +2026-10-15T19:11:19.2042718Z go-parity OK (exit 0) +2026-10-15T19:11:19.2043032Z gofmt OK (exit 0) +2026-10-15T19:11:19.2043253Z golden-notice ADVISORY (exit 0, advisory) +2026-10-15T19:11:19.2043466Z UNDETERMINED (never a pass): observations +2026-10-15T19:11:19.2692235Z ❌ Failure - Main Run the gate entry point +2026-10-15T19:11:19.2696371Z exit status 2 +2026-10-15T19:11:19.2703703Z ::group::Run python3 - <<'PY' +2026-10-15T19:11:19.2703933Z python3 - <<'PY' +2026-10-15T19:11:19.2704056Z import json, os, sys, urllib.request, urllib.error +2026-10-15T19:11:19.2704183Z +2026-10-15T19:11:19.2704291Z key = os.environ.get("RESEND_API_KEY", "") +2026-10-15T19:11:19.2704407Z if not key: +2026-10-15T19:11:19.2704525Z sys.exit("ALARM FAILED: RESEND_API_KEY is empty — the alarm cannot be sent, and a " +2026-10-15T19:11:19.2704665Z "silent alarm is worse than none. Set the user-level Actions secret.") +2026-10-15T19:11:19.2704824Z +2026-10-15T19:11:19.2704935Z repo = os.environ.get("GITHUB_REPOSITORY", "?") +2026-10-15T19:11:19.2705064Z sha = os.environ.get("GITHUB_SHA", "?") +2026-10-15T19:11:19.2705177Z run = os.environ.get("GITHUB_RUN_NUMBER", "?") +2026-10-15T19:11:19.2705295Z srv = os.environ.get("GITHUB_SERVER_URL", "https://gitea.dooplex.hu") +2026-10-15T19:11:19.2705578Z +2026-10-15T19:11:19.2705680Z body = json.dumps({ +2026-10-15T19:11:19.2705801Z "from": "Felhom CI ", +2026-10-15T19:11:19.2705919Z "to": ["admin@felhom.eu"], +2026-10-15T19:11:19.2706064Z "subject": "[felhom CI] gates FAILED in %s" % repo, +2026-10-15T19:11:19.2706179Z "text": ( +2026-10-15T19:11:19.2706283Z "The gate entry point exited non-zero.\n\n" +2026-10-15T19:11:19.2706440Z "Repository : %s\n" +2026-10-15T19:11:19.2706554Z "Commit : %s\n" +2026-10-15T19:11:19.2706656Z "Run : %s/%s/actions/runs/%s\n\n" +2026-10-15T19:11:19.2706768Z "The failing gate names itself in the run log.\n\n" +2026-10-15T19:11:19.2706916Z "If the local pre-push hook was GREEN for this commit, then CI and the hook\n" +2026-10-15T19:11:19.2707056Z "disagree - that is a finding about the gates themselves, not about CI, and it\n" +2026-10-15T19:11:19.2707185Z "outranks whatever the push was for.\n" +2026-10-15T19:11:19.2707336Z ) % (repo, sha, srv, repo, run), +2026-10-15T19:11:19.2707464Z }).encode() +2026-10-15T19:11:19.2707572Z +2026-10-15T19:11:19.2707665Z req = urllib.request.Request( +2026-10-15T19:11:19.2707812Z "https://api.resend.com/emails", data=body, method="POST", +2026-10-15T19:11:19.2707931Z headers={"Authorization": "Bearer %s" % key, +2026-10-15T19:11:19.2708064Z "Content-Type": "application/json", +2026-10-15T19:11:19.2708188Z # Cloudflare fronts api.resend.com and BLOCKS the default +2026-10-15T19:11:19.2708401Z # "Python-urllib/3.x" agent with its own 403 (error 1010) — which looks +2026-10-15T19:11:19.2708540Z # exactly like an auth failure and is not one. Measured 2026-08-02. +2026-10-15T19:11:19.2708683Z "User-Agent": "felhom-ci/1.0"}) +2026-10-15T19:11:19.2708803Z try: +2026-10-15T19:11:19.2708905Z with urllib.request.urlopen(req, timeout=30) as r: +2026-10-15T19:11:19.2709020Z print("RESEND-ACCEPTED id=%s" % json.load(r)["id"]) +2026-10-15T19:11:19.2709145Z except urllib.error.HTTPError as e: +2026-10-15T19:11:19.2709269Z sys.exit("ALARM FAILED: Resend returned HTTP %s: %s" % (e.code, e.read().decode()[:300])) +2026-10-15T19:11:19.2709400Z PY +2026-10-15T19:11:19.2709500Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-15T19:11:19.2709642Z env: +2026-10-15T19:11:19.2709760Z RESEND_API_KEY: *** +2026-10-15T19:11:19.2709880Z ::endgroup:: +2026-10-15T19:11:19.8780239Z RESEND-ACCEPTED id=01a140f9-ded0-7a0b-ad19-53d6c4fc4a0c +2026-10-15T19:11:19.8965187Z Cleaning up container for job gates +2026-10-15T19:11:20.7610786Z 🏁 Job failed +2026-10-15T19:11:20.7611786Z Job 'gates' failed + diff --git a/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log1997.txt b/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log1997.txt new file mode 100644 index 00000000..558152aa --- /dev/null +++ b/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log1997.txt @@ -0,0 +1,492 @@ +HTTP 200 +2026-10-17T10:42:16.3815004Z felhom-gates-runner(version:v0.6.1) received task 2018 of job gates, be triggered by event: workflow_dispatch +2026-10-17T10:42:16.3828198Z workflow prepared +2026-10-17T10:42:16.3872302Z evaluating expression 'success()' +2026-10-17T10:42:16.3873226Z expression 'success()' evaluated to 'true' +2026-10-17T10:42:16.3902795Z evaluating expression '' +2026-10-17T10:42:16.3903231Z expression '' evaluated to 'true' +2026-10-17T10:42:16.3903389Z ⭐ Run Main Fetch the pushed commit +2026-10-17T10:42:16.3907376Z Wrote command \n\n# R-265: the start stamp the alarm reports, so a mail can never again describe a run\n# without saying how long it took.\necho "GATES_STARTED_AT=$(date +%s)" >> "$GITHUB_ENV"\n# Shallow, and pinned to the exact SHA that was pushed — not to the branch tip, which can\n# move under us if two pushes race. Probe P3 proved the two are equal when done this way.\ngit init -q .\ngit remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom.eu.git\ngit fetch -q --depth 1 origin "$GITHUB_SHA"\ngit checkout -q FETCH_HEAD\necho "checked out $(git rev-parse HEAD)"\n\n\n to 'workflow/0.sh' +2026-10-17T10:42:16.3908640Z ::group::Run # R-265: the start stamp the alarm reports, so a mail can never again describe a run +2026-10-17T10:42:16.3908932Z # R-265: the start stamp the alarm reports, so a mail can never again describe a run +2026-10-17T10:42:16.3909204Z # without saying how long it took. +2026-10-17T10:42:16.3909320Z echo "GATES_STARTED_AT=$(date +%s)" >> "$GITHUB_ENV" +2026-10-17T10:42:16.3909437Z # Shallow, and pinned to the exact SHA that was pushed — not to the branch tip, which can +2026-10-17T10:42:16.3909644Z # move under us if two pushes race. Probe P3 proved the two are equal when done this way. +2026-10-17T10:42:16.3909773Z git init -q . +2026-10-17T10:42:16.3909879Z git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom.eu.git +2026-10-17T10:42:16.3910033Z git fetch -q --depth 1 origin "$GITHUB_SHA" +2026-10-17T10:42:16.3910150Z git checkout -q FETCH_HEAD +2026-10-17T10:42:16.3910252Z echo "checked out $(git rev-parse HEAD)" +2026-10-17T10:42:16.3910388Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:16.3910561Z ::endgroup:: +2026-10-17T10:42:39.0025786Z checked out 498b9139cf2a292a319a84ec222b092f1bb6be6f +2026-10-17T10:42:39.0046819Z ::group::Run git init -q ../felhom-agent +2026-10-17T10:42:39.0047174Z git init -q ../felhom-agent +2026-10-17T10:42:39.0047392Z cd ../felhom-agent +2026-10-17T10:42:39.0047597Z git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom-agent.git +2026-10-17T10:42:39.0047828Z git fetch -q --depth 1 origin main +2026-10-17T10:42:39.0048022Z git checkout -q FETCH_HEAD +2026-10-17T10:42:39.0048219Z echo "agent at $(git rev-parse --short=12 HEAD)" +2026-10-17T10:42:39.0048520Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:39.0048767Z ::endgroup:: +2026-10-17T10:42:41.7231382Z agent at c52d59185103 +2026-10-17T10:42:41.7249673Z ::group::Run git init -q ../felhom-controller +2026-10-17T10:42:41.7250105Z git init -q ../felhom-controller +2026-10-17T10:42:41.7250378Z cd ../felhom-controller +2026-10-17T10:42:41.7250605Z git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/felhom-controller.git +2026-10-17T10:42:41.7250869Z git fetch -q --depth 1 origin main +2026-10-17T10:42:41.7251116Z git checkout -q FETCH_HEAD +2026-10-17T10:42:41.7251334Z echo "controller CHANGELOG at $(git rev-parse --short=12 HEAD): $(head -1 CHANGELOG.md)" +2026-10-17T10:42:41.7251606Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:41.7251859Z ::endgroup:: +2026-10-17T10:42:45.9201908Z controller CHANGELOG at 3e8d02767763: ## v0.326.0 — FileBrowser's default password is checked at every FileBrowser start; the decoy suite is a gate (2026-10-17) +2026-10-17T10:42:45.9220276Z ::group::Run git init -q ../app-catalog-felhom.eu +2026-10-17T10:42:45.9220782Z git init -q ../app-catalog-felhom.eu +2026-10-17T10:42:45.9221028Z cd ../app-catalog-felhom.eu +2026-10-17T10:42:45.9221275Z git remote add origin http://gitea.gitea-system.svc.cluster.local:3000/admin/app-catalog-felhom.eu.git +2026-10-17T10:42:45.9221528Z git fetch -q --depth 1 origin main +2026-10-17T10:42:45.9221743Z git checkout -q FETCH_HEAD +2026-10-17T10:42:45.9221951Z echo "catalog at $(git rev-parse --short=12 HEAD)" +2026-10-17T10:42:45.9222168Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:45.9222404Z ::endgroup:: +2026-10-17T10:42:47.1931237Z catalog at 356659dd60e0 +2026-10-17T10:42:47.1961807Z ::group::Run set -u +2026-10-17T10:42:47.1962230Z set -u +2026-10-17T10:42:47.1962482Z python3 - > /tmp/pushed-files.txt <<'PY' || : > /tmp/pushed-files.txt +2026-10-17T10:42:47.1962731Z import json, os, sys +2026-10-17T10:42:47.1962936Z path = os.environ.get("GITHUB_EVENT_PATH", "") +2026-10-17T10:42:47.1963183Z if not path or not os.path.isfile(path): +2026-10-17T10:42:47.1963404Z sys.stderr.write("no GITHUB_EVENT_PATH - the file list is unknown\n") +2026-10-17T10:42:47.1963641Z raise SystemExit(0) +2026-10-17T10:42:47.1963844Z try: +2026-10-17T10:42:47.1964034Z ev = json.load(open(path)) +2026-10-17T10:42:47.1964234Z except Exception as e: +2026-10-17T10:42:47.1964427Z sys.stderr.write("event payload unreadable: %s\n" % e) +2026-10-17T10:42:47.1964653Z raise SystemExit(0) +2026-10-17T10:42:47.1964855Z commits = ev.get("commits") or [] +2026-10-17T10:42:47.1965046Z if not commits: +2026-10-17T10:42:47.1965246Z sys.stderr.write("the payload carries no commits array - unknown\n") +2026-10-17T10:42:47.1965473Z raise SystemExit(0) +2026-10-17T10:42:47.1965671Z seen = [] +2026-10-17T10:42:47.1965860Z for c in commits: +2026-10-17T10:42:47.1966061Z for key in ("added", "modified", "removed"): +2026-10-17T10:42:47.1966274Z for f in (c.get(key) or []): +2026-10-17T10:42:47.1966466Z if f not in seen: +2026-10-17T10:42:47.1966667Z seen.append(f) +2026-10-17T10:42:47.1966861Z sys.stderr.write("%d commit(s), %d distinct path(s) in the payload\n" +2026-10-17T10:42:47.1967086Z % (len(commits), len(seen))) +2026-10-17T10:42:47.1967289Z for f in seen: +2026-10-17T10:42:47.1967475Z print(f) +2026-10-17T10:42:47.1967659Z PY +2026-10-17T10:42:47.1967839Z echo "--- paths the push event reported ---" +2026-10-17T10:42:47.1968046Z cat /tmp/pushed-files.txt +2026-10-17T10:42:47.1968237Z echo "-------------------------------------" +2026-10-17T10:42:47.1968452Z if [ -s /tmp/pushed-files.txt ] && [ -f scripts/push_scope.py ]; then +2026-10-17T10:42:47.1968683Z SCOPE=$(python3 scripts/push_scope.py --files-from /tmp/pushed-files.txt) || SCOPE=code +2026-10-17T10:42:47.1968911Z else +2026-10-17T10:42:47.1969126Z echo "no usable file list - treating this push as CODE (fail-closed)" +2026-10-17T10:42:47.1969348Z SCOPE=code +2026-10-17T10:42:47.1969540Z fi +2026-10-17T10:42:47.1969718Z [ "$SCOPE" = "docs" ] || SCOPE=code +2026-10-17T10:42:47.1969925Z echo "PUSH_SCOPE=$SCOPE" >> "$GITHUB_ENV" +2026-10-17T10:42:47.1970126Z echo "scope: $SCOPE" +2026-10-17T10:42:47.1970319Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:47.1970556Z ::endgroup:: +2026-10-17T10:42:47.2946407Z the payload carries no commits array - unknown +2026-10-17T10:42:47.3007760Z --- paths the push event reported --- +2026-10-17T10:42:47.3028393Z ------------------------------------- +2026-10-17T10:42:47.3031134Z no usable file list - treating this push as CODE (fail-closed) +2026-10-17T10:42:47.3033269Z scope: code +2026-10-17T10:42:47.3048114Z ::group::Run python3 scripts/repo_gates.py --fast --scope="${PUSH_SCOPE:-code}" +2026-10-17T10:42:47.3048402Z python3 scripts/repo_gates.py --fast --scope="${PUSH_SCOPE:-code}" +2026-10-17T10:42:47.3048565Z shell: bash --noprofile --norc -e -o pipefail {0} +2026-10-17T10:42:47.3048745Z ::endgroup:: +2026-10-17T10:42:47.4176573Z repo_gates (felhom.eu) — 19 gate(s) [--fast] +2026-10-17T10:42:47.4177864Z --fast SKIPPED (deliberate periodic runs, never in a hook): iso-bootstrap +2026-10-17T10:42:47.4562998Z WARNING: this clone is UNARMED — core.hooksPath is unset, so the pre-push hook will not +2026-10-17T10:42:47.4563607Z run here. Switch it on once with: git config core.hooksPath .githooks +2026-10-17T10:42:47.4564028Z +2026-10-17T10:42:47.4564253Z ============================================================================== +2026-10-17T10:42:47.4564482Z == gate: site (site_gates.py) +2026-10-17T10:42:47.4564692Z ============================================================================== +2026-10-17T10:42:53.4055083Z shell sidebar: 11 en page(s), all identical to en/apps.html +2026-10-17T10:42:53.4056019Z shell sidebar: 15 hu page(s), all identical to 404.html +2026-10-17T10:42:53.4056299Z download pages agree: felhom-installer-1.29.0-pve9.2-1.iso, sha dceacae5da24… +2026-10-17T10:42:53.4056588Z twins: 11 pairs checked both ways (hreflang, globe, canonical), 0 of them unlisted +2026-10-17T10:42:53.4057142Z apps pages agree: 0 cards, 64 logos +2026-10-17T10:42:53.4057407Z no-HU matcher controls OK (positive 'Jelentkezz be'/'Kapcsolat' convict, negative 'Angola…' does not) +2026-10-17T10:42:53.4057734Z gyik.html: JSON-LD equals the 42 visible questions and answers +2026-10-17T10:42:53.4058005Z en/faq.html: JSON-LD equals the 42 visible questions and answers +2026-10-17T10:42:53.4058242Z dashboard pictures: 24 references, each in its page's language +2026-10-17T10:42:53.4058469Z picture viewer: 390 openers, every one a link to an existing file +2026-10-17T10:42:53.4058702Z app logos: 65 catalog apps, each with its -logo file +2026-10-17T10:42:53.4058957Z shell leak: 759 site rules vs 119 shell rules, 9 shared selector(s), 0 leaking declarations (media-aware) +2026-10-17T10:42:53.4059204Z anchors: 416 in-site #fragment(s), every one resolves +2026-10-17T10:42:53.4059435Z sitemap: 24 URL(s), every public page once, every twin pair cross-named +2026-10-17T10:42:53.4059695Z unlisted: 0 page(s) — noindex, robots Disallow, not in the sitemap, linked from no other page +2026-10-17T10:42:53.4060063Z site gates OK — BOM, emoji=0, nav/footer per language, analytics, no CDN, no legacy tokens, no