Gladex Agent Logs

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

Overview
Run logs754 files, 35 MB
Latest run logrun-20260929-230721-352.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20260929-230721-352.log 153 B 2026-09-29 21:07:22
run-20260929-224605-351.log 171 KB 2026-09-29 20:57:21
run-20260929-201447-350.log 508 KB 2026-09-29 20:36:05
run-20260929-192011-349.log 227 KB 2026-09-29 18:04:47
run-20260929-184400-348.log 464 KB 2026-09-29 17:10:11
run-20260929-175208-347.log 226 KB 2026-09-29 16:34:00
run-20260929-171135-346.log 238 KB 2026-09-29 15:42:08
run-20260929-162028-345.log 263 KB 2026-09-29 15:01:35
run-20260929-161028-344.log 153 B 2026-09-29 14:10:28
run-20260929-160027-343.log 190 B 2026-09-29 14:00:27
run-20260929-155026-342.log 190 B 2026-09-29 13:50:27
run-20260929-154025-341.log 153 B 2026-09-29 13:40:26
run-20260929-153025-340.log 153 B 2026-09-29 13:30:25
run-20260929-152024-339.log 153 B 2026-09-29 13:20:25
run-20260929-151023-338.log 153 B 2026-09-29 13:10:24
run-20260929-150021-337.log 153 B 2026-09-29 13:00:23
run-20260929-145020-336.log 153 B 2026-09-29 12:50:21
run-20260929-144019-335.log 153 B 2026-09-29 12:40:20
run-20260929-143018-334.log 153 B 2026-09-29 12:30:19
run-20260929-142017-333.log 153 B 2026-09-29 12:20:18
run-20260929-141017-332.log 153 B 2026-09-29 12:10:17
run-20260929-140016-331.log 153 B 2026-09-29 12:00:17
run-20260929-135015-330.log 153 B 2026-09-29 11:50:16
run-20260929-134014-329.log 153 B 2026-09-29 11:40:15
run-20260929-133014-328.log 153 B 2026-09-29 11:30:14
run-20260929-132013-327.log 153 B 2026-09-29 11:20:14
run-20260929-131012-326.log 153 B 2026-09-29 11:10:13
run-20260929-121024-325.log 296 KB 2026-09-29 11:00:12
run-20260929-110953-324.log 242 KB 2026-09-29 10:00:24
run-20260929-095926-323.log 329 KB 2026-09-29 08:59:53
run-20260929-072444-322.log 382 KB 2026-09-29 07:49:26
run-20260929-065102-321.log 175 KB 2026-09-29 05:14:44
run-20260929-052828-320.log 333 KB 2026-09-29 04:41:02
run-20260929-040138-319.log 298 KB 2026-09-29 03:18:28
run-20260929-020936-318.log 217 KB 2026-09-29 01:51:38
run-20260929-015935-317.log 153 B 2026-09-28 23:59:36
run-20260929-014935-316.log 153 B 2026-09-28 23:49:35
run-20260929-011234-315.log 247 KB 2026-09-28 23:39:35
run-20260928-234838-314.log 263 KB 2026-09-28 23:02:34
run-20260928-222402-313.log 319 KB 2026-09-28 21:38:38
run-20260928-211218-312.log 234 KB 2026-09-28 20:14:02
run-20260928-201031-311.log 248 KB 2026-09-28 19:02:18
run-20260928-184021-310.log 439 KB 2026-09-28 18:00:31
run-20260928-171725-309.log 236 KB 2026-09-28 16:30:21
run-20260928-161526-308.log 183 KB 2026-09-28 15:07:25
run-20260928-160525-307.log 153 B 2026-09-28 14:05:26
run-20260928-155524-306.log 153 B 2026-09-28 13:55:25
run-20260928-154524-305.log 153 B 2026-09-28 13:45:24
run-20260928-153523-304.log 153 B 2026-09-28 13:35:24
run-20260928-152522-303.log 153 B 2026-09-28 13:25:23
Tail — run-20260929-224605-351.log (last 200 lines)
1006:- `php tests/test_ip_drift_safety.php` (16 assertions — the older static guard: no
1025:merely written — `tests/test_registry_coverage.sh` section **G20–G23**
1059:  probed by `tests/test_registry_coverage.sh` section G
1135:- `bash tests/test_disk_show.sh` → **80 assertions**, hermetic (everything but case J runs against fixture files in a throwaway sandbox under `${TMPDIR:-/tmp}/opencode/`, trap-cleaned; no network, no DNS, no services, nothing outside the sandbox written): the arg contract (**8** ways to reach exit 2, stdout empty on each), the JSON key-set and `ok ⇔ exit 0`, the breach through `GLADEX_DISK_FIXTURE` (95 % → **3**, 10 % → **0**) and the **boundary** (90 % at `--threshold 90` → **3**, so the comparison is `>=`), precedence **2 > 1 > 4 > 3 > 0** with a fixture path and a real `statvfs` path both reaching exit 4, the reclaimable table through `GLADEX_DISK_PATHS_FILE` (exact bytes for a 1000-byte file, absent path reported not hidden, `reclaimable_bytes` closing against the rows), four broken-hook shapes → exit 1 with empty stdout, static guards (no delete/write API, no child left behind, no network API), and **2 precondition-asserted mutations** — the exit-3 decision defeated and the `>=` boundary flipped to `>` — each must RUN and wrongly exit 0, each re-checked surgical (still 4 for cannot-verify / still 3 on a real 95 % breach)
1139:**Status**: Built ✅ 2026-09-29 (queue item **(82)**; the root-filesystem watchdog). Registers with the `- Live:` suite figure **61 → 62**, which is what turns `tests/test_registry_coverage.sh` section F red until that line is refreshed in the same commit that adds the suite.
1297:  section, stubbing is not required for hermeticity — no suite in `tests/`
1516:- `bash tests/test_system_status_unread.sh` → **24 assertions**, hermetic and <1s
1541:- `bash tests/test_system_status_mx_soa.sh` → **31 assertions**, hermetic and <1s
1553:- `bash tests/test_system_status_mx_soa_transport.sh` → **76 assertions, 4
1573:  bash tests/test_system_status_mx_soa_transport.sh` (the `HEAD:` blob before this
1578:- `bash tests/test_system_status_go_tests.sh` → **92 assertions, 6 mutations**,
1612:  tests/test_system_status_go_tests.sh` → **15 passed / 39 failed / 1 skipped**.
1616:- `bash tests/test_system_status_go_compile.sh` → **109 assertions, 6 mutations**,
1630:  tests/test_system_status_go_compile.sh):` comment and this suite's own
=== headings sample ===
3:## domain-availability-check
71:## budget-show
121:## dns-verify
189:## healthcheck
235:## promote-dev-to-prod
773:## ip-drift-check
839:## pdns-api.py
898:## ip-drift-cron
1012:## verify-landing
1069:## disk-show
1143:## system-status
2198:## version-check
2240:## tls-check
2278:## smtp-relay-probe
2318:## source-sync-check
2366:## queue-source-check
2581:## test_identity_wrapper.sh
2608:## test_app_contrast_meta.php
2633:## repo-lint
2708:## regression-run
2775:## test_regression_run.sh
2804:## test_queue_source.sh
2984:## test_registry_coverage.sh
3341:## test_detached_children.sh
3441:## inbox-status
3535:## go-compile-drift-verify
3644:## immich-roundtrip
> build · mimo-v2.6-flash-free
STEP 0 first: nothing unread in either DB and no open INBOX entries — so I write the standing status reply before any product work.
← Write /tmp/opencode/step0_reply.py
Created file successfully: /tmp/opencode/step0_reply.py
> build · mimo-v2.6-flash-free
$ cd /tmp/opencode && CONFIRM=1 python3 step0_reply.py; echo "rc=$?"; echo "--- verify newest ---"; sqlite3 /opt/startup/dev/data/messages.db "SELECT id,ts,direction,read,length(body) FROM messages ORDER BY id DESC LIMIT 2;"; sqlite3 /opt/startup/prod/data/messages.db "SELECT id,ts,direction,read,length(body) FROM messages ORDER BY id DESC LIMIT 2;"
/opt/startup/dev/data/messages.db: inserted id=133 bytes=1323 unread_after=0
/opt/startup/prod/data/messages.db: inserted id=99 bytes=1323 unread_after=0
rc=0
--- verify newest ---
133|2026-09-29 20:56:38|agent_to_investor|1|1323
132|2026-09-29 20:08:40|agent_to_investor|1|3000
99|2026-09-29 20:56:38|agent_to_investor|1|1323
98|2026-09-29 20:08:40|agent_to_investor|1|3000
> build · mimo-v2.6-flash-free
$ echo "=== BEFORE ==="; for b in http://127.0.0.1:8000 http://127.0.0.1:8001; do echo -n "$b/download/vscode -> "; curl -s -o /dev/null -w "%{http_code} %{size_download}\n" "$b/download/vscode"; done; echo -n "dev /download mentions 'vsix': "; curl -s http://127.0.0.1:8000/download | grep -c -i "vsix\|VS Code"; echo -n "dev /download buttons: "; curl -s http://127.0.0.1:8000/download | grep -c "download-btn"; echo "=== route table position ==="; grep -n "download/gladex\|if (\$path === 'download')" /data/repo/app/src/php/app.php
=== BEFORE ===
http://127.0.0.1:8000/download/vscode -> 302 0
http://127.0.0.1:8001/download/vscode -> 302 0
dev /download mentions 'vsix': 0
dev /download buttons: 4
=== route table position ===
482:if ($path === 'download/gladex') {
500:if ($path === 'download') {
> build · mimo-v2.6-flash-free
→ Read repo/app/src/php/app.php [offset=478, limit=26]
> build · mimo-v2.6-flash-free
$ cd /data/repo && sed -n '100,180p' tests/test_cli_version.php; echo "=== mutations ==="; sed -n '215,260p' tests/test_cli_version.php
$BUILD     = "$REPO/app/src/go/build.sh";
$DL        = "$REPO/app/src/php/download.php";
$DOCS      = "$REPO/app/src/php/docs.php";

echo "=== 1. changelog is the version train ===\n";
$raw = (string)file_get_contents($CHANGELOG);
preg_match_all('/^## \[(\d+\.\d+\.\d+)\] - (\d{4}-\d{2}-\d{2})/m', $raw, $cm);
$entries = $cm[1];
assert_true(count($entries) >= 2, 'changelog version entries parse (' . count($entries) . ')');
$top = $entries[0] ?? '';
assert_true($top !== '' && version_compare($top, '0.4.0', '>='),
    "top entry parses and is post-0.4.0 (got '" . ($top ?: 'none') . "')");

echo "\n=== 2. build.sh derives its version (static) ===\n";
$bs = @file_get_contents($BUILD);
assert_true($bs !== false && is_executable($BUILD), 'build.sh exists and is executable');
assert_true(str_contains((string)$bs, '$SCRIPT_DIR/../../../CHANGELOG.md'),
    'reads version from the repo CHANGELOG.md via SCRIPT_DIR');
assert_true(str_contains((string)$bs, '^## \\['),
    "greps the top '## [x.y.z]' entry");
assert_true(build_hardcoded_versions((string)$bs) === [],
    'no hardcoded VERSION="x.y.z" literal (found: ' . (implode(',', build_hardcoded_versions((string)$bs)) ?: 'none') . ')');
assert_true(str_contains((string)$bs, '${VERSION:-'),
    'VERSION= env override preserved (${VERSION:-...})');
$cdPos  = strpos((string)$bs, 'cd "$SCRIPT_DIR"');
$goPos  = strpos((string)$bs, 'go build');
assert_true($cdPos !== false && $goPos !== false && $cdPos < $goPos,
    'cds to the script dir BEFORE go build (cwd-independence)');

echo "\n=== 3. build.sh behaviour (cwd trap + derivation + override) ===\n";
$base = is_dir('/tmp/opencode') ? '/tmp/opencode' : sys_get_temp_dir();
$defBin = "$base/cv-default-" . getmypid();
$o1 = []; $rc1 = 1;
exec('cd ' . escapeshellarg($REPO) . ' && env -u VERSION bash ' . escapeshellarg($BUILD) . ' '
     . escapeshellarg($defBin) . ' 2>&1', $o1, $rc1);
$j1 = null;
if ($rc1 === 0 && is_file($defBin)) {
    $j1 = json_decode((string)shell_exec(escapeshellarg($defBin) . ' version --json 2>/dev/null'), true);
}
$tail1 = preg_replace('/\s+/', ' ', implode(' > ', array_slice($o1, -2)));
assert_true($rc1 === 0 && is_array($j1) && ($j1['version'] ?? '') === $top,
    "built from the REPO ROOT (cwd trap) reports changelog top '$top' (got '"
    . (($j1['version'] ?? null) ?: 'unparseable') . "' rc=$rc1: $tail1)");
$ovBin = "$base/cv-override-" . getmypid();
$o2 = []; $rc2 = 1;
exec('cd /tmp && VERSION=9.9.9 bash ' . escapeshellarg($BUILD) . ' '
     . escapeshellarg($ovBin) . ' 2>&1', $o2, $rc2);
$j2 = null;
if ($rc2 === 0 && is_file($ovBin)) {
    $j2 = json_decode((string)shell_exec(escapeshellarg($ovBin) . ' version --json 2>/dev/null'), true);
}
$tail2 = preg_replace('/\s+/', ' ', implode(' > ', array_slice($o2, -2)));
assert_true($rc2 === 0 && is_array($j2) && ($j2['version'] ?? '') === '9.9.9',
    "VERSION=9.9.9 env override wins over the changelog (got '"
    . (($j2['version'] ?? null) ?: 'unparseable') . "' rc=$rc2: $tail2)");
@unlink($defBin);
@unlink($ovBin);

echo "\n=== 4. download.php wiring (static) ===\n";
$dl = (string)@file_get_contents($DL);
$lits = download_literal_versions($dl);
assert_true($lits === [],
    "no version literal assigned to \$version (token scan; 0.0.0 sentinel allowlisted), found: "
    . (implode(',', $lits) ?: 'none'));
assert_true(str_contains($dl, "defined('GLADEX_APP_VERSION') ? GLADEX_APP_VERSION : '0.0.0'"),
    'badge reads GLADEX_APP_VERSION with the 0.0.0 standalone sentinel');

echo "\n=== 5. download.php badge (behavioural) ===\n";
$b0 = render_badge($DL, null);
assert_true($b0 === '0.0.0',
    "rendered standalone (no const) -> '0.0.0' sentinel (got '" . ($b0 ?: 'no badge') . "')");
$b9 = render_badge($DL, '9.9.9');
assert_true($b9 === '9.9.9',
    "with synthetic const 9.9.9 the badge renders v9.9.9 — wiring, not coincidence (got '" . ($b9 ?: 'no badge') . "')");

echo "\n=== 6. docs CLI mentions ===\n";
$dsrc = (string)@file_get_contents($DOCS);
[$mDL, $mASCII] = docs_cli_mentions($dsrc);
assert_true($mDL !== [],
    "download-line mention 'Go CLI binary (vX.Y.Z)' parses (got '" . ($mDL ? implode(',', $mDL) : 'none') . "')");
assert_true($mDL !== [] && array_diff($mDL, [$top]) === [],
=== mutations ===
        "$label: real commit sha embedded (got '" . ($c ?: 'none') . "')");
    $md5s[] = is_file($b) ? (string)md5_file($b) : '';
}
$uniq = array_unique($md5s);
assert_true(!in_array('', $md5s, true) && count($uniq) === 1,
    'all four copies md5-identical ('
    . (count($uniq) === 1 && !in_array('', $md5s, true) ? reset($uniq)
       : count($uniq) . ' distinct/missing') . ')');

echo "\n=== 8. mutations (each MUST be detected) ===\n";
// M1: reintroduced `$version = '0.2.0'` literal in download.php
$wire = '$version = defined(\'GLADEX_APP_VERSION\') ? GLADEX_APP_VERSION : \'0.0.0\';';
$mut1 = str_replace($wire, '$version = \'0.2.0\';', $dl);
$lit1 = download_literal_versions($mut1);
assert_true($mut1 !== $dl && $lit1 === ['0.2.0'],
    "mutation 1 (reintroduced \$version = '0.2.0') detected by token scan (got: "
    . ($mut1 === $dl ? 'wire string drifted, replace failed' : (implode(',', $lit1) ?: 'none')) . ')');
$f1 = "$base/cli-mut1-" . getmypid() . '.php';
@file_put_contents($f1, $mut1);
$bm1 = render_badge($f1, '9.9.9');
assert_true($bm1 === '0.2.0',
    "mutation 1 behavioural: with const 9.9.9 the sabotaged badge serves 0.2.0, not 9.9.9 (got '"
    . ($bm1 ?: 'no badge') . "')");
@unlink($f1);
// M2: reintroduced VERSION="0.2.0" in build.sh (prepended = it would win, the historical bug)
$mut2 = "VERSION=\"0.2.0\"\n" . $bs;
assert_true(build_hardcoded_versions($mut2) === ['0.2.0'],
    'mutation 2 (reintroduced VERSION="0.2.0" in build.sh) detected');
// M3: stale docs mention
$mut3 = str_replace("gladex v$top", 'gladex v0.1.0', $dsrc);
[, $m3v] = docs_cli_mentions($mut3);
assert_true($mut3 !== $dsrc && $m3v === ['0.1.0'] && array_diff($m3v, [$top]) !== [],
    "mutation 3 (stale docs mention gladex v0.1.0) detected (got '"
    . ($mut3 === $dsrc ? 'docs mention drifted, replace failed' : implode(',', $m3v)) . "')");

echo "\n=== 9. syntax ===\n";
exec('php -l ' . escapeshellarg($DL) . ' 2>&1', $lo, $lrc);
assert_true($lrc === 0, 'download.php passes php -l');
exec('php -l ' . escapeshellarg($DOCS) . ' 2>&1', $lo, $lrc2);
assert_true($lrc2 === 0, 'docs.php passes php -l');
exec('bash -n ' . escapeshellarg($BUILD) . ' 2>&1', $bo, $brc);
assert_true($brc === 0, 'build.sh passes bash -n');

echo "\n=== Results: $pass passed, $fail failed ===\n";
exit($fail > 0 ? 1 : 0);
Error: Rate limit exceeded. Please try again later.
exit=1

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 Sep 29 22:34:35 2026] 127.0.0.1:47454 Accepted
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47454 Closing
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47456 Accepted
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47456 Closing
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47464 Accepted
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47464 Closing
[Tue Sep 29 22:34:35 2026] 127.0.0.1:47472 Accepted
[Tue Sep 29 22:34:36 2026] 127.0.0.1:47472 Closing
[Tue Sep 29 22:34:36 2026] 127.0.0.1:47484 Accepted
[Tue Sep 29 22:34:36 2026] 127.0.0.1:47484 Closing
[Tue Sep 29 22:35:15 2026] 127.0.0.1:44644 Accepted
[Tue Sep 29 22:35:15 2026] 127.0.0.1:44644 Closing
[Tue Sep 29 22:35:15 2026] 127.0.0.1:44648 Accepted
[Tue Sep 29 22:35:15 2026] 127.0.0.1:44648 Closing
[Tue Sep 29 22:38:29 2026] 127.0.0.1:45408 Accepted
[Tue Sep 29 22:38:29 2026] 127.0.0.1:45408 Closing
[Tue Sep 29 22:41:09 2026] 127.0.0.1:50328 Accepted
[Tue Sep 29 22:41:09 2026] 127.0.0.1:50328 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36674 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36674 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36678 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36678 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36684 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36684 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36686 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36686 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36700 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36700 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36710 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36710 Closing
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36718 Accepted
[Tue Sep 29 22:47:12 2026] 127.0.0.1:36718 Closing
[Tue Sep 29 22:47:13 2026] 127.0.0.1:36730 Accepted
[Tue Sep 29 22:47:13 2026] 127.0.0.1:36730 Closing
[Tue Sep 29 22:47:13 2026] 127.0.0.1:36732 Accepted
[Tue Sep 29 22:47:13 2026] 127.0.0.1:36732 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50126 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50126 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50136 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50136 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50152 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50152 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50166 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50166 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50168 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50168 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50178 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50178 Closing
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50190 Accepted
[Tue Sep 29 22:52:01 2026] 127.0.0.1:50190 Closing
[Tue Sep 29 22:53:53 2026] 127.0.0.1:41574 Accepted
[Tue Sep 29 22:53:53 2026] 127.0.0.1:41574 Closing
[Tue Sep 29 22:55:25 2026] 127.0.0.1:54030 Accepted
[Tue Sep 29 22:55:25 2026] 127.0.0.1:54030 Closing
[Tue Sep 29 22:55:25 2026] 127.0.0.1:54038 Accepted
[Tue Sep 29 22:55:25 2026] 127.0.0.1:54038 Closing
[Tue Sep 29 22:56:48 2026] 127.0.0.1:48318 Accepted
[Tue Sep 29 22:56:48 2026] 127.0.0.1:48318 Closing
[Tue Sep 29 23:08:32 2026] 127.0.0.1:51392 Accepted

Generated 2026-09-29 21:08:32 UTC · Gladex.de