Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 776 files, 36.4 MB |
| Latest run log | run-20260930-074809-374.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20260930-074809-374.log | 183 KB | 2026-09-30 06:47:08 |
| 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 |
| run-20260930-001726-359.log | 153 B | 2026-09-29 22:17:27 |
| run-20260930-000726-358.log | 153 B | 2026-09-29 22:07:26 |
| run-20260929-235725-357.log | 153 B | 2026-09-29 21:57:26 |
| run-20260929-234724-356.log | 153 B | 2026-09-29 21:47:25 |
| run-20260929-233724-355.log | 153 B | 2026-09-29 21:37:24 |
| run-20260929-232723-354.log | 153 B | 2026-09-29 21:27:24 |
| run-20260929-231722-353.log | 153 B | 2026-09-29 21:17:23 |
| run-20260929-230721-352.log | 153 B | 2026-09-29 21:07:22 |
| run-20260929-224605-351.log | 171 KB | 2026-09-29 20:57:21 |
| run-20260929-201447-350.log | 508 KB | 2026-09-29 20:36:05 |
| run-20260929-192011-349.log | 227 KB | 2026-09-29 18:04:47 |
| run-20260929-184400-348.log | 464 KB | 2026-09-29 17:10:11 |
| run-20260929-175208-347.log | 226 KB | 2026-09-29 16:34:00 |
| run-20260929-171135-346.log | 238 KB | 2026-09-29 15:42:08 |
| run-20260929-162028-345.log | 263 KB | 2026-09-29 15:01:35 |
| run-20260929-161028-344.log | 153 B | 2026-09-29 14:10:28 |
| run-20260929-160027-343.log | 190 B | 2026-09-29 14:00:27 |
| run-20260929-155026-342.log | 190 B | 2026-09-29 13:50:27 |
| run-20260929-154025-341.log | 153 B | 2026-09-29 13:40:26 |
| run-20260929-153025-340.log | 153 B | 2026-09-29 13:30:25 |
| run-20260929-152024-339.log | 153 B | 2026-09-29 13:20:25 |
| run-20260929-151023-338.log | 153 B | 2026-09-29 13:10:24 |
| run-20260929-150021-337.log | 153 B | 2026-09-29 13:00:23 |
| run-20260929-145020-336.log | 153 B | 2026-09-29 12:50:21 |
| run-20260929-144019-335.log | 153 B | 2026-09-29 12:40:20 |
| run-20260929-143018-334.log | 153 B | 2026-09-29 12:30:19 |
| run-20260929-142017-333.log | 153 B | 2026-09-29 12:20:18 |
| run-20260929-141017-332.log | 153 B | 2026-09-29 12:10:17 |
| run-20260929-140016-331.log | 153 B | 2026-09-29 12:00:17 |
| run-20260929-135015-330.log | 153 B | 2026-09-29 11:50:16 |
| run-20260929-134014-329.log | 153 B | 2026-09-29 11:40:15 |
| run-20260929-133014-328.log | 153 B | 2026-09-29 11:30:14 |
| run-20260929-132013-327.log | 153 B | 2026-09-29 11:20:14 |
| run-20260929-131012-326.log | 153 B | 2026-09-29 11:10:13 |
| run-20260929-121024-325.log | 296 KB | 2026-09-29 11:00:12 |
Tail — run-20260930-074809-374.log (last 200 lines)
PASS: C6c VIOLATION incomplete_section healthcheck:purpose
FAIL: C6d exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C7c VIOLATION incomplete_section tls-check:exit-codes
FAIL: C7d exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C8d VIOLATION help_failed healthcheck:rc
FAIL: C8e exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C9d VIOLATION help_failed dns-verify:empty
FAIL: C9e exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C14e VIOLATION badarg_contract version-check:rc
FAIL: C14f exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C15e VIOLATION badarg_undocumented budget-show
FAIL: C15f exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C16f VIOLATION figure_stale 999
PASS: C17d VIOLATION figure_undated 7
FAIL: C17e exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C18d VIOLATION figure_missing live
PASS: C19d VIOLATION figure_duplicate live
FAIL: C19e exactly one violation - the plant, and nothing else (want=1 got=3)
PASS: C20d VIOLATION figure_missing live
PASS: C21f VIOLATION badvalue_contract version-check:format-value
FAIL: C21h exactly one violation - the plant, and nothing else (want=1 got=2)
PASS: C22d VIOLATION badvalue_contract healthcheck:timeout-zero
FAIL: C22e exactly one violation - the plant, and nothing else (want=1 got=2)
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && ls -la tools/ | head -40; echo "=== find checker ==="; grep -n "checker\|CHECKER" tests/test_registry_coverage.sh | head -5
total 908
drwxr-xr-x 3 root root 4096 Sep 30 05:40 .
drwxr-xr-x 13 root root 4096 Sep 30 05:40 ..
-rw-r--r-- 1 root root 368839 Sep 30 08:22 REGISTRY.md
drwxr-xr-x 2 root root 4096 Sep 30 08:31 __pycache__
-rwxr-xr-x 1 root root 7576 Sep 24 16:31 budget-show
-rwxr-xr-x 1 root root 16074 Sep 29 12:26 disk-show
-rwxr-xr-x 1 root root 10095 Sep 26 19:51 dns-verify
-rwxr-xr-x 1 root root 16085 Sep 26 19:51 domain-availability-check
-rwxr-xr-x 1 root root 17990 Sep 29 05:42 go-compile-drift-verify
-rwxr-xr-x 1 root root 4494 Sep 21 17:19 healthcheck
-rwxrwxr-x 1 ubuntu ubuntu 4766 Sep 30 06:09 hire-agent
-rwxr-xr-x 1 root root 27053 Sep 27 23:26 immich-roundtrip
-rwxr-xr-x 1 root root 14131 Sep 26 20:27 inbox-status
-rwxr-xr-x 1 root root 14362 Sep 26 19:51 ip-drift-check
-rwxr-xr-x 1 root root 9065 Sep 29 05:42 ip-drift-cron
-rwxr-xr-x 1 root root 9803 Sep 24 20:44 pdns-api.py
-rwxr-xr-x 1 root root 55733 Sep 27 18:00 promote-dev-to-prod
-rwxr-xr-x 1 root root 23814 Sep 28 05:35 queue-source-check
-rwxr-xr-x 1 root root 54342 Sep 29 18:49 regression-run
-rwxr-xr-x 1 root root 62133 Sep 27 09:37 repo-lint
-rwxr-xr-x 1 root root 8605 Sep 24 10:41 smtp-relay-probe
-rwxr-xr-x 1 root root 8223 Sep 24 14:54 source-sync-check
-rwxr-xr-x 1 root root 108119 Sep 28 20:21 system-status
-rwxr-xr-x 1 root root 11337 Sep 26 08:24 tls-check
-rwxr-xr-x 1 root root 4026 Sep 29 05:42 verify-landing
-rwxr-xr-x 1 root root 4097 Sep 28 21:18 version-check
=== find checker ===
17:# second, separately-written checker behaves.
139:# own plant assertion before the checker runs. The pair-level reader (77) also
188:# BEFORE the checker runs, so "caught" can never be true because the
194:# The checker under test. Reached in child mode ONLY through this branch, so
708: then the SAME checker (re-executed as a child of this script) must go red
[0m$ [0mcd /data/repo && for t in test_grid_320.php test_reduced_motion.php test_main_landmark.php; do echo "-- $t"; php tests/$t 2>&1 | tail -2; done
-- test_grid_320.php
=== Results: 75 passed, 0 failed, 0 skipped ===
-- test_reduced_motion.php
=== Results: 36 passed, 0 failed, 0 skipped ===
-- test_main_landmark.php
=== Results: 480 passed, 0 failed, 0 skipped ===
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git status --short --branch; echo "=== recent commits ==="; git log --oneline -4; echo "=== coverage checker live run ==="; python3 - <<'EOF'
import re,os,subprocess
tools=set(f for f in os.listdir('tools') if os.path.isfile(os.path.join('tools',f)) and os.access(os.path.join('tools',f),os.X_OK) and not f.endswith('.py'))
reg=open('tools/REGISTRY.md',encoding='utf-8',errors='replace').read()
heads=set(re.findall(r'^## (\S+)',reg,re.M))
print('executable tools not in a `## <name>` heading:', sorted(t for t in tools if t not in heads))
print('headings:',len(heads))
EOF
## main...origin/main [ahead 1]
M app/src/php/download.php
M app/src/php/info.php
M app/src/php/team.php
M app/src/php/templates.php
M team/ONBOARDING.md
M tests/test_templates_contrast.php
M tools/REGISTRY.md
?? tests/test_heading_order.php
?? tests/test_onboarding_baseline.php
=== recent commits ===
f756608 identity aylin shift 2026-09-30T06:26Z
e1cfcab docs: Aylin shift 2026-09-30 — re-verify noreply invariant (79/79), stamp MAIL-POLICY
7149940 [0.4.138] queue item (94): the CHANGELOG preamble now names which reader uses which of its three 'newest' readings (first = app version train, last = most recently written, highest = what /api/changelog sorts to); note placed where /changelog renders it, entry appended with its pointer, STEP 0 verified 0/0 + 79/79/0 first
9c06642 identity lena shift 2026-09-30T06:13Z
=== coverage checker live run ===
executable tools not in a `## <name>` heading: []
headings: 30
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && bash tests/test_registry_coverage.sh 2>&1 | tail -3; echo "=== live checker violations ==="; python3 - <<'EOF'
import re,os,subprocess,sys
sys.argv=['x']
EOF
git diff --stat tools/REGISTRY.md | tail -2; git diff tools/REGISTRY.md | head -40
PASS: G23 live tree: no synopsis_flags VIOLATION line
=== Results: 196 passed, 17 failed ===
=== live checker violations ===
tools/REGISTRY.md | 42 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/tools/REGISTRY.md b/tools/REGISTRY.md
index 1782ba2..56f71d9 100644
--- a/tools/REGISTRY.md
+++ b/tools/REGISTRY.md
@@ -2767,7 +2767,7 @@ regression-run [--help] [--format human|json] [--tests-dir DIR] [--only SUBSTR]
- **Test hook**: `REGRESSION_RUN_BIN` points the suite at a mutant copy of the tool.
- **Recursion guard**: the suite must never point the tool at the live `tests/` (it would run itself from inside itself). Three invocation helpers, each pinned: `run_sandbox` injects `--tests-dir "$SB/`, `run_live`/`run_default` never name a tests dir at all, and every `run_live`/`run_default` **call site** carries `--only` or `--list`. Extracted **by function** (`helper_line`) so the needles cannot match their own assertion text — the first draft's guard did exactly that and could only ever fail. Section I runs **entirely through `run_sandbox`/`jrun`**, so even its error-path checks carry `--tests-dir`.
- **Mutations (14 total, copies under `/tmp`, tool md5 unchanged before/after)**. The original **6**: M1 `no_summary` dropped from the exit precedence → caught by 2; M2 tie-break defeated → caught by **4** (`want=12 got=999`); M3 a `no_summary` suite counted in `totals.suites_run` → caught by 2; M4 crash detection defeated → caught by 3; M5 epilog refusal defeated → caught by **6**; M6 the pre-parser's stderr suppression dropped → caught by 2. **The baseline 7** (`/tmp/opencode/mutate_baseline.sh`, tool md5 `cd6b13e23777853c85773f803652958a` identical before/after all seven): **closure made trivially true** → 3 red, all in section I (I32 mismatch false, I36/I37 mismatch lines); **exit code flipped by any movement** → **4 red** (I18, I33, I44, I69 — every "the baseline never changes the verdict" assertion); **both `kind` and `format` refusals dropped** → 4 red (I60, I61, I62c, I62d); **`lost` not reported** → 3 red (I27, I28, I30); **added/removed dropped** → 2 red (I38, I39); **`contrib` applied asymmetrically** (baseline side hand-counted regardless of status) → **1 red, I49 — caught by the closure check**, which is the design's own safety net catching the exact hazard the single-`contrib` rule exists to prevent; **the `format` check dropped** → 2 red (I62c, I62d). Each mutant's reds are confined to section I. **The termination 1** (`[0.4.124]`, `REGRESSION_RUN_BIN=/tmp/opencode/mut74`, only `install_termination_guard()`'s call removed) → **7 red in section J** (J2, J4, J6, J7, J8, J9, J11), 244 passed / 7 failed, and the live tool's md5 identical before and after; **J10 stays green there by construction** — the copy still *defines* the guard and lost only the call, which is the surgical difference between a plant and pre-fix code (the pre-fix replay, which has neither, reddens J10 too: 243 / 8). Both mutant runs close on **251 = 255 − 4**, the four being section G's `SKIP G6` shipped-location assertions, absent from any run whose `$TOOL` is not the shipped binary.
-- Live (measured 2026-09-30): `./tools/regression-run` → **68 suites** discovered — the suite count this file quotes as current, and the only place it is quoted as current. Machine-checked by `tests/test_registry_coverage.sh` section F: that section re-reads this line and compares it with `regression-run --list` (the same `discover()` a run uses), so adding a suite to `tests/` turns it red until this line is refreshed, a second `- Live:` figure anywhere in this file is `figure_duplicate`, and every `<N> suites` figure elsewhere in this file must carry a `YYYY-MM-DD` on its own line. Assertion totals are printed by the tool itself and are quoted here only as dated history, never as the live claim. *(Refreshed 2026-09-30 from **63** by the run that added `tests/test_start_page.php` — the refresh is what clears `VIOLATION figure_stale 63`, which had made section F's controls read 2 violations where they assert exactly one, i.e. 26 reds nobody's code caused; 66 of the 67 are pre-existing suites counted for the first time here.)*
+- Live (measured 2026-09-30): `./tools/regression-run` → **70 suites** discovered — the suite count this file quotes as current, and the only place it is quoted as current. Machine-checked by `tests/test_registry_coverage.sh` section F: that section re-reads this line and compares it with `regression-run --list` (the same `discover()` a run uses), so adding a suite to `tests/` turns it red until this line is refreshed, a second `- Live:` figure anywhere in this file is `figure_duplicate`, and every `<N> suites` figure elsewhere in this file must carry a `YYYY-MM-DD` on its own line. Assertion totals are printed by the tool itself and are quoted here only as dated history, never as the live claim. *(Refreshed twice on 2026-09-30: **63 → 68** by the run that added `tests/test_start_page.php`, then **68 → 70** when `tests/test_onboarding_baseline.php` and, minutes later, a concurrent shift's `tests/test_heading_order.php` landed — the second number counts the tree `--list` was actually run on (70 files in `tests/`), not a wish list, and the refresh is what clears `VIOLATION figure_stale 63`, which had made section F's controls read 2 violations where they assert exactly one, i.e. 26 reds nobody's code caused; 66 of the 67 are pre-existing suites counted for the first time here.)*
- History (dated): 2026-09-26 → `40 suites, 3396 passed, 0 failed, 0 skipped`, exit 0, 4m30s, shape histogram `bare=2, fence=30, results=2, suite=6` — the figure this bullet was still showing on 2026-09-28, i.e. five suites stale, which is the defect queue item (63) closed. The movement over `[0.4.65]`'s **3313 closes exactly: +83 = `test_regression_run.sh` 110 → 193**, no other suite moved. **`[0.4.67]`'s movement (re-read after the run, not carried): `40 · 3396 + 107 = 41 · 3503`, whole delta `test_queue_source.sh` 0 → 107, shape `suite` → histogram `bare=2, fence=30, results=2, suite=7`.** Baseline live on the real tree: `--only regression_run --save-baseline` → record of 193; the same suite again → *"no movement; 1 of 1 shared suite(s) unchanged"*, closure OK; `--only ts_ordering --baseline` against that record → `added test_ts_ordering.php`, `removed test_regression_run.sh`, **`totals delta -186` = `attributed -186`** (−193 + 7), `CLOSURE OK`, exit 0.
**Status**: Built ✅ 2026-09-26 (193/193; closes `[0.4.65]`'s PROGRESS queue item (1) — the full-regression figure this line used to quote lives only on the dated `- Live:` line above since (63))
@@ -3897,3 +3897,43 @@ and never enters this repository.
(exit 1), not a warning.
- **Never overwrites.** An id that is already staged exits 1 with `EXISTS:` and
leaves the existing file untouched.
+
+## test_onboarding_baseline.php
+
+**Purpose**: `team/ONBOARDING.md` calls its "Verified baseline" table *measured,
+not remembered* — each cell read from the live source named below it. Nothing
+kept it measured. This suite re-reads the table against the live machine, and
+covers the other half of what the file is for: it must exist **before** the next
+intern arrives, so the failure it reddens for first is a new `Working Student`
+persona in `team/` with no onboarding written up anywhere.
+
+**Location**: `/data/repo/tests/test_onboarding_baseline.php`
+
+**Usage**:
+```
+php tests/test_onboarding_baseline.php
+```
+
+**Exit codes**:
+- `0` - all assertions passed
+- `1` - one or more assertions failed
+
+**What it reads**: the doc itself (forward coverage + reverse pointers), then
+four live facts — `team/*.md`, `agent-logs/identity-*.md`, `/home/*/Maildir`
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && ls tests/ | wc -l; ls tests/ | tail -4; echo "=== live figure ==="; grep -n "^- Live" tools/REGISTRY.md; echo "=== discovered ==="; ./tools/regression-run --list 2>/dev/null | tail -3; echo "=== coverage live detail ==="; bash tests/test_registry_coverage.sh 2>&1 | grep -iE "live tree|VIOLATION [a-z]" | head -10
70
test_trust_mobile.php
test_ts_ordering.php
test_vhost_ui_smoke.sh
test_webmail_session_routing.php
=== live figure ===
66:- Live: `domain-availability-check gladex.de` → exit 3 (taken); a free `.de` → exit 0; `--format human gladex.de` → `TAKEN` with all three sources listed.
115:- Live: `budget-show` → 0; `--format json` → balanced 5.00 − 1.50 = 3.50; `/api/budget` on :8000/:8001 → same numbers (PHP parses the ledger independently)
181:- Live: `dns-verify gladex.de` → exit 0, `gladex.de BOGUSTYPE` → exit 2 (was 0 + fabricated record), `--server 203.0.113.1 --timeout 1` → exit 4 (was 3), `this-domain-should-be-available-12345.de` → exit 3 (no records), `--format human … NS` → human-readable NS records
733:- Live (2026-09-25, after this step): `promote-dev-to-prod --dry-run --force --format json` →
740:- Live: `promote-dev-to-prod --dry-run` → exit 5 while `reviewer-to-main/` is empty
745:- Live (2026-09-25, `[0.4.47]`): `promote-dev-to-prod --dry-run --force --format json`
833:- Live: `ip-drift-check --format json --domain gladex.de` → exit 0, `drift:false` (tunnel up); `--help` → 0.
1136:- Live, content-agnostic (no amount pinned, so a future purchase or cleanup cannot spuriously redden it): a real `disk-show --format json` exits **0** with `/` at **77.5 %** and `/data` at **5.1 %**, watches `/` and `/data`, every reclaimable row carrying name/path/note
2311:- Live: `smtp-relay-probe` → exit 0; `:587` `:465` deny `554 5.7.1`, public path denies `454 4.7.1`, all four endpoints `banner_ok=true`; `--format human` → per-endpoint verdict + rcpt reply
2362:- Live: `source-sync-check` → `exit 0`, 42 files across dev+prod in sync (after the 2026-09-24 drift fix); same via `/data/tools` → `repo=/data/repo`, exit 0 (was exit 3)
2703:- Live: HEAD → exit 0 (176 files — **174 → 176 with `[0.4.65]`**, its own `tools/regression-run` + `tests/test_regression_run.sh` going from untracked to tracked (`linted.bash` 24 → 25, `linted.python` 11 → 12), following **173 → 174 with `[0.4.64]`**; the pre-commit run reads **174** with `bash 24` / `python 11` because those blobs are not there yet — the stale-live-number class, re-read after the commit below — 45 module files compile clean in ~1.6s. **`[0.4.66]` pre-commit read: exit 0, `files_total 176`, `linted {bash 25, go 43, json 11, php 32, python 12}`, `changelog_version entries 70, unique 70, duplicates []`** — both changed files were already tracked, so the post-commit prediction is **176 unchanged** with `entries 71` once `[0.4.66]` lands, re-read after the commit rather than carried. **`[0.4.67]` pre-commit read: exit 0, `files_total 176`, `linted {bash 25, go 43, json 11, php 32, python 12}`, `changelog_version entries 71, unique 71, duplicates []`** — this entry adds two **untracked** files (`tools/queue-source-check`, extensionless `python3` shebang → `linted.python`; `tests/test_queue_source.sh`, `.sh` → `linted.bash`) plus its own heading, so the post-commit prediction is **178** with `bash 26`, `python 13` and `entries 72`, re-read after the commit rather than carried) with `changelog_version` = `attempted true, entries 70, unique 70, unparseable 0, duplicates [], ok true` (**69 → 70 with `[0.4.65]`**, following **68 → 69 with `[0.4.64]`**: the count is read from the COMMITTED blob, so it is re-read after the append commits rather than carried over — it read 68 while `[0.4.64]` was still uncommitted, which is the whole point of re-reading; the working-tree count was verified the anchored way, `grep -c '^## \['` → 69 with `uniq -d` empty, because the greedy `sed 's/.*\[\([^]]*\)\].*/\1/'` form reports **5 phantom duplicates** on this tree — 0.4.31/0.4.40/0.4.44/0.4.49/0.4.62 — by taking the last bracket in a heading that cites other versions. The **file** count is 173, not the 171 drafted mid-run: `[0.4.63]`'s own two mailbox files were untracked when that number was written and tracked once it committed, so 171 → 173 is this entry's own movement rather than a count carried); `--sha 219fd8f` → exit 1 naming `tests/test_mailbox_a11y.php:208 [php]`; `--sha 395b9b5` → exit 1 naming `.../status_test.go:5 [go-compile]`; unknown rev / non-repo → exit 3; `--sha probe-r9` → exit 3 with `requested_sha: probe-r9` (the R16 parity reference, live); `--format yaml` → exit 2 with **usage on stderr and an empty stdout** (no format could be read, so none is invented — `[0.4.62]`); **`--format json` + a bad argv → exit 2 with a 384-byte 15-key object on stdout and 0 bytes on stderr** (`--timeout abc`, `--nonsense`, `--timeout 0`, empty `--sha`, and the failing token placed *before* `--format`), while the same argv in human mode still gives argparse's `usage:`+`error:` with **stdout 0 bytes**; `--help` (**106 lines**, was 57 before the epilog stopped carrying its own prose, 102 before the exit-3 clause widened, 103 through `[0.4.61]`, **+3 for `[0.4.62]`'s widened exit-2 clause**) renders all seven docstring blocks verbatim under their labels; a copy with a heading renamed → `repo-lint: ERROR refusing to run - docstring section missing or empty …` + ` 'env:' -> 'Environment:'` → **exit 3**, stderr only, and under `--format json` the **same refusal as an object** — `ok false`, `exit_code 3`, `error` naming the pair, **stderr 0 bytes** — which is the `| jq` consumer `[0.4.60]`'s queue described, now parsing (`--format=json` → 3; `--form json` → 3; `-- --format json` → no JSON on stdout; `--format yaml` on the broken copy → refusal only, no `usage:` leak) — **and on that same broken copy `--format json --timeout abc` now yields the 458-byte refusal object with `exit_code 3` instead of falling back to `human`**, which is `[0.4.61]`'s own queue item struck as actioned. **`[0.4.82]` pre-commit read**: exit 0, `files_total 192`, `linted {bash 34, go 43, json 11, php 35, python 14}`, `changelog_version entries 86, unique 86, duplicates [], citations_seen 2289, citations_in_series 2246, citations_missing [], series [0.1, 0.2, 0.3, 0.4]`, human line `changelog-version: 86 changelog version heading(s), 86 unique, 2289 citation(s) checked, 0 missing` — all six paths this step touches were **already tracked**, so `files_total` is predicted **unchanged at 192** and `entries` becomes **87** once `[0.4.82]` lands (the citation counts move with the new prose and are therefore re-read after the commit, never carried). **Re-read after `34d1bb2`: exit 0, `files_total 192`, `entries 87`, `unique 87`, `duplicates []`, `citations_missing []` — both predictions hit**; the citation counts read `2367 / 2280 / 0` on that pass and move again with each commit's own prose, which is why they are quoted as a measurement and never as a constant.
2770:- Live (measured 2026-09-30): `./tools/regression-run` → **70 suites** discovered — the suite count this file quotes as current, and the only place it is quoted as current. Machine-checked by `tests/test_registry_coverage.sh` section F: that section re-reads this line and compares it with `regression-run --list` (the same `discover()` a run uses), so adding a suite to `tests/` turns it red until this line is refreshed, a second `- Live:` figure anywhere in this file is `figure_duplicate`, and every `<N> suites` figure elsewhere in this file must carry a `YYYY-MM-DD` on its own line. Assertion totals are printed by the tool itself and are quoted here only as dated history, never as the live claim. *(Refreshed twice on 2026-09-30: **63 → 68** by the run that added `tests/test_start_page.php`, then **68 → 70** when `tests/test_onboarding_baseline.php` and, minutes later, a concurrent shift's `tests/test_heading_order.php` landed — the second number counts the tree `--list` was actually run on (70 files in `tests/`), not a wish list, and the refresh is what clears `VIOLATION figure_stale 63`, which had made section F's controls read 2 violations where they assert exactly one, i.e. 26 reds nobody's code caused; 66 of the 67 are pre-existing suites counted for the first time here.)*
=== discovered ===
test_vhost_ui_smoke.sh
test_webmail_session_routing.php
result: 70 suite(s) discovered, none run (exit 0)
=== coverage live detail ===
PASS: A1 live tree: checker exits 0 (fully covered)
PASS: A2 live tree: no ERROR line (an unread input is never a pass)
PASS: A3 live tree: zero violations
PASS: A4 live tree: SUMMARY line present
PASS: C1d VIOLATION unregistered brand-new-tool
PASS: C2d VIOLATION unregistered budget-show
PASS: C3d VIOLATION stale_section ghost-tool
PASS: C4d VIOLATION stale_section test_renamed_away.sh
PASS: C5c VIOLATION incomplete_section dns-verify:usage
PASS: C6c VIOLATION incomplete_section healthcheck:purpose
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && bash tests/test_registry_coverage.sh 2>&1 | tail -2; echo "=== status ==="; git status --short --branch; echo "=== log ==="; git log --oneline -3
=== Results: 213 passed, 0 failed ===
=== status ===
## main...origin/main [ahead 3]
=== log ===
c69d229 identity mia shift 2026-09-30T06:43Z
5aeb9f2 mia: onboarding baseline is checked against the live machine, not trusted
f756608 identity aylin shift 2026-09-30T06:26Z
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git push origin main 2>&1 | tail -3; git status --short --branch; bash tests/test_gladex_monitor.sh 2>&1 | tail -2
To git://git.gladex.de/gladex.git
e1cfcab..c69d229 main -> main
## main...origin/main
failed: 0
summary: 27 assertions, 27 passed, 0 failed
> 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)
[Wed Sep 30 08:49:27 2026] 127.0.0.1:44546 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44546 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44556 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44556 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44572 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44572 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44580 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44580 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44582 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44582 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44594 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44594 Closing [Wed Sep 30 08:49:27 2026] 127.0.0.1:44606 Accepted [Wed Sep 30 08:49:27 2026] 127.0.0.1:44606 Closing [Wed Sep 30 08:50:05 2026] 127.0.0.1:53474 Accepted [Wed Sep 30 08:50:05 2026] 127.0.0.1:53474 Closing [Wed Sep 30 08:50:15 2026] 127.0.0.1:32906 Accepted [Wed Sep 30 08:50:15 2026] 127.0.0.1:32906 Closing [Wed Sep 30 08:50:15 2026] 127.0.0.1:32922 Accepted [Wed Sep 30 08:50:15 2026] 127.0.0.1:32922 Closing [Wed Sep 30 08:50:15 2026] 127.0.0.1:32924 Accepted [Wed Sep 30 08:50:15 2026] 127.0.0.1:32924 Closing [Wed Sep 30 08:50:15 2026] 127.0.0.1:32938 Accepted [Wed Sep 30 08:50:15 2026] 127.0.0.1:32938 Closing [Wed Sep 30 08:50:15 2026] 127.0.0.1:32952 Accepted [Wed Sep 30 08:50:15 2026] 127.0.0.1:32952 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50706 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50706 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50708 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50708 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50722 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50722 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50728 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50728 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50744 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50744 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50750 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50750 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50754 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50754 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50764 Accepted [Wed Sep 30 08:50:32 2026] 127.0.0.1:50764 Closing [Wed Sep 30 08:50:32 2026] 127.0.0.1:50780 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50780 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50792 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50792 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50794 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50794 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50808 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50808 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50810 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50810 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50818 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50818 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50834 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50834 Closing [Wed Sep 30 08:50:33 2026] 127.0.0.1:50844 Accepted [Wed Sep 30 08:50:33 2026] 127.0.0.1:50844 Closing [Wed Sep 30 08:50:42 2026] 127.0.0.1:46212 Accepted
Generated 2026-09-30 06:50:42 UTC · Gladex.de