r/place A fruit fly for organization science

Authoritative source, reproduced unchanged. Exact Markdown · Agent copy with resolved links. These instructions govern research runs, not checkpoint interviews.

section lines words
1. Elements of the global model 29 to 61 322
2. Operations 62 to 110 587
3. The ledger line 111 to 137 237
4. Validation at ingest 138 to 158 201
5. The room model 159 to 174 183
6. Adjudication 175 to 200 207
7. What is built from the ledger 201 to 234 436
8. Reconstruction 235 to 246 116
9. The handoff folder (stage D1) 247 to 267 195
10. Decisions taken, and their consequences 268 to 296 264

The adaptation schema

Everything downstream of the return (adjudication, the taxonomy, the branch descriptions, the reconstruction test, the element views) works only if an adaptation is a typed operation on a named element of the global model, with evidence, and not a paragraph. This document fixes the types. It is deliberately small: five element kinds, seven operations, one ledger line, one adjudication line, and the files derived from them.

1. Elements of the global model

The model the analyst builds at stages C2 to C5 is stored in model/elements.jsonl, one line per element, and model/arrows.jsonl. Five kinds:

kind prefix what it is example statement
process P something the organizations do, as a verb phrase over time recruiting placers from outside the subreddit through a template post
condition K a state under which a process runs or a claim holds the artwork borders a hostile neighbour
claim C a statement relating processes, conditions and outcomes where K04 holds, P07 starts before the first attack, not after
role R a position members take that the model names the template keeper
arrow A a sequence or dependence between elements P03 precedes P07

Element line:

{"id": "P07", "kind": "process", "statement": "...", "tier": "T4-003", "dimension": "D2",
 "evidence": {"findings": ["F-031"], "codes": ["asoiaf:c0042", "denmark:c0117"]},
 "since": "C2-pass-3", "status": "standing"}

tier links the element to the fourth-order theme it belongs to; dimension to the aggregate dimension. status is standing, bounded, withdrawn or candidate (a proposed element accepted at D3 and not yet instantiated in a second room); a bounded element carries the condition ids that bound it. Every change to an element is a line in model/history.jsonl with the move (one of Grodal, Anteby and Holm's eight) and the leg. Ids are never reused; a withdrawn id stays withdrawn.

The id vocabulary the labelers receive at the return (D1 to D3) is the projection of elements.jsonl and arrows.jsonl at the model version hash written into the handoff: for an element id, kind, statement, tier and dimension; for an arrow id, kind, from, to and mechanism (and its statement where it has one); and status: tentative on an entry stage C4 took from the field. Nothing else.

2. Operations

Seven operations. The labeler chooses the operation; the kind (specification, elaboration, correction) follows from it and is not chosen. The aggregator may reclassify at D3, and the reclassification is logged.

op fields meaning kind
instantiate element, source, how the element operates here in this way: who, with what, at what moment specification
absent element, why, observation observed-absent or not-needed with evidence; unobserved or not-testable marks evidence limits evidenced absence is specification or a warranted correction; unknown states support neither
add-condition element, condition the element operates here only under a condition the model leaves open elaboration
add-step element, statement a finer process inside the element that the model does not name elaboration
link from, to, kind a sequence or dependence the room needs and the model lacks elaboration
restrict element, condition the element fails here unless the condition holds, and the model says otherwise correction
contradict element, statement the room's record contradicts the element as stated correction

The operations are this instrument's operationalization of Fisher and Aguinis (2017): instantiate and absent are vertical contrasting (the theory applied at another level of detail); add-condition and restrict are new construct specification of a condition; add-step is construct splitting; link is structuring specific and sequence relations; contradict and propose are horizontal contrasting. Busse, Kach and Wagner (2017) motivate exploring boundaries through construct refinement, moderators and mediators. Our two correction codes distinguish discrepancies, not mandatory outcomes: adjudication may bound, refine, extend or replace a formulation.

Source and target nodes . Every operation names a target in the model (an element id, or a dimension id for link) and, where it adds anything, a source in the room's own ladder: a second-order theme id of the room (denmark:t07) or a code id. add-condition and restrict give the condition as a source theme id; add-step gives the finer process as a source theme id; link connects a source theme to a target element or dimension; instantiate and absent name the target and cite codes. Free text lives only in how. Two labelers can no longer describe one adaptation in two vocabularies, because they point at nodes.

At ingest each source node is lifted through assignments_final.jsonl as it stands at the model version the handoff carries (stage C1's placements, re-decided by every logged recut since): second-order theme → third-order theme → fourth-order theme → dimension. The lifted path is stored on the line ("lift": ["denmark:t07", "T3-014", "T4-003", "D2"], with null at a level the theme was never placed at). An unplaced second-order theme lifts to nothing above itself; those are the lines from which D3 mints new third-order themes when several rooms' unplaced themes point at the same target.

An eighth form, propose, is not an operation on an element: it names something the room needed that no element covers. It carries a statement and evidence and is unattached until D3, where it may become a shared candidate element or a locally validated particular. Unshared does not mean false.

Relational adaptations use the same operations with a relation field naming the other room ("relation": "placenl"), so "defence delegated to a named neighbour" is instantiate on the defence process with a relation. Naming another room in relation does not make the line a particular; naming the room itself in condition does (§4).

3. The ledger line

adaptations.jsonl, one line per adaptation, written by ingest.py from the labelers' returns, never by hand:

{"id": "denmark-007", "sub": "denmark", "op": "add-condition", "element": "P07",
 "source": "denmark:t07", "lift": ["denmark:t07", "T3-014", "T4-003", "D2"],
 "condition": "the artwork is under attack from two sides at once",
 "statement": null, "how": "explains why denmark recruited outside placers on night two and not before",
 "evidence": {"codes": ["denmark:c0117", "denmark:c0118"], "transitions": ["denmark:t-C5"]},
 "relation": null, "portable": true, "kind": "elaboration",
 "origin": "labeler", "model_version": "sha256:…", "labeler_run": "codex-2026-11-…"}

Required for every line: sub, op, element (or propose with statement), at least one code id in evidence.codes, how as one sentence, model_version. source (a theme or code id of the room) is required for every op except absent, and for contradict it may be a code id rather than a theme; for instantiate it is the theme that shows the element operating, so that instantiations carry a key and enter the distance as specifications; condition and statement are the source theme's label copied for reading, not free text, except that contradict and propose may state in words what no theme names; from, to for link are source and target. kind, portable and lift are computed at ingest.

A room with nothing to adapt returns one line: {"sub": ..., "op": "none", "how": "the global model explains this room as stated", "evidence": {"codes": [...]}}, with evidence for the fit. Silence is a missing return, not a verdict.

4. Validation at ingest

ingest.py D accepts a room's return only if every line passes:

  1. Schema: the fields in §3, the op in §2, no extra fields.
  2. Element ids exist in the model at model_version, and are not withdrawn. A return against a stale version is rejected whole and reissued with the current packet.
  3. Code ids exist in the room's codes.jsonl in the store, and are not retracted. A transition id exists in the room's forest.
  4. how is one sentence (one terminal stop; under 40 words).
  5. Portability: condition and statement contain no subreddit name from the census and no proper name from the room's lines in the analyst's lexicon-A1.md, except in relation. A line that fails is kept with portable: false and is a particular by construction (contract rule 12).
  6. The return carries the end marker from RETURN-D.md and the room's line count matches its header.

Rejected returns go back through the handler with the failing rule named. Completion comes before any limit: the handler returns every room it can, and marks a room unreturned only when it cannot. Counts of accepted, reissued and unreturned rooms go into RUN.json at the close of D2.

5. The room model

rooms/<sub>/model-D.md, written by the labeler beside the ledger, is case.md rewritten in the model's vocabulary. Its sections are the aggregate dimensions, in the model's order. Inside a section the labeler writes prose, and every claim carries either an element id in brackets ([P07]) or a [new: …] marker for what no element covers, and a code citation ([c0117]) from the room's own codes. The file ends with a grade the labeler writes, composes, composes-with-residue or does-not-compose, and one sentence of why. The grade is the labeler's; the verdict, with its fourth value cannot-tell, is the fleet's (FLEET.md), and the two are reported side by side. The lead's grade concerns the adapted local explanation; the fleet verdict concerns the fixed global model. The return also requires local_status: validated | unresolved | insufficient-evidence and a ## Local exceptions section linking discrepancies to evidence and adaptations. Local validation is distinct from portability.

ingest.py checks the room model for the same id and code validity as the ledger, and that every adaptation line's element appears in the room model at least once.

6. Adjudication

adjudications.jsonl, one line per adaptation, written by the analyst at D3 through mem.py adjudicate:

{"adaptation": "denmark-007", "decision": "accept", "kind": "elaboration",
 "reason": "the condition is stated without the room, and asoiaf-011 meets it",
 "pair": "asoiaf-011", "change": "h-0412", "leg": "D3-P07"}

decision is accept, modify, reject, particular or pending. modify carries the rewritten condition or statement in a revised field, which passes the same portability check as the labeler's line, and the original stays in the ledger. A supported portable line with no shared warrant is particular. A line with insufficient evidence remains pending and unresolved at D3 close; pending lines are counted as such. pair names the second room whose accepted line meets the same candidate correction. Recurrence prompts a reasoned shared-warrant assessment, not automatic model revision; change names the logged revision or explicit scope decision when one is made. kind here is the analyst's, and differs from the ledger's when the analyst reclassifies.

D3 reads by element: mem.py adaptations --element P07 returns every accepted-or-pending line touching P07 across rooms, sorted by op. One leg per element group, one hundred lines per packet at most. After the elements, the propose lines: each becomes a candidate element (an elements.jsonl line with since: D3 and status candidate) or a particular.

7. What is built from the ledger

All generated by gen_views.py at leg close; none hand-edited.

8. Reconstruction

rebuild.py <sub> uses the effective adjudicated ledger. It includes accepted, modified and supported particular lines in local reconstruction. It lists pending lines as unresolved, never asserted support. The latest accepted room return replaces that room's earlier ledger even if its new ids list is empty. Original ledgers and model versions remain available.

Recheck ids include a digest of the line content and model version: R-<sub>-<digest>-NNN. An unchanged return is idempotent; a changed return cannot inherit an earlier line's adjudication. Prior recheck rows remain in the ledger and the latest accepted manifest selects current ids. Superseded compile files and local account copies remain under return-history/.

adaptation-returns.jsonl records each accepted return with sub, phase (initial or recheck), status: accepted, model_version, ids, local_status and local_grade. An old local return carries forward to a changed model only when D3 explicitly marks the room unaffected with a reason; all affected cases return to their original leads. The skeleton reports the current model hash, return version and local version status.

An absent line produces no only for observed-absent. not-needed, unobserved and not-testable retain their own meanings. Legacy unspecified absence is conservatively unobserved. Unknown states never enter shared adaptation distances as negative evidence.

At E1 a fresh reader receives the skeleton and the coder's blind case.md with the room's second-order themes, never model-D.md. Score all warranted claims, record evidence limits, and report reconstruction fidelity by branch and by historical global verdict. This is an in-sample preservation and composition check, not independent truth estimation.

9. The handoff folder (stage D1)

out/handoff-D/ written by handoff.py D:

10. Decisions taken, and their consequences

  1. Evidence states are distinct. A room need not use every global element. Only evidenced absence or lack of need supports a negative assertion. Silence and untestability are unresolved evidence, never a contradiction. An evidenced absence challenges a universal claim only after its scope and evidence are examined.
  2. Completion over reissue. No reissue limit as a rule; the handler's job is to get every room returned and to check that the returns work, and ingest.py reports what fails and why. A room is unreturned only if the handler says so, and the count is reported.
  3. Proposed elements enter the model in the same run. At D3 a propose line that the analyst accepts becomes an element and the model is rewritten with it. Then a re-check: a few of the rooms whose evidence produced the change are sent back through the labeler against the revised model, in a small second handoff (handoff-D/recheck/), and their new returns say whether the rewrite fixed what the evidence pointed at. The re-check rooms and their before-and-after ledgers are reported at 18.
  4. The labeler's packet carries the whole ladder. Beside the wiki pages of the elements its themes were placed under, the labeler receives the coding table with representative codes for every tier the model uses: quote, first-order concept, second-order theme, third-order theme, fourth-order theme, aggregate dimension, projected for the dimensions and elements in MODEL.md. A labeler that sees only its own codes cannot understand an aggregate dimension, so it cannot say what the model fails to explain. handoff.py builds this projection from _views/data-structure.tsv.