Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 1197 files, 74.3 MB |
| Latest run log | run-20261006-211819-731.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-211819-731.log | 362 KB | 2026-10-06 19:57:11 |
| 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 |
| 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 |
Tail — run-20261006-204734-730.log (last 200 lines)
# `--mutations` additionally runs the PLANT battery at the end of this file:
# two append-shaped mutants of tools/ip-drift-cron pinned to a section-28
-# assertion (M12/M13), and two mutants of THIS FILE's own source pinned to a
-# `control31 src:` assertion (M14/M15, queue item (af)). Every plant re-runs
-# this suite from a sandbox tree, so a pin is grepped out of a real run of the
-# real assertions. It is opt-in for the reason tests/test_ip_drift_cron.sh's
-# battery is opt-in — every mutant costs a whole extra suite run — while the
-# system-status mutants of section 29 below stay unconditional, as they always
-# have been.
+# assertion (M12/M13), and four mutants of THIS FILE's own source pinned to
+# one `control31 src:` assertion each (M14/M15, queue item (af)) or to one
+# `control28 src:` / `control29 src:` assertion each (M16/M17, queue item
+# (ag)). Every plant re-runs this suite from a sandbox tree, so a pin is
+# grepped out of a real run of the real assertions. It is opt-in for the
+# reason tests/test_ip_drift_cron.sh's battery is opt-in — every mutant costs
+# a whole extra suite run — while the system-status mutants of section 29
+# below stay unconditional, as they always have been.
DO_WRITER_MUT=0
for _arg in "$@"; do
case "$_arg" in
--mutations) DO_WRITER_MUT=1 ;;
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_system_status_ip_drift.sh
Index: repo/tests/test_system_status_ip_drift.sh
===================================================================
--- repo/tests/test_system_status_ip_drift.sh
+++ repo/tests/test_system_status_ip_drift.sh
@@ -298,12 +298,12 @@
"" \
" (no flags) run every assertion in this file (the default)" \
" --mutations additionally run the plant battery: two append-" \
" shaped mutants of tools/ip-drift-cron (pinned to one" \
- " section-28 assertion each) and two mutants of this" \
- " suite's own source (pinned to one control31 src" \
- " assertion each), every plant re-running this suite" \
- " from a sandbox tree" \
+ " section-28 assertion each) and four mutants of this" \
+ " suite's own source (pinned to one control28 src /" \
+ " control29 src / control31 src assertion each), every" \
+ " plant re-running this suite from a sandbox tree" \
"" \
"exit codes: 0 = all pass, 1 = at least one failure, 2 = bad usage"
exit 0 ;;
*)
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_system_status_ip_drift.sh
Index: repo/tests/test_system_status_ip_drift.sh
===================================================================
--- repo/tests/test_system_status_ip_drift.sh
+++ repo/tests/test_system_status_ip_drift.sh
@@ -3236,9 +3236,9 @@
# figures were re-measured on this file after the needles above were
# built by concatenation: `grep -F -c` → 4, `s.count()` → 1 for M14 and
# for M15's 58-byte needle alike.
echo ""
- echo "=== suite-source mutations: control31's own source, defeated, must be caught ==="
+ echo "=== suite-source mutations: this file's own source (control28 / control29 / control31), defeated, must be caught ==="
run_suite_plant() { # <id> <label> <find> <repl> <pin: the expected FAIL assertion>
local id="$1" label="$2" find="$3" repl="$4" expect="$5"
local tree="$SANDBOX/stree-$id" suite out n rc
rm -rf "$tree"; mkdir -p "$tree"
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_system_status_ip_drift.sh
Index: repo/tests/test_system_status_ip_drift.sh
===================================================================
--- repo/tests/test_system_status_ip_drift.sh
+++ repo/tests/test_system_status_ip_drift.sh
@@ -3323,8 +3323,58 @@
run_suite_plant M15 "M15 the row-count expectation is edited down" \
"$M15_A$M15_B" \
'[ "$(meta31 calls)" = "3" ] && [ "$(meta31 rows)" = "18" ]' \
"control31 src: got 4 call site(s) / 24 row(s) (12 anchor + 12 absence), expected 4 / 24 (12 + 12)"
+
+ # ---------------------------------------------------------------------------
+ # Queue item (ag), step (2): the same battery teeth for the two OLDER src
+ # halves in this file — `control28`'s (section 24's body-reading guard) and
+ # `control29`'s (the diagnosis pair-guard) — each of which re-reads THIS
+ # file's source against a written contract and, until this block, had no
+ # mutant in the battery editing what it reads: `run_mutation` copies
+ # `$TOOL`, `run_writer_plant` swaps `tools/ip-drift-cron`, and M14/M15 aim
+ # at `control31`. An edit that loosened either extractor or shrank either
+ # contract therefore had no line that could name it.
+ #
+ # Both shapes were planted OUT OF TREE first (`/tmp/opencode/probe50/`,
+ # `build.sh`, nothing under /data/repo written): `tests/` + the whole
+ # `tools/` copied into three trees from the committed suite (md5
+ # `79ee4c52650eb115e8542fa55823dab7`), each plant applied with
+ # `s.count(find) == 1` asserted inside the script, `bash -n` clean. Clean
+ # tree **759 passed / 0 failed, rc 0**; M16's tree **758 / 1, rc 1**, the
+ # single red `control28 src: the extracted set is not the contract`; M17's
+ # tree **758 / 1, rc 1**, the single red `control29 src: found 3 presence
+ # + 6 absence assertion(s), expected 3 + 6`. One red apiece, on exactly
+ # the pin each call below names: M16 removes a CONTRACT row while the
+ # extraction still returns nine, so the count assertion (which counts the
+ # extraction) stays green; M17 shrinks the COUNT expectation while
+ # extraction and contract both stay put, so the contract assertion (which
+ # diffs the two) stays green. Two shapes on purpose — the src half of
+ # either control has two assertions reading different things, and a
+ # single shape would have pinned only one of them.
+ #
+ # Blindness, measured the way (af) measured it: `--mutations` run over
+ # EACH planted tree with the battery as it then stood → **778 passed /
+ # 1 failed, rc 1** on both, the only red being the plant itself, and
+ # `grep -c 'M16\|M17'` over that whole output → **0** — all fifteen
+ # existing mutants (the thirteen plus M14/M15) still green over a
+ # control whose src half had just been edited, with nothing in the
+ # output saying so. The needles are BUILT, never quoted whole, for the
+ # same self-blindness reason M14/M15 are: this file must not contain the
+ # string it plants or `s.count(find) == 1` would be counting the
+ # plant's own definition beside the copy it moves.
+ M16_A="bad \$LOG_CGN run "
+ M16_B="'ip-drift-check --format json' by hand and read its public_ip."$'\n'
+ run_suite_plant M16 "M16 the control28 contract is shrunk by one row" \
+ "$M16_A$M16_B" \
+ "" \
+ "control28 src: the extracted set is not the contract"
+ M17_A='[ "$NOK29" = "3" ] '
+ M17_B='&& [ "$NAD29" = "6" ]'
+ run_suite_plant M17 "M17 the control29 count expectation is edited down" \
+ "$M17_A$M17_B" \
+ '[ "$NOK29" = "3" ] && [ "$NAD29" = "5" ]' \
+ "control29 src: found 3 presence + 6 absence assertion(s), expected 3 + 6"
fi
echo ""
echo "=== Results: $PASS passed, $FAIL failed ==="
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo; bash -n tests/test_system_status_ip_drift.sh && echo "bash -n OK"; python3 - <<'PY'
s=open('tests/test_system_status_ip_drift.sh').read()
A16="bad\t$LOG_CGN\trun "
B16="'ip-drift-check --format json' by hand and read its public_ip.\n"
A17='[ "$NOK29" = "3" ] '
B17='&& [ "$NAD29" = "6" ]'
print("M16 find count:", s.count(A16+B16))
print("M17 find count:", s.count(A17+B17))
print("tab in M16_A def:", repr([l for l in s.split('\n') if l.startswith(' M16_A=')]))
print("M16_B def:", repr([l for l in s.split('\n') if l.startswith(' M16_B=')]))
PY
bash -n OK
M16 find count: 1
M17 find count: 1
tab in M16_A def: [' M16_A="bad\t\\$LOG_CGN\trun "']
M16_B def: [' M16_B="\'ip-drift-check --format json\' by hand and read its public_ip."$\'\\n\'']
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo; bash tests/test_system_status_ip_drift.sh > /tmp/opencode/probe50/worktree-plain.txt 2>&1; echo "default rc=$?"; grep -F '=== Results:' /tmp/opencode/probe50/worktree-plain.txt; grep -cF ' FAIL - ' /tmp/opencode/probe50/worktree-plain.txt; bash tests/test_system_status_ip_drift.sh --help; echo "help rc=$?"; bash tests/test_system_status_ip_drift.sh --bogus; echo "bogus rc=$?"
default rc=0
=== Results: 759 passed, 0 failed ===
0
usage: bash tests/test_system_status_ip_drift.sh [--mutations]
(no flags) run every assertion in this file (the default)
--mutations additionally run the plant battery: two append-
shaped mutants of tools/ip-drift-cron (pinned to one
section-28 assertion each) and four mutants of this
suite's own source (pinned to one control28 src /
control29 src / control31 src assertion each), every
plant re-running this suite from a sandbox tree
exit codes: 0 = all pass, 1 = at least one failure, 2 = bad usage
help rc=0
unknown argument: --bogus (try --help)
bogus rc=2
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo; bash tests/test_system_status_ip_drift.sh --mutations > /tmp/opencode/probe50/worktree-mut.txt 2>&1; echo "mutations rc=$?"; grep -F '=== Results:' /tmp/opencode/probe50/worktree-mut.txt; grep -F 'FAIL - ' /tmp/opencode/probe50/worktree-mut.txt | head
Command moved to the background (shell ID: sh_1129b9eb1001aUJdspD8gA5QIy).
Output is streaming to: /root/.local/share/opencode/shell/fa3e85b2145a60c127b5c9261e76a7ba6d520299/sh_1129b9eb1001aUJdspD8gA5QIy.out
> build · mimo-v2.6-flash-free
[0m← [0mWrite /tmp/opencode/teeth50/run.sh
Created file successfully: /tmp/opencode/teeth50/run.sh
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo; git status --porcelain; echo "---"; git log --oneline -3; echo "--- probe artefacts outside repo:"; ls /tmp/opencode/probe50 | head
M tests/test_system_status_ip_drift.sh
---
513a377 log: queue item (af) closing memorandum — M14/M15 measured on bda4ac3's bytes
bda4ac3 run 729: 2026-10-06T18:37Z model=opencode/mimo-v2.6-flash-free
8015cee log: queue item (ae) closing memorandum — control31 measured on 038c152's bytes
--- probe artefacts outside repo:
build.sh
clean
clean-plain.txt
p28
p28-mut.rc
p28-mut.txt
p28-plain.txt
p29
p29-mut.rc
p29-mut.txt
> build · mimo-v2.6-flash-free
[0m$ [0mchmod +x /tmp/opencode/teeth50/run.sh && bash /tmp/opencode/teeth50/run.sh 2>&1 | tail -30
Command moved to the background (shell ID: sh_1129d9e56001Br8jQ81LOkEgQx).
Output is streaming to: /root/.local/share/opencode/shell/fa3e85b2145a60c127b5c9261e76a7ba6d520299/sh_1129d9e56001Br8jQ81LOkEgQx.out
> build · mimo-v2.6-flash-free
Both measurement runs are going in the background (the opt-in battery over the edited suite, and the teeth-redirect check for the two new pins). Waiting for them before writing the changelog/PROGRESS numbers.
exit=0
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 21:45:28 2026] 127.0.0.1:50034 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50034 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50042 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50042 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50046 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50046 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50062 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50062 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50074 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50074 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50088 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50088 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50092 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50092 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50098 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50098 Closing [Tue Oct 6 21:45:28 2026] 127.0.0.1:50114 Accepted [Tue Oct 6 21:45:28 2026] 127.0.0.1:50114 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59448 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59448 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59454 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59454 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59464 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59464 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59478 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59478 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59492 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59492 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59504 Accepted [Tue Oct 6 21:45:59 2026] 127.0.0.1:59504 Closing [Tue Oct 6 21:45:59 2026] 127.0.0.1:59516 Accepted [Tue Oct 6 21:46:00 2026] 127.0.0.1:59516 Closing [Tue Oct 6 21:46:00 2026] 127.0.0.1:59518 Accepted [Tue Oct 6 21:46:00 2026] 127.0.0.1:59518 Closing [Tue Oct 6 21:46:00 2026] 127.0.0.1:59532 Accepted [Tue Oct 6 21:46:00 2026] 127.0.0.1:59532 Closing [Tue Oct 6 21:46:00 2026] 127.0.0.1:59538 Accepted [Tue Oct 6 21:46:00 2026] 127.0.0.1:59538 Closing [Tue Oct 6 21:48:21 2026] 127.0.0.1:43072 Accepted [Tue Oct 6 21:48:21 2026] 127.0.0.1:43072 Closed without sending a request; it was probably just an unused speculative preconnection [Tue Oct 6 21:48:21 2026] 127.0.0.1:43072 Closing [Tue Oct 6 21:48:22 2026] 127.0.0.1:43078 Accepted [Tue Oct 6 21:48:22 2026] 127.0.0.1:43078 Closed without sending a request; it was probably just an unused speculative preconnection [Tue Oct 6 21:48:22 2026] 127.0.0.1:43078 Closing [Tue Oct 6 21:48:57 2026] 127.0.0.1:51470 Accepted [Tue Oct 6 21:48:57 2026] 127.0.0.1:51470 Closed without sending a request; it was probably just an unused speculative preconnection [Tue Oct 6 21:48:57 2026] 127.0.0.1:51470 Closing [Tue Oct 6 21:48:59 2026] 127.0.0.1:51484 Accepted [Tue Oct 6 21:48:59 2026] 127.0.0.1:51484 Closed without sending a request; it was probably just an unused speculative preconnection [Tue Oct 6 21:48:59 2026] 127.0.0.1:51484 Closing [Tue Oct 6 21:55:08 2026] 127.0.0.1:55634 Accepted [Tue Oct 6 21:55:08 2026] 127.0.0.1:55634 Closing [Tue Oct 6 21:55:10 2026] 127.0.0.1:55644 Accepted [Tue Oct 6 21:55:10 2026] 127.0.0.1:55644 Closing [Tue Oct 6 21:56:01 2026] 127.0.0.1:49322 Accepted [Tue Oct 6 21:56:02 2026] 127.0.0.1:49322 Closing [Tue Oct 6 21:56:50 2026] 127.0.0.1:37466 Accepted [Tue Oct 6 21:56:50 2026] 127.0.0.1:37466 Closing [Tue Oct 6 21:57:15 2026] 127.0.0.1:57490 Accepted
Generated 2026-10-06 19:57:15 UTC · Gladex.de