Gladex Agent Logs

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

Overview
Run logs1175 files, 68 MB
Latest run logrun-20261005-164047-709.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261005-164047-709.log 199 KB 2026-10-05 15:00:36
run-20261005-160934-708.log 139 KB 2026-10-05 14:30:37
run-20261005-155925-707.log 153 B 2026-10-05 13:59:26
run-20261005-154917-706.log 190 B 2026-10-05 13:49:18
run-20261005-153909-705.log 153 B 2026-10-05 13:39:09
run-20261005-152900-704.log 153 B 2026-10-05 13:29:01
run-20261005-142051-703.log 222 KB 2026-10-05 13:18:53
run-20261005-130731-702.log 227 KB 2026-10-05 12:10:44
run-20261005-120453-701.log 163 KB 2026-10-05 10:57:24
run-20261005-094142-700.log 440 KB 2026-10-05 09:54:46
run-20261005-090130-699.log 165 KB 2026-10-05 07:31:34
run-20261005-071341-698.log 435 KB 2026-10-05 06:51:22
run-20261005-061647-697.log 196 KB 2026-10-05 05:03:34
run-20261005-052959-696.log 226 KB 2026-10-05 04:06:39
run-20261005-044026-695.log 177 KB 2026-10-05 03:19:52
run-20261005-034927-694.log 254 KB 2026-10-05 02:30:18
run-20261005-030059-693.log 312 KB 2026-10-05 01:39:20
run-20261004-233305-692.log 1010 KB 2026-10-05 00:50:51
run-20261004-230052-691.log 130 KB 2026-10-04 21:22:57
run-20261004-221607-690.log 258 KB 2026-10-04 20:50:44
run-20261004-210204-689.log 310 KB 2026-10-04 20:05:59
run-20261004-184239-688.log 505 KB 2026-10-04 18:51:56
run-20261004-172538-687.log 486 KB 2026-10-04 16:32:32
run-20261004-165539-686.log 142 KB 2026-10-04 15:15:29
run-20261004-161338-685.log 176 KB 2026-10-04 14:45:31
run-20261004-160330-684.log 153 B 2026-10-04 14:03:31
run-20261004-155322-683.log 153 B 2026-10-04 13:53:23
run-20261004-154314-682.log 190 B 2026-10-04 13:43:15
run-20261004-153306-681.log 153 B 2026-10-04 13:33:07
run-20261004-152258-680.log 153 B 2026-10-04 13:22:58
run-20261004-151250-679.log 190 B 2026-10-04 13:12:50
run-20261004-150241-678.log 153 B 2026-10-04 13:02:42
run-20261004-145233-677.log 153 B 2026-10-04 12:52:34
run-20261004-144225-676.log 190 B 2026-10-04 12:42:26
run-20261004-143217-675.log 153 B 2026-10-04 12:32:17
run-20261004-142209-674.log 153 B 2026-10-04 12:22:09
run-20261004-141201-673.log 153 B 2026-10-04 12:12:01
run-20261004-140152-672.log 153 B 2026-10-04 12:01:53
run-20261004-135144-671.log 153 B 2026-10-04 11:51:44
run-20261004-134136-670.log 153 B 2026-10-04 11:41:36
run-20261004-133127-669.log 153 B 2026-10-04 11:31:27
run-20261004-132119-668.log 153 B 2026-10-04 11:21:19
run-20261004-131110-667.log 153 B 2026-10-04 11:11:10
run-20261004-130101-666.log 190 B 2026-10-04 11:01:02
run-20261004-125053-665.log 153 B 2026-10-04 10:50:54
run-20261004-124045-664.log 153 B 2026-10-04 10:40:45
run-20261004-123036-663.log 153 B 2026-10-04 10:30:37
run-20261004-122028-662.log 153 B 2026-10-04 10:20:29
run-20261004-121020-661.log 153 B 2026-10-04 10:10:20
run-20261004-120011-660.log 153 B 2026-10-04 10:00:11
Tail — run-20261005-160934-708.log (last 200 lines)
Output is streaming to: /root/.local/share/opencode/shell/fa3e85b2145a60c127b5c9261e76a7ba6d520299/sh_10c72a9c6001qqdt08EmRpyXkX.out
> build · mimo-v2.6-flash-free
$ cd /data/repo && head -60 tests/test_leak_figure_readers.sh
#!/usr/bin/env bash
# test_leak_figure_readers.sh — queue item (131), DURABLE half: one cross-suite
# reader for the standing claim *"no leak figure for any of the nine (128)
# suites may be quoted off a glob"*.
#
# WHY THIS EXISTS (the gap, not the fix)
#   Every one of the nine (128) suites fences ITS OWN number: section Z's Z8/Z9
#   put a directory reader and a glob reader side by side over one fixture, so
#   that suite's figure cannot silently become a file count. What none of them
#   fenced is the NEXT figure. Nothing read the nine prefixes' leak-figure call
#   sites as one claim, so a future `leaked=$(ls -d ... | wc -l)` in any ledger
#   suite — or a `count_sandboxes()` body that quietly lost `-type d` — stayed
#   green by construction. (131)'s own close was a hand-run `find … -type d`
#   recount over all nine prefixes: a measurement one run took is a memory, not
#   a guard, and this file is the guard.
#
# SCOPE — derived from the sources, never listed
#   A leak figure is a claim about what a SANDBOX LEDGER recorded, so scope is
#   every file in the scanned directory carrying either column-0 marker of that
#   family: the factory `new_sandbox()` or the ledger `SB_ALL=`. The two markers
#   are read independently and their union is scanned; on 2026-10-04 both read
#   the SAME 10 files — the nine (128) suites plus `test_queue_source.sh`, the
#   (115) ledger — so an eleventh suite joining the family is picked up without
#   editing this file, and a suite that never ledgers a sandbox has no leak
#   figure for this reader to attribute (its counts are file checks: the
#   `identity-*.tmp` leftovers and `red-watch*` logs measured out of scope).
#
# THE FIVE RULES — one awk pass, one verdict each, every one control-backed
#   R1 glob_without_reader         a scoped file with a glob figure and no
#                                  `count_sandboxes()` definition at all
#   R1 reader_not_directory_only   a definition whose body lost `find … -type d`
#   R2 glob_used_as_figure         a glob figure not assigned to `z_glob` — the
#                                  control's own name, the only legal glob
#   R3 glob_not_paired             a glob figure with no directory count within
#                                  ±3 lines (the control must read the same
#                                  input at the same moment)
#   R4 lone_glob_read              a line reading `$z_glob` without `$z_dirs`
#                                  beside it (a figure reported alone — and
#                                  note this very rule binds the comments in
#                                  this file too, so both names sit on one
#                                  line above)
#   An uncounted line that is neither (the ledger's own `z_dupes` duplicate
#   count) is classed `other`, not swallowed into the glob class — A8 asserts
#   that separation, so a classifier that lumped everything would redden.
#
# CONTROLS (section C) — one clean fixture and five single-hunk plants, each
# precondition-asserted to have taken effect and each required to produce
# EXACTLY one violation of its own rule. A rule with no plant that reddens is
# prose; the live zero (A4) plus these five plants is what makes it a claim.
#
# The scanner reads files only — it never runs a fixture, never touches the
# repository, the environments, the network or the ledger of any other suite.
#
# Run: bash tests/test_leak_figure_readers.sh
#      LFR_TESTS_DIR=<dir> bash tests/test_leak_figure_readers.sh   # mutant replay
# Exit codes: 0 = all pass, 1 = at least one failure.
set -u

# The suite's OWN file (Z1 reads its source) versus the tree it scans: a mutant
# copy runs from outside tests/ while still scanning the live tree, so the two
> build · mimo-v2.6-flash-free
Let me draft the control block now (probe figures left as placeholders to fill in when the probe finishes):
← Write /tmp/opencode/l-probe/control28.txt
Created file successfully: /tmp/opencode/l-probe/control28.txt
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "control[0-9]*\|negative control" tests/test_ip_drift_cron.sh | head -30; echo "=== total lines ==="; wc -l tests/test_ip_drift_cron.sh tests/test_system_status_ip_drift.sh
856:        >"$SANDBOX/control.out" 2>&1
859:        ok "control: unmutated cron → suite green (rc=0)"
861:        bad "control: unmutated cron already red (rc=$CRC) — mutations prove nothing"
862:        tail -5 "$SANDBOX/control.out"
=== total lines ===
   962 tests/test_ip_drift_cron.sh
  2024 tests/test_system_status_ip_drift.sh
  2986 total
> build · mimo-v2.6-flash-free
$ cd /data/repo && python3 - tests/test_system_status_ip_drift.sh <<'PY'
import re, sys
BODIES = {
    'verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.',
    "check 'wg show client7' + host path. DNS must stay on the VPS.",
    "run 'ip-drift-check --format json' by hand and read its public_ip.",
}
PAT = re.compile(
    r' *grep -qF "([^"]*)" "(\$LOG_[A-Z]+)" 2>/dev/null \\\n'
    r' *&& (bad|ok) "([^"]*)" \\\n'
    r' *\|\| ')
rows = []
for m in PAT.finditer(open(sys.argv[1]).read()):
    if m.group(2) in BODIES:
        rows.append("%s\t%s\t%s\t%s" % (m.group(4), m.group(3), m.group(2), m.group(5)))
rows.sort()
print(len(rows))
print("\n".join(rows))
PY
0
> build · mimo-v2.6-flash-free
$ cd /data/repo && python3 - tests/test_system_status_ip_drift.sh <<'PY'
import re, sys
s = open(sys.argv[1]).read()
pats = {
 'a': r' *grep -qF "([^"]*)" "(\$LOG_[A-Z]+)" 2>/dev/null \\\n',
 'b': r' *grep -qF "([^"]*)" "(\$LOG_[A-Z]+)" 2>/dev/null \\\n *&& (bad|ok) "([^"]*)" \\\n',
 'c': r' *grep -qF "([^"]*)" "(\$LOG_[A-Z]+)" 2>/dev/null \\\n *&& (bad|ok) "([^"]*)" \\\n *\|\| ',
}
for k, p in pats.items():
    print(k, len(re.findall(p, s)))
i = s.find('grep -qF "verify VPS IP')
print(repr(s[i-8:i+260]))
PY
a 19
b 19
c 19
'es.\n    grep -qF "verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS." "$LOG_PUB" 2>/dev/null \\\n        && ok "distinct: the public drift\'s action is in the PUBLIC run\'s own log (the two action absences read a real log)" \\\n        || bad "distinct: the pub'
> build · mimo-v2.6-flash-free
$ cd /data/repo && python3 - tests/test_system_status_ip_drift.sh <<'PY'
import re, sys
BODIES = {
    'verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.',
    "check 'wg show client7' + host path. DNS must stay on the VPS.",
    "run 'ip-drift-check --format json' by hand and read its public_ip.",
}
PAT = re.compile(
    r' *grep -qF "([^"]*)" "(\$LOG_[A-Z]+)" 2>/dev/null \\\n'
    r' *&& (bad|ok) "([^"]*)" \\\n'
    r' *\|\| ')
rows = []
for m in PAT.finditer(open(sys.argv[1]).read()):
    if m.group(1) in BODIES:
        rows.append("%s\t%s\t%s\t%s" % (m.group(3), m.group(2), m.group(1), m.group(4)))
rows.sort()
print("count:", len(rows))
print("\n".join(rows))
PY
count: 9
bad	$LOG_CGN	run 'ip-drift-check --format json' by hand and read its public_ip.	distinct3: the unparseable action must not be handed to a tunnel fault
bad	$LOG_CGN	verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.	distinct: the VPS-verify action must not be handed to a tunnel-fault run
bad	$LOG_PUB	check 'wg show client7' + host path. DNS must stay on the VPS.	distinct: the tunnel-down action must not be handed to a VPS-move run
bad	$LOG_PUB	run 'ip-drift-check --format json' by hand and read its public_ip.	distinct3: the unparseable action must not be handed to a readable public drift
bad	$LOG_UNP	check 'wg show client7' + host path. DNS must stay on the VPS.	distinct3: the unparseable run must not send an operator to chase the tunnel
bad	$LOG_UNP	verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.	distinct3: the unparseable run must not send an operator to verify the VPS
ok	$LOG_CGN	check 'wg show client7' + host path. DNS must stay on the VPS.	distinct: the tunnel-down action is in the CGNAT run's own log
ok	$LOG_PUB	verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.	distinct: the public drift's action is in the PUBLIC run's own log (the two action absences read a real log)
ok	$LOG_UNP	run 'ip-drift-check --format json' by hand and read its public_ip.	distinct3: the unparseable action is in the unparseable run's own log (the four action absences read a real log)
> build · mimo-v2.6-flash-free
← Edit /tmp/opencode/l-probe/control28.txt
Index: /tmp/opencode/l-probe/control28.txt
===================================================================
--- /tmp/opencode/l-probe/control28.txt
+++ /tmp/opencode/l-probe/control28.txt
@@ -55,10 +55,10 @@
     r' *&& (bad|ok) "([^"]*)" \\\n'
     r' *\|\| ')
 rows = []
 for m in PAT.finditer(open(sys.argv[1]).read()):
-    if m.group(2) in BODIES:
-        rows.append("%s\t%s\t%s\t%s" % (m.group(4), m.group(3), m.group(2), m.group(5)))
+    if m.group(1) in BODIES:
+        rows.append("%s\t%s\t%s\t%s" % (m.group(3), m.group(2), m.group(1), m.group(4)))
 sys.stdout.write("\n".join(sorted(rows)))
 PY28SRC
 )
     NOK28=$(printf '%s\n' "$TRIPLES28" | grep -c $'^ok\t')

> build · mimo-v2.6-flash-free
$ cd /tmp/opencode/l-probe && sed -n "/<<'PY28PLANT'/,/^PY28PLANT$/p" control28.txt | sed '1d;$d' > plant28.py && for c in public private-or-cgnat unparseable; do echo "--- $c"; python3 plant28.py /data/repo/tools/ip-drift-cron /tmp/opencode/l-probe/p28-$c.sh "$c" && bash -n /tmp/opencode/l-probe/p28-$c.sh && echo "  parse OK" && grep -c 'ALSO:' /tmp/opencode/l-probe/p28-$c.sh; done; echo "--- negative test: planting the already-planted cgnat writer must FAIL ---"; python3 plant28.py /tmp/opencode/l-probe/p28-private-or-cgnat.sh /tmp/opencode/l-probe/p28-x.sh private-or-cgnat; echo "rc=$?"
--- public
own arm carries the two foreign bodies; the other two arms and both class labels untouched
  parse OK
1
--- private-or-cgnat
own arm carries the two foreign bodies; the other two arms and both class labels untouched
  parse OK
1
--- unparseable
own arm carries the two foreign bodies; the other two arms and both class labels untouched
  parse OK
1
--- negative test: planting the already-planted cgnat writer must FAIL ---
this class's ACTION line occurs 0 time(s), want exactly 1
rc=1
> build · mimo-v2.6-flash-free
← Write /tmp/opencode/l-probe/insert.py
Created file successfully: /tmp/opencode/l-probe/insert.py
> build · mimo-v2.6-flash-free
Drafting the header-comment bullet while the probe runs:
← Write /tmp/opencode/l-probe/header28.txt
Created file successfully: /tmp/opencode/l-probe/header28.txt
> build · mimo-v2.6-flash-free
← Write /tmp/opencode/l-probe/changelog218.txt
Created file successfully: /tmp/opencode/l-probe/changelog218.txt
> build · mimo-v2.6-flash-free
← Write /tmp/opencode/l-probe/registry28.txt
Created file successfully: /tmp/opencode/l-probe/registry28.txt
> build · mimo-v2.6-flash-free
STEP 0 is closed (0 unread / 0 owed) and the probe for queue item **(l)** is running out-of-tree — 9 suite runs, ~10 minutes. I'll continue when it lands.
exit=0

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)
[Mon Oct  5 16:56:56 2026] 127.0.0.1:52802 Closing
[Mon Oct  5 16:56:58 2026] 127.0.0.1:52812 Accepted
[Mon Oct  5 16:56:58 2026] 127.0.0.1:52812 Closed without sending a request; it was probably just an unused speculative preconnection
[Mon Oct  5 16:56:58 2026] 127.0.0.1:52812 Closing
[Mon Oct  5 16:57:33 2026] 127.0.0.1:49928 Accepted
[Mon Oct  5 16:57:33 2026] 127.0.0.1:49928 Closed without sending a request; it was probably just an unused speculative preconnection
[Mon Oct  5 16:57:33 2026] 127.0.0.1:49928 Closing
[Mon Oct  5 16:57:34 2026] 127.0.0.1:49940 Accepted
[Mon Oct  5 16:57:34 2026] 127.0.0.1:49940 Closed without sending a request; it was probably just an unused speculative preconnection
[Mon Oct  5 16:57:34 2026] 127.0.0.1:49940 Closing
[Mon Oct  5 16:58:03 2026] 127.0.0.1:60254 Accepted
[Mon Oct  5 16:58:04 2026] 127.0.0.1:60254 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44292 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44292 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44308 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44308 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44324 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44324 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44330 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44330 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44332 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44332 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44342 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44342 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44344 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44344 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44348 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44348 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44358 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44358 Closing
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44366 Accepted
[Mon Oct  5 17:00:11 2026] 127.0.0.1:44366 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42182 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42182 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42186 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42186 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42200 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42200 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42202 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42202 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42218 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42218 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42230 Accepted
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42230 Closing
[Mon Oct  5 17:01:02 2026] 127.0.0.1:42242 Accepted
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42242 Closing
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42252 Accepted
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42252 Closing
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42254 Accepted
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42254 Closing
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42264 Accepted
[Mon Oct  5 17:01:03 2026] 127.0.0.1:42264 Closing
[Mon Oct  5 17:03:32 2026] 127.0.0.1:37064 Accepted
[Mon Oct  5 17:03:33 2026] 127.0.0.1:37064 Closing
[Mon Oct  5 17:03:33 2026] 127.0.0.1:37078 Accepted
[Mon Oct  5 17:03:33 2026] 127.0.0.1:37078 Closing
[Mon Oct  5 17:03:36 2026] 127.0.0.1:60108 Accepted
[Mon Oct  5 17:03:36 2026] 127.0.0.1:60108 Closing
[Mon Oct  5 17:04:16 2026] 127.0.0.1:54658 Accepted

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