Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 1175 files, 68 MB |
| Latest run log | run-20261005-164047-709.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (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
[0m$ [0mcd /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):
[0m← [0mWrite /tmp/opencode/l-probe/control28.txt
Created file successfully: /tmp/opencode/l-probe/control28.txt
> build · mimo-v2.6-flash-free
[0m$ [0mcd /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
[0m$ [0mcd /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
[0m$ [0mcd /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
[0m$ [0mcd /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
[0m← [0mEdit /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
[0m$ [0mcd /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
[0m← [0mWrite /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:
[0m← [0mWrite /tmp/opencode/l-probe/header28.txt
Created file successfully: /tmp/opencode/l-probe/header28.txt
> build · mimo-v2.6-flash-free
[0m← [0mWrite /tmp/opencode/l-probe/changelog218.txt
Created file successfully: /tmp/opencode/l-probe/changelog218.txt
> build · mimo-v2.6-flash-free
[0m← [0mWrite /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