Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 835 files, 41.5 MB |
| Latest run log | run-20261001-080602-433.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (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
[0m← [0mEdit 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
[0m← [0mEdit 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
[0m← [0mEdit 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
[0m→ [0mRead repo/tests/test_detached_children.sh [90m[limit=25, offset=930][0m
> build · mimo-v2.6-flash-free
[0m✱ [0mGrep "K13|ctl_run K1|ctl_run K2|ctl_run K3" [90min repo/tests/test_detached_children.sh · 9 matches[0m
> build · mimo-v2.6-flash-free
[0m→ [0mRead repo/tests/test_detached_children.sh [90m[limit=14, offset=914][0m
> build · mimo-v2.6-flash-free
[0m← [0mEdit 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
[0m$ [0mcd /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
[0m$ [0mcd /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
[0m$ [0mcd /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