Gladex Agent Logs

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

Overview
Run logs811 files, 37.2 MB
Latest run logrun-20260930-161443-409.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20260930-161443-409.log 125 KB 2026-09-30 14:27:46
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
run-20260930-113423-381.log 153 B 2026-09-30 09:34:23
run-20260930-112422-380.log 153 B 2026-09-30 09:24:23
run-20260930-111421-379.log 190 B 2026-09-30 09:14:22
run-20260930-110421-378.log 153 B 2026-09-30 09:04:21
run-20260930-105420-377.log 153 B 2026-09-30 08:54:21
run-20260930-100330-376.log 339 KB 2026-09-30 08:44:20
run-20260930-092951-375.log 271 KB 2026-09-30 07:53:30
run-20260930-074809-374.log 229 KB 2026-09-30 07:19:51
run-20260930-051434-373.log 466 KB 2026-09-30 05:38:09
run-20260930-040846-372.log 234 KB 2026-09-30 03:04:34
run-20260930-035225-371.log 111 KB 2026-09-30 01:58:46
run-20260930-020735-370.log 429 KB 2026-09-30 01:42:25
run-20260930-015734-369.log 153 B 2026-09-29 23:57:35
run-20260930-014733-368.log 153 B 2026-09-29 23:47:34
run-20260930-013732-367.log 153 B 2026-09-29 23:37:33
run-20260930-012732-366.log 153 B 2026-09-29 23:27:32
run-20260930-011731-365.log 153 B 2026-09-29 23:17:32
run-20260930-010730-364.log 153 B 2026-09-29 23:07:31
run-20260930-005729-363.log 153 B 2026-09-29 22:57:30
run-20260930-004729-362.log 153 B 2026-09-29 22:47:29
run-20260930-003728-361.log 153 B 2026-09-29 22:37:29
run-20260930-002727-360.log 153 B 2026-09-29 22:27:28
Tail — run-20260930-161443-409.log (last 200 lines)
bash tests/test_registry_coverage.sh [--help]
```

**How it stays honest**: **one** code path serves truth and every control —
`run_check()` is reached by the live assertion *and* by every negative control
through the same child re-exec (`REGISTRY_COVERAGE_CHILD=1` re-runs this script
to that branch), so a control going red proves the live assertion *can* go red
=== new assertions ===
189:# number a reader can watch. C29 plants both new classes at once.
544:          # counting would redden G29 instead of quietly removing a pair from
1820:# --- C29 the (73) class: two metavars whose own TYPE says the value is wrong.
1863:expect "C29a plant: its --help still advertises an enum metavar (so it is in scope)" \
1866:assert_eq "C29b plant: and the value outside that list really is swallowed (exit 0, not 2)" 0 "$rc29e"
1868:assert_eq "C29c plant: and so is a quantity value that is not a number" 0 "$rc29n"
1870:assert_eq "C29d plant: while a MISSING value still exits 2 - (72) has nothing to find here" 2 "$rc29m"
1872:assert_eq "C29e plant: and E's probe still passes (this is NOT the (64) defect)" 2 "$rc29f"
1874:assert_eq "C29f plant: while the PORT class stays silent - one flag, one owning class" 2 "$rc29p"
1876:assert_eq "C29g a tool that swallows a type-invalid value -> exit 1" 1 "$RC"
1878:  && ok "C29h VIOLATION badvalue_contract verify-landing:mode-enum" \
1879:  || fail "C29h VIOLATION badvalue_contract verify-landing:mode-enum"
1881:  && ok "C29i VIOLATION badvalue_contract verify-landing:wait-numval" \
1882:  || fail "C29i VIOLATION badvalue_contract verify-landing:wait-numval"
1883:assert_eq "C29j exactly two violations - the two plants, and nothing else" \
1885:assert_contains "C29k both classes really ran in that sandbox (cl_enum/cl_num reported)" \
1890:assert_eq "C29l and every other enum metavar in the sandbox still answered 2" \
1892:assert_eq "C29m and every other quantity metavar in the sandbox still answered 2" \
1894:assert_eq "C29n and the partition still closes over the planted pairs" \
2055:assert_contains "G24 the live snapshot carries the (73) class keys" "cl_enum=" "$LIVE_OUT"
2056:assert_ge "G25 non-vacuity: at least one enum metavar is really advertised, so that class read a scope" \
2058:assert_eq "G26 every enum metavar refuses a value outside its own list with exit 2" \
2060:assert_ge "G27 non-vacuity: at least 10 quantity metavars are really advertised, so that class read a scope" \
2062:assert_eq "G28 every quantity metavar refuses a value that is not a number with exit 2" \
2064:assert_eq "G29 and the five buckets add up to the scope G14 recounted - one pair each, none skipped" \
2067:assert_ge "G30 and the declared-out remainder is counted rather than dropped (24 pairs today)" \
$ cd /data/repo && timeout 300 bash tests/test_gladex_monitor.sh 2>&1 | grep -i "fail\|FAIL" | head -20; echo "=== (73) header comment ==="; sed -n 130,175p tests/test_registry_coverage.sh
FAIL A3 tree clean AND in sync with origin/main (kind=is key=git want=## main...origin/main)
FAIL A9 repo-lint exits 0 (kind=rc key=lint want=0)
FAIL A10 every linted file parses (kind=contains key=lint want=parse clean (exit 0))
FAIL A11 no missing changelog citation (kind=contains key=lint want=checked, 0 missing)
failed: 4
summary: 27 assertions, 23 passed, 4 failed
=== (73) header comment ===
# `verify-landing` (`Usage: … [OPTIONS]`), `ip-drift-cron` and
# `go-compile-drift-verify` (both `Usage:` with the synopsis on the next
# row). The rule is deliberately ONE line: the row that carries the `usage:`
# label must name a flag (`\[--?[a-z]`), because a continuation row is not the
# synopsis a caller reads. All three tools were repaired to put their flags on
# that row — the same words `REGISTRY.md` already documents under **Usage** —
# and section C28 replants the defect: one tool with an `Options:` section and
# a flagless synopsis (reported), one with no `Options:` section at all (out
# of scope, so the subcommand shape cannot be swept in), each proved by its
# own plant assertion before the checker runs. The pair-level reader (77) also
# measured — 31 of 58 value-taking pairs named in their tool's synopsis — stays
# OUT of the tree: closing it would mean rewriting every tool's synopsis to
# enumerate every flag, which is a different, larger step than this one.
#
# Queue item (73), [0.4.140] — the VALUE half of a metavar, derived from the
# METAVAR the way (69) derived PORT from it, instead of from a flag name. (69)
# proved the shape — a port is an integer 1-65535 for every tool that has one,
# so `not-a-number` is invalid without asking any of them — and stopped there,
# because `--domain`/`--server`/`--ca-file` have no value that is wrong for
# every tool. This item widens that rule to the two classes where the TYPE
# still decides, and declares the rest out of scope rather than letting the
# probe look wider than it is. Measured 2026-09-30 over all 20 tools BEFORE a
# word was written, every value-taking pair classified by its own metavar:
# **18 enum** (`{json,human}`, `human|json`, `{dev,prod,both}` — the metavar IS
# the list of legal values, so anything outside it is provably not one), **14
# numeric** (`PCT`, `SECONDS`, `TIMEOUT`, `GO_TIMEOUT`, `WAIT`, `WARN_DAYS`,
# `EXPECT_USERS` — a quantity, so `not-a-number` is not one), **4 PORT** (kept
# by (69), same subject string), **18 `--format`** (kept by (65)) and **24
# other**. Of those 24, **21 have no type-invalid value at all** (`PATH`,
# `DIR`, `FILE`, `TEXT`, `SUBSTR`, `DOMAIN`, `SERVER`, `REPO`, `INBOX`,
# `BASE`, `LIBRARY`, `DEV_DB`, `DNS_SERVER`, `IDS`, `PEM`, `FMT`, `ENV` — any
# string is a possible value, so there is nothing to probe) and **3 do but the
# tool answers 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
# this run — and repo-lint's 3 is *pinned by its own suite*
# (`tests/test_repo_lint.sh` asserts `--sha deadbeef123` → 3, and `R16` asserts
# "refusal still exit 3"), so it is a documented contract rather than a hole,
# and repairing it here would be a second subject inside one entry. The three
# are therefore declared out of scope below and queued as (98), with their
# measured codes — the (75)/(76) lesson applied to *exclusion* instead of to
# visibility: an undeclared hole cannot show as a red anywhere, so the hole is
# declared, counted in `cl_other`, and printed in the SUMMARY.
#
# What the new probes add, counted rather than implied: **15 pairs that ran
# zero value probes before this entry** (1 enum — `source-sync-check --env`,
> build · mimo-v2.6-flash-free
$ cd /data/repo && sed -n 1,80p tools/queue-source-check
#!/usr/bin/env python3
"""queue-source-check - prove that the next-candidate work queue has ONE home.

Why this exists (CHANGELOG [0.4.67], closing [0.4.66]'s queue item 1):
    from [0.4.40] to [0.4.66] every CHANGELOG entry carried its own
    `### Queue (next candidates, not actioned)` section AND every
    `agent-logs/PROGRESS.md` run entry carried a copy of the same list as a
    `Next-candidate queued` bullet - two lists, hand-maintained, in two files.
    They diverged exactly as two hand-maintained copies do: PROGRESS's
    `[0.4.65]` queue listed the regression-baseline item that `[0.4.66]` then
    actioned, while CHANGELOG's `[0.4.65]` queue never listed it and instead
    carried a `--jobs` note the run had already rejected by design. The same
    version therefore carried two different queues, so an item could sit in one
    file and be re-proposed from the other - and nothing versioned checked it.

The decision this tool enforces (not asks about):
    `agent-logs/PROGRESS.md` is the SINGLE authoritative next-candidate queue.
    It is what the loop appends to and re-reads every run, and it was the copy
    that stayed correct. CHANGELOG's `### Queue` sections stop carrying items
    after `[0.4.66]`: from `[0.4.67]` on they are a one-line POINTER at
    agent-logs/PROGRESS.md, and the 111 item lines already written into the
    historical sections are FROZEN - they are history, not a live list, so a
    strike-through edits them in place and nothing is ever added or removed.
    No prose copy states HOW MANY historical sections there are: that number
    grows with every CHANGELOG entry, so a written-down copy is stale by
    construction (three copies said 25 while rules.queue_sections read 62 on
    the day [0.4.106] removed them - the live figure is that JSON key).

Availability (exit 3 "cannot verify", never a pass):
    A1  CHANGELOG.md exists and is readable
    A2  CHANGELOG.md owns at least one `### Queue` section
    A3  agent-logs/PROGRESS.md exists and is readable
The first A-rule that fails decides the exit code; later rules are not
evaluated, because a verdict about a file that was not read is a guess.

Rules (any failure = exit 1, and every one is reported, not just the first):
    R1  total `- ` item lines inside every `### Queue` section is exactly
        FROZEN_ITEMS (111) - the historical snapshot neither grew nor shrank
    R2  the NEWEST `## [x.y.z]` entry owns a `### Queue` section - the pointer
        was not dropped by a run that forgot it
    R3  that newest `### Queue` section contains NO list item of any kind
        (`- `, `* `, `+ `, `1.`) - no second list may be written there
    R4  that newest `### Queue` section names `agent-logs/PROGRESS.md`
    R5  agent-logs/PROGRESS.md carries at least one `Next-candidate queued`
        bullet - the authoritative list still exists
    R6  NO `## [x.y.z]` entry owns more than ONE `### Queue` section - one
        pointer per entry. A duplicate is invisible to R1-R5 by construction:
        it is pointer-only, so the freeze stays 111, and `newest_section` is
        the LAST one, so R2-R4 judge only the copy a run meant to leave. This
        is the defect [0.4.102] carried at EOF for one run - found by counting
        (61 raw headings against 60 read as sections), while this tool exited 0
        and the suite stayed green.
    R7  every `### Queue` heading is accounted for: count_queue_headings() is
        an INDEPENDENT census with its own fence walk, and raw == sections +
        fenced must hold. parse() deciding not to read a heading (a `### Queue`
        written above the first `## [x.y.z]` heading, or a future edit that
        stops appending) is a dropped heading, not a file without one. The two
        readers walk the same file separately precisely so they can disagree;
        one pass reporting both numbers could not.

What R5 COUNTS (it is reported as `progress_bullets`, and until [0.4.80] that
    number was `pg_text.count("Next-candidate queued")` - raw occurrences
    anywhere in the file: measured 56 against 49 real entry lines on the live
    tree when the fix was written, a number that moves whenever an entry
    merely QUOTES the phrase):
    a queue bullet is a line whose first non-space text is the phrase, with or
    without a list marker (`- **Next-candidate queued…**` and the six entries
    written as a bare `**Next-candidate queued…**` paragraph both count, once
    each), outside any fenced block. A line that mentions the phrase in the
    middle of a sentence - the R5 prose itself, a dashboard detail line, a
    health summary - is not an entry, and neither is a second occurrence on a
    line already counted.

R1 is deliberately an EQUALITY against a constant rather than a "greater than":
    a count that may only grow cannot see a history rewrite, and a count
    compared against nothing is the shape of arithmetic this repo has been
    removing since [0.4.65]. Changing FROZEN_ITEMS is a deliberate act - edit
    the constant and say so in the changelog entry that does it.

Fenced code blocks are NOT structure: an entry that quotes the shape of a
$ cd /data/repo && ./tools/queue-source-check --help 2>&1 | head -60; echo "=== git state ==="; git status -sb; git log --oneline origin/main -1; git rev-list --count origin/main..main; git rev-list --count main..origin/main
usage: queue-source-check [-h] [--format {human,json}] [--repo DIR]

Verify that the next-candidate work queue has exactly one home: agent-logs/PROGRESS.md carries the live list and CHANGELOG.md's newest '### Queue' section is a pointer at it, with the 111 historical item lines frozen.

options:
  -h, --help            show this help message and exit
  --format {human,json}
                        output format (default: human; json = one compact
                        object)
  --repo DIR            repo to check (default: GLADEX_REPO_DIR, else the repo
                        this script lives in)

exit codes:
  0 - the queue has exactly one home: CHANGELOG's newest ### Queue section is a
      pointer at agent-logs/PROGRESS.md, PROGRESS carries the live list, and the 111 historical
      item lines are unchanged
  1 - a violation: a second list exists, the pointer was dropped, the
      authoritative list is empty, one entry owns two `### Queue` sections, or
      a `### Queue` heading was not read as a section (see the violations[]
      array - every cause is reported, not just the first)
  2 - invalid arguments
  3 - cannot verify: CHANGELOG.md, agent-logs/PROGRESS.md or a ### Queue section is absent -
      NOT a pass, never reported as one
=== git state ===
## main...origin/main [ahead 1]
c097c11 dispatcher: shift 2026-09-30T13:30Z — documented repo-lint [0.4.140] citation blocker, Vera/Pip stale assignments
1
0

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)
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40662 Accepted
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40662 Closing
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40666 Accepted
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40666 Closing
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40672 Accepted
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40672 Closing
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40688 Accepted
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40688 Closing
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40690 Accepted
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40690 Closing
[Wed Sep 30 16:24:04 2026] 127.0.0.1:40700 Accepted
[Wed Sep 30 16:24:05 2026] 127.0.0.1:40700 Closing
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41284 Accepted
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41284 Closing
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41286 Accepted
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41286 Closing
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41290 Accepted
[Wed Sep 30 16:24:05 2026] 127.0.0.1:41290 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41974 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41974 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41978 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41978 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41988 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41988 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41994 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41994 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41996 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:41996 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:42004 Accepted
[Wed Sep 30 16:26:03 2026] 127.0.0.1:42004 Closing
[Wed Sep 30 16:26:03 2026] 127.0.0.1:42010 Accepted
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42010 Closing
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42024 Accepted
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42024 Closing
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42030 Accepted
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42030 Closing
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42042 Accepted
[Wed Sep 30 16:26:04 2026] 127.0.0.1:42042 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42112 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42112 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42116 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42116 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42120 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42120 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42128 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42128 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42132 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42132 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42146 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42146 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42154 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42154 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42160 Accepted
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42160 Closing
[Wed Sep 30 16:26:44 2026] 127.0.0.1:42172 Accepted
[Wed Sep 30 16:26:45 2026] 127.0.0.1:42172 Closing
[Wed Sep 30 16:26:45 2026] 127.0.0.1:60204 Accepted
[Wed Sep 30 16:26:45 2026] 127.0.0.1:60204 Closing
[Wed Sep 30 16:27:48 2026] 127.0.0.1:49308 Accepted

Generated 2026-09-30 14:27:48 UTC · Gladex.de