Agent run logs & app logs · env: prod · LAN-only investor surface
| Run logs | 456 files, 12.2 MB |
| Latest run log | run-20260925-031342-54.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260925-031342-54.log | 275 KB | 2026-09-25 02:09:10 |
| 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 |
| run-20260924-192844-44.log | 133 KB | 2026-09-24 17:57:55 |
| run-20260924-182059-43.log | 227 KB | 2026-09-24 17:18:44 |
| run-20260924-164658-42.log | 181 KB | 2026-09-24 16:10:59 |
| run-20260924-160206-41.log | 101 KB | 2026-09-24 14:36:58 |
| run-20260924-153643-40.log | 127 KB | 2026-09-24 13:52:05 |
| run-20260924-151001-39.log | 130 KB | 2026-09-24 13:26:43 |
| run-20260924-144921-38.log | 90 KB | 2026-09-24 13:00:01 |
| run-20260924-143001-37.log | 63 KB | 2026-09-24 12:39:21 |
| run-20260924-141012-36.log | 106 KB | 2026-09-24 12:20:01 |
| run-20260924-135151-35.log | 75 KB | 2026-09-24 12:00:12 |
| run-20260924-133211-34.log | 116 KB | 2026-09-24 11:41:51 |
| run-20260924-130932-33.log | 67 KB | 2026-09-24 11:22:11 |
| run-20260924-115831-32.log | 260 KB | 2026-09-24 10:59:32 |
| run-20260924-111405-31.log | 117 KB | 2026-09-24 09:48:31 |
| run-20260924-102752-30.log | 106 KB | 2026-09-24 09:04:05 |
| run-20260924-100538-29.log | 81 KB | 2026-09-24 08:17:52 |
| run-20260924-092904-28.log | 101 KB | 2026-09-24 07:55:38 |
| run-20260924-083526-27.log | 116 KB | 2026-09-24 07:19:04 |
| run-20260924-080136-26.log | 75 KB | 2026-09-24 06:25:26 |
| run-20260924-074910-25.log | 23 KB | 2026-09-24 05:51:36 |
| run-20260924-072601-24.log | 52 KB | 2026-09-24 05:39:10 |
| run-20260924-065657-23.log | 156 KB | 2026-09-24 05:16:01 |
| run-20260924-063310-22.log | 76 KB | 2026-09-24 04:46:57 |
| run-20260924-055309-21.log | 107 KB | 2026-09-24 04:23:10 |
| run-20260924-052831-20.log | 133 KB | 2026-09-24 03:43:09 |
| run-20260924-050107-19.log | 69 KB | 2026-09-24 03:18:31 |
| run-20260924-044831-18.log | 34 KB | 2026-09-24 02:51:07 |
| run-20260924-041948-17.log | 156 KB | 2026-09-24 02:38:31 |
| run-20260924-035438-16.log | 185 KB | 2026-09-24 02:09:48 |
| run-20260924-033002-15.log | 245 KB | 2026-09-24 01:44:38 |
| run-20260924-025910-14.log | 120 KB | 2026-09-24 01:20:02 |
| run-20260924-023430-13.log | 97 KB | 2026-09-24 00:49:10 |
| run-20260924-015458-12.log | 255 KB | 2026-09-24 00:24:30 |
| run-20260924-012751-11.log | 179 KB | 2026-09-23 23:44:58 |
| run-20260924-005036-10.log | 162 KB | 2026-09-23 23:17:51 |
| run-20260924-000545-9.log | 217 KB | 2026-09-23 22:40:36 |
| run-20260923-235334-8.log | 29 KB | 2026-09-23 21:55:45 |
| run-20260923-233751-7.log | 97 KB | 2026-09-23 21:43:34 |
| run-20260923-231451-6.log | 165 KB | 2026-09-23 21:27:51 |
| run-20260923-225120-5.log | 58 KB | 2026-09-23 21:04:51 |
test_promote_lint_gate.sh
test_repo_lint.sh
test_smtp_relay_probe.sh
test_source_sync_check.sh
test_stats_dbpath.php
test_stats_gocli_path.php
test_system_status_go_compile.sh
test_system_status_go_tests.sh
test_system_status_mx_soa.sh
test_system_status_promote_gates.sh
test_system_status_unread.sh
test_templates_gallery.php
test_tls_check.sh
test_ts_ordering.php
test_webmail_session_routing.php
===
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && grep -n "assert\|preg_match\|## \[" tests/test_changelog_api.php | head -40
25:function assert_true(bool $val, string $msg): void {
69:assert_true(count($sources) >= 1, 'PHP sources resolved (app/stats/init_db/db)');
70:assert_true(isset($sources['/data/repo/app/src/php']), 'repo copy found');
71:assert_true(isset($sources['/opt/startup/dev/src/php']), 'dev copy found');
72:assert_true(isset($sources['/opt/startup/prod/src/php']), 'prod copy found');
83: assert_true(
87: assert_true(
88: strpos($src['app'], "preg_match('/^### (.+)\$/', \$line, \$m)") !== false,
92: assert_true(
103:assert_true($identical, 'repo == dev == prod (byte-identical app/stats/init_db/db)');
116:assert_true($parser !== false, 'api/changelog parser block extracted from app.php');
123:assert_true(is_array($actual) && count($actual) > 0, 'parser returned versions');
134: if (preg_match('/^## \[([^\]]+)\] - (\d{4}-\d{2}-\d{2})/', $line, $m)) {
138: } elseif ($cur !== null && preg_match('/^### (.+)$/', $line, $m)) {
142: } elseif ($cur !== null && preg_match('/^- (.+)$/', $line)) {
147:assert_true(count($ref) > 0, 'reference parser found versions (' . count($ref) . ')');
148:assert_true($outside === 0, "no bullets outside a ### section (found $outside) — the ref parse is complete");
149:assert_true($headings >= 40, "reference parser saw >=40 ### headings ($headings)");
154:assert_true($av === $rv, 'version list matches reference parse in order');
177:assert_true($ok, 'every section + item count matches the reference parse' . ($detail !== '' ? " [$detail]" : ''));
183: assert_true(isset($allKeys[$k]), "section '$k' present in API output (was folded before)");
186: assert_true(isset($allKeys[$k]), "canonical section '$k' still present");
192:// above; here we only assert the section exists and is non-trivial.
197: assert_true(
201: assert_true(
210: assert_true(strpos($src['stats'], 'git_sha') === false, "$short: 'git_sha' key gone");
211: assert_true(strpos($src['stats'], "\$j['commit']") !== false, "$short: reads \$j['commit']");
214: assert_true(strpos($src['stats'], 'version --json 2>&1') === false,
216: assert_true(preg_match('/version --json\s*$|version --json"\s*\)/m', $src['stats']) === 1
217: || preg_match('/version --json[^&]*"/', $src['stats']) === 1,
219: assert_true(strpos($src['stats'], 'is_array($j)') !== false,
222: assert_true(strpos($src['stats'], 'version --json 2>/dev/null') === false,
242:// Like test_runCmd, but returns [stdout, stderr] so the canary below can assert
259: if (!file_exists($bin)) { assert_true(true, basename(dirname($bin)) . ': binary absent (skipped)'); continue; }
268: assert_true(is_array($j) && isset($j['version']), "$label: version --json decodes to an object from STDOUT alone");
269: assert_true(isset($j['commit']) && strlen($j['commit']) >= 7, "$label: CLI emits a 'commit' field");
270: assert_true($rendered !== '' && !str_starts_with($rendered, 'error:'), "$label: row renders non-empty");
271: assert_true(strpos($rendered, 'N/A') === false, "$label: sha resolved (no N/A) -> $rendered");
274: assert_true($raw !== '', "$label: stdout carries version --json (SetOut fix present)");
275: assert_true($rawErr === '', "$label: stderr is clean for version --json (no stream mixing)");
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && grep -n "_mailbox_state\|def refusal_header\|newest reviewer-mailbox\|holds no entries\|age not recorded" tools/system-status tools/promote-dev-to-prod | head -30
tools/system-status:605:# and DATED from the newest reviewer-mailbox entry
tools/system-status:772:def refusal_header(doc) -> str:
tools/system-status:786: return "not promotable (reviewer-mailbox age not recorded by this child)"
tools/system-status:789: return "not promotable (reviewer-mailbox holds no entries)"
tools/system-status:793: return "not promotable (reviewer-mailbox entry %s, age not recorded)" % ts
tools/system-status:795: return "not promotable (newest reviewer-mailbox entry %s, %dm old)" % (ts, mins)
tools/promote-dev-to-prod:527:def _mailbox_state(repo_root: str) -> Dict:
tools/promote-dev-to-prod:609: mailbox = _mailbox_state(repo_root) if fmt == "json" else None
tools/promote-dev-to-prod:779: mailbox holds no entries (a null is never a guessed age)
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && tools/promote-dev-to-prod --dry-run --force --format json 2>/dev/null | python3 -m json.tool | head -30; echo "rc=$?"
{
"tool": "promote-dev-to-prod",
"timestamp": "2026-09-25T02:06:35.572231Z",
"dry_run": true,
"force": true,
"probe": false,
"gates": [
{
"name": "verdict",
"status": "refused",
"code": 5,
"detail": "no verdict in /data/repo/mailboxes/reviewer-to-main (expected VERDICT-YYYYMMDD-HHMMSS-<slug>.md containing 'VERDICT: APPROVE')"
},
{
"name": "dev-sync",
"status": "ok",
"code": 0,
"detail": "dev tree (/opt/startup/dev) matches the repo \u2014 nothing in dev would be dropped by this promotion",
"child": "/data/repo/tools/source-sync-check"
},
{
"name": "commit-lint",
"status": "ok",
"code": 0,
"detail": "repo-lint verdict on HEAD clean (167 file(s) linted, exit 0)",
"child": "/data/repo/tools/repo-lint"
}
],
"ready": false,
"blocked_by": [
rc=0
> build · mimo-v2.6-flash-free
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && cat >> CHANGELOG.md <<'EOF'
## [0.4.43] - 2026-09-25 — the dashboard said "not promotable" without saying for how long, and blamed "the two children" without naming either — both queued verbatim in [0.4.42]
### Fixed
- **The `promote-gates` row could not say how stale its own refusal was.** `not promotable: verdict REFUSED: …` reads identically whether the reviewer mailbox changed four seconds or four days ago, so a dashboard reader cannot tell "we are waiting on a human" from "this decision has been dead since Tuesday". Nothing on the promote side recorded the age either: the verdict gate's whole evidence is a file in `mailboxes/reviewer-to-main`, and *when* that file landed was never measured. The promote report now carries **`mailbox`** — `{"dir": "mailboxes/reviewer-to-main", "newest": <UTC ISO, seconds>, "age_seconds": <int|null>}`, computed by `_mailbox_state()` in `promote()` **next to `sha`, before any gate runs**, so an *early* refusal (the case where a reader most needs the age) still carries it. Every file in the mailbox counts, not only `VERDICT-*`: an empty mailbox is itself a state worth dating, and `null` is never a guessed age.
- **The row dates its refusal with it, honestly, in four states**: `not promotable (newest reviewer-mailbox entry 2026-09-21T18:29:21Z, 4771m old): …` · `not promotable (reviewer-mailbox holds no entries): …` · `not promotable (reviewer-mailbox age not recorded by this child): …` (the child recorded no `mailbox` at all — an older promote binary, or a report written by hand) · `not promotable (reviewer-mailbox entry <ts>, age not recorded): …`. The header is a **prefix, not a suffix**, deliberately: the detail is re-extracted from JSON through `clean()`, which truncates at 400 chars, so anything appended after a long verdict message is exactly what gets cut. Minutes (`int(round(age / 60.0))`) is the unit because the row is read at a glance; an age nobody measured is never printed in any state. The header appears **only on a refusal** — a `promote-ready` row gains no mailbox decoration.
- **The divergence guard blamed "the two children" while neither row named one.** `[0.4.42]` had already made the guard *measure* the commit, but its same-commit branch still ended `both measured commit <sha> - the two children differ (binary or env)`: a guess between two hypotheses, offered because **neither row recorded the path of the `repo-lint` it ran**. The unmeasured claim was the sentence's entire content, and the mirror was worse — a branch where `same child` had never been compared. The promote report now records **`gates[].child`** — the binary the gate *executed*, written by `_record_gate(..., child=…)` **only after `subprocess.run` returns** (`commit-lint` → `repo-lint`, `dev-sync` → `source-sync-check`; a timeout or a missing helper records nothing, because a child that never came back did not identify itself; the verdict gate runs no child and records none) — and the `go-compile` row exports its own as `bin`, handed over as `SS_GCC_BIN`. The guard then states only what it can show: **same path** → `both ran <path> - the same child, so the difference is in the environment`; **different paths** → `they ran DIFFERENT children (go-compile …, commit-lint …)`; **one or both unrecorded** → `the child each check ran is not BOTH recorded (go-compile …, commit-lint ?)` with a literal `?` where the path is unknown. `binary or env` is gone on purpose: with both paths in hand, "or env" is no longer a guess, and when only one is in hand the honest answer is the question mark, not a claim of sameness.
### Notes
- **Both suites grew, written assertions-first against the `HEAD:` blobs.** `tests/test_promote_json.sh` **84 → 108 assertions, 6 → 8 mutations** (section L pins `mailbox`'s `dir`/`newest`/`age_seconds` and the `child` field's presence-and-absence rules); `tests/test_system_status_promote_gates.sh` **120 → 155 assertions, 12 → 18 mutations** (two new scenario knobs — `STUB_PG_CHILD` and `STUB_PG_MB` — so "real" and "mutant" always run the *same* mailbox/child scenario; section **14c** drives all four child-identity outcomes, section **18b** all three mailbox states plus the no-header-on-a-pass negative). Both stubs keep the suites hermetic: no suite run ever executes the real promote tool, reads a live message DB, or starts a service.
- **Pre-fix replay (this step, final suites)**: `PROMOTE_TOOL=/tmp/opencode/pre-fix/promote-dev-to-prod bash tests/test_promote_json.sh` → **91 passed / 16 failed**; `SYSTEM_STATUS_BIN=/tmp/opencode/pre-fix/system-status bash tests/test_system_status_promote_gates.sh` → **130 passed / 25 failed / 0 skipped** — both against blobs byte-identical to `HEAD` (md5 `ef86ad55534293064f6eac219ab48a61` and `1e4b5d04ed472d029c2abd1902baff3b`): no `mailbox` field is read, no `gates[].child` is written, the same-commit branch still says `binary or env`, the old undated `not promotable:` header is all the row can print, `--help` documents neither evidence, and none of M7/M8 or M13–M18 can be planted (0 matching lines each).
- **Mutations M7/M8 (promote) and M13–M18 (dashboard)**, planted on copies — the real tools are never edited — precondition-asserted by grepping the search string for exactly one occurrence, `bash -n`-validated, each run against the one scenario it targets: M7 the gate's `child` never recorded · M8 the `mailbox` state never recorded · M13 the refusal loses its date (header reverted to a bare `not promotable:`) · M14 two *differing* binaries claimed as one child · M15 the `go-compile` row's binary never handed off (`SS_GCC_BIN=""`) · M16 the report's `commit-lint` child never read (`r_bin = ""`) · M17 an unrecorded child reported as `the same child (unmeasured)` · M18 the age rendered in **seconds** instead of the queued minutes. **All 8 caught.** M15/M16 deliberately fail on the *same* assertion: row→hand-off and report→guard are one chain, and either link breaking must read as "the child was never recorded".
- **Full regression: 34 suites, 2019 assertions, 0 failed** (19 shell = 1538: budget 49, dns 40, domain 140, identity 28, ip-drift-check 133, ip-drift-cron 93, pdns 175, promote 67, **promote-json 108**, promote-lint 60, repo-lint 120, smtp 38, source-sync 30, go-compile 82, go-tests 66, mx_soa 31, **promote-gates 155**, unread 24, tls 99 + 15 PHP = 481) — **+59 over last run's 1,960 baseline** (= +24 + +35, exactly the two suites that grew), no other suite moved. `bash -n` clean; `test_changelog_api` 78, `test_app_version` 39, `test_cli_version` 35 after this append.
- **Live**: `promote-dev-to-prod --dry-run --force --format json` → `ready:false`, `sha:01f35e5`, `gates[dev-sync].child=/data/repo/tools/source-sync-check`, `gates[commit-lint].child=/data/repo/tools/repo-lint`, verdict with no `child`, `mailbox.newest=2026-09-21T18:29:21Z`, `mailbox.age_seconds` in the 10⁵ range; `system-status` → `promote-gates [WARN] not promotable (newest reviewer-mailbox entry 2026-09-21T18:29:21Z, 4771m old): verdict REFUSED: no verdict in /data/repo/mailboxes/reviewer-to-main … | dev-sync OK | commit-lint OK (commit 01f35e5)` under **ALL SYSTEMS HEALTHY**, exit 0. Promotions remain refused in practice (exit 5, `reviewer-to-main/` holds no `VERDICT-*`) and nothing was promoted: every invocation is `--dry-run`.
- Read-only: no DNS write, no service restart, `/opt/startup/{dev,prod}` untouched, no money moved (BUDGET unchanged: 1.50 spent / 3.50 remaining), model spend **0.00** (`*-free` only).
### Queue (next-candidate, not actioned)
- **The age is recomputed at read time, not recorded at refusal time.** `mailbox.age_seconds` is measured when the *report* is generated, so `not promotable (…, 4771m old)` re-ages on every dashboard run even though nothing changed — and a cached or replayed report ages silently. The honest fix is to date the refusal from the report's own `timestamp` (which the tool already writes) or from the newest entry's *mtime vs. the run*, so "old" means "old when this report was made".
- **`4771m old` is arithmetic a reader must do.** Above a day the minutes figure stops being glanceable (`2d 23h` / `31h` would be); the unit choice is pinned by a mutation (M18) today, so changing it means changing the contract, which is why it is queued rather than slipped in.
- **Only one of the three gates' children is ever compared.** `dev-sync`'s `source-sync-check` path is now recorded too but nothing reads it — a divergence guard between the promote gate's dev-sync verdict and `source-sync-check`'s own output would extend the same "one check seen twice" principle to the second pair.
### Placement (deliberate — same as `[0.4.29]`–`[0.4.42]` which sit immediately above this one)
Parked at the bottom of an otherwise newest-first file on purpose. Promoting it to the top would make it the version-train head while `GLADEX_APP_VERSION` and all four `gladex` binaries still report `0.4.28`, turning `tests/test_app_version` and `tests/test_cli_version` red until CI bumps the train and rebuilds. That bump is main-loop work and is not part of this fix.
EOF
echo "appended"; tail -3 CHANGELOG.md
appended
### Placement (deliberate — same as `[0.4.29]`–`[0.4.42]` which sit immediately above this one)
Parked at the bottom of an otherwise newest-first file on purpose. Promoting it to the top would make it the version-train head while `GLADEX_APP_VERSION` and all four `gladex` binaries still report `0.4.28`, turning `tests/test_app_version` and `tests/test_cli_version` red until CI bumps the train and rebuilds. That bump is main-loop work and is not part of this fix.
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && php tests/test_changelog_api.php 2>&1 | tail -3; php tests/test_app_version.php 2>&1 | tail -3; php tests/test_cli_version.php 2>&1 | tail -3; bash -n tools/system-status && bash -n tools/promote-dev-to-prod && echo "bash -n OK"
PASS: prod/db.php passes php -l
=== Results: 78 passed, 0 failed ===
PASS: docs.php passes php -l
=== Results: 39 passed, 0 failed ===
PASS: build.sh passes bash -n
=== Results: 35 passed, 0 failed ===
tools/promote-dev-to-prod: line 76: syntax error near unexpected token `line_buffering=True'
tools/promote-dev-to-prod: line 76: ` sys.stdout.reconfigure(line_buffering=True)'
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && head -1 tools/promote-dev-to-prod; python3 -m py_compile tools/promote-dev-to-prod && echo "py_compile OK"; bash -n tools/system-status && echo "system-status bash -n OK"
#!/usr/bin/env python3
py_compile OK
system-status bash -n OK
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && for db in /opt/startup/dev/data/messages.db /opt/startup/prod/data/messages.db; do printf "%s: " "$db"; sqlite3 "$db" "select count(*)||' unread of '||(select count(*) from investor_to_agent) from investor_to_agent where read=0" 2>&1 || sqlite3 "$db" "select count(*) from investor_to_agent where read=0"; done; echo "INBOX: $(grep -c '^## ' INBOX.md) entries, handled=$(grep -c 'HANDLED' INBOX.md)"; ls -A mailboxes/ ; ls -A /root/Maildir/new 2>/dev/null
/opt/startup/dev/data/messages.db: Error: in prepare, no such table: investor_to_agent
/opt/startup/prod/data/messages.db: Error: in prepare, no such table: investor_to_agent
Error: in prepare, no such table: investor_to_agent
Error: in prepare, no such table: investor_to_agent
INBOX: 65 entries, handled=67
main-to-reviewer
main-to-scout
reviewer-to-main
scout-to-main
1790230980.Vfc00I1a1792M616557.startup-builder
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && sqlite3 /opt/startup/dev/data/messages.db ".tables" && echo "--- unread counts (dev):" && sqlite3 /opt/startup/dev/data/messages.db "select direction||' '||coalesce(read,'?')||' '||count(*) from messages group by 1,2" 2>/dev/null | head; echo "=== mailbox files"; find mailboxes -type f | head -20; echo "=== Maildir"; for f in /root/Maildir/new/*; do echo "-- $f"; grep -i -m3 "^Subject\|^From\|^To" "$f"; done
messages
--- unread counts (dev):
=== mailbox files
mailboxes/reviewer-to-main/.gitkeep
mailboxes/scout-to-main/.gitkeep
mailboxes/main-to-reviewer/.gitkeep
mailboxes/main-to-scout/.gitkeep
=== Maildir
-- /root/Maildir/new/1790230980.Vfc00I1a1792M616557.startup-builder
Subject: tls-restore smoke test
From: root <root@startup-builder.lxd>
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && sqlite3 /opt/startup/dev/data/messages.db ".schema messages" | head -20
CREATE TABLE messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ts TEXT NOT NULL DEFAULT (datetime('now')),
direction TEXT NOT NULL CHECK(direction IN ('investor_to_agent', 'agent_to_investor')),
body TEXT NOT NULL,
read INTEGER NOT NULL DEFAULT 0 CHECK(read IN (0, 1))
);
CREATE INDEX idx_messages_direction ON messages(direction);
CREATE INDEX idx_messages_read ON messages(read);
CREATE INDEX idx_messages_ts ON messages(ts);
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && for db in /opt/startup/dev/data/messages.db /opt/startup/prod/data/messages.db; do echo "$db"; sqlite3 "$db" "select ' investor_to_agent total='||count(*)||' unread='||sum(read=0) from messages where direction='investor_to_agent'; select ' agent_to_investor total='||count(*)||' unread='||sum(read=0) from messages where direction='agent_to_investor';"; done; echo "INBOX entries=$(grep -c '^## ' INBOX.md) unhandled=$(grep -c '^## ' INBOX.md) - $(grep -c 'HANDLED' INBOX.md)"
/opt/startup/dev/data/messages.db
investor_to_agent total=24 unread=0
agent_to_investor total=34 unread=12
/opt/startup/prod/data/messages.db
investor_to_agent total=3 unread=0
agent_to_investor total=20 unread=16
INBOX entries=65 unhandled=65 - 67
> build · mimo-v2.6-flash-free
Select another run log from the list above. Only files matching run-YYYYMMDD-HHMMSS-N.log are readable.
[Fri Sep 25 02:55:06 2026] 127.0.0.1:48604 Accepted [Fri Sep 25 02:55:06 2026] 127.0.0.1:48604 Closing [Fri Sep 25 02:55:19 2026] 127.0.0.1:55932 Accepted [Fri Sep 25 02:55:19 2026] 127.0.0.1:55932 Closing [Fri Sep 25 02:55:19 2026] 127.0.0.1:55938 Accepted [Fri Sep 25 02:55:19 2026] 127.0.0.1:55938 Closing [Fri Sep 25 02:55:53 2026] 127.0.0.1:42106 Accepted [Fri Sep 25 02:55:53 2026] 127.0.0.1:42106 Closing [Fri Sep 25 02:55:53 2026] 127.0.0.1:42108 Accepted [Fri Sep 25 02:55:53 2026] 127.0.0.1:42108 Closing [Fri Sep 25 02:57:13 2026] 127.0.0.1:47438 Accepted [Fri Sep 25 02:57:13 2026] 127.0.0.1:47438 Closing [Fri Sep 25 02:57:31 2026] 127.0.0.1:36022 Accepted [Fri Sep 25 02:57:31 2026] 127.0.0.1:36022 Closing [Fri Sep 25 02:57:31 2026] 127.0.0.1:36030 Accepted [Fri Sep 25 02:57:31 2026] 127.0.0.1:36030 Closing [Fri Sep 25 02:57:32 2026] 127.0.0.1:36042 Accepted [Fri Sep 25 02:57:32 2026] 127.0.0.1:36042 Closing [Fri Sep 25 02:57:32 2026] 127.0.0.1:36058 Accepted [Fri Sep 25 02:57:32 2026] 127.0.0.1:36058 Closing [Fri Sep 25 02:57:32 2026] 127.0.0.1:36072 Accepted [Fri Sep 25 02:57:32 2026] 127.0.0.1:36072 Closing [Fri Sep 25 02:57:32 2026] 127.0.0.1:36088 Accepted [Fri Sep 25 02:57:32 2026] 127.0.0.1:36088 Closing [Fri Sep 25 02:57:32 2026] 127.0.0.1:36104 Accepted [Fri Sep 25 02:57:32 2026] 127.0.0.1:36104 Closing [Fri Sep 25 03:00:19 2026] 127.0.0.1:59458 Accepted [Fri Sep 25 03:00:19 2026] 127.0.0.1:59458 Closing [Fri Sep 25 03:03:21 2026] 127.0.0.1:49316 Accepted [Fri Sep 25 03:03:21 2026] 127.0.0.1:49316 Closing [Fri Sep 25 03:07:10 2026] 127.0.0.1:57988 Accepted [Fri Sep 25 03:07:10 2026] 127.0.0.1:57988 Closing [Fri Sep 25 03:50:25 2026] 127.0.0.1:46968 Accepted [Fri Sep 25 03:50:25 2026] 127.0.0.1:46968 Closing [Fri Sep 25 03:50:25 2026] 127.0.0.1:46972 Accepted [Fri Sep 25 03:50:25 2026] 127.0.0.1:46972 Closing [Fri Sep 25 03:56:10 2026] 127.0.0.1:50784 Accepted [Fri Sep 25 03:56:10 2026] 127.0.0.1:50784 Closing [Fri Sep 25 03:56:10 2026] 127.0.0.1:50798 Accepted [Fri Sep 25 03:56:10 2026] 127.0.0.1:50798 Closing [Fri Sep 25 03:56:25 2026] 127.0.0.1:41496 Accepted [Fri Sep 25 03:56:25 2026] 127.0.0.1:41496 Closing [Fri Sep 25 03:56:36 2026] 127.0.0.1:60054 Accepted [Fri Sep 25 03:56:36 2026] 127.0.0.1:60054 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38818 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38818 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38830 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38830 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38844 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38844 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38850 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38850 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38860 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38860 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38872 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38872 Closing [Fri Sep 25 03:59:29 2026] 127.0.0.1:38880 Accepted [Fri Sep 25 03:59:29 2026] 127.0.0.1:38880 Closing [Fri Sep 25 04:09:15 2026] 127.0.0.1:38124 Accepted
Generated 2026-09-25 02:09:15 UTC · Gladex.de