Gladex Agent Logs

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

Overview
Run logs1052 files, 55.6 MB
Latest run logrun-20261004-020141-11.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261004-020141-11.log 187 KB 2026-10-04 00:25:24
run-20261004-020042-639.log 249 KB 2026-10-04 00:23:45
run-20261004-015133-10.log 187 B 2026-10-03 23:51:33
run-20261004-015034-638.log 153 B 2026-10-03 23:50:34
run-20261004-014125-9.log 150 B 2026-10-03 23:41:25
run-20261004-014026-637.log 153 B 2026-10-03 23:40:26
run-20261004-013116-8.log 150 B 2026-10-03 23:31:16
run-20261004-013017-636.log 190 B 2026-10-03 23:30:17
run-20261004-012108-7.log 150 B 2026-10-03 23:21:08
run-20261004-012009-635.log 153 B 2026-10-03 23:20:09
run-20261004-011100-6.log 150 B 2026-10-03 23:11:00
run-20261004-011001-634.log 153 B 2026-10-03 23:10:01
run-20261004-010051-5.log 186 B 2026-10-03 23:00:52
run-20261004-005953-633.log 153 B 2026-10-03 22:59:53
run-20261004-005043-4.log 150 B 2026-10-03 22:50:44
run-20261004-004945-632.log 153 B 2026-10-03 22:49:45
run-20261004-002616-3.log 172 KB 2026-10-03 22:40:36
run-20261004-003936-631.log 190 B 2026-10-03 22:39:36
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
Tail — run-20261004-020141-11.log (last 200 lines)
+  fail "Z1 the ledger holds this run's whole history (got $z_ledger entries, want $((z_ns_calls + 2)))"
+fi
+z_dupes=$(printf '%s' "$SB_ALL" | grep '^/' | sort | uniq -d | wc -l)
+assert_rc "Z2 no sandbox is recorded twice" 0 "$z_dupes"
+if [ -d "$Z_A" ] && [ -d "$Z_B" ]; then
+  ok "Z3 both fresh sandboxes exist on disk before cleanup"
+else
+  fail "Z3 both fresh sandboxes exist on disk before cleanup"
+fi
+case "$SB_ALL" in
+  *"$Z_A"*"$Z_B"*) ok "Z4 both are in the ledger, in creation order" ;;
+  *)               fail "Z4 both are in the ledger" ;;
+esac
+cleanup
+if [ ! -e "$Z_A" ] && [ ! -e "$Z_B" ]; then
+  ok "Z5 cleanup() removed EVERY sandbox the ledger recorded, not only the last one per variable"
+else
+  fail "Z5 cleanup() left $([ -e "$Z_A" ] && printf '%s ' "$Z_A")$([ -e "$Z_B" ] && printf '%s' "$Z_B") behind"
+fi
+new_sandbox; Z_O1="$SB"
+new_sandbox; Z_O2="$SB"
+# The pre-fix cleanup shape reproduced on purpose — the classic one-liner
+# this file shipped (`rm -rf "$SB"` and nothing else): applied to a run
+# that created more than one sandbox, it removes only the last $SB and
+# leaves every earlier one standing, which is the whole defect class.
+z_prefix_cleanup() { [ -n "$SB" ] && rm -rf "$SB"; }
+z_prefix_cleanup
+if [ ! -d "$Z_O1" ] && [ -d "$Z_O2" ]; then
+  ok "Z6 the one-line cleanup leaves the first sandbox behind - the N-minus-one leak, reproduced"
+else
+  fail "Z6 the one-line cleanup does not reproduce the N-minus-one leak"
+fi
+rm -rf "$Z_O2"
+new_sandbox; Z_C="$SB"
+
+# Z7 — (131)'s second correction, made mechanical instead of prose: a
+# ledger appended only inside a factory is invisible to a future second
+# factory. Both counts are derived from THIS file, and neither reader
+# can count its own source: comment lines are dropped first, and the
+# recorder pattern is written with an escaped dollar in its assignment
+# so the pattern's own line cannot match itself.
+z_mk_pat='mk''temp'
+z_rec_pat='SB_ALL="\${SB_ALL}'
+z_factories=$(grep -v '^[[:space:]]*#' "$SELF" | grep -c "$z_mk_pat")
+z_recorders=$(grep -v '^[[:space:]]*#' "$SELF" | grep -c "$z_rec_pat")
+if [ "$z_factories" -ge 1 ] && [ "$z_factories" -eq "$z_recorders" ]; then
+  ok "Z7 every sandbox factory in this file records into the ledger ($z_factories factories / $z_recorders recorders - a future second factory cannot hide)"
+else
+  fail "Z7 every sandbox factory in this file records into the ledger (got $z_factories factories / $z_recorders recorders)"
+fi
+
+# Z8/Z9 — (131)'s first correction: the leak figure has to count
+# DIRECTORIES. The real reader overcounts this suite's own prefix
+# whenever a stray file shares it; one directory and one file with the
+# sandbox prefix are put side by side inside a live sandbox, so both
+# readers see identical input.
+mkdir -p "$Z_C/fixture/bs.DIRONLY"
+printf 'not a sandbox\n' > "$Z_C/fixture/bs.FILEONLY"
+z_dirs=$(count_sandboxes "$Z_C/fixture" 'bs.*')
+z_glob=$(ls -d "$Z_C/fixture"/bs.* 2>/dev/null | wc -l | tr -d ' ')
+if [ "$z_dirs" -eq 1 ] && [ "$z_glob" -eq 2 ]; then
+  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/bs.DIRONLY"
+z_dirs=$(count_sandboxes "$Z_C/fixture" 'bs.*')
+z_glob=$(ls -d "$Z_C/fixture"/bs.* 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 near-zero figure above has a reader inside
+# the suite instead of being an assumption about the EXIT trap.
+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 "budget-show suite: $PASS passed, $FAIL failed"

> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
All four edits in. Now verify — syntax check, then the full run with leak measurement:
$ cd /data/repo; bash -n tests/test_budget_show.sh && echo "SYNTAX OK"; before_d=$(find /tmp/opencode -maxdepth 1 -name 'bs.*' -type d | wc -l); echo "before bs dirs=$before_d"; timeout 120 bash tests/test_budget_show.sh > /tmp/opencode/bs-fixed.log 2>&1; rc=$?; echo "rc=$rc"; tail -3 /tmp/opencode/bs-fixed.log; echo "PASS:Z=$(grep -c '^PASS: Z' /tmp/opencode/bs-fixed.log) FAIL=$(grep -c '^FAIL:' /tmp/opencode/bs-fixed.log)"; after_d=$(find /tmp/opencode -maxdepth 1 -name 'bs.*' -type d | wc -l); echo "after bs dirs=$after_d (leak delta $((after_d-before_d)))"; grep '^PASS: Z1 ' /tmp/opencode/bs-fixed.log; grep '^PASS: Z7 ' /tmp/opencode/bs-fixed.log; grep '^PASS: Z10 ' /tmp/opencode/bs-fixed.log
SYNTAX OK
before bs dirs=0
rc=1
===============================
budget-show suite: 88 passed, 1 failed
===============================
PASS:Z=9 FAIL=1
after bs dirs=0 (leak delta 0)
PASS: Z1 the ledger holds this run's whole history (3 entries = 1 new_sandbox section calls + these 2)
PASS: Z7 every sandbox factory in this file records into the ledger (1 factories / 1 recorders - a future second factory cannot hide)
PASS: Z10 this run leaks nothing: all 6 ledger directories are gone after cleanup
> build · ling-3.1-flash-free
One Z control failed — let me see which:
$ grep '^FAIL:' /tmp/opencode/bs-fixed.log
FAIL: Z6 the one-line cleanup does not reproduce the N-minus-one leak
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
Z6's condition was copied verbatim from the two-factory shape — wrong for this suite. Here both sandboxes come from the *same* factory/variable, so the pre-fix one-liner removes the **last** `$SB` (Z_O2) and leaves the **first** (Z_O1) standing. The assertion must be inverted:
← Edit repo/tests/test_budget_show.sh
Index: repo/tests/test_budget_show.sh
===================================================================
--- repo/tests/test_budget_show.sh
+++ repo/tests/test_budget_show.sh
@@ -516,12 +516,12 @@
 # that created more than one sandbox, it removes only the last $SB and
 # leaves every earlier one standing, which is the whole defect class.
 z_prefix_cleanup() { [ -n "$SB" ] && rm -rf "$SB"; }
 z_prefix_cleanup
-if [ ! -d "$Z_O1" ] && [ -d "$Z_O2" ]; then
+if [ -d "$Z_O1" ] && [ ! -d "$Z_O2" ]; then
   ok "Z6 the one-line cleanup leaves the first sandbox behind - the N-minus-one leak, reproduced"
 else
-  fail "Z6 the one-line cleanup does not reproduce the N-minus-one leak"
+  fail "Z6 the one-line cleanup does not reproduce the N-minus-one leak (Z_O1=$([ -d "$Z_O1" ] && echo present || echo gone) Z_O2=$([ -d "$Z_O2" ] && echo present || echo gone))"
 fi
 rm -rf "$Z_O2"
 new_sandbox; Z_C="$SB"
 

> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
$ cd /data/repo; bash -n tests/test_budget_show.sh && echo "SYNTAX OK"; timeout 120 bash tests/test_budget_show.sh > /tmp/opencode/bs-fixed2.log 2>&1; rc=$?; echo "rc=$rc"; tail -3 /tmp/opencode/bs-fixed2.log; echo "PASS:Z=$(grep -c '^PASS: Z' /tmp/opencode/bs-fixed2.log) FAIL=$(grep -c '^FAIL:' /tmp/opencode/bs-fixed2.log)"; echo "bs dirs after: $(find /tmp/opencode -maxdepth 1 -name 'bs.*' -type d | wc -l)"
SYNTAX OK
rc=0
===============================
budget-show suite: 89 passed, 0 failed
===============================
PASS:Z=10 FAIL=0
bs dirs after: 0
> build · ling-3.1-flash-free
**89 passed / 0 failed, 10/10 Z controls green, zero leak.** Now the mutant control — out-of-tree, cleanup reverted to the pre-fix one-liner, expecting exactly Z5+Z10 red
$ rm -rf /tmp/opencode/bsmutant; mkdir -p /tmp/opencode/bsmutant/tests /tmp/opencode/bsmutant/scratch; cp /data/repo/tests/test_budget_show.sh /tmp/opencode/bsmutant/tests/test_budget_show.sh; ln -sfn /data/repo/tools /tmp/opencode/bsmutant/tools; python3 - <<'EOF'
p='/tmp/opencode/bsmutant/tests/test_budget_show.sh'
s=open(p).read()
fixed='''cleanup() {
  local _d
  for _d in $SB_ALL; do
    [ -n "$_d" ] && rm -rf "$_d"
  done
  [ -n "$SB" ] && rm -rf "$SB"
  return 0
}'''
old='cleanup() { [ -n "$SB" ] && rm -rf "$SB"; }'
assert s.count(fixed)==1, "fixed cleanup not found exactly once"
s=s.replace(fixed, old)
open(p,'w').write(s)
print("mutant: cleanup reverted to the pre-fix one-liner")
EOF
bash -n /tmp/opencode/bsmutant/tests/test_budget_show.sh && echo "mutant syntax OK"; md5sum /tmp/opencode/bsmutant/tests/test_budget_show.sh /data/repo/tests/test_budget_show.sh; TMPDIR=/tmp/opencode/bsmutant/scratch timeout 120 bash /tmp/opencode/bsmutant/tests/test_budget_show.sh > /tmp/opencode/bsmutant/mutant.log 2>&1; rc=$?; echo "mutant rc=$rc"; tail -3 /tmp/opencode/bsmutant/mutant.log; echo "=== FAIL lines ==="; grep '^FAIL:' /tmp/opencode/bsmutant/mutant.log; echo "PASS:Z=$(grep -c '^PASS: Z' /tmp/opencode/bsmutant/mutant.log)"; echo "leaked dirs in mutant scratch: $(find /tmp/opencode/bsmutant/scratch -maxdepth 2 -name 'bs.*' -type d | wc -l)"
mutant: cleanup reverted to the pre-fix one-liner
mutant syntax OK
75f22f62162508e00e18a04929360558  /tmp/opencode/bsmutant/tests/test_budget_show.sh
2bbf2e7b98d023a97f3307b31dfeb8bb  /data/repo/tests/test_budget_show.sh
mutant rc=1
===============================
budget-show suite: 87 passed, 2 failed
===============================
=== FAIL lines ===
FAIL: Z5 cleanup() left /tmp/opencode/bsmutant/scratch/opencode/bs.uipKjt  behind
FAIL: Z10 this run leaks nothing (3 of 6 ledger directories still on disk, Z1 saw 3)
PASS:Z=8
leaked dirs in mutant scratch: 3
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
> 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 02:15:57 2026] 127.0.0.1:49090 Accepted
[Sun Oct  4 02:15:57 2026] 127.0.0.1:49090 Closing
[Sun Oct  4 02:15:57 2026] 127.0.0.1:49100 Accepted
[Sun Oct  4 02:15:57 2026] 127.0.0.1:49100 Closing
[Sun Oct  4 02:15:57 2026] 127.0.0.1:49102 Accepted
[Sun Oct  4 02:15:57 2026] 127.0.0.1:49102 Closing
[Sun Oct  4 02:17:38 2026] 127.0.0.1:55206 Accepted
[Sun Oct  4 02:17:38 2026] 127.0.0.1:55206 Closed without sending a request; it was probably just an unused speculative preconnection
[Sun Oct  4 02:17:38 2026] 127.0.0.1:55206 Closing
[Sun Oct  4 02:17:39 2026] 127.0.0.1:55218 Accepted
[Sun Oct  4 02:17:39 2026] 127.0.0.1:55218 Closed without sending a request; it was probably just an unused speculative preconnection
[Sun Oct  4 02:17:39 2026] 127.0.0.1:55218 Closing
[Sun Oct  4 02:18:14 2026] 127.0.0.1:56072 Accepted
[Sun Oct  4 02:18:14 2026] 127.0.0.1:56072 Closed without sending a request; it was probably just an unused speculative preconnection
[Sun Oct  4 02:18:14 2026] 127.0.0.1:56072 Closing
[Sun Oct  4 02:18:16 2026] 127.0.0.1:54660 Accepted
[Sun Oct  4 02:18:16 2026] 127.0.0.1:54660 Closed without sending a request; it was probably just an unused speculative preconnection
[Sun Oct  4 02:18:16 2026] 127.0.0.1:54660 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58736 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58736 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58744 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58744 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58746 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58746 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58752 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58752 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58762 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58762 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58778 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58778 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58782 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58782 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58788 Accepted
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58788 Closing
[Sun Oct  4 02:24:02 2026] 127.0.0.1:58800 Accepted
[Sun Oct  4 02:24:03 2026] 127.0.0.1:58800 Closing
[Sun Oct  4 02:24:03 2026] 127.0.0.1:58808 Accepted
[Sun Oct  4 02:24:03 2026] 127.0.0.1:58808 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35014 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35014 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35028 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35028 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35038 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35038 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35040 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35040 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35056 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35056 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35068 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35068 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35080 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35080 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35096 Accepted
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35096 Closing
[Sun Oct  4 02:24:49 2026] 127.0.0.1:35104 Accepted
[Sun Oct  4 02:24:50 2026] 127.0.0.1:35104 Closing
[Sun Oct  4 02:24:50 2026] 127.0.0.1:35118 Accepted
[Sun Oct  4 02:24:50 2026] 127.0.0.1:35118 Closing
[Sun Oct  4 02:25:29 2026] 127.0.0.1:38782 Accepted

Generated 2026-10-04 00:25:29 UTC · Gladex.de