Gladex Agent Logs
Agent run logs & app logs · env: prod · LAN-only investor surface
Overview
| Run logs | 1235 files, 79.5 MB |
| Latest run log | run-20261007-233503-769.log |
| Log directory | /data/agent-logs |
| App log directory | /opt/startup/prod/logs |
Run logs (newest first, last 50)
| File | Size | Modified (UTC) |
|---|---|---|
| run-20261007-233503-769.log | 153 B | 2026-10-07 21:35:04 |
| run-20261007-232454-768.log | 153 B | 2026-10-07 21:24:54 |
| run-20261007-231444-767.log | 153 B | 2026-10-07 21:14:45 |
| run-20261007-230434-766.log | 153 B | 2026-10-07 21:04:35 |
| run-20261007-225424-765.log | 190 B | 2026-10-07 20:54:25 |
| run-20261007-220924-764.log | 425 KB | 2026-10-07 20:44:16 |
| run-20261007-215044-763.log | 157 KB | 2026-10-07 19:59:14 |
| run-20261007-200914-762.log | 359 KB | 2026-10-07 19:40:35 |
| run-20261007-172947-761.log | 540 KB | 2026-10-07 17:59:04 |
| run-20261007-161030-760.log | 339 KB | 2026-10-07 15:19:38 |
| run-20261007-160020-759.log | 190 B | 2026-10-07 14:00:21 |
| run-20261007-155011-758.log | 153 B | 2026-10-07 13:50:12 |
| run-20261007-154002-757.log | 153 B | 2026-10-07 13:40:03 |
| run-20261007-152953-756.log | 153 B | 2026-10-07 13:29:53 |
| run-20261007-151943-755.log | 153 B | 2026-10-07 13:19:44 |
| run-20261007-150934-754.log | 190 B | 2026-10-07 13:09:34 |
| run-20261007-145924-753.log | 153 B | 2026-10-07 12:59:25 |
| run-20261007-144915-752.log | 153 B | 2026-10-07 12:49:16 |
| run-20261007-143906-751.log | 153 B | 2026-10-07 12:39:07 |
| run-20261007-142857-750.log | 153 B | 2026-10-07 12:28:58 |
| run-20261007-141848-749.log | 153 B | 2026-10-07 12:18:49 |
| run-20261007-140839-748.log | 190 B | 2026-10-07 12:08:39 |
| run-20261007-135830-747.log | 153 B | 2026-10-07 11:58:30 |
| run-20261007-134820-746.log | 153 B | 2026-10-07 11:48:21 |
| run-20261007-133811-745.log | 190 B | 2026-10-07 11:38:12 |
| run-20261007-132802-744.log | 190 B | 2026-10-07 11:28:03 |
| run-20261007-114753-743.log | 250 KB | 2026-10-07 11:17:54 |
| run-20261007-094305-742.log | 286 KB | 2026-10-07 09:37:44 |
| run-20261007-082626-741.log | 272 KB | 2026-10-07 07:32:57 |
| run-20261007-070551-740.log | 263 KB | 2026-10-07 06:16:16 |
| run-20261007-052216-739.log | 354 KB | 2026-10-07 04:55:42 |
| run-20261007-033957-738.log | 428 KB | 2026-10-07 03:12:08 |
| run-20261007-023935-737.log | 310 KB | 2026-10-07 01:29:49 |
| run-20261007-012521-736.log | 162 KB | 2026-10-07 00:29:26 |
| run-20261007-005238-735.log | 232 KB | 2026-10-06 23:15:11 |
| run-20261006-233016-734.log | 406 KB | 2026-10-06 22:42:30 |
| run-20261006-231309-733.log | 300 KB | 2026-10-06 21:20:06 |
| run-20261006-222432-732.log | 262 KB | 2026-10-06 21:03:00 |
| run-20261006-211819-731.log | 403 KB | 2026-10-06 20:14:24 |
| run-20261006-204734-730.log | 136 KB | 2026-10-06 19:08:10 |
| run-20261006-193520-729.log | 347 KB | 2026-10-06 18:37:25 |
| run-20261006-164643-728.log | 351 KB | 2026-10-06 17:25:12 |
| run-20261006-124129-727.log | 445 KB | 2026-10-06 14:36:35 |
| run-20261006-104452-726.log | 468 KB | 2026-10-06 10:31:20 |
| run-20261006-090726-725.log | 338 KB | 2026-10-06 08:34:44 |
| run-20261006-073331-724.log | 245 KB | 2026-10-06 06:57:18 |
| run-20261006-061912-723.log | 266 KB | 2026-10-06 05:23:23 |
| run-20261006-053304-722.log | 192 KB | 2026-10-06 04:09:04 |
| run-20261006-041829-721.log | 341 KB | 2026-10-06 03:22:57 |
| run-20261006-031229-720.log | 292 KB | 2026-10-06 02:08:21 |
Tail — run-20261007-215044-763.log (last 200 lines)
OK: dev=0.4.28 prod=0.4.28 (match)
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.
- 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.
=== qsc:
rc=0
queue-source-check: OK - one queue: [0.4.253] pointer-only, 111 item line(s) frozen across 208 section(s), 198 PROGRESS bullet(s), 1 path token(s)
=== git:
be65054 run 64 (close): post-commit readings for queue item (as) — qsc rc 0 (R8+R10 via 5962f7b ancestor), red-watch 18/12 -> 23/7 with A4-A8 and A15 cleared, system-status 1 FAILED (failed-units only; git-tree and queue-source OK), repo-lint rc 0 (258 headings, 0 missing), queue_source 278/0, STEP 0 re-read owed nothing; no push (main ahead 6, none mine) [0.4.253]
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && grep -n "raw\|bare" tests/test_system_status_ip_drift.sh | sed -n '1,60p'
610:raw = sys.stdin.buffer.read()
612: d = json.loads(raw.decode("utf-8"))
641:raw = sys.stdin.buffer.read()
643: text = raw.decode("utf-8")
2130: # substitution is written as a bare arm instead of in its own context, and it
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && grep -n "teeth\|Teeth\|reading\b\|readings" tests/test_system_status_ip_drift.sh | sed -n '1,50p'
49:# reading (sections 16-20): a 0-byte log, a verdict
123:# directions, while every ACTION reading in this file was
188:# reading the planted line — so the reader was blind to
209:# **680/0**, the helper's foreign reading dropped
213:# and that control has teeth IN THE BATTERY too (queue item (af), M14/M15):
217:# FOREIGN-kind reading (dec3's shape), M15 edits the
228:# and the two OLDER controls got the same teeth (queue item (ag), M16/M17):
230:# two source readings in this file still proven only
294:# section 12 pins the default path by reading the SOURCE (single-quoted, the
320:# the THREE readings of `control31`'s src half no plant had ever been pinned
516:# the header promises a reading for; until sections 16-20 below, only their
976:# what is under test here is the WRITER's reading of this exit, not the check.
1405: # number that never moves is not a reading. This block closes that gap
1450: && ok "control28 src: this file still holds the 9 body-reading assertions queue item (j) wrote (3 presence + 6 absence)" \
1570: bad "control28 $CLS28B: the real $VAR28 already carries a borrowed action ('$NEEDLE28'), so nothing below would be a reading"
1687: && ok "control29 src: this file still holds the 9 diagnosis-reading assertions sections 23/24 pair-guard (3 presence + 6 absence)" \
1889: bad "control29 $CLS29B: the real $VAR29 already carries a foreign diagnosis ('$NEEDLE29'), so nothing below would be a reading"
1910: # world for reddens instead of quietly reading a world that happens
2096: # what happens is the part worth reading: the CHECK-ERROR line is written
2274: # suite caught while this one could not. The part worth reading is what
2653: # reds `replay ok`, §22's own row expectation reading the line
2660: # control27A cascade, again with zero reds reading the planted line
2737: # dec3 helper's foreign reading dropped 674 / 0, rc 0 SURVIVED —
2746: # not a reading. This block closes that gap from the inside, in three
2776:# reading — the same self-blindness rule control28's extraction relies on.
2929: # two would be reading a channel the plant broke, and the foreign body must
2956: bad "control31 $L31: world one — the real channel already carries '$N31', so section 28's absence is not a reading"
3227: # reading's shape) → **695 passed / 1 failed, rc 1** (696 total), the
3234: # and not a duplicate. This reading matters because M13's plant reddens
3237: # by any of them; the redirect is the only reading that shows the pin
3247: # that reading can fail is to edit what it reads.
3253: # suite run there. M14 (the helper's foreign-kind reading deleted) →
3333: # reading, so the twelve absences above become twelve vacuous `ok`s while
3351: run_suite_plant M14 "M14 the helper drops its foreign-kind reading" \
3369: # Queue item (ag), step (2): the same battery teeth for the two OLDER src
3370: # halves in this file — `control28`'s (section 24's body-reading guard) and
3392: # either control has two assertions reading different things, and a
3421: # control and a src half has two assertions reading two different things.
3478: # Queue item (aj), step (2): the THREE src readings of `control31` no plant
3479: # was ever pinned to — the last unproven readings in this file, and the
3485: # `tools/ip-drift-cron`, and M14–M19 aim at the other three readings, so
> build · mimo-v2.6-flash-free
[0m$ [0mcd /data/repo && sed -n '3196,3282p' tests/test_system_status_ip_drift.sh
fi
if grep -F "FAIL - " "$out" | grep -qF "$expect"; then
ok "$id → wrong verdict lands on the intended assertion: '$expect'"
else
bad "$id → wrong verdict is NOT the intended one (expected a failure of: '$expect')"
fi
}
# M12 — direction ONE: a DRIFT run's escalation channel gains a
# CHECK-ERROR line (rdrL's shape). Only the cgnat branch is planted, so
# the pin is that one class's absence rather than any of its two siblings.
run_writer_plant M12 "M12 a drift run's escalation channel gains a CHECK-ERROR line" \
$' echo "[$(ts)] DIAGNOSIS: WireGuard tunnel likely DOWN (egress fell back to NAT)." >> "$LOG_FILE"\n' \
$' echo "[$(ts)] DIAGNOSIS: WireGuard tunnel likely DOWN (egress fell back to NAT)." >> "$LOG_FILE"\n echo "[$(ts)] CHECK-ERROR gladex.de: code=public_ip_unavailable detail=tunnel down checker_exit=1" >> "$ALERT_FILE"\n' \
"alerts-kind drift_cgnat: the same channel also carries 'CHECK-ERROR gladex.de'"
# M13 — direction TWO: an ERROR run's escalation channel gains a DRIFT
# line (rdrM's shape), on the shared path, so all six error runs receive
# it and the pin names exactly one of the six.
run_writer_plant M13 "M13 a check-error run's escalation channel gains a DRIFT line" \
$'esac\n\nERROR_ALERT="CHECK-ERROR ${DOMAIN}: code=${ERR_CODE} detail=${ERR_TEXT} checker_exit=${EXIT_CODE}"\n' \
$'esac\n\necho "[$(ts)] DRIFT ${DOMAIN}: false alarm from the error path" >> "$ALERT_FILE"\n\nERROR_ALERT="CHECK-ERROR ${DOMAIN}: code=${ERR_CODE} detail=${ERR_TEXT} checker_exit=${EXIT_CODE}"\n' \
"alerts-kind no_a_records: the same channel also carries 'DRIFT gladex.de'"
# Read a sixteenth time for M13 (queue item (ad), 2026-10-06): that
# mutant's pin — `alerts-kind no_a_records: the same channel also carries
# 'DRIFT gladex.de'` (the message carries apostrophes, so the pin stays
# double-quoted in the call, the string checked before quoting per (w)) —
# redirected to `alerts-kind drift_public: the same channel also carries
# 'CHECK-ERROR gladex.de'`, an assertion M13 leaves green (its plant puts a
# DRIFT line on the ALERTS channel of the six ERROR runs; the drift runs
# never pass through the error path), in a fake tree (`tests/` + the WHOLE
# `tools/` directory copied so `REPO=` resolves there, the fifteenth
# reading's shape) → **695 passed / 1 failed, rc 1** (696 total), the
# single red `M13 → wrong verdict is NOT the intended one (expected a
# failure of: 'alerts-kind drift_public: the same channel also carries
# 'CHECK-ERROR gladex.de'')`, and the redirected pin's own assertion
# counted **once** in a clean run of that tree (**686 / 0**, as
# `ok - alerts-kind drift_public: the channel carries no 'CHECK-ERROR
# gladex.de' verdict`) — a real assertion, so the redirect tests the pin
# and not a duplicate. This reading matters because M13's plant reddens
# SIX assertions that are the same sentence for six sibling scenarios
# (`alerts-kind` × the six error arms), so the FAIL-line grep is satisfied
# by any of them; the redirect is the only reading that shows the pin
# points at the `no_a_records` arm's absence rather than at the family.
# M12's pin was read the ordinary way in the same battery: **696 passed /
# 0 failed** with its own red landing on `alerts-kind drift_cgnat: …
# 'CHECK-ERROR gladex.de'` as intended.
# ---------------------------------------------------------------------------
# Queue item (af), step (2): two SUITE-SOURCE plants — the first mutants in
# this battery whose target is THIS FILE rather than a tool, because
# `control31` reads this file's own source and the only honest way to prove
# that reading can fail is to edit what it reads.
#
# Both shapes were planted OUT OF TREE first (`/tmp/opencode/probe49/`,
# `build.sh`, nothing under /data/repo written): `tests/` + the whole
# `tools/` copied into a tree so `REPO=` resolves there, the plant applied
# with `s.count(find) == 1` asserted and `bash -n` clean, then the plain
# suite run there. M14 (the helper's foreign-kind reading deleted) →
# **746 passed / 1 failed, rc 1**, the single red `control31 src: the akind
# helper no longer reads the foreign kind's absence`; M15 (the row-count
# expectation edited 4 / 24 → 3 / 18) → **758 passed / 1 failed, rc 1**,
# the single red `control31 src: got 4 call site(s) / 24 row(s) (12 anchor +
# 12 absence), expected 4 / 24 (12 + 12)`. One red apiece, on exactly the
# pin each entry below names — which is what makes them keepable under the
# probe-before-the-dict rule: a plant that reddens two assertions at once
# would give a shared pin, and a plant that reddens none would give a
# battery line that can never fail.
#
# `run_writer_plant` swaps `tools/ip-drift-cron`; `run_mutation` copies
# `$TOOL`. Neither touches a file under `tests/`, so the thirteen mutants
# that existed before this block could not have reported either shape —
# measured on the M14 tree with the battery as it then stood: `grep -c
# 'M14\|M15'` over the whole `--mutations` output → **0**.
#
# The precondition is read with `s.count()` rather than `grep -F -c`,
# because GNU grep treats a NEWLINE in a fixed pattern as a pattern
# separator: M14's three-line needle scores **4** that way (each component
# counted on every line that carries it — three lines of the helper plus
# this plant's own first fragment) while `s.count()` reads **1**, the
# number that says the helper is the only copy the plant can move. Both
# figures were re-measured on this file after the needles above were
# built by concatenation: `grep -F -c` → 4, `s.count()` → 1 for M14 and
# for M15's 58-byte needle alike.
echo ""
echo "=== suite-source mutations: this file's own source (control28 / control29 / control31), defeated, must be caught ==="
run_suite_plant() { # <id> <label> <find> <repl> <pin: the expected FAIL assertion>
local id="$1" label="$2" find="$3" repl="$4" expect="$5"
> build · mimo-v2.6-flash-free
Probe jobs are running. Waiting on the two background runs (probe trees + `--mutations` baseline) before deciding the verdict.
[0m$ [0mcd /tmp/opencode/probe762as && sed -n '4060,4100p' /data/repo/tests/test_ip_drift_cron.sh
# block plants only the CAUGHT one:
# - pure REORDER → **SURVIVES**: 340 / 0 plain and 337 / 0 live-free, rc 0
# both modes — the ALSO-list's order is read by nothing: every step-4
# read is a `grep -qF` presence/absence over bodies, and the surgical
# guard `for other in ORDER` only counts arms. Recorded as a survivor
# (M44's outcome), deliberately NOT planted — a mutant this suite cannot
# catch would have to be planted as a disclosed non-catch, and the
# bullet's step (2) makes the caught shape the install condition;
# - ENTRY DROP → **REDDENS 2** in both modes (338 / 2 plain, 335 / 2
# live-free): the join then omits that class's body, so the two OTHER
# classes' step-4 teeth-proofs — `grep -qF "$BODY30" "$BORROW30"` — lose
# the text they look for and print `did not bite`. Membership IS read,
# ordering is NOT, measured rather than assumed.
# Needle built by concatenation, reusing (ar)'s already-defined head so this
# block adds no literal of its own (M14/M15 self-blindness rule); the find
# is byte-identical to M54's by construction — both plant the same two-line
# region, and they differ by REPL alone (M54 widens `LINE`, M56 drops the
# third ORDER entry), each count re-measured on the installed bytes.
# MULTI-RED (a two-red) disclosed the way (am)/(ap)/(aq)/(ar) disclosed
# theirs: both rows are CAUGHT and each pin is a line no other plant in this
# battery can print — it names THIS class's `drift_pub` absence label AND
# the unparseable body, a pair no existing mutant can produce (M51's two
# `did not bite` reds carry the ACTION body, M53's carry the public and
# tunnel bodies with a different label each, M52's plant dies before any
# step-4 read runs and takes the `no planted log` branch instead).
M56_A="ORDER = ('public', 'private-or-cgnat')
"
M56_FIND="$M54_A$M54_L1$M54_L2"
M56_REPL="$M56_A$M54_L1$M54_L2"
run_suite_plant M56 "M56 PY30PLANT's ORDER loses its third entry, so two classes' borrows never carry the unparseable body" \
"$M56_FIND" \
"$M56_REPL" \
"control30 public: 'drift_pub → does not borrow the unparseable class's diagnosis' did not bite: the public borrow carries no 'egress is NOT an IP address (public_ip could not be parsed).'"
fi
# =============================================================================
echo ""
echo "=== Results: $PASS passed, $FAIL failed ==="
[ "$FAIL" -eq 0 ] || exit 1
exit 0
> build · mimo-v2.6-flash-free
Waiting for the probe/baseline runs to finish before recording the verdict.
exit=0
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 Oct 7 23:16:00 2026] 127.0.0.1:38344 Accepted [Wed Oct 7 23:16:00 2026] 127.0.0.1:38344 Closing [Wed Oct 7 23:16:00 2026] 127.0.0.1:38354 Accepted [Wed Oct 7 23:16:00 2026] 127.0.0.1:38354 Closing [Wed Oct 7 23:16:00 2026] 127.0.0.1:38370 Accepted [Wed Oct 7 23:16:00 2026] 127.0.0.1:38370 Closing [Wed Oct 7 23:16:00 2026] 127.0.0.1:38386 Accepted [Wed Oct 7 23:16:00 2026] 127.0.0.1:38386 Closing [Wed Oct 7 23:16:00 2026] 127.0.0.1:38388 Accepted [Wed Oct 7 23:16:00 2026] 127.0.0.1:38388 Closing [Wed Oct 7 23:16:00 2026] 127.0.0.1:38394 Accepted [Wed Oct 7 23:16:01 2026] 127.0.0.1:38394 Closing [Wed Oct 7 23:16:01 2026] 127.0.0.1:38408 Accepted [Wed Oct 7 23:16:01 2026] 127.0.0.1:38408 Closing [Wed Oct 7 23:16:01 2026] 127.0.0.1:38422 Accepted [Wed Oct 7 23:16:01 2026] 127.0.0.1:38422 Closing [Wed Oct 7 23:16:01 2026] 127.0.0.1:38436 Accepted [Wed Oct 7 23:16:01 2026] 127.0.0.1:38436 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44284 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44284 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44286 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44286 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44300 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44300 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44304 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44304 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44306 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44306 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44310 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44310 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44324 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44324 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44338 Accepted [Wed Oct 7 23:30:10 2026] 127.0.0.1:44338 Closing [Wed Oct 7 23:30:10 2026] 127.0.0.1:44350 Accepted [Wed Oct 7 23:30:11 2026] 127.0.0.1:44350 Closing [Wed Oct 7 23:30:11 2026] 127.0.0.1:44354 Accepted [Wed Oct 7 23:30:11 2026] 127.0.0.1:44354 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42402 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42402 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42414 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42414 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42422 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42422 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42430 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42430 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42432 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42432 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42444 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42444 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42454 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42454 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42470 Accepted [Wed Oct 7 23:31:00 2026] 127.0.0.1:42470 Closing [Wed Oct 7 23:31:00 2026] 127.0.0.1:42476 Accepted [Wed Oct 7 23:31:01 2026] 127.0.0.1:42476 Closing [Wed Oct 7 23:31:01 2026] 127.0.0.1:42482 Accepted [Wed Oct 7 23:31:01 2026] 127.0.0.1:42482 Closing [Wed Oct 7 23:36:43 2026] 127.0.0.1:59648 Accepted
Generated 2026-10-07 21:36:43 UTC · Gladex.de