gates / gates (push) Successful in 6m53s
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
254 lines
22 KiB
Plaintext
254 lines
22 KiB
Plaintext
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-<ver>-<date>/.
|
|
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 <monitoring@felhom.eu>",
|
|
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
|
|
|