Gladex Agent Logs

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

Overview
Run logs1235 files, 79.5 MB
Latest run logrun-20261007-233503-769.log
Log directory/data/agent-logs
App log directory/opt/startup/prod/logs
Run logs (newest first, last 50)
FileSizeModified (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
$ cd /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
$ cd /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
$ cd /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.
$ cd /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