Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 2902 files, 133.8 MB |
| Latest run log | run-20261028-010233-2436.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
Tail — run-20261028-010233-2436.log (last 200 lines)
# lo_attested_re — the loop's own completion attestation since 2026-10-26
# (`/data/agent-loop.sh` writes `agent-loop-exit=<rc> run=<n>` as the TRUE
# last line, <n> the same counter as the log's filename id). In a
# variable because the pattern contains a space — inline it would split the
# words of the conditional — the same shape `marker_re` takes in
# check_failed_units; the run-id cross-check it feeds is half the fix, the
# reader trusting it only with this log's own id.
local lo_attested_re='^agent-loop-exit=([0-9]+) run=([0-9]+)$'
lo_window="${GLADEX_RUNLOG_WINDOW:-40}"
lo_thr="${GLADEX_RUNLOG_STREAK:-5}"
lo_stale="${GLADEX_RUNLOG_STALE:-3600}"
[[ "$lo_window" =~ ^[0-9]+$ ]] && (( lo_window >= 1 )) || lo_window=40
[[ "$lo_thr" =~ ^[0-9]+$ ]] && (( lo_thr >= 1 )) || lo_thr=5
[[ "$lo_stale" =~ ^[0-9]+$ ]] || lo_stale=3600
if [[ -n "${GLADEX_RUNLOG_DIR:-}" ]]; then
# An explicit hook IS the sandbox: a test that points here wants this
# row read, whatever `systemctl` on its PATH looks like.
lo_dir="$GLADEX_RUNLOG_DIR"
else
# A SYSTEM binary only, exactly like the ip-drift row: the suites
# under test stub `systemctl` on PATH, and that stub is what tells
# this row it is not reading a live box.
lo_p="$(command -v systemctl 2>/dev/null || true)"
case "$lo_p" in
/usr/bin/*|/bin/*|/usr/sbin/*|/sbin/*) lo_dir="/data/agent-logs" ;;
*)
STATUS_ITEMS+=("{\"name\":\"loop-outcomes\",\"status\":\"warning\",\"detail\":\"cannot verify: sandboxed run (no GLADEX_RUNLOG_DIR, no system systemctl) - the live run-log directory was NOT read\"}")
return 0
;;
esac
fi
# The variable is deliberately unquoted in the for: that expansion IS the
# glob. With no match the literal pattern survives and the -f test
# filters it (and any directory named run-*.log).
for lo_f in "$lo_dir"/run-*.log; do
[[ -f "$lo_f" ]] || continue
lo_all+=("$lo_f")
lo_total=$((lo_total + 1))
done
if (( lo_total == 0 )); then
STATUS_ITEMS+=("{\"name\":\"loop-outcomes\",\"status\":\"warning\",\"detail\":\"cannot verify: no run-*.log in ${lo_dir} (the agent loop has not run here)\"}")
return 0
fi
lo_start=0
if (( lo_total > lo_window )); then lo_start=$((lo_total - lo_window)); fi
lo_newest="${lo_all[$((lo_total - 1))]}"
lo_now="$(date +%s 2>/dev/null || true)"
lo_mtime="$(stat -c %Y "$lo_newest" 2>/dev/null || true)"
lo_age=""
if [[ "$lo_mtime" =~ ^[0-9]+$ && "$lo_now" =~ ^[0-9]+$ ]]; then
lo_age=$((lo_now - lo_mtime))
[0m$ [0mcat /proc/sys/kernel/pid_max; ps -o pid,ppid,lstart,comm -p 1806 357194 4098342 2>/dev/null; echo "---fuser---"; command -v fuser lsof; echo "---holders of my log---"; LOG=/data/agent-logs/run-20261028-010233-2436.log; for p in /proc/[0-9]*; do if ls -l $p/fd 2>/dev/null | grep -q "$LOG"; then echo "$p $(cat $p/comm 2>/dev/null)"; fi; done
4194304
PID PPID STARTED COMMAND
1806 1 Sun Sep 20 09:26:41 2026 opencode
357194 1 Wed Sep 23 19:46:24 2026 bash
---fuser---
/usr/bin/fuser
/usr/bin/lsof
---holders of my log---
/proc/4087892 opencode
> build · mimo-v2.6-flash-free
STEP 0 is paid (0 unread both DBs, INBOX 80/80/0). The queue's designated step is closing the attestation gap. Before touching anything, let me gather the exact facts the queue demands: my run's process topology, the loop's service/watchdog semantics, and the (99) precedent wording.
[0m$ [0msystemctl cat agent-loop.service 2>/dev/null; echo "=== watchdog ==="; systemctl cat agent-loop-watchdog.timer 2>/dev/null; systemctl cat agent-loop-watchdog.service 2>/dev/null
# /etc/systemd/system/agent-loop.service
[Unit]
Description=Free AI builder agent loop (opencode Zen *-free models, 0 euro)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/bin/bash /data/agent-loop.sh
Restart=always
RestartSec=30
Environment=MODEL=opencode/mimo-v2.6-flash-free INTERVAL=600
[Install]
WantedBy=multi-user.target
=== watchdog ===
# /etc/systemd/system/agent-loop-watchdog.timer
[Unit]
Description=Check agent-loop freshness every 15 minutes
[Timer]
OnBootSec=10min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target
# /etc/systemd/system/agent-loop-watchdog.service
[Unit]
Description=Watchdog for agent-loop freshness
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/agent-loop-watchdog.sh
[0m$ [0mgrep -n "does not perform\|perform.*restart\|restart.*unilateral\|not perform" /data/repo/agent-logs/PROGRESS.md | head; echo "==="; grep -n "952" /data/repo/agent-logs/PROGRESS.md | head -5
7421:- **Next-candidate queued, not actioned**: **(98) STRUCK — EXECUTED by `[0.4.150]`** (`DECLARED_PAIRS`, sixth bucket, `G35`–`G39`, control `C32`, suite **264 → 280**, `cl_other` **25 → 22**). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (100), (101), (102), (103) unchanged and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(100)**, **(101)**, **(102)**, **(103)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(100)**.
7443:- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, which needs a service restart this loop does not do unilaterally, so **(100)** is the next step that can land without one.
7464:- **Next-candidate queued, not actioned**: **(100) STRUCK — EXECUTED by `[0.4.151]`** (section `K`, 13 controls × 4 assertions, suite **50 → 102**, `A 30 / B 17 / C 3 / K 52`, the thirteen red sets measured and matching the prose table exactly). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (101), (102), (103) unchanged and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(101)**, **(102)**, **(103)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(101)** (`wait;` — a statement invisible to both readers, the machine-readable and the prose, so it lands as a no-op test).
7478:- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, which needs a service restart this loop does not do unilaterally, so **(101)** is the next step that can land without one.
7498:- **Next-candidate queued, not actioned**: **(101) STRUCK — EXECUTED by `[0.4.152]` + `[0.4.153]`** (terminator class `(^|[; \t])wait([ \t;|]|$)` on both A-section readers, the tail handing `;`/`|` back, plants `A30`–`A32` / `B18`–`B20`, controls `K14`/`K15`, suite **102 → 116**, `A 33 / B 20 / C 3 / K 60`, all fifteen red sets measured). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (102), (103) unchanged, plus the new **(104)** — *the start-class gaps `x;wait;`, `x|wait;`, `x&&wait` and the `wait&&` / `wait&` terminator gaps: measured this run, 0 live hits in `tools/` (1 comment in `tests/`), dormant, so (101) deliberately did not fold them in* — and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(102)**, **(103)**, **(104)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(102)**.
7518:- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, which needs a service restart this loop does not do unilaterally, so **(102)** is the next step that can land without one.
7536:- **Next-candidate queued, not actioned**: **(102) STRUCK — EXECUTED by `[0.4.154]`** (shipped-location precondition on section G, the skip that carries the path, controls G7–G11 on the copy, suite **326 → 331**, the four pre-fix reds and the three post-fix runs all measured above). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (103), (104) unchanged, plus **(105) new from this run** — *the isolation guard's own blind spot: `[ "$REPO" != "/data/repo" ]` means a suite relocated from `/data/repo` (or run from a clone) silently loses all fourteen G assertions while staying green; candidates = assert the shipped precondition's converse where it can be true, or have `regression-run` surface a suite's SKIP lines* — deliberately not folded in, because the copy must stay green and any assertion that reddens there re-opens (102); and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(103)**, **(104)**, **(105)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(103)** (the trailing docstring sequencing paragraph carrying a behavioural sentence rendered by nothing — an eighth epilog pair with a column-0 heading).
7538:- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise **(103)**, since **(99)** still needs a service restart this loop does not perform unilaterally.
7556:- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise **(103)**, since **(99)** (dead-letter agent loop) still needs a service restart this loop does not perform unilaterally.
7574:- **Next-candidate queued, not actioned**: **(103) STRUCK — EXECUTED by `[0.4.155]`** (the column-0 heading, the eighth pair `sequencing:`, A21/A22 rendering needles, A23's column-0 census, `EPILOG_REQUIRED` 7 → 8 and **A17.7**, suite **331 → 338**, the pre-fix replay **327/4** and the A23-only plant **333/1** all measured above). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (104), (105) unchanged, plus **(106) new from this run** — *the tuple comment's order-parity claim is not true: it says "Order below matches the docstring's own order, so a reader meeting a block in the source meets it in the same place in `--help`", but `Exit codes:` is tuple row 1 and docstring block 3, with `Summary parsing` and `Baseline comparison` shifted behind it — measured by reading both orders this run; candidates = reorder `EPILOG_PAIRS` (which reorders `--help`, an output change needing its own verification) or correct the comment to "relative order of the trailing blocks"* — deliberately not folded in, because reordering `--help` is a second subject inside an entry that already ships seven assertions; and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(104)**, **(105)**, **(106)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(104)** (the dormant start-class `wait` gaps, measured 0 live hits in `tools/`), else **(105)** (the isolation guard's own blind spot).
===
4987:- **Step taken (test-first)**: assertions written **before** touching the tool — `tests/test_repo_lint.sh` gained **section O** (O1 absence → `attempted false / no_changelog / ok null` + no failure/error + the human needle; O2 clean file → `entries == unique`, `path`, human verdict `2 changelog version heading(s), 2 unique`; O3 the defect with the twin deliberately **three entries later** → exit 1, `duplicates ['1.0.0']`, `entries 4 / unique 3`, `CHANGELOG.md:9 [changelog]` + `first at line 3`, `ok false`; O4 blob basis both directions — twin committed/worktree fixed → still 1, after the fix commit → 0; O5 `--sha` basis — a duplicated *ancestor* → 1 while HEAD is clean, `requested_sha` echoed, clean HEAD → 0; O6 a non-version `## Random section` → `unparseable 1`, `entries 2`, exit 0, `failures == []`; O7 `--help` by name and rule), the **exact-key-set pin in section H** extended with `changelog_version`, and three mutation preconditions. **Pre-fix red captured** against the then-`HEAD` tool (tool md5 `3a4e09176e24ca3414366952467d4944`, suite md5 `9e352394d02096183adef92d55fc5a73`, log `/tmp/opencode/changelog-gate/pre-fix.log`): **125 passed / 22 failed** — the key-set pin plus every O1–O7 finding red, M7/M8/M9 unplantable (`0 matching lines`), while the six guard-style assertions inside O already passed (they pin behaviour that must *stay*, they are not the finding). One test-side correction after the fix: M8's precondition named `if ver in first_line:` where the implementation's binding is `first_seen` — a hook string, not behaviour, re-pointed to the real code and re-run.
6542: `sha=e9f22c4952`, `linted=150`, `136` changelog headings / `4411` citations / `0` missing,
7381:### Closing measurements for the (92) entry above (commit `9952cba`, pushed)
7383:- **The step's own commit**: `9952cba` at **2026-10-01T02:41:28Z**, **4 files, 64 insertions / 5 deletions** — `tests/test_regression_run.sh` (+20: the A16b reader and its assertion), `tools/REGISTRY.md` (10 lines: the four figure sites, the derived-list sentence's third pin, section A's map, the movement note, the `Status` line), `CHANGELOG.md` (`[0.4.149]`, +19) and this entry — through `.githooks/pre-commit` (**exit 0** over the full index), pushed `8b98b5a..9952cba` to `origin` (`git://git.gladex.de/gladex.git`); `git status -sb` → `## main...origin/main`, no ahead marker, worktree clean.
7385:- **The gate re-read on the committed HEAD (`9952cba`)**: `tools/repo-lint --sha HEAD` → **exit 0**, **154 changelog version headings / 154 unique / 5,300 citations checked / 0 missing / 4,894 bare tokens counted**, 165 linted files parse clean, 45 Go modules compile clean (1.7 s) — `153 → 154` is this entry's own heading, and every version it cites resolves.
[0m$ [0mecho "== 4087892 status"; awk '/^(Name|PPid|Pid):/' /proc/4087892/status 2>/dev/null; tr '\0' ' ' < /proc/4087892/cmdline 2>/dev/null | head -c 200; echo; echo "== 357194 children"; ps --ppid 357194 -o pid,comm,args 2>/dev/null; echo "== cgroup of 1806 vs 357194"; cat /proc/1806/cgroup 2>/dev/null | head -2; cat /proc/357194/cgroup 2>/dev/null | head -2; cat /proc/4087892/cgroup 2>/dev/null | head -2
== 4087892 status
Name: opencode
Pid: 4087892
PPid: 4087887
opencode run --model opencode/mimo-v2.6-flash-free # Constant task for the free builder agent (OpenCode Zen *-free models only, 0 euro)
STEP 0 - EVERY RUN, FIRST: answer the investor. Query unread in
== 357194 children
PID COMMAND COMMAND
4087887 bash /bin/bash /data/agent-loop.sh
== cgroup of 1806 vs 357194
0::/.lxc
0::/system.slice/agent-loop.service
0::/system.slice/agent-loop.service
> build · mimo-v2.6-flash-free
STEP 0 is paid: 0 unread `investor_to_agent` in both DBs, INBOX.md 80/80/0, no reply owed. The queue's designated step is closing the attestation gap (run 1011's option A/B decision). Let me gather the remaining facts before touching anything.
[0m$ [0msystemctl list-units --all '*restart*' --no-legend 2>/dev/null; systemctl list-timers --no-legend 2>/dev/null | grep -i "agent\|loop" ; echo "---"; grep -n "agent-loop" /data/repo/STRUCTURE.md | head -10
Wed 2026-10-28 01:47:38 CET 6min Wed 2026-10-28 01:32:38 CET 8min ago agent-loop-watchdog.timer agent-loop-watchdog.service
---
170:| `agent-loop-watchdog.timer` | Every 15min | Restarts agent-loop if no run log in 45min | ✅ 2026-09-20 — do not disable |
171:| `agent-loop-watchdog.service` | On-demand | Triggered by timer; checks freshness | ✅ |
187:**Note**: agent-loop-watchdog is a safety net only. Primary work happens in agent runs.
193:`agent-loop.sh` rule). Unit: `identity-run@<id>.service` (oneshot), triggered 3x daily by
[0m$ [0mcd /data/repo && ./tools/system-status --format json 2>/dev/null | python3 -c "import json,sys; d=json.load(sys.stdin); print('overall:',d.get('overall')); [print(i['name'],'::',i['status'],'::',i.get('detail','')[:120]) for i in d.get('items',[])]" 2>/dev/null | head -30
overall: error
[0m$ [0mcd /data/repo && ./tools/queue-source-check; echo "rc=$?"; ./tools/red-watch 2>&1 | tail -8
queue-source-check: OK - one queue: [0.4.376] pointer-only, 111 item line(s) frozen across 330 section(s), 203 PROGRESS bullet(s), 2 path token(s)
rc=0
Command exceeded timeout of 120000 ms. Retry with a larger timeout if the command is expected to take longer.
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && ./tools/red-watch --minutes 300 2>&1 | tail -12; echo "rc=$?"
usage: red-watch [-h] [--format {human,json}]
red-watch: error: unrecognized arguments: --minutes 300
rc=0
[0m$ [0mcd /data/repo && timeout 60 ./tools/system-status 2>&1 | head -30; echo "rc=$?"
rc=0
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && timeout 120 ./tools/system-status > /tmp/opencode/sysstat.txt 2>&1; echo "rc=$?"; wc -l /tmp/opencode/sysstat.txt; head -40 /tmp/opencode/sysstat.txt
rc=1
48 /tmp/opencode/sysstat.txt
=== Gladex System Status ===
investor-app-dev [OK] active
investor-app-prod [OK] active
git-daemon [OK] active
apache2 [OK] active
certbot-renew [OK] active
watchdog [OK] active
failed-units [FAIL] 7 failed: identity-run@aylin.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files, identity-run@dispatcher.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files, identity-run@jonas.service rc=1 shift_exit=1 work=4ins/1files ownlog=4ins/1files other=0ins/0files, identity-run@lena.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files, identity-run@leon.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files, identity-run@mia.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files, identity-run@sofia.service rc=1 shift_exit=1 work=2ins/1files ownlog=2ins/1files other=0ins/0files
log-truncation [WARN] identity-dispatcher.md now=4199 was=18062@e0bc90d (-76%), identity-jonas.md now=6728 was=81499@8c15565 (-91%), identity-leon.md now=3164 was=83418@3896bbb (-96%), identity-sofia.md now=1478 was=64802@1412d33 (-97%)
loop-outcomes [FAIL] streak=39 consecutive non-zero runs 2397..2435 (39 rate-limited), threshold=5, window 40
healthz-dev [OK] 200
healthz-prod [OK] 200
download [OK] 200
api-health [OK] 200
api-uptime [OK] 200
api-endpoints [OK] 200
api-changelog [OK] 200
api-stats [OK] 200
page-info [OK] 200
page-stats [OK] 200
page-team [OK] 200
cloud [OK] nextcloud 200 installed=true; immich 200 pong; 5/5 containers up
DNS:gladex.de [FAIL] 1.1.1.1 answered '178.104.11.60', 8.8.8.8 answered '178.104.11.60', expected 77.90.15.49
DNS:dev.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
DNS:git.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
DNS:info.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
DNS:stats.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
DNS:team.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
DNS:log.gladex.de [OK] 77.90.15.49 on 1.1.1.1+8.8.8.8
MX:gladex.de [OK] 10 gladex.de. on 1.1.1.1+8.8.8.8
SOA:gladex.de [WARN] serial=2026102402 consistent on 1.1.1.1+8.8.8.8; mname=placeholder (NEEDS-INVESTOR open)
ip-drift [FAIL] [2026-10-25T02:00:13Z] CHECK-ERROR gladex.de: code=public_ip_unavailable detail=Could not determine public IPv4 address (3 candidate(s) rejected: fetch_failed) checker_exit=3 (2d22h old)
tls-cert-expiry [OK] 55d left
tls-cert-expiry-photos [OK] 58d left
investor-messages [OK] 0 unread dev=0 prod=0
investor-duty [OK] owed=0 unread=0 unreplied=0 open=0
git-tree [OK] clean
red-watch [WARN] red, failed=3, since 2026-10-13T12:17:20Z, 16m old; FAIL A3 tree clean AND in sync with origin/main (kind=is key=git) ;; FAIL A12 system-status verdict - checks in error: failed-units,loop-outcomes,DNS:gladex.de,ip-drift (kind=is key=sysverdict) ;; FAIL A30 no unit is left in systemctl --failed (kind=contains key=sys)
queue-source [OK] one queue: [0.4.376] pointer-only, 111 item line(s) frozen across 330 section(s), 203 PROGRESS bullet(s), 2 path token(s)
Select another run log from the list above. Only files matching run-YYYYMMDD-HHMMSS-N.log are readable.
App log tail — prod-8001.log (last 60 lines)
[Wed Oct 28 01:46:11 2026] 127.0.0.1:44446 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44446 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44450 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44450 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44464 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44464 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44470 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44470 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44472 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44472 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44488 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44488 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44504 Accepted [Wed Oct 28 01:46:11 2026] 127.0.0.1:44504 Closing [Wed Oct 28 01:46:11 2026] 127.0.0.1:44512 Accepted [Wed Oct 28 01:46:12 2026] 127.0.0.1:44512 Closing [Wed Oct 28 01:46:12 2026] 127.0.0.1:44514 Accepted [Wed Oct 28 01:46:12 2026] 127.0.0.1:44514 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43764 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43764 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43772 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43772 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43782 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43782 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43794 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43794 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43804 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43804 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43806 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43806 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43812 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43812 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43820 Accepted [Wed Oct 28 01:46:25 2026] 127.0.0.1:43820 Closing [Wed Oct 28 01:46:25 2026] 127.0.0.1:43832 Accepted [Wed Oct 28 01:46:26 2026] 127.0.0.1:43832 Closing [Wed Oct 28 01:46:26 2026] 127.0.0.1:43834 Accepted [Wed Oct 28 01:46:26 2026] 127.0.0.1:43834 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38120 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38120 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38134 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38134 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38136 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38136 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38144 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38144 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38148 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38148 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38164 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38164 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38168 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38168 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38180 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38180 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38194 Accepted [Wed Oct 28 01:46:45 2026] 127.0.0.1:38194 Closing [Wed Oct 28 01:46:45 2026] 127.0.0.1:38196 Accepted [Wed Oct 28 01:46:46 2026] 127.0.0.1:38196 Closing [Wed Oct 28 01:47:22 2026] 127.0.0.1:55154 Accepted
Other app logs: downloads.log
Generated 2026-10-28 00:47:22 UTC · Gladex.de