Gladex Agent Logs

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

Overview
Run logs1209 files, 77.7 MB
Latest run logrun-20261007-114753-743.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261007-114753-743.log 187 KB 2026-10-07 10:33:16
run-20261007-094305-742.log 286 KB 2026-10-07 09:37:44
run-20261007-082626-741.log 272 KB 2026-10-07 07:32:57
run-20261007-070551-740.log 263 KB 2026-10-07 06:16:16
run-20261007-052216-739.log 354 KB 2026-10-07 04:55:42
run-20261007-033957-738.log 428 KB 2026-10-07 03:12:08
run-20261007-023935-737.log 310 KB 2026-10-07 01:29:49
run-20261007-012521-736.log 162 KB 2026-10-07 00:29:26
run-20261007-005238-735.log 232 KB 2026-10-06 23:15:11
run-20261006-233016-734.log 406 KB 2026-10-06 22:42:30
run-20261006-231309-733.log 300 KB 2026-10-06 21:20:06
run-20261006-222432-732.log 262 KB 2026-10-06 21:03:00
run-20261006-211819-731.log 403 KB 2026-10-06 20:14:24
run-20261006-204734-730.log 136 KB 2026-10-06 19:08:10
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
Tail — run-20261007-114753-743.log (last 200 lines)
+    #     one class's.
+    #
+    # **Why no single-red exists for this input — an enumeration, not a
+    # result**: the assertions this heredoc reaches come in families whose
+    # arity the harness fixes. A plant that FAILS costs its class exactly one
+    # step-3 row (`plant did not apply` — `continue` skips the other four) plus
+    # BOTH of its step-4 absence rows (`[ ! -s ]` gates the pair), i.e. **3 per
+    # dead class, never 1 or 2**; a plant that SUCCEEDS with less content costs
+    # its class one row per body the executed arm lost, and the content is
+    # shared — `BODIES` and `ORDER` are read by all three borrows — so it is
+    # never single-class: an entry dropped while `ORDER` still names it kills
+    # all three plants (**3 × 3 = 9**, M52 measured), a value rewritten onto an
+    # existing arm's line passes every guard and moves two classes (**2 × 2 =
+    # 4**, M53 measured), a value rewritten onto no arm at all fails all three
+    # guards (**9**), and a value landing on a THIRD arm is the swap again.
+    # The prefixed-needle row cannot be reddened single-handedly either: the
+    # format string is shared, so putting a foreign body first costs every
+    # class at once (**3**, not 1). "Exactly one assertion" is therefore
+    # unreachable here by construction, the way (am) proved it for `PAT`.
+    #
+    # **The judgment, disclosed the way (am) and (ap) disclosed theirs**: both
+    # shapes are planted anyway as MULTI-RED plants — M52 a nine-red, M53 a
+    # four-red — a deviation from this item's "each plant reddening exactly one
+    # assertion in THIS suite", recorded here rather than hidden, because both
+    # mutants are CAUGHT (neither stayed green) and each pin is a line no other
+    # plant in this battery can print: M52's names the UNCAUGHT-exception
+    # shape (every cron-side, count-side or label-side failure exits with its
+    # own `SystemExit` message instead), M53's names the PUBLIC class with the
+    # cgnat DIAGNOSIS body — and M51, the only other plant measured to redden
+    # `did not bite` (its own two reds, probed this run), reddens it on the
+    # private and unparseable rows carrying the ACTION body instead.
+    #
+    # **Blindness, measured BEFORE the install** — `--mutations` over each
+    # planted tree (clean battery **556 / 0**, re-read off the committed suite):
+    # over M52's tree → **528 passed / 10 failed** (total **538** = 556 less the
+    # **18** rows the early `continue`s stop producing — 3 classes × 4 skipped
+    # step-3 rows, plus 6 absence rows × 1 skipped else-branch — accounted, not
+    # guessed), the ten reds being this file's own nine control30 rows (its body
+    # runs even under `--mutations`) plus the shared `control: unmutated cron
+    # already red (rc=1) — and NOT ONE pin-check shadow, every existing
+    # `run_suite_plant` pin still landing over a control that is red elsewhere;
+    # over M53's tree → **551 passed / 5 failed** (total **556** — a successful
+    # plant removes no row), the same five reds. `grep -cE 'M5[23]'` over each
+    # whole output → **0** on both trees. Reader suite over all three trees as
+    # the collateral check → **759 / 0, rc 0** on each (these plants edit only
+    # THIS file, which that suite never reads this way).
+    #
+    # **What landed — ten new battery assertions, counted from the run and not
+    # projected**: two calls below, **five-argument** (arity re-derived from
+    # `run_suite_plant`'s definition rather than copied: both plant THIS
+    # suite), needles **built, never quoted whole** (the M14/M15 self-blindness
+    # rule — neither find is written out anywhere in this block): one shared
+    # head `$AQ_H` plus the first entry `$AQ_E`, so M52's find is M53's find
+    # minus that entry, and `$M53_C`/`$M53_R1`/`$M53_R2` carry the private line
+    # and the rewritten pair. Arithmetic, to be corrected by the run if it is
+    # wrong: **556 → 566/0** plain, **553 → 563/0** live-free, and ten `ok`
+    # lines under the new IDs.
+    echo ""
+    # M52 — PY30PLANT's BODIES map loses its first entry, so all three borrow
+    # plants die on an uncaught KeyError: three dead classes × (1 step-3 row +
+    # 2 step-4 rows) = the nine-red. Pin is the FIRST red, told apart from
+    # every SystemExit failure of this same message by the traceback that opens
+    # it.
+    AQ_H="BODIES = {
+"
+    AQ_E="    'public': 'egress is a public IP but differs from DNS.',
+"
+    M52_FIND="$AQ_H$AQ_E"
+    M52_REPL="$AQ_H"
+    run_suite_plant M52 "M52 PY30PLANT's BODIES map loses its first entry, so all three borrow plants die on a KeyError" \
+        "$M52_FIND" \
+        "$M52_REPL" \
+        'control30 borrow public: the plant did not apply (Traceback (most recent call last):'
+    # M53 — the first two class KEYS swapped, values in place: all three plants
+    # still apply, but the ALSO-append lands on the wrong arm for public and
+    # private-or-cgnat, whose executed arms therefore carry no foreign
+    # diagnosis — the four-red, two absence rows per moved class, with
+    # unparseable's pair green. Pin is the FIRST of the four, told apart from
+    # M51's two `did not bite` reds by the class, the label AND the diagnosis
+    # body it names (M51's carry the action body).
+    M53_C="    'private-or-cgnat': 'WireGuard tunnel likely DOWN (egress fell back to NAT).',
+"
+    M53_R1="    'private-or-cgnat': 'egress is a public IP but differs from DNS.',
+"
+    M53_R2="    'public': 'WireGuard tunnel likely DOWN (egress fell back to NAT).',
+"
+    M53_FIND="$AQ_H$AQ_E$M53_C"
+    M53_REPL="$AQ_H$M53_R1$M53_R2"
+    run_suite_plant M53 "M53 PY30PLANT's first two class keys are swapped, so two classes' borrows append the wrong bodies" \
+        "$M53_FIND" \
+        "$M53_REPL" \
+        "control30 public: 'drift_pub → does not borrow the private-or-cgnat class's diagnosis' did not bite: the public borrow carries no 'WireGuard tunnel likely DOWN (egress fell back to NAT).'"
 fi
 
 # =============================================================================
 echo ""

> build · mimo-v2.6-flash-free
$ cd /data/repo && F=tests/test_ip_drift_cron.sh; bash -n $F && echo "bash -n OK"; echo "BODIES-head lines: $(grep -c 'BODIES = {' $F)"; grep -n 'BODIES = {' $F | cut -c1-90; echo "--- needle/pin counts as the call evaluates them:"; source <(sed -n '/^    AQ_H=/,/^    M53_REPL=/p' $F | sed 's/^    //'); python3 - $F <<'PY'
import sys
s = open(sys.argv[1]).read()
import subprocess
env = subprocess.run(['bash','-c','source /dev/stdin','<','/dev/null'],capture_output=True)
PY
echo "(counts next)"
bash -n OK
BODIES-head lines: 8
797:BODIES = {
909:BODIES = {
3539:    # `if m.group(3) in BODIES` (line 805), `grep -c 'BODIES = {'` → **2** at
3562:    # `count_in_file=1` ×2, `M50_REPL` count **2** — the two `BODIES = {` heads
3649:    M50_H="BODIES = {
3665:    M51_H="BODIES = {
3680:    # `grep -n 'BODIES = {'` → **2 at open** (797 = `PY30SRC`'s filter, taken
3791:    AQ_H="BODIES = {
--- needle/pin counts as the call evaluates them:
/dev/fd/63: line 7: run_suite_plant: command not found
(counts next)
> build · mimo-v2.6-flash-free
`BODIES`-head count = **8** exactly as claimed. Now needle/pin counts as the call evaluates them:
$ cd /data/repo && cat > /tmp/opencode/probe61/counts.sh <<'EOF'
#!/usr/bin/env bash
# counts.sh FILE — read the needle + pin definitions the way the calls do.
F="$1"
eval "$(sed -n '/^    AQ_H=/,/^    M53_R2=/p' "$F" | sed 's/^    //')"
python3 - "$F" "$M52_FIND" "$M52_REPL" "$M53_FIND" "$M53_REPL" <<'PY'
import sys
p, m52f, m52r, m53f, m53r = sys.argv[1:6]
s = open(p).read()
for label, needle in (("M52_FIND", m52f), ("M52_REPL", m52r),
                      ("M53_FIND", m53f), ("M53_REPL", m53r)):
    print("%s count=%d" % (label, s.count(needle)))
PY
python3 - "$F" <<'PY'
import sys, re
s = open(sys.argv[1]).read()
pins = {
 "M52 pin": 'control30 borrow public: the plant did not apply (Traceback (most recent call last):',
 "M53 pin": "control30 public: 'drift_pub \u2192 does not borrow the private-or-cgnat class's diagnosis' did not bite: the public borrow carries no 'WireGuard tunnel likely DOWN (egress fell back to NAT).'",
}
for k, v in pins.items():
    print("%s: bare=%d quoted(dq)=%d quoted(sq)=%d" % (k, s.count(v), s.count('"%s"' % v), s.count("'%s'" % v)))
PY
EOF
bash /tmp/opencode/probe61/counts.sh tests/test_ip_drift_cron.sh
/tmp/opencode/probe61/counts.sh: line 10: run_suite_plant: command not found
/tmp/opencode/probe61/counts.sh: eval: line 25: unexpected EOF while looking for matching `"'
M52_FIND count=1
M52_REPL count=5
M53_FIND count=255236
M53_REPL count=255236
M52 pin: bare=1 quoted(dq)=0 quoted(sq)=1
M53 pin: bare=1 quoted(dq)=1 quoted(sq)=0
> build · mimo-v2.6-flash-free
$ cd /data/repo && cat > /tmp/opencode/probe61/counts.sh <<'EOF'
#!/usr/bin/env bash
# counts.sh FILE — read the needle definitions the way run_suite_plant's calls
# do (bash evaluates them, python counts them in the file).
F="$1"
DEF="$(sed -n '/^    AQ_H=/,/^    M52_REPL=/p' "$F"; sed -n '/^    M53_C=/,/^    M53_REPL=/p' "$F")"
eval "$(printf '%s\n' "$DEF" | sed 's/^    //')"
python3 - "$F" "$M52_FIND" "$M52_REPL" "$M53_FIND" "$M53_REPL" <<'PY'
import sys
p, m52f, m52r, m53f, m53r = sys.argv[1:6]
s = open(p).read()
for label, needle in (("M52_FIND", m52f), ("M52_REPL", m52r),
                      ("M53_FIND", m53f), ("M53_REPL", m53r)):
    print("%s len=%d count=%d" % (label, len(needle), s.count(needle)))
PY
EOF
bash /tmp/opencode/probe61/counts.sh tests/test_ip_drift_cron.sh
M52_FIND len=72 count=1
M52_REPL len=11 count=5
M53_FIND len=155 count=1
M53_REPL len=155 count=0
> build · mimo-v2.6-flash-free
Needles resolve to count **1/1** on the installed file, pins bare=1/quoted=1. Now the runs after install:
$ cd /data/repo && bash tests/test_ip_drift_cron.sh > /tmp/opencode/probe61/post-plain.txt 2>&1; echo "default plain: $(grep -E '^=== Results:' /tmp/opencode/probe61/post-plain.txt)"; IPDRIFT_NO_LIVE=1 bash tests/test_ip_drift_cron.sh > /tmp/opencode/probe61/post-livefree.txt 2>&1; echo "default live-free: $(grep -E '^=== Results:' /tmp/opencode/probe61/post-livefree.txt)"; bash -n tests/test_ip_drift_cron.sh && echo "bash -n OK"
default plain: === Results: 340 passed, 0 failed ===
default live-free: === Results: 337 passed, 0 failed ===
bash -n OK
> build · mimo-v2.6-flash-free
$ cd /data/repo && bash tests/test_ip_drift_cron.sh --mutations > /tmp/opencode/probe61/post-battery.txt 2>&1; echo "battery rc=$?"; grep -E '^=== Results:' /tmp/opencode/probe61/post-battery.txt | tail -1; echo "ok M5[23]: $(grep -cE '^  ok   - M5[23]' /tmp/opencode/probe61/post-battery.txt)"; echo "FAIL lines: $(grep -c '  FAIL - ' /tmp/opencode/probe61/post-battery.txt)"; grep -E '^  ok   - M5[23]' /tmp/opencode/probe61/post-battery.txt | sed 's/^/  /'
battery rc=0
=== Results: 566 passed, 0 failed ===
ok M5[23]: 10
FAIL lines: 0
    ok   - M52: the sandbox tree is built (tests/ + tools/, REPO= resolves there)
    ok   - M52: plant applied exactly once — M52 PY30PLANT's BODIES map loses its first entry, so all three borrow plants die on a KeyError
    ok   - M52: the planted suite parses (a red must come from behaviour, not a parse error)
    ok   - M52 → the suite goes red (rc=1), the mutant did not survive
    ok   - M52 → wrong verdict lands on the intended assertion: 'control30 borrow public: the plant did not apply (Traceback (most recent call last):'
    ok   - M53: the sandbox tree is built (tests/ + tools/, REPO= resolves there)
    ok   - M53: plant applied exactly once — M53 PY30PLANT's first two class keys are swapped, so two classes' borrows append the wrong bodies
    ok   - M53: the planted suite parses (a red must come from behaviour, not a parse error)
    ok   - M53 → the suite goes red (rc=1), the mutant did not survive
    ok   - M53 → wrong verdict lands on the intended assertion: 'control30 public: 'drift_pub → does not borrow the private-or-cgnat class's diagnosis' did not bite: the public borrow carries no 'WireGuard tunnel likely DOWN (egress fell back to NAT).''
> build · mimo-v2.6-flash-free
**556 → 566/0** exactly as predicted, 10 `ok` rows, 0 FAIL. Live-free battery:

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)
[Wed Oct  7 12:19:45 2026] 127.0.0.1:51088 Accepted
[Wed Oct  7 12:19:45 2026] 127.0.0.1:51088 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55586 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55586 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55590 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55590 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55600 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55600 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55604 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55604 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55620 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55620 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55636 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55636 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55638 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55638 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55646 Accepted
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55646 Closing
[Wed Oct  7 12:30:11 2026] 127.0.0.1:55648 Accepted
[Wed Oct  7 12:30:12 2026] 127.0.0.1:55648 Closing
[Wed Oct  7 12:30:12 2026] 127.0.0.1:55654 Accepted
[Wed Oct  7 12:30:12 2026] 127.0.0.1:55654 Closing
[Wed Oct  7 12:30:52 2026] 127.0.0.1:39130 Accepted
[Wed Oct  7 12:30:52 2026] 127.0.0.1:39130 Closing
[Wed Oct  7 12:30:52 2026] 127.0.0.1:39132 Accepted
[Wed Oct  7 12:30:52 2026] 127.0.0.1:39132 Closing
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51970 Accepted
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51970 Closing
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51982 Accepted
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51982 Closing
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51986 Accepted
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51986 Closing
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51998 Accepted
[Wed Oct  7 12:30:57 2026] 127.0.0.1:51998 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52004 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52004 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52016 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52016 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52024 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52024 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52032 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52032 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52048 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52048 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52056 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52056 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52068 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52068 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52072 Accepted
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52072 Closing
[Wed Oct  7 12:31:01 2026] 127.0.0.1:52080 Accepted
[Wed Oct  7 12:31:02 2026] 127.0.0.1:52080 Closing
[Wed Oct  7 12:31:02 2026] 127.0.0.1:52082 Accepted
[Wed Oct  7 12:31:02 2026] 127.0.0.1:52082 Closing
[Wed Oct  7 12:33:38 2026] 127.0.0.1:34996 Accepted
[Wed Oct  7 12:33:38 2026] 127.0.0.1:34996 Closing
[Wed Oct  7 12:34:09 2026] 127.0.0.1:43570 Accepted
[Wed Oct  7 12:34:09 2026] 127.0.0.1:43570 Closing
[Wed Oct  7 12:37:14 2026] 127.0.0.1:42124 Accepted

Generated 2026-10-07 10:37:14 UTC · Gladex.de