Open the live control panel | Research manual
**The dispatch and the check leg of the return.** Two things run outside your session, and you are launched only when both have left their files. The adaptation handler runs
one resumed original case lead per room, retaining its Codex history and matching files;
the handoff task is delivered in a separate return folder alongside its original workspace,
without another room's private history, holding the room's coder documents,
MODEL.md, LADDER.md and VOCABULARY.json, and returning model-D.md and
adaptations.jsonl into DROPS/D/<sub>/ with run.json (the labeler's model and session id);
the handler runs ingest.py --check <sub> after each room, has the failing rule repaired, keeps
returning rooms before any limit, marks a room unreturned in DROPS/D/UNRETURNED.tsv only
when it cannot return it, and writes DROPS/D/DONE with the counts. The verdict fleet runs on
the reader route, the dispatch sending packets to the routine readers, from verdict-D/, two
readers per room, returning into _fleet_raw/D2v/ and validated against RETURN-D2v.md, with
reissues for what fails the schema; when reissues are exhausted fleet.py stops and the
packets are rebuilt (FLEET §1). Neither reads your files. When both have returned, the harness
runs ingest.py D and relaunches you for the check leg with one line: the labelers and the
readers left their files.
**Check leg. Model:** as arm.json sets. **Steps:** D2a, the check, once both the labelers and the verdict fleet have returned. Each leg is named by its step (STANDING §2).
**Safe stops:** after each section of the check leg. At a safe stop, check for .pause (ls .pause); if it is there, log where to pick up, your working hypothesis and the next room or item
(mem.py log "<hypothesis>; next: <item>" --kind pause), and close with done.sh D2 --pause (STANDING §2).
**Startup packet:** _head.md, this file, SCHEMA-adaptations.md,
FLEET.md, the last five diary entries, validate.py --open D2.
**Reads allowed:** ingest.py's report; adaptations.jsonl by count and by the views, never as
a list; verdicts-D.jsonl; _fleet_raw/D2v/; DROPS/D/UNRETURNED.tsv and DONE; sampled
model-D.md files by query; prior.md §8. **Forbidden:** adjudicating a line (that is D3);
editing a return; re-running a labeler or a reader; editing the task template or the criterion
mid-return; EXPECTATIONS.jsonl against the ledger (that is stage E1).
**Outputs:** adaptations.jsonl (ingested, validated); verdicts-D.jsonl; ingest-D.md;
_views/rooms-x-elements.tsv (generated); rooms/<sub>/model-D.md and verdict-D copied
from the drops; notes-D2.md; the D2 counts in RUN.json; a run_manifest.json entry for
the labelers' model and the readers' model; handback-D2.md.
ingest.py D validated every line against SCHEMA §4: the schema (a known op, its required
fields, no extra fields); the model version against handoff-D/VERSION, with element ids in
VOCABULARY.json and not withdrawn; concept ids in the room's codes.jsonl and not retracted,
transition ids in the room's forest; how one sentence under forty words; portability (no
census subreddit name and no proper name from the room's lines in your lexicon-A1.md in condition,
statement or how, except in relation), a failing line kept with portable: false and a
particular by construction; the end marker matching the line count and model-D.md ending
with its marker. It lifted every source node through assignments_final.jsonl at the model
version (second-order theme, third-order theme, fourth-order theme, dimension, null where
never placed), computed kind and portable, stamped origin and labeler_run, checked that
every adaptation's element appears in the room model, and compiled the ledger; it reported per
room what failed and why, and the handler reissued what it could. A room with nothing to adapt
returned one none line with evidence for the fit; silence is a missing return, not a verdict.
You read ingest-D.md: rooms returned, lines accepted, lines flagged by rule, rooms
unreturned with the handler's reason, the distribution of lines per room and of ops, the share
of portable: false, the share of none rooms, the share of unplaced source themes (the lines
D3 may mint from). ingest.py wrote the counts of accepted, reissued and unreturned rooms into
RUN.json (SCHEMA §4), copied the room models and verdicts beside the notes, and marked every room
it rejected unreturned; check the counts against the report, since stage D4 reconciles every room
against them.
verdicts-D.jsonl: one line per room from the fleet, with each reader's themes, sentence and
cannot_tell_under, at R = 2; where the two readers differ, the room is listed for D3 to
rule with the criterion in front of it, and the disagreement rate is reported, by verdict pair.
Report cannot-tell by threshold (coded-share, off-platform, both), and check each against
the room's concept count and off-platform pointers on the line: one the numbers do not support is
listed for D3 beside the splits. The figure bounds whether the written criterion decides a
room, never whether the model is right (FLEET §2); say so where it appears. The labeler's grade
from model-D.md sits beside the verdict in the same file and never replaces it; the
cross-table of grade against verdict is reported here and again at E1.
Ten model-D.md files drawn by seed, stratified on verdict: does the room model cite element
ids where the model applies, [absent <id>] where it did not apply and was not needed, and
[new: ...] where no element covers what the room did; does every adaptation's element appear in
it; does every claim carry a concept citation from the room's own codes; does the prose read as
the room's organizing in the model's words rather than as a summary of the model; does the
grade's sentence name what the ledger names. Every quote you carry into notes-D2.md goes
through cite.py. What you find goes in notes-D2.md and, where it is a defect in the task
template, the return specification or the criterion, in handback-D2.md for the operator: none
of the three is edited mid-return, and a labeler is never re-run by you.
No verdict and no line is revisited because of a count. A share that looks bad (many
does-not-compose, many particulars, a thin ledger) is a fact to report; D3 assesses fixed-global fit, local adequacy and shared composition separately against
prior.md. Repeated corrections and a sparse ledger alone establish neither failure nor success.
The ingest report read, with the rule that flagged most lines; the RUN.json counts written;
the verdict disagreement rate and the cannot-tell lines the numbers do not support; each
sampled room model and what it showed; each defect sent to handback-D2.md.
Counts: rooms returned, reissued, unreturned, lines accepted and flagged by rule, lines per
room, ops by kind, none rooms, non-portable share, unplaced-source share, verdicts by value
with the disagreement rate, cannot-tell by threshold, the labeler grade against the fleet
verdict as a cross-table, the labelers' model and the readers' model from the manifest. A return
value.
done.sh D2 --cut adaptations-in: the adaptations and verdicts have arrived and nothing is yet
ruled on them, the moment D3's rulings are measured from; gen_views.py builds the element
views and the wiki pages; handback-D2.md;
the head; the closing diary line.