Gladex Agent Logs

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

Overview
Run logs460 files, 13.3 MB
Latest run logrun-20260925-084303-58.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20260925-084303-58.log 207 KB 2026-09-25 07:05:09
run-20260925-064014-57.log 294 KB 2026-09-25 06:33:03
run-20260925-052608-56.log 381 KB 2026-09-25 04:30:14
run-20260925-042134-55.log 200 KB 2026-09-25 03:16:08
run-20260925-031342-54.log 303 KB 2026-09-25 02:11:34
run-20260925-022932-53.log 212 KB 2026-09-25 01:03:42
run-20260925-012106-52.log 297 KB 2026-09-25 00:19:32
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
Tail — run-20260925-084303-58.log (last 200 lines)
  assert_order "mutation X: without line buffering the refusal overtakes stdout (fix is pinned)" \
    "DEV-SYNC REFUSED" "Starting promotion" "$OUT"
else
  fail "mutation X setup: sed did not plant the ordering mutant"
fi

# --- summary -------------------------------------------------------------------
echo ""
echo "==============================="
echo "promote-dev-to-prod gate suite: $PASS passed, $FAIL failed"
echo "==============================="
[ "$FAIL" -eq 0 ] || exit 1
exit 0
> build · mimo-v2.6-flash-free
← Edit repo/tests/test_promote_gate.sh
Index: repo/tests/test_promote_gate.sh
===================================================================
--- repo/tests/test_promote_gate.sh
+++ repo/tests/test_promote_gate.sh
@@ -439,8 +439,52 @@
 else
   fail "mutation X setup: sed did not plant the ordering mutant"
 fi
 
+# --- Y: ship-tree gate — the tree that ships is the tree that was committed ----
+# Step 3 rsyncs the WORKTREE while the commit lint gate measures HEAD's blobs,
+# so this is the only gate that asks whether those two are still one tree.
+# Future-dated verdict: every fixture below is written NOW and a 2026 verdict
+# would read as stale the moment a file is touched (section G).
+new_sandbox
+write_verdict "$SB" "VERDICT-20270101-000000-ship.md" \
+  "VERDICT: APPROVE
+" '2027-01-01 00:00:00'
+run_tool "$SB"
+assert_rc "committed promoted trees open the gate (exit 0)" 0 "$RC"
+assert_contains "the gate reports SHIP-TREE OK" "SHIP-TREE OK" "$OUT"
+assert_contains "and says what it compared" "match HEAD" "$OUT"
+
+# the same tree, edited after the commit and mirrored into dev so the dev-sync
+# gate stays green - only the NEW gate can speak here
+printf '<?php // edited after commit\n' > "$SB/repo/app/src/php/a.php"
+cp "$SB/repo/app/src/php/a.php" "$SB/dev/src/php/a.php"
+run_tool "$SB"
+assert_rc "an uncommitted promoted file refuses (exit 8)" 8 "$RC"
+assert_contains "the refusal names the file that would ship" "app/src/php/a.php" "$OUT"
+assert_contains "the refusal is labelled with its own gate and code" \
+  "SHIP-TREE REFUSED (exit 8)" "$OUT"
+assert_contains "the abort line names the gate" "Promotion aborted at the ship-tree gate" "$OUT"
+assert_not_contains "the mutating phase was never reached" "Copying source from" "$OUT"
+
+# --force bypasses it loudly, like every other gate
+run_tool "$SB" --force
+assert_rc "--force bypasses the ship-tree gate (exit 0)" 0 "$RC"
+assert_contains "--force warns about THIS gate by name" "bypassing ship-tree gate" "$OUT"
+assert_contains "--force still reaches the planned rsync" "[DRY-RUN] Would run: rsync" "$OUT"
+
+# gate order: a stale human verdict (5) outranks it (8) - the same precedence
+# the lint gate documents in section K of test_promote_lint_gate.sh
+new_sandbox
+write_verdict "$SB" "VERDICT-20260924-120000-shipstale.md" \
+  "VERDICT: APPROVE
+" '2026-09-24 12:00:00'
+printf '<?php // dirty\n' > "$SB/repo/app/src/php/a.php"
+cp "$SB/repo/app/src/php/a.php" "$SB/dev/src/php/a.php"
+run_tool "$SB"
+assert_rc "a stale verdict wins the refusal (exit 5, not 8)" 5 "$RC"
+assert_contains "the verdict refusal is the one reported" "STALE" "$OUT"
+
 # --- summary -------------------------------------------------------------------
 echo ""
 echo "==============================="
 echo "promote-dev-to-prod gate suite: $PASS passed, $FAIL failed"

> build · mimo-v2.6-flash-free
← Edit repo/tests/test_promote_lint_gate.sh
Index: repo/tests/test_promote_lint_gate.sh
===================================================================
--- repo/tests/test_promote_lint_gate.sh
+++ repo/tests/test_promote_lint_gate.sh
@@ -136,8 +136,16 @@
   LINT_STUB_MODE=ok
   # deterministic baseline: sources are OLD, verdicts are dated relative to them
   touch -d '2026-09-24 09:00:00' "$SB/repo/app/src/php/a.php" \
                                  "$SB/repo/examples/workflows/hello-workflow.json"
+  # A real git repo: after a CLEAN lint the ship-tree gate asks git whether the
+  # trees this tool would copy still equal HEAD, and a sandbox with no .git
+  # makes that unanswerable (fail closed) in every section below.
+  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 "sandbox baseline" >/dev/null 2>&1
 }
 
 # write_verdict <sandbox> <filename> <body> <date>
 write_verdict() {

> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "OK3\|emit(\|G_LINT_OK\|G_DEVSYNC_OK\|G_VERDICT_OK" tests/test_system_status_promote_gates.sh
213:def emit(gates, ready, blocked, dry_run=True, sha="STUB-SHA",
279:G_VERDICT_OK = gate("verdict", "ok", 0,
281:G_DEVSYNC_OK = gate("dev-sync", "ok", 0,
283:G_LINT_OK = gate("commit-lint", "ok", 0,
285:OK3 = [G_VERDICT_OK, G_DEVSYNC_OK, G_LINT_OK]
288:    emit(OK3, True, [])
290:    emit([gate("verdict", "refused", 5,
292:          G_DEVSYNC_OK, G_LINT_OK], False, ["verdict"], rc=0)
294:    emit([G_VERDICT_OK,
297:          G_LINT_OK], False, ["dev-sync"])
299:    emit([G_VERDICT_OK, G_DEVSYNC_OK,
304:    emit([gate("verdict", "refused", 5, "no verdict in /srv/repo/mailboxes/reviewer-to-main")],
307:    emit(OK3, True, [], dry_run=False)
309:    emit([gate("verdict", "refused", 5, "no verdict"), G_DEVSYNC_OK, G_LINT_OK],
312:    emit(OK3, False, [])
314:    emit(OK3, False, [], rc=1)
1078:if plant M1 'emit("warning", "%s: %s%s" % (refusal_header(doc), summary, tag))' \
1079:  's@emit("warning", "%s: %s%s" % (refusal_header(doc), summary, tag))@emit("ok", "promote-ready: MUTANT: M1 all gates pass" + tag)@'; then
1280:if plant M13 'emit("warning", "%s: %s%s" % (refusal_header(doc), summary, tag))' \
1281:  's@emit("warning", "%s: %s%s" % (refusal_header(doc), summary, tag))@emit("warning", "not promotable: %s%s" % (summary, tag))  # MUTANT: M13 refusal not dated@'; then
$ cd /data/repo && grep -n "verdict, dev-sync\|three gates\|all three" tests/test_system_status_promote_gates.sh
7:# The three gates live behind a human-printing tool whose exit codes cannot
8:# carry all three verdicts (a plain --dry-run stops at the first refusal,
14:#   * all three gates pass                       -> ok "promote-ready: ..."
39:#     three gates' children - `dev-sync`'s source-sync-check path was recorded
453:assert_contains "detail names all three gates" "verdict, dev-sync and commit-lint" \
689:# the path it ran, and all three outcomes must be readable from the detail.
862:case "$ARGV" in *"--force"*)   ok "child is called with --force (all three gates evaluated)" ;;
> build · mimo-v2.6-flash-free
→ Read repo/tests/test_system_status_promote_gates.sh [offset=277, limit=42]
> build · mimo-v2.6-flash-free
← Edit repo/tests/test_system_status_promote_gates.sh
Index: repo/tests/test_system_status_promote_gates.sh
===================================================================
--- repo/tests/test_system_status_promote_gates.sh
+++ repo/tests/test_system_status_promote_gates.sh
@@ -281,38 +281,50 @@
 G_DEVSYNC_OK = gate("dev-sync", "ok", 0,
                     "dev tree (/opt/startup/dev) matches the repo - nothing would be dropped")
 G_LINT_OK = gate("commit-lint", "ok", 0,
                  "repo-lint verdict on HEAD clean (165 file(s) linted, exit 0)")
-OK3 = [G_VERDICT_OK, G_DEVSYNC_OK, G_LINT_OK]
+G_SHIPTREE_OK = gate("ship-tree", "ok", 0,
+                     "promoted trees match HEAD (app/src/php, examples/workflows)")
+OK4 = [G_VERDICT_OK, G_DEVSYNC_OK, G_LINT_OK, G_SHIPTREE_OK]
 
 if mode == "ready":
-    emit(OK3, True, [])
+    emit(OK4, True, [])
 elif mode == "verdict-refused":
     emit([gate("verdict", "refused", 5,
                "no verdict in /srv/repo/mailboxes/reviewer-to-main (expected VERDICT-...md containing 'VERDICT: APPROVE')"),
-          G_DEVSYNC_OK, G_LINT_OK], False, ["verdict"], rc=0)
+          G_DEVSYNC_OK, G_LINT_OK, G_SHIPTREE_OK], False, ["verdict"], rc=0)
 elif mode == "dev-refused":
     emit([G_VERDICT_OK,
           gate("dev-sync", "refused", 6,
                "dev tree differs from the repo in 1 file(s): src/php/x.php (only_in_dev) - this promotion copies REPO -> prod, so that work would be silently dropped"),
-          G_LINT_OK], False, ["dev-sync"])
+          G_LINT_OK, G_SHIPTREE_OK], False, ["dev-sync"])
 elif mode == "lint-refused":
     emit([G_VERDICT_OK, G_DEVSYNC_OK,
           gate("commit-lint", "refused", 7,
-               "committed file(s) fail to parse or compile: app/src/php/bad.php")],
+               "committed file(s) fail to parse or compile: app/src/php/bad.php"),
+          G_SHIPTREE_OK],
          False, ["commit-lint"])
+elif mode == "ship-refused":
+    # The fourth gate on its own: HEAD lints clean, yet the tree rsync would
+    # ship is not the tree repo-lint checked.
+    emit([G_VERDICT_OK, G_DEVSYNC_OK, G_LINT_OK,
+          gate("ship-tree", "refused", 8,
+               "worktree differs from HEAD in 1 path(s): src/php/a.php - repo-lint "
+               "verified the committed HEAD, rsync ships the worktree")],
+         False, ["ship-tree"])
 elif mode == "not-evaluated":
     emit([gate("verdict", "refused", 5, "no verdict in /srv/repo/mailboxes/reviewer-to-main")],
          False, ["verdict"], sha=None)
 elif mode == "no-dry-run":
-    emit(OK3, True, [], dry_run=False)
+    emit(OK4, True, [], dry_run=False)
 elif mode == "ready-lie":
-    emit([gate("verdict", "refused", 5, "no verdict"), G_DEVSYNC_OK, G_LINT_OK],
+    emit([gate("verdict", "refused", 5, "no verdict"), G_DEVSYNC_OK, G_LINT_OK,
+          G_SHIPTREE_OK],
          True, ["verdict"])
 elif mode == "all-ok-not-ready":
-    emit(OK3, False, [])
+    emit(OK4, False, [])
 elif mode == "run-failed":
-    emit(OK3, False, [], rc=1)
+    emit(OK4, False, [], rc=1)
 elif mode == "garbage":
     print("<html><body><h1>502 Bad Gateway</h1></body></html>")
     sys.exit(0)
 elif mode == "empty":

> build · mimo-v2.6-flash-free
→ Read repo/tests/test_system_status_promote_gates.sh [limit=95, offset=445]
> 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)
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48796 Accepted
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48796 Closing
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48804 Accepted
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48804 Closing
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48814 Accepted
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48814 Closing
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48818 Accepted
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48818 Closing
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48828 Accepted
[Fri Sep 25 08:51:12 2026] 127.0.0.1:48828 Closing
[Fri Sep 25 08:51:44 2026] 127.0.0.1:48126 Accepted
[Fri Sep 25 08:51:44 2026] 127.0.0.1:48126 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56500 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56500 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56516 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56516 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56518 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56518 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56520 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56520 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56532 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56532 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56536 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56536 Closing
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56548 Accepted
[Fri Sep 25 08:52:36 2026] 127.0.0.1:56548 Closing
[Fri Sep 25 08:52:38 2026] 127.0.0.1:56558 Accepted
[Fri Sep 25 08:52:38 2026] 127.0.0.1:56558 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56412 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56412 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56424 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56424 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56428 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56428 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56440 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56440 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56448 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56448 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56464 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56464 Closing
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56470 Accepted
[Fri Sep 25 08:55:42 2026] 127.0.0.1:56470 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53596 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53596 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53604 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53604 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53610 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53610 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53616 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53616 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53632 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53632 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53644 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53644 Closing
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53648 Accepted
[Fri Sep 25 08:57:06 2026] 127.0.0.1:53648 Closing
[Fri Sep 25 09:05:25 2026] 127.0.0.1:56666 Accepted
[Fri Sep 25 09:05:25 2026] 127.0.0.1:56666 Closing
[Fri Sep 25 09:05:25 2026] 127.0.0.1:56674 Accepted

Generated 2026-09-25 07:05:25 UTC · Gladex.de