From 98e60eab5b7cedc5ad0f58055dba5f93c1033974 Mon Sep 17 00:00:00 2001 From: Yuriy Mayatnikov Date: Mon, 22 Jun 2026 21:42:48 +0300 Subject: [PATCH] chore(dev): add v0.4.1 sampling artifacts (live-eval + samples log) Pre-cleanup snapshot before local removal. --- dev/v0.4.1/live-eval-2026-05-29-1250.md | 127 +++++++++++ dev/v0.4.1/sampler.sh | 59 ++++++ dev/v0.4.1/skill-metrics-baseline.json | 266 ++++++++++++++++++++++++ 3 files changed, 452 insertions(+) create mode 100644 dev/v0.4.1/live-eval-2026-05-29-1250.md create mode 100644 dev/v0.4.1/sampler.sh create mode 100644 dev/v0.4.1/skill-metrics-baseline.json diff --git a/dev/v0.4.1/live-eval-2026-05-29-1250.md b/dev/v0.4.1/live-eval-2026-05-29-1250.md new file mode 100644 index 0000000..c7082fe --- /dev/null +++ b/dev/v0.4.1/live-eval-2026-05-29-1250.md @@ -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 '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:` 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`. diff --git a/dev/v0.4.1/sampler.sh b/dev/v0.4.1/sampler.sh new file mode 100644 index 0000000..64e9b4e --- /dev/null +++ b/dev/v0.4.1/sampler.sh @@ -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:-}" + echo " disp : ${DISP:-}" + echo " stuck: ${STK:-}" + echo " wj : lines=${WJN} delta=$(( WJN - WJ_BASE )) last=${WJL:-}" + echo " conn : ${CONN:-}" + } >> "$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" diff --git a/dev/v0.4.1/skill-metrics-baseline.json b/dev/v0.4.1/skill-metrics-baseline.json new file mode 100644 index 0000000..3873c82 --- /dev/null +++ b/dev/v0.4.1/skill-metrics-baseline.json @@ -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 + } +} \ No newline at end of file