Gladex Agent Logs

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

Overview
Run logs864 files, 43.2 MB
Latest run logrun-20261001-174212-462.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261001-174212-462.log 123 KB 2026-10-01 15:48:40
run-20261001-161948-461.log 441 KB 2026-10-01 15:32:06
run-20261001-160941-460.log 153 B 2026-10-01 14:09:41
run-20261001-155934-459.log 153 B 2026-10-01 13:59:34
run-20261001-154926-458.log 153 B 2026-10-01 13:49:27
run-20261001-153919-457.log 153 B 2026-10-01 13:39:20
run-20261001-152911-456.log 153 B 2026-10-01 13:29:12
run-20261001-151904-455.log 153 B 2026-10-01 13:19:05
run-20261001-150856-454.log 153 B 2026-10-01 13:08:57
run-20261001-145849-453.log 153 B 2026-10-01 12:58:50
run-20261001-144842-452.log 153 B 2026-10-01 12:48:43
run-20261001-143835-451.log 153 B 2026-10-01 12:38:35
run-20261001-142828-450.log 190 B 2026-10-01 12:28:28
run-20261001-141820-449.log 153 B 2026-10-01 12:18:21
run-20261001-140813-448.log 153 B 2026-10-01 12:08:14
run-20261001-135806-447.log 153 B 2026-10-01 11:58:07
run-20261001-134759-446.log 153 B 2026-10-01 11:48:00
run-20261001-133752-445.log 153 B 2026-10-01 11:37:53
run-20261001-132745-444.log 153 B 2026-10-01 11:27:45
run-20261001-131738-443.log 190 B 2026-10-01 11:17:39
run-20261001-130731-442.log 153 B 2026-10-01 11:07:31
run-20261001-125724-441.log 153 B 2026-10-01 10:57:24
run-20261001-124717-440.log 153 B 2026-10-01 10:47:17
run-20261001-123709-439.log 153 B 2026-10-01 10:37:10
run-20261001-122702-438.log 153 B 2026-10-01 10:27:03
run-20261001-121655-437.log 153 B 2026-10-01 10:16:56
run-20261001-112609-436.log 264 KB 2026-10-01 10:06:49
run-20261001-104159-435.log 361 KB 2026-10-01 09:16:02
run-20261001-092806-434.log 353 KB 2026-10-01 08:31:53
run-20261001-080602-433.log 406 KB 2026-10-01 07:17:59
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
Tail — run-20261001-174212-462.log (last 200 lines)
  OUT=$(GLADEX_REPO_DIR="$REPO" "$TOOL" "$@" 2>"$SB/.err")
  RC=$?
  ERR=$(cat "$SB/.err")
}
# Live run at the SHIPPED location, deliberately WITHOUT the env override —
# this is the one that pins default_repo(). Safe flag first, same rule as run_live.
run_default() {
  OUT=$("$TOOL" "$@" 2>"$SB/.err")
  RC=$?
  ERR=$(cat "$SB/.err")
}
jget() { # json, dotted key (list indices are integers)
  # A string prints raw (so `status == failed`, not `"failed"`); anything else
  # goes through json.dumps, NEVER print(): print() of a dict or a bool yields
  # Python's repr (`{'a': 1}`, `True`), which is not JSON — a field reader must
  # never hand its caller a value the JSON contract would reject.
  python3 -c '
import json, sys
d = json.loads(sys.argv[1])
for k in sys.argv[2].split("."):
    d = d[k] if isinstance(d, dict) else d[int(k)]
print(d if isinstance(d, str) else json.dumps(d))
' "$1" "$2" 2>/dev/null
}
json_keys() { python3 -c 'import json,sys; print(",".join(sorted(json.load(sys.stdin))))' <<<"$1"; }
# The module docstring's section under an exact column-0 heading, dedented 4.
# The closing `"""` is a terminator as well as a blank line: this reads the
# FILE, and the docstring's LAST section has no blank line between its body
# and the delimiter, so without that clause the extraction hands back the
# delimiter and A5's byte comparison fails against a --help that was right.
doc_section() { # heading, file
  awk -v h="$1" '
    !inb && $0 == h { inb = 1; next }
    inb && ($0 == "" || $0 == "\"\"\"") { exit }
    inb { if (substr($0,1,4) == "    ") print substr($0,5); else print }
  ' "$2"
}
# The section `--help` renders under one of the epilog's labels.
# Takes TEXT, not a path: awk must read it from stdin, because passing the
# help output as "$2" makes awk treat a paragraph as a filename.
# Every label is a terminator, including the one this section is looking at:
# a label the reader does not know about swallows the text after it, which is
# how a byte-comparison can fail for a reason that is not the docstring.
# The terminator set is NOT a literal here any more (queue item (90)): it is
# EPILOG_LABELS, derived from the tool's own EPILOG_PAIRS, so a seventh pair
# added to the tool is a section this function knows how to bound without
# anyone editing a fourth list. An EMPTY set would swallow nothing and stop
# nowhere, so A2b refuses to let that reach these loops.
help_section() { # label, text
  printf '%s\n' "$2" | awk -v l="$1" -v labels="${EPILOG_LABELS-}" '
    BEGIN { n = split(labels, L, "\n"); for (i = 1; i <= n; i++) if (L[i] != "") S[L[i]] = 1 }
    $0 == l { inb = 1; next }
    inb && ($0 in S) { exit }
    inb { print }
  '
}
# First line of a helper that actually invokes the tool. Extracting BY FUNCTION
$ cd /data/repo && grep -n "Results:\|passed\b.*failed\|SKIP\b\|skip()" tests/test_regression_run.sh | tail -40; echo "=== harness fn ==="; grep -n "^assert_eq\|^assert_ge\|^assert_contains\|^ok()\|^fail()\|^skip\|^run_live\|^run_sandbox\|^run_default\|^jget\|^json_keys" tests/test_regression_run.sh | head -40
134:printf '#!/usr/bin/env bash\necho "=== Results: 10 passed, 0 failed, 0 skipped ==="\nexit 0\n' > "$SB/green/test_alpha.sh"
135:printf '#!/usr/bin/env bash\necho "7 passed, 0 failed"\nexit 0\n' > "$SB/green/test_gamma.sh"
136:printf '#!/usr/bin/env bash\necho "Results: 3 passed, 0 failed"\nexit 0\n' > "$SB/green/test_delta.sh"
138:printf '#!/usr/bin/env bash\necho "beta suite: 5 passed, 1 failed"\nexit 1\n' > "$SB/red/test_beta.sh"
142:printf '#!/usr/bin/env bash\necho "4 passed, 0 failed"\nexit 3\n' > "$SB/crash/test_zeta.sh"
146:printf '#!/usr/bin/env bash\necho "=== Results: 12 passed, 0 failed ==="\necho "PASS: replay says 999 passed, 999 failed"\nexit 0\n' > "$SB/tie/test_theta.sh"
148:printf '#!/usr/bin/env bash\necho "  ok   - 8 passed, 2 failed"\nexit 0\n' > "$SB/fallback/test_iota.sh"
485:  echo "SKIP G: shipped-location checks (suite runs from $REPO, not /data/repo)"
514:  echo "SKIP G6: shipped-location checks (under test: $TOOL)"
535:  | sed -n 's/^=== Results: [0-9][0-9]* passed, \([0-9][0-9]*\) failed.*$/\1/p' | tail -1)
538:  "SKIP G: shipped-location checks" "$ISO_OUT"
611:                    "passed": 5, "failed": 0, "skipped": 0})
631:                  "totals": {"passed": 0, "failed": 0, "skipped": 0,
634:                              "passed": 1, "failed": 0, "skipped": 0},
636:                              "passed": 2, "failed": 0, "skipped": 0}]})
908:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1142:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1293:echo "=== Results: $PASS passed, $FAIL failed ==="
=== harness fn ===
21:ok()   { PASS=$((PASS + 1)); echo "PASS: $1"; }
22:fail() { FAIL=$((FAIL + 1)); echo "FAIL: $1"; }
24:assert_eq() { # desc want got
27:assert_contains() { # desc needle haystack
33:assert_ge() { # desc want got   (got >= want)
47:run_sandbox() {
63:run_live() {
70:run_default() {
75:jget() { # json, dotted key (list indices are integers)
88:json_keys() { python3 -c 'import json,sys; print(",".join(sorted(json.load(sys.stdin))))' <<<"$1"; }
157:assert_eq "A1 --help exits 0" 0 "$HRC"
158:assert_contains "A2 usage line is argparse's own" "usage: regression-run" "$HELP"
214:assert_contains "A6 exit 5 documented" "no test suites were discovered" "$HELP"
215:assert_contains "A7 silence-is-not-green documented in a RENDERED section" "not a green run with a small number" "$HELP"
216:assert_contains "A8 --note is on the usage line" "[--note TEXT]" "$HELP"
217:assert_contains "A9 --note documents its writer" "requires --save-baseline" "$HELP"
226:assert_eq "A10 exactly one NOTE_MAX definition" "1" "$(grep -c '^NOTE_MAX = ' "$TOOL")"
230:assert_contains "A11 --note help states the bound from the constant" \
232:assert_contains "A12 the baseline prose states the same bound" \
240:assert_contains "A13 the termination contract reaches --help (start_new_session)" \
242:assert_contains "A14 the signal outcome reaches --help (143 / 130)" \
244:assert_contains "A15 the declared escape limit reaches --help" \
256:assert_contains "A18 the preflight's watched paths reach --help" \
258:assert_contains "A19 an unmeasurable path refusing reaches --help" \
260:assert_contains "A20 the fixture-hook warning reaches --help" \
272:assert_contains "A21 the sequencing rationale reaches --help (--jobs)" \
274:assert_contains "A22 the behavioural sentence reaches --help" \
289:assert_eq "A23 every column-0 docstring block is rendered or the one declared inward-facing block" \
299:assert_ge "A16 EPILOG_PAIRS parsed from the tool (list is not empty)" 1 "${#EPILOG[@]}"
318:assert_eq "A16b EPILOG row count equals the tuple's own pair count (92)" \
336:assert_eq "B1 green -> 0" 0 "$RC"
338:assert_eq "B2 green totals 20 passed" "20" "$(jget "$J" totals.passed)"
339:assert_eq "B3 green totals 0 failed" "0" "$(jget "$J" totals.failed)"
340:assert_eq "B4 green suites_run 3" "3" "$(jget "$J" totals.suites_run)"
341:assert_eq "B5 green covers 3 distinct shapes" "3" \
345:assert_eq "B6 red -> 1" 1 "$RC"
346:assert_eq "B7 red failed 1" "1" "$(jget "$OUT" totals.failed)"
347:assert_eq "B8 red suite status failed" "failed" "$(jget "$OUT" suites.0.status)"
350:assert_eq "B9 silent -> 4" 4 "$RC"
351:assert_eq "B10 silent contributes 0 passed (never counted green)" "0" "$(jget "$OUT" totals.passed)"
> build · mimo-v2.6-flash-free
→ Read repo/tools/regression-run [offset=175, limit=200]
> build · mimo-v2.6-flash-free
→ Read repo/tools/regression-run [limit=240, offset=420]
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "def emit_json" -A 40 tools/regression-run; echo "=== record keys emitted ==="; grep -n '_text\|for k in\|json.dumps' tools/regression-run | head -30
970:def emit_json(payload: dict) -> None:
971-    """Print the one JSON object, ordered by JSON_KEYS and key-set-checked.
972-
973-    A refusal or a usage error must be indistinguishable IN SHAPE from a
974-    verdict — that is what lets a `| jq` consumer handle both without a
975-    special case — so the key set is enforced here rather than trusted.
976-    """
977-    if set(payload) != set(JSON_KEYS):
978-        raise SystemExit(
979-            f"{TOOL}: internal error — JSON key set drifted: "
980-            f"missing={sorted(set(JSON_KEYS) - set(payload))} "
981-            f"extra={sorted(set(payload) - set(JSON_KEYS))}"
982-        )
983-    print(json.dumps({k: payload[k] for k in JSON_KEYS}, indent=2, sort_keys=False))
984-
985-
986-def die(message: str, fmt: str, code: int, *, repo=None, tests_dir=None,
987-        discovered=None) -> int:
988-    """One refusal object, same 14 keys as a verdict.
989-
990-    `repo`/`tests_dir`/`discovered` are optional on purpose: a refusal raised
991-    BEFORE discovery (every usage error) has nothing to report there and keeps
992-    the nulls it has always had, while the preflight — which is reached after
993-    discovery, and whose whole claim is "nothing ran" — names what it decided
994-    about, so `suites_discovered: 1` is visible in the same object as
995-    `suites: []`.
996-    """
997-    payload = blank_payload("run", repo, tests_dir, discovered)
998-    payload["error"] = message
999-    payload["exit_code"] = code
1000-    if fmt == "json":
1001-        emit_json(payload)
1002-    else:
1003-        sys.stderr.write(f"{TOOL}: ERROR {message}\n")
1004-    return code
1005-
1006-
1007-class _Parser(argparse.ArgumentParser):
1008-    """argparse that raises instead of exiting, so `--format json` can answer."""
1009-
1010-    def error(self, message):  # noqa: D102 - argparse override
=== record keys emitted ===
437:        "summary_text": None,
503:        rec["summary_text"] = chosen["line"]
523:    rec["_text"] = text
589:        for k in ("passed", "failed", "skipped"):
738:    attributed = {k: 0 for k in METRICS}
745:        for k in METRICS:
774:    base_totals = {k: doc["totals"].get(k, 0) for k in METRICS}
775:    delta = {k: totals.get(k, 0) - base_totals[k] for k in METRICS}
776:    closure_ok = all(attributed[k] == delta[k] for k in METRICS)
983:    print(json.dumps({k: payload[k] for k in JSON_KEYS}, indent=2, sort_keys=False))
1218:        text = rec.pop("_text", "")
$ cd /data/repo && grep -rn "skipped" tests/test_regression_run.sh | head -40; echo "=== how many assertions total now ==="; grep -c '^PASS:\|^FAIL:' /dev/null; grep -n "RESULTS\|=== Results" tests/test_regression_run.sh
134:printf '#!/usr/bin/env bash\necho "=== Results: 10 passed, 0 failed, 0 skipped ==="\nexit 0\n' > "$SB/green/test_alpha.sh"
401:assert_eq "C11 skipped reported when the summary carries it" "true" "$(jget "$OUT" suites.0.skipped_reported)"
402:assert_eq "C12 skipped_reported false for a bare summary" "false" "$(jget "$OUT" suites.1.skipped_reported)"
403:assert_eq "C13 skipped total still 0" "0" "$(jget "$OUT" totals.skipped)"
522:# Its own section G is skipped by the guard above, so this cannot recurse
611:                    "passed": 5, "failed": 0, "skipped": 0})
631:                  "totals": {"passed": 0, "failed": 0, "skipped": 0,
634:                              "passed": 1, "failed": 0, "skipped": 0},
636:                              "passed": 2, "failed": 0, "skipped": 0}]})
651:assert_eq "I6c an unreported skip is stored as null, not 0" "null" "$(jget "$BASE" suites.2.skipped)"
908:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1142:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1258:assert_contains "K25b and that ancestor is measured, not skipped" "has 1 MB free" "$ERR"
=== how many assertions total now ===
0
134:printf '#!/usr/bin/env bash\necho "=== Results: 10 passed, 0 failed, 0 skipped ==="\nexit 0\n' > "$SB/green/test_alpha.sh"
146:printf '#!/usr/bin/env bash\necho "=== Results: 12 passed, 0 failed ==="\necho "PASS: replay says 999 passed, 999 failed"\nexit 0\n' > "$SB/tie/test_theta.sh"
535:  | sed -n 's/^=== Results: [0-9][0-9]* passed, \([0-9][0-9]*\) failed.*$/\1/p' | tail -1)
908:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1142:echo "=== Results: 1 passed, 0 failed, 0 skipped ==="
1293:echo "=== Results: $PASS passed, $FAIL failed ==="
> build · mimo-v2.6-flash-free

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 17:26:52 2026] 127.0.0.1:34674 Accepted
[Thu Oct  1 17:26:52 2026] 127.0.0.1:34674 Closing
[Thu Oct  1 17:26:52 2026] 127.0.0.1:34688 Accepted
[Thu Oct  1 17:26:52 2026] 127.0.0.1:34688 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56334 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56334 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56342 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56342 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56344 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56344 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56358 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56358 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56368 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56368 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56372 Accepted
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56372 Closing
[Thu Oct  1 17:27:34 2026] 127.0.0.1:56388 Accepted
[Thu Oct  1 17:27:35 2026] 127.0.0.1:56388 Closing
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43100 Accepted
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43100 Closing
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43102 Accepted
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43102 Closing
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43112 Accepted
[Thu Oct  1 17:27:35 2026] 127.0.0.1:43112 Closing
[Thu Oct  1 17:29:18 2026] 127.0.0.1:47778 Accepted
[Thu Oct  1 17:29:18 2026] 127.0.0.1:47778 Closed without sending a request; it was probably just an unused speculative preconnection
[Thu Oct  1 17:29:18 2026] 127.0.0.1:47778 Closing
[Thu Oct  1 17:29:19 2026] 127.0.0.1:47788 Accepted
[Thu Oct  1 17:29:19 2026] 127.0.0.1:47788 Closed without sending a request; it was probably just an unused speculative preconnection
[Thu Oct  1 17:29:19 2026] 127.0.0.1:47788 Closing
[Thu Oct  1 17:29:52 2026] 127.0.0.1:44144 Accepted
[Thu Oct  1 17:29:52 2026] 127.0.0.1:44144 Closed without sending a request; it was probably just an unused speculative preconnection
[Thu Oct  1 17:29:52 2026] 127.0.0.1:44144 Closing
[Thu Oct  1 17:29:53 2026] 127.0.0.1:44148 Accepted
[Thu Oct  1 17:29:53 2026] 127.0.0.1:44148 Closed without sending a request; it was probably just an unused speculative preconnection
[Thu Oct  1 17:29:53 2026] 127.0.0.1:44148 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50620 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50620 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50636 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50636 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50646 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50646 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50652 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50652 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50660 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50660 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50674 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50674 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50686 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50686 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50694 Accepted
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50694 Closing
[Thu Oct  1 17:31:08 2026] 127.0.0.1:50696 Accepted
[Thu Oct  1 17:31:09 2026] 127.0.0.1:50696 Closing
[Thu Oct  1 17:31:09 2026] 127.0.0.1:50704 Accepted
[Thu Oct  1 17:31:09 2026] 127.0.0.1:50704 Closing
[Thu Oct  1 17:50:11 2026] 127.0.0.1:55832 Accepted
[Thu Oct  1 17:50:11 2026] 127.0.0.1:55832 Closing
[Thu Oct  1 17:50:12 2026] 127.0.0.1:55838 Accepted

Generated 2026-10-01 15:50:12 UTC · Gladex.de