Files
felhom.eu/documentation/audits/filebrowser-memory-ci-2026-10-17/P3/log1997.txt
T
admin f6511dc5c2
gates / gates (push) Successful in 6m53s
FileBrowser never on its default password (D11 = A), real memory amounts (D10 = A), CI mail: report, register, docs
Closed R-1126, R-1125 and R-1129 (not a defect: a misreading of the CI log by the session that filed it); opened
R-1135..R-1137; R-1124 noted. 01 §5 [DESIGN]: the tunnel runs before the claim; FileBrowser is published only after
its default login is checked. STATUS D10-D12 decided. N100 diary: the 21-minute file-manager gap after 0.327.0.
Controller 0.327.1 is the floor since 12:06 UTC.

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-17 14:12:02 +02:00

493 lines
46 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 <slug>-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 <style>, cache-busted assets, twins + hreflang + globe, lang, same apps, no Hungarian in English, FAQ JSON-LD, clean tail, dashboard pictures per language, one picture viewer, no shell CSS leak, live anchors, complete sitemap
2026-10-17T10:42:53.4174164Z
2026-10-17T10:42:53.4175422Z ==============================================================================
2026-10-17T10:42:53.4176040Z == gate: hostinstall (hostinstall_gates.py)
2026-10-17T10:42:53.4176434Z ==============================================================================
2026-10-17T10:42:56.0952139Z ok: SCRIPT_VERSION=1.33.0
2026-10-17T10:42:56.0952846Z ok: header has no version literal
2026-10-17T10:42:56.0953254Z ok: hub carries no host-install version literal (421 .go/.html files scanned, 6 shapes checked)
2026-10-17T10:42:56.0953592Z ok: age is in the installed package set
2026-10-17T10:42:56.0953760Z ok: felhom-pbs-apply is fetched from the agent repo
2026-10-17T10:42:56.0953896Z ok: felhom-pbs-apply installed 0755 to /usr/local/sbin
2026-10-17T10:42:56.0954010Z ok: uninstall removes felhom-pbs-apply
2026-10-17T10:42:56.0954151Z ok: rendered agent.json defaults wg_tunnel.enabled=true
2026-10-17T10:42:56.0954285Z ok: byo assert no longer forbids wg_tunnel
2026-10-17T10:42:56.0954484Z ok: PVE_STORAGES default contains felhom-pbs
2026-10-17T10:42:56.0954630Z ok: no raw/branch/ ref in the installer — every run-time fetch is pinned
2026-10-17T10:42:56.0954796Z ok: fetch_raw pins the agent configs to the vouched agent version
2026-10-17T10:42:56.0954925Z ok: manifest: /scripts/ syncs from an installer tag
2026-10-17T10:42:56.0955058Z ok: manifest: the website still tracks main (a copy edit must not need a release)
2026-10-17T10:42:56.0955224Z ok: every arm that resolves the backup target also grants on it (2 resolution(s), 2 grant(s))
2026-10-17T10:42:56.0955382Z ok: the offsite tier arms no client-side prune (keep_last=0; retention is ep0's prune jobs)
2026-10-17T10:42:56.0955517Z
2026-10-17T10:42:56.0955630Z hostinstall gates: ALL PASS
2026-10-17T10:42:56.1043049Z
2026-10-17T10:42:56.1043576Z ==============================================================================
2026-10-17T10:42:56.1043856Z == gate: hub-confirm (hub_confirm_gate.py)
2026-10-17T10:42:56.1044007Z ==============================================================================
2026-10-17T10:42:56.2031082Z hub confirm gate OK — no native confirm()/prompt() in hub templates (17 scanned, any depth)
2026-10-17T10:42:56.2085504Z
2026-10-17T10:42:56.2086029Z ==============================================================================
2026-10-17T10:42:56.2086345Z == gate: manifest-bearer (manifest_bearer_gate.py)
2026-10-17T10:42:56.2086607Z ==============================================================================
2026-10-17T10:42:56.3172989Z manifest bearer gate OK - no bearer-shaped literals in manifests/
2026-10-17T10:42:56.3655629Z
2026-10-17T10:42:56.3656465Z ==============================================================================
2026-10-17T10:42:56.3657143Z == gate: reuse-refs (reuse_refs_check.py /root/.cache/act/e75913ab8508cd04/hostexecutor)
2026-10-17T10:42:56.3657464Z ==============================================================================
2026-10-17T10:42:56.7941226Z note [hostexecutor] line 54: web/routes.go (resolved by suffix → hub/internal/web/routes.go)
2026-10-17T10:42:56.7942026Z note [hostexecutor] line 54: api/routes.go (resolved by suffix → hub/internal/api/routes.go)
2026-10-17T10:42:56.7942215Z note [hostexecutor] line 80: store/r879_box_seal_test.go (resolved by suffix → hub/internal/store/r879_box_seal_test.go)
2026-10-17T10:42:56.7942394Z note [hostexecutor] line 80: api/r879_box_seal_test.go (resolved by suffix → hub/internal/api/r879_box_seal_test.go)
2026-10-17T10:42:56.7942555Z note [hostexecutor] line 90: api/handler.go (resolved by suffix → hub/internal/api/handler.go)
2026-10-17T10:42:56.7942747Z OK [hostexecutor]: 85 cited paths — exact 80, suffix 5, ambiguous 0, cross-repo 0, FAILED 0 (siblings searched: app-catalog-felhom.eu, felhom-agent, felhom-controller)
2026-10-17T10:42:56.8063573Z
2026-10-17T10:42:56.8064180Z ==============================================================================
2026-10-17T10:42:56.8064483Z == gate: instructions (instructions_gate.py /root/.cache/act/e75913ab8508cd04/hostexecutor)
2026-10-17T10:42:56.8064706Z ==============================================================================
2026-10-17T10:42:56.9585109Z instructions_gate: /root/.cache/act/e75913ab8508cd04/hostexecutor
2026-10-17T10:42:56.9585988Z CLAUDE.md effective lines : 168 (ceiling 200)
2026-10-17T10:42:56.9586259Z version literals : 0
2026-10-17T10:42:56.9586693Z TEMPORARY blocks : 0
2026-10-17T10:42:56.9586954Z rule files : 6 (4 path-scoped)
2026-10-17T10:42:56.9587607Z workspace copy : n/a (not this workspace)
2026-10-17T10:42:56.9587938Z 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-17T10:42:56.9588402Z register citations : n/a (no OPEN-ITEMS.md — not this workspace)
2026-10-17T10:42:56.9588671Z
2026-10-17T10:42:56.9588890Z instructions_gate: OK
2026-10-17T10:42:56.9653001Z
2026-10-17T10:42:56.9653441Z ==============================================================================
2026-10-17T10:42:56.9654323Z == gate: golden-currency (golden_currency_gate.py)
2026-10-17T10:42:56.9654647Z ==============================================================================
2026-10-17T10:42:57.1167825Z newest released controller : 0.326.0 (## v0.326.0 — FileBrowser's default password is checked at every FileBrowser start; the de)
2026-10-17T10:42:57.1169397Z newest golden baked : 0.318.0 (documentation/tests/golden-0.318.0-2026-10-16 [sha 18077b6a689a…])
2026-10-17T10:42:57.1169922Z waiver : VALID until 2026-10-20 (3 day(s) left) — R-468, reason: pre-customer development; goldens on a weekly cadence (operator ruling 2026-09-13)
2026-10-17T10:42:57.1170252Z golden age : 1 day(s) (baked 2026-10-16; the limit is 7 — `09` §3 decision 250)
2026-10-17T10:42:57.1170552Z
2026-10-17T10:42:57.1170970Z GOLDEN CURRENCY GATE ADVISORY — the golden (0.318.0) is behind the newest release (v0.326.0, 8 release(s): 0.319.0, 0.320.0, 0.321.0, 0.322.0, 0.323.0, 0.324.0, 0.325.0, 0.326.0) but only 1 day(s) old. Releases ride the floor; the golden is weekly (decision 250). A new box installs 0.318.0 and updates itself to the floor.
2026-10-17T10:42:57.1171630Z golden currency gate OK — the golden is at most 7 days old (NOTE: the BAKE, not the vouch)
2026-10-17T10:42:57.1626300Z
2026-10-17T10:42:57.1627180Z ==============================================================================
2026-10-17T10:42:57.1627448Z == gate: wire-contract (wire_contract_gate.py)
2026-10-17T10:42:57.1627691Z ==============================================================================
2026-10-17T10:43:01.4878835Z wire-contract gate — 249 tag(s) checked across 6 declared wire(s); 97 skipped (generic / opaque / allowlisted)
2026-10-17T10:43:01.4880052Z agent -> hub (POST /host-report) name-reachability only (a tag found ANYWHERE in hub passes)
2026-10-17T10:43:01.4880389Z └ guest_disk_trim FIELD-BY-FIELD both ways against hub internal/sysfacts.DiskTrim (10 path(s))
2026-10-17T10:43:01.4880741Z controller -> hub (POST /report) name-reachability only (a tag found ANYWHERE in hub passes)
2026-10-17T10:43:01.4881210Z hub -> controller (report ACK, `escrow` object) FIELD-BY-FIELD against controller internal/report.EscrowStatus (5 path(s))
2026-10-17T10:43:01.4881512Z hub -> agent (GET /hosts/<id>/escrow/retained) FIELD-BY-FIELD against agent internal/hub.RetainedEscrowResponse (9 path(s))
2026-10-17T10:43:01.4881822Z hub -> controller (report ACK, `operator_actions` entry) FIELD-BY-FIELD against controller internal/report.OperatorAction (3 path(s))
2026-10-17T10:43:01.4882132Z controller -> hub (POST /preferences) name-reachability only (a tag found ANYWHERE in hub passes)
2026-10-17T10:43:01.4882415Z wire-contract gate OK — every emitted field is at least decodable by its receiver
2026-10-17T10:43:01.4882735Z (BLIND SPOTS: generic tag names skipped; name-reachability is not use; only the
2026-10-17T10:43:01.4883079Z declared ROOTS are covered — hub desired-state and the agent local API are not.)
2026-10-17T10:43:01.4997295Z
2026-10-17T10:43:01.4997952Z ==============================================================================
2026-10-17T10:43:01.4998359Z == gate: hub-copy (hub_copy_gate.py)
2026-10-17T10:43:01.4998682Z ==============================================================================
2026-10-17T10:43:01.7992808Z hub-copy gate OK — 137 hub file(s) scanned for 2 retired name(s); 6 customer surface(s) scanned for 8 retrieval pattern(s) (4 hu + 4 en), 1 registered claim(s), none unregistered
2026-10-17T10:43:01.7993686Z drift: controller gate imports the shared list (customer_copy_vocab.py) — single source
2026-10-17T10:43:01.7994059Z (BLIND SPOT: this checks the WORDS in the 6 declared customer surfaces. It cannot
2026-10-17T10:43:01.7994321Z tell whether a true-looking sentence is wired to a predicate that is actually true —
2026-10-17T10:43:01.7994643Z that is what render tests are for. And it does not read the operator's screens.)
2026-10-17T10:43:01.8051427Z
2026-10-17T10:43:01.8051944Z ==============================================================================
2026-10-17T10:43:01.8052270Z == gate: guide-quote (guide_quote_gate.py)
2026-10-17T10:43:01.8052520Z ==============================================================================
2026-10-17T10:43:01.9001209Z guide-quote: 4 quoted messages checked against the controller's English bundle
2026-10-17T10:43:01.9002029Z guide-quote gate OK: every quoted message is what the screen says.
2026-10-17T10:43:01.9055050Z
2026-10-17T10:43:01.9055537Z ==============================================================================
2026-10-17T10:43:01.9055937Z == gate: due-checks (due_checks_gate.py)
2026-10-17T10:43:01.9056193Z ==============================================================================
2026-10-17T10:43:02.0173552Z due-checks gate OK — 6 dated check(s) pending, none due yet.
2026-10-17T10:43:02.0174871Z today (UTC): 2026-10-17
2026-10-17T10:43:02.0175198Z nearest: R-887 due 2026-10-19 (in 2 day(s)) — no CI job lost in the 7 days after the S21 DooPlex change (act-runner
2026-10-17T10:43:02.0175653Z (fires on the next PUSH after a date passes, not on the date itself — by design)
2026-10-17T10:43:02.0645879Z
2026-10-17T10:43:02.0647027Z ==============================================================================
2026-10-17T10:43:02.0647456Z == gate: one-register (one_register_gate.py)
2026-10-17T10:43:02.0647711Z ==============================================================================
2026-10-17T10:43:02.3870974Z one-register gate — ROADMAP rows: 0 done, 28 ideas, 0 open-with-a-register-row, 0 WITHOUT
2026-10-17T10:43:02.3871822Z one-register gate OK — every open ROADMAP row has a register counterpart.
2026-10-17T10:43:02.3963668Z
2026-10-17T10:43:02.3964318Z ==============================================================================
2026-10-17T10:43:02.3964686Z == gate: closed-register (closed_register_gate.py)
2026-10-17T10:43:02.3965082Z ==============================================================================
2026-10-17T10:43:02.7676480Z closed-register gate — 831 closed rows with a readable state cell, 177 open rows, 0 convicted, 0 warnings
2026-10-17T10:43:02.7677189Z closed-register gate OK — no open work filed as closed, no id in both registers.
2026-10-17T10:43:02.7735829Z
2026-10-17T10:43:02.7736371Z ==============================================================================
2026-10-17T10:43:02.7736764Z == gate: observations (observations_gate.py /root/.cache/act/e75913ab8508cd04/hostexecutor)
2026-10-17T10:43:02.7737062Z ==============================================================================
2026-10-17T10:43:02.8654745Z observations gate OK — REPORT.md has no observations section (nothing to check)
2026-10-17T10:43:02.8751206Z
2026-10-17T10:43:02.8751687Z ==============================================================================
2026-10-17T10:43:02.8752011Z == gate: register-shape (register_shape_gate.py)
2026-10-17T10:43:02.8752403Z ==============================================================================
2026-10-17T10:43:03.2700331Z register-shape: /root/.cache/act/e75913ab8508cd04/hostexecutor/documentation/backlog/OPEN-ITEMS.md
2026-10-17T10:43:03.2701097Z register-shape: 177 register row(s), 177 distinct R- id(s)
2026-10-17T10:43:03.2701335Z register-shape: OK — every row ends with a state cell, every id is unique, no blank line splits the table, and every row has its columns, a known category, a P1–P4 severity and a defined state
2026-10-17T10:43:03.2830833Z
2026-10-17T10:43:03.2831145Z ==============================================================================
2026-10-17T10:43:03.2831321Z == gate: stands (check_stands.py)
2026-10-17T10:43:03.2831468Z ==============================================================================
2026-10-17T10:43:03.4052189Z check_stands — 55 claim(s) in documentation/architecture/where-felhom-stands.yaml
2026-10-17T10:43:03.4053266Z statuses: built=15, missing=4, partial=16, walked=20
2026-10-17T10:43:03.4053547Z register citations resolved in CLOSED-ITEMS.md: 43
2026-10-17T10:43:03.4054134Z
2026-10-17T10:43:03.4054378Z check_stands: OK — every claim cites a source, every citation resolves, and every 'walked' cites a walk.
2026-10-17T10:43:03.4110722Z
2026-10-17T10:43:03.4111095Z ==============================================================================
2026-10-17T10:43:03.4111341Z == gate: script-tests (script_tests_gate.py /root/.cache/act/e75913ab8508cd04/hostexecutor)
2026-10-17T10:43:03.4111589Z ==============================================================================
2026-10-17T10:48:53.4869671Z OK scripts/test_build_sizing_web.py 0.3s rc=0
2026-10-17T10:48:53.4870822Z OK scripts/test_dockerfile_arg_order.py 0.2s rc=0
2026-10-17T10:48:53.4871179Z OK scripts/test_due_checks_gate.py 17.4s rc=0
2026-10-17T10:48:53.4871445Z OK scripts/test_felhom_restore_beside.py 1.3s rc=0
2026-10-17T10:48:53.4871689Z OK scripts/test_gate_decoys.py 211.7s rc=0
2026-10-17T10:48:53.4871994Z OK scripts/test_golden_currency_gate.py 3.2s rc=0
2026-10-17T10:48:53.4872239Z OK scripts/test_guide_quote_gate.py 1.1s rc=0
2026-10-17T10:48:53.4872480Z OK scripts/test_hostinstall.py 1.9s rc=0
2026-10-17T10:48:53.4872711Z OK scripts/test_hu_grep.py 0.1s rc=0
2026-10-17T10:48:53.4873269Z OK scripts/test_hub_copy_drift.py 0.2s rc=0
2026-10-17T10:48:53.4873514Z OK scripts/test_instructions_gate.py 4.9s rc=0
2026-10-17T10:48:53.4873752Z OK scripts/test_iso_bootstrap_gate.py 2.6s rc=0
2026-10-17T10:48:53.4874085Z OK scripts/test_no_latest_push.py 0.2s rc=0
2026-10-17T10:48:53.4874324Z OK scripts/test_push_scope.py 0.1s rc=0
2026-10-17T10:48:53.4874551Z OK scripts/test_read_credential.py 0.4s rc=0
2026-10-17T10:48:53.4874852Z OK scripts/test_repo_gates.py 15.6s rc=0
2026-10-17T10:48:53.4875078Z OK scripts/test_repo_gates_docstring.py 0.1s rc=0
2026-10-17T10:48:53.4875314Z OK scripts/test_repo_gates_scope.py 0.9s rc=0
2026-10-17T10:48:53.4875614Z OK scripts/test_reuse_refs_check.py 0.5s rc=0
2026-10-17T10:48:53.4875862Z OK scripts/test_script_tests_gate.py 1.0s rc=0
2026-10-17T10:48:53.4876125Z OK scripts/bench/test_plugcut.py 0.3s rc=0
2026-10-17T10:48:53.4876429Z OK scripts/bench/test_plugswitch.py 0.3s rc=0
2026-10-17T10:48:53.4876663Z OK scripts/dooplex-offsite/test_dooplex_offsite.py 71.8s rc=0
2026-10-17T10:48:53.4876897Z OK scripts/ep0-copy-gc/test_ep0_copy_gc.py 3.7s rc=0
2026-10-17T10:48:53.4877184Z OK scripts/facebook/test_fb_probe.py 0.5s rc=0
2026-10-17T10:48:53.4877446Z OK scripts/hub-db-backup/test_hub_db_backup.py 9.4s rc=0
2026-10-17T10:48:53.4877659Z OK scripts/iso/test/test_console_glyphs.py 0.1s rc=0
2026-10-17T10:48:53.4877970Z OK scripts/iso/test/test_rootpw_guard.py 0.2s rc=0
2026-10-17T10:48:53.4878215Z script-tests: OK — 28 suite(s), every one exited 0
2026-10-17T10:48:53.5034897Z
2026-10-17T10:48:53.5035800Z ==============================================================================
2026-10-17T10:48:53.5036151Z == gate: decoy-coverage (decoy_coverage_gate.py /root/.cache/act/e75913ab8508cd04/hostexecutor /root/.cache/act/e75913ab8508cd04/felhom-controller /root/.cache/act/e75913ab8508cd04/felhom-agent /root/.cache/act/e75913ab8508cd04/app-catalog-felhom.eu)
2026-10-17T10:48:53.5036712Z ==============================================================================
2026-10-17T10:48:53.8937677Z decoy-coverage gate — 66 registered gate(s): 66 with a decoy, 0 registered exempt, 0 UNACCOUNTED
2026-10-17T10:48:53.8939025Z COVERED app-catalog-felhom.eu catalog-since the date bumped in a comment/README while .felhom.yml's fiel
2026-10-17T10:48:53.8939366Z COVERED app-catalog-felhom.eu copy-i18n Hungarian edited in a COMMENT/README/display_name (label, no
2026-10-17T10:48:53.8939692Z COVERED app-catalog-felhom.eu data-key a data_key: true only in a COMMENT or inside the i18n: block
2026-10-17T10:48:53.8939948Z COVERED app-catalog-felhom.eu db-credentials the password variable only in a COMMENT; the same reference
2026-10-17T10:48:53.8940202Z COVERED app-catalog-felhom.eu engine-major the major moved in a comment/env var/README/app image, not o
2026-10-17T10:48:53.8940585Z COVERED app-catalog-felhom.eu family-gate family_gate written only in a COMMENT (not gated, no min_con
2026-10-17T10:48:53.8940933Z COVERED app-catalog-felhom.eu gate-decoys this suite, run as a gate of the full run (R-1115): every ca
2026-10-17T10:48:53.8941444Z COVERED app-catalog-felhom.eu guide-version ADVISORY, exit 0 always: checked_version written only in a C
2026-10-17T10:48:53.8942339Z COVERED app-catalog-felhom.eu image-pins the pin's LABEL without the pin: a registry PORT (`:5000`) r
2026-10-17T10:48:53.8942727Z COVERED app-catalog-felhom.eu image-resolvable END TO END through the gate's own `docker manifest inspect`
2026-10-17T10:48:53.8943032Z COVERED app-catalog-felhom.eu image-volumes the data path mounted only in a COMMENT, on ANOTHER service
2026-10-17T10:48:53.8943386Z COVERED app-catalog-felhom.eu login-kind login_kind written only in a COMMENT, only inside the Englis
2026-10-17T10:48:53.8943731Z COVERED app-catalog-felhom.eu mem-limit-sum the right figure only in a COMMENT (the compose header's 'me
2026-10-17T10:48:53.8943977Z COVERED app-catalog-felhom.eu onboarding a NEW template with no record; a record missing an id, or ca
2026-10-17T10:48:53.8944346Z COVERED app-catalog-felhom.eu probe-matches-compose the probe TARGET resolves by exact name, explicit `container
2026-10-17T10:48:53.8944672Z COVERED app-catalog-felhom.eu probe-measured the measurement written in the TAGLINE or another comment bl
2026-10-17T10:48:53.8945022Z COVERED app-catalog-felhom.eu redis-persistence `--appendonly yes` only in a COMMENT, or only in a steps/ fi
2026-10-17T10:48:53.8945317Z COVERED app-catalog-felhom.eu test-record a ladder whose newest step is not the compose's images (a mo
2026-10-17T10:48:53.8945621Z COVERED app-catalog-felhom.eu test-record-move an image move with NO entry, with the entry only in a COMMEN
2026-10-17T10:48:53.8946019Z COVERED app-catalog-felhom.eu unclean-boot-images the new image only in a compose COMMENT, on ANOTHER service
2026-10-17T10:48:53.8946282Z COVERED app-catalog-felhom.eu volume-persistence the classifier and the self-test via the injected-prober sui
2026-10-17T10:48:53.8946638Z COVERED felhom-agent gate-decoys this suite, run as a gate of agent_gates.py's full run, whic
2026-10-17T10:48:53.8946953Z COVERED felhom-agent instructions a component version literal in THIS repo's CLAUDE.md effecti
2026-10-17T10:48:53.8947213Z COVERED felhom-agent observations R-419 in THIS repo's REPORT.md: an Observations note SAYING
2026-10-17T10:48:53.8947641Z COVERED felhom-agent published against a FAKE Gitea: a tag whose package 404s, a tag whose
2026-10-17T10:48:53.8947890Z COVERED felhom-agent release-complete the newest `## vX.Y.Z` with no tag anywhere, a tag parked on
2026-10-17T10:48:53.8948131Z COVERED felhom-agent reuse-refs a cited .go and a cited .md path that do not exist, planted
2026-10-17T10:48:53.8948529Z COVERED felhom-controller app-row-dedup hand-rolled row markup in partials/, AND a commented-out par
2026-10-17T10:48:53.8948802Z COVERED felhom-controller debug-routes a live dispatcher case commented out - the button survives,
2026-10-17T10:48:53.8949066Z COVERED felhom-controller docker-v R-426: an unallowlisted `-v /etc:/x` in a NEW .go file two d
2026-10-17T10:48:53.8949460Z COVERED felhom-controller emoji an emoji in templates/partials/ (scope was os.listdir)
2026-10-17T10:48:53.8949708Z COVERED felhom-controller gate-decoys this suite, run as a gate of controller_gates.py's full run
2026-10-17T10:48:53.8950072Z COVERED felhom-controller go-parity a Go-side key REWORDED, a key citing text no base literal ha
2026-10-17T10:48:53.8950383Z COVERED felhom-controller gofmt R-454: a planted unformatted .go file in internal/ is convic
2026-10-17T10:48:53.8950627Z COVERED felhom-controller golden-notice R-410 in the other direction: an empty dir must not count as
2026-10-17T10:48:53.8950985Z COVERED felhom-controller i18n an undefined marker key, a pleading English value, a shrinki
2026-10-17T10:48:53.8951307Z COVERED felhom-controller instructions R-426: a component version literal in THIS repo's CLAUDE.md
2026-10-17T10:48:53.8951618Z COVERED felhom-controller minagent-header the word MinAgent in prose / a code span, not the header lin
2026-10-17T10:48:53.8951964Z COVERED felhom-controller mojibake CONTROL: already walked; proves the planted file is really r
2026-10-17T10:48:53.8952263Z COVERED felhom-controller native-confirm a native confirm() in templates/partials/
2026-10-17T10:48:53.8952623Z COVERED felhom-controller observations R-426: R-419 in THIS repo's REPORT.md - an Observations note
2026-10-17T10:48:53.8953081Z COVERED felhom-controller offbox-rename R-425: NAS branding in a NEW backups*.html, and in a bundle
2026-10-17T10:48:53.8953521Z COVERED felhom-controller retrieval-promise an unregistered retrieval promise, in partials/; R-325: the
2026-10-17T10:48:53.8953795Z COVERED felhom-controller reuse-refs R-426: a cited .go and a cited .md path that do not exist, p
2026-10-17T10:48:53.8954058Z COVERED felhom-controller secret-markup a secret templated into markup, in partials/
2026-10-17T10:48:53.8954450Z COVERED felhom-controller template-id a JS reference to a missing id, in partials/
2026-10-17T10:48:53.8954714Z COVERED felhom.eu closed-register a verdict cell reading open, a row with no state cell at all
2026-10-17T10:48:53.8955001Z COVERED felhom.eu decoy-coverage a gate registered in a runner with no decoy and no exemption
2026-10-17T10:48:53.8955376Z COVERED felhom.eu due-checks R-426: a dated check whose id survives only in prose (orphan
2026-10-17T10:48:53.8955649Z COVERED felhom.eu golden-currency R-410: an empty directory with a perfect name, checked by wh
2026-10-17T10:48:53.8956035Z COVERED felhom.eu guide-quote R-596: SEVEN cases in scripts/test_guide_quote_gate.py, run
2026-10-17T10:48:53.8956430Z COVERED felhom.eu hostinstall R-426: R-185's regression with only its dry-run echo left, t
2026-10-17T10:48:53.8956811Z COVERED felhom.eu hub-confirm a native confirm() in templates/partials/ (scope was os.list
2026-10-17T10:48:53.8957142Z COVERED felhom.eu hub-copy R-558: an English retrieval promise in the NEW bundle (the s
2026-10-17T10:48:53.8957544Z COVERED felhom.eu instructions R-426: a version literal in a CLAUDE.md's effective text; th
2026-10-17T10:48:53.8957997Z COVERED felhom.eu iso-bootstrap R-502: SIX decoys + the genuine article in scripts/test_iso_
2026-10-17T10:48:53.8958302Z COVERED felhom.eu manifest-bearer a bearer literal in manifests/overlays/ (scope was os.listdi
2026-10-17T10:48:53.8958686Z COVERED felhom.eu observations R-419: prose SAYING it carries no marker, plus both genuine
2026-10-17T10:48:53.8959058Z COVERED felhom.eu one-register R-426: an open roadmap row whose state NAMES another row's C
2026-10-17T10:48:53.8959603Z COVERED felhom.eu poster-facts a throwaway repo where the FACTS file is committed after the
2026-10-17T10:48:53.8959876Z COVERED felhom.eu register-shape R-627: a row whose state cell was EATEN (no trailing pipe),
2026-10-17T10:48:53.8960311Z COVERED felhom.eu reuse-refs a cited .go path, and (R-422) a cited .md path, that does no
2026-10-17T10:48:53.8960762Z COVERED felhom.eu script-tests R-885: FIVE cases in scripts/test_script_tests_gate.py, run
2026-10-17T10:48:53.8961200Z COVERED felhom.eu site R-423: a NEW page under website/ that PAGES does not list (t
2026-10-17T10:48:53.8961450Z COVERED felhom.eu stands R-819: a stand citing a register id that exists in NEITHER r
2026-10-17T10:48:53.8961998Z COVERED felhom.eu wire-contract R-555: an emitted tag whose name the receiver carries ONLY i
2026-10-17T10:48:53.8962327Z
2026-10-17T10:48:53.8962638Z decoy-coverage gate OK — every registered gate has a decoy or a named exemption (R-426)
2026-10-17T10:48:53.9085497Z
2026-10-17T10:48:53.9086444Z ==============================================================================
2026-10-17T10:48:53.9086750Z == gate: poster-facts (poster_facts_gate.py /root/.cache/act/e75913ab8508cd04/hostexecutor)
2026-10-17T10:48:53.9087146Z ==============================================================================
2026-10-17T10:48:54.0612722Z poster-facts gate - advisory, never fails a push
2026-10-17T10:48:54.0613625Z poster is current: the drawing is as new as its facts (poster +0 s relative to facts)
2026-10-17T10:48:54.0876451Z
2026-10-17T10:48:54.0876988Z ==============================================================================
2026-10-17T10:48:54.0877283Z == summary
2026-10-17T10:48:54.0877426Z ==============================================================================
2026-10-17T10:48:54.0877631Z site OK (exit 0)
2026-10-17T10:48:54.0877771Z hostinstall OK (exit 0)
2026-10-17T10:48:54.0877892Z hub-confirm OK (exit 0)
2026-10-17T10:48:54.0878085Z manifest-bearer OK (exit 0)
2026-10-17T10:48:54.0878215Z reuse-refs OK (exit 0)
2026-10-17T10:48:54.0878380Z instructions OK (exit 0)
2026-10-17T10:48:54.0878496Z golden-currency OK (exit 0)
2026-10-17T10:48:54.0878657Z wire-contract OK (exit 0)
2026-10-17T10:48:54.0878775Z hub-copy OK (exit 0)
2026-10-17T10:48:54.0878887Z guide-quote OK (exit 0)
2026-10-17T10:48:54.0879098Z due-checks OK (exit 0)
2026-10-17T10:48:54.0879314Z one-register OK (exit 0)
2026-10-17T10:48:54.0879472Z closed-register OK (exit 0)
2026-10-17T10:48:54.0879587Z observations OK (exit 0)
2026-10-17T10:48:54.0879741Z register-shape OK (exit 0)
2026-10-17T10:48:54.0879873Z stands OK (exit 0)
2026-10-17T10:48:54.0879983Z script-tests OK (exit 0)
2026-10-17T10:48:54.0880141Z decoy-coverage OK (exit 0)
2026-10-17T10:48:54.0880263Z poster-facts OK (exit 0)
2026-10-17T10:48:54.0880389Z
2026-10-17T10:48:54.0880544Z all felhom.eu gates OK
2026-10-17T10:48:54.1087538Z ::group::Run python3 -c 'import os;print("RESEND_API_KEY length: %d" % len(os.environ.get("RESEND_API_KEY","")))'
2026-10-17T10:48:54.1088110Z python3 -c 'import os;print("RESEND_API_KEY length: %d" % len(os.environ.get("RESEND_API_KEY","")))'
2026-10-17T10:48:54.1088608Z if [ "$FORCE_ALARM" = "true" ]; then
2026-10-17T10:48:54.1088856Z echo "force_alarm=true - failing on purpose so the alarm step runs (R-1129 proof)"
2026-10-17T10:48:54.1089117Z exit 1
2026-10-17T10:48:54.1089318Z fi
2026-10-17T10:48:54.1089595Z shell: bash --noprofile --norc -e -o pipefail {0}
2026-10-17T10:48:54.1089852Z env:
2026-10-17T10:48:54.1090051Z RESEND_API_KEY: ***
2026-10-17T10:48:54.1090466Z FORCE_ALARM: true
2026-10-17T10:48:54.1090831Z ::endgroup::
2026-10-17T10:48:54.1977060Z RESEND_API_KEY length: 36
2026-10-17T10:48:54.2036911Z force_alarm=true - failing on purpose so the alarm step runs (R-1129 proof)
2026-10-17T10:48:54.2039607Z ❌ Failure - Main Manual proof - alarm key present, optional forced failure (dispatch only, R-1129)
2026-10-17T10:48:54.2044298Z exit status 1
2026-10-17T10:48:54.2057243Z ::group::Run python3 - <<'PY'
2026-10-17T10:48:54.2057711Z python3 - <<'PY'
2026-10-17T10:48:54.2057921Z import json, os, sys, time, urllib.request, urllib.error
2026-10-17T10:48:54.2058169Z
2026-10-17T10:48:54.2058326Z key = os.environ.get("RESEND_API_KEY", "")
2026-10-17T10:48:54.2058506Z if not key:
2026-10-17T10:48:54.2058730Z sys.exit("ALARM FAILED: RESEND_API_KEY is empty — the alarm cannot be sent, and a "
2026-10-17T10:48:54.2058952Z "silent alarm is worse than none. Set the user-level Actions secret.")
2026-10-17T10:48:54.2059153Z
2026-10-17T10:48:54.2059301Z repo = os.environ.get("GITHUB_REPOSITORY", "?")
2026-10-17T10:48:54.2059518Z sha = os.environ.get("GITHUB_SHA", "?")
2026-10-17T10:48:54.2059695Z run = os.environ.get("GITHUB_RUN_NUMBER", "?")
2026-10-17T10:48:54.2059866Z srv = os.environ.get("GITHUB_SERVER_URL", "https://gitea.dooplex.hu")
2026-10-17T10:48:54.2060114Z
2026-10-17T10:48:54.2060261Z # R-265: how long the run took, so a reap is self-identifying. An honest gate failure
2026-10-17T10:48:54.2060563Z # lands in well under a minute; a multi-minute figure means the job hit its own timeout
2026-10-17T10:48:54.2060793Z # and the interesting question is the runner, not the gates.
2026-10-17T10:48:54.2061021Z started = os.environ.get("GATES_STARTED_AT", "")
2026-10-17T10:48:54.2061202Z try:
2026-10-17T10:48:54.2061354Z # An ABSENT stamp is "unknown", never a number. Defaulting to 0 would print an elapsed
2026-10-17T10:48:54.2061609Z # of ~1.7 billion seconds, which is a confident wrong answer — the exact failure mode
2026-10-17T10:48:54.2061803Z # this whole session is about.
2026-10-17T10:48:54.2061972Z elapsed = "%d s" % (int(time.time()) - int(started)) if started else "unknown (no start stamp)"
2026-10-17T10:48:54.2062165Z except (TypeError, ValueError):
2026-10-17T10:48:54.2062381Z elapsed = "unknown (unparseable start stamp %r)" % started
2026-10-17T10:48:54.2062581Z
2026-10-17T10:48:54.2062726Z body = json.dumps({
2026-10-17T10:48:54.2062936Z "from": "Felhom CI <monitoring@felhom.eu>",
2026-10-17T10:48:54.2063144Z "to": ["admin@felhom.eu"],
2026-10-17T10:48:54.2063308Z "subject": ("[felhom CI] FORCED TEST, not a real failure - gates FAILED in %s"
2026-10-17T10:48:54.2063492Z if os.environ.get("FORCE_ALARM") == "true"
2026-10-17T10:48:54.2063711Z else "[felhom CI] gates FAILED in %s") % repo,
2026-10-17T10:48:54.2063894Z "text": (
2026-10-17T10:48:54.2064057Z "The gate entry point exited non-zero.\n\n"
2026-10-17T10:48:54.2064288Z "Repository : %s\n"
2026-10-17T10:48:54.2064455Z "Commit : %s\n"
2026-10-17T10:48:54.2064607Z "Run : %s/%s/actions/runs/%s\n"
2026-10-17T10:48:54.2064781Z "Elapsed : %s\n\n"
2026-10-17T10:48:54.2064983Z "The failing gate names itself in the run log - WHEN THERE IS ONE. A run that\n"
2026-10-17T10:48:54.2065173Z "hung and was reaped by the platform leaves no log at all (R-265, run 264: 834 s,\n"
2026-10-17T10:48:54.2065363Z "log fetch 500). The job now times out at 5 minutes so that case should fail as a\n"
2026-10-17T10:48:54.2065594Z "job and keep its log; if Elapsed above is minutes rather than seconds, suspect\n"
2026-10-17T10:48:54.2065780Z "the runner before the gates, and if the log is missing say so rather than\n"
2026-10-17T10:48:54.2065965Z "guessing which gate it was.\n\n"
2026-10-17T10:48:54.2066124Z "If the local pre-push hook was GREEN for this commit, then CI and the hook\n"
2026-10-17T10:48:54.2066432Z "disagree - that is a finding about the gates themselves, not about CI, and it\n"
2026-10-17T10:48:54.2066631Z "outranks whatever the push was for.\n"
2026-10-17T10:48:54.2066802Z ) % (repo, sha, srv, repo, run, elapsed),
2026-10-17T10:48:54.2067046Z }).encode()
2026-10-17T10:48:54.2067215Z
2026-10-17T10:48:54.2067458Z req = urllib.request.Request(
2026-10-17T10:48:54.2067629Z "https://api.resend.com/emails", data=body, method="POST",
2026-10-17T10:48:54.2067844Z headers={"Authorization": "Bearer %s" % key,
2026-10-17T10:48:54.2068022Z "Content-Type": "application/json",
2026-10-17T10:48:54.2068290Z # Cloudflare fronts api.resend.com and BLOCKS the default
2026-10-17T10:48:54.2068520Z # "Python-urllib/3.x" agent with its own 403 (error 1010) — which looks
2026-10-17T10:48:54.2068722Z # exactly like an auth failure and is not one. Measured 2026-08-02.
2026-10-17T10:48:54.2068898Z "User-Agent": "felhom-ci/1.0"})
2026-10-17T10:48:54.2069064Z try:
2026-10-17T10:48:54.2069254Z with urllib.request.urlopen(req, timeout=30) as r:
2026-10-17T10:48:54.2069422Z print("RESEND-ACCEPTED id=%s" % json.load(r)["id"])
2026-10-17T10:48:54.2069596Z except urllib.error.HTTPError as e:
2026-10-17T10:48:54.2069815Z sys.exit("ALARM FAILED: Resend returned HTTP %s: %s" % (e.code, e.read().decode()[:300]))
2026-10-17T10:48:54.2070015Z PY
2026-10-17T10:48:54.2070167Z shell: bash --noprofile --norc -e -o pipefail {0}
2026-10-17T10:48:54.2070429Z env:
2026-10-17T10:48:54.2070594Z RESEND_API_KEY: ***
2026-10-17T10:48:54.2070782Z FORCE_ALARM: true
2026-10-17T10:48:54.2070934Z ::endgroup::
2026-10-17T10:48:54.8146021Z RESEND-ACCEPTED id=01a1497a-9cba-770c-aee8-103f238f507e
2026-10-17T10:48:54.8345857Z Cleaning up container for job gates
2026-10-17T10:48:55.9865684Z 🏁 Job failed
2026-10-17T10:48:55.9867335Z Job 'gates' failed