Agent run logs & app logs · env: prod · LAN-only investor surface
| Run logs | 454 files, 11.6 MB |
| Latest run log | run-20260925-012106-52.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260925-012106-52.log | 164 KB | 2026-09-24 23:42:53 |
| run-20260925-003542-51.log | 153 KB | 2026-09-24 23:11:06 |
| run-20260924-234828-50.log | 204 KB | 2026-09-24 22:25:42 |
| run-20260924-230237-49.log | 303 KB | 2026-09-24 21:38:28 |
| run-20260924-222340-48.log | 206 KB | 2026-09-24 20:52:37 |
| run-20260924-215353-47.log | 146 KB | 2026-09-24 20:13:40 |
| run-20260924-210315-46.log | 182 KB | 2026-09-24 19:43:53 |
| run-20260924-200755-45.log | 181 KB | 2026-09-24 18:53:15 |
| run-20260924-192844-44.log | 133 KB | 2026-09-24 17:57:55 |
| run-20260924-182059-43.log | 227 KB | 2026-09-24 17:18:44 |
| run-20260924-164658-42.log | 181 KB | 2026-09-24 16:10:59 |
| run-20260924-160206-41.log | 101 KB | 2026-09-24 14:36:58 |
| run-20260924-153643-40.log | 127 KB | 2026-09-24 13:52:05 |
| run-20260924-151001-39.log | 130 KB | 2026-09-24 13:26:43 |
| run-20260924-144921-38.log | 90 KB | 2026-09-24 13:00:01 |
| run-20260924-143001-37.log | 63 KB | 2026-09-24 12:39:21 |
| run-20260924-141012-36.log | 106 KB | 2026-09-24 12:20:01 |
| run-20260924-135151-35.log | 75 KB | 2026-09-24 12:00:12 |
| run-20260924-133211-34.log | 116 KB | 2026-09-24 11:41:51 |
| run-20260924-130932-33.log | 67 KB | 2026-09-24 11:22:11 |
| run-20260924-115831-32.log | 260 KB | 2026-09-24 10:59:32 |
| run-20260924-111405-31.log | 117 KB | 2026-09-24 09:48:31 |
| run-20260924-102752-30.log | 106 KB | 2026-09-24 09:04:05 |
| run-20260924-100538-29.log | 81 KB | 2026-09-24 08:17:52 |
| run-20260924-092904-28.log | 101 KB | 2026-09-24 07:55:38 |
| run-20260924-083526-27.log | 116 KB | 2026-09-24 07:19:04 |
| run-20260924-080136-26.log | 75 KB | 2026-09-24 06:25:26 |
| run-20260924-074910-25.log | 23 KB | 2026-09-24 05:51:36 |
| run-20260924-072601-24.log | 52 KB | 2026-09-24 05:39:10 |
| run-20260924-065657-23.log | 156 KB | 2026-09-24 05:16:01 |
| run-20260924-063310-22.log | 76 KB | 2026-09-24 04:46:57 |
| run-20260924-055309-21.log | 107 KB | 2026-09-24 04:23:10 |
| run-20260924-052831-20.log | 133 KB | 2026-09-24 03:43:09 |
| run-20260924-050107-19.log | 69 KB | 2026-09-24 03:18:31 |
| run-20260924-044831-18.log | 34 KB | 2026-09-24 02:51:07 |
| run-20260924-041948-17.log | 156 KB | 2026-09-24 02:38:31 |
| run-20260924-035438-16.log | 185 KB | 2026-09-24 02:09:48 |
| run-20260924-033002-15.log | 245 KB | 2026-09-24 01:44:38 |
| run-20260924-025910-14.log | 120 KB | 2026-09-24 01:20:02 |
| run-20260924-023430-13.log | 97 KB | 2026-09-24 00:49:10 |
| run-20260924-015458-12.log | 255 KB | 2026-09-24 00:24:30 |
| run-20260924-012751-11.log | 179 KB | 2026-09-23 23:44:58 |
| run-20260924-005036-10.log | 162 KB | 2026-09-23 23:17:51 |
| run-20260924-000545-9.log | 217 KB | 2026-09-23 22:40:36 |
| run-20260923-235334-8.log | 29 KB | 2026-09-23 21:55:45 |
| run-20260923-233751-7.log | 97 KB | 2026-09-23 21:43:34 |
| run-20260923-231451-6.log | 165 KB | 2026-09-23 21:27:51 |
| run-20260923-225120-5.log | 58 KB | 2026-09-23 21:04:51 |
| run-20260923-222610-4.log | 230 KB | 2026-09-23 20:41:20 |
| run-20260923-205439-3.log | 640 KB | 2026-09-23 20:16:10 |
assert_rc "rc0-with-failure refuses (exit 7)" 7 "$RC"
assert_contains "rc0-with-failure says the tree is not clean" "did not report a clean tree" "$OUT"
assert_not_contains "rc0-with-failure never says LINT OK" "LINT OK" "$OUT"
# --- G: repo-lint binary missing -> fail closed ---------------------------------
rm -f "$SB/repo/tools/repo-lint"
LINT_STUB_MODE=ok
run_tool "$SB"
assert_rc "missing repo-lint refuses (exit 7)" 7 "$RC"
assert_contains "missing repo-lint says it is not found" "not found" "$OUT"
write_lint_stub "$SB/repo/tools/repo-lint"
# --- H: child hangs -> bounded, fail closed ------------------------------------
export GLADEX_LINT_TIMEOUT=1
LINT_STUB_MODE=hang
run_tool "$SB"
unset GLADEX_LINT_TIMEOUT
assert_rc "hanging child refuses (exit 7)" 7 "$RC"
assert_contains "hanging child says it timed out" "timed out" "$OUT"
assert_contains "hanging child names the bound" "after 1s" "$OUT"
# --- I: --force bypasses the lint gate, loudly ---------------------------------
LINT_STUB_MODE=php-fail
run_tool "$SB" --force
assert_rc "--force bypasses the lint gate (exit 0)" 0 "$RC"
assert_contains "--force warns on stderr" "--force bypassing commit lint gate" "$OUT"
assert_contains "--force reaches the rsync" "[DRY-RUN] Would run: rsync" "$OUT"
# --- J: --help documents the gate, its exit code and its hooks -----------------
LINT_STUB_MODE=ok
run_tool "$SB" --help
assert_rc "--help exits 0" 0 "$RC"
assert_contains "--help documents the gate" "Commit lint gate" "$OUT"
assert_contains "--help documents exit code 7" "7 commit lint gate refused" "$OUT"
assert_contains "--help documents the repo-lint hook" "GLADEX_REPO_LINT_BIN" "$OUT"
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && sed -n '240,400p' tests/test_promote_lint_gate.sh
assert_contains "--help documents the repo-lint hook" "GLADEX_REPO_LINT_BIN" "$OUT"
assert_contains "--help documents the timeout hook" "GLADEX_LINT_TIMEOUT" "$OUT"
assert_contains "--help still documents --force" "--force" "$OUT"
assert_contains "--help still documents the verdict gate" "Reviewer verdict gate" "$OUT"
assert_contains "--help still documents the dev-sync gate" "Dev-sync gate" "$OUT"
assert_contains "--help still documents exit code 6" "6 dev-sync gate refused" "$OUT"
# --- K: gate order — verdict (5) and dev-sync (6) outrank the lint gate (7) ----
new_sandbox
write_verdict "$SB" "VERDICT-20260924-150100-stale.md" \
"VERDICT: APPROVE
" '2026-09-24 15:01:00'
touch -d '2026-09-24 16:00:00' "$SB/repo/app/src/php/a.php"
LINT_STUB_MODE=php-fail
run_tool "$SB"
assert_rc "stale verdict wins the refusal (exit 5, not 7)" 5 "$RC"
assert_contains "the verdict refusal is the one reported" "STALE" "$OUT"
new_sandbox
write_verdict "$SB" "VERDICT-20260924-150200-devdrift.md" \
"VERDICT: APPROVE
" '2026-09-24 15:02:00'
printf '<?php // dev-only\n' > "$SB/dev/src/php/hotfix.php"
LINT_STUB_MODE=php-fail
run_tool "$SB"
assert_rc "dev-sync refusal outranks the lint gate (exit 6, not 7)" 6 "$RC"
assert_contains "the dev-sync refusal is the one reported" "DEV-SYNC REFUSED" "$OUT"
# --- L: static contract — the gate call sits BEFORE the first mutating step ----
# promote() copies PROMOTED_TREES in step 3; the gate must be called before it.
GATE_LINE=$(grep -n "lint_rc = check_lint_gate" "$TOOL" | head -1 | cut -d: -f1)
COPY_LINE=$(grep -n "# 3. Copy every promoted tree" "$TOOL" | head -1 | cut -d: -f1)
if [ -n "$GATE_LINE" ] && [ -n "$COPY_LINE" ] && [ "$GATE_LINE" -lt "$COPY_LINE" ]; then
ok "static: lint gate called (line $GATE_LINE) before the copy loop (line $COPY_LINE)"
else
fail "static: gate call (line ${GATE_LINE:-absent}) must precede the copy loop (line ${COPY_LINE:-absent})"
fi
# --- M: GLADEX_REPO_LINT_BIN overrides the child -------------------------------
new_sandbox
write_verdict "$SB" "VERDICT-20260924-150300-hook.md" \
"VERDICT: APPROVE
" '2026-09-24 15:03:00'
write_lint_stub "$SB/external-lint"
export GLADEX_REPO_LINT_BIN="$SB/external-lint"
LINT_STUB_MODE=php-fail
run_tool "$SB"
unset GLADEX_REPO_LINT_BIN
assert_rc "GLADEX_REPO_LINT_BIN is used instead of tools/repo-lint (exit 7)" 7 "$RC"
assert_contains "the external child's failure is reported" "app/src/php/b.php" "$OUT"
export GLADEX_REPO_LINT_BIN="$SB/repo/tools/repo-lint"
LINT_STUB_MODE=ok
run_tool "$SB"
unset GLADEX_REPO_LINT_BIN
assert_rc "a clean external child opens the gate (exit 0)" 0 "$RC"
# --- N: live child — the REAL repo-lint against a throwaway git repo -----------
new_sandbox
cp "$REAL_REPO_LINT" "$SB/repo/tools/repo-lint"
chmod +x "$SB/repo/tools/repo-lint"
git -C "$SB/repo" init -q 2>/dev/null
git -C "$SB/repo" -c user.email=lint@sandbox.invalid -c user.name=lint \
add -A >/dev/null 2>&1
git -C "$SB/repo" -c user.email=lint@sandbox.invalid -c user.name=lint \
commit -qm "clean tree" >/dev/null 2>&1
# future-dated verdict: stays fresh across BOTH runs below (the second adds a
# file whose mtime is "now", i.e. later than any hand-picked date)
write_verdict "$SB" "VERDICT-20270101-000000-live.md" \
"VERDICT: APPROVE
" '2027-01-01 00:00:00'
LINT_STUB_MODE=ok
run_tool "$SB"
assert_rc "live: clean committed tree exits 0" 0 "$RC"
assert_contains "live: gate reports LINT OK" "LINT OK" "$OUT"
printf '<?php echo "unterminated\n' > "$SB/repo/app/src/php/bad.php"
cp "$SB/repo/app/src/php/bad.php" "$SB/dev/src/php/bad.php"
git -C "$SB/repo" -c user.email=lint@sandbox.invalid -c user.name=lint \
add -A >/dev/null 2>&1
git -C "$SB/repo" -c user.email=lint@sandbox.invalid -c user.name=lint \
commit -qm "broken tree" >/dev/null 2>&1
run_tool "$SB"
assert_rc "live: broken committed tree refuses (exit 7)" 7 "$RC"
assert_contains "live: the committed bad file is named" "bad.php" "$OUT"
# --- O: mutations — each plant must break the INTENDED assertion ---------------
# Planted on copies (the real tool is never edited), precondition-asserted by
# GREPPING THE SEARCH STRING for exactly one occurrence (counting sed OUTPUT
# lines would miscount a replacement that inserts a newline), py-validated so
# the red can only come from behaviour, then run against the one scenario it
# targets.
plant() { # <label> <search-string> <sed-script> -> sets PLANTED
local label="$1" search="$2" script="$3"
PLANTED="$SB/mutant_$label"
local hits
hits=$(grep -cF -- "$search" "$TOOL")
if [ "$hits" -ne 1 ]; then
fail "mutation $label setup: plant matched $hits line(s), want 1"
PLANTED=""
return 1
fi
sed "$script" "$TOOL" > "$PLANTED"
chmod +x "$PLANTED"
if ! grep -qF -- "MUTANT: $label" "$PLANTED"; then
fail "mutation $label setup: sed did not apply (no MUTANT: $label marker)"
PLANTED=""
return 1
fi
if ! python3 -c "import ast,sys; ast.parse(open(sys.argv[1]).read())" "$PLANTED" 2>/dev/null; then
fail "mutation $label setup: mutant does not parse as Python"
PLANTED=""
return 1
fi
return 0
}
expect_divergence() { # <label> <real-want> <mut-want> [extra-mutant-args...]
local label="$1" real_want="$2" mut_want="$3"
shift 3
local real_rc=$RC
run_mutant "$PLANTED" "$SB" "$@"
local mut_rc=$RC
if [ "$real_rc" = "$real_want" ] && [ "$mut_rc" = "$mut_want" ]; then
ok "mutation $label caught (real=$real_rc mutant=$mut_rc)"
else
fail "mutation $label (want real=$real_want mutant=$mut_want, got real=$real_rc mutant=$mut_rc)"
fi
}
# M1: the gate result ignored at the call site (the original defect class)
new_sandbox
write_verdict "$SB" "VERDICT-20260924-150500-m1.md" "VERDICT: APPROVE
" '2026-09-24 15:05:00'
if plant M1 ' if lint_rc != 0:' \
's/ if lint_rc != 0:/ if False: # MUTANT: M1 lint gate result ignored/'; then
LINT_STUB_MODE=php-fail
run_tool "$SB"
expect_divergence M1 7 0
fi
# M2: a refusal that exits success
if plant M2 ' return EXIT_LINT' \
's/^ return EXIT_LINT$/ return 0 # MUTANT: M2 refusal reports success/'; then
LINT_STUB_MODE=php-fail
run_tool "$SB"
expect_divergence M2 7 0
fi
# M3: rc 0 alone treated as clean (the child's own JSON ignored)
if plant M3 'if rc == 0 and _lint_reports_clean(payload):' \
's/if rc == 0 and _lint_reports_clean(payload):/if rc == 0: # MUTANT: M3 exit code only/'; then
LINT_STUB_MODE=rc0-not-ok
run_tool "$SB"
expect_divergence M3 7 0
fi
# M4: the timeout handler re-raises (a hang escapes as a crash, not a refusal)
if plant M4 'except subprocess.TimeoutExpired: # lint gate: child ran past the bound' \
's/except subprocess.TimeoutExpired: # lint gate: child ran past the bound/except subprocess.TimeoutExpired: # MUTANT: M4 handler re-raises\n raise/'; then
export GLADEX_LINT_TIMEOUT=1
LINT_STUB_MODE=hang
run_tool "$SB"
> build · mimo-v2.6-flash-free
Select another run log from the list above. Only files matching run-YYYYMMDD-HHMMSS-N.log are readable.
[Fri Sep 25 01:37:40 2026] 127.0.0.1:60442 Accepted [Fri Sep 25 01:37:40 2026] 127.0.0.1:60442 Closing [Fri Sep 25 01:37:40 2026] 127.0.0.1:60446 Accepted [Fri Sep 25 01:37:40 2026] 127.0.0.1:60446 Closing [Fri Sep 25 01:37:40 2026] 127.0.0.1:60462 Accepted [Fri Sep 25 01:37:40 2026] 127.0.0.1:60462 Closing [Fri Sep 25 01:42:50 2026] 127.0.0.1:37798 Accepted [Fri Sep 25 01:42:50 2026] 127.0.0.1:37798 Closing [Fri Sep 25 01:42:50 2026] 127.0.0.1:37802 Accepted [Fri Sep 25 01:42:50 2026] 127.0.0.1:37802 Closing [Fri Sep 25 01:42:51 2026] 127.0.0.1:37814 Accepted [Fri Sep 25 01:42:51 2026] 127.0.0.1:37814 Closing [Fri Sep 25 01:42:51 2026] 127.0.0.1:37818 Accepted [Fri Sep 25 01:42:51 2026] 127.0.0.1:37818 Closing [Fri Sep 25 01:42:54 2026] 127.0.0.1:37824 Accepted [Fri Sep 25 01:42:54 2026] 127.0.0.1:37824 Closing [Fri Sep 25 01:42:55 2026] 127.0.0.1:44098 Accepted [Fri Sep 25 01:42:55 2026] 127.0.0.1:44098 Closing [Fri Sep 25 01:42:55 2026] 127.0.0.1:44106 Accepted [Fri Sep 25 01:42:55 2026] 127.0.0.1:44106 Closing [Fri Sep 25 01:43:00 2026] 127.0.0.1:44120 Accepted [Fri Sep 25 01:43:00 2026] 127.0.0.1:44120 Closing [Fri Sep 25 01:43:00 2026] 127.0.0.1:44134 Accepted [Fri Sep 25 01:43:00 2026] 127.0.0.1:44134 Closing [Fri Sep 25 01:43:00 2026] 127.0.0.1:44150 Accepted [Fri Sep 25 01:43:00 2026] 127.0.0.1:44150 Closing [Fri Sep 25 01:43:04 2026] 127.0.0.1:44164 Accepted [Fri Sep 25 01:43:04 2026] 127.0.0.1:44164 Closing [Fri Sep 25 01:43:04 2026] 127.0.0.1:38886 Accepted [Fri Sep 25 01:43:04 2026] 127.0.0.1:38886 Closing [Fri Sep 25 01:43:05 2026] 127.0.0.1:38896 Accepted [Fri Sep 25 01:43:05 2026] 127.0.0.1:38896 Closing [Fri Sep 25 01:43:09 2026] 127.0.0.1:38912 Accepted [Fri Sep 25 01:43:09 2026] 127.0.0.1:38912 Closing [Fri Sep 25 01:43:10 2026] 127.0.0.1:38918 Accepted [Fri Sep 25 01:43:10 2026] 127.0.0.1:38918 Closing [Fri Sep 25 01:43:10 2026] 127.0.0.1:38934 Accepted [Fri Sep 25 01:43:10 2026] 127.0.0.1:38934 Closing [Fri Sep 25 01:43:30 2026] 127.0.0.1:53584 Accepted [Fri Sep 25 01:43:30 2026] 127.0.0.1:53584 Closing [Fri Sep 25 01:43:30 2026] 127.0.0.1:53596 Accepted [Fri Sep 25 01:43:30 2026] 127.0.0.1:53596 Closing [Fri Sep 25 01:43:30 2026] 127.0.0.1:53610 Accepted [Fri Sep 25 01:43:30 2026] 127.0.0.1:53610 Closing [Fri Sep 25 01:43:39 2026] 127.0.0.1:34760 Accepted [Fri Sep 25 01:43:39 2026] 127.0.0.1:34760 Closing [Fri Sep 25 01:43:40 2026] 127.0.0.1:34764 Accepted [Fri Sep 25 01:43:40 2026] 127.0.0.1:34764 Closing [Fri Sep 25 01:43:40 2026] 127.0.0.1:34780 Accepted [Fri Sep 25 01:43:40 2026] 127.0.0.1:34780 Closing [Fri Sep 25 01:44:35 2026] 127.0.0.1:51444 Accepted [Fri Sep 25 01:44:35 2026] 127.0.0.1:51444 Closing [Fri Sep 25 01:44:35 2026] 127.0.0.1:51450 Accepted [Fri Sep 25 01:44:35 2026] 127.0.0.1:51450 Closing [Fri Sep 25 01:44:38 2026] 127.0.0.1:51462 Accepted [Fri Sep 25 01:44:38 2026] 127.0.0.1:51462 Closing [Fri Sep 25 01:44:38 2026] 127.0.0.1:51470 Accepted [Fri Sep 25 01:44:38 2026] 127.0.0.1:51470 Closing [Fri Sep 25 01:44:38 2026] 127.0.0.1:51474 Accepted
Generated 2026-09-24 23:44:38 UTC · Gladex.de