Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 833 files, 40.6 MB |
| Latest run log | run-20261001-050850-431.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261001-050850-431.log | 228 KB | 2026-10-01 03:26:41 |
| run-20261001-042252-430.log | 198 KB | 2026-10-01 02:58:43 |
| run-20261001-032127-429.log | 327 KB | 2026-10-01 02:12:46 |
| run-20261001-022005-428.log | 263 KB | 2026-10-01 01:11:21 |
| run-20261001-020022-427.log | 205 KB | 2026-10-01 00:09:58 |
| run-20261001-015015-426.log | 153 B | 2026-09-30 23:50:16 |
| run-20261001-014008-425.log | 153 B | 2026-09-30 23:40:09 |
| run-20261001-013001-424.log | 153 B | 2026-09-30 23:30:02 |
| run-20261001-011954-423.log | 153 B | 2026-09-30 23:19:55 |
| run-20261001-010947-422.log | 153 B | 2026-09-30 23:09:48 |
| run-20261001-005940-421.log | 153 B | 2026-09-30 22:59:41 |
| run-20261001-004933-420.log | 153 B | 2026-09-30 22:49:34 |
| run-20261001-003926-419.log | 153 B | 2026-09-30 22:39:27 |
| run-20261001-002920-418.log | 190 B | 2026-09-30 22:29:20 |
| run-20261001-001913-417.log | 153 B | 2026-09-30 22:19:13 |
| run-20261001-000906-416.log | 153 B | 2026-09-30 22:09:07 |
| run-20260930-231805-415.log | 582 KB | 2026-09-30 21:59:00 |
| run-20260930-223504-414.log | 194 KB | 2026-09-30 21:07:59 |
| run-20260930-212614-413.log | 270 KB | 2026-09-30 20:24:58 |
| run-20260930-201407-412.log | 423 KB | 2026-09-30 19:16:08 |
| run-20260930-184629-411.log | 463 KB | 2026-09-30 18:04:01 |
| run-20260930-165104-410.log | 325 KB | 2026-09-30 16:36:29 |
| run-20260930-161443-409.log | 189 KB | 2026-09-30 14:41:04 |
| run-20260930-160441-408.log | 153 B | 2026-09-30 14:04:43 |
| run-20260930-155440-407.log | 153 B | 2026-09-30 13:54:41 |
| run-20260930-154440-406.log | 153 B | 2026-09-30 13:44:40 |
| run-20260930-153439-405.log | 153 B | 2026-09-30 13:34:40 |
| run-20260930-152438-404.log | 190 B | 2026-09-30 13:24:39 |
| run-20260930-151438-403.log | 190 B | 2026-09-30 13:14:38 |
| run-20260930-150437-402.log | 153 B | 2026-09-30 13:04:37 |
| run-20260930-145436-401.log | 153 B | 2026-09-30 12:54:37 |
| run-20260930-144435-400.log | 153 B | 2026-09-30 12:44:36 |
| run-20260930-143435-399.log | 190 B | 2026-09-30 12:34:35 |
| run-20260930-142434-398.log | 153 B | 2026-09-30 12:24:35 |
| run-20260930-141433-397.log | 153 B | 2026-09-30 12:14:34 |
| run-20260930-140433-396.log | 153 B | 2026-09-30 12:04:33 |
| run-20260930-135432-395.log | 153 B | 2026-09-30 11:54:33 |
| run-20260930-134431-394.log | 153 B | 2026-09-30 11:44:32 |
| run-20260930-133431-393.log | 190 B | 2026-09-30 11:34:31 |
| run-20260930-132430-392.log | 153 B | 2026-09-30 11:24:31 |
| run-20260930-131429-391.log | 153 B | 2026-09-30 11:14:30 |
| run-20260930-130429-390.log | 153 B | 2026-09-30 11:04:29 |
| run-20260930-125428-389.log | 153 B | 2026-09-30 10:54:29 |
| run-20260930-124427-388.log | 153 B | 2026-09-30 10:44:28 |
| run-20260930-123427-387.log | 153 B | 2026-09-30 10:34:27 |
| run-20260930-122426-386.log | 153 B | 2026-09-30 10:24:27 |
| run-20260930-121425-385.log | 153 B | 2026-09-30 10:14:26 |
| run-20260930-120425-384.log | 153 B | 2026-09-30 10:04:25 |
| run-20260930-115424-383.log | 153 B | 2026-09-30 09:54:25 |
| run-20260930-114423-382.log | 153 B | 2026-09-30 09:44:24 |
Tail — run-20261001-050850-431.log (last 200 lines)
"$(sget_live ec_run)" "$(sget_live ec_ok)"
assert_ge "E5 non-vacuity: at least 10 bad-argument probes actually ran" 10 "$(sget_live badarg_run)"
assert_not_contains "E6 live tree: no badarg_* VIOLATION line" "VIOLATION badarg_" "$LIVE_OUT"
# ==========================================================================
# F — (63) the registry's full-regression figure has a reader now. Six lines
# in tools/REGISTRY.md quote a suite total; the one that reads as current
# said 40 while `regression-run --list` discovered 59, and no suite in the
# tree read either side. F asserts the live tree (via LIVE_OUT, never $OUT —
# every control in C reassigns it), C16-C20 plant one defect per kind in a
# sandbox copy. Granularity is declared: the SUITE COUNT is checked against
# the tool, the assertion totals beside it are dated prose, and a dated
# figure is allowed to be old because that is what history means.
# ==========================================================================
assert_contains "F0 the live snapshot carries the figure keys" "fig_disc=" "$LIVE_OUT"
assert_ge "F1 non-vacuity: discovery found a real suite count (an unread count is never a pass)" \
10 "$(sget_live fig_disc)"
assert_eq "F2 exactly one Live line carries a suite figure" 1 "$(sget_live fig_live)"
assert_eq "F3 and that figure equals what regression-run --list discovers" \
"$(sget_live fig_disc)" "$(sget_live fig_claim)"
assert_eq "F4 no suite figure anywhere in the registry is undated" 0 "$(sget_live fig_undated)"
assert_eq "F5 and nothing is stale, duplicate or missing" 0 "$(sget_live fig_stale)"
assert_not_contains "F6 live tree: no figure_* VIOLATION line" "VIOLATION figure_" "$LIVE_OUT"
# (83) both counts, so a red can name the side that moved. F8 is the
# non-vacuity half: a repository that could not be read answers `na`, and `na`
# is not a number the floor can be evaluated against — an input that was not
# read is never a pass, so that case reddens here rather than staying silent.
assert_contains "F7 the live snapshot carries the COMMITTED count as well as the discovered one (83)" \
"fig_head=" "$LIVE_OUT"
assert_ge "F8 non-vacuity: the committed side was really read, not reported as na (83)" \
10 "$(sget_live fig_head)"
# ==========================================================================
# G — (65) a documented exit 2 is probed for a bad VALUE, not only for an
# unknown flag: E's probe used a name no getopt table could carry, so a tool
# could pass E while ignoring the value of a flag it defines — which is the
# argv a caller actually types. Scope is derived, never hand-listed: `--format`
# from the tool's own --help (17 tools today), `--timeout` from the table's own
# exit-2 bullet (7 tables since (71), 6 before it), and (69) a PORT metavar from
# the tool's own --help (4 flags across 3 tools today — the metavar IS the scope,
# because a port is always an integer 1-65535). Every derived list is asserted
# for non-vacuity, because a derivation that matched nothing would otherwise
# read as "every bad value refused" with zero probes. Reads LIVE_OUT, never
# $OUT — every control in C reassigns it. G20–G23 add the (77) subject, which
> build · mimo-v2.6-flash-free
Now implementing item **(98)**. First the header and declaration table:
[0m$ [0mcd /data/repo && sed -n '2160,2172p' tests/test_registry_coverage.sh
|| fail "C31i VIOLATION figure_stale $disc31"
assert_eq "C31j exactly one violation - the plant, and nothing else" 1 "$(sget violations)"
assert_eq "C31k the DISCOVERED count moved: it counts the checkout" \
"$((disc31 + 1))" "$(sget fig_disc)"
assert_eq "C31l the COMMITTED count did not: it counts the repository" \
"$disc31" "$(sget fig_head)"
assert_eq "C31m and the report names the side the claim agrees with" "head" "$(sget fig_src)"
assert_contains "C31n the basis is printed where the reader sees the red, not only in the counters" \
"DIAG figure_basis side=head claim=$disc31 head=$disc31 disc=$((disc31 + 1))" "$OUT"
# ==========================================================================
# D — this suite's own argv surface: the rule it enforces for everyone else.
# ==========================================================================
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -241,13 +241,24 @@
# exist to be compared.
#
# Hermeticity: only section A reads the live tree, and read-only. Every control
# copies tools/ + REGISTRY.md into its own mktemp sandbox and mutates the copy;
-# the sandbox is trap-removed on exit. No network, no sqlite, no writes outside
-# the sandbox, the `--help` probes are the same bounded `timeout 20` in both
-# modes, and the bad-argument probes are bounded `timeout 5` — a tool that must
-# reach the network (or hang) to discover that an argument is nonsense is the
-# defect E is looking for, so the short bound is the assertion, not a caveat.
+# the sandbox is trap-removed on exit. No EXTERNAL network, no sqlite, no
+# writes outside the sandbox, the `--help` probes are the same bounded
+# `timeout 20` in both modes, and the bad-argument probes are bounded
+# `timeout 5` — a tool that must reach the network (or hang) to discover that
+# an argument is nonsense is the defect E is looking for, so the short bound is
+# the assertion, not a caveat. One declared exception, added by queue item
+# (98): the three declared-contract probes below are bounded `timeout 10` and
+# one of them (`smtp-relay-probe`) opens a socket to `127.0.0.1:25` — loopback
+# only, never the internet, and deliberately scoped to that single endpoint so
+# the tool's own default set (which includes the VPS path `77.90.15.49:25`) is
+# never dialled from here. It needs the container's own Postfix (`enabled`,
+# `active`) to accept an unauthenticated relay from 127.0.0.0/8, which is what
+# `mynetworks` says by design and what the tool's own `DEFAULT_EXPECT_OPEN`
+# already assumes; a run where that is not true reports `want=1 got=3` on the
+# `DIAG declared_probe` line below, which names the dependency rather than
+# mislabelling it as a contract break.
#
# Usage: bash tests/test_registry_coverage.sh [--help]
# Exit: 0 all assertions pass, 1 one or more failed, 2 bad arguments.
set -u
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -239,8 +239,45 @@
# moved — not for a second red. C31 is the control, and it is the only one in
# this file that builds a repository (`git init` + commit) so that two counts
# exist to be compared.
#
+# Queue item (98), [0.4.150] — the THREE pairs (73) had to declare out of its
+# value-probe classes, because each metavar's type rejects a value the tool
+# then answers with something other than 2: `repo-lint --sha
+# not-a-hex-digest` → **3**, `immich-roundtrip --email
+# not-an-email-address` → **3**, `smtp-relay-probe --expect-open
+# not-an-endpoint` → **1**, all three measured 2026-09-30 and written down in
+# tools/REGISTRY.md as prose. Writing them down was (75)/(76)'s rule applied to
+# exclusion — a hole nobody can see cannot be red — but prose is not a
+# contract: nothing in the tree asked whether those codes were still true, so
+# repo-lint collapsing "a lint that did not run" into exit 0 would have left
+# every assertion in this file green. That is the whole defect. The three now
+# live in ONE table inside `run_check()` (`DECLARED_PAIRS`, `tool|flag|
+# expected-exit|argv`), each pair is probed with its own type-invalid value,
+# and the measured code must EQUAL the declared one — no tolerance, no
+# "non-2": an exact code is what a machine consumer reads, so it is what this
+# asserts. On mismatch the child prints `DIAG declared_probe <pair> want=<n>
+# got=<n>` *and* the usual `VIOLATION badvalue_contract`, because a red that
+# says only "some value probe failed" would send a reader hunting through six
+# classes to find one tool. The class is non-vacuous the same way every other
+# class here is: zero declared pairs in a tree that is supposed to carry three
+# is an `ERROR` (exit 3), never a pass, and the parent holds the count to
+# exactly **3** so a pair that quietly lost its flag reddens instead of
+# shrinking the scope. `cl_other` — the pairs with NO type-invalid value at
+# all, because `PATH`/`DIR`/`ENV`/`REPO`… accept any string — keeps its name
+# and drops by three (25 → **22**), and the partition gains a sixth bucket.
+# Candidate (b) in the item ("repair the tools to exit 2") was measured and
+# REJECTED rather than skipped: repo-lint's own table defines 3 as "cannot
+# verify: unknown revision" and its own suite pins `--sha deadbeef123` → 3
+# (`R16` asserts the refusal STILL exits 3), while its `--help` promises "any
+# rev git accepts", so `not-a-hex-digest` is an unresolvable revision and not
+# a type error — exiting 2 there would be the wrong contract, and would break
+# `--sha main` if it were implemented as a hex check. `immich-roundtrip`'s 3
+# is measured to hold EITHER way (service up → auth failed, service down →
+# "service unreachable", both 3), so the probe is service-independent by
+# construction rather than by luck. Only (a) closes the item without touching
+# a tool or a second suite.
+#
# Hermeticity: only section A reads the live tree, and read-only. Every control
# copies tools/ + REGISTRY.md into its own mktemp sandbox and mutates the copy;
# the sandbox is trap-removed on exit. No EXTERNAL network, no sqlite, no
# writes outside the sandbox, the `--help` probes are the same bounded
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -353,9 +353,10 @@
local port_n=0 portv_ok=0 portm_ok=0 miss_n=0 missm_ok=0
local conv_pairs=0 conv_extra=0
local syn_n=0 syn_ok=0 synp_n=0 synp_ok=0
local cl_scope=0 cl_fmt=0 cl_port=0 cl_enum=0 cl_enum_ok=0
- local cl_num=0 cl_num_ok=0 cl_other=0
+ local cl_num=0 cl_num_ok=0 cl_other=0 cl_declared=0 cl_declared_ok=0
+ local dline="" dcode="" dargs="" drc=0
local fig_disc="" fig_live_n=0 fig_claim="" figbad="" fig_list="" fig_lrc=0
local fig_undated_n=0 fig_stale_n=0
# (83) the second count, and which side the claim agrees with.
local fig_head="na" fig_src="na"
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -369,8 +369,21 @@
# The one deliberately-unrecognised flag both probes use. Every tool must
# reject it; no tool defines it (a name no getopt table could carry).
local bad_flag="--regcov-not-a-real-flag"
+ # (98) the declared-contract table: `tool|flag|expected-exit|argv`, one line
+ # per pair whose METAVAR type rejects a value its tool answers with a
+ # documented non-2 code. The argv is the exact argv the contract was
+ # measured with, so the probe can never drift from the claim; the fourth
+ # field may carry extra arguments, and `smtp-relay-probe`'s carries
+ # `127.0.0.1:25` so that probe dials the container's own Postfix and never
+ # the tool's default set (which includes the VPS path). Read by a single
+ # `grep -m1 "^<tool>|<flag>|"`, so a pair the table does not name falls
+ # through to `cl_other` exactly as it did before this item existed.
+ local DECLARED_PAIRS='repo-lint|--sha|3|not-a-hex-digest
+immich-roundtrip|--email|3|not-an-email-address
+smtp-relay-probe|--expect-open|1|not-an-endpoint 127.0.0.1:25'
+
if [ ! -d "$tools_dir" ]; then
echo "ERROR missing_tools_dir $tools_dir"; return 3
fi
if [ ! -f "$registry" ]; then
> 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)
[Thu Oct 1 04:56:06 2026] 127.0.0.1:45684 Accepted [Thu Oct 1 04:56:06 2026] 127.0.0.1:45684 Closing [Thu Oct 1 04:56:06 2026] 127.0.0.1:45688 Accepted [Thu Oct 1 04:56:06 2026] 127.0.0.1:45688 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44758 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44758 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44764 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44764 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44772 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44772 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44774 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44774 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44778 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44778 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44792 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44792 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44798 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44798 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44806 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44806 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44814 Accepted [Thu Oct 1 04:56:17 2026] 127.0.0.1:44814 Closing [Thu Oct 1 04:56:17 2026] 127.0.0.1:44816 Accepted [Thu Oct 1 04:56:18 2026] 127.0.0.1:44816 Closing [Thu Oct 1 04:56:18 2026] 127.0.0.1:44830 Accepted [Thu Oct 1 04:56:18 2026] 127.0.0.1:44830 Closing [Thu Oct 1 04:56:18 2026] 127.0.0.1:44844 Accepted [Thu Oct 1 04:56:18 2026] 127.0.0.1:44844 Closing [Thu Oct 1 04:56:18 2026] 127.0.0.1:44850 Accepted [Thu Oct 1 04:56:18 2026] 127.0.0.1:44850 Closing [Thu Oct 1 04:56:59 2026] 127.0.0.1:56966 Accepted [Thu Oct 1 04:56:59 2026] 127.0.0.1:56966 Closing [Thu Oct 1 04:57:29 2026] 127.0.0.1:45548 Accepted [Thu Oct 1 04:57:29 2026] 127.0.0.1:45548 Closing [Thu Oct 1 05:03:39 2026] 127.0.0.1:34924 Accepted [Thu Oct 1 05:03:39 2026] 127.0.0.1:34924 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53704 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53704 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53712 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53712 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53726 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53726 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53742 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53742 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53758 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53758 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53766 Accepted [Thu Oct 1 05:09:53 2026] 127.0.0.1:53766 Closing [Thu Oct 1 05:09:53 2026] 127.0.0.1:53780 Accepted [Thu Oct 1 05:09:54 2026] 127.0.0.1:53780 Closing [Thu Oct 1 05:09:54 2026] 127.0.0.1:53796 Accepted [Thu Oct 1 05:09:54 2026] 127.0.0.1:53796 Closing [Thu Oct 1 05:09:54 2026] 127.0.0.1:53798 Accepted [Thu Oct 1 05:09:54 2026] 127.0.0.1:53798 Closing [Thu Oct 1 05:09:54 2026] 127.0.0.1:41328 Accepted [Thu Oct 1 05:09:54 2026] 127.0.0.1:41328 Closing [Thu Oct 1 05:26:46 2026] 127.0.0.1:44790 Accepted [Thu Oct 1 05:26:46 2026] 127.0.0.1:44790 Closing [Thu Oct 1 05:26:46 2026] 127.0.0.1:44804 Accepted
Generated 2026-10-01 03:26:46 UTC · Gladex.de