Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 2651 files, 133 MB |
| Latest run log | run-20261026-020948-2185.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
Tail — run-20261026-020948-2185.log (last 200 lines)
printf '#!/bin/sh\nprintf 200\n' > "$STUB/curl"
printf '#!/bin/sh\necho "notAfter=Dec 22 12:00:00 2026 GMT"\n' > "$STUB/openssl"
printf '#!/bin/sh\necho "ok github.com/gladex/gladex/cmd/gladex/commands 0.1s"\n' > "$STUB/go"
# Scenario dig: per-resolver A behaviour via STUB_A_{11,88}_{MODE,VALUE}
# (11 = 1.1.1.1, 88 = 8.8.8.8). MODE is one of
# ok print VALUE (default 77.90.15.49)
# wrong print VALUE (set to something else to model real drift)
# nxdomain print nothing, exit 0 — a genuine "no such record" answer
# transport print dig's diagnostics on STDOUT and exit 9, exactly as dig
# does when the resolver cannot be reached
cat > "$STUB/dig" <<'STUBDIG'
#!/bin/sh
server=1.1.1.1
rtype=""
for a in "$@"; do
case "$a" in
@*) server="${a#@}" ;;
+*) ;;
[A-Z]*) rtype="$a" ;;
esac
done
if [ "$server" = "8.8.8.8" ]; then sfx=88; else sfx=11; fi
case "$rtype" in
A)
eval "mode=\${STUB_A_${sfx}_MODE:-ok}"
eval "val=\${STUB_A_${sfx}_VALUE:-77.90.15.49}"
case "$mode" in
ok|wrong) printf '%s\n' "$val" ;;
nxdomain) : ;;
transport)
printf '%s\n' ";; communications error to $server#53: timed out"
printf '%s\n' ";; communications error to $server#53: timed out"
printf '%s\n' ";; communications error to $server#53: timed out"
printf '%s\n' ";; no servers could be reached"
exit 9 ;;
*) exit 1 ;;
esac ;;
MX) echo "10 gladex.de." ;;
SOA) echo "ns1.gladex.de. hostmaster.gladex.de. 2026092305 10800 3600 604800 3600" ;;
*) : ;;
esac
exit 0
STUBDIG
# The go-compile row shells out to repo-lint on every run. This suite pins the
# DNS rows, not that row, so the child is stubbed — otherwise every run here
# would lint a real tree (and compile it with the stub `go` on PATH, which is
# worse than not running it).
cat > "$STUB/repo-lint" <<'STUBRL'
#!/bin/sh
echo '{"tool":"repo-lint","requested_sha":"HEAD","sha_resolved":"1111111111111111111111111111111111111111","error":null,"go_compile":{"attempted":true,"go_mod":"app/src/go/go.mod","files":1,"ok":true,"reason":null,"summary":"1 module file(s) compile clean (0.0s)","duration_s":0.0},"ok":true,"exit_code":0}'
exit 0
STUBRL
export GLADEX_REPO_LINT_BIN="$STUB/repo-lint"
# promote-gates and cloud are not under test here: point them at absent paths
# so this suite neither probes the live /opt/startup trees nor the host's
# containers (a restarting container must not flip this suite's verdict).
export GLADEX_PROMOTE_BIN="$STUB/promote-dev-to-prod-not-under-test"
export GLADEX_CLOUD_DOCKER_BIN="$STUB/docker-not-under-test"
chmod +x "$STUB"/*
# ------------------------------------------------------------- helpers ------
# run_status/run_exit take four args: mode11 mode88 value11 value88
run_status() {
PATH="$STUB:$PATH" GLADEX_DEV_DB="$SANDBOX/no.db" GLADEX_PROD_DB="$SANDBOX/no.db" \
GLADEX_REPO_DIR="$REPO" \
STUB_A_11_MODE="$1" STUB_A_88_MODE="$2" \
STUB_A_11_VALUE="$3" STUB_A_88_VALUE="$4" \
"$TOOL" --format json 2>/dev/null || true
}
run_exit() {
PATH="$STUB:$PATH" GLADEX_DEV_DB="$SANDBOX/no.db" GLADEX_PROD_DB="$SANDBOX/no.db" \
GLADEX_REPO_DIR="$REPO" \
STUB_A_11_MODE="$1" STUB_A_88_MODE="$2" \
STUB_A_11_VALUE="$3" STUB_A_88_VALUE="$4" \
"$TOOL" --format json >/dev/null 2>&1
echo $?
}
# item_field <json> <check-name> <field>
item_field() {
printf '%s' "$1" \
| grep -o "{\"name\":\"$2\",\"status\":\"[^\"]*\",\"detail\":\"[^\"]*\"}" \
| head -1 | grep -o "\"$3\":\"[^\"]*\"" | head -1 | cut -d'"' -f4
}
# count_rows <json> <status> — how many DNS:* rows carry this status
count_rows() {
printf '%s' "$1" | grep -o "\"name\":\"DNS:[^\"]*\",\"status\":\"$2\"" | wc -l
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && S=$(mktemp -d /tmp/dbg.XXXX) && mkdir -p $S/bin && printf '#!/bin/sh\necho active\n' > $S/bin/systemctl && printf '#!/bin/sh\nprintf 200\n' > $S/bin/curl && printf '#!/bin/sh\necho "notAfter=Dec 22 12:00:00 2026 GMT"\n' > $S/bin/openssl && printf '#!/bin/sh\necho "ok x 0.1s"\n' > $S/bin/go && cat > $S/bin/dig <<'EOF'
#!/bin/sh
rtype=""; for a in "$@"; do case "$a" in +*|@*) ;; [A-Z]*) rtype="$a";; esac; done
case "$rtype" in A) echo 77.90.15.49;; MX) echo "10 gladex.de.";; SOA) echo "ns1.gladex.de. hostmaster.gladex.de. 2026092305 10800 3600 604800 3600";; esac
exit 0
EOF
cat > $S/bin/repo-lint <<'EOF'
#!/bin/sh
echo '{"tool":"repo-lint","requested_sha":"HEAD","sha_resolved":"1111111111111111111111111111111111111111","error":null,"go_compile":{"attempted":true,"go_mod":"app/src/go/go.mod","files":1,"ok":true,"reason":null,"summary":"1 module file(s) compile clean (0.0s)","duration_s":0.0},"ok":true,"exit_code":0}'
exit 0
EOF
chmod +x $S/bin/*; PATH="$S/bin:$PATH" GLADEX_DEV_DB=$S/no.db GLADEX_PROD_DB=$S/no.db GLADEX_REPO_DIR=$PWD GLADEX_REPO_LINT_BIN=$S/bin/repo-lint GLADEX_PROMOTE_BIN=$S/no-promote GLADEX_CLOUD_DOCKER_BIN=$S/no-docker ./tools/system-status --format json 2>/dev/null > $S/out.json; echo "rc=$?"; python3 -c "
import json,sys
d=json.load(open('$S/out.json'))
print('overall',d['overall'],'errors',d['errors'])
for c in d['checks']:
if c['status']!='ok': print(c['status'],c['name'],'::',c['detail'][:150])
"; echo "S=$S"
rc=1
overall error errors 1
warning failed-units :: cannot verify: unparseable systemctl line 'active'
warning log-truncation :: identity-dispatcher.md now=4185 was=18062@e0bc90d (-76%), identity-jonas.md now=6710 was=81499@8c15565 (-91%), identity-leon.md now=3148 was=83418@389
warning loop-outcomes :: cannot verify: sandboxed run (no GLADEX_RUNLOG_DIR, no system systemctl) - the live run-log directory was NOT read
warning cloud :: nextcloud 200, status.php unreadable; immich 200, ping unreadable; containers cannot verify (docker unavailable)
warning ip-drift :: cannot verify: sandboxed run (no GLADEX_IPDRIFT_LOG_DIR, no system systemctl) - the live log directory was NOT read
warning investor-messages :: unreadable dev=? prod=?
warning investor-duty :: cannot verify: inbox-status could not read its inputs (exit 3)
warning git-tree :: 4 uncommitted changes
warning red-watch :: red, failed=9, since 2026-10-13T12:17:20Z, 2m old; FAIL A3 tree clean AND in sync with origin/main (kind=is key=git) ;; FAIL A4 queue-source-check exi
error queue-source :: 1 violation(s): [0.4.375] is not named in agent-logs/PROGRESS.md - the newest CHANGELOG entry has no record in the authoritative file
warning promote-gates :: cannot verify: promote-dev-to-prod not found in the reported repo
warning baseline-stale :: baseline stale: 5 transcript(s) above their recorded value - run tools/coverage-guard --record (green only)
warning coverage-guard :: unexplained fall: 2 transcript(s) below their recorded value with a healthy unit (leon,sofia) - investigate with tools/coverage-guard (a real drop is
S=/tmp/dbg.Ht6D
> build · mimo-v2.6-flash-free
**Root cause of those reds identified — and it is process, not code:** the `queue-source` row reads `[0.4.375]` in CHANGELOG and requires it named in `PROGRESS.md`. Run 1005's ordering note applies: the entry must exist *before* the readings batch. Appending it now:
[0m$ [0mcd /data/repo && cat >> agent-logs/PROGRESS.md <<'EOF'
## Builder — run 1009 — small verifiable step: **the queue's own question answered and closed as a reporting defect — `loop-outcomes` counted 39 red runs and printed `(0 rate-limited)` because its needle was the 2026-10-11 wording while every one of those 39 logs carried the provider's CURRENT wording `Free usage limit reached` (measured 39/39 vs 0/39)**, so the rate-limited count now matches **either** refusal through one helper `lo_rate_limited` (one grep, two `-e` needles, both call sites), live proof `1 ok / 38 red, 1 in-flight` → `1 ok / 38 red, **38 rate-limited**, 1 in-flight`; suite `tests/test_system_status_failed_units.sh` **369 → 399 passed / 0 failed** with §16k (three shapes) and mutant **M10** reproducing the pre-fix `(0 rate-limited)`; the streak itself is **provider-side, not ours**, loop self-recovered at run 2184; CHANGELOG **`[0.4.375]`**; dev+prod **0.4.28**, spend **0.00**
- **STEP 0, paid first — owed nothing.** `SELECT COUNT(*) FROM messages WHERE direction='investor_to_agent' AND read=0` → **0 dev / 0 prod** (table `messages`, column `direction`); `./tools/inbox-status` → **rc 0, "OK - nothing owed (0 unread, 0 open entries all replied)"**, `INBOX.md` **80/80/0** (both brief entries — 2026-09-30 hiring, 2026-10-05 prod-version correction — already ~~HANDLED~~), last reply **dev 150 / prod 115**; **no `agent_to_investor` row written** (nothing owed; the apex incident's row is still unread and awaiting the investor, the mia/aylin repin still folded into dev 150 — **no fifth standalone row**). **Production is 0.4.28**: `./tools/version-check` → **OK dev=0.4.28 prod=0.4.28 (match)**, `./tools/healthcheck` → **dev + prod HEALTHY, HTTP 200, both `"version":"0.4.28"`**, `0.4.29` quoted nowhere; `./tools/budget-show` → 2026-10, allowance **5.00 / spent 0.00 / remaining 5.00**; `./tools/source-sync-check --env both` → **in sync, 48 file(s) across 2 env(s), rc 0** → **no promote exists to take**.
- **Why this step: it is the exact line run 1008 queued — *establish WHY the loop's own exit markers were non-zero for 39 consecutive runs before touching anything*.** Answer, counted log by log over run 1008's own range rather than sampled: **`run-*.log` ids 2145..2183 = 39 logs, 39/39 contain `Error: Free usage limit reached. Free models work in OpenCode (https://opencode.ai); subscribe to OpenCode Go to keep going: …`, 0/39 contain `Rate limit exceeded`, 39/39 end `exit=1`** — window **2026-10-25 18:23:17+01:00 → 2026-10-26 00:50:51+01:00** (one run per ~10 min, ~6 h 28 m), every header `model=opencode/mimo-v2.6-flash-free`, and the loop **recovered by itself**: run **2184** (01:01:03, same model) `exit=0`, this run **2185** in flight. So the streak was a **provider-side free-usage limit, not a defect in this repo**, and no `systemctl`/timer/loop file needed touching — which is what the queue demanded before any edit.
- **The defect this row then had, and the fix.** The row tallies rate-limited runs with `grep -qF "Rate limit exceeded"` — the wording of the 2026-10-11 incident it was built on — and the provider stopped using that wording: **0/39 of those logs match it**, so the detail printed `streak=39 … (**0 rate-limited**)`, right about the streak and silent about the one fact the next reader needs (the same class as the two `+short` fixes in `[0.4.373]`/`[0.4.374]`: a tool that reads the wrong signal and returns a confident number). Fix = **one helper, two needles**: `lo_rate_limited()` holds `grep -qF -e "Rate limit exceeded" -e "Free usage limit reached" -- "$1"` and **both** call sites (the completed-`exit=N` branch and the markerless branch) call it, so the list cannot drift between them and the suite's mutant can pin it at a single point (needle asserted to occur **exactly once**). Nothing else moved: streak arithmetic, thresholds, the in-flight exclusion, `ERRORS++`, the sanitiser and both renderers are byte-for-byte untouched — the needle changes the *cause count*, never a verdict. Help text and the row's own source comment now name both wordings with the 39/39 measurement behind them.
- **Live proof, same box, same window, both directions**: **pre-fix** (the `HEAD` blob carries zero occurrences of the new wording) → `loop-outcomes` **`ok`, `run 2184 exit=0, streak=0, window 40: 1 ok / 38 red, 1 in-flight`** with no rate-limited count at all; **post-fix** → **`ok, run 2184 exit=0, streak=0, window 40: 1 ok / 38 red, 38 rate-limited, 1 in-flight`**. `system-status --format json` still **`overall: error, errors: 3`** in both — unchanged rows: `failed-units` (7), `DNS:gladex.de` (the apex incident), `ip-drift` (23 h old `public_ip_unavailable`, the no-egress class).
- **A SECOND defect found while working this one: QUEUED, NOT FIXED, and the evidence is exact.** The row takes a log's **last line** as its verdict, so an **in-flight** run whose transcript happens to end with an `exit=N` line is counted as a COMPLETED run. Measured **2026-10-26 02:10** on the live box: this run's own first `system-status` reported **`streak=1 consecutive non-zero runs 2185 (0 rate-limited)`** — 2185 is *this* run, then in flight, and the `exit=1` sitting on its last line was **the transcript echoing other logs** (`cat run-20261025-182317-2145.log` prints that log's `exit=1`; the in-flight log also holds three such lines at 417/421/425 and an `exit=0` at 617, all echoes). Minutes later the identical read was **`run 2184 exit=0, streak=0, … 1 in-flight`** — i.e. a transient false streak that can reach monitor A12 and red-watch's ALERT. The fix belongs to the loop's own marker shape (a token a transcript cannot forge, e.g. an `agent-loop-exit=` prefix, with the legacy `exit=` still accepted for the **2,652** historical logs) and **`/data/agent-loop.sh` is not to be edited blind mid-run** — so it is queued below, not folded into this run's step.
- **Tests: `bash tests/test_system_status_failed_units.sh` → 399 passed / 0 failed (was 369).** `plant_run` grew a third refusal mode printing the provider's **verbatim current wording**, copied out of run 2145's own log, beside the legacy one; new **§16k** pins it in three shapes — five free-usage reds → `error` + `5 rate-limited` **plus a dedicated assertion that the detail is never `(0 rate-limited)` when every red carried a refusal**; the same five with a trailing `exit=0` → the `ok` line still names `5 red, 5 rate-limited`; a mixed window of both wordings → `5 rate-limited` (the needle is a list, not a string swap). **Mutant M10** collapses the helper to the legacy needle alone (count = 1) and is caught four ways: the real tool counts 5 on those same bytes, the mutant reproduces the pre-fix `(0 rate-limited)`, **both still read `error`** (verdict unmoved — surgical about what it does *not* change), and the legacy fixture still counts 5 through the mutant (the 2026-10-11 path stays green). M8/M9 re-verified.
- **PROCESS ORDERING, RE-MEASURED THIS RUN (run 1005's note is a correctness rule, not a formality).** The readings batch was run **before** this entry existed and came back red in three suites — `test_system_status_dns` **47/2** ("healthy run exits 0 (got 1)"), `test_system_status_go_tests` **91/1** ("live: tool exits 0 (got 1)"), `test_system_status_investor_duty` **42/8** — each reproduced sequentially, and **not** caused by the tool edit: the tool diff is exactly help-text + comment + helper + two call sites, and the `HEAD` blob run against the same worktree gave dns **49/0** and go_tests **92/0**. The one extra error was read directly out of a hand-built "clean baseline": **`error queue-source :: 1 violation(s): [0.4.375] is not named in agent-logs/PROGRESS.md`** — a CHANGELOG heading with no record in the authoritative file, i.e. **this entry had not been appended yet**. After the append those suites are re-run and recorded in the close-correction bullet below.
- **Registry and changelog moved with the code.** `tools/REGISTRY.md` `## system-status` gained a **`- Loop outcomes:`** bullet (the row was documented nowhere in the registry): last-line verdict rule, the in-flight exclusion, the three verdicts and their hooks, and the **two-sided needle with the 39/39 vs 0/39 measurement and its `[0.4.375]` citation**, plus the suite figure **399 assertions / 0 failed measured 2026-10-26, 369 before §16k**. **CHANGELOG `[0.4.375]`** appended at the bottom (tool behaviour + assertions moved → a heading is owed), so queue-source R8's newest is **`[0.4.375]`** and **this entry names it**.
- **Scope and safety, one line each:** the commit carries **exactly five paths — `tools/system-status`, `tests/test_system_status_failed_units.sh`, `tools/REGISTRY.md`, `CHANGELOG.md` — plus `agent-logs/PROGRESS.md` (this entry)**, staged by **explicit pathspec** read from `git status --porcelain` immediately before staging, **never `git add -A`** on this shared index · **no `app/`, `src/`, `dev/`, `prod/` file touched** → **no promote needed and none was taken**, dev and prod untouched at **0.4.28**, and a CHANGELOG heading **IS** added (`[0.4.375]`) exactly as queue-source R8's pointer exists for · **`/data/agent-loop.sh` NOT edited** (the queued marker fix belongs to the loop, mid-run) · **no `systemctl` change of any kind** — the 7 failed units were read, never touched · **no live messages-DB write** (STEP 0 owed nothing) · **the DNS path stayed read-only** (`tools/pdns-api.py` never invoked, the zone untouched, the apex incident stays with the investor) · no `rm`, `hiring/queue/` read-only (**2 proposals `status=proposed`**), no mail, no paid API, no API key configured, **never `git stash`**. Spend **0.00**, free `*-free` models only.
- **Queue — next small step (read this first):** **STEP 0 first every run** (today **0 unread dev / 0 prod**, `INBOX.md` **80/80/0**; table `messages`, column `direction`; last reply **dev 150 / prod 115**). **NEXT RUN'S OWN STEP, new this run: fix the in-flight echo defect in `loop-outcomes`** — a run log whose **last line** merely *looks like* `exit=<n>` (a transcript that `cat`s another log, as this run did at 02:10) is counted as a completed run and produced a transient false `streak=1 … 2185`; make the loop write a marker a transcript cannot forge (e.g. `agent-loop-exit=<n>` as the last line of `/data/agent-loop.sh`'s run, **accepted alongside the legacy `exit=`** so all **2,652** historical logs still read), keep the in-flight/stale rules exactly as they are, and pin it in `tests/test_system_status_failed_units.sh` §16 with a fixture whose transcript **ends in an echoed `exit=1`** — one tool + the loop script, one suite, **no promote**; read the loop's own log-writing code and the running instance's semantics before touching `agent-loop.sh`. **INCIDENT, OPEN and still the top non-gated item: the apex repoint awaits the investor's answer to dev 150 / prod 115** — until they answer, **do not touch the zone and do not re-derive the evidence** (`DOMAIN.md` `## INCIDENT 2026-10-24`); re-read the row's two branches: *(a)* deliberate → correct **REPORT §11 and §7**'s public URLs to `https://dev.gladex.de/…` and record the new owner of apex+mail; *(b)* not deliberate → `@ / www / mail → 77.90.15.49` (TTL 3600) **at the provider, by the investor/operator**, then both authoritative NS must answer `77.90.15.49` and port 25 must greet again. **The `dns-verify` rcode fix (`[0.4.373]`), the `ip-drift-check` rcode fix (`[0.4.374]`) and this run's `loop-outcomes` needle fix (`[0.4.375]`) are DONE — do not re-queue any of them.** **Also still open, unchanged:** the **mia/aylin repin** (folded into dev 150 — do **not** send a fifth standalone row; edit only the two `MODEL=` lines in `/usr/local/sbin/identity-run.sh` when an answer arrives, watching `failed-units-classify` go `class_a=2 → 0`); the **coverage** human act (`--record` green-only, human; `fall: 1`, `baseline-stale 5`); the **log-truncation** standing WARN stays unreopened; run 952's **(i)** only on a measured future-dated marker and **(iii)** only on a measured A12 misread; **(93)**/**(97)(a)** first if the investor answers `hiring/queue/*.json` (**2 proposals**); **(2'')**, **§14 renewal** cadence, **LAN-only A/B/C**, **SOA MNAME**, **Pip's mail-policy D1–D4** and the **`77.90.15.49` PTR** stay NEEDS-INVESTOR; **`jsonl-rotate` built but unscheduled**; the **git-author fix** operator-owned / investor-nod; **V7b/V10b/V13b** in the figure reader remain the concurrent-repin and no-DNS-egress reds. The figure-reader fallback stays **EXHAUSTED** (17/18 read), the `- Live:` line stays **125** (no suite added — this run extended an existing one), and **V14b**, the §14 prune ask, the Class-B follow-up and §10 #6's dated re-read stay **discharged**.
- **Close-state:** this entry is appended **before** the commit that carries it (CLOSE PROTOCOL rule 1) and is never `git checkout --`-ed, staged-only or parked in `/tmp` (rules 2–3); the stop-state check is `git status --porcelain` **not listing `agent-logs/PROGRESS.md`** after the commit. This run makes **one content commit** (five paths, explicit pathspec) and pushes; **if** a second commit follows (post-push re-reads), this entry's close-correction bullet is **re-appended before commit #2** (rule 2). No app version moved — the served version stays **`0.4.28`** (quoted nowhere as 0.4.29). Spend **0.00**, free `*-free` models only.
EOF
echo appended; ./tools/queue-source-check; echo "rc=$?"
appended
queue-source-check: OK - one queue: [0.4.375] pointer-only, 111 item line(s) frozen across 329 section(s), 203 PROGRESS bullet(s), 2 path token(s)
rc=0
> build · mimo-v2.6-flash-free
Entry is in and R8 clears on `[0.4.375]`. Now the readings batch (correctly ordered, post-append, pre-commit):
[0m$ [0mcd /data/repo && for s in test_system_status_dns.sh test_system_status_go_tests.sh test_system_status_investor_duty.sh; do echo "== $s"; bash tests/$s 2>&1 | grep -E "FAIL|Results"; done
== test_system_status_dns.sh
=== Results: 49 passed, 0 failed ===
== test_system_status_go_tests.sh
=== 2. go exits 1 with a FAIL line -> error 'failing: <pkg>', exit 1 ===
=== 6c. rc 1 with NO package FAIL line -> go never ran our tests ===
ok - exit 1 without a FAIL line -> warning, not 'failing'
ok - no FAIL line means no claim about our tests
ok - ground truth: `go test ./...` FAILS on this tree (rc 1)
ok - 11b: --help ties rc 1 to a package FAIL line
ok - 11b: the source comment ties rc 1 to a package FAIL line
ok - 11b: this suite's header ties rc 1 to a package FAIL line
ok - 11b NC3: dropping the package-FAIL condition from the header is caught
=== Results: 92 passed, 0 failed, 0 skipped ===
== test_system_status_investor_duty.sh
ok - human renderer shows [FAIL] for investor-duty
=== Results: 50 passed, 0 failed ===
[0m$ [0mcd /data/repo && for s in test_system_status_mx_soa.sh test_system_status_tls_expiry.sh; do echo "== $s"; bash tests/$s 2>&1 | grep -E "FAIL|Results"; done; echo "== transport"; bash tests/test_system_status_mx_soa_transport.sh 2>&1 | grep -E "FAIL|Results"
== test_system_status_mx_soa.sh
=== Results: 31 passed, 0 failed ===
== test_system_status_tls_expiry.sh
=== Results: 60 passed, 0 failed ===
== transport
=== Results: 76 passed, 0 failed ===
[0m$ [0mcd /data/repo && bash tests/test_registry_figure_readers.sh 2>&1 | tail -6; echo "== coverage"; bash tests/test_registry_coverage.sh 2>&1 | tail -2; echo "== repo-lint"; ./tools/repo-lint; echo "rc=$?"
PASS: V18b repo-lint: the registry's figure equals what tests/test_repo_lint.sh produced (child rc=0)
PASS: V9 accounting, last assertion in the file: V1 + sixteen figure/child pairs = 33 assertions from section V
V: 16 child suites run, 16 sections covered
=== Results: 41 passed, 3 failed ===
== coverage
=== Results: 497 passed, 0 failed ===
== repo-lint
repo-lint repo=/data/repo sha=82ae58a523 (HEAD) files=502 linted=236 skipped=266
linted: bash=79 go=45 json=13 php=68 python=31
skipped: binary=2 empty=6 no_shebang=4 unsupported_ext=254
go-compile: 47 module file(s) compile clean (1.908s)
changelog-version: 379 changelog version heading(s), 379 unique, 10343 citation(s) checked, 0 missing, 12994 bare token(s) counted
elf-allowlist: 2 tracked ELF file(s), all shipped
result: all 236 linted file(s) parse clean (exit 0)
rc=0
> 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)
[Mon Oct 26 03:01:42 2026] 127.0.0.1:46414 Accepted [Mon Oct 26 03:01:42 2026] 127.0.0.1:46414 Closing [Mon Oct 26 03:01:42 2026] 127.0.0.1:46422 Accepted [Mon Oct 26 03:01:42 2026] 127.0.0.1:46422 Closing [Mon Oct 26 03:07:28 2026] 127.0.0.1:48296 Accepted [Mon Oct 26 03:07:28 2026] 127.0.0.1:48296 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37030 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37030 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37046 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37046 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37054 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37054 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37066 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37066 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37070 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37070 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37080 Accepted [Mon Oct 26 03:15:29 2026] 127.0.0.1:37080 Closing [Mon Oct 26 03:15:29 2026] 127.0.0.1:37094 Accepted [Mon Oct 26 03:15:30 2026] 127.0.0.1:37094 Closing [Mon Oct 26 03:15:30 2026] 127.0.0.1:37106 Accepted [Mon Oct 26 03:15:30 2026] 127.0.0.1:37106 Closing [Mon Oct 26 03:15:30 2026] 127.0.0.1:37110 Accepted [Mon Oct 26 03:15:30 2026] 127.0.0.1:37110 Closing [Mon Oct 26 03:15:30 2026] 127.0.0.1:37124 Accepted [Mon Oct 26 03:15:30 2026] 127.0.0.1:37124 Closing [Mon Oct 26 03:16:35 2026] 127.0.0.1:39384 Accepted [Mon Oct 26 03:16:35 2026] 127.0.0.1:39384 Closed without sending a request; it was probably just an unused speculative preconnection [Mon Oct 26 03:16:35 2026] 127.0.0.1:39384 Closing [Mon Oct 26 03:16:37 2026] 127.0.0.1:39386 Accepted [Mon Oct 26 03:16:37 2026] 127.0.0.1:39386 Closed without sending a request; it was probably just an unused speculative preconnection [Mon Oct 26 03:16:37 2026] 127.0.0.1:39386 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34604 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34604 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34620 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34620 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34636 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34636 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34644 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34644 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34648 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34648 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34654 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34654 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34664 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34664 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34680 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34680 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34684 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34684 Closing [Mon Oct 26 03:16:47 2026] 127.0.0.1:34686 Accepted [Mon Oct 26 03:16:47 2026] 127.0.0.1:34686 Closing [Mon Oct 26 03:17:44 2026] 127.0.0.1:53110 Accepted [Mon Oct 26 03:17:44 2026] 127.0.0.1:53110 Closed without sending a request; it was probably just an unused speculative preconnection [Mon Oct 26 03:17:44 2026] 127.0.0.1:53110 Closing [Mon Oct 26 03:17:45 2026] 127.0.0.1:55916 Accepted [Mon Oct 26 03:17:45 2026] 127.0.0.1:55916 Closed without sending a request; it was probably just an unused speculative preconnection [Mon Oct 26 03:17:45 2026] 127.0.0.1:55916 Closing [Mon Oct 26 03:25:04 2026] 127.0.0.1:43728 Accepted
Other app logs: downloads.log
Generated 2026-10-26 02:25:04 UTC · Gladex.de