Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 1196 files, 73.9 MB |
| Latest run log | run-20261006-204734-730.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261006-204734-730.log | 101 KB | 2026-10-06 18:55:48 |
| run-20261006-193520-729.log | 347 KB | 2026-10-06 18:37:25 |
| run-20261006-164643-728.log | 351 KB | 2026-10-06 17:25:12 |
| run-20261006-124129-727.log | 445 KB | 2026-10-06 14:36:35 |
| run-20261006-104452-726.log | 468 KB | 2026-10-06 10:31:20 |
| run-20261006-090726-725.log | 338 KB | 2026-10-06 08:34:44 |
| run-20261006-073331-724.log | 245 KB | 2026-10-06 06:57:18 |
| run-20261006-061912-723.log | 266 KB | 2026-10-06 05:23:23 |
| run-20261006-053304-722.log | 192 KB | 2026-10-06 04:09:04 |
| run-20261006-041829-721.log | 341 KB | 2026-10-06 03:22:57 |
| run-20261006-031229-720.log | 292 KB | 2026-10-06 02:08:21 |
| run-20261006-022028-719.log | 271 KB | 2026-10-06 01:02:21 |
| run-20261006-013213-718.log | 276 KB | 2026-10-06 00:10:20 |
| run-20261006-004412-717.log | 192 KB | 2026-10-05 23:22:05 |
| run-20261005-234618-716.log | 235 KB | 2026-10-05 22:34:04 |
| run-20261005-225616-715.log | 296 KB | 2026-10-05 21:36:11 |
| run-20261005-215648-714.log | 220 KB | 2026-10-05 20:46:08 |
| run-20261005-205855-713.log | 188 KB | 2026-10-05 19:46:40 |
| run-20261005-201246-712.log | 321 KB | 2026-10-05 18:48:47 |
| run-20261005-190629-711.log | 213 KB | 2026-10-05 18:02:38 |
| run-20261005-174000-710.log | 397 KB | 2026-10-05 16:56:22 |
| run-20261005-164047-709.log | 254 KB | 2026-10-05 15:29:53 |
| 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 |
Tail — run-20261006-204734-730.log (last 200 lines)
# that other suites grep for verdict strings.
# the detail is PRINTABLE ASCII, byte for byte (section 21): JSON is UTF-8,
# so one byte >= 0x80 makes a STRICT reader refuse the
# whole document while the lenient reader the
# assertions run through (`sys.stdin`, which is
# `errors=surrogateescape` here) parses it happily —
# the lenient path was passing a document no strict one
# would take; and `cut -c1-400` counts BYTES under
# `LC_ALL=C`, so a surviving multi-byte sequence could
# be split in half there. The writer's own shapes are
# ASCII, so nothing real is dropped.
# the shapes a truncated or twice-run write produces each have a defined
# reading (sections 16-20): a 0-byte log, a verdict
# line with no trailing newline, two verdict lines in
# one log, a log dated in the future, and an age that
# cannot be read. None of them may become a pass by
# accident, and the last one must warn even on a green.
# the WRITER's own classified failures are REPLAYED, not typed (section 22):
# tools/ip-drift-cron itself runs once per exit branch
# through its sandbox hooks, and the row then reads the
# file that run wrote — so `no_a_records`,
# `dns_lookup_failed` and `public_ip_unavailable` each
# land as error from the code that produces them, not
# from a line this suite typed. The same harness must
> build · mimo-v2.6-flash-free
[0m→ [0mRead repo/tests/test_system_status_ip_drift.sh [90m[offset=130, limit=175][0m
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo; echo "=== counts pinned elsewhere"; grep -rn "\b759\b\|\b779\b\|759/0\|779" tests/ tools/ REGISTRY* 2>/dev/null | grep -v test_system_status_ip_drift.sh | head; echo "=== run_mutation"; sed -n '3074,3130p' tests/test_system_status_ip_drift.sh; echo "=== NAD29 uses"; grep -n 'NAD29\|NOK29' tests/test_system_status_ip_drift.sh; echo "=== NAD28 uses"; grep -n 'NAD28\|NOK28' tests/test_system_status_ip_drift.sh
=== counts pinned elsewhere
tools/REGISTRY.md:2391: decorations after it** (`/tmp/opencode/probe48/`): clean **759/0**, dec1
tools/REGISTRY.md:2398: now reddens**. The suite moves **686 → 759/0** (`bash -n` clean), and
tools/REGISTRY.md:2418: clean tree **759 / 0**, M14's tree **746 / 1 rc 1**, M15's **758 / 1
tools/REGISTRY.md:2434: after the concatenation). Battery after it: **`=== Results: 779 passed,
tools/REGISTRY.md:2435: 0 failed ===`, rc 0** (759 + 10 for M12/M13 + 10 for M14/M15); the
tools/REGISTRY.md:2436: default run stays **759 / 0** (the battery is opt-in), and `--help` now
=== run_mutation
# `--mutations`, and `GSIP_WRITER_PLANT=1` skips this block outright. Both
# plants also avoid the arm-adjacency that made rdrO/rdrR's 31 reds a
# control26/control27A cascade: neither touches the `no_a_records` arm, so
# every red the inner run prints is a red that READ the planted line.
#
# Opt-in, for the reason tests/test_ip_drift_cron.sh's battery is opt-in: two
# extra suite runs, about two minutes.
if [ "$DO_WRITER_MUT" = "1" ] && [ "${GSIP_WRITER_PLANT:-0}" != "1" ]; then
echo ""
echo "=== writer-plant mutations: an append-shaped WRONG KIND, caught by section 28 ==="
run_writer_plant() { # <id> <label> <find> <repl> <pin: the expected FAIL assertion>
local id="$1" label="$2" find="$3" repl="$4" expect="$5"
local tree="$SANDBOX/wtree-$id" out="$SANDBOX/wtree-$id.out" n rc
rm -rf "$tree"; mkdir -p "$tree"
if cp -R "$REPO/tests" "$tree/tests" 2>/dev/null \
&& cp -R "$REPO/tools" "$tree/tools" 2>/dev/null \
&& [ -f "$tree/tests/test_system_status_ip_drift.sh" ] \
&& [ -f "$tree/tools/ip-drift-cron" ]; then
ok "$id: the sandbox tree is built (tests/ + tools/, REPO= resolves there)"
else
bad "$id: the sandbox tree could not be built"
return 0
fi
n=$(python3 - "$tree/tools/ip-drift-cron" "$find" "$repl" <<'PY'
import sys
p, find, repl = sys.argv[1], sys.argv[2], sys.argv[3]
s = open(p).read()
n = s.count(find)
if n == 1:
open(p, 'w').write(s.replace(find, repl, 1))
print(n)
PY
)
if [ "$n" != "1" ]; then
bad "$id: plant pattern occurs '${n:-0}' times, need exactly 1 (plant NOT applied)"
return 0
fi
ok "$id: plant applied exactly once"
if bash -n "$tree/tools/ip-drift-cron" 2>/dev/null; then
ok "$id: the planted writer parses (a red must come from behaviour, not a parse error)"
else
bad "$id: the planted writer does not parse"
return 0
fi
chmod +x "$tree/tools/ip-drift-cron"
GSIP_WRITER_PLANT=1 bash "$tree/tests/test_system_status_ip_drift.sh" > "$out" 2>&1
rc=$?
if [ "$rc" != "0" ]; then
ok "$id → the suite goes red (rc=$rc), the mutant did not survive"
else
bad "$id → suite stayed GREEN, the mutant survived"
fi
if grep -F "FAIL - " "$out" | grep -qF "$expect"; then
ok "$id → wrong verdict lands on the intended assertion: '$expect'"
else
bad "$id → wrong verdict is NOT the intended one (expected a failure of: '$expect')"
fi
=== NAD29 uses
1613: NOK29=$(printf '%s\n' "$ROWS29" | grep -c $'^ok\t')
1614: NAD29=$(printf '%s\n' "$ROWS29" | grep -c $'^bad\t')
1615: [ "$NOK29" = "3" ] && [ "$NAD29" = "6" ] \
1617: || bad "control29 src: found $NOK29 presence + $NAD29 absence assertion(s), expected 3 + 6 — an edit changed what this block believes exists"
=== NAD28 uses
1376: NOK28=$(printf '%s\n' "$TRIPLES28" | grep -c $'^ok\t')
1377: NAD28=$(printf '%s\n' "$TRIPLES28" | grep -c $'^bad\t')
1378: [ "$NOK28" = "3" ] && [ "$NAD28" = "6" ] \
1380: || bad "control28 src: found $NOK28 presence + $NAD28 absence assertion(s), expected 3 + 6 — an edit changed what this block believes exists"
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && python3 - <<'PY'
s=open('tests/test_system_status_ip_drift.sh').read()
t16="bad\t$LOG_CGN\trun 'ip-drift-check --format json' by hand and read its public_ip.\n"
t17a='[ "$NOK29" = "3" ] '
t17b='&& [ "$NAD29" = "6" ]'
print("M16 target count:", s.count(t16))
print("M17 find count:", s.count(t17a+t17b))
print("M17 A count:", s.count(t17a), "B count:", s.count(t17b))
# also alternative contract line for 29
t16b="'bad\\t$LOG_CGN\\tegress is NOT an IP address' \\\n"
print("alt29 line count:", s.count(t16b))
print("NOK29 =3 count:", s.count('[ "$NOK29" = "3" ]'), "NAD29=6:", s.count('[ "$NAD29" = "6" ]'))
PY
M16 target count: 1
M17 find count: 1
M17 A count: 1 B count: 1
alt29 line count: 1
NOK29 =3 count: 1 NAD29=6: 1
> build · mimo-v2.6-flash-free
[0m← [0mWrite /tmp/opencode/probe50/build.sh
Created file successfully: /tmp/opencode/probe50/build.sh
> build · mimo-v2.6-flash-free
[0m$ [0mchmod +x /tmp/opencode/probe50/build.sh && bash /tmp/opencode/probe50/build.sh 2>&1 | tail -40
79ee4c52650eb115e8542fa55823dab7 /data/repo/tests/test_system_status_ip_drift.sh
tree clean built
tree p28 built
tree p29 built
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'p28/tests/test_system_status_ip_drift.sh'
PLANT FAIL M16
> build · mimo-v2.6-flash-free
[0m← [0mEdit /tmp/opencode/probe50/build.sh
Index: /tmp/opencode/probe50/build.sh
===================================================================
--- /tmp/opencode/probe50/build.sh
+++ /tmp/opencode/probe50/build.sh
@@ -55,8 +55,15 @@
done
plant p28 M16 "$M16_A$M16_B" "" || { echo "PLANT FAIL M16"; exit 1; }
plant p29 M17 "$M17_A$M17_B" '[ "$NOK29" = "3" ] && [ "$NAD29" = "5" ]' || { echo "PLANT FAIL M17"; exit 1; }
+echo "(needles re-counted below against the committed suite, outside the trees)"
+python3 - "$SRC_SUITE" "$M16_A$M16_B" "$M17_A$M17_B" <<'PY'
+import sys
+s = open(sys.argv[1]).read()
+print("committed suite: M16 find count=%d, M17 find count=%d"
+ % (s.count(sys.argv[2]), s.count(sys.argv[3])))
+PY
for tr in p28 p29; do
if bash -n "$OUT/$tr/tests/test_system_status_ip_drift.sh"; then
echo "bash -n $tr: OK"
else
> build · mimo-v2.6-flash-free
[0m← [0mEdit /tmp/opencode/probe50/build.sh
Index: /tmp/opencode/probe50/build.sh
===================================================================
--- /tmp/opencode/probe50/build.sh
+++ /tmp/opencode/probe50/build.sh
@@ -53,10 +53,10 @@
make_tree "$tr" || { echo "TREE FAIL $tr"; exit 1; }
echo "tree $tr built"
done
-plant p28 M16 "$M16_A$M16_B" "" || { echo "PLANT FAIL M16"; exit 1; }
-plant p29 M17 "$M17_A$M17_B" '[ "$NOK29" = "3" ] && [ "$NAD29" = "5" ]' || { echo "PLANT FAIL M17"; exit 1; }
+plant "$OUT/p28" M16 "$M16_A$M16_B" "" || { echo "PLANT FAIL M16"; exit 1; }
+plant "$OUT/p29" M17 "$M17_A$M17_B" '[ "$NOK29" = "3" ] && [ "$NAD29" = "5" ]' || { echo "PLANT FAIL M17"; exit 1; }
echo "(needles re-counted below against the committed suite, outside the trees)"
python3 - "$SRC_SUITE" "$M16_A$M16_B" "$M17_A$M17_B" <<'PY'
import sys
s = open(sys.argv[1]).read()
> build · mimo-v2.6-flash-free
[0m$ [0mbash /tmp/opencode/probe50/build.sh 2>&1 | tail -40
79ee4c52650eb115e8542fa55823dab7 /data/repo/tests/test_system_status_ip_drift.sh
tree clean built
tree p28 built
tree p29 built
M16: s.count(find)=1
M17: s.count(find)=1
(needles re-counted below against the committed suite, outside the trees)
committed suite: M16 find count=1, M17 find count=1
bash -n p28: OK
bash -n p29: OK
--- run clean
clean: rc=0 === Results: 759 passed, 0 failed === FAIL-lines=0 seconds=63
--- run p28
p28: rc=1 === Results: 758 passed, 1 failed === FAIL-lines=1 seconds=63
FAIL - control28 src: the extracted set is not the contract — 0a1;> bad $LOG_CGN run 'ip-drift-check --format json' by hand and read its public_ip.;
--- run p29
p29: rc=1 === Results: 758 passed, 1 failed === FAIL-lines=1 seconds=68
FAIL - control29 src: found 3 presence + 6 absence assertion(s), expected 3 + 6 — an edit changed what this block believes exists
> build · mimo-v2.6-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)
[Tue Oct 6 20:54:44 2026] 127.0.0.1:60500 Accepted [Tue Oct 6 20:54:44 2026] 127.0.0.1:60500 Closing [Tue Oct 6 20:54:44 2026] 127.0.0.1:60504 Accepted [Tue Oct 6 20:54:44 2026] 127.0.0.1:60504 Closing [Tue Oct 6 20:54:44 2026] 127.0.0.1:60518 Accepted [Tue Oct 6 20:54:44 2026] 127.0.0.1:60518 Closing [Tue Oct 6 20:54:44 2026] 127.0.0.1:60524 Accepted [Tue Oct 6 20:54:44 2026] 127.0.0.1:60524 Closing [Tue Oct 6 20:54:44 2026] 127.0.0.1:60528 Accepted [Tue Oct 6 20:54:44 2026] 127.0.0.1:60528 Closing [Tue Oct 6 20:54:44 2026] 127.0.0.1:60540 Accepted [Tue Oct 6 20:54:45 2026] 127.0.0.1:60540 Closing [Tue Oct 6 20:54:45 2026] 127.0.0.1:51482 Accepted [Tue Oct 6 20:54:45 2026] 127.0.0.1:51482 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55560 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55560 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55576 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55576 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55588 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55588 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55598 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55598 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55614 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55614 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55626 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55626 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55628 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55628 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55644 Accepted [Tue Oct 6 20:55:33 2026] 127.0.0.1:55644 Closing [Tue Oct 6 20:55:33 2026] 127.0.0.1:55648 Accepted [Tue Oct 6 20:55:34 2026] 127.0.0.1:55648 Closing [Tue Oct 6 20:55:34 2026] 127.0.0.1:55658 Accepted [Tue Oct 6 20:55:34 2026] 127.0.0.1:55658 Closing [Tue Oct 6 20:56:10 2026] 127.0.0.1:46124 Accepted [Tue Oct 6 20:56:10 2026] 127.0.0.1:46124 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49108 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49108 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49122 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49122 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49128 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49128 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49136 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49136 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49150 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49150 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49154 Accepted [Tue Oct 6 21:00:11 2026] 127.0.0.1:49154 Closing [Tue Oct 6 21:00:11 2026] 127.0.0.1:49164 Accepted [Tue Oct 6 21:00:12 2026] 127.0.0.1:49164 Closing [Tue Oct 6 21:00:12 2026] 127.0.0.1:49170 Accepted [Tue Oct 6 21:00:12 2026] 127.0.0.1:49170 Closing [Tue Oct 6 21:00:12 2026] 127.0.0.1:49172 Accepted [Tue Oct 6 21:00:12 2026] 127.0.0.1:49172 Closing [Tue Oct 6 21:00:12 2026] 127.0.0.1:49174 Accepted [Tue Oct 6 21:00:12 2026] 127.0.0.1:49174 Closing [Tue Oct 6 21:00:24 2026] 127.0.0.1:59432 Accepted [Tue Oct 6 21:00:24 2026] 127.0.0.1:59432 Closing [Tue Oct 6 21:00:24 2026] 127.0.0.1:43008 Accepted
Generated 2026-10-06 19:00:24 UTC · Gladex.de