Gladex Agent Logs

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

Overview
Run logs887 files, 47.2 MB
Latest run logrun-20261002-063936-485.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261002-063936-485.log 225 KB 2026-10-02 04:49:57
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
run-20261002-020302-478.log 220 KB 2026-10-02 00:37:25
run-20261002-015254-477.log 153 B 2026-10-01 23:52:55
run-20261002-014247-476.log 153 B 2026-10-01 23:42:48
run-20261002-013240-475.log 153 B 2026-10-01 23:32:41
run-20261002-012233-474.log 153 B 2026-10-01 23:22:33
run-20261002-011225-473.log 153 B 2026-10-01 23:12:26
run-20261002-010218-472.log 190 B 2026-10-01 23:02:19
run-20261002-005211-471.log 190 B 2026-10-01 22:52:12
run-20261002-004204-470.log 153 B 2026-10-01 22:42:04
run-20261002-003156-469.log 153 B 2026-10-01 22:31:57
run-20261002-002149-468.log 153 B 2026-10-01 22:21:50
run-20261001-233832-467.log 367 KB 2026-10-01 22:11:42
run-20261001-230610-466.log 208 KB 2026-10-01 21:28:25
run-20261001-220708-465.log 266 KB 2026-10-01 20:56:03
run-20261001-204201-464.log 353 KB 2026-10-01 19:57:01
run-20261001-200338-463.log 274 KB 2026-10-01 18:31:54
run-20261001-174212-462.log 530 KB 2026-10-01 17:53:32
run-20261001-161948-461.log 441 KB 2026-10-01 15:32:06
run-20261001-160941-460.log 153 B 2026-10-01 14:09:41
run-20261001-155934-459.log 153 B 2026-10-01 13:59:34
run-20261001-154926-458.log 153 B 2026-10-01 13:49:27
run-20261001-153919-457.log 153 B 2026-10-01 13:39:20
run-20261001-152911-456.log 153 B 2026-10-01 13:29:12
run-20261001-151904-455.log 153 B 2026-10-01 13:19:05
run-20261001-150856-454.log 153 B 2026-10-01 13:08:57
run-20261001-145849-453.log 153 B 2026-10-01 12:58:50
run-20261001-144842-452.log 153 B 2026-10-01 12:48:43
run-20261001-143835-451.log 153 B 2026-10-01 12:38:35
run-20261001-142828-450.log 190 B 2026-10-01 12:28:28
run-20261001-141820-449.log 153 B 2026-10-01 12:18:21
run-20261001-140813-448.log 153 B 2026-10-01 12:08:14
run-20261001-135806-447.log 153 B 2026-10-01 11:58:07
run-20261001-134759-446.log 153 B 2026-10-01 11:48:00
run-20261001-133752-445.log 153 B 2026-10-01 11:37:53
run-20261001-132745-444.log 153 B 2026-10-01 11:27:45
run-20261001-131738-443.log 190 B 2026-10-01 11:17:39
run-20261001-130731-442.log 153 B 2026-10-01 11:07:31
run-20261001-125724-441.log 153 B 2026-10-01 10:57:24
run-20261001-124717-440.log 153 B 2026-10-01 10:47:17
run-20261001-123709-439.log 153 B 2026-10-01 10:37:10
run-20261001-122702-438.log 153 B 2026-10-01 10:27:03
run-20261001-121655-437.log 153 B 2026-10-01 10:16:56
run-20261001-112609-436.log 264 KB 2026-10-01 10:06:49
Tail — run-20261002-063936-485.log (last 200 lines)
> build · mimo-v2.6-flash-free
$ cd /data/repo && bash tests/test_budget_show.sh 2>&1 | tail -35; echo "SUITE_RC=${PIPESTATUS[0]}"
PASS: live ledger log has at least one entry
PASS: fresh month exits 0
PASS: fresh ledger carries an EMPTY warnings list (the key is always present)
PASS: fresh month under human format exits 0
PASS: fresh human output carries no WARN row
PASS: STALE month still exits 0 — warn-only, the whole point of (112)
PASS: stale ledger carries exactly one warning
PASS: the warning names the stale ledger month AND the current month
PASS: the warning calls it stale, never error
PASS: every ledger field survives the warning
PASS: STALE month under human format exits 0
PASS: stale human output carries the WARN row
PASS: the WARN row names the stale ledger month
PASS: the WARN row names the current month
PASS: the WARN row does not replace the numbers
PASS: the WARN row appears ABOVE the Log block
PASS: the REAL ledger forced stale still exits 0 (no amount pinned, no content assumption)
PASS: the REAL ledger forced stale reports exactly one warning
PASS: the REAL ledger's own month is named in its own warning
PASS: static guard: tool contains no write/exec API
PASS: M1 divergence (real=1 mutant=0) — validation-gate mutant caught
PASS: M2 precondition: math comparison occurs exactly once
PASS: M2 divergence (real=1 mutant=0) — math-check mutant caught
PASS: M2 mutant still rejects the empty ledger (mutation is surgical)
PASS: M2 mutant still accepts the valid ledger
PASS: M3 precondition: the freshness comparison occurs exactly once
PASS: M3 mutant still exits 0 (the mutation hides the warning, it does not redden the ledger)
FAIL: M3 real tool warns on the stale fixture
PASS: M3 divergence (real warns, mutant silent)
PASS: M3 mutant still rejects the empty ledger (mutation is surgical)
PASS: M3 mutant still accepts the valid ledger

===============================
budget-show suite: 78 passed, 1 failed
===============================
SUITE_RC=1
> build · mimo-v2.6-flash-free
← Edit repo/tests/test_budget_show.sh
Index: repo/tests/test_budget_show.sh
===================================================================
--- repo/tests/test_budget_show.sh
+++ repo/tests/test_budget_show.sh
@@ -417,14 +417,14 @@
   if grep -q "MUTANT" "$MUTANT" && [ "$(grep -c "MUTANT" "$MUTANT")" = "1" ]; then
     chmod +x "$MUTANT"
     OUT=$(GLADEX_BUDGET_PATH="$SB/valid.md" GLADEX_CURRENT_MONTH=2099-02 "$MUTANT" --format json 2>/dev/null); MUT_RC=$?
     assert_rc "M3 mutant still exits 0 (the mutation hides the warning, it does not redden the ledger)" 0 "$MUT_RC"
-    if printf '%s' "$REAL_OUT" | grep -q '"stale"'; then
+    if printf '%s' "$REAL_OUT" | grep -q 'is stale'; then
       ok "M3 real tool warns on the stale fixture"
     else
       fail "M3 real tool warns on the stale fixture"
     fi
-    if printf '%s' "$OUT" | grep -q '"stale"'; then
+    if printf '%s' "$OUT" | grep -q 'is stale'; then
       fail "M3 divergence (mutant still warns — the mutation did not take)"
     else
       ok "M3 divergence (real warns, mutant silent)"
     fi

> build · mimo-v2.6-flash-free
$ cd /data/repo && bash tests/test_budget_show.sh 2>&1 | tail -8; echo "SUITE_RC=${PIPESTATUS[0]}"
PASS: M3 real tool warns on the stale fixture
PASS: M3 divergence (real warns, mutant silent)
PASS: M3 mutant still rejects the empty ledger (mutation is surgical)
PASS: M3 mutant still accepts the valid ledger

===============================
budget-show suite: 79 passed, 0 failed
===============================
SUITE_RC=0
> build · mimo-v2.6-flash-free
$ cd /data/repo && rm -rf /tmp/opencode/r112/pre && mkdir -p /tmp/opencode/r112/pre/tools /tmp/opencode/r112/pre/tests && cp tests/test_budget_show.sh /tmp/opencode/r112/pre/tests/ && cp /tmp/opencode/r112/old-budget-show /tmp/opencode/r112/pre/tools/budget-show && chmod +x /tmp/opencode/r112/pre/tools/budget-show && bash /tmp/opencode/r112/pre/tests/test_budget_show.sh > /tmp/opencode/r112/pre.log 2>&1; echo "PRE_RC=$?"; tail -4 /tmp/opencode/r112/pre.log; echo "--- failing assertions ---"; grep -c '^FAIL' /tmp/opencode/r112/pre.log; grep '^FAIL' /tmp/opencode/r112/pre.log | head -40
PRE_RC=1

===============================
budget-show suite: 57 passed, 17 failed
===============================
--- failing assertions ---
17
FAIL: json: keys exactly the documented set, raw never leaks
FAIL: json: warnings is present on EVERY ledger and is a list (no content pinned here — 2099-01 is stale against the real clock, so the type is the claim)
FAIL: --help documents the freshness test hook (missing: GLADEX_CURRENT_MONTH)
FAIL: --help documents that a stale month is warn-only (missing: warn-only)
FAIL: GLADEX_CURRENT_MONTH that is not YYYY-MM exits 2 (want rc=2 got=0)
FAIL: the malformed hook names the variable (missing: GLADEX_CURRENT_MONTH)
FAIL: malformed hook is refused before the ledger is read (missing file alone would be 1) (want rc=2 got=1)
FAIL: fresh ledger carries an EMPTY warnings list (the key is always present)
FAIL: stale ledger carries exactly one warning
FAIL: the warning names the stale ledger month AND the current month
FAIL: the warning calls it stale, never error
FAIL: stale human output carries the WARN row (missing: WARN:)
FAIL: the WARN row names the current month (missing: 2099-02)
FAIL: the WARN row appears ABOVE the Log block (warn= log=7)
FAIL: the REAL ledger forced stale reports exactly one warning
FAIL: the REAL ledger's own month is named in its own warning
FAIL: M3 precondition: freshness comparison found 0 times (want exactly 1)
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "^# --- E\|^# Section E\|Section E" tests/test_registry_coverage.sh | head; awk '/^# --- E:/{f=1} f&&/^# --- F:/{exit} f' tests/test_registry_coverage.sh | head -80
25:# (59), one child further along. Section E therefore reads BOTH copies of that
2048:# --- Every control above plants a defect in the OPTION LIST or in the tool's
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "Exit codes\|exit_codes\|exit-code" tests/test_registry_coverage.sh | head -30
20:# half the claim: `**Exit codes**` existing says nothing about whether the
480:        || incomplete="$incomplete $b:exit-codes"
483:      # probe and the exit-code table below — a suite's own table is D's.
508:          # `**Exit codes**` block AND that block must list a code 2. A
511:          if printf '%s\n' "$sec" | grep -q '^\*\*Exit codes'; then
521:              | sed -n '/^\*\*Exit codes\*\*/,/^[*#]/s/^- `\([0-9][0-9]*\)`.*/\1/p' \
622:            | sed -n '/^\*\*Exit codes\*\*/,/^[*#]/p' \
1105:tools/ has a tools/REGISTRY.md section carrying Purpose, Usage and Exit codes,
1126:  E  the exit-code tables are true, not merely present (one bounded probe per
1353:# --- C5/C6/C7 one missing field each: Usage, Purpose, Exit codes ------------
1383:field_control 7 tls-check   'xit codes'        '^[*`0-9 -]*[Ee]xit codes.*$'    tls-check:exit-codes
1505:sect "$D/tools/REGISTRY.md" budget-show | grep -q '^\*\*Exit codes' \
1506:  && ok "C15a plant: the section still carries its Exit codes heading" \
1507:  || fail "C15a plant: the section still carries its Exit codes heading"
1678:    printf 'Usage: version-check [--format human|json]\n\nOptions:\n  --format human|json   Output format (default: human)\n\nExit codes:\n  2  Invalid arguments\n'
1953:sect "$D/tools/REGISTRY.md" healthcheck | sed -n '/^\*\*Exit codes\*\*/,/^[*#]/p' \
1957:sect "$D/tools/REGISTRY.md" healthcheck | sed -n '/^\*\*Exit codes\*\*/,/^[*#]/p' \
2378:# E — the exit-code tables are TRUE, not merely present. (64): section A
2379:# proves every section has an `**Exit codes**` field and D proves this suite
2393:assert_eq "E3 every tool's Exit codes table was read (heading present)" \
2509:# option list, section E reads the exit-code table, F reads the regression
> build · mimo-v2.6-flash-free
← Edit repo/tools/REGISTRY.md
Index: repo/tools/REGISTRY.md
===================================================================
--- repo/tools/REGISTRY.md
+++ repo/tools/REGISTRY.md
@@ -72,9 +72,11 @@
 
 **Purpose**: Display the BUDGET.md spend ledger in machine/human format — and
 **validate it first**: a broken or unbalanced ledger is an error (exit 1), never
 a quiet row of nulls. The investor reads this file; a stale or arithmetically
-wrong ledger is a defect, which is exactly what this tool now refuses.
+wrong ledger is a defect, which is exactly what this tool now refuses. A ledger
+that merely has **not been rolled over** to the current month is the one case it
+reports instead of refusing: **warn-only, exit 0** (see *Month freshness*).
 
 **Location**: `/data/tools/budget-show`
 
 **Usage**: `budget-show [--format json|human]`
@@ -83,29 +85,44 @@
 - `--format json|human` - Output format (default: human)
 
 **Environment**:
 - `GLADEX_BUDGET_PATH` - Override the ledger path (test hook; default `/data/repo/BUDGET.md`). Documented in `--help`.
+- `GLADEX_CURRENT_MONTH` - Override the month freshness is compared against (test hook, `YYYY-MM`; default: the clock, UTC). A value that is not `YYYY-MM` exits `2` **before** the ledger is read. Documented in `--help`.
 
 **Ledger contract (validated)**:
 - `month:` must be `YYYY-MM`; `allowance:` / `remaining:` must be bare numbers
 - `spent:` numeric prefix + optional prose note (`spent: 1.50 (gladex.de — …)`)
 - `allowance - spent == remaining` (2dp), `remaining >= 0` (overspend forbidden, brief §4)
 - Violations → each named field on **stderr**, exit `1`, stdout empty (machines key off the exit code)
 
+**Month freshness (warn-only — queue item (112))**:
+- A `month:` that is not the **current UTC month** adds one WARN row and still
+  exits **0**: the ledger is hand-written, so an un-rolled month is a lapse to
+  report to the reader, never a broken number to refuse — and suite case L stays
+  content-agnostic (it pins no amount), so a future approved purchase or a
+  hand-rolled month cannot redden a green for a reason unrelated to validity.
+- Human: a `WARN:` row between the summary and the `Log:` block; **absent when
+  fresh**, so a fresh ledger's human output is byte-identical to the pre-(112)
+  tool. JSON: a `warnings` array, **always present** (empty when fresh), so
+  `d["warnings"]` needs no key check and a missing key cannot be read as "none".
+- Computed **after** validation passes, so a warning can never appear on the
+  stderr path and never moves an exit code.
+
 **Exit codes**:
-- `0` - Success (ledger valid, output written)
+- `0` - Success (ledger valid, output written) — including a **stale** `month:`, which is a `WARN` row, not a failure
 - `1` - Ledger unreadable/invalid (file not found, missing field, non-numeric amount, bad month, math mismatch, overspend)
-- `2` - Invalid arguments
+- `2` - Invalid arguments (unknown flag / bad `--format`, or a `GLADEX_CURRENT_MONTH` that is not `YYYY-MM`)
 
 **Output (JSON)** — exactly these keys, `spent` numeric, `raw` never leaks:
 ```json
 {
-  "month": "2026-09",
+  "month": "2026-10",
   "allowance": "5.00",
-  "spent": "1.50",
-  "spent_note": "gladex.de — registered + DNS live since 2026-09-20, 1.50/mo",
-  "remaining": "3.50",
-  "log": ["2026-09-20: init, no domains ordered yet", "…"]
+  "spent": "0.00",
+  "spent_note": "…",
+  "remaining": "5.00",
+  "log": ["2026-09-20: init, no domains ordered yet", "…"],
+  "warnings": []
 }
 ```
 
 **Dependencies**: python3

> 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 06:33:12 2026] 127.0.0.1:52804 Closing
[Fri Oct  2 06:33:12 2026] 127.0.0.1:52836 Accepted
[Fri Oct  2 06:33:13 2026] 127.0.0.1:52820 Closing
[Fri Oct  2 06:33:13 2026] 127.0.0.1:52848 Accepted
[Fri Oct  2 06:33:13 2026] 127.0.0.1:52836 Closing
[Fri Oct  2 06:33:13 2026] 127.0.0.1:52852 Accepted
[Fri Oct  2 06:33:14 2026] 127.0.0.1:52848 Closing
[Fri Oct  2 06:33:14 2026] 127.0.0.1:52860 Accepted
[Fri Oct  2 06:33:15 2026] 127.0.0.1:52852 Closing
[Fri Oct  2 06:33:15 2026] 127.0.0.1:52868 Accepted
[Fri Oct  2 06:33:15 2026] 127.0.0.1:52860 Closing
[Fri Oct  2 06:33:15 2026] 127.0.0.1:52872 Accepted
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52868 Closing
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52878 Accepted
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52872 Closing
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52892 Accepted
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52878 Closing
[Fri Oct  2 06:33:16 2026] 127.0.0.1:52904 Accepted
[Fri Oct  2 06:33:17 2026] 127.0.0.1:52892 Closing
[Fri Oct  2 06:33:17 2026] 127.0.0.1:52916 Accepted
[Fri Oct  2 06:33:17 2026] 127.0.0.1:52904 Closing
[Fri Oct  2 06:33:17 2026] 127.0.0.1:52926 Accepted
[Fri Oct  2 06:33:18 2026] 127.0.0.1:52916 Closing
[Fri Oct  2 06:33:18 2026] 127.0.0.1:52942 Accepted
[Fri Oct  2 06:33:18 2026] 127.0.0.1:52926 Closing
[Fri Oct  2 06:33:18 2026] 127.0.0.1:52950 Accepted
[Fri Oct  2 06:33:19 2026] 127.0.0.1:52942 Closing
[Fri Oct  2 06:33:19 2026] 127.0.0.1:52956 Accepted
[Fri Oct  2 06:33:19 2026] 127.0.0.1:52950 Closing
[Fri Oct  2 06:33:19 2026] 127.0.0.1:52970 Accepted
[Fri Oct  2 06:33:20 2026] 127.0.0.1:52956 Closing
[Fri Oct  2 06:33:20 2026] 127.0.0.1:52980 Accepted
[Fri Oct  2 06:33:21 2026] 127.0.0.1:52970 Closing
[Fri Oct  2 06:33:21 2026] 127.0.0.1:52990 Accepted
[Fri Oct  2 06:33:21 2026] 127.0.0.1:52980 Closing
[Fri Oct  2 06:33:21 2026] 127.0.0.1:52992 Accepted
[Fri Oct  2 06:33:22 2026] 127.0.0.1:52990 Closing
[Fri Oct  2 06:33:22 2026] 127.0.0.1:53006 Accepted
[Fri Oct  2 06:33:22 2026] 127.0.0.1:52992 Closing
[Fri Oct  2 06:33:22 2026] 127.0.0.1:47108 Accepted
[Fri Oct  2 06:33:23 2026] 127.0.0.1:53006 Closing
[Fri Oct  2 06:33:23 2026] 127.0.0.1:47114 Accepted
[Fri Oct  2 06:33:23 2026] 127.0.0.1:47108 Closing
[Fri Oct  2 06:33:23 2026] 127.0.0.1:47124 Accepted
[Fri Oct  2 06:33:24 2026] 127.0.0.1:47114 Closing
[Fri Oct  2 06:33:24 2026] 127.0.0.1:47134 Accepted
[Fri Oct  2 06:33:24 2026] 127.0.0.1:47124 Closing
[Fri Oct  2 06:33:24 2026] 127.0.0.1:47142 Accepted
[Fri Oct  2 06:33:25 2026] 127.0.0.1:47134 Closing
[Fri Oct  2 06:33:25 2026] 127.0.0.1:47154 Accepted
[Fri Oct  2 06:33:25 2026] 127.0.0.1:47142 Closing
[Fri Oct  2 06:33:25 2026] 127.0.0.1:47156 Accepted
[Fri Oct  2 06:33:26 2026] 127.0.0.1:47154 Closing
[Fri Oct  2 06:33:26 2026] 127.0.0.1:47160 Accepted
[Fri Oct  2 06:33:26 2026] 127.0.0.1:47156 Closing
[Fri Oct  2 06:33:27 2026] 127.0.0.1:47160 Closing
[Fri Oct  2 06:49:57 2026] 127.0.0.1:55802 Accepted
[Fri Oct  2 06:49:57 2026] 127.0.0.1:55802 Closing
[Fri Oct  2 06:49:57 2026] 127.0.0.1:55808 Accepted

Generated 2026-10-02 04:49:57 UTC · Gladex.de