Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 1042 files, 55.1 MB |
| Latest run log | run-20261004-011100-6.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261004-011100-6.log | 150 B | 2026-10-03 23:11:00 |
| run-20261004-011001-634.log | 153 B | 2026-10-03 23:10:01 |
| run-20261004-010051-5.log | 186 B | 2026-10-03 23:00:52 |
| run-20261004-005953-633.log | 153 B | 2026-10-03 22:59:53 |
| run-20261004-005043-4.log | 150 B | 2026-10-03 22:50:44 |
| run-20261004-004945-632.log | 153 B | 2026-10-03 22:49:45 |
| run-20261004-002616-3.log | 172 KB | 2026-10-03 22:40:36 |
| run-20261004-003936-631.log | 190 B | 2026-10-03 22:39:36 |
| run-20261004-002927-630.log | 153 B | 2026-10-03 22:29:27 |
| run-20261004-001919-629.log | 153 B | 2026-10-03 22:19:19 |
| run-20261003-235543-2.log | 170 KB | 2026-10-03 22:16:08 |
| run-20261004-000910-628.log | 153 B | 2026-10-03 22:09:11 |
| run-20261003-235902-627.log | 153 B | 2026-10-03 21:59:03 |
| run-20261003-234854-626.log | 153 B | 2026-10-03 21:48:55 |
| run-20261003-232430-1.log | 156 KB | 2026-10-03 21:45:35 |
| run-20261003-233845-625.log | 153 B | 2026-10-03 21:38:46 |
| run-20261003-232837-624.log | 153 B | 2026-10-03 21:28:38 |
| run-20261003-231829-623.log | 153 B | 2026-10-03 21:18:30 |
| run-20261003-230821-622.log | 190 B | 2026-10-03 21:08:22 |
| run-20261003-225813-621.log | 153 B | 2026-10-03 20:58:14 |
| run-20261003-224805-620.log | 153 B | 2026-10-03 20:48:06 |
| run-20261003-223757-619.log | 190 B | 2026-10-03 20:37:58 |
| run-20261003-222750-618.log | 153 B | 2026-10-03 20:27:50 |
| run-20261003-221742-617.log | 153 B | 2026-10-03 20:17:42 |
| run-20261003-220734-616.log | 153 B | 2026-10-03 20:07:34 |
| run-20261003-215725-615.log | 153 B | 2026-10-03 19:57:26 |
| run-20261003-214717-614.log | 153 B | 2026-10-03 19:47:18 |
| run-20261003-213709-613.log | 153 B | 2026-10-03 19:37:10 |
| run-20261003-212701-612.log | 153 B | 2026-10-03 19:27:02 |
| run-20261003-211653-611.log | 153 B | 2026-10-03 19:16:54 |
| run-20261003-210645-610.log | 153 B | 2026-10-03 19:06:46 |
| run-20261003-205637-609.log | 153 B | 2026-10-03 18:56:38 |
| run-20261003-204629-608.log | 153 B | 2026-10-03 18:46:29 |
| run-20261003-202328-607.log | 127 KB | 2026-10-03 18:36:21 |
| run-20261003-195458-606.log | 232 KB | 2026-10-03 18:13:20 |
| run-20261003-191013-605.log | 227 KB | 2026-10-03 17:44:50 |
| run-20261003-184239-604.log | 198 KB | 2026-10-03 17:00:00 |
| run-20261003-174814-603.log | 430 KB | 2026-10-03 16:32:32 |
| run-20261003-171801-602.log | 161 KB | 2026-10-03 15:38:06 |
| run-20261003-163940-601.log | 314 KB | 2026-10-03 15:07:52 |
| run-20261003-161729-600.log | 183 KB | 2026-10-03 14:29:32 |
| run-20261003-160722-599.log | 153 B | 2026-10-03 14:07:22 |
| run-20261003-155714-598.log | 153 B | 2026-10-03 13:57:14 |
| run-20261003-154706-597.log | 153 B | 2026-10-03 13:47:07 |
| run-20261003-153658-596.log | 153 B | 2026-10-03 13:36:59 |
| run-20261003-152649-595.log | 190 B | 2026-10-03 13:26:51 |
| run-20261003-151642-594.log | 153 B | 2026-10-03 13:16:42 |
| run-20261003-150634-593.log | 153 B | 2026-10-03 13:06:34 |
| run-20261003-145626-592.log | 190 B | 2026-10-03 12:56:27 |
| run-20261003-144617-591.log | 153 B | 2026-10-03 12:46:18 |
Tail — run-20261004-002616-3.log (last 200 lines)
+ *) fail "Z4 both are in the ledger" ;;
+esac
+cleanup
+if [ ! -e "$Z_A" ] && [ ! -e "$Z_B" ]; then
+ ok "Z5 cleanup() removed EVERY sandbox the ledger recorded, not only the last one per variable"
+else
+ fail "Z5 cleanup() left $([ -e "$Z_A" ] && printf '%s ' "$Z_A")$([ -e "$Z_B" ] && printf '%s' "$Z_B") behind"
+fi
+new_sandbox; Z_O1="$SB"
+new_go_sandbox; Z_O2="$GO_SB"
+# The pre-fix cleanup shape reproduced on purpose — the classic one-liner
+# the other eight suites shipped (`rm -rf "$SB"` and nothing else), i.e.
+# a cleanup that knows only ONE of this file's two factories: applied to
+# a run that created both, it leaves the whole GO side standing.
+z_prefix_cleanup() { [ -n "$SB" ] && rm -rf "$SB"; }
+z_prefix_cleanup
+if [ ! -d "$Z_O1" ] && [ -d "$Z_O2" ]; then
+ ok "Z6 the one-factory cleanup leaves the GO sandbox behind - the two-factory leak, reproduced"
+else
+ fail "Z6 the one-factory cleanup does not reproduce the two-factory leak"
+fi
+rm -rf "$Z_O2"
+new_sandbox; Z_C="$SB"
+
+# Z7 — (131)'s second correction, made mechanical instead of prose: a
+# ledger appended ONLY inside `new_sandbox` silently misses a second
+# sandbox factory, and THIS file is that correction's standing example
+# (`GO_SB` in `new_go_sandbox`). Both counts are derived from THIS file,
+# and neither reader can count its own source: comment lines are dropped
+# first, and the recorder pattern is written with an escaped dollar in
+# its assignment so the pattern's own line cannot match itself.
+z_mk_pat='mk''temp'
+z_rec_pat='SB_ALL="\${SB_ALL}'
+z_factories=$(grep -v '^[[:space:]]*#' "$SELF" | grep -c "$z_mk_pat")
+z_recorders=$(grep -v '^[[:space:]]*#' "$SELF" | grep -c "$z_rec_pat")
+if [ "$z_factories" -ge 1 ] && [ "$z_factories" -eq "$z_recorders" ]; then
+ ok "Z7 every sandbox factory in this file records into the ledger ($z_factories factories / $z_recorders recorders - the second factory is real here, not hypothetical)"
+else
+ fail "Z7 every sandbox factory in this file records into the ledger (got $z_factories factories / $z_recorders recorders)"
+fi
+
+# Z8/Z9 — (131)'s first correction: the leak figure has to count
+# DIRECTORIES. The real reader overcounts this suite's own prefix
+# (`ls -d rl.*` = 6 matches, 1 directory - see the section header);
+# one directory and one file with the sandbox prefix are put side by
+# side inside a live sandbox, so both readers see identical input.
+mkdir -p "$Z_C/fixture/rl.DIRONLY"
+printf 'not a sandbox\n' > "$Z_C/fixture/rl.FILEONLY"
+z_dirs=$(count_sandboxes "$Z_C/fixture" 'rl.*')
+z_glob=$(ls -d "$Z_C/fixture"/rl.* 2>/dev/null | wc -l | tr -d ' ')
+if [ "$z_dirs" -eq 1 ] && [ "$z_glob" -eq 2 ]; then
+ ok "Z8 the sandbox reader counts DIRECTORIES (1 directory, while a glob over the same input says 2)"
+else
+ fail "Z8 the sandbox reader counts directories (got dirs=$z_dirs glob=$z_glob, want 1 and 2)"
+fi
+rm -rf "$Z_C/fixture/rl.DIRONLY"
+z_dirs=$(count_sandboxes "$Z_C/fixture" 'rl.*')
+z_glob=$(ls -d "$Z_C/fixture"/rl.* 2>/dev/null | wc -l | tr -d ' ')
+if [ "$z_dirs" -eq 0 ] && [ "$z_glob" -eq 1 ]; then
+ ok "Z9 a file wearing a sandbox name is never counted as a leaked sandbox (dirs=0, glob=1)"
+else
+ fail "Z9 a file wearing a sandbox name is never counted as a leaked sandbox (got dirs=$z_dirs glob=$z_glob, want 0 and 1)"
+fi
+rm -rf "$Z_C/fixture"
+
+# Z10 — the run's own claim, end to end: one cleanup() and every directory
+# the ledger ever recorded is gone, read with the same directory reader
+# rather than a glob, so the near-zero figure above has a reader inside
+# the suite instead of being an assumption about the EXIT trap.
+cleanup
+z_final=$(printf '%s' "$SB_ALL" | grep -c '^/')
+z_left=0
+for d in $SB_ALL; do
+ [ -n "$d" ] || continue
+ if [ "$(count_sandboxes "$(dirname "$d")" "$(basename "$d")")" -ne 0 ]; then
+ z_left=$((z_left + 1))
+ fi
+done
+if [ "$z_left" -eq 0 ]; then
+ ok "Z10 this run leaks nothing: all $z_final ledger directories are gone after cleanup"
+else
+ fail "Z10 this run leaks nothing ($z_left of $z_final ledger directories still on disk, Z1 saw $z_ledger)"
+fi
+
# ---------------------------------------------------------------------------
echo "==============================="
echo "repo-lint suite: $PASS passed, $FAIL failed"
echo "==============================="
> build · ling-3.1-flash-free
> build · ling-3.1-flash-free
[0m$ [0mcd /data/repo && bash -n tests/test_repo_lint.sh && echo "SYNTAX OK"; echo "=== Z7 pre-check on edited file ==="; grep -v '^[[:space:]]*#' tests/test_repo_lint.sh | grep -c 'mktemp'; grep -v '^[[:space:]]*#' tests/test_repo_lint.sh | grep -c 'SB_ALL="${SB_ALL'; echo "=== RUN FIXED SUITE ==="; time bash tests/test_repo_lint.sh > /tmp/opencode/rl-fixed.log 2>&1; echo "rc=$?"; echo "passed=$(grep -c '^PASS:' /tmp/opencode/rl-fixed.log) failed=$(grep -c '^FAIL:' /tmp/opencode/rl-fixed.log)"; grep -c '^PASS: Z' /tmp/opencode/rl-fixed.log; grep '^FAIL:' /tmp/opencode/rl-fixed.log | head -5; echo "=== dirs after ==="; find /tmp/opencode -maxdepth 1 -name 'rl.*' -type d | wc -l; find /tmp/opencode -maxdepth 1 -name 'rlgo.*' -type d | wc -l
SYNTAX OK
=== Z7 pre-check on edited file ===
2
2
=== RUN FIXED SUITE ===
real 1m0.244s
user 0m49.619s
sys 0m24.221s
rc=0
passed=473 failed=0
10
=== dirs after ===
1
1
> build · ling-3.1-flash-free
Fixed suite: **473/0** (+10 Z assertions), zero leaked. Now the out-of-tree mutant — cleanup reverted to the pre-fix shape (ledger iteration removed), expecting exactly Z5+Z10 red
[0m$ [0mset -e
rm -rf /tmp/opencode/rlmutant /tmp/opencode/rlmutant-tmp
mkdir -p /tmp/opencode/rlmutant/tests /tmp/opencode/rlmutant-tmp
cp /data/repo/tests/test_repo_lint.sh /tmp/opencode/rlmutant/tests/test_repo_lint.sh
ln -s /data/repo/tools /tmp/opencode/rlmutant/tools
cd /tmp/opencode/rlmutant/tests
python3 - <<'EOF'
import re
p = '/tmp/opencode/rlmutant/tests/test_repo_lint.sh'
s = open(p).read()
fixed = """cleanup() {
local _d
for _d in $SB_ALL; do
[ -n "$_d" ] && rm -rf "$_d"
done
[ -n "$SB" ] && rm -rf "$SB"
[ -n "$GO_SB" ] && rm -rf "$GO_SB"
return 0
}"""
prefix = 'cleanup() { [ -n "$SB" ] && rm -rf "$SB"; [ -n "$GO_SB" ] && rm -rf "$GO_SB"; }'
assert s.count(fixed) == 1, f"fixed cleanup not found exactly once: {s.count(fixed)}"
open(p, 'w').write(s.replace(fixed, prefix))
print("mutant planted: ledger iteration removed from cleanup()")
EOF
bash -n test_repo_lint.sh && echo "MUTANT SYNTAX OK"
echo "fixed md5: $(md5sum /data/repo/tests/test_repo_lint.sh | cut -d' ' -f1)"
echo "mutant md5: $(md5sum test_repo_lint.sh | cut -d' ' -f1)"
echo "=== MUTANT RUN ==="
TMPDIR=/tmp/opencode/rlmutant-tmp bash test_repo_lint.sh > /tmp/opencode/rlmutant/mutant.log 2>&1; echo "rc=$?"
echo "passed=$(grep -c '^PASS:' /tmp/opencode/rlmutant/mutant.log) failed=$(grep -c '^FAIL:' /tmp/opencode/rlmutant/mutant.log)"
echo "--- the reds (must be exactly Z5 + Z10) ---"
grep '^FAIL:' /tmp/opencode/rlmutant/mutant.log
echo "--- leaked into its own scratch (dirs) ---"
find /tmp/opencode/rlmutant-tmp -maxdepth 1 -name 'rl.*' -type d | wc -l
find /tmp/opencode/rlmutant-tmp -maxdepth 1 -name 'rlgo.*' -type d | wc -l
mutant planted: ledger iteration removed from cleanup()
MUTANT SYNTAX OK
fixed md5: 1787b65848ce397a894d7869a311d319
mutant md5: 7313220e73b11e0109f457524efc82da
=== MUTANT RUN ===
> build · ling-3.1-flash-free
The mutant exited 1 as expected (2 failures), but `set -e` stopped my analysis. Let me read the results
[0m$ [0mecho "passed=$(grep -c '^PASS:' /tmp/opencode/rlmutant/mutant.log) failed=$(grep -c '^FAIL:' /tmp/opencode/rlmutant/mutant.log)"; echo "--- the reds (must be exactly Z5 + Z10) ---"; grep '^FAIL:' /tmp/opencode/rlmutant/mutant.log; echo "--- PASS: Z count ---"; grep -c '^PASS: Z' /tmp/opencode/rlmutant/mutant.log; echo "--- leaked into its own scratch (dirs) ---"; find /tmp/opencode/rlmutant-tmp -maxdepth 1 -name 'rl.*' -type d | wc -l; find /tmp/opencode/rlmutant-tmp -maxdepth 1 -name 'rlgo.*' -type d | wc -l; du -sch /tmp/opencode/rlmutant-tmp 2>/dev/null | tail -1
passed=471 failed=2
--- the reds (must be exactly Z5 + Z10) ---
FAIL: Z5 cleanup() left /tmp/opencode/rlmutant-tmp/opencode/rl.7RNI0O behind
FAIL: Z10 this run leaks nothing (2 of 7 ledger directories still on disk, Z1 saw 4)
--- PASS: Z count ---
8
--- leaked into its own scratch (dirs) ---
0
0
4.3M total
> build · ling-3.1-flash-free
Mutant verified: **471/2, exactly Z5+Z10 red** (the two cleanup claims), 8 Z-passes green, 2 dirs leaked into its own scratch. Let me verify the leak location, clean up the mutant, then reclaim the stale standing dirs and run the fresh zero-baseline
[0m$ [0mecho "--- mutant scratch leak (2 dirs, per Z10) ---"; find /tmp/opencode/rlmutant-tmp/opencode -maxdepth 1 -type d -name 'rl*' | sort; du -sch /tmp/opencode/rlmutant-tmp/opencode 2>/dev/null | tail -1
echo "--- deleting mutant copy + scratch ---"; rm -rf /tmp/opencode/rlmutant /tmp/opencode/rlmutant-tmp; ls -d /tmp/opencode/rlmutant* 2>/dev/null || echo "mutant gone"
echo "=== RECLAIM: stale dirs from the killed 2026-10-02 run (1.4M) ==="; ps aux | grep -E 'test_repo_lint' | grep -v grep || echo "no concurrent run"
du -sch /tmp/opencode/rl.VeoWMV /tmp/opencode/rlgo.Rwx4FN 2>/dev/null | tail -1
rm -rf /tmp/opencode/rl.VeoWMV /tmp/opencode/rlgo.Rwx4FN
echo "after reclaim: rl dirs=$(find /tmp/opencode -maxdepth 1 -name 'rl.*' -type d | wc -l) rlgo dirs=$(find /tmp/opencode -maxdepth 1 -name 'rlgo.*' -type d | wc -l) (5 stray FILES deliberately left alone)"
echo "=== FRESH ZERO-BASELINE RUN ==="; bash /data/repo/tests/test_repo_lint.sh > /tmp/opencode/rl-postreclaim.log 2>&1; echo "rc=$?"; echo "passed=$(grep -c '^PASS:' /tmp/opencode/rl-postreclaim.log) failed=$(grep -c '^FAIL:' /tmp/opencode/rl-postreclaim.log)"; echo "rl dirs 0->$(find /tmp/opencode -maxdepth 1 -name 'rl.*' -type d | wc -l), rlgo dirs 0->$(find /tmp/opencode -maxdepth 1 -name 'rlgo.*' -type d | wc -l)"
--- mutant scratch leak (2 dirs, per Z10) ---
/tmp/opencode/rlmutant-tmp/opencode/rl.7RNI0O
/tmp/opencode/rlmutant-tmp/opencode/rl.PIi9Yv
4.3M total
--- deleting mutant copy + scratch ---
mutant gone
=== RECLAIM: stale dirs from the killed 2026-10-02 run (1.4M) ===
no concurrent run
1.4M total
after reclaim: rl dirs=0 rlgo dirs=0 (5 stray FILES deliberately left alone)
=== FRESH ZERO-BASELINE RUN ===
rc=0
passed=473 failed=0
rl dirs 0->0, rlgo dirs 0->0
> build · ling-3.1-flash-free
All measurements done. Now the REGISTRY refresh — let me look at how the source-sync-check section documents its Z (to mirror the style) and the exact repo-lint bullet text
[0m$ [0mcd /data/repo && grep -n '## source-sync-check' tools/REGISTRY.md; sed -n '/^## source-sync-check/,/^## /p' tools/REGISTRY.md | grep -n 'Z1\|ledger\|section Z' | head -8
2485:## source-sync-check
43: **Since `[0.4.187]` the sandbox tree is drained through an `SB_ALL` ledger and
44: read by section Z while the run is still alive**: `new_sandbox()` appends each
46: that ledger instead of reading `$SB` (it ends `return 0` — the loop's last
54: **Section Z** asserts: **Z1** the accounting, `entries = this file's own
57: **Z3/Z4** two fresh sandboxes both on disk and both in the ledger in creation
60: directories; **Z7 every sandbox factory in this file records into the ledger**
66: disagree (1 vs 2, then 0 vs 1); **Z10 every ledger directory is gone after
70: reddens **exactly `Z5`+`Z10`** (38/2, run out of the tree).
[91m[1mError: [0mRate limit exceeded. Please try again later.
exit=1
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)
[Sun Oct 4 00:55:07 2026] 127.0.0.1:44456 Accepted [Sun Oct 4 00:55:07 2026] 127.0.0.1:44456 Closing [Sun Oct 4 00:55:18 2026] 127.0.0.1:33022 Accepted [Sun Oct 4 00:55:18 2026] 127.0.0.1:33022 Closing [Sun Oct 4 00:58:53 2026] 127.0.0.1:45394 Accepted [Sun Oct 4 00:58:53 2026] 127.0.0.1:45394 Closing [Sun Oct 4 00:58:53 2026] 127.0.0.1:45400 Accepted [Sun Oct 4 00:58:53 2026] 127.0.0.1:45400 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48388 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48388 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48390 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48390 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48396 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48396 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48406 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48406 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48408 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48408 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48414 Accepted [Sun Oct 4 01:00:09 2026] 127.0.0.1:48414 Closing [Sun Oct 4 01:00:09 2026] 127.0.0.1:48424 Accepted [Sun Oct 4 01:00:10 2026] 127.0.0.1:48424 Closing [Sun Oct 4 01:00:10 2026] 127.0.0.1:48440 Accepted [Sun Oct 4 01:00:10 2026] 127.0.0.1:48440 Closing [Sun Oct 4 01:00:10 2026] 127.0.0.1:48450 Accepted [Sun Oct 4 01:00:10 2026] 127.0.0.1:48450 Closing [Sun Oct 4 01:00:10 2026] 127.0.0.1:48454 Accepted [Sun Oct 4 01:00:10 2026] 127.0.0.1:48454 Closing [Sun Oct 4 01:00:18 2026] 127.0.0.1:57312 Accepted [Sun Oct 4 01:00:18 2026] 127.0.0.1:57312 Closing [Sun Oct 4 01:00:45 2026] 127.0.0.1:39116 Accepted [Sun Oct 4 01:00:45 2026] 127.0.0.1:39116 Closing [Sun Oct 4 01:00:53 2026] 127.0.0.1:39122 Accepted [Sun Oct 4 01:00:53 2026] 127.0.0.1:39122 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54168 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54168 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54172 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54172 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54176 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54176 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54190 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54190 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54196 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54196 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54208 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54208 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54220 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54220 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54234 Accepted [Sun Oct 4 01:00:56 2026] 127.0.0.1:54234 Closing [Sun Oct 4 01:00:56 2026] 127.0.0.1:54238 Accepted [Sun Oct 4 01:00:57 2026] 127.0.0.1:54238 Closing [Sun Oct 4 01:00:57 2026] 127.0.0.1:54244 Accepted [Sun Oct 4 01:00:57 2026] 127.0.0.1:54244 Closing [Sun Oct 4 01:04:19 2026] 127.0.0.1:41466 Accepted [Sun Oct 4 01:04:19 2026] 127.0.0.1:41466 Closing [Sun Oct 4 01:09:26 2026] 127.0.0.1:40712 Accepted [Sun Oct 4 01:09:26 2026] 127.0.0.1:40712 Closing [Sun Oct 4 01:11:01 2026] 127.0.0.1:47386 Accepted
Generated 2026-10-03 23:11:01 UTC · Gladex.de