Authoritative source, reproduced unchanged. Exact Markdown · Agent copy with resolved links. These instructions govern research runs, not checkpoint interviews.
Run yard, coder instrument v32
Layout in this repository (2026-10-02). The yard's folders sit here under other names:
_instrument/isinstrument/,_tools/ishandler/tools/,_lead_sessions/islead-sessions/, and the scheduler's documents (CONTRACT-scheduler.md, CHECKPOINTS.md and the rest) are inhandler/.census/androoms/keep their names. The text below describes a working yard. The tools expect that layout (_tools/beside_instrument/androoms/): to run them, copy these folders into a yard folder of yours under the yard's names.handler/refresh_examples.pyrefreshesrooms/here from the study's yard.
One folder per community of the r/place census, each holding
everything a case lead and its fleet need to code that community's week:
the instrument, the record, the seven days before, the brief where one
exists, and the state of the work. Nothing here depends on which model
runs the agents or on which program launches them; a folder is complete
on its own and runs from any machine with python3.
coder/
README.md this file
CONTRACT-scheduler.md what the scheduler does between the agents (the job that
was done by hand on v29, written down)
STATUS.tsv one line per room; regenerated, never edited
_instrument/v32/ the reference instrument (every room carries its own copy; rooms
coded on v30 keep v30, which is in archive/)
census/ which communities are rooms, and why
_tools/
room.py one room, driven from outside: status, brief, run, message,
check, snapshot, fork, note
verify_room.py the scheduler's checks: the brief, each batch, the end
status.py rebuilds STATUS.tsv from every room's STATE.json
compare_forks.py a room's run and its forks side by side
build_room.py how a room was made from raw24 (to rebuild one)
update_instrument.py copy the reference instrument into every room, in place
add_openings.py write record/openings*.md into rooms that lack them
selftest.py, simcoder.py a scripted run of the whole procedure, no model called
selftest_brief.py, simbrief.py the same for the brief stage
rooms/<sub>/
ROOM.md the room's numbers and the commands, in order
STATE.json the room's memory
instrument/ the room's version, whole
record/coder_corpus.jsonl.gz the 97-hour cut: threads whole, context marked
record/preweek.jsonl.gz the seven days before the canvas opened
record/cut_stats.json the counts, computed at build
record/openings.md every thread's metadata, counts, title and opening text,
for the case lead (plus titles-only and digest files
above 1,500 threads); `room.py run` copies it into run/
brief/ built by `room.py brief` where no brief exists: the pre-week
rendered, the brief writer's contract and tools, out/brief.md
when written (298 rooms arrived with one from an earlier run)
run/ built by `room.py run`: the case lead's directory, the fleet
under run/fleet/batch_NN/
snapshots/after-fleet.tgz the fork point
forks/<name>/run/ a fresh lead's copy of the snapshot
Which rooms. The population is the 706 communities
with handable = 1 in census/MASTER-census.csv; the census page explains the judgements
that made that list. The scheduler codes the rooms listed in
STATUS.tsv (rebuilt by _tools/status.py) from
the bottom up, smallest first. The study's yard held 741 rooms on 27
September 2026, 33 of them outside the 708 of that day: r/place, the
field, coded apart (Manual/census.md), and 32 because they were built
before the screen closed them. On 4 October 2026 r/lehigh and r/upvote
left the population (no writing about the event while the canvas was
open), so 35 of the yard's 741 are outside the 706.
Persistent case-lead continuation
For a snapshot of both the case lead's native conversation
and the whole room's filesystem, use
_tools/codex_lead.py as described in CHECKPOINTS.md. Only the case lead
needs a saved native session; brief writers and fleet coders do not. The
adapter works in an isolated managed copy and checkpoints each completed
lead reply.
The room.py snapshot/fork commands below
are the older filesystem-only, fresh-lead research comparison. They do
not restore the original agent's conversation. On the last batch,
message collect now stops the lead before consolidation;
checkpoint there, then send message finish, which no longer
collects the same batch a second time.
What
was done to a room before the yard (PRIOR-RUNS.tsv, and
four columns of STATUS.tsv)
_tools/prior_runs.py reads every earlier coder run under
50_coding_runs/ (the batch tarballs and the run folders,
the hub runs too) and
40_analysis/coder_version/coder_version.csv, and writes
PRIOR-RUNS.tsv: one line per (room, run) with the
instrument version and fingerprint, the variant, the model that did the
reading, when it ran, whether it completed, and whether it is the run
whose codes are in the v35 aggregator package. It also stamps
prior_runs into each room's STATE.json, and
status.py summarises that into four columns of
STATUS.tsv: coded_before (the runs, oldest
first; (partial) where a run did not close),
coded_under (the instrument version of each),
coded_by (the model of each) and
in_v35_package (yes for the 298 package rooms the yard
holds; hyperlightdrifter and PokemonSage have
no room). Re-run prior_runs.py when a run is added under
50_coding_runs/; status.py keeps the
columns.
Where the model comes from: the manifests from v26 on record it;
before v26 no manifest has a model field, and the model is read from the
run's transcript (out/_transcript.jsonl, the first
assistant message), which is how the rank-band runs of v19 to v24 are
known to have run on claude-opus-5, the dispatcher having
passed no model argument; unrecorded where neither exists
(the hub runs, the v15 pilot). Of the 298 package rooms in the yard, 281
were coded by Opus and 17 (the tail of the v27 draw) by Sonnet.
Before anything runs on a machine
python3 _tools/selftest.py --instrument _instrument/v32 \
--record <any room>/record/coder_corpus.jsonl --sub <sub>
(gunzip -k the record first.) It runs a room through the
gate, the fleet, the pool, the forest, the audit and the close with
scripted agents in under a minute and prints
SELFTEST PASSED.
python3 _tools/selftest_brief.py --room rooms/<sub>
does the same for the brief stage on a copy of the room and prints
SELFTEST-BRIEF PASSED. If either does not, nothing else
should run.
Running one room by hand
From rooms/<sub>/, with
T=../../_tools/room.py:
python3 $T status where the room stands, and what is next
python3 $T brief --model <id> if the brief is to write; then launch an agent in
python3 $T message brief brief/ with this message
python3 $T check --brief when the writer ends (place its transcript first)
python3 $T run --model <id> builds run/
python3 $T message lead launch the case lead in run/ with this message
branch A: it reads and closes the room; then `check`
branch B: it dispatches batch 01 and stops; then, for each batch:
python3 $T message coder --batch NN launch a coder in run/fleet/batch_NN/
python3 $T check --batch NN when it ends (place its transcript first)
python3 $T message collect --batch NN --summary "..." send to the lead
python3 $T snapshot after-fleet when the last batch is collected
python3 $T message finish --batch NN send to the lead: consolidate, steps 4 and 5
python3 $T check when the lead has closed
python3 ../../_tools/status.py --yard ../..
CONTRACT-scheduler.md is the whole of it, with what to
look for and what to do when a check fails.
In Claude Code
Each agent is a session in its directory. Open a terminal in
rooms/<sub>/run (or run/fleet/batch_NN,
or brief/), start claude with the model you
chose, paste the message room.py message ... printed, and
let it run to its final message. The scheduler can be a person doing
this, or a Claude Code session opened in the yard's root with
CONTRACT-scheduler.md as its instructions and permission to
run python3 and to start the agent sessions. The transcript
of a session is under ~/.claude/projects/; copy it to the
agent's out/_transcript.jsonl before the check.
The same holds for any other runner that can start an agent in a directory with a message: the messages, the checks and the files are the same; only the launching differs.
The instrument
v30 is v29 with the threshold and budget at 500, a slice floor of 25,
the read audit reading the journal, four rules for the case lead's step
5, redispatch, two sentences in AGENT.md, the openings file
the case lead reads before the gate (CONTRACT-case-lead.md
§1a), a timeline seeded by the harness from the record's sticky and
moderator marks, the lead's ledger, and, after the audit of 2026-09-06,
emit checking every quote and every coded item against the
record and the read log as it arrives, close_run C8 to C10,
and the contract edits the audit asked for.
_instrument/v30/CHANGELOG-v30.md has the list and the
reasons; the r/muse pilot and the liverpoolfc batches that produced them
are in Layer A/50_coding_runs/ and in the project notes.
The instrument fingerprint every run records is over the files in
newrun.py's INSTRUMENT_FILES; a room whose
fingerprint differs from another's was not coded on the same instrument,
and close_run C7 fails a run whose files changed after
dispatch.
Sizes
The record and the pre-week are gzipped; room.py run and
room.py brief unpack them beside their .gz
when a room starts. The four rooms above 50,000 items unpack to hundreds
of megabytes and cut into 100 to 400 slices each.