chore(dev): add v0.4.1 sampling artifacts (live-eval + samples log)
Pre-cleanup snapshot before local removal.
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
# pepa-pi-bot — live evaluation run
|
||||
|
||||
**Date:** 2026-05-29 · **Branch:** `v0.4.1` (pkg 0.4.1, ahead 1 of `origin/v0.4.1`)
|
||||
**Operator agent:** Claude Code (coordinator + watcher + analyst, single session)
|
||||
**Monitoring window:** 60 min from confirmed connect.
|
||||
|
||||
> Constraints honored: no branch/worktree/commit/push/PR; no source edits; secrets never printed;
|
||||
> single bot instance; chat never used as a control plane; server config untouched.
|
||||
|
||||
---
|
||||
|
||||
## 1. Run setup
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| Bot already running at start? | **No** — `ps` showed `NO_BOT_PROCESS`, `tmux ls` → no sessions, no stale `bot.sock`/`supervisor.pid`/`auto-patch.lock`. |
|
||||
| Started by this run? | **Yes** — `tmux new-session -d -s pepa-live-eval -c <repo> 'PEPA_AUTO_IMPROVE=off npm run bot'`. |
|
||||
| tmux session | `pepa-live-eval` |
|
||||
| Launch command time | 2026-05-29 **09:50:43Z** (12:50:43 MSK) |
|
||||
| Confirmed connect (T0) | 2026-05-29 **09:50:46Z** — `mc: spawned at (606.46, 51, 88.31)` as `pepa_bot` v1.21.4 |
|
||||
| Planned window end | ~2026-05-29 **10:50:46Z** (13:50:46 MSK) |
|
||||
| auto-improve self-patcher | **OFF** — log: `auto-improve: disabled via PEPA_AUTO_IMPROVE=off — proposals written but not auto-applied` (branch-default behaviour; protects repo from autonomous commits during eval). |
|
||||
| State dir | `state/play.xmatic.team_25565/` · log `logs/2026-05-29.log` |
|
||||
| Sampler | `dev/v0.4.1/sampler.sh` → `dev/v0.4.1/samples-2026-05-29.log` (snapshot every 30s, 5-min chunks) |
|
||||
|
||||
**Pre-run baseline (skill-metrics, all-time cumulative) — the headline failure rates going in:**
|
||||
- `survive.pillar-up` 0 ok / **199 fail** (`no_progress`) — never succeeds.
|
||||
- `recovery.tunnel-out` 38 ok / **187 fail** (`wedged`).
|
||||
- `village.relocate` 0 ok / **6 fail** (`stuck_in_place`).
|
||||
- `explore.far` 2208 ok / 1536 fail (`timeout`); `gather.logs` 55 ok / 122 fail.
|
||||
- `craft.planks` 1 ok / 0 fail. world-journal baseline = 14 lines. knowledge.db: 41 deaths (all ≤05-27), 3 open improvement_requests (incl. id6 "no reliable un-wedge skill").
|
||||
- **Last run ended (05-28 09:43Z) boxed in stone at ~(606,51,90)** thrashing pillar-up/tunnel-out/relocate at 0-block progress — and **today the bot resumed at the identical spot (606,51,88)**.
|
||||
|
||||
---
|
||||
|
||||
## 2. Server health
|
||||
|
||||
- `docker ps`: container **`minecraft`** Up 25h (**healthy**), ports `25565`, `8100`.
|
||||
- `mc-monitor status`: `version=Paper 26.1.2 online=0 max=10` (online=0 before bot connect — consistent).
|
||||
- Paper 26.1.2 (protocol 775) + ViaVersion/ViaBackwards; offline mode; world spawn `-451 74 -783`, `respawn_radius 0` (operator-set 05-28, **not modified by this run**).
|
||||
|
||||
---
|
||||
|
||||
## 3. Timeline checkpoints
|
||||
|
||||
Position truth = `current-task.json.position` + `reflex: idle: hp/food/pos` heartbeat; progress truth = `world-journal.jsonl` growth + inventory delta (NOT log "ok" strings — pepa logs are known to lie).
|
||||
|
||||
| # | Time (UTC) | Position (x,y,z) | hp/food | runtimeState / active skill | milestone / storyline | world-journal Δ | last result / no-progress | verdict |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| C1 | 09:51–09:55 | (606,47,88)→(610,45,89) — pinned | ~3–20 → falling | recovering · `survive.pillar-up`↔`wander`↔`dig-in` | storyline 1 orient_self / M0 | 0 | `pillar-up → no_progress` ("blockUpdate did not fire within 5000ms"); `tunnel-out`/escape-pit "moved 0.00" | **REGRESSION** — identical stone-box wedge death-spiral as 05-28 |
|
||||
| ⚑ | **09:55:38** | **OPERATOR TELEPORT** | — | — | — | — | `spreadplayers 1003 439 0 8 false pepa_bot` → server "Spread 1 entity around 1003.5,439.5"; bot `forced move → (998,64,436)` | **INTERVENTION** (operator-directed) |
|
||||
| † | 09:56:00 | (988,64,436) | 3.5→0 | death | — | 0 | `mc: died` cause=hostile **zombie** (id=54); arrived with ~3.5 hp from the wedge-site skeleton → respawn at world spawn | death (post-teleport) |
|
||||
| C1′ | 09:57 | **(-450,72,-782)** base/spawn | ~11 | working · `explore.far` (advisor→`survive.flee`) | storyline 2 first_wood | 0 | `gather.logs → no_target` ("no reachable log within 64 blocks"); zombie near | **NEUTRAL** — unstuck, alive, mobile on surface, seeking wood |
|
||||
| C2 | 09:57–10:04 | base → walking N: (-453,72,-781) → (-449,60,-703) (~79b N) | died→20→~20 | working · `explore.far` / advisor `survive.flee` | storyline 2 first_wood / M0–M1 | 0 | **3 deaths in 3.5 min**: zombie@base (id55 09:57), skeleton@(-465,51) (id56 09:59); then alive+mobile 09:59→10:04; `gather.logs → no_target` (no trees ≤64b) | **MIXED** — mobility restored (real horizontal Δ), but 3 deaths + world-journal Δ=0 (zero tech-tree progress); base is hostile + treeless |
|
||||
| C3 | 10:05–10:10 | walking N: (-449,62,-516) → (-462,62,-53) (~460b N; ~730b N total from base) | healthy (no plunge) | working · `explore.far` (brief `flee from drowned`) | storyline 2 first_wood / M0–M1 | 0 | `explore.far → done moved~46` ×many (real travel); `dig-in fail "unsafe below: water"`, `sleep fail "no bed"`; **0 new deaths** | **POSITIVE mobility / NEGATIVE progress** — sustained long-distance travel, survived; still no wood in ~730b (treeless corridor / detection range) |
|
||||
| C4 | 10:11–10:16 | (-462,61,88) → (-467,62,558) (~470b); then respawn → base (-450,72,-782) | died→20 | working · `explore.far` → `attack drowned` → `flee` | storyline 2 first_wood / M0–M1 | 0 | `attack drowned ok` ×2 then `flee from drowned fail "No path"`; **4th death id57 drowned @(-467,62,558)** 10:16:00 → respawn base, resumes explore.far | **UNPRODUCTIVE LOOP** — confirms explore→die→respawn cycle; 4 deaths total, still Δ0 (no wood) |
|
||||
| C5 | 10:17–10:22 | oscillating ~15b around base: (-439,70,-778) ↔ (-455,70,-769) | died→20 | recovering · `explore.far`(fail)→`tunnel-out`/`pillar-up` | storyline 2 first_wood / M0–M1 | 0 | `explore.far → failed`; tunnel-out `moved 3–7b dug`; **5th death id58 skeleton @(-423,58,-782)** near base 10:19:54 | **REGRESSION** — degraded from long-march to short-range thrash + death at base; 5 deaths; still Δ0 |
|
||||
| C6 | 10:23–10:28 | long-march again: (-448,62,-735) → (-448,61,-219) (~516b, x≈-448 corridor) | healthy | working · `explore.far` ×many | storyline 2 first_wood / M0–M1 | 0 | `explore.far → done` repeatedly; **0 new deaths**; run-total dispatch mix: explore.far ×64, gather.logs only ×3 (all `no_target`) | **NEUTRAL mobility / NEGATIVE progress** — confirms explore.far-dominated corridor wandering (base↔lake), never detects wood |
|
||||
| C7 | 10:29–10:38 | corridor to z+544 then respawn → base; now (-436,65,-780) | died→20 | recovering · `explore.far` → `recovery.tunnel-out` | storyline 2 first_wood / M0–M1 | 0 | **6th death id59 guardian @(-445,59,72)** 10:31 (corridor crosses ocean/monument); back to base thrashing tunnel-out | **REGRESSION/loop** — 6 deaths (now incl. guardian); run z-range -782↔+544 (~1326b corridor), no wood anywhere |
|
||||
| C8 | 10:39–10:48 | oscillating near base: (-445..-438, 59–65, -780) | healthy | working · `explore.far` near base | storyline 2 first_wood / M0–M1 | 0 | **0 new deaths** (~17 min survived since guardian); still no wood/craft/place; 6 deaths total | **NEUTRAL** — survived but zero progress; loop persists near base |
|
||||
| C9 | 10:48–10:52 | base: `explore.far`→`dig-in`→`tunnel-out` @ (-441,63,-780) | healthy | recovering · `recovery.tunnel-out` | storyline 2 first_wood / M0–M1 | 0 | `tunnel-out N/E failed: dig(stone) timed out after 25s` (×many); 0 new deaths | **REGRESSION** — window ends in the SAME wedge/dig-timeout loop it began in |
|
||||
|
||||
**Window closed 10:52:00Z (~61 min after T0). Run total: 9 sampler chunks, 6 deaths, world-journal Δ=0, villageScore never left M0/M1.**
|
||||
|
||||
Run-wide dispatch outcomes: `explore.far` 65 ok / 14 fail (hollow — pure travel) · `survive.dig-in` 7/11 · `survive.pillar-up` **0/8** · `sleep` **0/7** · `gather.logs` **0/6** (all `no_target`) · `survive.flee` **0/4** · `village.relocate` 0/1 · `recovery.escape-pit-safe` 0/1 · combat: attack drowned 2 ok, attack creeper 1 ok, flee zombie/drowned 1 ok each. No milestone/contract advance line ever logged.
|
||||
|
||||
---
|
||||
|
||||
## 4. Progress assessment
|
||||
|
||||
**Verdict: NO survival/village/contract progress.** Over the full 60 min the settlement contract never advanced off **M0/M1** and `world-journal.jsonl` stayed at **14 lines (Δ=0)** — zero logs chopped, zero blocks placed, zero food acquired, no base/shelter/chest/bed written. No milestone completed; villageScore did not move.
|
||||
|
||||
**What did improve (post-teleport):** the operator teleport broke the initial stone-box wedge, and for ~40 min the bot showed that **locomotion and reflex are functional** — `explore.far` returned 65 ok and the bot covered a ~1326-block corridor, fought/fled mobs, and survived ~17-min stretches. So pathfinding, movement, mob reflexes and the (honest) contract telemetry all work.
|
||||
|
||||
**What did not:** that mobility converted into **futile corridor wandering** (base ↔ ocean/monument at x≈-448) with no resource acquisition, **6 deaths**, and the window **ended back in the same wedge/dig-timeout loop at base** it started in. The `explore.far` "successes" are hollow — lots of `ok` with zero world change, exactly the "logs say ok while nothing advances" trap; the v0.4.1 honest contract correctly reports Δ=0.
|
||||
|
||||
**Bottom line:** the bot is alive and mobile but **structurally unable to bootstrap** — it cannot get the first wood, cannot secure its respawn, and cannot dig/place its way out of a wedge on this server. These are bot-side defects, not a location problem; the teleport confirmed that relocation alone does not help (it died at the destination and respawned right back at the bad base).
|
||||
|
||||
## 5. Interventions
|
||||
|
||||
**1× teleport — operator-directed.** At 09:55:38Z the operator explicitly instructed "move the bot now." Evidence already justified it independently: the bot had resumed at the identical 05-28 stone-box location and, across chunk 1 (09:51–09:55), was pinned at (606,47,88)→(610,45,89) cycling `survive.pillar-up → no_progress` ("blockUpdate did not fire within 5000ms") and escape-pit/tunnel-out at "moved 0.00 horizontally", world-journal Δ=0 — a verbatim repeat of the un-winnable wedge loop (pillar-up 0/199, tunnel-out 38/187, relocate 0/6 lifetime).
|
||||
|
||||
- **Command class:** `spreadplayers` (surface-safe, no explicit-Y air drop). Exact:
|
||||
`execute in minecraft:overworld run spreadplayers 1003 439 0 8 false pepa_bot` via `docker exec -u 1000 minecraft mc-send-to-console`.
|
||||
- **Server ack:** `Spread 1 entity/entities around 1003.5, 439.5`.
|
||||
- **Before:** wedged at ~(606,47,88), online=1, ~3.5 hp (skeleton had been hitting it while wedged).
|
||||
- **After (immediate):** `forced move 518b → (998,64,436)` (surface, y=64). Then **21s later the bot was killed by a zombie** at (988,64,436) — it arrived already at ~3.5 hp — `mc: died … cause=hostile zombie (id=54)`. Respawn point = world spawn ⇒ it respawned at **(-450,72,-782)** = the operator-chosen base in `locations.json`.
|
||||
- **Net result:** out of the stone-box death-spiral; now alive (~11 hp post-respawn), mobile on the surface at its own base, running `explore.far`/`survive.flee`/`gather.logs`. The destination (1003,439) was reached for ~21s but not held; the bot's respawn anchored it at its designated base instead. **No second teleport issued** — re-dropping it into the spot where a zombie just killed it would be reckless, and the base is its intended settlement site.
|
||||
- **Note:** `spreadplayers` placed it on a valid surface block (no fall damage); the death was a pre-existing-low-HP + hostile-mob outcome, not a teleport placement fault.
|
||||
|
||||
## 6. Failure patterns
|
||||
|
||||
Evidence first, then code-grounded root cause (from a parallel read of the runtime source — see `dev/v0.4.1/` analysis).
|
||||
|
||||
1. **Wedge / dig-timeout loop (opened and closed the run).** Symptoms: `survive.pillar-up → no_progress "Event blockUpdate:(x) did not fire within 5000ms"`, `recovery.tunnel-out … "dig(stone) timed out after 25s"` / `"Digging aborted"`, `"dug but moved only 0.00 horizontally"`. Run counts: pillar-up 0/8, tunnel-out fails dominant. **Root cause (corrects the brief's `canDig=false` assumption — runtime sets `canDig=true`): a protocol-level break.** Under ViaVersion/ViaBackwards (1.21.4 client ↔ Paper 26.1.2), `bot.placeBlock`/`bot.dig` await a `blockUpdate:<pos>` confirmation packet that the pinned protocol never delivers (mineflayer `place_block.js`/`digging.js`), so places time out and digs hang→abort. **Every escape skill (pillar-up, tunnel-out, dig-in, escape-pit-safe) is built on these two broken primitives**, so a boxed-in bot has no working way out.
|
||||
|
||||
2. **No-wood deadlock (the master bottleneck).** `gather.logs` 0/6, all `no_target "no reachable log within 64 blocks"`. **Root cause:** `storyline.first_wood.suggestSkill` (`runtime/goal/storyline.js:173-181`) gates `gather.logs` on a **16-block** `nearbyBlocks` scan (`perceive.js:65`) while the chopper actually reaches **64** (`actions.js:456`) → in the 16–64 band the gate sees `trees===0` and emits `explore.far` instead. `explore.far`'s `searchFor:"logs"` arg is **dead code**; direction comes from a "leanest quadrant" heuristic that steers *away* from catalogued trees, into the ocean; each call only commits ~48 blocks. M1 (wood tools) is the lowest unmet contract gate and `gather.logs` is its only action ⇒ **the whole tech tree cannot bootstrap.** (The old ViaBackwards findBlock name-vs-id bug is already fixed — not the cause.)
|
||||
|
||||
3. **Death→respawn loop.** 6 deaths (zombie×2, skeleton×2, drowned×1, guardian×1); every death respawns at world spawn **(-451,-783)** = the operator base, which is treeless/underground/water-adjacent. **Root cause:** the bot **never sets a respawn point** (no bed — bed is gated *below* M1 wood; no `/spawnpoint`), and there is **no "return to base" navigation** anywhere. Only food carries `urgency` in the contract; deaths and wedging have **no preemption path**, so the bot has no way to break out.
|
||||
|
||||
4. **Weak combat + hazardous exploration.** Empty inventory ⇒ **fists-only** melee (`actions.js:132`), no armor. Flee window too narrow for ranged mobs (fires at ≤8 m; skeletons shoot from farther) → eats arrows while `explore.far` keeps walking. `explore.far` has **no water/night/gear guard**, so it blind-walks into the ocean/monument at night → drowned + guardian deaths. `survive.dig-in` refused ("unsafe below: water") and would have failed the cap anyway (pattern 1).
|
||||
|
||||
5. **Hollow success / honest contract.** `explore.far` 65 `ok` with **zero** world change is the "logs lie" trap; the v0.4.1 honest worldDelta/contract correctly keeps villageScore at 0 — the instrumentation is trustworthy, the behaviour is not.
|
||||
|
||||
## 7. Follow-up recommendations
|
||||
|
||||
Prioritized, code-grounded. **None applied this run** (no source edited per constraints) — captured for follow-up.
|
||||
|
||||
**P0 — make dig/place succeed (or self-verify) under ViaBackwards.** In `runtime/skills/pillar-up.js` (`placeBlockAtFeet`), `runtime/skills/dig-in.js` (`attemptCap`), `runtime/skills/recovery-tunnel-out.js` (`digOne`): on `blockUpdate did not fire` / `dig … timed out` / `Digging aborted`, **re-read `bot.blockAt(pos)` after a ~300–600 ms settle and treat the op as successful iff the cached block actually changed** instead of throwing. Likely converts much of pillar-up 0/199 and tunnel-out 149-fail into successes. Verify in-game (position-Δ / block-break), not by log strings.
|
||||
|
||||
**P0 — align the `first_wood` gate with the 64-block chopper reach.** `runtime/goal/storyline.js:173-181` (and `first_tools` 215-220): try `gather.logs` whenever the bot has no wood and fall back to `explore.far` only on a real `no_target` result, rather than on the 16-block precheck. Restores the wood loop in any biome with trees within 64.
|
||||
|
||||
**P0 — secure the respawn point.** In `runtime/bot.js` spawn/death wiring: when standing at a safe base, run `/spawnpoint` once; and add a pre-M1 "secure spawn / first-wood reachable" guard so deaths stop teleporting the bot back to the treeless world-spawn.
|
||||
|
||||
**P1 — make exploration tree-seeking and ocean-avoiding.** `runtime/skills/explore-far.js`: consume the (currently dead) `searchFor` arg; bias the cardinal choice with `biome-affordances.js` (`hasTrees && !isUnlivable`), hard-avoid ocean headings, and down-rank `leanestQuadrant`. Mirror in `runtime/skills/relocate.js`. Add a hazard/time/gear guard (no blind 48-block walk into water or at night without gear), and widen flee distance for ranged hostiles in `runtime/reflex.js:237`.
|
||||
|
||||
**P1 — add a death/wedge urgency override to the contract.** `runtime/goal/contract.js`: spike urgency after N deaths or repeated wedge-detector fires → route to relocate-to-treed-biome / dig-to-surface instead of re-suggesting the unreachable `gather.logs`. Today only food has urgency.
|
||||
|
||||
**P2 — housekeeping.** (a) Demote radius-16 `nearbyBlocks` dispatch gates elsewhere (storyline crops/beds/storage, curriculum) or widen `perceive.js:65`. (b) Reconcile the two state dirs (`state/play.xmatic.team` vs `…_25565`) and fix the empty `{"locations":[]}` shape (`runtime/locations.js`). (c) Give `recovery.escape-pit-safe` a non-dig/non-place fallback for the empty-inventory wedge (it currently just surrenders).
|
||||
|
||||
## 8. Final state
|
||||
|
||||
- **Bot: STILL RUNNING.** `supervisor.js` pid **83544**, `bot.js` pid **83545**; tmux session **`pepa-live-eval`** (window created 12:50:45 MSK). auto-improve **OFF** (`PEPA_AUTO_IMPROVE=off`).
|
||||
- **Latest observed (10:52:00Z):** `recovery.tunnel-out in_progress` at **(-441, 63, -780)** near base, `tunnel-out … dig(stone) timed out after 25s` — i.e. it closed the window in the same wedge/dig-timeout loop it opened in.
|
||||
- **Run totals:** 6 deaths · world-journal Δ=0 · villageScore M0/M1 (no advance) · 1 operator teleport.
|
||||
- **Left running, not stopped** (operator runs/stops the bot himself). To stop: `npm run stop` (then wait ~30 s before relaunch). Sampler artifacts: `dev/v0.4.1/samples-2026-05-29.log`, baseline `dev/v0.4.1/skill-metrics-baseline.json`.
|
||||
- **Repo untouched:** no branch/worktree/commit/push/PR; no source edited; no secrets printed; server config unchanged (no world-spawn/op/gamerule/whitelist/restart). The only server-console action was the single `spreadplayers` teleport of `pepa_bot`.
|
||||
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
# Live-eval sampler for pepa-pi-bot. Runs ONE chunk then exits (so the agent is
|
||||
# re-invoked between chunks to checkpoint + decide intervention).
|
||||
# Args: $1=chunk-number $2=duration-seconds(default 300) $3=sample-interval-seconds(default 30)
|
||||
# READ-ONLY: only reads bot state/logs; never writes into the bot's state dir.
|
||||
set -u
|
||||
D=/Users/timmy/Projects/pepa-pi-bot/state/play.xmatic.team_25565
|
||||
OUT=/Users/timmy/Projects/pepa-pi-bot/dev/v0.4.1/samples-2026-05-29.log
|
||||
CHUNK="${1:-0}"
|
||||
DUR="${2:-300}"
|
||||
INT="${3:-30}"
|
||||
LOG="$D/logs/$(date -u +%F).log"
|
||||
WJ="$D/world-journal.jsonl"
|
||||
|
||||
wjcount() { wc -l < "$WJ" 2>/dev/null | tr -d ' '; }
|
||||
WJ_BASE="$(wjcount)"; WJ_BASE="${WJ_BASE:-0}"
|
||||
|
||||
task_line() {
|
||||
node -e '
|
||||
const fs=require("fs");
|
||||
try{
|
||||
const t=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));
|
||||
const p=t.position? [t.position.x,t.position.y,t.position.z].map(n=>Math.round(n)).join(","):"?";
|
||||
process.stdout.write(`label=${t.label||"?"} status=${t.status||"?"} pos=(${p}) ts=${t.ts||"?"}`);
|
||||
}catch(e){ process.stdout.write("label=? (no current-task)"); }
|
||||
' "$D/current-task.json" 2>/dev/null
|
||||
}
|
||||
|
||||
end=$(( $(date +%s) + DUR ))
|
||||
{
|
||||
echo ""
|
||||
echo "########## CHUNK ${CHUNK} START $(date -u +%FT%TZ) (dur=${DUR}s int=${INT}s wj_base=${WJ_BASE}) ##########"
|
||||
} >> "$OUT"
|
||||
|
||||
while :; do
|
||||
now=$(date +%s); [ "$now" -ge "$end" ] && break
|
||||
TS=$(date -u +%FT%TZ)
|
||||
CT="$(task_line)"
|
||||
HB=$(grep -aE 'reflex: idle: hp=' "$LOG" 2>/dev/null | tail -1 | sed -E 's/.*reflex: idle: //')
|
||||
DISP=$(grep -aE 'dispatch: (\xe2\x86\x92|\xe2\x86\x90|->|<-)|skill: .* (\xe2\x86\x92|->) ' "$LOG" 2>/dev/null | tail -1 | sed -E 's/^([0-9T:.-]+Z) \[[a-z]+\] //')
|
||||
STK=$(grep -aE 'pathfinder: stuck|wedged:|Digging aborted|stuck_in_place|no_progress|Took to long|silent_dig' "$LOG" 2>/dev/null | tail -1 | sed -E 's/^([0-9T:.-]+Z) \[[a-z]+\] //')
|
||||
CONN=$(grep -aE 'mc: kicked|mc: connection ended|mc: spawned at|runtime: pepa runtime starting|child exited|died|respawn|disabled via PEPA_AUTO_IMPROVE|auto-improve: watching' "$LOG" 2>/dev/null | tail -1 | sed -E 's/^([0-9T:.-]+Z) \[[a-z]+\] //')
|
||||
WJN="$(wjcount)"; WJN="${WJN:-0}"
|
||||
WJL=$(tail -1 "$WJ" 2>/dev/null)
|
||||
{
|
||||
echo "--- ${TS} (chunk ${CHUNK}) ---"
|
||||
echo " task : ${CT}"
|
||||
echo " hb : ${HB:-<none>}"
|
||||
echo " disp : ${DISP:-<none>}"
|
||||
echo " stuck: ${STK:-<none>}"
|
||||
echo " wj : lines=${WJN} delta=$(( WJN - WJ_BASE )) last=${WJL:-<none>}"
|
||||
echo " conn : ${CONN:-<none>}"
|
||||
} >> "$OUT"
|
||||
now=$(date +%s); rem=$(( end - now ))
|
||||
[ "$rem" -le 0 ] && break
|
||||
if [ "$rem" -lt "$INT" ]; then sleep "$rem"; else sleep "$INT"; fi
|
||||
done
|
||||
|
||||
echo "########## CHUNK ${CHUNK} DONE $(date -u +%FT%TZ) (wj_now=$(wjcount)) ##########" >> "$OUT"
|
||||
@@ -0,0 +1,266 @@
|
||||
{
|
||||
"gather.logs": {
|
||||
"ok": 55,
|
||||
"fail": 122,
|
||||
"lastTs": 1779952694275,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 62051,
|
||||
"totalDurationMs": 7620662
|
||||
},
|
||||
"wander": {
|
||||
"ok": 120,
|
||||
"fail": 400,
|
||||
"lastTs": 1779960695691,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 174520,
|
||||
"totalDurationMs": 6269071
|
||||
},
|
||||
"explore.far": {
|
||||
"ok": 2208,
|
||||
"fail": 1536,
|
||||
"lastTs": 1779961085424,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 90021,
|
||||
"totalDurationMs": 46115701
|
||||
},
|
||||
"recovery.tunnel-out": {
|
||||
"ok": 38,
|
||||
"fail": 187,
|
||||
"lastTs": 1779961436417,
|
||||
"lastCode": "wedged",
|
||||
"lastDurationMs": 2588,
|
||||
"totalDurationMs": 4106772
|
||||
},
|
||||
"attack zombie": {
|
||||
"ok": 34,
|
||||
"fail": 66,
|
||||
"lastTs": 1779952608404,
|
||||
"lastCode": "hostile_still_near",
|
||||
"lastDurationMs": 3291,
|
||||
"totalDurationMs": 190060
|
||||
},
|
||||
"flee from zombie": {
|
||||
"ok": 4,
|
||||
"fail": 94,
|
||||
"lastTs": 1779951420083,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 37053,
|
||||
"totalDurationMs": 2830611
|
||||
},
|
||||
"attack drowned": {
|
||||
"ok": 10,
|
||||
"fail": 15,
|
||||
"lastTs": 1779881719294,
|
||||
"lastCode": "hostile_still_near",
|
||||
"lastDurationMs": 3344,
|
||||
"totalDurationMs": 40858
|
||||
},
|
||||
"flee from drowned": {
|
||||
"ok": 0,
|
||||
"fail": 64,
|
||||
"lastTs": 1779888953259,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 30089,
|
||||
"totalDurationMs": 1914257
|
||||
},
|
||||
"survive.flee": {
|
||||
"ok": 4,
|
||||
"fail": 71,
|
||||
"lastTs": 1779960760403,
|
||||
"lastCode": "stuck",
|
||||
"lastDurationMs": 11079,
|
||||
"totalDurationMs": 1742016
|
||||
},
|
||||
"flee from skeleton": {
|
||||
"ok": 2,
|
||||
"fail": 65,
|
||||
"lastTs": 1779948570425,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 37011,
|
||||
"totalDurationMs": 2033525
|
||||
},
|
||||
"flee from spider": {
|
||||
"ok": 4,
|
||||
"fail": 25,
|
||||
"lastTs": 1779951627557,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 7225,
|
||||
"totalDurationMs": 815204
|
||||
},
|
||||
"attack skeleton": {
|
||||
"ok": 11,
|
||||
"fail": 9,
|
||||
"lastTs": 1779948471101,
|
||||
"lastCode": "no_target",
|
||||
"lastDurationMs": 704,
|
||||
"totalDurationMs": 45795
|
||||
},
|
||||
"flee from creeper": {
|
||||
"ok": 3,
|
||||
"fail": 44,
|
||||
"lastTs": 1779948015270,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 37025,
|
||||
"totalDurationMs": 1368266
|
||||
},
|
||||
"attack creeper": {
|
||||
"ok": 17,
|
||||
"fail": 21,
|
||||
"lastTs": 1779949854216,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 2029,
|
||||
"totalDurationMs": 41966
|
||||
},
|
||||
"flee from enderman": {
|
||||
"ok": 1,
|
||||
"fail": 21,
|
||||
"lastTs": 1779952594115,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 37020,
|
||||
"totalDurationMs": 649095
|
||||
},
|
||||
"attack spider": {
|
||||
"ok": 7,
|
||||
"fail": 269,
|
||||
"lastTs": 1779951473733,
|
||||
"lastCode": "hostile_still_near",
|
||||
"lastDurationMs": 3528,
|
||||
"totalDurationMs": 54422
|
||||
},
|
||||
"attack enderman": {
|
||||
"ok": 0,
|
||||
"fail": 2,
|
||||
"lastTs": 1779883311290,
|
||||
"lastCode": "hostile_still_near",
|
||||
"lastDurationMs": 3371,
|
||||
"totalDurationMs": 4120
|
||||
},
|
||||
"flee from witch": {
|
||||
"ok": 0,
|
||||
"fail": 2,
|
||||
"lastTs": 1779878325865,
|
||||
"lastCode": "timeout",
|
||||
"lastDurationMs": 30008,
|
||||
"totalDurationMs": 60053
|
||||
},
|
||||
"survive.pillar-up": {
|
||||
"ok": 0,
|
||||
"fail": 199,
|
||||
"lastTs": 1779961367632,
|
||||
"lastCode": "no_progress",
|
||||
"lastDurationMs": 12158,
|
||||
"totalDurationMs": 5515785
|
||||
},
|
||||
"survive.acquire-food": {
|
||||
"ok": 0,
|
||||
"fail": 123,
|
||||
"lastTs": 1779948857447,
|
||||
"lastCode": "already_have",
|
||||
"lastDurationMs": 1,
|
||||
"totalDurationMs": 68883
|
||||
},
|
||||
"survive.sleep": {
|
||||
"ok": 0,
|
||||
"fail": 4,
|
||||
"lastTs": 1779948392381,
|
||||
"lastCode": "daytime",
|
||||
"lastDurationMs": 0,
|
||||
"totalDurationMs": 1
|
||||
},
|
||||
"explore.wander": {
|
||||
"ok": 90,
|
||||
"fail": 77,
|
||||
"lastTs": 1779952509376,
|
||||
"lastCode": "failed",
|
||||
"lastDurationMs": 18316,
|
||||
"totalDurationMs": 2556361
|
||||
},
|
||||
"diag.scan": {
|
||||
"ok": 2,
|
||||
"fail": 0,
|
||||
"lastTs": 1779952108067,
|
||||
"lastCode": "scan_done",
|
||||
"lastDurationMs": 1175,
|
||||
"totalDurationMs": 2764
|
||||
},
|
||||
"village.relocate": {
|
||||
"ok": 0,
|
||||
"fail": 6,
|
||||
"lastTs": 1779961426942,
|
||||
"lastCode": "stuck_in_place",
|
||||
"lastDurationMs": 56464,
|
||||
"totalDurationMs": 586374
|
||||
},
|
||||
"survive.scout-food": {
|
||||
"ok": 1,
|
||||
"fail": 44,
|
||||
"lastTs": 1779949085516,
|
||||
"lastCode": "already_have",
|
||||
"lastDurationMs": 1,
|
||||
"totalDurationMs": 326284
|
||||
},
|
||||
"survive.eat": {
|
||||
"ok": 3,
|
||||
"fail": 0,
|
||||
"lastTs": 1779946551109,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 1630,
|
||||
"totalDurationMs": 4901
|
||||
},
|
||||
"eat": {
|
||||
"ok": 3,
|
||||
"fail": 0,
|
||||
"lastTs": 1779946560105,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 1637,
|
||||
"totalDurationMs": 4896
|
||||
},
|
||||
"gather.wool": {
|
||||
"ok": 0,
|
||||
"fail": 15,
|
||||
"lastTs": 1779951016664,
|
||||
"lastCode": "no_path",
|
||||
"lastDurationMs": 30030,
|
||||
"totalDurationMs": 439630
|
||||
},
|
||||
"craft.planks": {
|
||||
"ok": 1,
|
||||
"fail": 0,
|
||||
"lastTs": 1779950947695,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 85,
|
||||
"totalDurationMs": 85
|
||||
},
|
||||
"diag.physics": {
|
||||
"ok": 3,
|
||||
"fail": 0,
|
||||
"lastTs": 1779952458860,
|
||||
"lastCode": "done",
|
||||
"lastDurationMs": 6835,
|
||||
"totalDurationMs": 20477
|
||||
},
|
||||
"survive.dig-in": {
|
||||
"ok": 4,
|
||||
"fail": 6,
|
||||
"lastTs": 1779961089100,
|
||||
"lastCode": "no_progress",
|
||||
"lastDurationMs": 672,
|
||||
"totalDurationMs": 165764
|
||||
},
|
||||
"sleep": {
|
||||
"ok": 0,
|
||||
"fail": 2,
|
||||
"lastTs": 1779961091425,
|
||||
"lastCode": "other",
|
||||
"lastDurationMs": 1,
|
||||
"totalDurationMs": 3
|
||||
},
|
||||
"recovery.escape-pit-safe": {
|
||||
"ok": 0,
|
||||
"fail": 1,
|
||||
"lastTs": 1779960794335,
|
||||
"lastCode": "no_strategy",
|
||||
"lastDurationMs": 1,
|
||||
"totalDurationMs": 1
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user