Gladex Agent Logs

Agent run logs & app logs · env: prod · LAN-only investor surface

Overview
Run logs1628 files, 119 MB
Latest run logrun-20261015-070843-1162.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261015-070843-1162.log 800 KB 2026-10-15 06:11:32
run-20261015-054521-1161.log 416 KB 2026-10-15 04:58:33
run-20261015-033336-1160.log 684 KB 2026-10-15 03:35:11
run-20261015-020624-1159.log 212 KB 2026-10-15 01:23:26
run-20261015-015612-1158.log 154 B 2026-10-14 23:56:13
run-20261015-014600-1157.log 191 B 2026-10-14 23:46:01
run-20261015-013549-1156.log 191 B 2026-10-14 23:35:50
run-20261015-012537-1155.log 154 B 2026-10-14 23:25:38
run-20261015-011525-1154.log 191 B 2026-10-14 23:15:26
run-20261015-010513-1153.log 154 B 2026-10-14 23:05:14
run-20261015-005502-1152.log 154 B 2026-10-14 22:55:03
run-20261015-004450-1151.log 154 B 2026-10-14 22:44:51
run-20261015-003439-1150.log 154 B 2026-10-14 22:34:40
run-20261015-002427-1149.log 154 B 2026-10-14 22:24:28
run-20261015-001416-1148.log 154 B 2026-10-14 22:14:17
run-20261015-000405-1147.log 191 B 2026-10-14 22:04:06
run-20261014-235353-1146.log 191 B 2026-10-14 21:53:54
run-20261014-234342-1145.log 191 B 2026-10-14 21:43:43
run-20261014-233330-1144.log 154 B 2026-10-14 21:33:31
run-20261014-232318-1143.log 154 B 2026-10-14 21:23:19
run-20261014-231307-1142.log 154 B 2026-10-14 21:13:08
run-20261014-230255-1141.log 154 B 2026-10-14 21:02:56
run-20261014-225244-1140.log 154 B 2026-10-14 20:52:45
run-20261014-222900-1139.log 142 KB 2026-10-14 20:42:33
run-20261014-212813-1138.log 571 KB 2026-10-14 20:18:50
run-20261014-201639-1137.log 370 KB 2026-10-14 19:18:02
run-20261014-174154-1136.log 835 KB 2026-10-14 18:06:28
run-20261014-170319-1135.log 320 KB 2026-10-14 15:31:41
run-20261014-161418-1134.log 270 KB 2026-10-14 14:53:09
run-20261014-150444-1133.log 323 KB 2026-10-14 14:04:07
run-20261014-133301-1132.log 340 KB 2026-10-14 12:54:34
run-20261014-124552-1131.log 194 KB 2026-10-14 11:22:49
run-20261014-103913-1130.log 525 KB 2026-10-14 10:35:42
run-20261014-082946-1129.log 630 KB 2026-10-14 08:29:02
run-20261014-061713-1128.log 454 KB 2026-10-14 06:19:36
run-20261014-052042-1127.log 96 KB 2026-10-14 04:07:02
run-20261014-044319-1126.log 200 KB 2026-10-14 03:10:30
run-20261014-032502-1125.log 531 KB 2026-10-14 02:33:08
run-20261014-024815-1124.log 214 KB 2026-10-14 01:14:52
run-20261014-020537-1123.log 283 KB 2026-10-14 00:38:05
run-20261014-015526-1122.log 154 B 2026-10-13 23:55:27
run-20261014-014514-1121.log 191 B 2026-10-13 23:45:15
run-20261014-013503-1120.log 191 B 2026-10-13 23:35:04
run-20261014-012452-1119.log 154 B 2026-10-13 23:24:53
run-20261014-011441-1118.log 154 B 2026-10-13 23:14:42
run-20261014-010430-1117.log 154 B 2026-10-13 23:04:31
run-20261014-005419-1116.log 154 B 2026-10-13 22:54:20
run-20261014-004409-1115.log 154 B 2026-10-13 22:44:09
run-20261014-003358-1114.log 154 B 2026-10-13 22:33:58
run-20261014-002347-1113.log 154 B 2026-10-13 22:23:48
Tail — run-20261015-070843-1162.log (last 200 lines)
    && ok "11b: rc_class reads the residual condition as 'other', not as a code" \
    || bad  "11b: rc_class reads the residual condition as 'other', not as a code"

echo "=== 12. live: the real module, through the tool ==="
if command -v go >/dev/null 2>&1 && [ -f "$REPO/app/src/go/go.mod" ]; then
    GO_MODE=pass; STUBDIR="$STUB_REAL"; GO_TMO=180
    OUT=$(run_status "$REPO")
    GO_TMO=3; STUBDIR="$STUB"
    printf '%s' "$(item_field "$OUT" detail)" | grep -q '^passing' \
        && ok "live: real go test ./... on the real repo -> passing" \
        || bad "live: real go test ./... on the real repo -> passing (got '$(item_field "$OUT" detail)')"
    RC=$(run_exit "$REPO")
    [ "$RC" = "0" ] && ok "live: tool exits 0 on the real repo" \
                    || bad "live: tool exits 0 on the real repo (got $RC)"
else
    skip "go or the real module absent"
fi

echo "=== 13. mutation checks: the assertions above must be load-bearing ==="
# Each mutant is planted on a COPY (the real tool is never edited), asserted to
# have landed EXACTLY once, `bash -n`-validated (so the red can only come from
# behaviour), then run through the one scenario it targets. The mutant must
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n -A30 '^run_status()' tests/test_system_status_go_tests.sh | head -50; grep -n 'run_exit()' tests/test_system_status_go_tests.sh
185:run_status() { _run "$1" json 2>/dev/null || true; }
186-run_exit()   { _run "$1" json >/dev/null 2>&1; echo $?; }
187-
188-item_field() {
189-    printf '%s' "$1" \
190-        | grep -o '{"name":"go-tests","status":"[^"]*","detail":"[^"]*"}' \
191-        | head -1 | grep -o "\"$2\":\"[^\"]*\"" | head -1 | cut -d'"' -f4
192-}
193-
194-A="$SANDBOX/repo-a"; mkrepo "$A" 1   # has a go module
195-B="$SANDBOX/repo-b"; mkrepo "$B" 0   # no app/src/go at all
196-
197-echo "=== 1. baseline: go exits 0 -> ok 'passing', tool exits 0 ==="
198-GO_MODE=pass; STUBDIR="$STUB"
199-OUT=$(run_status "$A")
200-[ -n "$OUT" ] && ok "tool emitted JSON" || bad "tool emitted JSON (empty output)"
201-[ "$(item_field "$OUT" status)" = "ok" ] \
202-    && ok "status ok when go exits 0" \
203-    || bad "status ok when go exits 0 (got '$(item_field "$OUT" status)')"
204-[ "$(item_field "$OUT" detail)" = "passing (worktree)" ] \
205-    && ok "detail is 'passing (worktree)' on a clean committed tree" \
206-    || bad "detail is 'passing (worktree)' on a clean committed tree (got '$(item_field "$OUT" detail)')"
207-RC=$(run_exit "$A")
208-[ "$RC" = "0" ] && ok "baseline exits 0" || bad "baseline exits 0 (got $RC)"
209-# JSON must stay parseable whatever the detail is.
210-printf '%s' "$OUT" | python3 -c "import json,sys; json.load(sys.stdin)" 2>/dev/null \
211-    && ok "output is valid JSON" || bad "output is valid JSON"
212-
213-echo "=== 2. go exits 1 with a FAIL line -> error 'failing: <pkg>', exit 1 ==="
214-GO_MODE=fail
215-OUT=$(run_status "$A")
186:run_exit()   { _run "$1" json >/dev/null 2>&1; echo $?; }
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n -B2 -A40 '^_run()' tests/test_system_status_go_tests.sh | head -60
176-STUBDIR="$STUB"
177-
178:_run() {  # _run <repo-dir> <format>
179-    env PATH="$STUBDIR:$PATH" \
180-        GLADEX_DEV_DB="$SANDBOX/no.db" GLADEX_PROD_DB="$SANDBOX/no.db" \
181-        GLADEX_REPO_DIR="$1" \
182-        STUB_GO_MODE="$GO_MODE" GLADEX_GO_BIN="$GO_BIN" GLADEX_GO_TIMEOUT="$GO_TMO" \
183-        "$TOOL" --format "$2"
184-}
185-run_status() { _run "$1" json 2>/dev/null || true; }
186-run_exit()   { _run "$1" json >/dev/null 2>&1; echo $?; }
187-
188-item_field() {
189-    printf '%s' "$1" \
190-        | grep -o '{"name":"go-tests","status":"[^"]*","detail":"[^"]*"}' \
191-        | head -1 | grep -o "\"$2\":\"[^\"]*\"" | head -1 | cut -d'"' -f4
192-}
193-
194-A="$SANDBOX/repo-a"; mkrepo "$A" 1   # has a go module
195-B="$SANDBOX/repo-b"; mkrepo "$B" 0   # no app/src/go at all
196-
197-echo "=== 1. baseline: go exits 0 -> ok 'passing', tool exits 0 ==="
198-GO_MODE=pass; STUBDIR="$STUB"
199-OUT=$(run_status "$A")
200-[ -n "$OUT" ] && ok "tool emitted JSON" || bad "tool emitted JSON (empty output)"
201-[ "$(item_field "$OUT" status)" = "ok" ] \
202-    && ok "status ok when go exits 0" \
203-    || bad "status ok when go exits 0 (got '$(item_field "$OUT" status)')"
204-[ "$(item_field "$OUT" detail)" = "passing (worktree)" ] \
205-    && ok "detail is 'passing (worktree)' on a clean committed tree" \
206-    || bad "detail is 'passing (worktree)' on a clean committed tree (got '$(item_field "$OUT" detail)')"
207-RC=$(run_exit "$A")
208-[ "$RC" = "0" ] && ok "baseline exits 0" || bad "baseline exits 0 (got $RC)"
209-# JSON must stay parseable whatever the detail is.
210-printf '%s' "$OUT" | python3 -c "import json,sys; json.load(sys.stdin)" 2>/dev/null \
211-    && ok "output is valid JSON" || bad "output is valid JSON"
212-
213-echo "=== 2. go exits 1 with a FAIL line -> error 'failing: <pkg>', exit 1 ==="
214-GO_MODE=fail
215-OUT=$(run_status "$A")
216-[ "$(item_field "$OUT" status)" = "error" ] \
217-    && ok "test failure is an error" \
218-    || bad "test failure is an error (got '$(item_field "$OUT" status)')"
> build · mimo-v2.6-flash-free
Reproducing the suite's exact env against both copies:
$ cd /data/repo && STUB=$(ls -d tests/stubs* 2>/dev/null | head -1); grep -n 'STUB=' tests/test_system_status_go_tests.sh | head -3; grep -n 'STUB_REAL=' tests/test_system_status_go_tests.sh | head -2
82:STUB="$SANDBOX/bin"
149:STUB_REAL="$SANDBOX/bin-real"
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n 'SANDBOX=' tests/test_system_status_go_tests.sh | head -3; grep -n 'trap' tests/test_system_status_go_tests.sh | head -3; sed -n '76,160p' tests/test_system_status_go_tests.sh
78:SANDBOX="$(mktemp -d /tmp/ssg-test.XXXXXX)" || exit 1
79:trap 'rm -rf "$SANDBOX"' EXIT INT TERM
[ -f "$TOOL" ] || { echo "SKIP: tool not found: $TOOL"; exit 0; }

SANDBOX="$(mktemp -d /tmp/ssg-test.XXXXXX)" || exit 1
trap 'rm -rf "$SANDBOX"' EXIT INT TERM

# ---------------------------------------------------------------- stubs -----
STUB="$SANDBOX/bin"
mkdir -p "$STUB"
printf '#!/bin/sh\necho active\n'  > "$STUB/systemctl"
printf '#!/bin/sh\nprintf 200\n'   > "$STUB/curl"
printf '#!/bin/sh\necho "notAfter=Dec 22 12:00:00 2026 GMT"\n' > "$STUB/openssl"
# dig: every check green, so only go-tests can move the verdict. MX/SOA are the
# live-accurate fixtures from test_system_status_mx_soa.sh.
cat > "$STUB/dig" <<'STUBDIG'
#!/bin/sh
rtype=""
for a in "$@"; do case "$a" in @*|+*) ;; [A-Z]*) rtype="$a" ;; esac; done
case "$rtype" in
  A)   echo "77.90.15.49" ;;
  MX)  echo "10 gladex.de." ;;
  SOA) echo "a.misconfigured.dns.server.invalid. hostmaster.gladex.de. 2026092305 10800 3600 604800 3600" ;;
  *)   : ;;
esac
STUBDIG
# Scenario go: STUB_GO_MODE selects the exit code and the stdout shape.
cat > "$STUB/go" <<'STUBGO'
#!/bin/sh
case "${STUB_GO_MODE:-pass}" in
  pass)
    printf '%s\n' 'ok  	probe/cmd/gladex/commands	0.1s'; exit 0 ;;
  fail)
    printf '%s\n' '--- FAIL: TestBoom (0.00s)' '    x_test.go:3: boom' \
                 'FAIL' 'FAIL	probe/cmd/gladex/commands	0.1s'; exit 1 ;;
  # THE D2 CASE: a package result line was already flushed when the run died.
  timeout-ok)
    printf '%s\n' 'ok  	probe/cmd/gladex/commands	0.1s'; exit 124 ;;
  # Same shape, but killed by the REAL `timeout` (only reached post-fix,
  # where the budget is a hook — see the guard in section 4).
  slow)
    printf '%s\n' 'ok  	probe/cmd/gladex/commands	0.1s'
    sleep 30; exit 0 ;;
  # D3: the binary exists but cannot run.
  rc127) exit 127 ;;
  # D3 variant: exits 1 (go's generic failure code) WITHOUT ever reporting a
  # package — go never ran our tests, so this must not become "failing: ...".
  rc1-silent) exit 1 ;;
  rc3)   printf '%s\n' 'ok  	probe/cmd/gladex/commands	0.1s'; exit 3 ;;
esac
STUBGO
# The go-compile row (CHANGELOG 0.4.39) shells out to repo-lint on every run.
# This suite pins the go-tests row, not that one, so the child is stubbed:
# without this, every run here would lint a real tree - and with a stub `go`
# on PATH it would also "compile" it with that stub, which is worse than not
# running it at all.
cat > "$STUB/repo-lint" <<'STUBRL'
#!/bin/sh
echo '{"tool":"repo-lint","requested_sha":"HEAD","sha_resolved":"1111111111111111111111111111111111111111","error":null,"go_compile":{"attempted":true,"go_mod":"app/src/go/go.mod","files":1,"ok":true,"reason":null,"summary":"1 module file(s) compile clean (0.0s)","duration_s":0.0},"ok":true,"exit_code":0}'
exit 0
STUBRL
export GLADEX_REPO_LINT_BIN="$STUB/repo-lint"
# The promote-gates row shells out to promote-dev-to-prod on every run. This
# suite pins the go-tests verdict, not that row, so the child points at an
# ABSENT path: without this, every run here would probe the live /opt/startup
# trees (read-only, but not hermetic and slow). Its own suite:
# tests/test_system_status_promote_gates.sh
export GLADEX_PROMOTE_BIN="$STUB/promote-dev-to-prod-not-under-test"
# The cloud row (Nextcloud/Immich/docker, [0.4.70]) is not under test here:
# pointing it at an absent path keeps this suite off the host's live
# containers, so a restarting container cannot flip the overall verdict.
export GLADEX_CLOUD_DOCKER_BIN="$STUB/docker-not-under-test"
chmod +x "$STUB"/*

# A stub dir with everything EXCEPT `go`, so sections 7/10 reach the real one.
STUB_REAL="$SANDBOX/bin-real"
mkdir -p "$STUB_REAL"
for f in systemctl curl dig openssl; do cp "$STUB/$f" "$STUB_REAL/$f"; done

# ------------------------------------------------------------- fixtures ----
# mkrepo <dir> <with-go-module:1|0> — a committed git work tree, so git-tree is
# clean and `app/src/go` holds no uncommitted files (detail stays exactly
# "passing"). With 0 the app/src/go tree is ABSENT entirely, which is the
# "this repo has no Go module" case, not merely "an empty go dir".
mkrepo() {
    local dir="$1" withmod="$2"
    rm -rf "$dir"; mkdir -p "$dir"
> build · mimo-v2.6-flash-free
Understood — the live `go_tests` failure is the `queue-source` row (same expected pre-PROGRESS red as `queue-source-check` rc 1: `[0.4.355]` not yet named in `agent-logs/PROGRESS.md`; `failed-units` is neutralized by the suite's `systemctl` stub). It should clear once the PROGRESS entry is written. The out-of-repo HEAD copy hid that row, hence its passing control.

Waiting for the batch to finish:

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)
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47614 Accepted
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47614 Closing
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47620 Accepted
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47620 Closing
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47626 Accepted
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47626 Closing
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47632 Accepted
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47632 Closing
[Thu Oct 15 08:01:31 2026] 127.0.0.1:47644 Accepted
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47644 Closing
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47656 Accepted
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47656 Closing
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47670 Accepted
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47670 Closing
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47678 Accepted
[Thu Oct 15 08:01:32 2026] 127.0.0.1:47678 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39548 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39548 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39554 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39554 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39562 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39562 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39572 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39572 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39578 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39578 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39586 Accepted
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39586 Closing
[Thu Oct 15 08:07:29 2026] 127.0.0.1:39596 Accepted
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39596 Closing
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39606 Accepted
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39606 Closing
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39610 Accepted
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39610 Closing
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39618 Accepted
[Thu Oct 15 08:07:30 2026] 127.0.0.1:39618 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39908 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39908 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39920 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39920 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39924 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39924 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39938 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39938 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39952 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39952 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39966 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39966 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39978 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39978 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39984 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39984 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39996 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:39996 Closing
[Thu Oct 15 08:08:47 2026] 127.0.0.1:40010 Accepted
[Thu Oct 15 08:08:47 2026] 127.0.0.1:40010 Closing
[Thu Oct 15 08:11:25 2026] 127.0.0.1:55068 Accepted
[Thu Oct 15 08:11:25 2026] 127.0.0.1:55068 Closing
[Thu Oct 15 08:15:16 2026] 127.0.0.1:44778 Accepted

Other app logs: downloads.log

Generated 2026-10-15 06:15:16 UTC · Gladex.de