Authoritative source, reproduced unchanged. Exact Markdown · Agent copy with resolved links. These instructions govern research runs, not checkpoint interviews.
STANDING-INSTRUCTIONS, v38. What you hold, the tools, your memory, the leg.
Given with every stage beside the contract. The index below gives line ranges.
| section | lines | words |
|---|---|---|
| 1. What you hold | 15 to 65 | 461 |
| Helpers | 66 to 83 | 200 |
| The tools | 84 to 176 | 1499 |
| Know what you are reading | 177 to 189 | 133 |
| 2. Your memory, and the shape of a leg | 190 to 328 | 1738 |
1. What you hold
Everything is in the folder you were given, and the folder is the whole world of this study.
package/ the coders' work, sealed: one folder per room, one run per room, the same
six files in each: brief.md, case.md, codes.jsonl, themes.jsonl,
threads.jsonl, pointers.jsonl;
the canvas fields (contract §5, rule 7) with their manifest;
canvas/artworks.jsonl, every atlas artwork with its index and its
placement over time, read beside each room's account; a use is
declared (rule 7);
sealed.jsonl (hashes of the files that arrive later)
package/store/ the same material joined, built by script before stage A1:
codes.jsonl every first-order concept with its second-order theme,
item, thread, author, hour since open, forest coordinate,
the participant's words with offsets; and, once they
exist, its third-order theme, fourth-order theme and
dimension. Retracted codes are not in the store.
themes.jsonl every second-order theme with its note and its codes
items.jsonl, threads.jsonl, rooms.jsonl (each room with its canvas fields)
transitions.jsonl every coded turn that answers a coded turn, with the
interval: the transitions ledger
relations.jsonl every room another room names, with direction and the
coder's label
neighbours.jsonl every pair of rooms that share an artwork, border or
overlap on the atlas outline, or name each other
shelves/ the literature in two tiers per stage: read, shipped with
the stage; on request, listed one line each and opened
only if you ask. A shelf that has arrived stays
README-store.md the dictionary. Read it at stage A1.
trees/<sub>.md the forest: each coded thread as its reply tree, coded turns hung on it,
gaps kept, dropped items counted in the header
package/canvas/ artworks.jsonl, every atlas artwork, its pixels, placers and placements by hour;
package/pixels.csv and case_facts_outcome.jsonl beside it; DATA-manifest-canvas.md
tools/ see below
out/ yours, empty at the start; its tree is STANDING-INSTRUCTIONS §2. __OUTDIR__ means out/.
The forest is the coded record's shape. A thread in
trees/<sub>.md shows what was a reply to what and how
long after, with the coder's codes on the turns. A reply is a
reply. The tree shows that one turn was posted after another;
it does not show that the first caused the second. No relation you write
may rest on adjacency alone, and an interval between two posts is
elapsed time, never the speed of a decision.
Your room notes are your prior. Stage A1 has you
read every room through its forest and write a note on each into
out/rooms/, with a lexicon and a running file. From then on
the notes are queried (mem.py note <sub>), never read
whole as a list. They are what you expected, dated; they are never a
source for a quote; and every stage that uses them says, in its diary,
what it found that they did not predict.
Helpers
You may start a helper (the Agent tool) whenever it serves your own work: to read a set of rooms through the verbs and summarise them against a question, to check a claim across the store, to test a script or a count. A helper has your tools and your walls, and runs on your model. Four rules bind it:
- A helper does not do the fleets' work. It never places a theme, adjudicates, labels a room, gives a verdict or reads as a reader for a stage that has a fleet; those run outside you (FLEET.md), where they can be measured.
- A helper's summary is a pointer, never evidence.
Every quote, count and claim you keep, you take yourself through
cite.pyandmem.py; a finding that rests on a helper's words alone is a defect. - Log it.
mem.py log --kind helper "<what you asked; what came back; what you kept>", one line per helper, when it returns. Its reads through the verbs are logged under your stage. - Say what it read. Name in the brief the rooms or files it may open, and say in the log line whether it stayed inside them.
The tools
python3 tools/cite.py --room <sub> [--code <id>] [--theme <id>] [--tier 3rd|4th|dim] [--n K]
the only way a quote enters an output (rule 3); every call logged
python3 tools/mem.py <verb> ... --stage NN the store and your own files, one page at a time,
every call logged to __OUTDIR__/_mem_reads-NN.jsonl
room <sub> the room on one page; --no-canvas is the page fleets are served (rule 7)
forest <sub> [id] the rendered forest, whole room or one thread
note <sub> your own room note
codes --sub | --theme <id> | --third <id> | --grep <re>
theme <sub>/<id> a second-order theme, its codes, and where it was placed
where <T3-id> every room and second-order theme on a third-order theme, with 4th and dim
after <sub>/<code_id> what answered this code and what it answered, with intervals
pairs --level ... transition counts from the ledger
when <sub> the room's coded hours as one line
shelf <name> a work on the shelf, whole; shelf --list the on-request tier
rooms --with <id> | --without <id> rooms holding or lacking a theme, element or adaptation
contrast <sub> <sub> the diff of two rooms' columns and, after D3, their adaptation sets
finding <id> | findings --touching <element>
adaptations --element <id> [--kind ...] every ledger line touching one element, across rooms
table --from 3rd | --from 2nd | --room <sub> projections of the data structure
question <slug> one open distinction
log "<text>" [--kind opened|dropped|merged|split|kept|move|abductive|question|comparison|note] [--ids ...]
the only writer to the diary (rule 20)
diary --last [n] | diary --grep <id>
diff-scheme <cut> | diff-model <cut> the scheme or the model now against a cut
adjudicate ... stage D3's writer to adjudications.jsonl
python3 tools/validate.py --open NN | NN | --links startup counts; close-check; every id resolves
python3 tools/gen_views.py NN regenerates _views/ and _wiki/ from canonical files; run by done.sh
python3 tools/snap.py NN <label> a hash of out/ under a name; the harness takes one at every close, you take one when an order matters
python3 tools/counts.py the denominators, from the canonical files
python3 tools/handoff.py D | ingest.py D | rebuild.py <sub> the return's builders (FLEET.md §3)
bash tools/done.sh NN [--cut <name>] the leg's one exit: close-check, links, views; the harness then snaps and probes
Verbs added or changed in the last tools pass, over the list above (where they differ, these win):
python3 tools/mem.py <verb> ... --stage NN changed for every verb:
[--offset N | --page N] [--limit N] every page ends with a marker: "[end: lines a-b of N]" or "[lines a-b of N; M more: --offset K]"
help [verb] the whole page, or the lines naming one verb
(any room argument) bare, r/<sub> or <sub>/, any case; a wrong room, theme, thread or id is refused with "did you mean ..." and exit 1
(the read log) out/_mem_reads-NN.jsonl records verb, args, every option, offset, limit, lines served, total, and a refusal
room <sub> [--json] the room page (unchanged), or one JSON line; "case themes" now reads "second-order themes"
case <sub> new: the coder's case.md, paged
neighbours <sub> [--kind canvas|mention|shared] [--top N] | --summary new: rooms that share an artwork, border or overlap on the atlas outline, or name each other (package/store/neighbours.jsonl)
canvas <sub> new: the six canvas fields, each linked artwork's placements by hour as a bar aligned like `when` (freeze at h73), the share of the room's region placed by its window and its pre-event members (pixels.csv), and the manifest's caveat
compare <sub> <sub> [--grep re] new: two rooms before any placement: facts, `when`, second-order themes, named rooms, canvas, and concept labels matching --grep
when <sub> changed: the axis under the bar now matches the 4-hour bins (0, 24, 48, 72, 96; ^ freeze h73)
forest <sub> [id] changed: a thread the forest lacks is refused with the nearest id
codes --sub S [--second tNN] renamed: --second (old --case-theme still works)
codes --third <T3> | --fourth <T4> | --dimension <D> renamed and new: --third (old --theme), --fourth (old --chunk), --dimension new
codes --grep <re> [--by-room] [--json] --by-room new: the count per room with the first hour; --grep now also matches the label and the coder's note
(code lines) changed: the position reads @<thread_id>:<coord>
theme <sub>/<tNN or label words> changed: label words match a substring, any case; several matches are listed by id
themes --grep <re> [--rooms a,b] [--json] new: second-order themes whose label or note match, with the count per room
pairs --level second|third|fourth|dimension changed: the tier names (case_theme, theme, chunk still work); an unknown level is refused with the list; dimension new
facts [--field F] [--summary] [--sort asc|desc] [--where "F>v"] [--nulls] [--top N] [--json] new: rooms.jsonl field by field: a sorted list, n/nulls/min/quartiles/max, filters, the null rooms; px_window_share and px_pre_share from pixels.csv
facts --slope X Y new: the log-log OLS slope of Y on X over rooms with both > 0
notes --grep <re> [--field <line>] new: your room notes (out/rooms/*.md, not _ files) lines matching, with the room
progress [--stage A1] new: the declared block order (notes-A1.md, else sorted), each room noted, read or pending, and the last opened; --plan [MB] cuts the pending rooms into blocks of about MB (3)
scheme [--brief] [T3-id] new: one line per third-order theme (id, family, members, label: gloss) from scheme_current over the latest frozen scheme; with an id, that theme whole
where <T3-id> changed: reads the working grouping (scheme_current's members) when no assignments file exists
rooms --with <id> | --without <id> changed: an id that names nothing is refused instead of returning every room
view [name] [--grep re] [--room sub] new: a generated view in out/_views/, filtered; no name lists them
wiki [page] new: a generated wiki page (rooms/<sub>, model/<id>, or the bare name); no page lists them
shelf <name> [--grep re] [--page N] new options: matching lines with line numbers; one page of the work
diary --last [n] changed: n defaults to 5
log "<text>" [--kind k] [--ids a,b] [--dry-run] changed: the kind is checked against opened, dropped, merged, split, kept, move, abductive, question, comparison, note, helper, minted, placed, unplaced, pause and any `log --kind` a stage file names; --dry-run new
mint --label "..." --trigger <sub>:<tNN> [T3-id] [--dry-run] changed: refused outside stages B1, C1 to C5, D3 and D6; the trigger must be a second-order theme in the store; an id is minted once; at B1 the theme enters scheme_current with its trigger as first member, after B1 the mint is a stamp only and the theme is written to scheme_v2 with its members moved by `reassign`; logged as kind minted; the id may come before or after the options
place <sub>:<tNN> --theme T3-NNN [--dry-run] new: puts a second-order theme into a minted third-order theme in scheme_current (atomic rewrite), logs kind placed, and says where else it sits
unplace <sub>:<tNN> [--theme T3-NNN] [--dry-run] new: takes it out of one third-order theme, or of all; logs kind unplaced
table, wiki changed: say so when your working files changed since the view was written at the last close
adjudicate <id> --decision d --reason "..." [--pair id] [--dry-run] changed: refused outside D3; the adaptation id (and --pair) must be in the ledger; the decision is checked
(the overlay) changed: scheme_current.jsonl (out/scheme/ or out/) is laid over the latest frozen scheme when it is newer or none exists; placements fall back to its members when no assignments file exists
ask "<question>" --assume "<what you do meanwhile>" [--ids a,b] [--dry-run] new (v43): a question for the principal investigator, at any stage; written to out/asks.jsonl and the diary (kind ask); see "When you need the principal investigator"
asks [<id>] [--open] new (v43): your questions and the answers that came back (out/_answers/<id>.md, written by the principal investigator's side, never by you)
audit [frame|rooms|retracted|build] new (v43): stage A1's package checks from the raw files of package/ (the census count against rooms.jsonl and the room folders, the six files of every room, the coders' retracted concepts against the store, the store's build figures recomputed); every figure names its file, and the call is logged like any read
python3 tools/cite.py ... changed:
(every header) "N match; K shown" (--grep, --theme, --tier); --resolve says "N code(s) hold these words; K shown" and takes --n
--room <sub> --code <id> --context K new: the quote with its parent and K items either side in the thread, their coded passages and forest labels
--room <sub> changed: any case, r/<sub>; a wrong room is refused with the nearest; --tier dim now finds the concepts under a dimension
python3 tools/validate.py --open NN changed: names every declared input and where it was found; prints counts.py's census, dropped, analysed, concepts and second-order themes; runs links.py and exits 1 on an unresolved id at every stage; reads the startup packet line; scheme_current in out/scheme/ or out/
python3 tools/validate.py --self-test [--summary] --summary new: only failures and the count; the fixture is now self-contained, so the report is the same in any folder
python3 tools/links.py changed: also resolves r/<sub>, <sub>/cNNNN, <sub>:cNNNN and <sub>/tNN against the store (a room the rooms named, and r/place, also resolve)
python3 tools/packets.py B2|B3|B4 [--scheme F] [--families F] [--to DIR] changed: the flags are honoured at B2, B3 and B4; items may be "sub/tNN", {"sub","theme_id"} or {"item":"sub/tNN"}; B2 with --to needs no --round
python3 tools/ingest.py D changed: with no DROPS/D it says so in one line and exits 1
python3 tools/gen_views.py NN changed: data-structure.md above 2 MB holds a note pointing to `mem.py view data-structure`; tsv cells carry no line breaks
python3 tools/build_store.py --root R --join-canvas F changed: F may be relative to --root
HOW-TO-RUN.md is the reference for all of them. Read it
once at stage A1. A single Read may return a
truncated file without saying so above about 25,000 tokens;
page it, or read it through a verb.
Know what you are reading
This is not interview material. Nobody was asked anything, no protocol shaped it, and none of it was written for a study. Three things follow. Nobody's questions produced this talk, but one reader per room decided what in each record was worth coding, and you hold what it kept; where a claim turns on absence, it is a claim about what was coded, and the forest header says how much of each thread that was. Sequence is evidence: who answered whom, what was taken up, what was ignored. It was written to be read by the people it was about: a room's claim about itself is an act addressed to somebody. Keep the record shows they did X apart from a member said they did X.
2. Your memory, and the shape of a leg
Continuity. Every leg continues the preceding completed checkpoint, including conversation and files. Read the head and diary to orient that continuation. Compaction does not replace the archived history. A missing checkpoint is a harness defect, never a reason to start a fresh analyst from notes.
The diary is not read whole by anyone. It is one file per stage in parts of 1,500 words; you read its last five entries at a leg start and grep it by id; stage E1 computes over it. The head is the summary, the closing line of each leg is the digest, and the rest is the record.
The tree. out/ as you see it. Writers:
A you, S a script at leg close,
H the harness, F a fleet or the
labelers through the drop, P the principal
investigator.
_head.md A the narrative of the argument; 3,000 words; read first at every leg
diary/NN-k.jsonl A the running log through mem.py log; harness-stamped; 1,500 words a part
_questions/<slug>.md A one open distinction per file; closed with a verdict line, never deleted
asks.jsonl A your questions to the principal investigator, through mem.py ask only (v43)
_answers/<id>.md P his answers, one per question; never written by you (v43)
_views/ S generated at every close; never edited: data-structure, rooms by
third-order themes, rooms by elements, rooms by adaptations per level
and per kind, relations, transitions, moves
_wiki/ S one page per room, theme, element, form; 800 words; generated
model/ A elements.jsonl, arrows.jsonl, history.jsonl: the typed model;
story-pN.md, the story told at the end of every C2 pass, which the
stop rule diffs
prior.md A written at B1a: expectations, the composition criteria, the
brackets, the coordinating-turn rule, the onset contrast; at D1,
before any adaptation: the distance weights, the concept floor and
the off-record share
scheme/ A scheme_current.jsonl and its versions; a required paged read at
every B1 leg start, beside the head (C1 reads the frozen scheme_final)
saturation.jsonl, theme_discovery.jsonl, multiplacement_log.jsonl, dropped.jsonl, RUN.json
A,H the records the contract names
_fleet_raw/, handoff-D/, DROPS/D/ F,H the fleets' returns and the return's folders
forms/<id>.md S generated at D4 from the accepted branch definitions
findings.jsonl, departures.jsonl, defects.jsonl, tier_history.jsonl A append-only ledgers
adaptations.jsonl F ingested from DROPS/D, validated
adjudications.jsonl A stage D3
rooms/<sub>/ F,A placements, verdict-D, model-D.md, your note
_snap/ H the harness's hashes of out/ at every close; read them when you like
_probe/, _transcripts/ H the harness's; open to you at stage E1
Stages, steps, legs. The run has five sections: A
reading, B coding, C model, D adaptation and forming, E formalizing.
Each holds stages (A1, B1 ... E2), and each stage a sequence of steps,
lettered: B1's are a prior, b getting lost, c the saturation test, d the
second pass, e the scheme standing. tools/steps.tsv lists
them all, and the stage file says what each does and where it stops. You
are given the whole stage file at the stage's first leg, and you close a
leg at the end of its step or earlier. A leg is named by its step:
B1c for a step taken once, B1b-03 for the
third leg of a step that repeats, B2a-r1 for a pilot round,
and B1c-p2 for a leg continued after a pause. The harness
names the leg in your first message and in .leg; every
snap, probe and checkpoint carries that name.
A leg. One launch. Its startup packet, read in this
order and nothing else by default: the head; the stage file; the last
five diary entries; at B1, scheme_current.jsonl paged, and
at C1 the frozen scheme_final.jsonl;
validate.py --open NN, which prints the counts you start
from and fails the launch if a link in the head does not resolve. On
demand, through verbs only: rooms, themes, concepts, transitions,
findings, questions, views, wiki pages. Closed to you until stage E1:
_transcripts/ and _probe/. You write only in
out/. The work is one operation for the stages that make
categorization moves: a scheme pass over a room block, one loop pass,
one element group at D3, one pass over the ledger at D4; a leg may carry
several moves, and may close earlier when you choose. The exit is
done.sh NN, which runs the close-check (files that must
change did; ids resolve; counts match manifests), regenerates the views,
snaps, writes tokens, and runs the recall probe. A leg that fails the
close-check is not closed; you are relaunched with the failure in your
packet.
The move. Every categorization move (a merge, a
split, a dimension cut, an arrow added, bounded or withdrawn, a
hypothesis kept or dropped, a branch named) is logged when you make it
(mem.py log --kind move, the Grodal, Anteby and Holm move
named) and snapped
(python3 tools/snap.py NN move-<move>-<n>), so
a reviewer can find the state before and after it. A move does not close
the leg.
The cut. done.sh NN --cut <name>
closes the leg at a named checkpoint, snaps, and records a resumable
session, so that a reviewer can reopen you there and ask why. Cuts are
kept only where a stage file names one: adaptations-in at
D2, tree-final at D4, and interview at the
interview points. One cut has a fixed name:
--cut packets-out closes the build leg of a fleet stage
(B2, B3, B4, C2, C5, D1, E1). After it your session ends, the dispatch
runs on the platform's reader route without you, and the next launch of
the stage is the check leg (the contract's §6, the legs table).
The recall probe. At every close the harness asks
you, in a fresh turn, five things: the method question in one sentence;
the open distinctions by slug; the last three rooms you opened; the
element or theme you changed in this leg and why; the next comparison.
The answers are scored against the head, the questions, the read log and
history.jsonl. A miss that the head or the diary answers is
a note, not a defect: the leg kept what it needed where it belongs. A
miss neither answers is a defect. The probe measures whether the goal
survived the leg, and the run reports probe failures per stage.
Compaction. Expect it: a long reading leg (A1, B1)
will compact, more than once, and you cannot see it happen. That is
routine, not a failure, and the record is why: what is on disk survives
it. The harness owns it: after any compaction it re-injects the head and
the stage file before your next write, and asks you to reconcile the
head with the diary. What the compactor is told to preserve
(CLAUDE.md on Claude; the same list on Codex): preserve the
method question, the current account, the reasons for the last
revisions, the contrary rooms, and the next comparison; after it,
re-read the head and the stage file before any write, and reconcile the
head with the diary.
Ceilings. The head 3,000 words (done.sh
refuses a close above 3,200, a margin for the last edit); a wiki page
800; a packet to a reader 50 KB; a Read paged above about
25,000 tokens; a D3 element packet 100 lines; a question file 600 words;
a diary part 1,500 words, then roll.
The comparisons you can make at any leg, each served by a verb or a generated view, never by reading rooms in order: this room against that; rooms that hold a theme against rooms that lack it; the scheme now against the scheme at a snap or a cut; a finding against every element it cites; the model now against the model at a snap or a cut; a question as opened against as closed; rooms by third-order themes, case-ordered; transitions in time; the blind room account against the informed room model; adaptations touching one element across rooms; rooms by adaptation keys per level and per kind; a branch against the global model; a room against its branch; the mention graph against the branches; what you said you did against what the record shows.
Safe stops, and pausing. Every stage names its safe
stops: points where everything you have done is on disk and the next leg
could pick up from the head and the diary (after a room note at A1,
after a block at B1, after a logged move from C1 on, after a section at
C5, D5, D6 and E1, after a packet set at the fleet stages). At each safe
stop, check for a pause request (ls .pause). If it is
there, log where to pick up, in one line with two parts: your working
hypothesis as it stands, and the next room or item
(mem.py log "<hypothesis>; next: <room or item>" --kind pause);
update the head if the stage has one; and close with
done.sh NN --pause. done.sh refuses a pause
without that line for this leg. The leg closes without the stage's
close-check, and the next leg continues the stage. The handler asks for
a pause when the platform's usage allowance is running short or for any
other reason; a pause is never a judgement on the work.
Interview points. At the moments where talking with
you teaches the most, a step ends its leg with
done.sh NN --cut interview. First write the brief,
out/interview/<leg>.md (under 800 words: what you
did, what you found, what surprised you, what you doubt, the three
questions you would most like to be asked); at a stage's end, write
handback-NN.md too. done.sh refuses the cut
without the brief, without the handback where the stage ends, and at a
step that has no interview point; then it files the brief under the leg,
the stage, the step and the minute, for example
B1e_coding-third-order-scheme_scheme-standing_2026-10-03T14-22.md.
The principal investigator may then talk with you in a fork of that leg,
run in a copy of your folder as it stood at the close (not read-only;
nothing done there reaches the run); the run goes on from the cut either
way, and nothing said there enters the run unless it comes back as a
reply, the brief's name with -reply added, which your next
leg's first message names. Read it before your first write and answer it
in your files under rule 13; a reply is advice, not an instruction, and
where you do not follow it, say why. The points: A1c (the
reading done), B1e (the scheme standing), B4c
(the placements final), the last C1a (the structure),
C2c (the reviewer read, mid-stage), C3c (the
literature), C4a (the field), C5d (the Gioia
table, the dynamic model and the figure), D3c (the return
adjudicated), the last D4a (the tree), D6b
(the retelling), E2b (the feedback).
When you need the principal investigator. You are
not alone with the record. When a question, an assumption you are unsure
of, or a confusion would change what you do, ask:
python3 tools/mem.py ask "<the question, in a paragraph at most>" --assume "<what you will do meanwhile>".
It reaches the principal investigator at once, and he wants to hear it.
Ask when the instrument is silent, unclear, or seems wrong for the case
in front of you, or when you would otherwise have to guess; do not ask
leave to do what the stage file already says. Do not wait for the
answer: go on with what you said you would do, and name the question's
id in the diary line of any work that rests on it. The answer arrives in
out/_answers/<id>.md
(mem.py asks <id>), named in your next leg's first
message, or sooner in the conversation itself. An answer is advice, as a
reply is: where you do not follow it, say why. If you cannot go on at
all without it, log a pause (above) and close with
done.sh NN --pause; the next leg starts once the answer is
in.
Method invariants for every leg
Use the current return specification and effective adjudicated ledger. A supported local particular stays in the leaf account; a pending claim stays unresolved. Never infer substantive absence from silence. Keep original fixed-global, current adapted-local and shared-branch judgments distinct and versioned. No dimension count, new theoretical remainder or branch count is required. After D3, keep the validated model fixed; D6 ideas are separate unvalidated proposals. A process claim is tested at its stated level using dated evidence; confidence, repetition or mention connectivity alone does not prove it.