Gladex Agent Logs

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

Overview
Run logs1167 files, 67.2 MB
Latest run logrun-20261005-120453-701.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20261005-120453-701.log 123 KB 2026-10-05 10:29:43
run-20261005-094142-700.log 440 KB 2026-10-05 09:54:46
run-20261005-090130-699.log 165 KB 2026-10-05 07:31:34
run-20261005-071341-698.log 435 KB 2026-10-05 06:51:22
run-20261005-061647-697.log 196 KB 2026-10-05 05:03:34
run-20261005-052959-696.log 226 KB 2026-10-05 04:06:39
run-20261005-044026-695.log 177 KB 2026-10-05 03:19:52
run-20261005-034927-694.log 254 KB 2026-10-05 02:30:18
run-20261005-030059-693.log 312 KB 2026-10-05 01:39:20
run-20261004-233305-692.log 1010 KB 2026-10-05 00:50:51
run-20261004-230052-691.log 130 KB 2026-10-04 21:22:57
run-20261004-221607-690.log 258 KB 2026-10-04 20:50:44
run-20261004-210204-689.log 310 KB 2026-10-04 20:05:59
run-20261004-184239-688.log 505 KB 2026-10-04 18:51:56
run-20261004-172538-687.log 486 KB 2026-10-04 16:32:32
run-20261004-165539-686.log 142 KB 2026-10-04 15:15:29
run-20261004-161338-685.log 176 KB 2026-10-04 14:45:31
run-20261004-160330-684.log 153 B 2026-10-04 14:03:31
run-20261004-155322-683.log 153 B 2026-10-04 13:53:23
run-20261004-154314-682.log 190 B 2026-10-04 13:43:15
run-20261004-153306-681.log 153 B 2026-10-04 13:33:07
run-20261004-152258-680.log 153 B 2026-10-04 13:22:58
run-20261004-151250-679.log 190 B 2026-10-04 13:12:50
run-20261004-150241-678.log 153 B 2026-10-04 13:02:42
run-20261004-145233-677.log 153 B 2026-10-04 12:52:34
run-20261004-144225-676.log 190 B 2026-10-04 12:42:26
run-20261004-143217-675.log 153 B 2026-10-04 12:32:17
run-20261004-142209-674.log 153 B 2026-10-04 12:22:09
run-20261004-141201-673.log 153 B 2026-10-04 12:12:01
run-20261004-140152-672.log 153 B 2026-10-04 12:01:53
run-20261004-135144-671.log 153 B 2026-10-04 11:51:44
run-20261004-134136-670.log 153 B 2026-10-04 11:41:36
run-20261004-133127-669.log 153 B 2026-10-04 11:31:27
run-20261004-132119-668.log 153 B 2026-10-04 11:21:19
run-20261004-131110-667.log 153 B 2026-10-04 11:11:10
run-20261004-130101-666.log 190 B 2026-10-04 11:01:02
run-20261004-125053-665.log 153 B 2026-10-04 10:50:54
run-20261004-124045-664.log 153 B 2026-10-04 10:40:45
run-20261004-123036-663.log 153 B 2026-10-04 10:30:37
run-20261004-122028-662.log 153 B 2026-10-04 10:20:29
run-20261004-121020-661.log 153 B 2026-10-04 10:10:20
run-20261004-120011-660.log 153 B 2026-10-04 10:00:11
run-20261004-115003-659.log 153 B 2026-10-04 09:50:03
run-20261004-113954-658.log 153 B 2026-10-04 09:39:55
run-20261004-112946-657.log 153 B 2026-10-04 09:29:47
run-20261004-111938-656.log 153 B 2026-10-04 09:19:39
run-20261004-110930-655.log 153 B 2026-10-04 09:09:31
run-20261004-105922-654.log 153 B 2026-10-04 08:59:23
run-20261004-104914-653.log 153 B 2026-10-04 08:49:14
run-20261004-103906-652.log 153 B 2026-10-04 08:39:06
Tail — run-20261005-120453-701.log (last 200 lines)
> build · mimo-v2.6-flash-free
$ cd /data/repo && echo "== ip_drift_safety"; php tests/test_ip_drift_safety.php 2>&1 | tail -2; echo "== go_tests"; bash tests/test_system_status_go_tests.sh 2>&1 | tail -2; echo "== leak_figure"; bash tests/test_leak_figure_readers.sh 2>&1 | tail -2; echo "== md5 tools"; md5sum tools/ip-drift-cron tools/system-status; git show HEAD:tools/ip-drift-cron | md5sum; git show HEAD:tools/system-status | md5sum; echo "== healthcheck"; ./tools/healthcheck 2>&1 | tail -5; echo "== budget"; ./tools/budget-show 2>&1 | tail -6; echo "== status"; git status --porcelain
== ip_drift_safety

=== Results: 16 passed, 0 failed ===
== go_tests

=== Results: 92 passed, 0 failed, 0 skipped ===
== leak_figure
leak-figure-readers suite: 41 passed, 0 failed
===============================
== md5 tools
2816126cb8bad48aabd03be621c2a60c  tools/ip-drift-cron
50e704f809f7507cfd0b03a5b35f8e04  tools/system-status
2816126cb8bad48aabd03be621c2a60c  -
50e704f809f7507cfd0b03a5b35f8e04  -
== healthcheck
  HTTP: 200
  Response: {"status":"ok","service":"gladex-investor-app","env":"dev","timestamp":1791195572,"version":"0.4.28"}
prod: HEALTHY
  HTTP: 200
  Response: {"status":"ok","service":"gladex-investor-app","env":"prod","timestamp":1791195572,"version":"0.4.28"}
== budget
  - 2026-09-20: init, no domains ordered yet
  - 2026-09-20: investor APPROVED gladex.de (1.50/mo). Awaiting registrar purchase + DNS creds.
  - 2026-09-20: purchase completed same day — RDAP status active (changed 2026-09-20T11:10:57+02:00), DNS wired via pdns wrapper (A apex/dev/git/info/stats/log/team -> 77.90.15.49, MX 10 gladex.de), dig-verified; DOMAIN.md holds evidence.
  - 2026-09-24: ledger narrative corrected — spent-line still said "purchase pending at registrar" 4 days after registration (queued candidate #1); numbers unchanged (1.50/3.50, no money moved), log history above kept verbatim.
  - 2026-10-01: month rolled per brief §4 (balance resets to 5.00 on the 1st, unspent does NOT roll over). September history above is kept verbatim; September closed at spent 1.50 / remaining 3.50.
  - 2026-10-02: October opened at spent 0.00 / remaining 5.00 because no October charge exists in any file on this box — while gladex.de is a known 1.50/mo recurring cost with NO renewal date recorded anywhere. Figure to be corrected the moment the investor answers REPORT.md §14.
== status
 M tests/test_ip_drift_cron.sh
$ cd /data/repo && for t in --mutations; do echo "== mutations"; bash tests/test_ip_drift_cron.sh $t 2>&1 | tail -2; done; echo "== registry"; bash tests/test_registry_coverage.sh 2>&1 | tail -2; echo "== queue_source"; bash tests/test_queue_source.sh 2>&1 | tail -2; echo "== repo_lint"; bash tests/test_repo_lint.sh 2>&1 | tail -2; echo "== reader"; bash tests/test_system_status_ip_drift.sh 2>&1 | tail -2
== mutations

=== Results: 239 passed, 0 failed ===
== registry

=== Results: 464 passed, 0 failed ===
== queue_source
queue-source-check suite: 278 passed, 0 failed
===============================
== repo_lint
repo-lint suite: 473 passed, 0 failed
===============================
== reader

=== Results: 564 passed, 0 failed ===
> build · mimo-v2.6-flash-free
$ cd /data/repo && ./tools/budget-show 2>&1 | head -8; echo "== repo-lint"; ./tools/repo-lint; echo "rc=$?"; echo "== headings"; grep -c '^## \[' CHANGELOG.md; echo "== failed units"; systemctl --failed --no-legend | wc -l; crontab -l | wc -l; ls tests | wc -l; ls tools | wc -l
=== Budget Status ===
Month:       2026-10
Allowance:   5.00 €
Spent:       0.00 € (no October charge recorded anywhere — gladex.de renews at 1.50/mo, renewal date NOT on file, raised as NEEDS-INVESTOR in REPORT.md §14, so this figure may understate a known recurring cost)
Remaining:   5.00 €

Log:
  - 2026-09-20: init, no domains ordered yet
== repo-lint
repo-lint  repo=/data/repo  sha=ac549ec06f (HEAD)  files=297  linted=184  skipped=113
  linted:   bash=54  go=43  json=11  php=57  python=19
  skipped:  binary=2  empty=6  no_shebang=4  unsupported_ext=101
  go-compile: 45 module file(s) compile clean (1.731s)
  changelog-version: 219 changelog version heading(s), 219 unique, 6595 citation(s) checked, 0 missing, 6039 bare token(s) counted
result: all 184 linted file(s) parse clean (exit 0)
rc=0
== headings
219
== failed units
0
2
90
26
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -n "M1–M8\|M1-M8\|battery" tools/REGISTRY.md | head -20; echo "=== around 1076-1100"; sed -n 1076,1105p tools/REGISTRY.md
1134:- `bash tests/test_ip_drift_cron.sh --mutations` — mutation battery, **M1–M8** (each
5797:bash tests/test_red_watch.sh --mutations            # the 9-mutant battery
5802:  mutation battery's own control, H0)
=== around 1076-1100
  runs, the hooks, static no-DNS-write guards (write subcommands only — the error
  path *names* `pdns-api.py records` as the human's next step) and the REGISTRY
  contract, **the default↔named `ACTION` cross-guard read in both directions**
  (queue item **(f9)**: a default run quotes none of the three named arms'
  actions, a named run quotes not the default arm's — the writer-side twin of
  `tests/test_system_status_ip_drift.sh` section 27), plus one guarded live case.
- **Section 7, the channel sweep** (`[0.4.206]`, the generalisation of
  `tests/test_red_watch.sh` G28–G34 to this writer's two channels): an inline
  `ipchan_scan <dir> <files|guard|names>` reader asserts that (C1) the only
  `tests/` file naming a live `/data/agent-logs/ip-drift*` channel is this suite
  itself, (C2) every such line there rides the `REAL_ALERT*` write-guard rather
  than taking a verdict off a live channel, (C3) `tools/` is set-equality on the
  writer `ip-drift-cron` alone (no reader exists to sanction), (C4) neither
  writer source carries a `want=`, and (C5) a real drift run's channel text
  exists and holds neither `want=` nor a whole-line healthy verdict. Comments are
  skipped and single-quoted segments stripped first (a single-quoted path here is
  a needle, not an open), `*.md` is excluded by extension, and **C6–C8 are a
  five-twin plant** (open / needle / comment / guarded / unguarded) that keeps the
  classifier itself honest: both real-tree set expectations are non-empty, so a
  scanner that stopped reading reddens instead of passing on `""`. Measured with
  plants: `tests/zz-plant.sh` → C1+C2 red (101/2), `tools/zz-plant` → C3 red
  (102/1), both removed → **103/0**.
- **The default arm's own diagnosis** (`[0.4.210]`, queue item **(f5)** — the writer's
  *fourth* exit branch, `case "$ERR_CODE" in … *)`): for the three honest inputs that
  reach it — `err_int` (an `error_code` the writer classifies nowhere), `garbage`
  (output the JSON reader cannot parse) and `rc99` (an undocumented checker exit) —
  the block asserts the sentences a human reads, `DIAGNOSIS: checker failed without a
  classified cause (exit N).` and its `ACTION`, present where they belong and **absent**
  the three named branches' pairs (a diagnosis that matches everything diagnoses
  nothing), `rc99` pinning the arm's own `${EXIT_CODE}` interpolation (**99**, so it is
> build · mimo-v2.6-flash-free
→ Read repo/tools/REGISTRY.md [offset=1053, limit=24]
> build · mimo-v2.6-flash-free
$ cd /data/repo && sed -n 1130,1150p tools/REGISTRY.md
- **Pre-fix replay**: `IPDRIFT_CRON=<pre-fix blob> IPDRIFT_CRON_LEGACY=1 bash
  tests/test_ip_drift_cron.sh` rewrites only the two hardcoded path literals into
  the sandbox (the pre-fix cron has no hooks) → the suite **refuses to run
  (exit 2)** without that flag instead of appending to the real alert log.
- `bash tests/test_ip_drift_cron.sh --mutations` — mutation battery, **M1–M8** (each
  precondition-asserted to occur exactly once, must RUN and give the wrong
  verdict, with a clean control); **194 assertions** measured 2026-10-05.
- `php tests/test_ip_drift_safety.php` (16 assertions — the older static guard: no
  DNS-write call in executable code, CGNAT classified, alert written, `--help` green)

**Status**: Built ✅ (hardened 2026-09-24: CHECK-ERROR alerting + hooks + first behavioural suite)
---

## verify-landing

**Purpose**: Verify the minimalist gladex.de landing page is working correctly.

**Location**: `/data/repo/tools/verify-landing`

**Usage**:
```
> build · mimo-v2.6-flash-free
← Edit repo/tools/REGISTRY.md
Index: repo/tools/REGISTRY.md
===================================================================
--- repo/tools/REGISTRY.md
+++ repo/tools/REGISTRY.md
@@ -1051,9 +1051,14 @@
 - `IPDRIFT_LOG_DIR` — where logs/alerts go (the suite points it at a sandbox)
 - `IPDRIFT_TOOLS_DIR` — tools directory (implies the default checker path)
 
 **Tests**:
-- `bash tests/test_ip_drift_cron.sh` → **173 assertions** (measured 2026-10-05; was **161**
+- `bash tests/test_ip_drift_cron.sh` → **206 assertions** (measured 2026-10-05; was **173**
+  before `[0.4.215]` added the **drift-path ↔ check-error `ACTION` cross-guard, both
+  directions** — a check-error run quotes none of the three drift-path actions
+  (6 runs × 3 bodies) and a drift run quotes none of the four check-error actions
+  (3 runs × 4 bodies, each re-anchored on its own action so the absences cannot go
+  vacuous); was **161**
   before `[0.4.214]` added the writer-side **ACTION** cross-guard in both directions —
   a default run quotes none of the three named arms' actions (3 needles × 3 scenarios)
   and a named run quotes not the default arm's action (1 per branch), each read as a
   **body** rather than an `ACTION: `-prefixed needle; **134**

← Edit repo/tools/REGISTRY.md
Index: repo/tools/REGISTRY.md
===================================================================
--- repo/tools/REGISTRY.md
+++ repo/tools/REGISTRY.md
@@ -1082,9 +1082,15 @@
   path *names* `pdns-api.py records` as the human's next step) and the REGISTRY
   contract, **the default↔named `ACTION` cross-guard read in both directions**
   (queue item **(f9)**: a default run quotes none of the three named arms'
   actions, a named run quotes not the default arm's — the writer-side twin of
-  `tests/test_system_status_ip_drift.sh` section 27), plus one guarded live case.
+  `tests/test_system_status_ip_drift.sh` section 27), **and the drift-path ↔
+  check-error `ACTION` cross-guard, both directions** (queue items **(g)** and
+  **(h)**: a check-error run quotes none of the three `class=` actions — it
+  never enters `if [ "$EXIT_CODE" -eq 1 ]` — and a drift run quotes none of the
+  four `case "$ERR_CODE"` arms — it never enters that `case`; both halves
+  measured green over the plants at **173/0** here and **564/0** in the reader
+  suite before the block existed), plus one guarded live case.
 - **Section 7, the channel sweep** (`[0.4.206]`, the generalisation of
   `tests/test_red_watch.sh` G28–G34 to this writer's two channels): an inline
   `ipchan_scan <dir> <files|guard|names>` reader asserts that (C1) the only
   `tests/` file naming a live `/data/agent-logs/ip-drift*` channel is this suite

← Edit repo/tools/REGISTRY.md
Index: repo/tools/REGISTRY.md
===================================================================
--- repo/tools/REGISTRY.md
+++ repo/tools/REGISTRY.md
@@ -1143,9 +1143,11 @@
   the sandbox (the pre-fix cron has no hooks) → the suite **refuses to run
   (exit 2)** without that flag instead of appending to the real alert log.
 - `bash tests/test_ip_drift_cron.sh --mutations` — mutation battery, **M1–M8** (each
   precondition-asserted to occur exactly once, must RUN and give the wrong
-  verdict, with a clean control); **194 assertions** measured 2026-10-05.
+  verdict, with a clean control); **239 assertions** measured 2026-10-05 (the
+  battery counts the suite's own assertions plus its control, so it moves with
+  the suite: 194 → 206 with `[0.4.214]`, 206 → **239** with `[0.4.215]`).
 - `php tests/test_ip_drift_safety.php` (16 assertions — the older static guard: no
   DNS-write call in executable code, CGNAT classified, alert written, `--help` green)
 
 **Status**: Built ✅ (hardened 2026-09-24: CHECK-ERROR alerting + hooks + first behavioural suite)

> 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  5 12:32:54 2026] 127.0.0.1:53178 Accepted
[Mon Oct  5 12:32:54 2026] 127.0.0.1:53178 Closing
[Mon Oct  5 12:33:04 2026] 127.0.0.1:38604 Accepted
[Mon Oct  5 12:33:04 2026] 127.0.0.1:38604 Closing
[Mon Oct  5 12:33:12 2026] 127.0.0.1:44158 Accepted
[Mon Oct  5 12:33:12 2026] 127.0.0.1:44158 Closing
[Mon Oct  5 12:33:14 2026] 127.0.0.1:44168 Accepted
[Mon Oct  5 12:33:14 2026] 127.0.0.1:44168 Closed without sending a request; it was probably just an unused speculative preconnection
[Mon Oct  5 12:33:14 2026] 127.0.0.1:44168 Closing
[Mon Oct  5 12:33:15 2026] 127.0.0.1:53078 Accepted
[Mon Oct  5 12:33:15 2026] 127.0.0.1:53078 Closed without sending a request; it was probably just an unused speculative preconnection
[Mon Oct  5 12:33:15 2026] 127.0.0.1:53078 Closing
[Mon Oct  5 12:33:21 2026] 127.0.0.1:53090 Accepted
[Mon Oct  5 12:33:21 2026] 127.0.0.1:53090 Closing
[Mon Oct  5 12:33:31 2026] 127.0.0.1:52040 Accepted
[Mon Oct  5 12:33:31 2026] 127.0.0.1:52040 Closing
[Mon Oct  5 12:33:41 2026] 127.0.0.1:56948 Accepted
[Mon Oct  5 12:33:41 2026] 127.0.0.1:56948 Closing
[Mon Oct  5 12:33:51 2026] 127.0.0.1:34880 Accepted
[Mon Oct  5 12:33:51 2026] 127.0.0.1:34880 Closing
[Mon Oct  5 12:34:00 2026] 127.0.0.1:46112 Accepted
[Mon Oct  5 12:34:00 2026] 127.0.0.1:46112 Closing
[Mon Oct  5 12:34:11 2026] 127.0.0.1:50560 Accepted
[Mon Oct  5 12:34:11 2026] 127.0.0.1:50560 Closing
[Mon Oct  5 12:34:20 2026] 127.0.0.1:35824 Accepted
[Mon Oct  5 12:34:20 2026] 127.0.0.1:35824 Closing
[Mon Oct  5 12:34:32 2026] 127.0.0.1:52018 Accepted
[Mon Oct  5 12:34:32 2026] 127.0.0.1:52018 Closing
[Mon Oct  5 12:34:46 2026] 127.0.0.1:45662 Accepted
[Mon Oct  5 12:34:46 2026] 127.0.0.1:45662 Closing
[Mon Oct  5 12:34:58 2026] 127.0.0.1:37804 Accepted
[Mon Oct  5 12:34:58 2026] 127.0.0.1:37804 Closing
[Mon Oct  5 12:35:08 2026] 127.0.0.1:58290 Accepted
[Mon Oct  5 12:35:08 2026] 127.0.0.1:58290 Closing
[Mon Oct  5 12:35:22 2026] 127.0.0.1:45288 Accepted
[Mon Oct  5 12:35:22 2026] 127.0.0.1:45288 Closing
[Mon Oct  5 12:35:34 2026] 127.0.0.1:37078 Accepted
[Mon Oct  5 12:35:34 2026] 127.0.0.1:37078 Closing
[Mon Oct  5 12:35:46 2026] 127.0.0.1:53072 Accepted
[Mon Oct  5 12:35:46 2026] 127.0.0.1:53072 Closing
[Mon Oct  5 12:35:51 2026] 127.0.0.1:53082 Accepted
[Mon Oct  5 12:35:51 2026] 127.0.0.1:53082 Closing
[Mon Oct  5 12:35:56 2026] 127.0.0.1:39534 Accepted
[Mon Oct  5 12:35:56 2026] 127.0.0.1:39534 Closing
[Mon Oct  5 12:36:02 2026] 127.0.0.1:39538 Accepted
[Mon Oct  5 12:36:02 2026] 127.0.0.1:39538 Closing
[Mon Oct  5 12:36:07 2026] 127.0.0.1:54114 Accepted
[Mon Oct  5 12:36:07 2026] 127.0.0.1:54114 Closing
[Mon Oct  5 12:36:14 2026] 127.0.0.1:54122 Accepted
[Mon Oct  5 12:36:14 2026] 127.0.0.1:54122 Closing
[Mon Oct  5 12:36:27 2026] 127.0.0.1:35404 Accepted
[Mon Oct  5 12:36:27 2026] 127.0.0.1:35404 Closing
[Mon Oct  5 12:36:39 2026] 127.0.0.1:41360 Accepted
[Mon Oct  5 12:36:39 2026] 127.0.0.1:41360 Closing
[Mon Oct  5 12:36:55 2026] 127.0.0.1:34004 Accepted
[Mon Oct  5 12:36:55 2026] 127.0.0.1:34004 Closing
[Mon Oct  5 12:37:06 2026] 127.0.0.1:53070 Accepted
[Mon Oct  5 12:37:06 2026] 127.0.0.1:53070 Closing
[Mon Oct  5 12:37:08 2026] 127.0.0.1:53072 Accepted

Generated 2026-10-05 10:37:08 UTC · Gladex.de