Agent run logs & app logs · env: prod · LAN-only investor surface
| Run logs | 459 files, 12.9 MB |
| Latest run log | run-20260925-064014-57.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260925-064014-57.log | 137 KB | 2026-09-25 05:57:24 |
| 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 |
| run-20260923-235334-8.log | 29 KB | 2026-09-23 21:55:45 |
--- repo/tests/test_system_status_promote_gates.sh
+++ repo/tests/test_system_status_promote_gates.sh
@@ -719,8 +719,139 @@
assert_not_contains "two blanks are never called the same child" "the same child" "$DETAIL"
assert_not_contains "and the old guess does not come back" "binary or env" "$DETAIL"
PG_CHILD=""
+echo "=== 14d. the SECOND pair: dev == repo asked twice (gate vs this run) ==="
+# The first pair (14b/14c) compares repo-lint seen twice: the go-compile row
+# and the commit-lint gate. The dev-sync gate's child was the one gate child
+# nothing compared - dev == repo was asked exactly ONCE per run, so nothing
+# could tell "the gate passed" from "the gate passed and the tree is now
+# different". The row now runs source-sync-check --env dev itself and applies
+# the same rule: only a CONTRADICTION speaks, as `warning` (this row does not
+# know which side is right - the two checks are seconds apart, so a dev tree
+# that changed between them looks exactly like a structural disagreement),
+# and every non-claim state stays silent.
+RL_MODE=ok; PG_CHILD=""; PG_DSCHILD=""; SS_BIN="$STUB/source-sync-check"
+
+PG_MODE=ready; SS_MODE=ok # both say: dev matches the repo
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "ok" ] \
+ && ok "agreement (both in sync) stays promote-ready" \
+ || bad "agreement (both in sync) stays promote-ready (got '$(item_field "$OUT" "promote-gates" status)')"
+assert_contains "the row still reports the verdict" "promote-ready" "$DETAIL"
+assert_not_contains "the second pair speaks only on a contradiction" "disagree" "$DETAIL"
+
+PG_MODE=dev-refused; SS_MODE=drift # both see the SAME drift
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "warning" ] \
+ && ok "agreement on drift -> the ordinary refusal" \
+ || bad "agreement on drift -> the ordinary refusal"
+assert_contains "the refusal keeps its dated header" "not promotable" "$DETAIL"
+assert_contains "and still names the refusing gate" "dev-sync REFUSED" "$DETAIL"
+assert_not_contains "two agreeing checks never read as divergence" "disagree" "$DETAIL"
+
+PG_MODE=ready; SS_MODE=drift # CONTRADICTION A: gate passed, this run sees drift
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "warning" ] \
+ && ok "gate passed + drift here -> warning (never an error)" \
+ || bad "gate passed + drift here -> warning (got '$(item_field "$OUT" "promote-gates" status)')"
+assert_contains "the disagreement is spelled out with both verdicts" \
+ "dev-sync gate and source-sync-check disagree (gate passed, this run reports drift)" "$DETAIL"
+assert_contains "it still carries the gate summary" "dev-sync OK" "$DETAIL"
+assert_not_contains "and never reports promote-ready" "promote-ready" "$DETAIL"
+[ "$(run_exit)" = "0" ] && ok "the second pair keeps the tool exit 0" \
+ || bad "the second pair keeps the tool exit 0"
+
+PG_MODE=dev-refused; SS_MODE=ok # CONTRADICTION B: gate refused, this run says in sync
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "warning" ] \
+ && ok "gate refused + in sync here -> warning" \
+ || bad "gate refused + in sync here -> warning"
+assert_contains "the reverse disagreement is spelled out with both verdicts" \
+ "dev-sync gate and source-sync-check disagree (this run reports in sync, the gate refused)" "$DETAIL"
+assert_contains "the refusing gate's reason survives the guard" "silently dropped" "$DETAIL"
+assert_not_contains "and never reports promote-ready" "promote-ready" "$DETAIL"
+assert_not_contains "nor is it dressed as an ordinary dated refusal" "not promotable" "$DETAIL"
+
+echo "--- a second sighting that is NOT a claim never speaks ---"
+PG_MODE=ready; SS_MODE=garbage # unreadable output: no verdict to compare
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "ok" ] \
+ && ok "unreadable second sighting is not a claim -> row stays ok" \
+ || bad "unreadable second sighting is not a claim (got '$(item_field "$OUT" "promote-gates" status)')"
+assert_contains "the ordinary verdict stands" "promote-ready" "$DETAIL"
+assert_not_contains "an unreadable child never invents a divergence" "disagree" "$DETAIL"
+
+PG_MODE=dev-refused; SS_MODE=garbage
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+assert_contains "the ordinary refusal stands when this run could not read its child" \
+ "not promotable" "$DETAIL"
+assert_not_contains "and is not re-diagnosed as divergence" "disagree" "$DETAIL"
+
+PG_MODE=ready; SS_MODE=missing # exit 3: the child could not verify
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "ok" ] \
+ && ok "an inconclusive (exit 3) second sighting is not a claim" \
+ || bad "an inconclusive (exit 3) second sighting is not a claim"
+assert_not_contains "cannot-verify is not divergence" "disagree" "$DETAIL"
+
+PG_MODE=ready; SS_MODE=hang; SS_TMO=1 # killed by our own budget
+OUT=$(run_status); SS_TMO=5
+DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+[ "$(item_field "$OUT" "promote-gates" status)" = "ok" ] \
+ && ok "a second sighting timed out by our budget is not a claim" \
+ || bad "a second sighting timed out by our budget is not a claim"
+assert_not_contains "a timeout never invents a divergence" "disagree" "$DETAIL"
+
+SS_BIN="$SANDBOX/no-such-source-sync-check"; PG_MODE=dev-refused
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+SS_BIN="$STUB/source-sync-check"
+assert_contains "a second child that never RAN leaves the ordinary refusal" \
+ "not promotable" "$DETAIL"
+assert_not_contains "nothing ran, so nothing can contradict" "disagree" "$DETAIL"
+
+PG_MODE=not-evaluated; SS_MODE=ok # the gate side does not exist at all
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+assert_contains "an unevaluated gate is still named" "dev-sync NOT-EVALUATED" "$DETAIL"
+assert_not_contains "with no gate verdict there is nothing to contradict" "disagree" "$DETAIL"
+PG_MODE=ready; SS_MODE=ok
+
+echo "=== 14e. the second pair's EVIDENCE: which child each side ran ==="
+# Same discipline as 14c: a disagreement must name the binary behind each
+# verdict. THIS run records the GLADEX_SOURCE_SYNC_BIN path it executed; the
+# report carries the dev-sync gate's `gates[].child` - the field recorded
+# since [0.4.43] that nothing read. The ours-side path is recorded whenever
+# the child completed (we know WHAT ran); the unrecorded branch below is
+# therefore the gate's side, exactly as an older report would produce it.
+PG_MODE=ready; SS_MODE=drift
+
+PG_DSCHILD="$STUB/source-sync-check" # the very binary this run executed
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+assert_contains "the guard names the binary BOTH sides ran" \
+ "both ran $STUB/source-sync-check" "$DETAIL"
+assert_contains "and the diagnosis is about the tree or the environment, evidenced" \
+ "the same child, so either the dev tree changed between the two checks or their environments differed" "$DETAIL"
+assert_not_contains "never pair 1's vaguer environment line" \
+ "the difference is in the environment" "$DETAIL"
+assert_contains "the disagreement still leads the detail" \
+ "disagree (gate passed, this run reports drift)" "$DETAIL"
+assert_not_contains "and the row never falls back to promote-ready" "promote-ready" "$DETAIL"
+
+PG_DSCHILD="$SANDBOX/other-source-sync-check" # a DIFFERENT binary than this run's
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+assert_contains "different binaries -> both are NAMED" \
+ "they ran DIFFERENT children (source-sync $STUB/source-sync-check, dev-sync gate $SANDBOX/other-source-sync-check)" "$DETAIL"
+assert_not_contains "and never called one child" "the same child" "$DETAIL"
+assert_not_contains "nor blamed the tree changing for two different binaries" \
+ "dev tree changed between the two checks" "$DETAIL"
+
+PG_MODE=dev-refused; SS_MODE=ok; PG_DSCHILD="" # the gate recorded no child
+OUT=$(run_status); DETAIL="$(item_field "$OUT" "promote-gates" detail)"
+assert_contains "an unrecorded side is said to be unrecorded, the other named" \
+ "the child each check ran is not BOTH recorded (source-sync $STUB/source-sync-check, dev-sync gate ?)" "$DETAIL"
+assert_not_contains "two blanks are never called one child" "the same child" "$DETAIL"
+PG_DSCHILD=""; PG_MODE=ready; SS_MODE=ok
+
echo "=== 15. the invocation the child RECEIVES ==="
PG_MODE=ready
run_status >/dev/null
ARGV="$(sed -n '1p' "$PG_LOG" 2>/dev/null || true)"
> build · mimo-v2.6-flash-free
[0m← [0mEdit 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
@@ -864,8 +864,24 @@
*) bad "child is called with --format json (got '$ARGV')" ;; esac
[ "$PROBE" = "GATE_PROBE=1" ] && ok "child is called with GLADEX_GATE_PROBE=1" \
|| bad "child is called with GLADEX_GATE_PROBE=1 (got '$PROBE')"
+echo "=== 15b. the second child's invocation (what source-sync-check RECEIVES) ==="
+# The second pair is only comparable if this run asks the SAME question the
+# gate asked: `--env dev` (not the child's default of both envs) against the
+# SAME repo promote was given. Asserted on the argv/env the child logged.
+PG_MODE=ready; SS_MODE=ok
+run_status >/dev/null
+SS_ARGV="$(sed -n '1p' "$SS_LOG" 2>/dev/null || true)"
+SS_RDIR="$(sed -n '2p' "$SS_LOG" 2>/dev/null || true)"
+case "$SS_ARGV" in *"--env dev"*) ok "second child is called with --env dev" ;;
+ *) bad "second child is called with --env dev (got '$SS_ARGV')" ;; esac
+case "$SS_ARGV" in *"--format json"*) ok "second child is called with --format json" ;;
+ *) bad "second child is called with --format json (got '$SS_ARGV')" ;; esac
+[ "$SS_RDIR" = "GLADEX_REPO_DIR=$REPOF" ] \
+ && ok "second child is pointed at the SAME repo as promote" \
+ || bad "second child is pointed at the SAME repo as promote (got '$SS_RDIR')"
+
echo "=== 16. the human renderer carries the row ==="
# go-compile green (RL_MODE) so ONLY the promote row can move the verdict:
# a refused promotion must leave the dashboard's overall line untouched.
RL_MODE=ok; PG_MODE=verdict-refused
> build · mimo-v2.6-flash-free
[0m← [0mEdit 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
@@ -906,8 +906,15 @@
assert_contains "--help documents what the divergence guard compares" \
"the commit each check recorded is compared first" "$HELP"
assert_contains "--help documents how a refusal is DATED" "reviewer-mailbox" "$HELP"
assert_contains "--help documents the child-identity evidence" "child each check ran" "$HELP"
+assert_contains "--help documents the SECOND pair (dev == repo asked twice)" \
+ "SECOND pair" "$HELP"
+assert_contains "--help says the row runs the second sighting itself" \
+ "source-sync-check --env dev itself" "$HELP"
+assert_contains "--help names the principle" "one check seen twice" "$HELP"
+assert_contains "--help documents the second-pair binary hook" "GLADEX_SOURCE_SYNC_BIN" "$HELP"
+assert_contains "--help documents the second-pair timeout hook" "GLADEX_SOURCE_SYNC_TIMEOUT" "$HELP"
echo "=== 18. static: the child call carries all four safety tokens ==="
SRC=$([ -n "${SYSTEM_STATUS_BIN:-}" ] && cat "$TOOL" || cat "$REPO/tools/system-status")
INVOCATION=$(printf '%s' "$SRC" | grep -F -- '"$PROMOTE_BIN" --dry-run --force --format json' || true)
> 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 07:18:01 2026] 127.0.0.1:56760 Closing [Fri Sep 25 07:18:01 2026] 127.0.0.1:56780 Accepted [Fri Sep 25 07:18:02 2026] 127.0.0.1:56764 Closing [Fri Sep 25 07:18:02 2026] 127.0.0.1:56782 Accepted [Fri Sep 25 07:18:02 2026] 127.0.0.1:56780 Closing [Fri Sep 25 07:18:02 2026] 127.0.0.1:56790 Accepted [Fri Sep 25 07:18:02 2026] 127.0.0.1:56782 Closing [Fri Sep 25 07:18:02 2026] 127.0.0.1:56798 Accepted [Fri Sep 25 07:18:03 2026] 127.0.0.1:56790 Closing [Fri Sep 25 07:18:03 2026] 127.0.0.1:56808 Accepted [Fri Sep 25 07:18:03 2026] 127.0.0.1:56798 Closing [Fri Sep 25 07:18:03 2026] 127.0.0.1:56818 Accepted [Fri Sep 25 07:18:03 2026] 127.0.0.1:56808 Closing [Fri Sep 25 07:18:03 2026] 127.0.0.1:56828 Accepted [Fri Sep 25 07:18:04 2026] 127.0.0.1:56818 Closing [Fri Sep 25 07:18:04 2026] 127.0.0.1:56836 Accepted [Fri Sep 25 07:18:04 2026] 127.0.0.1:56828 Closing [Fri Sep 25 07:18:04 2026] 127.0.0.1:56850 Accepted [Fri Sep 25 07:18:04 2026] 127.0.0.1:56836 Closing [Fri Sep 25 07:18:04 2026] 127.0.0.1:56852 Accepted [Fri Sep 25 07:18:05 2026] 127.0.0.1:56850 Closing [Fri Sep 25 07:18:05 2026] 127.0.0.1:56854 Accepted [Fri Sep 25 07:18:05 2026] 127.0.0.1:56852 Closing [Fri Sep 25 07:18:05 2026] 127.0.0.1:56860 Accepted [Fri Sep 25 07:18:05 2026] 127.0.0.1:56854 Closing [Fri Sep 25 07:18:05 2026] 127.0.0.1:56872 Accepted [Fri Sep 25 07:18:06 2026] 127.0.0.1:56860 Closing [Fri Sep 25 07:18:06 2026] 127.0.0.1:56888 Accepted [Fri Sep 25 07:18:06 2026] 127.0.0.1:56872 Closing [Fri Sep 25 07:18:06 2026] 127.0.0.1:56890 Accepted [Fri Sep 25 07:18:06 2026] 127.0.0.1:56888 Closing [Fri Sep 25 07:18:06 2026] 127.0.0.1:56892 Accepted [Fri Sep 25 07:18:07 2026] 127.0.0.1:56890 Closing [Fri Sep 25 07:18:07 2026] 127.0.0.1:56906 Accepted [Fri Sep 25 07:18:07 2026] 127.0.0.1:56892 Closing [Fri Sep 25 07:18:07 2026] 127.0.0.1:56912 Accepted [Fri Sep 25 07:18:08 2026] 127.0.0.1:56906 Closing [Fri Sep 25 07:18:08 2026] 127.0.0.1:56922 Accepted [Fri Sep 25 07:18:08 2026] 127.0.0.1:56912 Closing [Fri Sep 25 07:18:08 2026] 127.0.0.1:56926 Accepted [Fri Sep 25 07:18:09 2026] 127.0.0.1:56922 Closing [Fri Sep 25 07:18:09 2026] 127.0.0.1:56942 Accepted [Fri Sep 25 07:18:10 2026] 127.0.0.1:56926 Closing [Fri Sep 25 07:18:10 2026] 127.0.0.1:56952 Accepted [Fri Sep 25 07:18:10 2026] 127.0.0.1:56942 Closing [Fri Sep 25 07:18:10 2026] 127.0.0.1:56960 Accepted [Fri Sep 25 07:18:11 2026] 127.0.0.1:56952 Closing [Fri Sep 25 07:18:11 2026] 127.0.0.1:56976 Accepted [Fri Sep 25 07:18:11 2026] 127.0.0.1:56960 Closing [Fri Sep 25 07:18:11 2026] 127.0.0.1:56982 Accepted [Fri Sep 25 07:18:12 2026] 127.0.0.1:56976 Closing [Fri Sep 25 07:18:12 2026] 127.0.0.1:51802 Accepted [Fri Sep 25 07:18:12 2026] 127.0.0.1:56982 Closing [Fri Sep 25 07:18:12 2026] 127.0.0.1:51808 Accepted [Fri Sep 25 07:18:13 2026] 127.0.0.1:51802 Closing [Fri Sep 25 07:18:14 2026] 127.0.0.1:51808 Closing [Fri Sep 25 07:57:30 2026] 127.0.0.1:38154 Accepted [Fri Sep 25 07:57:30 2026] 127.0.0.1:38154 Closing [Fri Sep 25 07:57:30 2026] 127.0.0.1:38156 Accepted
Generated 2026-09-25 05:57:30 UTC · Gladex.de