Use for ab methodology recipes when optimizing a Coworld player.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use when decoding a Crewrift replay for authoritative deaths, survival, movement, roles, tasks, or rewards.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
The authoritative answer to "what actually happened in this episode" comes from
re-simulating the recorded replay, not from telemetry. replay_mine.nim loads the
recorded .bitreplay(.z) / .z replay, decompresses it (zippy), rebuilds the game
config, and replays the recorded inputs tick-by-tick through a real initSimServer.
Because roles and deaths are input + seed driven, the reconstruction reproduces them
exactly — that is why it is an oracle and not an estimate.
Do NOT infer death / survival / movement from:
trace.db matched observer (its game_over.alive_by_color is
UNRELIABLE — the trace ends mid-meeting and mismatched authoritative kills in 36–53 of
60 episodes), orresults.json (a matched observer; fine for scores/win/kills per
seat, but the per-slot diedTick/dist oracle lives only here).The tool in this package is universal/tools/replay_mine.nim (see its .note.md). It is
the canonical copy of the _crewrift-0136 branch oracle. It imports ./replays and
./sim relatively, so it must be built inside a live crewrift repo checkout, not in
this package.
Replays are public S3 objects, zlib/zippy-compressed.
https://softmax-public.s3.amazonaws.com/replays/{job_id}.z
GET {server}/v2/experience-requests/{xid} →
each episodes[] entry carries id (ereq_…), job_id, participants[], and a
ready-to-use replay_url (the public S3 URL). Use replay_url directly.Important: only experience-request episodes return a downloadable replay_url.
League-round (non-experience-request) replays are NOT available via API
(/v2/episode-requests 404s) — those are watchable only in the softmax.com Observatory
web UI. So always confirm cruxes via experience-request episodes, which DO return a
replay you can decode here.
Download it:
curl -fSL "https://softmax-public.s3.amazonaws.com/replays/{job_id}.z" -o /tmp/ep.z
# or, from an xreq detail:
curl -fSL "<replay_url from episodes[].replay_url>" -o /tmp/ep.z
Tip: the artifact-harvesting launcher universal/tools/antfarm_run.py saves
replay + results + logs per episode into episode_NN/ folders, so if you already ran it
the .z is on disk. (NOTE: that launcher is SUPERSEDED — it emits the pre-rework xreq
body and 422s until patched to the unified roster shape per the
crewrift-xreq-roster-api-change memory note. If you only need the replay URL, hit
GET /v2/experience-requests/{xid} directly instead.)
replay_mine.nim imports ./replays and ./sim, so build it where those sibling
modules and the data/ dir live — the crewrift repo's src/crewrift/.
# Copy this package's canonical copy into the live repo's src dir, then build:
cp /Users/daveey/packages/crewrift-player-optimization/universal/tools/replay_mine.nim \
<CREWRIFT_REPO>/src/crewrift/replay_mine.nim
cd <CREWRIFT_REPO>
nim c -d:release src/crewrift/replay_mine.nim
<CREWRIFT_REPO> is the live crewrift checkout. (session-derived, unverified) In recent
sessions that checkout was the _crewrift-0136 branch dir,
e.g. ~/code/crewrift/_crewrift-0136; confirm the actual path before building. If the
repo already has its own src/crewrift/replay_mine.nim, build that one — it's the same
oracle.
Run with cwd = the crewrift repo so it finds data/.
cd <CREWRIFT_REPO>
./src/crewrift/replay_mine /tmp/ep.z /tmp/ep.csv 2>/dev/null
.bitreplay, .bitreplay.z, or the .z from S3).2>/dev/null drops the sim's stderr noise. The tool also prints a full
kill / vote / meeting log to stdout during the replay — keep stdout if you want that
event log; redirect or ignore it if you only want the CSV.One row per slot, exactly config.minPlayers rows (the seated players):
slot,role,reward,tasks,alive,diedTick,dist
| column | meaning |
|---|---|
slot | 0-based player index — matches the seat order you passed images / roster entries to run-episode. |
role | crew / imposter, seed-deterministic. |
reward | final per-player score (the leaderboard input). |
tasks | tasks rewarded. (May diverge harmlessly from the live run — see gotchas.) |
alive | survived to end (true/false). |
diedTick | -1 = survived, otherwise the integer tick of death. |
dist | total Manhattan distance traveled (accumulated per tick from position deltas) — a movement / activity / positioning proxy. |
diedTick + dist are exactly what the crewrift-perception-presence-not-recall and
crewrift-leaderboard-gap-diagnosis notes mean by "replay-decoded": presence-at-kill,
isolation, and victim-link diagnoses all ground out in these columns.
To find YOUR tested policy's row: the slot is the seat you placed it in. To cross-check
against results.json (GET {server}/observatory/jobs/{job_id}/artifacts/results, whose
length-8 arrays are slot-indexed, slot i = seat i), match your
policy_version_id against participants[].position / participants[].policy_version_id
from the xreq detail to recover the seat index.
replay_mine.nim uses relative imports
(./replays, ./sim) and the sim needs data/. Build it inside the crewrift repo's
src/crewrift/ and run with cwd = that repo. Building it standalone in this package
fails to resolve imports.-1 means SURVIVED, not "died at tick -1". Filter diedTick >= 0 for
actual deaths.tasks / reward may diverge harmlessly from the live run (the tool's own header
flags this). role, alive, and diedTick are seed/input-exact and are what you trust
for who-died / who-survived. Use reward for relative scoring, not as a byte-exact match
to the live leaderboard.out.csv when scripting.softmax-public, prefix replays/, suffix
.z. League-round replays simply don't exist at that route — use an experience-request
episode's replay_url.role_resolved mapping.replay_ambush.nim / replay_pos.nim exists for other extractions
(kill-log, per-tick x/y/alive/role for all 8 slots at any sample rate). This
replay_mine emits the compact diedTick/dist/role/reward CSV — pick the tool that
emits the column you need rather than assuming one binary has everything. The position
variant is built the same way (import ./sim, ./replays; dump per-tick tracks).You have the oracle output when:
/tmp/ep.csv exists and its header is exactly slot,role,reward,tasks,alive,diedTick,dist.config.minPlayers data rows (typically the seated count, e.g. 8).role values are crew/imposter and the imposter count is plausible (not all-crew).diedTick is -1 for survivors and a positive tick for the dead, and the count of
diedTick >= 0 rows matches the kill/vote log the tool printed to stdout.If role is empty, all rows show diedTick = -1 on a known-lethal game, or the run
errored on a missing data/ path, you built/ran outside the crewrift repo — redo Step 2
with cwd = the live repo. If the download 403/404s, you used a league-round job_id or the
wrong S3 prefix — re-fetch replay_url from an experience-request episode.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Use for ab methodology recipes when optimizing a Coworld player.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use for ab methodology recipes in scripted Coworld policy optimization.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use for reusable ab methodology recipes in software and coding-agent work.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use for Crewrift-specific ab methodology recipes when optimizing a player.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use for Crewrift-specific agent workflow collab recipes when optimizing a player.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Use for agent workflow collab recipes when optimizing a Coworld player.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.