Gladex Agent Logs

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

Overview
Run logs1208 files, 77.3 MB
Latest run logrun-20261007-094305-742.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261007-094305-742.log 56 KB 2026-10-07 08:35:41
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
run-20261005-030059-693.log 312 KB 2026-10-05 01:39:20
Tail — run-20261007-094305-742.log (last 200 lines)
BODIES head+entry1:      2
bash -n OK
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n 'no drift → nothing appended to ALERTS' tests/test_ip_drift_cron.sh | cat -A | sed 's/\$$//' | cut -c1-140
177:assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS" "DRIFT" "$(alerts)"
1445:# redirected to `no drift M-bM-^FM-^R nothing appended to ALERTS`, which both of those
1470:# `no drift M-bM-^FM-^R nothing appended to ALERTS`, an assertion neither defect
1482:# action` M-bM-^FM-^R `no drift M-bM-^FM-^R nothing appended to ALERTS`, an assertion neither
1496:# lookup action` M-bM-^FM-^R `no drift M-bM-^FM-^R nothing appended to ALERTS`, an assertion both
1514:# untrustworthy` M-bM-^FM-^R `no drift M-bM-^FM-^R nothing appended to ALERTS`, an assertion both
1553:# not assumed, per (w)'s lesson) M-bM-^FM-^R `no drift M-bM-^FM-^R nothing appended to ALERTS`, an
1576:# (expected a failure of: 'no drift M-bM-^FM-^R nothing appended to ALERTS')`, and the
1609:# redirected the same way to `no drift M-bM-^FM-^R nothing appended to ALERTS`, an
1651:# way, to `no drift M-bM-^FM-^R nothing appended to ALERTS`, an assertion both defects
1672:# built: the target is `assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS"` at
1695:# `assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS"` at line **177**, call
1724:# `assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS"` at line **177**, call
1748:#     assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS"
1775:#     assert_lacks "no drift M-bM-^FM-^R nothing appended to ALERTS"
2690:    run_mutation M2 'no drift M-bM-^FM-^R nothing appended to ALERTS'
> build · mimo-v2.6-flash-free
Both shapes measured cleanly. Re-taking the plain baselines (house order) before installing:
$ cd /data/repo && echo "--- plain default:" && bash tests/test_ip_drift_cron.sh 2>&1 | tail -2 && echo "--- plain battery:" && bash tests/test_ip_drift_cron.sh --mutations 2>&1 | tail -2
--- plain default:

=== Results: 340 passed, 0 failed ===
--- plain battery:

=== Results: 546 passed, 0 failed ===
> build · mimo-v2.6-flash-free
Baselines confirmed (**340/0** plain, **337/0** live-free, battery **546/0** plain, **543/0** live-free). Installing the (ap) block:
← Edit repo/tests/test_ip_drift_cron.sh
Index: repo/tests/test_ip_drift_cron.sh
===================================================================
--- repo/tests/test_ip_drift_cron.sh
+++ repo/tests/test_ip_drift_cron.sh
@@ -3501,8 +3501,146 @@
     run_suite_plant M49 "M49 PY30X's MINE_VAR unparseable/public labels are swapped, so four reads lose their §23/§24 counterpart" \
         "$M49_FIND" \
         "$M49_REPL" \
         'control30 §23: read(s) here with no §23/§24 counterpart: has/public/egress is NOT an IP address'
+    # ---------------------------------------------------------------------------
+    # Queue item (ap), step (2): teeth for `PY30SRC`'s `BODIES` set — step 1's
+    # BODY FILTER, the one input in `control30`'s EXTRACTION that no plant had
+    # named. Structural reading, re-counted here rather than inherited: the
+    # step-1 `python3` block (line 797) filters `PAT.finditer(...)` rows through
+    # `if m.group(3) in BODIES` (line 805), `grep -c 'BODIES = {'` → **2** in
+    # this file (797 = `PY30SRC`'s filter — this item's; 909 = step 2's
+    # writer-side map, which is PLANTING machinery and not part of it, its own
+    # `raise SystemExit` guards already policing `own`, `borrow` and "the plant
+    # is not surgical"), no `run_suite_plant` label or needle mentions `BODIES`
+    # → **0**, and `grep -roE 'M5[01]' tests/ tools/` → **0** at open. After
+    # (ai)–(ao) covered this file's `PAT`, its `ROWS30` consumers, `EXPECTED30`,
+    # the count comparison and — step 2 — both dicts, both `pat`s and both var
+    # maps, the filter itself was the LAST input of step 1 with no line that
+    # could name it.
+    #
+    # **The probe is step 1 and does not inherit the bullet's letter** — out of
+    # tree (`/tmp/opencode/probe60/`, nothing under `/data/repo` written): the
+    # committed suite (md5 `0038e7bfc3a02e8ac9ac58864c49fd49`, equal to
+    # `git show HEAD:` at open) with `tests/` + the whole `tools/` copied into
+    # clean/m50/m51 trees by `probe.sh`. Both needles live in ONE definition
+    # (`needles.sh`) sourced by the probe and copied verbatim into the calls
+    # below, so probe and install cannot drift apart, and every needle was
+    # **byte-compared against the slice of the file it edits at its own index
+    # BEFORE any tree was built** (`bytecmp.txt`: `byte_equal=True`,
+    # `count_in_file=1` ×2, `M50_REPL` count **2** — the two `BODIES = {` heads
+    # it is — and `M51_REPL` count **0**), each plant applied with
+    # `s.count(find) == 1` asserted inside the script, `bash -n` clean on both.
+    # Clean baseline re-taken: **337 / 0** under `IPDRIFT_NO_LIVE=1` (the
+    # environment `run_suite_plant` runs in) and **340 / 0** plain; battery
+    # **546 / 0** plain, **543 / 0** live-free. Two shapes, each judged by the
+    # probe and not by the bullet:
+    #   - **M50** — PY30SRC's FIRST `BODIES` entry dropped WHOLESALE (the
+    #     M40/M45 head+entry+trailing-newline span: the bare entry line counts
+    #     **2** here, PY30X's `MINE_BODY` carries the same bytes). The exact-`in`
+    #     filter then drops that body's three rows — a body carries **3** rows,
+    #     one per class, always {has ×1, lacks ×2} — so the counts fall to
+    #     **2 + 4** → **327 passed / 2 failed, rc 1**, both reds inside step 1:
+    #     the count pin (`found 2 presence + 4 absence read(s)`) and the contract
+    #     pin (diff header ` — 2d1;`). The bullet PREDICTED this two-red and the
+    #     probe confirmed it; the pin registered below is the COUNT half — the
+    #     verdict that runs first — whose digits **2/4** carry neither M37's
+    #     **3/6** on the same assertion nor M40's **6** / M48's **0** on the §23
+    #     count. The second red is disclosed here, not hidden: it is the sibling
+    #     verdict reading the same `ROWS30`, i.e. exactly what an edit to the
+    #     filter SHOULD redden.
+    #   - **M51** — PY30SRC's first entry RETARGETED to the public class's
+    #     ACTION body (one entry out, another in, one edit). The kind/class
+    #     multiset argument (al) was **asserted by this probe, not inherited**:
+    #     whichever body sits in the set carries {has ×1, lacks ×2}, so the
+    #     predictor read `bodies=3 rows=9 has=3 lacks=6` off the PLANTED file
+    #     and the COUNT pin stayed **green** — count-green while the content is
+    #     wrong, the split (am) proved unreachable for `PAT` edits and reachable
+    #     here. What reddens: the contract pin (diff header ` — 2c2;`, its own —
+    #     apart from M36's bare phrase and M43's `1,9c1`) plus **three step-4
+    #     rows**, because the extraction now claims rows whose worlds cannot
+    #     satisfy them → **333 passed / 4 failed, rc 1**. Pin below = the
+    #     CONTRACT half.
+    #
+    # **Why no single-red exists for this input — an enumeration, not a
+    # result**: an edit here can only ADD or DROP rows (the filter is an exact
+    # `in` over a set), and a DROP changes the kind counts (a body is always
+    # {has ×1, lacks ×2}) so BOTH step-1 verdicts redden, while an ADD or a
+    # retarget can hold 3 + 6 only by admitting a body that is not one of the
+    # three — and every row of a non-contract body fails step 4: a `has` row
+    # needs a body PRESENT in the real log and ABSENT from the swapped one,
+    # which only a DIAGNOSIS line is (the swap rotates DIAGNOSIS and nothing
+    # else), and a `lacks` row needs a body absent from its own class's log but
+    # present in its borrow, which only the OTHER classes' diagnosis bodies are
+    # (the borrow appends `ALSO: <those two>`) — action bodies are logged by
+    # their own class in every world, so they fail `has` (still there after the
+    # swap) and fail `lacks` (already there for real). So *count-green ∧
+    # contract-green* ⟺ no row moved, and a moved row either costs both step-1
+    # verdicts or lands in step 4: "exactly one assertion" is unreachable by
+    # construction, the way (am) proved it for `PAT`.
+    #
+    # **Blindness, measured BEFORE the install** — `--mutations` over each
+    # planted tree with `IPDRIFT_NO_LIVE=1` (clean baseline **543 / 0, rc 0**):
+    #   - over M50's tree → **531 passed / 4 failed** (total 535 = the clean
+    #     543 less the **8** step-4 assertions its three dropped rows stop
+    #     producing — 1 presence ×2 + 2 absences ×3): the two control reds
+    #     above (this file's body runs even under `--mutations`), the shared
+    #     `control: unmutated cron already red (rc=1) — mutations prove
+    #     nothing`, and ONE die-order-independent SHADOW of the kind (ak)→(ao)
+    #     recorded, `M37 → wrong verdict is NOT the intended one (expected a
+    #     failure of: 'control30 src: found 3 presence + 6 absence read(s),
+    #     expected 3 + 6')`, because the control's nested run prints **2 + 4**,
+    #     so M37's pin can never appear in it;
+    #   - over M51's tree → **538 passed / 5 failed**, the four control reds
+    #     plus the same shared `control: unmutated cron already red`, and NO
+    #     pin-check shadow at all — the count stays 3 + 6 over that control, so
+    #     M37's pin still lands and every other plant's does too.
+    # `grep -cE 'M5[01]'` over each whole output → **0** on both trees. Reader
+    # suite run 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 —
+    # this file must not contain the bytes it plants): both share the `BODIES`
+    # head plus its first entry, split into `$M50_H` + `$M50_E`, so neither
+    # definition can byte-match the find it holds; M50's repl is the bare head,
+    # M51's is its own head + `$M51_E` (the action entry). Arithmetic, to be
+    # corrected by the run if it is wrong: **546 → 556/0** plain, **543 →
+    # 553/0** live-free, and ten `ok` lines under the new IDs.
+    echo ""
+    # M50 — PY30SRC's BODY FILTER loses its first entry, so step 1's extraction
+    # counts 2 + 4 and BOTH step-1 verdicts redden (the disclosed two-red).
+    # Pin is the count half — it runs first and its digits 2/4 carry neither
+    # M37's 3/6 nor M40's 6 / M48's 0.
+    M50_H="BODIES = {
+"
+    M50_E="    'egress is a public IP but differs from DNS.',
+"
+    M50_FIND="$M50_H$M50_E"
+    M50_REPL="$M50_H"
+    run_suite_plant M50 "M50 PY30SRC's BODIES loses its first entry, so step 1's extraction counts 2 presence + 4 absence" \
+        "$M50_FIND" \
+        "$M50_REPL" \
+        'control30 src: found 2 presence + 4 absence read(s), expected 3 + 6'
+    # M51 — the first entry RETARGETED to the public class's ACTION body: the
+    # kind counts survive (the probe asserted the multiset instead of
+    # inheriting it), so the count pin stays green while the contract pin
+    # reddens with its own `2c2` header, three step-4 rows behind it. Pin is
+    # the contract half, told apart from M36's bare phrase and M43's `1,9c1`
+    # by that header.
+    M51_H="BODIES = {
+"
+    M51_E="    'verify VPS IP 77.90.15.49 is still correct BEFORE touching DNS.',
+"
+    M51_FIND="$M50_H$M50_E"
+    M51_REPL="$M51_H$M51_E"
+    run_suite_plant M51 "M51 PY30SRC's BODIES first entry is retargeted to the public class's action body, so the contract splits from the count" \
+        "$M51_FIND" \
+        "$M51_REPL" \
+        'control30 src: the extracted set is not the contract — 2c2'
 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"
cd /tmp/opencode/probe60 && python3 bytecmp.py /data/repo/tests/test_ip_drift_cron.sh needles.sh M50_FIND M51_FIND
cd /data/repo && f=tests/test_ip_drift_cron.sh
echo "M50 pin quoted: $(grep -o "'control30 src: found 2 presence + 4 absence read(s), expected 3 + 6'" $f | wc -l)  bare: $(grep -o 'control30 src: found 2 presence + 4 absence read(s), expected 3 + 6' $f | wc -l)"
echo "M51 pin quoted: $(grep -o "'control30 src: the extracted set is not the contract — 2c2'" $f | wc -l)  bare: $(grep -o 'control30 src: the extracted set is not the contract — 2c2' $f | wc -l)"
echo "ok-M5[01] lines: $(grep -cE '^  ok   - M5[01]' $f)"
bash -n OK
M50: count_in_file=1 index=49767 byte_equal=True repl_count=4 repl_differs=True find_len=62 repl_len=11
M51: count_in_file=1 index=49767 byte_equal=True repl_count=0 repl_differs=True find_len=62 repl_len=82
M50 pin quoted: 1  bare: 1
M51 pin quoted: 1  bare: 1
ok-M5[01] lines: 0
> 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)
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40040 Accepted
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40040 Closing
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40048 Accepted
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40048 Closing
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40060 Accepted
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40060 Closing
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40074 Accepted
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40074 Closing
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40090 Accepted
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40090 Closing
[Wed Oct  7 10:16:01 2026] 127.0.0.1:40102 Accepted
[Wed Oct  7 10:16:02 2026] 127.0.0.1:40102 Closing
[Wed Oct  7 10:16:02 2026] 127.0.0.1:40106 Accepted
[Wed Oct  7 10:16:02 2026] 127.0.0.1:40106 Closing
[Wed Oct  7 10:17:53 2026] 127.0.0.1:44758 Accepted
[Wed Oct  7 10:17:54 2026] 127.0.0.1:44758 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50950 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50950 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50952 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50952 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50966 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50966 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50968 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50968 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50972 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50972 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50974 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50974 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50986 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50986 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50998 Accepted
[Wed Oct  7 10:30:11 2026] 127.0.0.1:50998 Closing
[Wed Oct  7 10:30:11 2026] 127.0.0.1:51000 Accepted
[Wed Oct  7 10:30:12 2026] 127.0.0.1:51000 Closing
[Wed Oct  7 10:30:12 2026] 127.0.0.1:51012 Accepted
[Wed Oct  7 10:30:12 2026] 127.0.0.1:51012 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55802 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55802 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55804 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55804 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55810 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55810 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55818 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55818 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55826 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55826 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55834 Accepted
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55834 Closing
[Wed Oct  7 10:31:01 2026] 127.0.0.1:55840 Accepted
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55840 Closing
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55846 Accepted
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55846 Closing
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55854 Accepted
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55854 Closing
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55858 Accepted
[Wed Oct  7 10:31:02 2026] 127.0.0.1:55858 Closing
[Wed Oct  7 10:37:54 2026] 127.0.0.1:37270 Accepted
[Wed Oct  7 10:37:54 2026] 127.0.0.1:37270 Closing
[Wed Oct  7 10:37:54 2026] 127.0.0.1:37272 Accepted

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