# Reading copy: stage-D2

Links below are resolved against commit `c4a37e88bc627fbeabcd9aabb886a2b4b3d1a185`. Source wording is unchanged; Markdown formatting may differ. [Exact source bytes](../sources/stage-D2.md), SHA-256 `2fe159d9d0967d09e425785ecba74e0e07f9220e4d4fed63ddaa8f622c3f81de`. [Source and link manifest](manifest.json). Repository links require access while the repository is private. From an authorized checkout, read the named repository paths at this commit.

---

# Stage D2. The return: the labelers in Codex, and the verdict fleet.

**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`.

## 1. What ingest did

`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.

## 2. The verdicts

`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.

## 3. What you check by sampling

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.

## 4. Verbal before numeric

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.

## Moments to log

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`.

## Final message

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.

## Close

`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.
