Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 523 files, 17.2 MB |
| Latest run log | run-20260926-024118-121.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260926-024118-121.log | 130 KB | 2026-09-26 00:56:55 |
| run-20260926-020038-120.log | 273 KB | 2026-09-26 00:31:18 |
| run-20260926-015037-119.log | 153 B | 2026-09-25 23:50:38 |
| run-20260926-014036-118.log | 153 B | 2026-09-25 23:40:37 |
| run-20260926-013035-117.log | 153 B | 2026-09-25 23:30:36 |
| run-20260926-012035-116.log | 153 B | 2026-09-25 23:20:35 |
| run-20260926-011034-115.log | 153 B | 2026-09-25 23:10:35 |
| run-20260926-010033-114.log | 153 B | 2026-09-25 23:00:34 |
| run-20260926-005033-113.log | 190 B | 2026-09-25 22:50:33 |
| run-20260926-004031-112.log | 153 B | 2026-09-25 22:40:33 |
| run-20260926-003030-111.log | 153 B | 2026-09-25 22:30:31 |
| run-20260926-002029-110.log | 153 B | 2026-09-25 22:20:30 |
| run-20260926-001029-109.log | 153 B | 2026-09-25 22:10:29 |
| run-20260926-000025-108.log | 190 B | 2026-09-25 22:00:29 |
| run-20260925-235025-107.log | 153 B | 2026-09-25 21:50:25 |
| run-20260925-234024-106.log | 153 B | 2026-09-25 21:40:25 |
| run-20260925-233023-105.log | 153 B | 2026-09-25 21:30:24 |
| run-20260925-232022-104.log | 153 B | 2026-09-25 21:20:23 |
| run-20260925-231021-103.log | 153 B | 2026-09-25 21:10:22 |
| run-20260925-230021-102.log | 153 B | 2026-09-25 21:00:21 |
| run-20260925-225020-101.log | 190 B | 2026-09-25 20:50:21 |
| run-20260925-224019-100.log | 153 B | 2026-09-25 20:40:19 |
| run-20260925-223018-99.log | 152 B | 2026-09-25 20:30:19 |
| run-20260925-222017-98.log | 152 B | 2026-09-25 20:20:18 |
| run-20260925-221016-97.log | 152 B | 2026-09-25 20:10:17 |
| run-20260925-220015-96.log | 152 B | 2026-09-25 20:00:16 |
| run-20260925-213653-95.log | 141 KB | 2026-09-25 19:50:15 |
| run-20260925-205157-94.log | 389 KB | 2026-09-25 19:26:53 |
| run-20260925-195858-93.log | 517 KB | 2026-09-25 18:41:57 |
| run-20260925-192850-92.log | 321 KB | 2026-09-25 17:48:58 |
| run-20260925-185030-91.log | 325 KB | 2026-09-25 17:18:50 |
| run-20260925-180536-90.log | 232 KB | 2026-09-25 16:40:30 |
| run-20260925-173957-89.log | 252 KB | 2026-09-25 15:55:36 |
| run-20260925-171044-88.log | 201 KB | 2026-09-25 15:29:57 |
| run-20260925-163300-87.log | 247 KB | 2026-09-25 15:00:44 |
| run-20260925-160013-86.log | 175 KB | 2026-09-25 14:23:00 |
| run-20260925-153430-85.log | 158 KB | 2026-09-25 13:50:13 |
| run-20260925-152430-84.log | 152 B | 2026-09-25 13:24:30 |
| run-20260925-151428-83.log | 189 B | 2026-09-25 13:14:30 |
| run-20260925-150428-82.log | 152 B | 2026-09-25 13:04:28 |
| run-20260925-145427-81.log | 152 B | 2026-09-25 12:54:28 |
| run-20260925-144426-80.log | 152 B | 2026-09-25 12:44:27 |
| run-20260925-143426-79.log | 152 B | 2026-09-25 12:34:26 |
| run-20260925-142425-78.log | 189 B | 2026-09-25 12:24:26 |
| run-20260925-141424-77.log | 152 B | 2026-09-25 12:14:25 |
| run-20260925-140424-76.log | 152 B | 2026-09-25 12:04:24 |
| run-20260925-135423-75.log | 152 B | 2026-09-25 11:54:24 |
| run-20260925-134422-74.log | 152 B | 2026-09-25 11:44:23 |
| run-20260925-133422-73.log | 152 B | 2026-09-25 11:34:22 |
| run-20260925-132421-72.log | 152 B | 2026-09-25 11:24:22 |
Tail โ run-20260926-024118-121.log (last 200 lines)
+ fwrite(STDERR, "precondition: expected exactly 1 else and 3 skip() in section 6, found $elses/$skips\n");
+ exit(3);
+}
+$start = strpos($s, ' } else {', $s6start);
+if ($start === false || $start > $s6end) { fwrite(STDERR, "precondition: section 6's else block was not found\n"); exit(3); }
+
$needle = 'NOT CHECKED ($why)");';
$e = strrpos($s, $needle);
if ($e === false || $e < $start) { fwrite(STDERR, "precondition: the third skip() call was not found after the else\n"); exit(3); }
$e += strlen($needle);
> build ยท mimo-v2.6-flash-free
[0mโ [0mEdit /tmp/opencode/contrastfix/mutate.php
Index: /tmp/opencode/contrastfix/mutate.php
===================================================================
--- /tmp/opencode/contrastfix/mutate.php
+++ /tmp/opencode/contrastfix/mutate.php
@@ -57,14 +57,28 @@
/* --- the mutation must actually be a mutation, and must be surgical --- */
if (md5($mutant) === md5($s)) { fwrite(STDERR, "precondition: mutant is byte-identical to the original\n"); exit(4); }
$ms = file_get_contents($mut);
-$mElses = preg_match_all('/\belse\b/', substr($ms, strpos($ms, 'echo "\n=== 6.')));
-$mSkips = preg_match_all('/\bskip\s*\(/', substr($ms, strpos($ms, 'echo "\n=== 6.'), strpos($ms, 'echo "\n=== Results:') - strpos($ms, 'echo "\n=== 6.')));
+$msStart = strpos($ms, 'echo "\n=== 6.');
+$msEnd = strpos($ms, 'echo "\n=== Results:');
+if ($msStart === false || $msEnd === false || $msEnd < $msStart) {
+ fwrite(STDERR, "precondition: mutant's section 6 bounds not found\n");
+ exit(4);
+}
+$ms6 = substr($ms, $msStart, $msEnd - $msStart);
+$mElses = preg_match_all('/\belse\b/', $ms6);
+$mSkips = preg_match_all('/\bskip\s*\(/', $ms6);
if ($mElses !== 0 || $mSkips !== 0) {
- fwrite(STDERR, "precondition: mutant should have 0 else and 0 skip in section 6, got $mElses/$mSkips\n");
+ fwrite(STDERR, "precondition: mutant should have 0 else and 0 skip() in section 6, got $mElses/$mSkips\n");
exit(4);
}
+/* The surgery must not have reached outside section 6. */
+$outside = str_replace($ms6, '', $ms);
+$origOutside = str_replace($s6, '', $s);
+if (md5($outside) !== md5($origOutside)) {
+ fwrite(STDERR, "precondition: the mutation changed something OUTSIDE section 6\n");
+ exit(4);
+}
lint($mut);
echo "MUTANT=$mut\n";
echo "original_md5=" . md5($s) . "\n";
> build ยท mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && php /tmp/opencode/contrastfix/mutate.php; echo "MUTATE_EXIT=$?"
MUTANT=/tmp/opencode/contrastfix/mutant_no_else.php
original_md5=3abb053a73c86dc2397c6329f50e1dab
mutant_md5=8249169517bf4933b9cce23915544b71
section6: else 1 -> 0, skip() 3 -> 0
MUTATE_EXIT=0
> build ยท mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && APP_CONTRAST_SUITE=/tmp/opencode/contrastfix/mutant_no_else.php php tests/test_app_contrast_meta.php > /tmp/opencode/contrastfix/mutation-run.log 2>&1; echo "MUTANT_META_EXIT=$?"; grep -E '^ (FAIL|PASS): (F1|F2)' /tmp/opencode/contrastfix/mutation-run.log | head -30; echo "---"; tail -2 /tmp/opencode/contrastfix/mutation-run.log; echo "--- sanity: real suite untouched ---"; php tests/test_app_contrast.php 2>&1 | tail -2; md5sum tests/test_app_contrast.php
MUTANT_META_EXIT=1
PASS: F1 fixture removed all four --accent-text declarations (got 4)
PASS: F2 fixture garbled all four --accent-text values (got 4)
PASS: F1 fixture still references var(--accent-text) at all nine accent sites (the sites were never the defect)
PASS: F1: every path and served base the copy needed was present to redirect
PASS: F1: no original path or served base survives the copy (leftover: none)
PASS: F2: every path and served base the copy needed was present to redirect
PASS: F2: no original path or served base survives the copy (leftover: none)
PASS: F1: exit code is 1 (got 1) โ a broken document must be red, not green and not 255
PASS: F1: no PHP fatal โ an unparseable token must not abort the suite
PASS: F1: the suite reached its own === Results: line (a consumer always gets a verdict)
PASS: F1: section 6 ran
FAIL: F1: section 6 reports 12 counted skips โ 3 suppressed properties x 4 documents (got 0)
PASS: F1: section 6 still FAILS the token once per document (got 4) โ skipped is not the same as passed
PASS: F1: all four documents were exercised in section 6 (got 4)
FAIL: F1: 'differs' is reported as SKIP on all four documents (got 0)
FAIL: F1: 'surface' is reported as SKIP on all four documents (got 0)
FAIL: F1: 'bg' is reported as SKIP on all four documents (got 0)
PASS: F1: every skipped document also carries its token failure (no skip without a verdict)
PASS: F2: exit code is 1 (got 1) โ a broken document must be red, not green and not 255
PASS: F2: no PHP fatal โ an unparseable token must not abort the suite
PASS: F2: the suite reached its own === Results: line (a consumer always gets a verdict)
PASS: F2: section 6 ran
FAIL: F2: section 6 reports 12 counted skips โ 3 suppressed properties x 4 documents (got 0)
PASS: F2: section 6 still FAILS the token once per document (got 4) โ skipped is not the same as passed
PASS: F2: all four documents were exercised in section 6 (got 4)
FAIL: F2: 'differs' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'surface' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'bg' is reported as SKIP on all four documents (got 0)
PASS: F2: every skipped document also carries its token failure (no skip without a verdict)
---
=== Results: 38 passed, 10 failed, 0 skipped ===
--- sanity: real suite untouched ---
=== Results: 185 passed, 0 failed, 0 skipped ===
3abb053a73c86dc2397c6329f50e1dab tests/test_app_contrast.php
> build ยท mimo-v2.6-flash-free
Mutation M1 caught (10 failures), real suite untouched. But F2's crash assertions never bit โ adding **M2** to prove they do:
[0mโ [0mWrite /tmp/opencode/contrastfix/mutate.php
Wrote file successfully: /tmp/opencode/contrastfix/mutate.php
> build ยท mimo-v2.6-flash-free
[0mโ [0mEdit /tmp/opencode/contrastfix/mutate.php
Index: /tmp/opencode/contrastfix/mutate.php
===================================================================
--- /tmp/opencode/contrastfix/mutate.php
+++ /tmp/opencode/contrastfix/mutate.php
@@ -81,5 +81,5 @@
echo "mode=$mode\n";
echo "original_md5=" . md5($s) . "\nmutant_md5=" . md5($out) . "\n";
echo "section6 bytes: " . strlen($s6) . " -> " . strlen($newS6) . "\n";
echo "section6 else: " . preg_match_all('/\belse\b/', $s6) . " -> " . preg_match_all('/\belse\b/', $newS6) . "\n";
-echo "section6 skip(): " . preg_match_all('/\bskip\s*\(/', $s6) . " -> " . preg_match_all('/\bskip\s*\(//', $newS6) . "\n";
+echo "section6 skip(): " . preg_match_all('/\bskip\s*\(/', $s6) . " -> " . preg_match_all('/\bskip\s*\(/', $newS6) . "\n";
> build ยท mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && for m in M1 M2; do echo "########## $m ##########"; php /tmp/opencode/contrastfix/mutate.php $m || { echo "BUILD FAILED"; continue; }; MUT=$(php /tmp/opencode/contrastfix/mutate.php $m | sed -n 's/^MUTANT=//p'); APP_CONTRAST_SUITE="$MUT" php tests/test_app_contrast_meta.php > /tmp/opencode/contrastfix/mutation-$m.log 2>&1; echo "meta exit=$?"; grep '^ FAIL:' /tmp/opencode/contrastfix/mutation-$m.log; tail -1 /tmp/opencode/contrastfix/mutation-$m.log; done; echo "=== real suite untouched ==="; md5sum tests/test_app_contrast.php; php tests/test_app_contrast.php 2>&1 | tail -1
########## M1 ##########
precondition: mutation leaked outside section 6
BUILD FAILED
########## M2 ##########
precondition: mutation leaked outside section 6
BUILD FAILED
=== real suite untouched ===
3abb053a73c86dc2397c6329f50e1dab tests/test_app_contrast.php
=== Results: 185 passed, 0 failed, 0 skipped ===
> build ยท mimo-v2.6-flash-free
The splice is by construction; my *verification* of it used a stale offset (the tail moved when the block changed length):
[0mโ [0mEdit /tmp/opencode/contrastfix/mutate.php
Index: /tmp/opencode/contrastfix/mutate.php
===================================================================
--- /tmp/opencode/contrastfix/mutate.php
+++ /tmp/opencode/contrastfix/mutate.php
@@ -66,10 +66,17 @@
$out = substr($s, 0, $s6start) . $newS6 . substr($s, $s6end);
file_put_contents($mut, $out);
if (md5($out) === md5($s)) { fwrite(STDERR, "precondition: mutant identical to original\n"); exit(4); }
-/* Everything outside section 6 must be byte-identical. */
-if (substr($out, 0, $s6start) !== substr($s, 0, $s6start) || substr($out, $s6end) !== substr($s, $s6end)) {
+/*
+ * Everything outside section 6 must be byte-identical. The tail's OFFSET in
+ * $out moves by the block's length delta, so it is compared at
+ * $s6start + strlen($newS6) โ indexing it at $s6end (the offset in the
+ * ORIGINAL) is the bug this check was first written with, and it failed both
+ * mutations on correct splices.
+ */
+if (substr($out, 0, $s6start) !== substr($s, 0, $s6start)
+ || substr($out, $s6start + strlen($newS6)) !== substr($s, $s6end)) {
fwrite(STDERR, "precondition: mutation leaked outside section 6\n"); exit(4);
}
$lines = [];
> build ยท mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && for m in M1 M2; do echo "########## $m ##########"; php /tmp/opencode/contrastfix/mutate.php $m || { echo "BUILD FAILED"; continue; }; MUT=$(php /tmp/opencode/contrastfix/mutate.php $m | sed -n 's/^MUTANT=//p'); APP_CONTRAST_SUITE="$MUT" php tests/test_app_contrast_meta.php > /tmp/opencode/contrastfix/mutation-$m.log 2>&1; echo "meta exit=$?"; grep '^ FAIL:' /tmp/opencode/contrastfix/mutation-$m.log; tail -1 /tmp/opencode/contrastfix/mutation-$m.log; done; echo "=== real suite untouched ==="; md5sum tests/test_app_contrast.php; php tests/test_app_contrast.php 2>&1 | tail -1; php tests/test_app_contrast_meta.php 2>&1 | tail -1
########## M1 ##########
MUTANT=/tmp/opencode/contrastfix/mutant_M1.php
mode=M1
original_md5=3abb053a73c86dc2397c6329f50e1dab
mutant_md5=8249169517bf4933b9cce23915544b71
section6 bytes: 4335 -> 2773
section6 else: 1 -> 0
section6 skip(): 3 -> 0
meta exit=1
FAIL: F1: section 6 reports 12 counted skips โ 3 suppressed properties x 4 documents (got 0)
FAIL: F1: 'differs' is reported as SKIP on all four documents (got 0)
FAIL: F1: 'surface' is reported as SKIP on all four documents (got 0)
FAIL: F1: 'bg' is reported as SKIP on all four documents (got 0)
FAIL: F2: section 6 reports 12 counted skips โ 3 suppressed properties x 4 documents (got 0)
FAIL: F2: 'differs' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'surface' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'bg' is reported as SKIP on all four documents (got 0)
FAIL: section 6 has exactly one else (got 0)
FAIL: section 6 calls skip() exactly three times โ one per suppressed property (got 0)
=== Results: 38 passed, 10 failed, 0 skipped ===
########## M2 ##########
MUTANT=/tmp/opencode/contrastfix/mutant_M2.php
mode=M2
original_md5=3abb053a73c86dc2397c6329f50e1dab
mutant_md5=a29b981495168dcc584e43672127bbcf
section6 bytes: 4335 -> 4345
section6 else: 1 -> 1
section6 skip(): 3 -> 3
meta exit=1
FAIL: F2: exit code is 1 (got 255) โ a broken document must be red, not green and not 255
FAIL: F2: no PHP fatal โ an unparseable token must not abort the suite
FAIL: F2: the suite reached its own === Results: line (a consumer always gets a verdict)
FAIL: F2: section 6 reports 12 counted skips โ 3 suppressed properties x 4 documents (got 0)
FAIL: F2: section 6 still FAILS the token once per document (got 1) โ skipped is not the same as passed
FAIL: F2: all four documents were exercised in section 6 (got 1)
FAIL: F2: 'differs' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'surface' is reported as SKIP on all four documents (got 0)
FAIL: F2: 'bg' is reported as SKIP on all four documents (got 0)
=== Results: 39 passed, 9 failed, 0 skipped ===
=== real suite untouched ===
3abb053a73c86dc2397c6329f50e1dab tests/test_app_contrast.php
=== Results: 185 passed, 0 failed, 0 skipped ===
=== Results: 48 passed, 0 failed, 0 skipped ===
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)
[Sat Sep 26 02:41:53 2026] 127.0.0.1:33994 Accepted [Sat Sep 26 02:41:53 2026] 127.0.0.1:33994 Closing [Sat Sep 26 02:41:53 2026] 127.0.0.1:34000 Accepted [Sat Sep 26 02:41:53 2026] 127.0.0.1:34000 Closing [Sat Sep 26 02:41:53 2026] 127.0.0.1:34002 Accepted [Sat Sep 26 02:41:53 2026] 127.0.0.1:34002 Closing [Sat Sep 26 02:41:53 2026] 127.0.0.1:34008 Accepted [Sat Sep 26 02:41:53 2026] 127.0.0.1:34008 Closing [Sat Sep 26 02:41:53 2026] 127.0.0.1:34014 Accepted [Sat Sep 26 02:41:53 2026] 127.0.0.1:34014 Closing [Sat Sep 26 02:41:53 2026] 127.0.0.1:34020 Accepted [Sat Sep 26 02:41:54 2026] 127.0.0.1:34020 Closing [Sat Sep 26 02:41:54 2026] 127.0.0.1:34032 Accepted [Sat Sep 26 02:41:54 2026] 127.0.0.1:34032 Closing [Sat Sep 26 02:44:17 2026] 127.0.0.1:47888 Accepted [Sat Sep 26 02:44:17 2026] 127.0.0.1:47888 Closing [Sat Sep 26 02:44:17 2026] 127.0.0.1:47902 Accepted [Sat Sep 26 02:44:17 2026] 127.0.0.1:47902 Closing [Sat Sep 26 02:44:17 2026] 127.0.0.1:47906 Accepted [Sat Sep 26 02:44:17 2026] 127.0.0.1:47906 Closing [Sat Sep 26 02:44:17 2026] 127.0.0.1:47910 Accepted [Sat Sep 26 02:44:17 2026] 127.0.0.1:47910 Closing [Sat Sep 26 02:44:23 2026] 127.0.0.1:47920 Accepted [Sat Sep 26 02:44:23 2026] 127.0.0.1:47920 Closing [Sat Sep 26 02:52:27 2026] 127.0.0.1:54136 Accepted [Sat Sep 26 02:52:27 2026] 127.0.0.1:54136 Closing [Sat Sep 26 02:52:27 2026] 127.0.0.1:54146 Accepted [Sat Sep 26 02:52:27 2026] 127.0.0.1:54146 Closing [Sat Sep 26 02:52:27 2026] 127.0.0.1:54154 Accepted [Sat Sep 26 02:52:27 2026] 127.0.0.1:54154 Closing [Sat Sep 26 02:52:27 2026] 127.0.0.1:54162 Accepted [Sat Sep 26 02:52:27 2026] 127.0.0.1:54162 Closing [Sat Sep 26 02:55:38 2026] 127.0.0.1:45102 Accepted [Sat Sep 26 02:55:38 2026] 127.0.0.1:45102 Closing [Sat Sep 26 02:55:38 2026] 127.0.0.1:45114 Accepted [Sat Sep 26 02:55:38 2026] 127.0.0.1:45114 Closing [Sat Sep 26 02:55:38 2026] 127.0.0.1:45118 Accepted [Sat Sep 26 02:55:38 2026] 127.0.0.1:45118 Closing [Sat Sep 26 02:55:38 2026] 127.0.0.1:45120 Accepted [Sat Sep 26 02:55:38 2026] 127.0.0.1:45120 Closing [Sat Sep 26 02:56:32 2026] 127.0.0.1:54932 Accepted [Sat Sep 26 02:56:32 2026] 127.0.0.1:54932 Closing [Sat Sep 26 02:56:32 2026] 127.0.0.1:54934 Accepted [Sat Sep 26 02:56:32 2026] 127.0.0.1:54934 Closing [Sat Sep 26 02:56:32 2026] 127.0.0.1:54950 Accepted [Sat Sep 26 02:56:32 2026] 127.0.0.1:54950 Closing [Sat Sep 26 02:56:32 2026] 127.0.0.1:54954 Accepted [Sat Sep 26 02:56:32 2026] 127.0.0.1:54954 Closing [Sat Sep 26 02:56:55 2026] 127.0.0.1:44602 Accepted [Sat Sep 26 02:56:55 2026] 127.0.0.1:44602 Closing [Sat Sep 26 02:56:55 2026] 127.0.0.1:44604 Accepted [Sat Sep 26 02:56:55 2026] 127.0.0.1:44604 Closing [Sat Sep 26 02:56:55 2026] 127.0.0.1:44620 Accepted [Sat Sep 26 02:56:55 2026] 127.0.0.1:44620 Closing [Sat Sep 26 02:56:55 2026] 127.0.0.1:44632 Accepted [Sat Sep 26 02:56:55 2026] 127.0.0.1:44632 Closing [Sat Sep 26 02:56:55 2026] 127.0.0.1:44636 Accepted [Sat Sep 26 02:56:55 2026] 127.0.0.1:44636 Closing [Sat Sep 26 02:56:58 2026] 127.0.0.1:44638 Accepted
Generated 2026-09-26 00:56:58 UTC · Gladex.de