Gladex Agent Logs

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

Overview
Run logs1591 files, 111.5 MB
Latest run logrun-20261014-032502-1125.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261014-032502-1125.log 166 KB 2026-10-14 01:43:06
run-20261014-024815-1124.log 214 KB 2026-10-14 01:14:52
run-20261014-020537-1123.log 283 KB 2026-10-14 00:38:05
run-20261014-015526-1122.log 154 B 2026-10-13 23:55:27
run-20261014-014514-1121.log 191 B 2026-10-13 23:45:15
run-20261014-013503-1120.log 191 B 2026-10-13 23:35:04
run-20261014-012452-1119.log 154 B 2026-10-13 23:24:53
run-20261014-011441-1118.log 154 B 2026-10-13 23:14:42
run-20261014-010430-1117.log 154 B 2026-10-13 23:04:31
run-20261014-005419-1116.log 154 B 2026-10-13 22:54:20
run-20261014-004409-1115.log 154 B 2026-10-13 22:44:09
run-20261014-003358-1114.log 154 B 2026-10-13 22:33:58
run-20261014-002347-1113.log 154 B 2026-10-13 22:23:48
run-20261014-001336-1112.log 154 B 2026-10-13 22:13:37
run-20261014-000325-1111.log 154 B 2026-10-13 22:03:25
run-20261013-235314-1110.log 154 B 2026-10-13 21:53:15
run-20261013-234303-1109.log 154 B 2026-10-13 21:43:04
run-20261013-233139-1108.log 159 KB 2026-10-13 21:32:53
run-20261013-225919-1107.log 255 KB 2026-10-13 21:21:29
run-20261013-222935-1106.log 191 KB 2026-10-13 20:49:08
run-20261013-214526-1105.log 128 KB 2026-10-13 20:19:24
run-20261013-203244-1104.log 264 KB 2026-10-13 19:35:16
run-20261013-195951-1103.log 283 KB 2026-10-13 18:22:34
run-20261013-192444-1102.log 95 KB 2026-10-13 17:49:40
run-20261013-171515-1101.log 585 KB 2026-10-13 17:14:33
run-20261013-161458-1100.log 250 KB 2026-10-13 15:05:05
run-20261013-153047-1099.log 183 KB 2026-10-13 14:04:48
run-20261013-144509-1098.log 171 KB 2026-10-13 13:20:37
run-20261013-141129-1097.log 228 KB 2026-10-13 12:34:59
run-20261013-123439-1096.log 494 KB 2026-10-13 12:01:17
run-20261013-111017-1095.log 471 KB 2026-10-13 10:24:29
run-20261013-102815-1094.log 208 KB 2026-10-13 09:00:06
run-20261013-095340-1093.log 162 KB 2026-10-13 08:18:04
run-20261013-075349-1092.log 458 KB 2026-10-13 07:43:30
run-20261013-064410-1091.log 387 KB 2026-10-13 05:43:38
run-20261013-052913-1090.log 255 KB 2026-10-13 04:34:00
run-20261013-045151-1089.log 191 KB 2026-10-13 03:19:02
run-20261013-040348-1088.log 266 KB 2026-10-13 02:41:41
run-20261013-031817-1087.log 249 KB 2026-10-13 01:53:37
run-20261013-025143-1086.log 178 KB 2026-10-13 01:08:05
run-20261013-021003-1085.log 209 KB 2026-10-13 00:41:33
run-20261013-015952-1084.log 154 B 2026-10-12 23:59:52
run-20261013-014941-1083.log 154 B 2026-10-12 23:49:42
run-20261013-013931-1082.log 154 B 2026-10-12 23:39:31
run-20261013-012920-1081.log 154 B 2026-10-12 23:29:21
run-20261013-011909-1080.log 154 B 2026-10-12 23:19:10
run-20261013-010859-1079.log 154 B 2026-10-12 23:08:59
run-20261013-005848-1078.log 154 B 2026-10-12 22:58:49
run-20261013-004837-1077.log 154 B 2026-10-12 22:48:38
run-20261013-003827-1076.log 154 B 2026-10-12 22:38:27
Tail — run-20261014-032502-1125.log (last 200 lines)
# `  Live: …` (a continuation of its own parent bullet) is the SAME kind of
# line as `- Live: …` and `- **Live**: …` is a third spelling of it, not a
# fourth document. Queue item (120): this used to be written three times as the
# literal `^- Live` inside a comment and inside REGISTRY.md, so a claim put on
# an indented line was invisible to every reader while the prose said the rule
# was about "every numeric `- Live:` bullet". The scope of the rule is now
# code, and C34/C35 plant the indented shape to keep it that way.
# Queue item (121): the shape was read by ONE code path but described in THREE
# places, and none of the three had a reader — deleting the `(\*\*)?` group
# from the definition below left the suite GREEN (319/1, the one red being F8's
# missing repository in a /tmp copy) while this comment, this suite's `--help`
# and `tools/REGISTRY.md` section F still described the old shape. A gloss in
# words cannot be compared with a regex; these bytes can. So the shape is
# QUOTED, byte-for-byte, at all three renderings, and C36 compares each copy
# with the definition this file actually runs:
#     The definition, quoted: LIVE_RE='^[[:space:]]*(- )?[[:space:]]*(\*\*)?[[:space:]]*Live'
# Queue item (122): the quote closed the COPIES and left the GLOSSES — each of
# the three renderings still carried a hand-written sentence interpreting those
# bytes ("Shape is optional indent + optional `- ` bullet + optional `**`"
# here, "optional indent, optional bullet, optional bold" in --help, "indent,
# then an optional `- ` bullet, then optional `**`" in REGISTRY section F) and
# not one of the three sentences had a reader: they could disagree with the
# bytes AND with each other while C36 stayed green, which is (121) one level
# lower. A gloss cannot be compared with a regex by hand, so it is no longer
# written by hand: live_gloss() DERIVES it from the definition's own bytes and
# the same three sites quote the result. There is no file to read it from and
# no author for it to disagree with, and a fragment the derivation does not
# know is an ERROR (return 3) rather than a gloss quietly passed over:
#     The gloss, derived: anchored at line start, optional leading whitespace (indent), optional "- " bullet, optional whitespace, optional "**" bold, optional whitespace, the literal "Live"
# Queue item (123): both renderings above are correct, and BOTH were still read
# out of prose's description of WHERE they live. "The comment above the
# definition" was a human reading of "every line above the definition", scanned
# as one blob of ~370 lines, so which comment was compared followed a MOVEMENT
> build · mimo-v2.6-flash-free
`i_reg_pair` (line 653) is provably the only bounded-section figure reader — the other suites' unread state is now **measured**, not inferred. Let me check A28 (the tests/+CHANGELOG pairing rule) and the self-pin I2 mechanics to pick the right vehicle.
$ cd /data/repo
echo "== I2 self-pin (assertion figure == i0 + i_sites) =="
sed -n '4555,4640p' tests/test_registry_coverage.sh
== I2 self-pin (assertion figure == i0 + i_sites) ==
# while the file held 473, and 464 sat nine assertions behind for a whole
# release because nothing compared the claim with a count — (126)'s defect
# one level up, the same shape C43 exists for, a second copy.
#
# So both figures are now read HERE, live, by i_reg_pair(): the assertion
# figure against i0 (the count measured above this header) plus i_sites (the
# assertion call sites below it, counted statically), and the control figure
# against control_ids() — the same reader C43c compares --help's declaration
# with, so the two declarations sit in two places with one reader each and
# neither can drift alone. C46 is the control: it plants each figure bumped
# by one, and I4/I5 judge those plants with the SAME comparisons, which is
# the direction that matters — a reader that reddens when the figure is wrong
# and agrees when it is right, rather than one that merely differs or merely
# agrees.
#
# i_sites is counted from THIS header to the end of the file rather than from
# the top, because the whole file's static sites (414 when this section was
# written) have never equalled its EXECUTED count (485 then, 497 now) — calls
# inside loops and inline `&& ok || fail` pairs run more than once or sit off
# column 0. Below this header every site runs exactly once, so the two counts
# are comparable, and I6 — the last assertion in the file — is the accounting
# that says so.
# ==========================================================================
i0=$((PASS + FAIL))
i_sites=$(awk '/^# I — /{f=1} f' "$SELF" \
  | grep -cE '^(assert_[a-z_]+|expect|expect_ok|expect_not|ok|fail) ')
IFS='|' read -r i_fig i_ctl <<< "$(i_reg_pair "$cov_registry")"
expect "I1 non-vacuity: this suite's registry section states BOTH figures as numbers" \
  sh -c 'case ${1:-}${2:-} in ""|*[!0-9]*) exit 1;; *) exit 0;; esac' _ "$i_fig" "$i_ctl"
assert_eq "I2 THE reader: the registry's assertion figure equals what this run produced - the count measured live above this header plus the assertion sites below it - so an assertion added or dropped anywhere reddens the claim instead of leaving it to drift" \
  "${i_fig:-}" "$((i0 + i_sites))"
assert_eq "I3 and the registry's control figure equals the namespaces this file defines - the reader C43c uses, so --help's declaration and the registry's own are each pinned to the same definition and cannot disagree with it" \
  "${i_ctl:-}" "$(control_ids "$SELF" | wc -l | tr -d ' ')"
assert_eq "I4 C46's first plant, judged by the SAME comparison I2 just made: a figure bumped by one reads DIFFERS against the live one - the reader is not one that always agrees" \
  "differs" "$(c43_state "${i_fig:-}" "$(i_reg_pair "$c46_p1" | cut -d'|' -f1)")"
assert_eq "I5 and C46's second plant under I3's comparison: a control figure bumped by one reads DIFFERS too - the two claims have separable readers, each wrong on its own" \
  "differs" "$(c43_state "${i_ctl:-}" "$(i_reg_pair "$c46_p2" | cut -d'|' -f2)")"
assert_eq "I6 accounting, last assertion in the file: the static sites below this header minus this one equal the assertions the section produced - so the total I2 predicted is the total this run prints" \
  "$((i_sites - 1))" "$((PASS + FAIL - i0))"

echo
echo "=== Results: $PASS passed, $FAIL failed ==="
[ "$FAIL" -eq 0 ]
$ cd /data/repo
echo "== A28 assertion =="
grep -n 'A28' tests/test_gladex_monitor.sh | head
echo "== A28 context in monitor =="
sed -n "$(grep -n 'A28' tests/test_gladex_monitor.sh | head -1 | cut -d: -f1),+18p" tests/test_gladex_monitor.sh 2>/dev/null | head -30
== A28 assertion ==
263:add A28 rc          docs       0                                            "no undocumented code commit since the last CHANGELOG commit"
== A28 context in monitor ==
add A28 rc          docs       0                                            "no undocumented code commit since the last CHANGELOG commit"
add A29 contains    docs       "DOCS_VERDICT"                               "docs probe reported its verdict"
add A30 contains    sys        "[OK] 0 failed unit(s)"                      "no unit is left in systemctl --failed"
# A31/A32 ([0.4.338]) are NOT system-status family members by design: they read
# their own child, so `tests/test_monitor_cascade.sh`'s family() count is
# unchanged by them and an undeployed commit costs exactly two reds here, not a
# second encoding of A12's claim.
add A31 rc          sync       0                                            "source-sync-check exits 0"
add A32 contains    sync       "in sync"                                    "the committed tree reached dev AND prod"

for rec in "${ASSERTS[@]}"; do
  IFS="$US" read -r id kind key want label <<<"$rec"
  if [ "$kind" = script_body ]; then hay="$(cat "$0")"
  elif [ "$kind" = rc ];           then hay="${OUT[${key}_rc]:-}"
  else                                   hay="${OUT[$key]:-}"; fi
  ok=1
  case "$kind" in
    rc|is)        [ "$hay" = "$want" ] || ok=0 ;;
    contains)     printf '%s' "$hay" | grep -qF -- "$want" || ok=0 ;;
> build · mimo-v2.6-flash-free
`i_reg_pair` (line 653) is provably the **only** bounded-section figure reader in the tree — so the other suites' assertion figures being unread is now a *measured* fact, not the inference run 931 flagged. That's exactly the gap the recovered line names. The durable, verifiable vehicle is a small new suite (fast to iterate, hermetic), plus the well-trodden "add a suite" flow. Let me grab templates.
$ cd /data/repo
echo "== a simple suite REGISTRY section as template (shift_census, newest) =="
awk '/^## test_shift_census.sh$/{f=1} f&&/^## /&&!/test_shift_census/{exit} f' tools/REGISTRY.md | head -40
== a simple suite REGISTRY section as template (shift_census, newest) ==
$ cd /data/repo
echo "== how are suite sections vs tool sections distinguished in B4? =="
sed -n '1890,1915p' tests/test_registry_coverage.sh
== how are suite sections vs tool sections distinguished in B4? ==
  b=${f##*/}
  [ "$b" = "REGISTRY.md" ] && continue
  case "$b" in .*) continue ;; esac
  live_tools=$((live_tools + 1))
done
live_sections=$(grep -c '^## [A-Za-z0-9._-]*$' "$cov_registry")
live_tool_sections=0
while read -r b; do
  [ -n "$b" ] || continue
  [ -f "$cov_tools/$b" ] && live_tool_sections=$((live_tool_sections + 1))
done <<EOF
$(sed -n 's/^## \([A-Za-z0-9._-][A-Za-z0-9._-]*\)$/\1/p' "$cov_registry")
EOF

assert_ge "B1 non-vacuity: at least 10 tools enumerated" 10 "$(sget_live tools)"
assert_eq "B2 tools counted == tools independently enumerated" "$live_tools" "$(sget_live tools)"
assert_eq "B3 sections counted == headings independently counted" \
  "$live_sections" "$(sget_live registered)"
assert_eq "B4 registered minus suite sections == tool sections" \
  "$live_tool_sections" "$(( $(sget_live registered) - $(sget_live test_sections) ))"
assert_eq "B5 every tool section probed for --help" "$live_tool_sections" "$(sget_live help_run)"
assert_eq "B6 every tool answered --help with exit 0 and a body" \
  "$(sget_live help_run)" "$(sget_live help_ok)"
assert_ge "B7 non-vacuity: at least 4 registered test-suite sections" 4 "$(sget_live test_sections)"

# ==========================================================================
> build · mimo-v2.6-flash-free
`i_reg_pair` (line 653) is provably the only bounded-section figure reader — the other suites' unread state is now **measured**, exactly the gap the recovered line names. Run 948's queue says the natural home is `tests/test_registry_coverage.sh` "with its own plant." Let me gather the exact numbers needed to add a census section there.
$ cd /data/repo
echo "== current registry figure for test_registry_coverage =="
grep -oE '\*\*[0-9]+ assertions\*\*' tools/REGISTRY.md | head -3
grep -n 'test_registry_coverage.sh` →' tools/REGISTRY.md | head
echo "== section letters used (top-level '# X — ' headers) =="
grep -oE '^# [A-Z] — ' tests/test_registry_coverage.sh | sort -u | tr '\n' ' '
echo
echo "== control ids defined =="
grep -oE '^C[0-9]+[a-z]? ' tests/test_registry_coverage.sh | sort -u | wc -l
== current registry figure for test_registry_coverage ==
**140 assertions**
**80 assertions**
**89 assertions**
5620:- `bash tests/test_registry_coverage.sh` → **497 assertions** (since (119),
== section letters used (top-level '# X — ' headers) ==
# A —  # B —  # C —  # D —  # E —  # F —  # G —  # H —  # I —  
== control ids defined ==
1
$ cd /data/repo
echo "== robust reader-absence: any tests/ file reading an assertion figure OUT OF a REGISTRY bounded section? =="
echo "-- grep for the exact i_reg_pair-style extraction pattern (only line 653 expected) --"
grep -rn 'assertions\\b\| assertions\*\*\|negative controls' tests/*.sh tests/*.php 2>/dev/null | grep -i 'grep -oE\|grep -o' | head
echo
echo "== count suite sections in REGISTRY carrying a '**N assertions**' figure =="
awk '/^## /{name=$2} /\*\*[0-9]+ assertions\*\*/{print name}' tools/REGISTRY.md | sort -u | wc -l
echo "-- which ones --"
awk '/^## /{name=$2} /\*\*[0-9]+ assertions\*\*/{print name}' tools/REGISTRY.md | sort -u
== robust reader-absence: any tests/ file reading an assertion figure OUT OF a REGISTRY bounded section? ==
-- grep for the exact i_reg_pair-style extraction pattern (only line 653 expected) --
tests/test_registry_coverage.sh:654:  c=$(printf '%s\n' "$sec" | grep -oE '\*\*C\*\* [0-9]+ negative controls' | head -1 | sed 's/.*\*\* //; s/ negative.*//')

== count suite sections in REGISTRY carrying a '**N assertions**' figure ==
17
-- which ones --
budget-show
disk-show
dns-verify
domain-availability-check
immich-roundtrip
ip-drift-check
ip-drift-cron
pdns-api.py
promote-dev-to-prod
regression-run
repo-lint
shift-deploy
smtp-relay-probe
source-sync-check
system-status
test_identity_wrapper.sh
test_registry_coverage.sh
> 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)
[Wed Oct 14 03:16:30 2026] 127.0.0.1:47416 Accepted
[Wed Oct 14 03:16:30 2026] 127.0.0.1:47416 Closing
[Wed Oct 14 03:21:24 2026] 127.0.0.1:40934 Accepted
[Wed Oct 14 03:21:24 2026] 127.0.0.1:40934 Closing
[Wed Oct 14 03:25:53 2026] 127.0.0.1:36540 Accepted
[Wed Oct 14 03:25:53 2026] 127.0.0.1:36540 Closing
[Wed Oct 14 03:25:53 2026] 127.0.0.1:36550 Accepted
[Wed Oct 14 03:25:53 2026] 127.0.0.1:36550 Closing
[Wed Oct 14 03:27:33 2026] 127.0.0.1:56166 Accepted
[Wed Oct 14 03:27:33 2026] 127.0.0.1:56166 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59298 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59298 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59306 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59306 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59322 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59322 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59334 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59334 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59340 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59340 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59354 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59354 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59358 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59358 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59366 Accepted
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59366 Closing
[Wed Oct 14 03:30:20 2026] 127.0.0.1:59376 Accepted
[Wed Oct 14 03:30:21 2026] 127.0.0.1:59376 Closing
[Wed Oct 14 03:30:21 2026] 127.0.0.1:59388 Accepted
[Wed Oct 14 03:30:21 2026] 127.0.0.1:59388 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35092 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35092 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35106 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35106 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35112 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35112 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35124 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35124 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35126 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35126 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35132 Accepted
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35132 Closing
[Wed Oct 14 03:31:23 2026] 127.0.0.1:35134 Accepted
[Wed Oct 14 03:31:24 2026] 127.0.0.1:35134 Closing
[Wed Oct 14 03:31:24 2026] 127.0.0.1:35148 Accepted
[Wed Oct 14 03:31:24 2026] 127.0.0.1:35148 Closing
[Wed Oct 14 03:31:24 2026] 127.0.0.1:35152 Accepted
[Wed Oct 14 03:31:24 2026] 127.0.0.1:35152 Closing
[Wed Oct 14 03:31:24 2026] 127.0.0.1:38156 Accepted
[Wed Oct 14 03:31:24 2026] 127.0.0.1:38156 Closing
[Wed Oct 14 03:35:32 2026] 127.0.0.1:57236 Accepted
[Wed Oct 14 03:35:32 2026] 127.0.0.1:57236 Closing
[Wed Oct 14 03:42:27 2026] 127.0.0.1:48870 Accepted
[Wed Oct 14 03:42:27 2026] 127.0.0.1:48870 Closing
[Wed Oct 14 03:42:27 2026] 127.0.0.1:48884 Accepted
[Wed Oct 14 03:42:27 2026] 127.0.0.1:48884 Closing
[Wed Oct 14 03:42:28 2026] 127.0.0.1:48900 Accepted
[Wed Oct 14 03:42:28 2026] 127.0.0.1:48900 Closing
[Wed Oct 14 03:43:13 2026] 127.0.0.1:39748 Accepted

Other app logs: downloads.log

Generated 2026-10-14 01:43:13 UTC · Gladex.de