Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 930 files, 48.9 MB |
| Latest run log | run-20261002-170315-528.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261002-170315-528.log | 445 KB | 2026-10-02 15:41:17 |
| run-20261002-161229-527.log | 357 KB | 2026-10-02 14:53:08 |
| run-20261002-160222-526.log | 153 B | 2026-10-02 14:02:23 |
| run-20261002-155214-525.log | 153 B | 2026-10-02 13:52:15 |
| run-20261002-154207-524.log | 153 B | 2026-10-02 13:42:08 |
| run-20261002-153159-523.log | 190 B | 2026-10-02 13:32:00 |
| run-20261002-152152-522.log | 153 B | 2026-10-02 13:21:53 |
| run-20261002-151144-521.log | 153 B | 2026-10-02 13:11:45 |
| run-20261002-150137-520.log | 153 B | 2026-10-02 13:01:38 |
| run-20261002-145129-519.log | 153 B | 2026-10-02 12:51:30 |
| run-20261002-144121-518.log | 190 B | 2026-10-02 12:41:22 |
| run-20261002-143114-517.log | 190 B | 2026-10-02 12:31:15 |
| run-20261002-142106-516.log | 153 B | 2026-10-02 12:21:07 |
| run-20261002-141059-515.log | 153 B | 2026-10-02 12:10:59 |
| run-20261002-140051-514.log | 153 B | 2026-10-02 12:00:52 |
| run-20261002-135044-513.log | 153 B | 2026-10-02 11:50:45 |
| run-20261002-134037-512.log | 153 B | 2026-10-02 11:40:37 |
| run-20261002-133028-511.log | 153 B | 2026-10-02 11:30:29 |
| run-20261002-132021-510.log | 153 B | 2026-10-02 11:20:21 |
| run-20261002-131012-509.log | 190 B | 2026-10-02 11:10:13 |
| run-20261002-130005-508.log | 153 B | 2026-10-02 11:00:06 |
| run-20261002-124958-507.log | 153 B | 2026-10-02 10:49:58 |
| run-20261002-123950-506.log | 190 B | 2026-10-02 10:39:51 |
| run-20261002-122943-505.log | 153 B | 2026-10-02 10:29:43 |
| run-20261002-121935-504.log | 153 B | 2026-10-02 10:19:36 |
| run-20261002-120928-503.log | 153 B | 2026-10-02 10:09:29 |
| run-20261002-115921-502.log | 153 B | 2026-10-02 09:59:21 |
| run-20261002-114913-501.log | 153 B | 2026-10-02 09:49:14 |
| run-20261002-113906-500.log | 153 B | 2026-10-02 09:39:06 |
| run-20261002-112858-499.log | 153 B | 2026-10-02 09:28:59 |
| run-20261002-111851-498.log | 153 B | 2026-10-02 09:18:51 |
| run-20261002-110843-497.log | 153 B | 2026-10-02 09:08:44 |
| run-20261002-105836-496.log | 153 B | 2026-10-02 08:58:37 |
| run-20261002-104828-495.log | 153 B | 2026-10-02 08:48:29 |
| run-20261002-103821-494.log | 153 B | 2026-10-02 08:38:22 |
| run-20261002-102813-493.log | 153 B | 2026-10-02 08:28:14 |
| run-20261002-101806-492.log | 153 B | 2026-10-02 08:18:07 |
| run-20261002-100758-491.log | 153 B | 2026-10-02 08:07:59 |
| run-20261002-095751-490.log | 153 B | 2026-10-02 07:57:52 |
| run-20261002-094743-489.log | 153 B | 2026-10-02 07:47:44 |
| run-20261002-093736-488.log | 190 B | 2026-10-02 07:37:37 |
| run-20261002-084815-487.log | 353 KB | 2026-10-02 07:27:28 |
| run-20261002-071736-486.log | 516 KB | 2026-10-02 06:38:08 |
| run-20261002-063936-485.log | 306 KB | 2026-10-02 05:07:30 |
| run-20261002-055350-484.log | 390 KB | 2026-10-02 04:29:29 |
| run-20261002-052326-483.log | 259 KB | 2026-10-02 03:43:44 |
| run-20261002-045340-482.log | 233 KB | 2026-10-02 03:13:20 |
| run-20261002-042438-481.log | 139 KB | 2026-10-02 02:43:33 |
| run-20261002-034149-480.log | 267 KB | 2026-10-02 02:14:31 |
| run-20261002-024732-479.log | 457 KB | 2026-10-02 01:31:43 |
Tail — run-20261002-170315-528.log (last 200 lines)
"queue_headings_raw": 127,
"queue_path_phantoms": 0,
"queue_path_tokens": 4,
"queue_sections": 126
},
"timestamp": "2026-10-02T15:37:59Z",
"tool": "queue-source-check",
"violations": []
}
rc=0
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_queue_source.sh
Index: repo/tests/test_queue_source.sh
===================================================================
--- repo/tests/test_queue_source.sh
+++ repo/tests/test_queue_source.sh
@@ -172,14 +172,14 @@
"newest_version","newest_has_queue_section","newest_queue_items",
"newest_points_at_progress","newest_version_in_progress",
"progress_bullets",
"queue_headings_raw","queue_headings_fenced","duplicate_queue_sections",
- "queue_path_tokens","queue_path_phantoms"]
+ "queue_path_tokens","queue_path_phantoms","progress_covers_changelog"]
d = json.load(sys.stdin)
sys.exit(0 if sorted(d["rules"]) == sorted(want) else 1)'; then
- ok "A20 rules key set is exactly the documented 14 keys"
+ ok "A20 rules key set is exactly the documented 15 keys"
else
- fail "A20 rules key set is exactly the documented 14 keys"
+ fail "A20 rules key set is exactly the documented 15 keys"
fi
# `detail` must be embeddable in a hand-built JSON object by a shell caller:
# that is the contract system-status relies on when it builds the row.
if printf '%s' "$OUT" | python3 -c '
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_queue_source.sh
Index: repo/tests/test_queue_source.sh
===================================================================
--- repo/tests/test_queue_source.sh
+++ repo/tests/test_queue_source.sh
@@ -360,18 +360,18 @@
"newest_version","newest_has_queue_section","newest_queue_items",
"newest_points_at_progress","newest_version_in_progress",
"progress_bullets",
"queue_headings_raw","queue_headings_fenced","duplicate_queue_sections",
- "queue_path_tokens","queue_path_phantoms"]
+ "queue_path_tokens","queue_path_phantoms","progress_covers_changelog"]
d = json.load(sys.stdin)
r = d["rules"]
sys.exit(0 if (sorted(r) == sorted(want)
and r["frozen_items_expected"] == 111
and all(v is None for k, v in r.items()
if k != "frozen_items_expected")) else 1)'; then
- ok "H16 usage object carries the same 14 rules keys (constant stated, rest null)"
+ ok "H16 usage object carries the same 15 rules keys (constant stated, rest null)"
else
- fail "H16 usage object carries the same 14 rules keys (constant stated, rest null)"
+ fail "H16 usage object carries the same 15 rules keys (constant stated, rest null)"
fi
# --- I: repo resolution (the /data/tools symlink trap) ------------------------
new_sandbox
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && grep -n "14\b\|fourteen" tests/test_queue_source.sh | head -20; echo "=== 12 keys / R1-R9 mentions:"; grep -n "R1-R9\|11 keys\|12 keys" tests/test_queue_source.sh | head
154:assert_jget "A14 newest_has_queue_section=true" "$OUT" 'd["rules"]["newest_has_queue_section"]' "True"
303:assert_jget "G14 exit_code=3, not 1 - a missing file is not a violation" "$OUT" 'd["exit_code"]' "3"
345:assert_rc "H14 a valid json run still exits 0" 0 "$RC"
571:assert_jget "N14 the newest-entry rules stayed green (one violation only)" \
1592:# P14 - the tree is left green: the real files still agree after the plants.
1596: ok "P14 the real files still agree after the plants (no sandbox residue)"
1598: fail "P14 the real files do not agree after the plants"
1662:assert_jget "Q14 still exactly one violation" "$OUT" 'len(d["violations"])' "1"
1815:newest_bullet "- **Next-candidate queued, not actioned**: **(114) NEW - a gate at tools/not-a-real-tool** (new)."
1817:assert_rc "S14 the (new) marker excuses the token (exit 0)" 0 "$RC"
1926:# M14 - drop R9: the S6 fixture then exits 0, i.e. exactly the state
1935:assert_rc "M14a the real tool refuses that phantom fixture (the reference for M14)" 1 "$RC"
1936:MUT="$SB/mut-qsc14"
1944:assert t.count(old) == 1, "M14 needle not unique: %d match(es)" % t.count(old)
1949: ok "M14 the R9-less mutant was built (copies only)"
1951: fail "M14 the R9-less mutant was built (missing or identical)"
1955: ok "M14 dropping R9 is caught (mutant exits 0, real exits 1)"
1957: fail "M14 dropping R9 is caught (mutant still exits 1 - evaded)"
1959: fail "M14 dropping R9 is caught (mutant exited $RC, not runnable)"
=== 12 keys / R1-R9 mentions:
165: ok "A19 json key set is exactly the documented 11 keys"
167: fail "A19 json key set is exactly the documented 11 keys"
324: ok "H5 the usage object carries the SAME 11 keys as a verdict object"
326: fail "H5 the usage object carries the SAME 11 keys as a verdict object"
787: ok "O2 the docstring declares exactly A1-A3 (availability) and R1-R9 (the rules)"
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_queue_source.sh
Index: repo/tests/test_queue_source.sh
===================================================================
--- repo/tests/test_queue_source.sh
+++ repo/tests/test_queue_source.sh
@@ -782,18 +782,18 @@
doc = parts[1] if len(parts) >= 2 else ""
print(" ".join(re.findall(r"^ ([AR][0-9]+)\b", doc, re.M)))
PY
)
-if [ "$DECLARED" = "A1 A2 A3 R1 R2 R3 R4 R5 R6 R7 R8 R9" ]; then
- ok "O2 the docstring declares exactly A1-A3 (availability) and R1-R9 (the rules)"
+if [ "$DECLARED" = "A1 A2 A3 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10" ]; then
+ ok "O2 the docstring declares exactly A1-A3 (availability) and R1-R10 (the rules)"
else
- fail "O2 docstring declares '$DECLARED' - want 'A1 A2 A3 R1 R2 R3 R4 R5 R6 R7 R8 R9'"
+ fail "O2 docstring declares '$DECLARED' - want 'A1 A2 A3 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10'"
fi
new_sandbox
# The retired rule numbers are ASSEMBLED at runtime: this suite is one of the
# files the checker scans, so writing them down here would make O1 red forever.
-RETIRED="R""10"
+RETIRED="R""11"
# O3/O4 — a citation the docstring never declared, planted in the TOOL.
PLANT_TOOL=" # $RETIRED - a rule number from the retired layout"
if grep -qxF "$PLANT_TOOL" "$TOOL"; then
> build · mimo-v2.6-flash-free
Now the git helpers in the suite:
[0m← [0mEdit repo/tests/test_queue_source.sh
Index: repo/tests/test_queue_source.sh
===================================================================
--- repo/tests/test_queue_source.sh
+++ repo/tests/test_queue_source.sh
@@ -116,8 +116,35 @@
# The healthy repo: 60 + 51 historical items = the frozen 111, newest entry is
# a pointer with zero items, PROGRESS carries the live list.
healthy() { make_repo "$1" 60 51 0 yes 1; }
+# --- git fixtures, for R10 only ------------------------------------------------
+# Everything R10 reads is a COMMIT, so the fixtures that judge it must have
+# commits to read. Three helpers, all operating on a sandbox repo passed
+# explicitly (the same --repo discipline the rest of the suite uses): the
+# author/committer dates are pinned per commit because the two readings R10
+# rejects - a date floor and a clock comparison - can only be disproved by a
+# fixture whose DATE and ORDER deliberately disagree.
+git_init() { # <repo>
+ git -C "$1" -c init.defaultBranch=main init -q >/dev/null 2>&1
+}
+git_commit() { # <repo> <iso8601-date> <message> [pathspec]
+ local repo="$1" date="$2" msg="$3" path="${4:-.}"
+ git -C "$repo" add -A -- "$path" >/dev/null 2>&1 || return 1
+ GIT_AUTHOR_DATE="$date" GIT_COMMITTER_DATE="$date" \
+ git -C "$repo" -c user.name=qsc -c user.email=qsc@example.invalid \
+ -c commit.gpgsign=false commit -q -m "$msg" >/dev/null 2>&1
+}
+git_sha() { # <repo> <path> -> the commit that last touched it
+ git -C "$1" log -1 --format=%H -- ":/$2"
+}
+git_epoch() { # <repo> <sha> -> commit timestamp
+ git -C "$1" show -s --format=%ct "$2"
+}
+git_day() { # <repo> <sha> -> the commit's own UTC date, as its offset records it
+ git -C "$1" show -s --format=%cI "$2" | cut -c1-10
+}
+
new_sandbox() {
local base="${TMPDIR:-/tmp}/opencode"
mkdir -p "$base" 2>/dev/null || base="/tmp"
SB=$(mktemp -d "$base/qsc.XXXXXX") || { echo "cannot create sandbox" >&2; exit 1; }
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_queue_source.sh
Index: repo/tests/test_queue_source.sh
===================================================================
--- repo/tests/test_queue_source.sh
+++ repo/tests/test_queue_source.sh
@@ -142,8 +142,25 @@
}
git_day() { # <repo> <sha> -> the commit's own UTC date, as its offset records it
git -C "$1" show -s --format=%cI "$2" | cut -c1-10
}
+# incident_repo <dir> — queue item (109) candidate (b)'s incident, rebuilt:
+# one commit carrying BOTH files (the shape every main-loop run lands), then a
+# second commit that touches CHANGELOG.md ALONE - the newest entry landing
+# without the run's own record - at 20:51:55Z, on the SAME UTC day as the
+# first. The same day is deliberate: it is the blind spot a date-floor rule
+# has, so T9 asserts the fixture really sits inside it.
+incident_repo() {
+ local dir="$1"
+ healthy "$dir"
+ git_init "$dir" || return 1
+ git_commit "$dir" "2026-10-01T10:00:00+0000" \
+ "the run's own entry and record together" || return 1
+ printf '\nIncident fixture: this entry was committed without its own record.\n' \
+ >> "$dir/CHANGELOG.md"
+ git_commit "$dir" "2026-10-01T20:51:55+0000" \
+ "CHANGELOG entry committed alone" CHANGELOG.md
+}
new_sandbox() {
local base="${TMPDIR:-/tmp}/opencode"
mkdir -p "$base" 2>/dev/null || base="/tmp"
> 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 Oct 2 16:44:52 2026] 127.0.0.1:34356 Accepted [Fri Oct 2 16:44:52 2026] 127.0.0.1:34356 Closing [Fri Oct 2 16:44:52 2026] 127.0.0.1:34360 Accepted [Fri Oct 2 16:44:53 2026] 127.0.0.1:34360 Closing [Fri Oct 2 16:44:53 2026] 127.0.0.1:34370 Accepted [Fri Oct 2 16:44:53 2026] 127.0.0.1:34370 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44254 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44254 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44270 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44270 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44286 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44286 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44298 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44298 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44300 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44300 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44310 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44310 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44312 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44312 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44320 Accepted [Fri Oct 2 16:45:47 2026] 127.0.0.1:44320 Closing [Fri Oct 2 16:45:47 2026] 127.0.0.1:44326 Accepted [Fri Oct 2 16:45:48 2026] 127.0.0.1:44326 Closing [Fri Oct 2 16:45:48 2026] 127.0.0.1:44334 Accepted [Fri Oct 2 16:45:48 2026] 127.0.0.1:44334 Closing [Fri Oct 2 16:48:31 2026] 127.0.0.1:58494 Accepted [Fri Oct 2 16:48:31 2026] 127.0.0.1:58494 Closed without sending a request; it was probably just an unused speculative preconnection [Fri Oct 2 16:48:31 2026] 127.0.0.1:58494 Closing [Fri Oct 2 16:48:32 2026] 127.0.0.1:58504 Accepted [Fri Oct 2 16:48:32 2026] 127.0.0.1:58504 Closed without sending a request; it was probably just an unused speculative preconnection [Fri Oct 2 16:48:32 2026] 127.0.0.1:58504 Closing [Fri Oct 2 16:49:05 2026] 127.0.0.1:59652 Accepted [Fri Oct 2 16:49:05 2026] 127.0.0.1:59652 Closed without sending a request; it was probably just an unused speculative preconnection [Fri Oct 2 16:49:05 2026] 127.0.0.1:59652 Closing [Fri Oct 2 16:49:07 2026] 127.0.0.1:59656 Accepted [Fri Oct 2 16:49:07 2026] 127.0.0.1:59656 Closed without sending a request; it was probably just an unused speculative preconnection [Fri Oct 2 16:49:07 2026] 127.0.0.1:59656 Closing [Fri Oct 2 16:51:15 2026] 127.0.0.1:37004 Accepted [Fri Oct 2 16:51:15 2026] 127.0.0.1:37004 Closing [Fri Oct 2 16:51:28 2026] 127.0.0.1:43178 Accepted [Fri Oct 2 16:51:28 2026] 127.0.0.1:43178 Closing [Fri Oct 2 16:53:54 2026] 127.0.0.1:60544 Accepted [Fri Oct 2 16:53:54 2026] 127.0.0.1:60544 Closing [Fri Oct 2 17:03:54 2026] 127.0.0.1:52124 Accepted [Fri Oct 2 17:03:54 2026] 127.0.0.1:52124 Closing [Fri Oct 2 17:03:56 2026] 127.0.0.1:49496 Accepted [Fri Oct 2 17:03:56 2026] 127.0.0.1:49496 Closing [Fri Oct 2 17:06:17 2026] 127.0.0.1:46800 Accepted [Fri Oct 2 17:06:17 2026] 127.0.0.1:46800 Closing [Fri Oct 2 17:21:53 2026] 127.0.0.1:60954 Accepted [Fri Oct 2 17:21:53 2026] 127.0.0.1:60954 Closing [Fri Oct 2 17:32:18 2026] 127.0.0.1:56944 Accepted [Fri Oct 2 17:32:18 2026] 127.0.0.1:56944 Closing [Fri Oct 2 17:32:18 2026] 127.0.0.1:56946 Accepted [Fri Oct 2 17:32:18 2026] 127.0.0.1:56946 Closing [Fri Oct 2 17:41:25 2026] 127.0.0.1:50726 Accepted [Fri Oct 2 17:41:25 2026] 127.0.0.1:50726 Closing [Fri Oct 2 17:41:25 2026] 127.0.0.1:50730 Accepted
Generated 2026-10-02 15:41:25 UTC · Gladex.de