Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 496 files, 16.5 MB |
| Latest run log | run-20260925-205157-94.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260925-205157-94.log | 152 KB | 2026-09-25 19:07:17 |
| run-20260925-195858-93.log | 517 KB | 2026-09-25 18:41:57 |
| run-20260925-192850-92.log | 321 KB | 2026-09-25 17:48:58 |
| run-20260925-185030-91.log | 325 KB | 2026-09-25 17:18:50 |
| run-20260925-180536-90.log | 232 KB | 2026-09-25 16:40:30 |
| run-20260925-173957-89.log | 252 KB | 2026-09-25 15:55:36 |
| run-20260925-171044-88.log | 201 KB | 2026-09-25 15:29:57 |
| run-20260925-163300-87.log | 247 KB | 2026-09-25 15:00:44 |
| run-20260925-160013-86.log | 175 KB | 2026-09-25 14:23:00 |
| run-20260925-153430-85.log | 158 KB | 2026-09-25 13:50:13 |
| run-20260925-152430-84.log | 152 B | 2026-09-25 13:24:30 |
| run-20260925-151428-83.log | 189 B | 2026-09-25 13:14:30 |
| run-20260925-150428-82.log | 152 B | 2026-09-25 13:04:28 |
| run-20260925-145427-81.log | 152 B | 2026-09-25 12:54:28 |
| run-20260925-144426-80.log | 152 B | 2026-09-25 12:44:27 |
| run-20260925-143426-79.log | 152 B | 2026-09-25 12:34:26 |
| run-20260925-142425-78.log | 189 B | 2026-09-25 12:24:26 |
| run-20260925-141424-77.log | 152 B | 2026-09-25 12:14:25 |
| run-20260925-140424-76.log | 152 B | 2026-09-25 12:04:24 |
| run-20260925-135423-75.log | 152 B | 2026-09-25 11:54:24 |
| run-20260925-134422-74.log | 152 B | 2026-09-25 11:44:23 |
| run-20260925-133422-73.log | 152 B | 2026-09-25 11:34:22 |
| run-20260925-132421-72.log | 152 B | 2026-09-25 11:24:22 |
| run-20260925-131420-71.log | 189 B | 2026-09-25 11:14:21 |
| run-20260925-130419-70.log | 152 B | 2026-09-25 11:04:20 |
| run-20260925-125419-69.log | 152 B | 2026-09-25 10:54:19 |
| run-20260925-124418-68.log | 152 B | 2026-09-25 10:44:19 |
| run-20260925-123417-67.log | 189 B | 2026-09-25 10:34:18 |
| run-20260925-122417-66.log | 152 B | 2026-09-25 10:24:17 |
| run-20260925-121416-65.log | 189 B | 2026-09-25 10:14:17 |
| run-20260925-120415-64.log | 152 B | 2026-09-25 10:04:16 |
| run-20260925-115415-63.log | 152 B | 2026-09-25 09:54:15 |
| run-20260925-114414-62.log | 152 B | 2026-09-25 09:44:15 |
| run-20260925-113413-61.log | 152 B | 2026-09-25 09:34:14 |
| run-20260925-111839-60.log | 104 KB | 2026-09-25 09:24:13 |
| run-20260925-101629-59.log | 319 KB | 2026-09-25 09:08:39 |
| run-20260925-084303-58.log | 469 KB | 2026-09-25 08:06:29 |
| run-20260925-064014-57.log | 294 KB | 2026-09-25 06:33:03 |
| run-20260925-052608-56.log | 381 KB | 2026-09-25 04:30:14 |
| run-20260925-042134-55.log | 200 KB | 2026-09-25 03:16:08 |
| run-20260925-031342-54.log | 303 KB | 2026-09-25 02:11:34 |
| run-20260925-022932-53.log | 212 KB | 2026-09-25 01:03:42 |
| run-20260925-012106-52.log | 297 KB | 2026-09-25 00:19:32 |
| run-20260925-003542-51.log | 153 KB | 2026-09-24 23:11:06 |
| run-20260924-234828-50.log | 204 KB | 2026-09-24 22:25:42 |
| run-20260924-230237-49.log | 303 KB | 2026-09-24 21:38:28 |
| run-20260924-222340-48.log | 206 KB | 2026-09-24 20:52:37 |
| run-20260924-215353-47.log | 146 KB | 2026-09-24 20:13:40 |
| run-20260924-210315-46.log | 182 KB | 2026-09-24 19:43:53 |
| run-20260924-200755-45.log | 181 KB | 2026-09-24 18:53:15 |
Tail — run-20260925-205157-94.log (last 200 lines)
[0m← [0mEdit repo/tools/repo-lint
Index: repo/tools/repo-lint
===================================================================
--- repo/tools/repo-lint
+++ repo/tools/repo-lint
@@ -90,9 +90,12 @@
0 - every linted file parses cleanly (and the committed Go module compiles)
1 - at least one committed file fails to parse, a committed Go file does
not compile, or the committed CHANGELOG.md repeats a version token
(see failures[])
- 2 - invalid arguments
+ 2 - invalid arguments; under `--format json` that is still ONE JSON object
+ on stdout (exit_code 2, error naming the bad argument) - never empty
+ stdin for a machine reader - while human mode keeps argparse's usage
+ prose on stderr exactly as before
3 - cannot verify: not a git repo, unknown revision, a linter binary
missing/timed out, or a docstring section this epilog is built from
that is missing or empty (a lint that did not run is never a pass)
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tools/repo-lint
Index: repo/tools/repo-lint
===================================================================
--- repo/tools/repo-lint
+++ repo/tools/repo-lint
@@ -127,8 +127,20 @@
the definitions of the flags live in ONE place (_add_flags) read by both the
scan and the parser, and why those three helpers sit above the epilog build:
"never a pass" is a value, and the value has to be readable.
+The same rule covers the argv argparse itself rejects, which was the last
+path with no object: `--format json --timeout abc` printed usage to stderr
+and exited 2 with an EMPTY stdout, so a `| jq` consumer met jq's own parse
+error instead of our diagnosis - it could not tell a mistyped flag from a
+crash. _Parser.error picks the channel by reading --format with argparse (a
+throwaway parser carrying ONLY that flag, because the read has to survive the
+very bad --timeout that triggered it) and raises _UsageError only for json;
+main() reports it through die() with exit_code 2, so "you typed a bad flag"
+(2) stays distinct from "this could not be verified" (3). Where no format can
+be read at all - an invalid choice, an incomplete --format, anything after
+`--` - the channel stays human, because that argv named no format to honour.
+
This tool is read-only: it never writes to the repo and never mutates git
state (object reads only, no index/lock use, so it is safe to run while
other shifts commit).
"""
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tools/repo-lint
Index: repo/tools/repo-lint
===================================================================
--- repo/tools/repo-lint
+++ repo/tools/repo-lint
@@ -267,10 +267,10 @@
def _now() -> str:
return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
-def die(p, repo, message, sha_requested, args_format):
- """Fail closed with exit 3, still machine-readable in json mode.
+def die(p, repo, message, sha_requested, args_format, exit_code=EXIT_CANNOT):
+ """Fail closed with a non-verdict, machine-readable in json mode.
THE one shape of a non-verdict in json mode: `error` carries the reason,
`failures`/`errors` stay empty (nothing was linted, so nothing is blamed
on a file), `go_compile` and `changelog_version` are null, `ok` is false.
@@ -278,8 +278,14 @@
why these three definitions sit ABOVE it: at import time there is no
parser yet, so `p` arrives as None (unused here) and the format/sha come
from _pre_argparse instead of argparse.
+ `exit_code` exists for ONE caller: a usage error is the same non-verdict
+ shape but a DIFFERENT number - bad argv (2) must never read as "could not
+ verify" (3), or a machine consumer would retry a typo. Every other caller
+ takes the default, so exit 3 remains what "a lint that did not run is
+ never a pass" means.
+
`p` is accepted for the call sites in main() and deliberately unused.
"""
if args_format == "json":
print(
@@ -298,18 +304,37 @@
"errors": [],
"go_compile": None,
"changelog_version": None,
"ok": False,
- "exit_code": EXIT_CANNOT,
+ "exit_code": exit_code,
},
indent=2,
)
)
else:
print(f"repo-lint: ERROR {message}", file=sys.stderr)
- return EXIT_CANNOT
+ return exit_code
+def _add_format_flag(p) -> None:
+ """The `--format` option, added to a parser - from HERE and nowhere else.
+
+ Extracted from _add_flags for one caller: the usage-error path (see
+ _format_of) needs a parser that answers `--format` and IGNORES every other
+ flag, because the read has to survive the bad `--timeout` that is the
+ whole reason it is running. Splitting the definition out would be a second
+ copy of the choices list - the drift this file keeps paying for - so the
+ choices/default/help live here and _add_flags calls this: one definition,
+ N readers, pinned by suite S16/S16b.
+ """
+ p.add_argument(
+ "--format",
+ choices=["human", "json"],
+ default="human",
+ help="output format (default: human)",
+ )
+
+
def _add_flags(p) -> None:
"""Every non-help option, added to a parser by BOTH callers.
SINGLE COPY of the flag definitions: main()'s parser and the pre-argparse
> build · mimo-v2.6-flash-free
[0m← [0mEdit repo/tools/repo-lint
Index: repo/tools/repo-lint
===================================================================
--- repo/tools/repo-lint
+++ repo/tools/repo-lint
@@ -344,21 +344,20 @@
out a second time (prefix matching, --flag=value, `--` termination,
last-wins), which is precisely the class of second copy this whole file
keeps paying for. Both parsers are argparse, so the rules are the same
rules by construction rather than by a test that remembers to compare them.
+
+ `--format` is delegated to _add_format_flag rather than spelled out here:
+ it is still ONE definition (this is a call, not a copy), and the separate
+ format-only reader in _format_of needs the very same object.
"""
p.add_argument(
"--sha",
default="HEAD",
help="git revision to lint (default: HEAD); any rev git accepts",
)
+ _add_format_flag(p)
p.add_argument(
- "--format",
- choices=["human", "json"],
- default="human",
- help="output format (default: human)",
- )
- p.add_argument(
"--timeout",
type=float,
default=10.0,
help="per-command timeout in seconds (default: 10)",
@@ -374,8 +373,40 @@
),
)
+def _format_of(argv) -> str:
+ """The format this argv asks for, read by argparse before argparse runs.
+
+ Exists for ONE reason: when argparse REJECTS the argv, its error() has no
+ parsed values to consult and must still decide which stream to answer -
+ usage prose on stderr for a human, this tool's JSON object for a machine.
+ Deciding that with `if "--format json" in argv` would be argparse's rules
+ written out a second time (the `--flag=value` form, the unique-prefix
+ `--form`, `--` termination, last-wins), so it parses instead.
+
+ The parser carries ONLY --format, and that is load-bearing: given
+ `--timeout abc --format json` a full parser aborts at the bad float and
+ never reaches the flag whose job is to say how to report the abort. With
+ every other option unknown, argparse simply collects them as extras and
+ the read completes wherever the flag sits.
+
+ "human" is the honest answer for an argv this read cannot complete -
+ `--format yaml` (the choices list rejects it), `--format` with no value,
+ or anything after `--`, where the token is a positional and not a flag at
+ all. None of those named a readable format, so none is invented; the
+ human channel is argparse's own, unchanged.
+ """
+ p = argparse.ArgumentParser(add_help=False, prog="repo-lint")
+ _add_format_flag(p)
+ try:
+ with contextlib.redirect_stderr(io.StringIO()):
+ args, _extra = p.parse_known_args(argv)
+ except SystemExit:
+ return "human"
+ return args.format
+
+
def _pre_argparse():
"""(format, sha) exactly as argparse would parse them, before argparse runs.
Exists for ONE caller: the epilog refusal, which fires at import while
> 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 Sep 25 20:54:44 2026] 127.0.0.1:35742 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35742 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35748 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35748 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35764 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35764 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35774 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35774 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35778 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35780 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35778 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35780 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35788 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35788 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35804 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35804 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35818 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35818 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35832 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35832 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35840 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35840 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35846 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35856 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:35846 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:35856 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:47514 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:47514 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:47530 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:47530 Closing [Fri Sep 25 20:54:44 2026] 127.0.0.1:47544 Accepted [Fri Sep 25 20:54:44 2026] 127.0.0.1:47544 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47556 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47556 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47558 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47558 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47568 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47568 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47582 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47582 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47596 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47596 Closing [Fri Sep 25 20:54:45 2026] 127.0.0.1:47612 Accepted [Fri Sep 25 20:54:45 2026] 127.0.0.1:47612 Closing [Fri Sep 25 20:54:46 2026] 127.0.0.1:47616 Accepted [Fri Sep 25 20:54:46 2026] 127.0.0.1:47616 Closing [Fri Sep 25 20:54:46 2026] 127.0.0.1:47618 Accepted [Fri Sep 25 20:54:46 2026] 127.0.0.1:47618 Closing [Fri Sep 25 20:54:46 2026] 127.0.0.1:47632 Accepted [Fri Sep 25 20:54:46 2026] 127.0.0.1:47632 Closing [Fri Sep 25 20:56:18 2026] 127.0.0.1:41236 Accepted [Fri Sep 25 20:56:18 2026] 127.0.0.1:41236 Closing [Fri Sep 25 20:56:25 2026] 127.0.0.1:34978 Accepted [Fri Sep 25 20:56:26 2026] 127.0.0.1:34978 Closing [Fri Sep 25 20:56:42 2026] 127.0.0.1:53658 Accepted [Fri Sep 25 20:56:42 2026] 127.0.0.1:53658 Closing [Fri Sep 25 21:07:18 2026] 127.0.0.1:60578 Accepted [Fri Sep 25 21:07:18 2026] 127.0.0.1:60578 Closing [Fri Sep 25 21:07:19 2026] 127.0.0.1:60580 Accepted
Generated 2026-09-25 19:07:19 UTC · Gladex.de