Gladex Agent Logs

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

Overview
Run logs1035 files, 55.1 MB
Latest run logrun-20261004-002616-3.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261004-002616-3.log 153 KB 2026-10-03 22:32:44
run-20261004-002927-630.log 153 B 2026-10-03 22:29:27
run-20261004-001919-629.log 153 B 2026-10-03 22:19:19
run-20261003-235543-2.log 170 KB 2026-10-03 22:16:08
run-20261004-000910-628.log 153 B 2026-10-03 22:09:11
run-20261003-235902-627.log 153 B 2026-10-03 21:59:03
run-20261003-234854-626.log 153 B 2026-10-03 21:48:55
run-20261003-232430-1.log 156 KB 2026-10-03 21:45:35
run-20261003-233845-625.log 153 B 2026-10-03 21:38:46
run-20261003-232837-624.log 153 B 2026-10-03 21:28:38
run-20261003-231829-623.log 153 B 2026-10-03 21:18:30
run-20261003-230821-622.log 190 B 2026-10-03 21:08:22
run-20261003-225813-621.log 153 B 2026-10-03 20:58:14
run-20261003-224805-620.log 153 B 2026-10-03 20:48:06
run-20261003-223757-619.log 190 B 2026-10-03 20:37:58
run-20261003-222750-618.log 153 B 2026-10-03 20:27:50
run-20261003-221742-617.log 153 B 2026-10-03 20:17:42
run-20261003-220734-616.log 153 B 2026-10-03 20:07:34
run-20261003-215725-615.log 153 B 2026-10-03 19:57:26
run-20261003-214717-614.log 153 B 2026-10-03 19:47:18
run-20261003-213709-613.log 153 B 2026-10-03 19:37:10
run-20261003-212701-612.log 153 B 2026-10-03 19:27:02
run-20261003-211653-611.log 153 B 2026-10-03 19:16:54
run-20261003-210645-610.log 153 B 2026-10-03 19:06:46
run-20261003-205637-609.log 153 B 2026-10-03 18:56:38
run-20261003-204629-608.log 153 B 2026-10-03 18:46:29
run-20261003-202328-607.log 127 KB 2026-10-03 18:36:21
run-20261003-195458-606.log 232 KB 2026-10-03 18:13:20
run-20261003-191013-605.log 227 KB 2026-10-03 17:44:50
run-20261003-184239-604.log 198 KB 2026-10-03 17:00:00
run-20261003-174814-603.log 430 KB 2026-10-03 16:32:32
run-20261003-171801-602.log 161 KB 2026-10-03 15:38:06
run-20261003-163940-601.log 314 KB 2026-10-03 15:07:52
run-20261003-161729-600.log 183 KB 2026-10-03 14:29:32
run-20261003-160722-599.log 153 B 2026-10-03 14:07:22
run-20261003-155714-598.log 153 B 2026-10-03 13:57:14
run-20261003-154706-597.log 153 B 2026-10-03 13:47:07
run-20261003-153658-596.log 153 B 2026-10-03 13:36:59
run-20261003-152649-595.log 190 B 2026-10-03 13:26:51
run-20261003-151642-594.log 153 B 2026-10-03 13:16:42
run-20261003-150634-593.log 153 B 2026-10-03 13:06:34
run-20261003-145626-592.log 190 B 2026-10-03 12:56:27
run-20261003-144617-591.log 153 B 2026-10-03 12:46:18
run-20261003-143610-590.log 153 B 2026-10-03 12:36:10
run-20261003-142602-589.log 153 B 2026-10-03 12:26:02
run-20261003-141553-588.log 153 B 2026-10-03 12:15:54
run-20261003-140545-587.log 153 B 2026-10-03 12:05:46
run-20261003-135545-586.log 153 B 2026-10-03 11:55:45
run-20261003-134536-585.log 190 B 2026-10-03 11:45:37
run-20261003-133528-584.log 153 B 2026-10-03 11:35:29
Tail — run-20261004-002616-3.log (last 200 lines)
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
The pattern is clear. Now let me see the tail of both suites (summary placement) and check the 461→463 drift:
$ cd /data/repo && echo "=== test_repo_lint.sh tail ==="; sed -n '932,1010p' tests/test_repo_lint.sh; echo "=== total lines ==="; wc -l tests/test_repo_lint.sh
=== test_repo_lint.sh tail ===
    '{'*) fail "R17b: '-- --format json' was read as a FORMAT flag (the scan does not stop at '--' the way argparse does)" ;;
    *) ok "R17b: '-- --format json' carries no JSON — the scan stops at '--', exactly as argparse does" ;;
  esac
  GLADEX_REPO_DIR="$SB/repo" "$TOOL" -- --format json >/dev/null 2>&1; dash_h_rc=$?
  assert_rc "R17c guard: argparse itself rejects that argv (unrecognized arguments -> exit 2)" 2 "$dash_h_rc"

  YAML_OUT=$(GLADEX_REPO_DIR="$SB/repo" "$SB/mutr_a" --format yaml 2>"$SB/mutr_y.err"); y_rc=$?
  YERR=$(cat "$SB/mutr_y.err" 2>/dev/null || true)
  assert_rc "R18: an argv argparse itself rejects never speaks first — the refusal still fires (exit 3)" 3 "$y_rc"
  assert_contains "R18b: the refusal stays the whole diagnosis (it names the pair)" \
    "'env:' -> 'Environment:'" "$YERR"
  assert_not_contains "R18c: no argparse usage noise leaks in (the pre-scan's own errors are swallowed, not shown)" \
    "usage:" "$YERR"
  assert_not_contains "R18d: the human path still keeps the refusal on stderr (nothing reaches stdout)" \
    "refusing to run" "$YAML_OUT"
  GLADEX_REPO_DIR="$SB/repo" "$TOOL" --format yaml >/dev/null 2>&1; y_h_rc=$?
  assert_rc "R19 guard: argparse still owns validation — an invalid choice alone exits 2 on the healthy tool" 2 "$y_h_rc"
else
  fail "R4 precondition: Environment heading found $n time(s) (want 1)"
fi

# Mutant B — the heading still EXISTS but its block is empty (a blank line
# right under it). `docstring_section` stops at the first blank line, so this
# returns "" exactly like a missing heading: "found" is not "fine", and the
# refusal must not care which of the two it is.
n=$(grep -c '^Environment:$' "$TOOL")
if [ "$n" = "1" ]; then
  sed 's/^Environment:$/Environment:\n/' "$TOOL" > "$SB/mutr_b"
  chmod +x "$SB/mutr_b"
  if awk '/^Environment:$/{getline; if ($0 == "") f=1} END{exit !f}' "$SB/mutr_b"; then
    ok "R10 precondition: the mutant's Environment heading is immediately followed by a blank line"
    MUTR_B_OUT=$(GLADEX_REPO_DIR="$SB/repo" "$SB/mutr_b" --help 2>"$SB/mutr_b.err"); rb_rc=$?
    MUTR_B_ERR=$(cat "$SB/mutr_b.err" 2>/dev/null || true)
    assert_rc "R11: an EMPTY block is the same refusal as a missing one (found-but-empty != fine)" 3 "$rb_rc"
    assert_contains "R12: that pair is named too" "'env:' -> 'Environment:'" "$MUTR_B_ERR"
    assert_not_contains "R12b: and its label still never reaches stdout" "env:" "$MUTR_B_OUT"
  else
    fail "R10 precondition: sed did not plant the blank line under the heading"
  fi
else
  fail "R10 precondition: Environment heading found $n time(s) (want 1)"
fi

# --- S: a usage error under --format json is still ONE JSON object ------------
# [0.4.61] closed every exit-3 path and its own queue named the ONE case left,
# verbatim: "The only run that still produces no object is an argv argparse
# itself rejects (invalid choice/number, missing value)". `repo-lint --format
# json --timeout abc` therefore exited 2 with usage prose on stderr and an
# EMPTY stdout, so `... | jq` met jq's own parse error and could not tell "you
# typed a bad flag" from "the tool crashed".
# The decision taken here (not merely documented) is to EMIT the object: exit
# stays 2 (argparse still owns validation), the diagnosis stays argparse's,
# and the object carries exit_code 2 so bad-argv and cannot-verify stay
# distinguishable. Human mode is untouched — S1/S14/S15 pin that, so a fix
# that hijacked the human path would go red here too.
# stdout and stderr are captured SEPARATELY throughout: run_tool MERGES them
# into $OUT, and "which stream" is half of what this section asserts.
s_run() { # [args...] -> S_OUT, S_ERR, S_RC
  S_OUT=$(GLADEX_REPO_DIR="$SB/repo" "$TOOL" "$@" 2>"$SB/s.err"); S_RC=$?
  S_ERR=$(cat "$SB/s.err" 2>/dev/null || true)
}
s_json_keys() { printf '%s' "$1" | python3 -c \
  'import json,sys; print(" ".join(sorted(json.load(sys.stdin))))' 2>/dev/null; }

# S1 GUARD — the human channel must not move: usage prose on stderr, nothing
# on stdout, exit 2. Passes before and after; this is what M16 keeps green.
s_run --nonsense
assert_rc "S1: human usage error still exits 2" 2 "$S_RC"
assert_empty "S1: ...stdout stays empty for a human run" "$S_OUT"
assert_contains "S1: ...argparse still prints its usage line (on stderr)" "usage: repo-lint" "$S_ERR"
assert_contains "S1: ...and its error line (on stderr)" "unrecognized arguments" "$S_ERR"

# S2-S8 — the defect itself, from [0.4.61]'s own queue entry.
s_run --format json --timeout abc
assert_rc "S2: a bad number with --format json still exits 2 (argparse keeps validation)" 2 "$S_RC"
assert_nonempty "S3 THE DEFECT: stdout is no longer empty for a json consumer" "$S_OUT"
OUT="$S_OUT"
json_ok "S4: ...it parses as ONE object, ok false, exit_code 2" \
  'd.get("ok") is False and d.get("exit_code") == 2'
=== total lines ===
3155 tests/test_repo_lint.sh
$ cd /data/repo && echo "=== tail of test_source_sync_check.sh ==="; tail -40 tests/test_source_sync_check.sh; echo "=== what did run 444 (97c1477) change in test_repo_lint.sh? ==="; git show 97c1477 --stat | head -20; git show 97c1477 -- tests/test_repo_lint.sh | grep -E '^[+-].*(ok "|fail ")' | head -10
=== tail of test_source_sync_check.sh ===
  ok "Z8 the sandbox reader counts DIRECTORIES (1 directory, while a glob over the same input says 2)"
else
  fail "Z8 the sandbox reader counts directories (got dirs=$z_dirs glob=$z_glob, want 1 and 2)"
fi
rm -rf "$Z_C/fixture/ssc.DIRONLY"
z_dirs=$(count_sandboxes "$Z_C/fixture" 'ssc.*')
z_glob=$(ls -d "$Z_C/fixture"/ssc.* 2>/dev/null | wc -l | tr -d ' ')
if [ "$z_dirs" -eq 0 ] && [ "$z_glob" -eq 1 ]; then
  ok "Z9 a file wearing a sandbox name is never counted as a leaked sandbox (dirs=0, glob=1)"
else
  fail "Z9 a file wearing a sandbox name is never counted as a leaked sandbox (got dirs=$z_dirs glob=$z_glob, want 0 and 1)"
fi
rm -rf "$Z_C/fixture"

# Z10 — the run's own claim, end to end: one cleanup() and every directory the
# ledger ever recorded is gone, read with the same directory reader rather
# than a glob, so the figure above (1,473 -> 1,478) has a reader inside
# the suite.
cleanup
z_final=$(printf '%s' "$SB_ALL" | grep -c '^/')
z_left=0
for d in $SB_ALL; do
  [ -n "$d" ] || continue
  if [ "$(count_sandboxes "$(dirname "$d")" "$(basename "$d")")" -ne 0 ]; then
    z_left=$((z_left + 1))
  fi
done
if [ "$z_left" -eq 0 ]; then
  ok "Z10 this run leaks nothing: all $z_final ledger directories are gone after cleanup"
else
  fail "Z10 this run leaks nothing ($z_left of $z_final ledger directories still on disk, Z1 saw $z_ledger)"
fi

# --- summary -------------------------------------------------------------------
echo ""
echo "==============================="
echo "source-sync-check suite: $PASS passed, $FAIL failed"
echo "==============================="
[ "$FAIL" -eq 0 ] || exit 1
exit 0
=== what did run 444 (97c1477) change in test_repo_lint.sh? ===
commit 97c1477037afd0699b580d21bcefdde5c0d5bd98
Author: Atlas <atlas@gladex.de>
Date:   Thu Oct 1 13:27:45 2026 +0200

    run 444: 2026-10-01T11:27Z model=opencode/mimo-v2.6-flash-free

 tests/test_repo_lint.sh | 6 ++++++
 1 file changed, 6 insertions(+)
+json_ok "G-sha-abbrev: sha_resolved is the full 40-char SHA" \
> build · ling-3.1-flash-free
$ cd /data/repo && tail -35 tests/test_repo_lint.sh; echo "=== section headers ==="; grep -n '^# --- [A-Z]' tests/test_repo_lint.sh
if [ "$real_rc" = "0" ] && [ "$mut_rc" = "0" ]; then
      ok "M26 surgical: the lockfile fence is a different line — real=$real_rc mutant=$mut_rc, exempt on both"
    else
      fail "M26 surgical 2: lockfile fence moved with the series fence (real=$real_rc mutant=$mut_rc)"
    fi
    # surgical 3: the bracketed twin in that same old series keeps its FULL
    # fence on both sides — only the bare half was ever narrowed.
    printf 'shipped in [7.1.1] already\nold plan [6.9.9] was never written\n' > "$SB/repo/PLAN.md"
    commit "m26 bracketed older-series token"
    real_msg=$(GLADEX_REPO_DIR="$SB/repo" "$TOOL" 2>&1); real_rc=$?
    mut_msg=$(GLADEX_REPO_DIR="$SB/repo" "$SB/mut26" 2>&1); mut_rc=$?
    real_sees=0; mut_sees=0
    case "$real_msg" in *"cites [6.9.9] but CHANGELOG.md has no such heading"*) real_sees=1 ;; esac
    case "$mut_msg" in *"cites [6.9.9] but CHANGELOG.md has no such heading"*) mut_sees=1 ;; esac
    if [ "$real_rc" = "1" ] && [ "$mut_rc" = "1" ] && [ "$real_sees" = "1" ] && [ "$mut_sees" = "1" ]; then
      ok "M26 surgical: the bracketed rule judged 6.9.9 BEFORE this mutation and still does (1/1, same message)"
    else
      fail "M26 surgical 3: bracketed fence moved (real rc=$real_rc seen=$real_sees / mut rc=$mut_rc seen=$mut_sees)"
    fi
    rm -f "$SB/repo/PLAN.md" "$SB/repo/package-lock.json"
    printf '# CHANGELOG\n\n## [7.1.0] first\n\n## [7.1.1] second\n' > "$SB/repo/CHANGELOG.md"
    commit "m26 cleanup"
  else
    fail "M26 mutation setup: python did not plant the mutation (missing $SB/mut26)"
  fi
else
  fail "M26 precondition: current-series test found $n time(s) (want 1)"
fi

# ---------------------------------------------------------------------------
echo "==============================="
echo "repo-lint suite: $PASS passed, $FAIL failed"
echo "==============================="
[ "$FAIL" -eq 0 ] || exit 1
exit 0
=== section headers ===
247:# --- Go module fixture: a real (tiny, stdlib-only) module in its own repo ----
316:# --- A: clean repo lints green, counts every file exactly once ---------------
340:# --- B: each language's parse error is caught, with path + line --------------
405:# --- C: the 219fd8f incident, both directions (blob, never the worktree) -----
436:# --- G: exit-code contract for args + environment ----------------------------
467:# --- H: json contract (exact key set, rc == exit_code, sha matches git) ------
478:# --- J: /data/tools symlink -> default repo resolves through realpath --------
502:# --- K: a lint that cannot run is exit 3, never a silent pass ----------------
530:# --- N: the Go module COMPILE gate (the 395b9b5 defect class) ----------------
628:# --- O: the CHANGELOG version-identity gate (the 0.4.49 duplicate class) -----
710:# --- P: ONE exit-code contract (docstring is the source, --help renders it) ---
757:# --- Q: EVERY epilog section comes from the docstring, never from a copy ------
813:# --- R: the epilog REFUSES to build rather than render a label over nothing ----
975:# --- S: a usage error under --format json is still ONE JSON object ------------
1095:# --- L: live repo, read-only, structural / content-addressed only ------------
1157:# --- T: the citation rule — prose may not cite a version nobody wrote --------
1404:# --- U: the human CLOSING line names what actually failed --------------------
1609:# --- V: the NUMBER in the closing line counts files, not failures -------------
1693:# --- W: a lang with NO linter wired is "cannot verify", never a crash ---------
1858:# --- X: a MIXED run — cannot-verify must not swallow the verified failure ------
1949:# --- M: mutations (copies only; precondition -> divergence -> surgical) -------
> build · ling-3.1-flash-free

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)
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41846 Accepted
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41846 Closing
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41858 Accepted
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41858 Closing
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41862 Accepted
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41862 Closing
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41870 Accepted
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41870 Closing
[Sun Oct  4 00:15:56 2026] 127.0.0.1:41884 Accepted
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41884 Closing
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41900 Accepted
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41900 Closing
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41904 Accepted
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41904 Closing
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41916 Accepted
[Sun Oct  4 00:15:57 2026] 127.0.0.1:41916 Closing
[Sun Oct  4 00:24:10 2026] 127.0.0.1:34040 Accepted
[Sun Oct  4 00:24:10 2026] 127.0.0.1:34040 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41794 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41794 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41800 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41800 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41804 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41804 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41814 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41814 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41830 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41830 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41832 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41832 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41834 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41834 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41842 Accepted
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41842 Closing
[Sun Oct  4 00:30:10 2026] 127.0.0.1:41854 Accepted
[Sun Oct  4 00:30:11 2026] 127.0.0.1:41854 Closing
[Sun Oct  4 00:30:11 2026] 127.0.0.1:41870 Accepted
[Sun Oct  4 00:30:11 2026] 127.0.0.1:41870 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44768 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44768 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44782 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44782 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44792 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44792 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44796 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44796 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44812 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44812 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44820 Accepted
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44820 Closing
[Sun Oct  4 00:30:56 2026] 127.0.0.1:44830 Accepted
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44830 Closing
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44832 Accepted
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44832 Closing
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44848 Accepted
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44848 Closing
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44864 Accepted
[Sun Oct  4 00:30:57 2026] 127.0.0.1:44864 Closing
[Sun Oct  4 00:34:39 2026] 127.0.0.1:45362 Accepted

Generated 2026-10-03 22:34:39 UTC · Gladex.de