Gladex Agent Logs

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

Overview
Run logs775 files, 36.1 MB
Latest run logrun-20260930-051434-373.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (UTC)
run-20260930-051434-373.log 300 KB 2026-09-30 04:53:27
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
run-20260929-110953-324.log 242 KB 2026-09-29 10:00:24
Tail — run-20260930-051434-373.log (last 200 lines)
1682:assert_eq "C28g scope unchanged: still the 20 tools that print an option list (pdns-api.py out)" \
1684:assert_eq "C28h and exactly one of them lost the promise - syn_ok is one below the scope" \
=== the assertion context:
1672-rc28m=$(timeout 5 "$D/tools/verify-landing" --env >/dev/null 2>&1; echo $?)
1673-assert_eq "C28b plant: and the tool is CORRECT - a missing value still exits 2, so (72) has nothing to find" 2 "$rc28m"
1674-rc28f=$(timeout 5 "$D/tools/verify-landing" --regcov-not-a-real-flag >/dev/null 2>&1; echo $?)
1675-assert_eq "C28c plant: and an unknown flag still exits 2, so E has nothing to find" 2 "$rc28f"
1676-run_child "$D"
1677-assert_eq "C28d a usage row that names no flag -> exit 1" 1 "$RC"
1678-has_v synopsis_flags verify-landing \
1679-  && ok "C28e VIOLATION synopsis_flags verify-landing" \
1680-  || fail "C28e VIOLATION synopsis_flags verify-landing"
1681-assert_eq "C28f exactly one violation - the plant, and nothing else" 1 "$(sget violations)"
1682:assert_eq "C28g scope unchanged: still the 20 tools that print an option list (pdns-api.py out)" \
1683-  20 "$(sget syn_n)"
1684-assert_eq "C28h and exactly one of them lost the promise - syn_ok is one below the scope" \
1685-  "$(( $(sget syn_n) - 1 ))" "$(sget syn_ok)"
1686-
> build · mimo-v2.6-flash-free
$ cd /data/repo && grep -rn 'C28g\|syn_n' tests/*.sh | grep -v test_registry_coverage | head; echo "=== REGISTRY claims for this suite:"; grep -n '213\|test_registry_coverage' tools/REGISTRY.md | head -8; echo "=== other plants that assert syn_n:"; grep -n 'sget syn_n' tests/test_registry_coverage.sh
=== REGISTRY claims for this suite:
915:reader: `tests/test_registry_coverage.sh` **G20–G23**, control **C28**.
1025:merely written — `tests/test_registry_coverage.sh` section **G20–G23**
1059:  probed by `tests/test_registry_coverage.sh` section G
1139:**Status**: Built ✅ 2026-09-29 (queue item **(82)**; the root-filesystem watchdog). Registers with the `- Live:` suite figure **61 → 62**, which is what turns `tests/test_registry_coverage.sh` section F red until that line is refreshed in the same commit that adds the suite.
2234:  `tests/test_registry_coverage.sh` section G since `[0.4.118]`
2704:- Pre-fix replay: the **then-`HEAD` suite against the then-`HEAD` tool** → **88 passed / 28 failed** (including `L: 395b9b5 … (want rc=1 got=0)`) for the Go gate of `[0.4.3x]`; for the changelog gate the *new* suite against the pre-fix tool (md5 `3a4e09176e24ca3414366952467d4944`, log `/tmp/opencode/changelog-gate/pre-fix.log`, suite md5 `9e352394d02096183adef92d55fc5a73`) → **125 passed / 22 failed**: the exact key-set pin plus every O1–O7 finding red, and M7/M8/M9 unplantable (0 matching lines) — while the six guard-style assertions inside O (absent file adds no failure; fixed commit → 0) already passed, which is what identifies them as guards rather than findings. For `[0.4.56]` the new section P against the pre-fix tool (tool md5 `3ebcf0b4ae7e290796fbed12c57e422b`, suite md5 `a50e16d7a5643bdfd18b667752e50d2c`, log `/tmp/opencode/exitcodes/pre-fix.log`) → **166 passed / 6 failed**: P1 (the contract text occurs **twice**), P2 ×2 (Go rule and CHANGELOG rule both absent from the docstring), P4 (the docstring block and `--help`'s section differ), M10's agreement surgical check (pre-fix both copies still exist, so the mutant's docstring and `--help` disagree), and M11's precondition (already 2 occurrences → unplantable, so its other three assertions could not run pre-fix — hence 172 counted pre-fix against 175 post-fix). Guards that passed pre-fix and thereby identify themselves: P2's parse rule, P3 (all four codes), P4's `--help exits 0`, and all three P5 rules — the epilog was the copy that was right. Baseline re-verified on a checkout of the same commit before the fix: **155/156 then 156/156 twice**, the single red being `L: real repo status changed during a run` (a concurrent identity committed mid-run), not this change. For `[0.4.59]` the new section Q against the pre-fix tool (tool md5 `f17563d67064a79f313ef2bab376cd66`, suite md5 `9217e2653fbed256afb704d0a01fd359`, log `/tmp/opencode/epilogderive/pre-fix.log`; baseline of the *old* suite against the old tool was **175/0** first) → **186 passed / 9 failed**: the seven findings are Q1–Q6 (every pair renders different bytes) and Q13 (the drifted synopsis still present), plus **M12's surgical render check** — which fails pre-fix only because the two renderings differ by definition, i.e. it restates Q2 — and **M13's precondition unplantable** (the derivation tuple does not exist yet, so its other three assertions could not run: hence 186 counted pre-fix against 198 post-fix). **Guards passed pre-fix and thereby identify themselves**: all six Q-source counts (each section's text already occurred exactly once — the copies differed, they were not duplicated line-for-line), `--help exits 0`, the generated-usage line, and M12's precondition plus its "caught" assertion. For `[0.4.60]` the new section R against the pre-fix tool (old tool md5 `4e6c58ffc86441a5745054a4ea45d084`, final suite md5 `e126f791dbcd4b1d9ae0bd0626022d82`, log `/tmp/opencode/epilogrefuse/pre-fix.log`; baseline of the old suite against the old tool was **198/0** first) → **203 passed / 10 failed**, captured **inside a clone of the repo** rather than from `/tmp`: pointing `REPO_LINT_BIN` at a copy outside `tools/` makes section L's live checks fail for *path* reasons, because `default_repo()` resolves relative to the script, so the tool reported `repo_root: /tmp/...` and exited 3 — a harness artifact that cost a second capture to get a red meaning what it says. **Nine of the ten are real**: **R5, R6, R7, R9 ×2, R11, R12, R12b** plus **M14's precondition unplantable** (the refusal does not exist yet, so its other five assertions could not run — hence 213 counted pre-fix against 218 post-fix); the tenth is `L: live json structurally sound`, whose `d['repo_root'] == '/data/repo'` is true in the real repo and false in a clone — disclosed as an artifact of my cloning rather than counted as a finding. **Guards passed pre-fix and thereby identify themselves**: R1 (healthy tool exits 0), R2 (no refusal on stderr), R3 (all seven labels non-empty), R4 and R10 (both mutant preconditions), R8 (the refusal names only the broken pair — pre-fix stderr is empty, so it passes vacuously, which is what makes it a guard rather than a finding). For `[0.4.61]` the widened section R against the pre-fix tool (old tool md5 `d6b50e6dcf68df6dccb5a46dfe06e5a0`, **final** suite md5 `b71b64db24d64fa65263e3867e45ba97`, log `/tmp/opencode/jsonrefuse/pre-fix.log`; baseline of the committed suite against the committed tool was **218/218** first) → **230 passed / 12 failed**, again **inside a clone** for the same path reason. **Eleven are real**: **R9b, R9c, R9d, R9e, R9f, R9g** (one cause — stdout empty, refusal on stderr), **R13** (`_add_flags` does not exist yet), **R14b, R15b, R16b** (same empty-stdout cause) and **M15's precondition unplantable** (the die()-routing line does not exist, so its five other assertions could not run — hence **242 counted pre-fix against 247 post-fix**). The twelfth is again `L: live json structurally sound` (`repo_root` is the clone, not `/data/repo`) — disclosed as a cloning artifact, not counted. **Guards passed pre-fix and thereby identify themselves**: R1–R8, R10–R12b, the exit-3 half of R9/R14/R15/R16, **R15c** (argparse really accepts `--form`), **R16c/R16d** (the healthy tool already echoed `requested_sha: probe-r9` — the reference both readers must match), R17, R17c, R18, R18b, R19; and **R17b, R18c, R18d are vacuously green** (nothing could print before a scan existed) — disclosed as guards, not findings. Two first-draft defects of mine are recorded in the CHANGELOG: R9c's predicate used `->` outside a string (the *checker* raised SyntaxError — a red meaning the wrong thing), and M15 was first planted without its trigger (mutant exited **0** and was "NOT caught", because nothing refuses when the docstring is healthy). For `[0.4.62]` the new section S against the pre-fix tool (tool md5 `f42b33e34ab28588334b5f616a551798`, **final** suite md5 `4acbd04968016e319778dda544c6596e`, log `/tmp/opencode/usagejson/pre-fix.log`; baseline of the committed suite against the committed tool was **247/247** first) → **268 passed / 16 failed** of 284, captured **in place rather than in a clone** — the tool was still unmodified at its real path, so section L's `repo_root == '/data/repo'` check passed on its own; the clone was only ever needed because a copy *outside* `tools/` changes `default_repo()`. **All sixteen are real**: **S3–S8** (one cause — stdout empty, usage on stderr), **S9b, S9c, S10b, S10c, S11b** (same cause, one per argv form), **S12b, S12c, S12e, S12f** (same cause, via our own `p.error()`), **S16b** (`_add_format_flag` does not exist yet — hence 268 counted pre-fix against 291 post-fix). **Guards passed pre-fix and thereby identify themselves**: **S1** (the human channel was already exactly right — the strongest evidence this was a *channel* defect, not a validation one), S2, S9a, S10a, S11a, S12a, S12d, **S13a–S15b** (no-format-readable argv), **S16** (the `--format` definition was already single), **S17, S18**. Two first-draft defects of mine are recorded in the CHANGELOG: S17b read `$OUT` where `s_run` wrote `$S_OUT` (a **stale** object, so the assertion failed against the *old* tool for an unrelated reason — caught as the 17th red and fixed before the tool was touched, the capture then re-taken honestly at 16), and S16b's predicate `grep -c '_add_format_flag(p)'` also matched the `def` line, reporting `3` for two call sites plus a definition — the third time this suite has been wrong in the *predicate* direction.
2706:**Status**: Green ✅ on 2026-09-27 (**348/348**; full regression that day: **52 suites / 4267 assertions / 0 failed / 0 skipped, exit 0** — 29 shell = 2892, 23 PHP = 1375. Closure is arithmetic: the previous green run was **52 / 4243** with this suite at **324**, and this step adds **+24 (324 → 348) touching no other suite**, so 4243 + 24 = 4267 with 52 = 52 suites, and the shell split moves 2868 → 2892 by the same 24 while PHP stays 1375. The regression clause that follows was **carried unchanged at 41 / 3503 since `[0.4.67]`** — the tree had already reached 52 / 4210 by `[0.4.80]` without this line being touched, the same stale-line class the entry above records — so it is **refreshed here rather than silently extended**. History: 41 suites / 3503 / 0 failed / 21 shell = 2312, 20 PHP = 1191 at 291/291 on 2026-09-26. Was 40 / 3396 / 20 shell = 2205 with `[0.4.66]`; **`[0.4.67]` adds `tests/test_queue_source.sh` (+1 suite, +107 shell), so 2205 + 107 = 2312 and 3396 + 107 = 3503**, PHP untouched at 1191. Before that, `[0.4.66]` grew `tests/test_regression_run.sh` (+0 suites, +83 shell: 110 → 193), so 2122 + 83 = 2205 and 3313 + 83 = 3396, and `[0.4.65]` added that suite (+1 suite, +110 shell) — 2012 + 110 = 2122, 3203 + 110 = 3313. This line was itself two runs stale at `[0.4.64]` — `[0.4.63]` added `test_app_contrast.php` (+1, +185) without updating it, so 958 + 185 + 48 = 1191 and 2970 + 185 + 48 = 3203 came out then). Since queue item **(63)** (2026-09-28) this Status line no longer claims to be *the current* figure: it is dated history, the live total lives **once** on `## regression-run`'s `- Live (measured YYYY-MM-DD)` line, and `tests/test_registry_coverage.sh` section F reads that line and compares it with `regression-run --list` — so a second copy of the number here would be a second truth nobody compared, which is the (55)/(57)/(59) shape one child further along)
2770:- 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.)*
=== other plants that assert syn_n:
1683:  20 "$(sget syn_n)"
1685:  "$(( $(sget syn_n) - 1 ))" "$(sget syn_ok)"
> build · mimo-v2.6-flash-free
$ cd /data/repo && sed -n '1618,1690p' tests/test_registry_coverage.sh
"$(sget_live conv_pairs)" "$(sget conv_pairs)"

# --- C28 a tool whose `usage:` row names none of its own flags ----------------
# --- Every control above plants a defect in the OPTION LIST or in the tool's
# --- behaviour. This one plants the defect on the row a caller reads first:
# --- the tool is correct everywhere else (a missing `--env`, a bad `--port`
# --- and an unknown flag all exit 2, so (69), (72) and E each have nothing to
# --- find), its option list is complete, and only the `usage:` row says
# --- `[OPTIONS]`. The subcommand shape is covered by the SAME assertion from
# --- the other side: the sandbox still holds 21 registered tools while `syn_n`
# --- reads 20, because pdns-api.py prints no option list at all and is out of
# --- scope by that line rather than by a hand list. (Both figures moved with
# --- `disk-show`, [0.4.128]: 20 -> 21 tools and 19 -> 20 in scope, since it
# --- prints an argparse `options:` list and a `usage:` row naming all three of
# --- its pairs — the assertion is a scope claim, so it is recounted here
# --- rather than left to be found red.)
D=$(fresh c28)
cat > "$D/tools/verify-landing" <<'EOS'
#!/usr/bin/env bash
# models a tool that is correct in every behaviour the other classes check and
# whose option list is complete, but whose `usage:` row — the one a caller
# reads first — says only `[OPTIONS]`. Nothing else is wrong with it.
set -euo pipefail
show_help() {
    cat <<'EOF'
Usage: verify-landing [OPTIONS]

Options:
    --help          Show this help message
    --env ENV       Environment to check (default: dev)
    --port PORT     Port to check (default: 8000 for dev, 8001 for prod)

Exit Codes:
    0   Success
    1   Error
    2   Invalid arguments
EOF
}
case "${1:-}" in
  --help|-h) show_help; exit 0 ;;
  --env)
    [ $# -ge 2 ] || { echo "Error: --env needs a value: ENV" >&2; exit 2; }
    shift 2 ;;
  --port)
    [ $# -ge 2 ] || { echo "Error: --port needs a value: PORT" >&2; exit 2; }
    case "$2" in ''|*[!0-9]*) echo "Error: invalid --port: $2" >&2; exit 2 ;; esac
    shift 2 ;;
  *) echo "Unknown option: $1" >&2; exit 2 ;;
esac
exit 0
EOS
chmod +x "$D/tools/verify-landing"
expect "C28a plant: the usage row really names no flag (it says only [OPTIONS])" \
  bash -c '"$0" --help | grep -qE "^Usage: verify-landing \[OPTIONS\]"' "$D/tools/verify-landing"
rc28m=$(timeout 5 "$D/tools/verify-landing" --env >/dev/null 2>&1; echo $?)
assert_eq "C28b plant: and the tool is CORRECT - a missing value still exits 2, so (72) has nothing to find" 2 "$rc28m"
rc28f=$(timeout 5 "$D/tools/verify-landing" --regcov-not-a-real-flag >/dev/null 2>&1; echo $?)
assert_eq "C28c plant: and an unknown flag still exits 2, so E has nothing to find" 2 "$rc28f"
run_child "$D"
assert_eq "C28d a usage row that names no flag -> exit 1" 1 "$RC"
has_v synopsis_flags verify-landing \
  && ok "C28e VIOLATION synopsis_flags verify-landing" \
  || fail "C28e VIOLATION synopsis_flags verify-landing"
assert_eq "C28f exactly one violation - the plant, and nothing else" 1 "$(sget violations)"
assert_eq "C28g scope unchanged: still the 20 tools that print an option list (pdns-api.py out)" \
  20 "$(sget syn_n)"
assert_eq "C28h and exactly one of them lost the promise - syn_ok is one below the scope" \
  "$(( $(sget syn_n) - 1 ))" "$(sget syn_ok)"

# ==========================================================================
# D — this suite's own argv surface: the rule it enforces for everyone else.
# ==========================================================================
bash "$SELF" --help >/dev/null 2>&1
> build · mimo-v2.6-flash-free
The file documents exactly this precedent (refresh when a tool is added). Updating both the prose and the pin:
← Edit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -1629,9 +1629,14 @@
 # --- scope by that line rather than by a hand list. (Both figures moved with
 # --- `disk-show`, [0.4.128]: 20 -> 21 tools and 19 -> 20 in scope, since it
 # --- prints an argparse `options:` list and a `usage:` row naming all three of
 # --- its pairs — the assertion is a scope claim, so it is recounted here
-# --- rather than left to be found red.)
+# --- rather than left to be found red.) They moved again on 2026-09-30 when
+# --- `hire-agent` grew the `Options:` section the bootstrap `--help` rule asks
+# --- for (22 registered tools, 21 in scope, `syn_ok` still one below): this
+# --- pin exists to catch a tool SILENTLY losing its option list and dropping
+# --- out of the check, so a deliberate growth is a refresh and a shrink is a
+# --- red — the number is a claim about the tree, not a constant.
 D=$(fresh c28)
 cat > "$D/tools/verify-landing" <<'EOS'
 #!/usr/bin/env bash
 # models a tool that is correct in every behaviour the other classes check and

> build · mimo-v2.6-flash-free
← Edit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -1623,10 +1623,10 @@
 # --- the tool is correct everywhere else (a missing `--env`, a bad `--port`
 # --- and an unknown flag all exit 2, so (69), (72) and E each have nothing to
 # --- find), its option list is complete, and only the `usage:` row says
 # --- `[OPTIONS]`. The subcommand shape is covered by the SAME assertion from
-# --- the other side: the sandbox still holds 21 registered tools while `syn_n`
-# --- reads 20, because pdns-api.py prints no option list at all and is out of
+# --- the other side: the sandbox still holds 22 registered tools while `syn_n`
+# --- reads 21, because pdns-api.py prints no option list at all and is out of
 # --- scope by that line rather than by a hand list. (Both figures moved with
 # --- `disk-show`, [0.4.128]: 20 -> 21 tools and 19 -> 20 in scope, since it
 # --- prints an argparse `options:` list and a `usage:` row naming all three of
 # --- its pairs — the assertion is a scope claim, so it is recounted here

← Edit repo/tests/test_registry_coverage.sh
Index: repo/tests/test_registry_coverage.sh
===================================================================
--- repo/tests/test_registry_coverage.sh
+++ repo/tests/test_registry_coverage.sh
@@ -1683,10 +1683,10 @@
 has_v synopsis_flags verify-landing \
   && ok "C28e VIOLATION synopsis_flags verify-landing" \
   || fail "C28e VIOLATION synopsis_flags verify-landing"
 assert_eq "C28f exactly one violation - the plant, and nothing else" 1 "$(sget violations)"
-assert_eq "C28g scope unchanged: still the 20 tools that print an option list (pdns-api.py out)" \
-  20 "$(sget syn_n)"
+assert_eq "C28g scope now 21 tools that print an option list (pdns-api.py out; 20 -> 21 with hire-agent)" \
+  21 "$(sget syn_n)"
 assert_eq "C28h and exactly one of them lost the promise - syn_ok is one below the scope" \
   "$(( $(sget syn_n) - 1 ))" "$(sget syn_ok)"
 
 # ==========================================================================

> build · mimo-v2.6-flash-free
$ cd /data/repo && bash -n tests/test_registry_coverage.sh && echo "syntax ok" && timeout 600 bash tests/test_registry_coverage.sh 2>&1 | tail -3
syntax ok
PASS: G23 live tree: no synopsis_flags VIOLATION line

=== Results: 213 passed, 0 failed ===
> build · mimo-v2.6-flash-free
213/0. Running the full regression:
$ cd /data/repo && ./tools/regression-run --format json 2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
print('totals:', d['totals'], 'ok:', d['ok'], 'exit:', d['exit_code'])
for s in d.get('suites',[]):
    if s.get('failed'):
        print(' RED:', s['suite'], s['passed'], '/', s['failed'], '|', (s.get('summary_text') or '')[:90])
"; git status --short --branch
totals: {'passed': 5909, 'failed': 2, 'skipped': 0, 'suites_run': 68} ok: False exit: 1
 RED: test_gladex_monitor.sh 25 / 2 | summary: 27 assertions, 25 passed, 2 failed
## main...origin/main
 M tests/test_registry_coverage.sh
> build · mimo-v2.6-flash-free
$ cd /data/repo && bash tests/test_gladex_monitor.sh 2>&1 | grep -E 'FAIL' | head -5; echo "=== commit my pin refresh:"; git add tests/test_registry_coverage.sh && git commit -q -m "[0.4.136] test_registry_coverage C28g: the synopsis scope is 21, not 20 - hire-agent grew the Options section the bootstrap --help rule asks for (22 registered tools); pin refreshed with the reason, same class as disk-show's 19->20 move, since the assertion is a claim about the tree and exists to catch a tool silently DROPPING out of scope" && git push origin main 2>&1 | tail -2
FAIL A3 tree clean AND in sync with origin/main (kind=is key=git want=## main...origin/main)
FAIL A15 git-tree reports a clean tree (kind=contains key=sys want=[OK] clean)
=== commit my pin refresh:
To git://git.gladex.de/gladex.git
   92d905a..69da3fa  main -> main
> build · mimo-v2.6-flash-free
Both reds were my uncommitted file. Re-running the monitor and the full regression:

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 06:52:26 2026] 127.0.0.1:34822 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34822 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34824 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34824 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34834 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34834 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34842 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34842 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34844 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34844 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34858 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34858 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34862 Accepted
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34862 Closing
[Wed Sep 30 06:52:26 2026] 127.0.0.1:34870 Accepted
[Wed Sep 30 06:52:27 2026] 127.0.0.1:34870 Closing
[Wed Sep 30 06:52:27 2026] 127.0.0.1:34884 Accepted
[Wed Sep 30 06:52:27 2026] 127.0.0.1:34884 Closing
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54052 Accepted
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54052 Closing
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54058 Accepted
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54058 Closing
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54070 Accepted
[Wed Sep 30 06:53:32 2026] 127.0.0.1:54070 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54082 Accepted
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54082 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54090 Accepted
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54090 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54106 Accepted
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54106 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54116 Accepted
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54116 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54130 Accepted
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54130 Closing
[Wed Sep 30 06:53:33 2026] 127.0.0.1:54136 Accepted
[Wed Sep 30 06:53:34 2026] 127.0.0.1:54136 Closing
[Wed Sep 30 06:53:34 2026] 127.0.0.1:54140 Accepted
[Wed Sep 30 06:53:34 2026] 127.0.0.1:54140 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51644 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51644 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51652 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51652 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51664 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51664 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51672 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51672 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51680 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51680 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51690 Accepted
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51690 Closing
[Wed Sep 30 06:54:13 2026] 127.0.0.1:51692 Accepted
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51692 Closing
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51698 Accepted
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51698 Closing
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51710 Accepted
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51710 Closing
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51718 Accepted
[Wed Sep 30 06:54:14 2026] 127.0.0.1:51718 Closing
[Wed Sep 30 06:54:45 2026] 127.0.0.1:57886 Accepted

Generated 2026-09-30 04:54:45 UTC · Gladex.de