Gladex Agent Logs

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

Overview
Run logs835 files, 41.5 MB
Latest run logrun-20261001-080602-433.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261001-080602-433.log 218 KB 2026-10-01 06:25:55
run-20261001-065553-432.log 373 KB 2026-10-01 05:55:55
run-20261001-050850-431.log 523 KB 2026-10-01 04:45:47
run-20261001-042252-430.log 198 KB 2026-10-01 02:58:43
run-20261001-032127-429.log 327 KB 2026-10-01 02:12:46
run-20261001-022005-428.log 263 KB 2026-10-01 01:11:21
run-20261001-020022-427.log 205 KB 2026-10-01 00:09:58
run-20261001-015015-426.log 153 B 2026-09-30 23:50:16
run-20261001-014008-425.log 153 B 2026-09-30 23:40:09
run-20261001-013001-424.log 153 B 2026-09-30 23:30:02
run-20261001-011954-423.log 153 B 2026-09-30 23:19:55
run-20261001-010947-422.log 153 B 2026-09-30 23:09:48
run-20261001-005940-421.log 153 B 2026-09-30 22:59:41
run-20261001-004933-420.log 153 B 2026-09-30 22:49:34
run-20261001-003926-419.log 153 B 2026-09-30 22:39:27
run-20261001-002920-418.log 190 B 2026-09-30 22:29:20
run-20261001-001913-417.log 153 B 2026-09-30 22:19:13
run-20261001-000906-416.log 153 B 2026-09-30 22:09:07
run-20260930-231805-415.log 582 KB 2026-09-30 21:59:00
run-20260930-223504-414.log 194 KB 2026-09-30 21:07:59
run-20260930-212614-413.log 270 KB 2026-09-30 20:24:58
run-20260930-201407-412.log 423 KB 2026-09-30 19:16:08
run-20260930-184629-411.log 463 KB 2026-09-30 18:04:01
run-20260930-165104-410.log 325 KB 2026-09-30 16:36:29
run-20260930-161443-409.log 189 KB 2026-09-30 14:41:04
run-20260930-160441-408.log 153 B 2026-09-30 14:04:43
run-20260930-155440-407.log 153 B 2026-09-30 13:54:41
run-20260930-154440-406.log 153 B 2026-09-30 13:44:40
run-20260930-153439-405.log 153 B 2026-09-30 13:34:40
run-20260930-152438-404.log 190 B 2026-09-30 13:24:39
run-20260930-151438-403.log 190 B 2026-09-30 13:14:38
run-20260930-150437-402.log 153 B 2026-09-30 13:04:37
run-20260930-145436-401.log 153 B 2026-09-30 12:54:37
run-20260930-144435-400.log 153 B 2026-09-30 12:44:36
run-20260930-143435-399.log 190 B 2026-09-30 12:34:35
run-20260930-142434-398.log 153 B 2026-09-30 12:24:35
run-20260930-141433-397.log 153 B 2026-09-30 12:14:34
run-20260930-140433-396.log 153 B 2026-09-30 12:04:33
run-20260930-135432-395.log 153 B 2026-09-30 11:54:33
run-20260930-134431-394.log 153 B 2026-09-30 11:44:32
run-20260930-133431-393.log 190 B 2026-09-30 11:34:31
run-20260930-132430-392.log 153 B 2026-09-30 11:24:31
run-20260930-131429-391.log 153 B 2026-09-30 11:14:30
run-20260930-130429-390.log 153 B 2026-09-30 11:04:29
run-20260930-125428-389.log 153 B 2026-09-30 10:54:29
run-20260930-124427-388.log 153 B 2026-09-30 10:44:28
run-20260930-123427-387.log 153 B 2026-09-30 10:34:27
run-20260930-122426-386.log 153 B 2026-09-30 10:24:27
run-20260930-121425-385.log 153 B 2026-09-30 10:14:26
run-20260930-120425-384.log 153 B 2026-09-30 10:04:25
Tail — run-20261001-080602-433.log (last 200 lines)
-  # mutated line by line would be a fourth implementation to get wrong.
+  # mutated line by line would be a fourth implementation to get wrong. Since
+  # [0.4.151] they are the historical PAIRING/COUNTING logic on today's shared
+  # premise (the (101) widened terminator, and the tail that keeps the
+  # separator): K14 and K15 are what take that premise away.
   cat > "$CTL/last_vs_last.awk" <<'AWK'
 BGWAIT_AWK='
 BEGIN { lastbg = 0; lastwait = 0 }
 {
   line = $0
   if (match(line, /(^|[ \t])#/)) line = substr(line, 1, RSTART - 1)
   if (line ~ /(^|[^&<>])&[ \t]*$/) lastbg = NR
-  if (line ~ /(^|[; \t])wait([ \t]|$)/) lastwait = NR
+  if (line ~ /(^|[; \t])wait([ \t;|]|$)/) lastwait = NR
 }
 END { print ((lastwait > 0 && lastwait > lastbg) ? 0 : 1) }
 '
 AWK
@@ -778,10 +781,12 @@
 {
   line = $0
   if (match(line, /(^|[ \t])#/)) line = substr(line, 1, RSTART - 1)
   if (line ~ /(^|[^&<>])&[ \t]*$/) { pending++; next }
-  if (match(line, /(^|[; \t])wait([ \t]|$)/)) {
-    tail = substr(line, RSTART + RLENGTH)
+  if (match(line, /(^|[; \t])wait([ \t;|]|$)/)) {
+    mt = substr(line, RSTART, RLENGTH)
+    off = (mt ~ /[ \t;|]$/) ? RLENGTH - 1 : RLENGTH
+    tail = substr(line, RSTART + off)
     n = split(tail, tok, /[ \t]+/)
     nargs = 0
     for (i = 1; i <= n; i++) {
       t = tok[i]

> build · mimo-v2.6-flash-free
← Edit repo/tests/test_detached_children.sh
Index: repo/tests/test_detached_children.sh
===================================================================
--- repo/tests/test_detached_children.sh
+++ repo/tests/test_detached_children.sh
@@ -759,9 +759,9 @@
   }
 
   # The two replaced readers, written once and swapped in whole — a reader
   # mutated line by line would be a fourth implementation to get wrong. Since
-  # [0.4.151] they are the historical PAIRING/COUNTING logic on today's shared
+  # [0.4.152] they are the historical PAIRING/COUNTING logic on today's shared
   # premise (the (101) widened terminator, and the tail that keeps the
   # separator): K14 and K15 are what take that premise away.
   cat > "$CTL/last_vs_last.awk" <<'AWK'
 BGWAIT_AWK='

> build · mimo-v2.6-flash-free
← Edit repo/tests/test_detached_children.sh
Index: repo/tests/test_detached_children.sh
===================================================================
--- repo/tests/test_detached_children.sh
+++ repo/tests/test_detached_children.sh
@@ -861,9 +861,9 @@
   ctl_replace "$d/tests/test_detached_children.sh" 'if (nargs == 0) cover_all()' \
     '    if (nargs == 0) cover_one()'
   assert_eq "K7a plant applied: the bare-wait branch now covers one child (copy yes / live no)" \
     "yes no" "$(has_pre "$d/tests/test_detached_children.sh" 'if (nargs == 0) cover_one()') $(has_pre "$TESTS_DIR/test_detached_children.sh" 'if (nargs == 0) cover_one()')"
-  ctl_run K7 "A16" "$d"
+  ctl_run K7 "A16 A32" "$d"
   rm -rf "$d"
 
   # K8 — the cmd-str rule removed: the code-as-string call site goes
   #      unreported and the live non-vacuity (ten of them, zero others) with it.

> build · mimo-v2.6-flash-free
← Edit repo/tests/test_detached_children.sh
Index: repo/tests/test_detached_children.sh
===================================================================
--- repo/tests/test_detached_children.sh
+++ repo/tests/test_detached_children.sh
@@ -855,9 +855,11 @@
   ctl_run K6 "A15 A27 A28 A29 B14" "$d"
   rm -rf "$d"
 
   # K7 — the over-correction the (84) fix must not make: a bare `wait` covers
-  #      only one child.
+  #      only one child. A32 reddens with A16 since [0.4.152]: a bare wait
+  #      closed by a separator over three children is the same subject, so the
+  #      over-correction plant now has two instances — measured, not assumed.
   d="$CTL/k7"; ctl_copy k7
   ctl_replace "$d/tests/test_detached_children.sh" 'if (nargs == 0) cover_all()' \
     '    if (nargs == 0) cover_one()'
   assert_eq "K7a plant applied: the bare-wait branch now covers one child (copy yes / live no)" \

> build · mimo-v2.6-flash-free
→ Read repo/tests/test_detached_children.sh [limit=25, offset=930]
> build · mimo-v2.6-flash-free
✱ Grep "K13|ctl_run K1|ctl_run K2|ctl_run K3" in repo/tests/test_detached_children.sh · 9 matches
> build · mimo-v2.6-flash-free
→ Read repo/tests/test_detached_children.sh [limit=14, offset=914]
> build · mimo-v2.6-flash-free
← Edit repo/tests/test_detached_children.sh
Index: repo/tests/test_detached_children.sh
===================================================================
--- repo/tests/test_detached_children.sh
+++ repo/tests/test_detached_children.sh
@@ -920,8 +920,36 @@
   assert_eq "K13a plant applied: the operator cut is gone from the copy (no) and still live (yes)" \
     "no yes" "$(has_pre "$d/tests/test_detached_children.sh" 'if (match(tail,') $(has_pre "$TESTS_DIR/test_detached_children.sh" 'if (match(tail,')"
   ctl_run K13 "A29" "$d"
   rm -rf "$d"
+
+  # K14 — queue item (101)'s premise, taken away: BOTH live readers go back to
+  #       a terminator class that accepts only a space or end of line, so a
+  #       wait closed by a separator is invisible to the census and to the
+  #       pairing at once. The two replacement readers keep the premise (they
+  #       isolate pairing and counting instead), which is why only the live
+  #       readers redden — and they redden on exactly the (101) plants.
+  d="$CTL/k14"; ctl_copy k14
+  ctl_replace "$d/tests/test_detached_children.sh" 'wait([ \t;|]|$)/) print "WAIT " NR' \
+    '  if (line ~ /(^|[; \t])wait([ \t]|$)/) print "WAIT " NR'
+  ctl_replace "$d/tests/test_detached_children.sh" 'wait([ \t;|]|$)/)) {' \
+    '  if (match(line, /(^|[; \t])wait([ \t]|$)/)) {'
+  assert_eq "K14a plant applied: the widened terminator class is gone from BOTH readers in the copy (no) and still live (yes)" \
+    "no yes" "$(has_pre "$d/tests/test_detached_children.sh" 'wait([ \t;|]|$)') $(has_pre "$TESTS_DIR/test_detached_children.sh" 'wait([ \t;|]|$)')"
+  ctl_run K14 "A30 A31 A32 B18" "$d"
+  rm -rf "$d"
+
+  # K15 — the other half of (101): the separator is part of the match, so the
+  #       tail must hand it back. With it eaten, `wait; echo done` reads
+  #       `echo done` as two job names and covers two of the file's three
+  #       children — a correct file judged not waited. A32 is that file.
+  d="$CTL/k15"; ctl_copy k15
+  ctl_replace "$d/tests/test_detached_children.sh" 'tail = substr(line, RSTART + off)' \
+    '    tail = substr(line, RSTART + RLENGTH)'
+  assert_eq "K15a plant applied: the tail swallows the separator again (copy yes) while the live reader hands it back (no)" \
+    "yes no" "$(has_pre "$d/tests/test_detached_children.sh" 'RSTART + RLENGTH') $(has_pre "$TESTS_DIR/test_detached_children.sh" 'RSTART + RLENGTH')"
+  ctl_run K15 "A32" "$d"
+  rm -rf "$d"
 fi
 
 # --- summary -------------------------------------------------------------------------------------
 echo ""

> build · mimo-v2.6-flash-free
$ cd /data/repo && awk '/^# --- K: the mutation controls/{exit} {print}' tests/test_detached_children.sh > /tmp/opencode/m101/pre.txt && wc -l /tmp/opencode/m101/pre.txt && for p in 'wait([ \t;|]|$)/) print "WAIT " NR' 'wait([ \t;|]|$)/)) {' 'tail = substr(line, RSTART + off)' 'RSTART + RLENGTH' 'if (match(tail,' 'if (nargs == 0) cover_all()' 'if (nm in varjob' 'for (i = 1; i <= n; i++) {' 'lastwait' 'cover_one(' 'pending--' 'i <= 1 && i <= n' 'NR " cmd-str"' ')(python3?|bash|zsh|sh)' '(source|' 'if (line ~ /source/)' 'wait([ \t;|]|$)'; do printf '%-45s %s\n' "$p" "$(grep -cF -- "$p" /tmp/opencode/m101/pre.txt)"; done
636 /tmp/opencode/m101/pre.txt
wait([ \t;|]|$)/) print "WAIT " NR            1
wait([ \t;|]|$)/)) {                          1
tail = substr(line, RSTART + off)             1
RSTART + RLENGTH                              0
if (match(tail,                               1
if (nargs == 0) cover_all()                   1
if (nm in varjob                              1
for (i = 1; i <= n; i++) {                    1
lastwait                                      0
cover_one(                                    3
pending--                                     0
i <= 1 && i <= n                              0
NR " cmd-str"                                 1
)(python3?|bash|zsh|sh)                       1
(source|                                      1
if (line ~ /source/)                          0
wait([ \t;|]|$)                               2
> build · mimo-v2.6-flash-free
$ cd /data/repo && bash -n tests/test_detached_children.sh && echo "syntax OK"; grep -n "passed, .* failed" tests/test_detached_children.sh | tail -3
syntax OK
746:      's/^detached-children suite: \([0-9]*\) passed, \([0-9]*\) failed$/\1 \2/p' | tail -1)
957:echo "detached-children suite: $PASS passed, $FAIL failed"
> build · mimo-v2.6-flash-free
$ cd /data/repo && DETCHILD_CONTROLS=skip bash tests/test_detached_children.sh 2>&1 | tail -30
PASS: A30 plant: a wait closed by a separator IS in the census's WAIT records (it printed none before the class widened)
PASS: A31 plant: that same wait reads as WAITED — the pairing covers the child it reaps
PASS: A32 plant: 'wait; echo done' stays a BARE wait, so all three children read as waited (a tail that eats the separator covers two of them)
PASS: B1 outer bound kills the tool itself (124)
PASS: B2 the fixture's child was alive while the bound was still running (non-vacuity)
PASS: B3 wait-shape grandchild dies WITH the bound — same-group children are reachable
PASS: B4 outer bound still kills the setsid tool itself (124)
PASS: B5 foreign-session child ESCAPES the same bound — the (74) class, live
PASS: B6 and it is in a session of its own, not the fixture's
PASS: B7 orphaned: reparented to init the moment its parent died
PASS: B8 the unwaited fixture exits 0 immediately
PASS: B9 and leaves its child behind, orphaned — the counter really counts
PASS: B11 the (84) fixture exits as soon as the ONE child it waited for is done
PASS: B12 and the child it never waited for is STILL ALIVE — the file last-vs-last called waited
PASS: B13 while the child it did wait for is gone — one wait, one child, measured
PASS: B14 the reader's verdict on this very fixture: NOT waited — one job named twice leaves a child uncovered
PASS: B15 the fixture is finished long before its 61 s child would be (1 s, not 61)
PASS: B16 the job it DID wait for is gone — the two waits really did reap it
PASS: B17 and the unnamed sibling is STILL ALIVE — two waits for one pid are one wait, which is what the counting reader missed
PASS: B18 the reader's verdict on this very fixture: WAITED — a bare wait closed by a separator covers the child it started
PASS: B19 the fixture exits 0 — its wait really did complete instead of orphaning the child
PASS: B20 and the child it waited for is gone — the separator-terminated wait really did reap it
PASS: B10 every fixture child this suite started is gone after the reap
PASS: C1 no tool creates a foreign session without owning the cleanup for it
PASS: C2 exactly one tool needs that guard (the count of foreign-session tools)
PASS: C3 no fixture process outlives this suite

=================================
detached-children suite: 56 passed, 0 failed
=================================
> build · mimo-v2.6-flash-free
A/B/C sections green at exactly **56** (the pinned child count). Now the full run with all 15 controls:

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)
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48464 Accepted
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48464 Closing
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48480 Accepted
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48480 Closing
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48482 Accepted
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48482 Closing
[Thu Oct  1 07:53:38 2026] 127.0.0.1:48496 Accepted
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48496 Closing
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48506 Accepted
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48506 Closing
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48510 Accepted
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48510 Closing
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48514 Accepted
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48514 Closing
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48520 Accepted
[Thu Oct  1 07:53:39 2026] 127.0.0.1:48520 Closing
[Thu Oct  1 07:54:02 2026] 127.0.0.1:54886 Accepted
[Thu Oct  1 07:54:02 2026] 127.0.0.1:54886 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45760 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45760 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45776 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45776 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45788 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45788 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45790 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45790 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45804 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45804 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45818 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45818 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45824 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45824 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45834 Accepted
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45834 Closing
[Thu Oct  1 07:54:49 2026] 127.0.0.1:45840 Accepted
[Thu Oct  1 07:54:50 2026] 127.0.0.1:45840 Closing
[Thu Oct  1 07:54:50 2026] 127.0.0.1:45844 Accepted
[Thu Oct  1 07:54:50 2026] 127.0.0.1:45844 Closing
[Thu Oct  1 07:57:56 2026] 127.0.0.1:57052 Accepted
[Thu Oct  1 07:57:56 2026] 127.0.0.1:57052 Closing
[Thu Oct  1 07:57:56 2026] 127.0.0.1:57066 Accepted
[Thu Oct  1 07:57:56 2026] 127.0.0.1:57066 Closing
[Thu Oct  1 08:10:02 2026] 127.0.0.1:43004 Accepted
[Thu Oct  1 08:10:03 2026] 127.0.0.1:43004 Closing
[Thu Oct  1 08:10:27 2026] 127.0.0.1:39954 Accepted
[Thu Oct  1 08:10:27 2026] 127.0.0.1:39954 Closing
[Thu Oct  1 08:17:26 2026] 127.0.0.1:32974 Accepted
[Thu Oct  1 08:17:26 2026] 127.0.0.1:32974 Closing
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40234 Accepted
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40234 Closing
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40242 Accepted
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40242 Closing
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40258 Accepted
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40258 Closing
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40260 Accepted
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40260 Closing
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40270 Accepted
[Thu Oct  1 08:26:00 2026] 127.0.0.1:40270 Closing
[Thu Oct  1 08:26:05 2026] 127.0.0.1:48678 Accepted

Generated 2026-10-01 06:26:05 UTC · Gladex.de