Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 836 files, 42 MB |
| Latest run log | run-20261001-092806-434.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261001-092806-434.log | 318 KB | 2026-10-01 08:06:48 |
| run-20261001-080602-433.log | 406 KB | 2026-10-01 07:17:59 |
| run-20261001-065553-432.log | 373 KB | 2026-10-01 05:55:55 |
| run-20261001-050850-431.log | 523 KB | 2026-10-01 04:45:47 |
| run-20261001-042252-430.log | 198 KB | 2026-10-01 02:58:43 |
| run-20261001-032127-429.log | 327 KB | 2026-10-01 02:12:46 |
| run-20261001-022005-428.log | 263 KB | 2026-10-01 01:11:21 |
| run-20261001-020022-427.log | 205 KB | 2026-10-01 00:09:58 |
| run-20261001-015015-426.log | 153 B | 2026-09-30 23:50:16 |
| run-20261001-014008-425.log | 153 B | 2026-09-30 23:40:09 |
| run-20261001-013001-424.log | 153 B | 2026-09-30 23:30:02 |
| run-20261001-011954-423.log | 153 B | 2026-09-30 23:19:55 |
| run-20261001-010947-422.log | 153 B | 2026-09-30 23:09:48 |
| run-20261001-005940-421.log | 153 B | 2026-09-30 22:59:41 |
| run-20261001-004933-420.log | 153 B | 2026-09-30 22:49:34 |
| run-20261001-003926-419.log | 153 B | 2026-09-30 22:39:27 |
| run-20261001-002920-418.log | 190 B | 2026-09-30 22:29:20 |
| run-20261001-001913-417.log | 153 B | 2026-09-30 22:19:13 |
| run-20261001-000906-416.log | 153 B | 2026-09-30 22:09:07 |
| run-20260930-231805-415.log | 582 KB | 2026-09-30 21:59:00 |
| run-20260930-223504-414.log | 194 KB | 2026-09-30 21:07:59 |
| run-20260930-212614-413.log | 270 KB | 2026-09-30 20:24:58 |
| run-20260930-201407-412.log | 423 KB | 2026-09-30 19:16:08 |
| run-20260930-184629-411.log | 463 KB | 2026-09-30 18:04:01 |
| run-20260930-165104-410.log | 325 KB | 2026-09-30 16:36:29 |
| run-20260930-161443-409.log | 189 KB | 2026-09-30 14:41:04 |
| run-20260930-160441-408.log | 153 B | 2026-09-30 14:04:43 |
| run-20260930-155440-407.log | 153 B | 2026-09-30 13:54:41 |
| run-20260930-154440-406.log | 153 B | 2026-09-30 13:44:40 |
| run-20260930-153439-405.log | 153 B | 2026-09-30 13:34:40 |
| run-20260930-152438-404.log | 190 B | 2026-09-30 13:24:39 |
| run-20260930-151438-403.log | 190 B | 2026-09-30 13:14:38 |
| run-20260930-150437-402.log | 153 B | 2026-09-30 13:04:37 |
| run-20260930-145436-401.log | 153 B | 2026-09-30 12:54:37 |
| run-20260930-144435-400.log | 153 B | 2026-09-30 12:44:36 |
| run-20260930-143435-399.log | 190 B | 2026-09-30 12:34:35 |
| run-20260930-142434-398.log | 153 B | 2026-09-30 12:24:35 |
| run-20260930-141433-397.log | 153 B | 2026-09-30 12:14:34 |
| run-20260930-140433-396.log | 153 B | 2026-09-30 12:04:33 |
| run-20260930-135432-395.log | 153 B | 2026-09-30 11:54:33 |
| run-20260930-134431-394.log | 153 B | 2026-09-30 11:44:32 |
| run-20260930-133431-393.log | 190 B | 2026-09-30 11:34:31 |
| run-20260930-132430-392.log | 153 B | 2026-09-30 11:24:31 |
| run-20260930-131429-391.log | 153 B | 2026-09-30 11:14:30 |
| run-20260930-130429-390.log | 153 B | 2026-09-30 11:04:29 |
| run-20260930-125428-389.log | 153 B | 2026-09-30 10:54:29 |
| run-20260930-124427-388.log | 153 B | 2026-09-30 10:44:28 |
| run-20260930-123427-387.log | 153 B | 2026-09-30 10:34:27 |
| run-20260930-122426-386.log | 153 B | 2026-09-30 10:24:27 |
| run-20260930-121425-385.log | 153 B | 2026-09-30 10:14:26 |
Tail — run-20261001-092806-434.log (last 200 lines)
verdict: OK - nothing owed (0 unread, 0 open entries all replied)
exit=0
/opt/startup/dev/data/messages.db unread=0
/opt/startup/prod/data/messages.db unread=0
--- open entries:
79
0
--- budget:
=== Budget Status ===
Month: 2026-09
Allowance: 5.00 €
Spent: 1.50 € (gladex.de — registered + DNS live since 2026-09-20, 1.50/mo)
Remaining: 3.50 €
Log:
- 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.
--- git:
## main...origin/main
M CHANGELOG.md
M tests/test_regression_run.sh
M tools/REGISTRY.md
[0m$ [0mcd /data/repo && ./tools/healthcheck 2>&1 | tail -5; echo "--- source-sync:"; ./tools/source-sync-check 2>&1 | tail -3; echo "exit=$?"
HTTP: 200
Response: {"status":"ok","service":"gladex-investor-app","env":"dev","timestamp":1790841308,"version":"0.4.28"}
prod: HEALTHY
HTTP: 200
Response: {"status":"ok","service":"gladex-investor-app","env":"prod","timestamp":1790841308,"version":"0.4.28"}
--- source-sync:
prod examples/workflows 8 files OK
prod src/php 14 files OK
result: in sync — 44 file(s) across 2 env(s) (exit 0)
exit=0
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && cat >> agent-logs/PROGRESS.md <<'PEOF'
## 2026-10-01T07:56Z main-loop run — STEP 0 verified first (0 unread / 0 open, nothing owed), then **(102) LANDED: section G states where it must run — a shipped-location precondition, a skip that carries the path, and a control that runs the suite from a copy and requires it green — suite 326 → 331**
- **STEP 0 (first action, before any other work).** Direct SQL on both live DBs → `SELECT count(*) FROM messages WHERE direction='investor_to_agent' AND read=0` → **0 dev / 0 prod** (table is `messages` with a `direction` column; the prompt's `UNREAD INVESTOR MESSAGES` block was empty and the DB agrees rather than merely not contradicting it — each box's newest row is still `agent_to_investor` / `read=1`, dev **141** / prod **106**); `tools/inbox-status` → **exit 0, "OK - nothing owed (0 unread, 0 open entries all replied)"**, **79 entries / 79 handled / 0 open**, `grep '^## ' INBOX.md | grep -v HANDLED` → **0**, and the prompt's RECENT INBOX quotes only entries already struck `~~HANDLED~~`. **No investor row was owed, so none was inserted** — the thread was not written at all this run. Still his call, still open: **(93)** (public nav → LAN-only `/docs` + `/changelog`), **(97)** (redact+guard / history purge / fixtures) blocked on the founder's A/B/C answer to reply dev 141 / prod 106, and `hiring/queue/ruben-stoll.json` (the senior-role hire staged, not approved). Re-verified at the close, below.
- **The item, and why the skip rather than the hook.** **(102)** — *`tests/test_regression_run.sh` cannot be run from an isolation path: section G pins `default_repo()` to the shipped location, so a copy of `tests/` + `tools/` under `/tmp` goes 4 red before any subject of its own is reached* — was re-measured on the **unmodified** suite before a line was written: `cp -a tests tools /tmp/opencode/iso102` → **322 passed / 4 failed**, the four reds exactly `G1 live --only ts_ordering -> 0 (want=0 got=4)`, `G2 (want=13 got=0)`, `G6 (want=0 got=4)`, `G6b (want=/data/repo got=/tmp/opencode/iso102)`, with `fatal: not a git repository` printed under G1 — four harness reds, zero findings, in a run whose own mutation stayed green. Candidate **(a)** (an env hook for `REPO` beside `REGRESSION_RUN_BIN`) is **rejected on the record**: it would be a *second* way to make G green — a knob no run needs, no assertion reads, and (like section K's three hooks) a hazard if left exported — while the precondition alone answers the item: the isolation path simply stops asserting facts about a tree that is not there. The guard is `[ "$REPO" != "/data/repo" ]` → `SKIP G: shipped-location checks (suite runs from $REPO, not /data/repo)`, i.e. the rule G6 already applied to the shipped *binary*, widened to the shipped *location*.
- **What landed: one section restructured, five assertions added, no tool touched.** G1–G6d moved behind the precondition unchanged in wording; after them, **G7–G11** measure the precondition instead of trusting it — copy `tests/` + `tools/` (~3.3 MB) under `$SB/iso` **without `.git`** (the absence that reddened G1), run it with every test hook unset (`REGRESSION_RUN_BIN`, `GLADEX_REPO_DIR`, `GLADEX_TESTS_DIR`, `GLADEX_MIN_FREE_MB`, `GLADEX_PREFLIGHT_PATHS`, `GLADEX_PREFLIGHT_FIXTURE`), then require in order: exit **0** (G7), a parsed `=== Results:` line reporting **0 failed** (G8 — parsed with `sed`, so an empty or unparseable run cannot read as a pass), the `SKIP G: shipped-location checks` reason present in the copy (G9), **no** `G1 live --only ts_ordering` line in it (G10 — the guard's granularity, not merely that *a* skip happened), and ≥ **300** of the copy's assertions counted (G11, measured **317**) so a copy that skipped everything green cannot pass. The copy skips section G by the same guard, so the control cannot recurse; the suite's existing `trap` reaps it with the sandbox.
- **Measured, not claimed — four runs, one of them pre-fix**: (i) **pre-fix isolation copy** (unmodified suite, `/tmp/opencode/iso102`) → **322 / 4**, reds `G1 G2 G6 G6b`; (ii) **shipped tree, after** → **331 passed, 0 failed (60.1 s)** against **326 / 0 (30.2 s)** before the step — **5 added, 0 removed**, G1–G6d all present in the output, so the precondition did not cost the section a single assertion where it holds; (iii) **isolation copy, after** (`/tmp/opencode/iso102b`) → **317 passed, 0 failed (29.6 s)**, printing `SKIP G: shipped-location checks (suite runs from /tmp/opencode/iso102b, not /data/repo)` with **0** occurrences of the `G1` line — 317 = 331 − 14, the nine shipped-location assertions plus the five that can only be true there; (iv) **mutation-run shape** (`REGRESSION_RUN_BIN=<verbatim copy of the shipped tool>`) → **327 passed, 0 failed (61.3 s)** with `SKIP G6: … (under test: /tmp/opencode/trr-ctl-shipped-copy)`, i.e. a run whose `$TOOL` is not the shipped binary still loses **exactly the four** `G6*` assertions (331 − 4 = 327), because G7–G11 sit behind the location guard and outside the binary one — the accounting `REGISTRY.md` already recorded, now with a measurement on this side of the change.
- **Docs, written only where this step owns the words.** `tools/REGISTRY.md`, inside `## test_regression_run.sh` (the `Exit codes` bullet **326 → 331**, the `bash tests/test_regression_run.sh →` headline and its described surface, the count-history parenthetical's new **326 → 331** clause, the `Sections` **G** row, `Tests / mutations`, a dated `Status` figure) plus the one mutation-accounting sentence in `## regression-run` (the four-assertion subtraction, now with its 327/0 measurement) — no other section, no other tool. `CHANGELOG.md` gains **`[0.4.154]`** (Changed / Verified / Notes, pointer-only `### Queue` section: `tools/queue-source-check` → **exit 0**, `newest_version 0.4.154`, `newest_queue_items 0`, `frozen_items 111/111`, **110 sections**, `violations []`). Tool census unchanged (**22 tools, 31 registered sections**); the `- Live:` suite figure on `## regression-run` (measured 2026-10-01) untouched because no suite was added or removed.
- **Supporting suites, all run on this working tree after the docs**: `tests/test_registry_coverage.sh` → **280 passed, 0 failed** (the suite that re-reads `REGISTRY.md`'s figures against live runs — the gate on this step's own registry edits), `tests/test_repo_lint.sh` → **461 / 0**, `tests/test_queue_source.sh` → **181 / 0**, `tests/test_commit_gate.sh` → **41 / 0**, `php tests/test_changelog_api.php` → **86 / 0**, `php tests/test_changelog_mobile.php` → **125 / 0 / 0**, `php tests/test_app_version.php` → **39 / 0** (the changelog's *first* heading did not move — the entry is appended — so `GLADEX_APP_VERSION` stays **0.4.28**).
- **Deliberately not done, one visible item per run**: **no `app/src/php` edit → no reviewer gate and no promote** (prod untouched); **(99)**, **(103)**, **(104)**, **(97)**, **(93)** not actioned; **no executed tool under `tools/` was edited** — only `tools/REGISTRY.md` was written, and only inside `test_regression_run.sh`'s own section plus `## regression-run`'s one mutation sentence, so the tool census is unchanged (**22 tools / 31 registered sections**, the `- Live:` figure untouched); no new test suite, no new tool option, no JSON key, no `GLADEX_APP_VERSION` bump (stays **0.4.28**), no service restarted (`agent-loop` untouched — still **(99)**), **zero DNS writes** (no `pdns-api.py` call), **no mail sent**, Nextcloud `{"installed":true}`, Immich `{"res":"pong"}`, `/opt/cloud` untouched, `hiring/queue/ruben-stoll.json` unchanged and still the investor's call, no history rewrite, no other identity's file edited by me. Model spend **0.00** (free `*-free` models only; `tools/budget-show` → **5.00 / 1.50 / 3.50** for month 2026-09). The files this run writes are `tests/test_regression_run.sh`, `tools/REGISTRY.md`, `CHANGELOG.md` (`[0.4.154]`) and this entry.
- **Next-candidate queued, not actioned**: **(102) STRUCK — EXECUTED by `[0.4.154]`** (shipped-location precondition on section G, the skip that carries the path, controls G7–G11 on the copy, suite **326 → 331**, the four pre-fix reds and the three post-fix runs all measured above). Carry unchanged and all standing: (2), (4)–(8), (14), (15), (17), (18), (20), (22), (23), (25), (28), (32), (36), (39), (42), (44), (47), (48), (52), (53), (54), (56), (60), (61), (62), (66), (67), (68), (70), (99), (103), (104) unchanged, plus **(105) new from this run** — *the isolation guard's own blind spot: `[ "$REPO" != "/data/repo" ]` means a suite relocated from `/data/repo` (or run from a clone) silently loses all fourteen G assertions while staying green; candidates = assert the shipped precondition's converse where it can be true, or have `regression-run` surface a suite's SKIP lines* — deliberately not folded in, because the copy must stay green and any assertion that reddens there re-opens (102); and **(93)** (public nav → LAN-only `/docs` + `/changelog`, still the investor's call — it widens a surface), **(96) candidate (b)** (normalise `CAST(ts AS INTEGER)` on read in `app/src/php/app.php`, only if a bad row is ever detected, reviewer-gated) and **(97)** whose candidates (a) redact+guard / (b) history purge / (c) fixtures-amendment stay **blocked on the founder's A/B/C answer** to reply dev 141 / prod 106. Live head of the machinery list: **(99)**, **(103)**, **(104)**, **(105)**. Next-candidate priority after this run: **(93)** or **(97)(a)** the moment the investor answers, otherwise the oldest carried machinery item — **(99)**, noting that (99) is the dead-letter agent loop whose fix only takes effect **with a service restart**, which this loop does not do unilaterally; if that stays blocked the next in line is **(103)** (the trailing docstring sequencing paragraph carrying a behavioural sentence rendered by nothing — an eighth epilog pair with a column-0 heading).
- **Next run**: **(93)** or **(97)(a)** the moment the investor answers, otherwise **(103)**, since **(99)** still needs a service restart this loop does not perform unilaterally.
PEOF
echo appended; ./tools/queue-source-check | tail -2
appended
queue-source-check: OK - one queue: [0.4.154] pointer-only, 111 item line(s) frozen across 110 section(s), 111 PROGRESS bullet(s)
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git log --oneline -12 --format="%h %an %s"
66ce340 Atlas PROGRESS closing for queue item (101): commit f698bcc pushed, regression 75 suites 6620/2 (2 reds = shared-worktree git state of other identities, not this step), delta closes 6518+14+90=6622, gates + served 0.4.153, STEP 0 re-verified 0/0
32ea60a Sofia Brandt identity sofia shift 2026-10-01T07:27Z
2c5f8f1 Atlas identity sofia: timestamp correction to the shift entry - push landed (f698bcc..7d2223e), main back in sync, suites re-run green after the push
7d2223e Atlas identity sofia shift 2026-10-01: 0 unread (mail re-read, not remembered), 2 sent from sofia@ (queue 65E0C18086D work + 677B518086D personal, metadata only), noreply-from 0 all time, investor thread untouched; role step = my own log's applicant PII redacted (16 regions -> metadata markers, 15482 -> 15048 lines, 45 lines token-scrubbed, residual 0; landed in fdc96c5 via the loop's sweep - my hand, not my commit) and the rule now scanned repo-wide: tests/test_applications_hr.php 44 -> 53 checks (9245a2e), pre-fix replay 51/2 with 132 token hits + 16 foreign headers, fixed tree 53/0, suite count still 75 = REGISTRY - Live:
1f523fc Atlas docs(agent-logs): Jonas shift 2026-10-01 log — checks run, mail/investor no-op proof, §5-a no-ops, §5 doc change
9245a2e Atlas HR: the applicant-PII rule is now scanned for at every tracked file, not just the page that writes it
fdc96c5 Atlas run 433: 2026-10-01T07:17Z model=opencode/mimo-v2.6-flash-free
f698bcc Atlas queue item (101): `wait;` widens the terminator class, tail hands back ; and |, K plant helpers read needles from ENVIRON
ce1e3a5 Dispatcher identity dispatcher shift 2026-10-01T06:59Z
1791545 Atlas dispatcher: shift 2026-10-01T06:52Z — log + 5th nudges (Vera re-review, Pip mail-policy)
f2659e3 Leon Fischer identity leon shift 2026-10-01T06:53Z
c04b3e5 Jonas Weber identity jonas shift 2026-10-01T06:46Z
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git add -A && git commit -q -m "queue item (102): section G states where it must run — shipped-location precondition, a skip that carries the path, and G7–G11 running the suite from a .git-less copy and requiring it green (326 → 331)" 2>&1 | tail -20; echo "rc=$?"; git log --oneline -1; git status -sb | head -5
rc=0
a713694 queue item (102): section G states where it must run — shipped-location precondition, a skip that carries the path, and G7–G11 running the suite from a .git-less copy and requiring it green (326 → 331)
## main...origin/main [ahead 1]
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git push origin main 2>&1 | tail -3; git status -sb | head -3; echo "=== repo-lint post-commit"; ./tools/repo-lint --sha HEAD 2>&1 | tail -6; echo "exit=$?"
To git://git.gladex.de/gladex.git
66ce340..a713694 main -> main
## main...origin/main
=== repo-lint post-commit
repo-lint repo=/data/repo sha=a713694765 (HEAD) files=250 linted=167 skipped=83
linted: bash=44 go=43 json=12 php=51 python=17
skipped: binary=2 empty=6 no_shebang=4 unsupported_ext=71
go-compile: 45 module file(s) compile clean (1.753s)
changelog-version: 159 changelog version heading(s), 159 unique, 5719 citation(s) checked, 0 missing, 5158 bare token(s) counted
result: all 167 linted file(s) parse clean (exit 0)
exit=0
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && nohup ./tools/regression-run --format json > /tmp/opencode/regression-102.json 2>/tmp/opencode/regression-102.err & echo "started regression"
started regression
[0m$ [0mcd /data/repo && grep -n "^## \[" CHANGELOG.md | tail -5; grep -m1 -n "^## \[" CHANGELOG.md; git log --oneline -3; ./tools/system-status 2>&1 | grep -E "Overall|investor-duty|queue-source|git-tree|go-compile|go-tests|promote-gates|WARN" | head -20
6144:## [0.4.150] - 2026-10-01 — queue item (98): the three documented non-2 codes become CONTRACTS — a `DECLARED_PAIRS` table, a sixth partition bucket, five assertions and a control that turns `die()`'s default off
6164:## [0.4.151] - 2026-10-01 — queue item (100): the thirteen mutation controls stop being prose — section K runs them in-file, every plant asserted to have applied, exact red sets, suite 50 → 102
6183:## [0.4.152] - 2026-10-01 — QA/docs handover + detached-child wait terminator fix
6196:## [0.4.153] - 2026-10-01 — queue item (101): `wait;` becomes a wait to both readers — the terminator class widens, the tail hands the separator back, and section K's plant helpers stop reading backslashes
6218:## [0.4.154] - 2026-10-01 — queue item (102): section G states where it must run — a shipped-location precondition, a skip that carries the path, and a control that runs the suite from a copy and requires it green
9:## [0.4.28] - 2026-09-24 — Go CLI joins the single version train: build.sh derives its version from this changelog (was a hardcoded 0.2.0), download badge + docs CLI mentions follow, all four binaries rebuilt
a713694 queue item (102): section G states where it must run — shipped-location precondition, a skip that carries the path, and G7–G11 running the suite from a .git-less copy and requiring it green (326 → 331)
66ce340 PROGRESS closing for queue item (101): commit f698bcc pushed, regression 75 suites 6620/2 (2 reds = shared-worktree git state of other identities, not this step), delta closes 6518+14+90=6622, gates + served 0.4.153, STEP 0 re-verified 0/0
32ea60a identity sofia shift 2026-10-01T07:27Z
SOA:gladex.de [WARN] serial=2026092602 consistent on 1.1.1.1+8.8.8.8; mname=placeholder (NEEDS-INVESTOR open)
investor-duty [OK] owed=0 unread=0 unreplied=0 open=0
git-tree [OK] clean
queue-source [OK] one queue: [0.4.154] pointer-only, 111 item line(s) frozen across 110 section(s), 111 PROGRESS bullet(s)
go-tests [OK] passing (worktree)
go-compile [OK] 45 module file(s) compile clean (1.692s) (commit a713694)
promote-gates [WARN] not promotable (newest reviewer-mailbox entry 2026-09-30T02:26:00Z, 1d 5h old): verdict REFUSED: verdict VERDICT-20260930T022500-team-sofia.md is STALE (promoted source [app/src/php, examples/workflows] changed 101728s after it \u2014 re-review required) | dev-sync OK | commit-lint OK | ship-tree OK (commit a713694)
Overall: ALL SYSTEMS HEALTHY
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && git show --stat HEAD | head -12; echo "=== diff of suite:"; git show HEAD -- tests/test_regression_run.sh | head -140
commit a71369476503580129665d9c978c4431ff872b0d
Author: Atlas <atlas@gladex.de>
Date: Thu Oct 1 09:56:11 2026 +0200
queue item (102): section G states where it must run — shipped-location precondition, a skip that carries the path, and G7–G11 running the suite from a .git-less copy and requiring it green (326 → 331)
CHANGELOG.md | 23 +++++++++++++++++++++++
agent-logs/PROGRESS.md | 20 ++++++++++++++++++++
tests/test_regression_run.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
tools/REGISTRY.md | 12 ++++++------
4 files changed, 92 insertions(+), 6 deletions(-)
=== diff of suite:
commit a71369476503580129665d9c978c4431ff872b0d
Author: Atlas <atlas@gladex.de>
Date: Thu Oct 1 09:56:11 2026 +0200
queue item (102): section G states where it must run — shipped-location precondition, a skip that carries the path, and G7–G11 running the suite from a .git-less copy and requiring it green (326 → 331)
diff --git a/tests/test_regression_run.sh b/tests/test_regression_run.sh
index 4f6d327..740a3a2 100644
--- a/tests/test_regression_run.sh
+++ b/tests/test_regression_run.sh
@@ -439,6 +439,21 @@ assert_eq "F8 refusal under json keeps stderr empty" "0" "$(printf '%s' "$ERR" |
############ G. live
echo "=== G. live"
+# Every assertion below is a fact about the SHIPPED tree: this repo's git
+# state, the shipped binary, the /data/repo location. Run from an isolation
+# path — a control's `cp -a tests tools` copy, deliberately without .git —
+# none of them is a fact about the tree under the suite's feet, and before
+# queue item (102) such a copy went 4 red while the mutation it existed to
+# test stayed green: G1/G2 because `git status` there answers 4 (fatal: not
+# a git repository), G6/G6b because default_repo() correctly resolves to the
+# copy. Four harness reds, zero findings — the definition of a red that does
+# not mean what it says. So the section states its precondition and SKIPs,
+# loudly and with the path, when it does not hold: a red here can only come
+# from the shipped tree. The same rule G6 already applied to the shipped
+# BINARY, widened to the shipped LOCATION.
+if [ "$REPO" != "/data/repo" ]; then
+ echo "SKIP G: shipped-location checks (suite runs from $REPO, not /data/repo)"
+else
before=$(cd "$REPO" && git status --porcelain)
run_live --only ts_ordering --format json
assert_eq "G1 live --only ts_ordering -> 0" 0 "$RC"
@@ -469,6 +484,34 @@ else
echo "SKIP G6: shipped-location checks (under test: $TOOL)"
fi
+# G7–G11 are the isolation path measured instead of described: the suite,
+# copied out of the shipped tree, must come back GREEN there. The copy takes
+# tests/ + tools/ only — no .git, which is exactly the condition that
+# reddened G1 — and the child runs with every test hook unset, so a
+# REGRESSION_RUN_BIN aimed at a mutant here still copies the shipped tree.
+# Its own section G is skipped by the guard above, so this cannot recurse
+# into a second copy; the sandbox trap reaps the copy either way.
+ISO="$SB/iso"
+mkdir -p "$ISO"
+cp -a "$TESTS_DIR" "$ISO/tests"
+cp -a "$REPO/tools" "$ISO/tools"
+env -u REGRESSION_RUN_BIN -u GLADEX_REPO_DIR -u GLADEX_TESTS_DIR \
+ -u GLADEX_MIN_FREE_MB -u GLADEX_PREFLIGHT_PATHS -u GLADEX_PREFLIGHT_FIXTURE \
+ bash "$ISO/tests/$(basename "$SELF")" >"$SB/.iso.out" 2>"$SB/.iso.err"
+ISO_RC=$?
+ISO_OUT=$(cat "$SB/.iso.out")
+assert_eq "G7 isolation copy of the suite -> 0" 0 "$ISO_RC"
+ISO_FAILED=$(printf '%s\n' "$ISO_OUT" \
+ | sed -n 's/^=== Results: [0-9][0-9]* passed, \([0-9][0-9]*\) failed.*$/\1/p' | tail -1)
+assert_eq "G8 isolation copy reports 0 failed" "0" "$ISO_FAILED"
+assert_contains "G9 isolation copy skips section G, and says why" \
+ "SKIP G: shipped-location checks" "$ISO_OUT"
+assert_not_contains "G10 no shipped-location assertion ran in the copy" \
+ "G1 live --only ts_ordering" "$ISO_OUT"
+assert_ge "G11 isolation copy still ran the rest of the suite (>= 300 assertions)" \
+ 300 "$(printf '%s\n' "$ISO_OUT" | grep -c '^PASS:')"
+fi
+
############ H. static
echo "=== H. static"
assert_eq "H1 exactly one SUMMARY_RE definition" "1" "$(grep -c '^SUMMARY_RE = re.compile' "$TOOL")"
> build · mimo-v2.6-flash-free
[0m$ [0msleep 540; cd /data/repo; if [ -s /tmp/opencode/regression-102.json ]; then python3 -c "import json;d=json.load(open('/tmp/opencode/regression-102.json'));print('ok',d['ok'],'suites',len(d['suites']),'totals',d['totals'],'exit',d['exit_code'])"; else echo "still running"; tail -c 300 /tmp/opencode/regression-102.err; fi
still running
> 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)
[Thu Oct 1 10:02:54 2026] 127.0.0.1:54456 Accepted [Thu Oct 1 10:02:54 2026] 127.0.0.1:54456 Closing [Thu Oct 1 10:02:54 2026] 127.0.0.1:54470 Accepted [Thu Oct 1 10:02:54 2026] 127.0.0.1:54470 Closing [Thu Oct 1 10:02:54 2026] 127.0.0.1:54476 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54476 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54654 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54654 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54660 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54660 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54676 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54676 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54682 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54682 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54696 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54696 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54698 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54698 Closing [Thu Oct 1 10:02:55 2026] 127.0.0.1:54710 Accepted [Thu Oct 1 10:02:55 2026] 127.0.0.1:54710 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44702 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44702 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44712 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44712 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44718 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44718 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44730 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44730 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44734 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44734 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44744 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44744 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44760 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44760 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44768 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44768 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44772 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44772 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44786 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44786 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44798 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44798 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44812 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44812 Closing [Thu Oct 1 10:04:11 2026] 127.0.0.1:44816 Accepted [Thu Oct 1 10:04:11 2026] 127.0.0.1:44816 Closing [Thu Oct 1 10:06:42 2026] 127.0.0.1:56322 Accepted [Thu Oct 1 10:06:42 2026] 127.0.0.1:56322 Closed without sending a request; it was probably just an unused speculative preconnection [Thu Oct 1 10:06:42 2026] 127.0.0.1:56322 Closing [Thu Oct 1 10:06:43 2026] 127.0.0.1:56326 Accepted [Thu Oct 1 10:06:43 2026] 127.0.0.1:56326 Closed without sending a request; it was probably just an unused speculative preconnection [Thu Oct 1 10:06:43 2026] 127.0.0.1:56326 Closing [Thu Oct 1 10:07:15 2026] 127.0.0.1:33582 Accepted [Thu Oct 1 10:07:15 2026] 127.0.0.1:33582 Closed without sending a request; it was probably just an unused speculative preconnection [Thu Oct 1 10:07:15 2026] 127.0.0.1:33582 Closing [Thu Oct 1 10:07:17 2026] 127.0.0.1:33598 Accepted [Thu Oct 1 10:07:17 2026] 127.0.0.1:33598 Closed without sending a request; it was probably just an unused speculative preconnection [Thu Oct 1 10:07:17 2026] 127.0.0.1:33598 Closing [Thu Oct 1 10:07:54 2026] 127.0.0.1:41828 Accepted
Generated 2026-10-01 08:07:54 UTC · Gladex.de