# Notes, stage B4: adjudication

Opened at B4a-01, 2026-10-12. The PI's leg message (21:19Z) carries J's rulings of 12 October: the contested inventory is `out/b3_classes.jsonl` from `tools/assemble.py`. Classes 1 and 2 stand; classes 3, 4 and 5 go to adjudication, with the gloss-only reads that section 1 keeps whatever the class. The blind sample at B4b adds a third reader per item from an OpenAI model, as a separate arm reported apart. Figures before any ruling come from `out/_analysis/b4_prepare.py` (`b4_prepare.json`).

## The gold drop (section 2)

- **Dropped.** All 755 seeded gold placements, told apart by (item, agent, replicate) on `batches-B3.jsonl`'s gold tags. All 755 gold lines in `assign_raw.jsonl` sit on those keys. The 1,210 duplicates' second copies are dropped as well; they are no corpus reading.
- **What `assign_final.jsonl` reads.** Only the corpus copies, as `b3_classes.jsonl` does: 15,688 lines, two per item. No line of `assign_final.jsonl` carries an agent or a replicate.
- **Count.** The drop removes placements, not themes. `assign_final.jsonl` holds one line for each of the 7,844 items, which is `counts.py`'s `assignment_items_expected`.
- **Fidelity on the gold placements** is stage B3's figure, read and not recomputed: 0.645 against the gold key, primary match 0.816 (`fidelity-B3.md`).

## The selection (section 1, J 2026-10-12)

The next table gives the classes from `b3_classes.jsonl`.

| class | rule | items | here |
|---|---|---|---|
| 1 | the two lists equal, order included, and equal to my B1 grouping | 2,566 | stands |
| 2 | the two lists equal and a proper subset of my B1 grouping; B1's other themes kept | 1,990 | stands, tagged `b1_grouping_kept` |
| 3 | the two lists differ, order included | 2,393 | ruled |
| 4 | the two lists equal and not inside my B1 grouping | 837 | ruled |
| 5 | no B1 grouping: the items I left in `unplaced-B1.jsonl` | 58 | ruled |

- **The gloss-only reads.** The 18 placements into a family neither reader opened all fall in class 3, so the contested inventory is 3,288 items.
- **Class 3.** 1,140 items share a primary and differ on an added theme or the order. 1,253 differ on the primary.
- **Class 4.** In 692 of 837 items the readers' list shares no theme with my B1 grouping.
- **Class 5.** In 42 of 58 items the two readers agree.

## The packets (sections 5 and 7)

I expect to rule on 3,288 items in seven packets of at most 500, one packet a leg. Packet 1 takes the 18 gloss-only items first. After that, every packet runs by the family of the first reading's primary, then by the pair of primaries. A family that does not fit runs on into the next packet.

The next table lists the packets.

| packet | items | families |
|---|---|---|
| 1 | 491 | the 18 gloss-only items; G01 313; G02 162 |
| 2 | 447 | G03 to G06 |
| 3 | 500 | G07; G08 (254) |
| 4 | 461 | G08 (6); G09 to G11 |
| 5 | 409 | G12 to G14 |
| 6 | 500 | G15 to G19; G20 (184) |
| 7 | 480 | G20 (52); G21 |

## The ruling policy, declared before the first item (section 5)

- **A reader's `confidence` and `why`.** Neither is a prior. A "clear" reading against an "arguable" one counts for nothing in the ruling. A reader's `why` points at material, and I check what it points at against the item's concepts. The ruling rests on the concepts read against the scheme's `must_show`, `must_not_show`, `decide_when_both` and discriminators.
- **My B1 grouping is shown as the third placement.** This is J's three-placement design. It is labelled as mine, and I weigh it like a reading, not as a prior.
- **A theme neither reader chose.** A ruling may name one, logged loudly: `named_neither` true, and the `why` says what both readers missed that the file does say. From item 401 of packet 4 this is replaced by J's rulings of 13 October: a ruling chooses among the readers' placements and my B1 grouping and adds no theme beyond them (see "Packet 4" below).
- **When the scheme does not decide.** The ruling is empty and `unresolved` true. The quote is the sentence of the scheme that failed to decide. The item is carried, not resolved by preference.
- **Boundaries ruled once.** Where five or more items of a packet split their primaries on one sibling pair, I rule the boundary once. It gets one paragraph in `adjudication_report.md`, quoting the discriminator, logged as one ruling with its item list. It is then applied to each item, and each item carries `boundary_ruling`.
- **The taxonomy by class.**
  - Class 3: by the readers' split, with the five values of section 7.
  - Class 4: the readers agree outside my B1 grouping. If the ruling takes the readers' list, the error was mine at B1: `author-error`. If it keeps a B1 theme both readers left out, it overrules them: `author-disagrees`. `item-is-a-bag` or `genuine-joint` apply where the material says so.
  - Class 5: I left the item unplaced at B1. If the readers' placement holds, my leaving it out was wrong: `author-error`. If the item holds no doing to place, the ruling is empty and `unresolved` true, with `author-disagrees` where both readers agreed. A split is ruled by the split.
- **`reader-error` is suspected last.** It is never given where both readers made the same miss.
- **Concepts behind each theme placed.** `support_by_theme` is taken from the reader line that placed the theme: its `support`, or its multiplacement record's `support_additional` for an added theme. Each is checked against the item. Where neither reader placed a theme, I name the concepts. A bag keeps its unplaced themes under `also_present`, each with its concepts.
- **The quote.** It is the deciding participant's words, a substring of the concept's text in the store, which is the rule `cite.py` resolves. A `scheme-ambiguous` ruling quotes the scheme sentence of the field that failed instead. No ruling cites a room note.

## Blindness (section 6)

No v38 tool strips the packets, so a script does it: `out/_analysis/b4_adjudication_packets.py`.
- **Stripped:** agent, batch, replicate, position and timestamps, and the dispatch's reader id.
- **The two readings** are shown as reading A and reading B, in an order seeded by 20261016 per item, so the replicate cannot be read off the order. Each keeps its set, `confidence`, `why`, `read`, `families_opened`, `bag` and `also_present`.
- **The item's material** is rendered from the store as `mem.py theme` gives it: the label, the coder's `theme_note`, and each concept with its id, label and the participant's words. The member name, hour and thread columns are dropped; no ruling needs them.

## The conflicts pass (section 4), declared

The pass runs over the coders' `theme_note` alone, with no concepts beneath it, across rooms. It runs packet by packet: before a packet's first ruling, I read that packet's notes grouped by the readings' primaries. `coder_conflicts.jsonl` grows with each packet and is whole when the last packet is ruled. Why packet by packet: a single pass over all 3,288 contested notes before any ruling would fill a leg on its own, and a conflict is wanted beside the disagreements it explains.

## `assign_final.jsonl` while the packets run

It is rewritten at every adjudication leg by `out/_analysis/b4_assign_final.py` and holds every item of the analysed set:
- **Classes 1 and 2:** `b3_classes.jsonl`'s placement, with class 2 tagged `source: "b1_grouping_kept"`.
- **A ruled item:** the ruling.
- **A contested item not yet ruled:** `third_order` empty and `status: "pending_adjudication"`, with the readers' confidence, so no line claims a placement before its ruling.

## Packet 1, ruled at B4a-01 (2026-10-12)

All 491 items are ruled, in 20 blind chunks of 25 (`out/_adjudication-B4/packet-01/rulings-NN.jsonl`, appended by `out/_analysis/b4_rule_append.py`). `out/_adjudication-B4/packet-01/summary.md` holds the figures, and `adjudication_report.md` holds them as the interim report after packet 1 of 7. In brief:
- **Taxonomy:** genuine-joint 137, scheme-ambiguous 123, author-error 97, reader-error 77, author-disagrees 37, item-is-a-bag 20.
- **Counts:** unresolved 52 (10.6%); named_neither 84 (17.1%).
- **Fields that failed:** must_show 78, discriminators 39, decide_when_both 4, must_not_show 2.
- **Themes that failed most:** T3-017 29, T3-023 27, T3-001 24.
- **Agreement:** before, reader against reader, 0.486 mean Jaccard; after, each reader against the ruling, 0.633. The figure after is not a reliability figure.
- **Mapping:** `assign_final.jsonl` was rewritten (class 1 2,566, class 2 1,990, ruled 491, pending 2,797).

What changed during the packet, and why:
- **Two rulings corrected in place.** formula1 t05 and elitedangerous t01 had used T3-063 for removals of posts that are not canvas posts, and T3-063's `must_show` begins "Canvas posts handled under the sub's standing rules". `b4_rule_append.py` gained a `--replace` mode. It rewrites the named items in place, marks each line `revised` with the UTC time, and keeps the old file as `disagreements.superseded-20261012T221214Z.jsonl`.
- **Three gaps ruled the same way each time,** written into `boundaries.md`:
  - April Fools play not posted as true (unresolved on T3-001's `must_show`);
  - another sub's April Fools change (unresolved on T3-023's `must_show`);
  - moderators applying standing rules to non-canvas posts (unresolved on T3-063's `must_show`, conflict CC-004).
- **Paragraphs added to `boundaries.md`.** The T3-032|T3-097 paragraph was extended for the overlap of "stop them or take them down" with "requests to switch back". Seven pairs met on fewer than five items gained short paragraphs.
- **A practice to declare for the later packets: a second theme on one concept.** It is added where a scheme rule says "a concept of its own": T3-023's rule for T3-097 and T3-100, and T3-017's three-concept rule. Elsewhere a second theme on one or two concepts was added only where the concept plainly passes another theme's gate. Where it was not added, the concept is named in the ruling's why. Single-concept additions were not perfectly even across the packet (magictcg t09's megathread concept was left out); the report says so.
- **The reader-error count.** Of 77, 16 fell in chunk 18, single-concept G02 items. Two there were changed to scheme-ambiguous before writing (tagpro t15, twitch t04), because the readers had matched a test's literal words and that test does not state its canvas condition.
- **Class 4.** I took the readers' list in 89 items and kept a B1 theme in 29. My commonest B1 errors are listed in the report.

The next packet is packet 2: 447 items, G03 to G06, chunks built in `out/_adjudication-B4/packet-02/`. The conflicts pass runs over its notes before its first ruling, as declared.

`validate.py B4`, after packet 1:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 491: {'genuine-joint': 137, 'scheme-ambiguous': 123, 'reader-error': 77, 'author-error': 97, 'author-disagrees': 37, 'item-is-a-bag': 20}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 491, outstanding 2797
  coder conflicts 8

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## Packet 2, ruled at B4a-02 (2026-10-12 to 13)

Before the first item:
- **The conflicts pass** read packet 2's notes alone, grouped by the readings' primaries, and added CC-009 to CC-016 to `coder_conflicts.jsonl` (16 lines now).
- **Seven boundaries were ruled once** in `boundaries.md` ("Packet 2"): every pair on which five or more items split their primaries (`out/_analysis/b4_packet_pairs.py`). Four are T3-002 against a sibling, so each paragraph says how a concept is counted toward one act or the other.

All 447 items are ruled, in 18 blind chunks of 25 (`out/_adjudication-B4/packet-02/rulings-NN.jsonl`). `packet-02/summary.md` holds the figures, and `adjudication_report.md` holds them with packet 1's as the interim report. In brief:
- **Taxonomy:** genuine-joint 215, author-disagrees 65, scheme-ambiguous 62, author-error 58, item-is-a-bag 44, reader-error 3.
- **Counts:** unresolved 10 (2.2%); named_neither 155 (34.7%), of which 98 add only themes from my B1 grouping.
- **Fields that failed:** must_show 33, discriminators 17, must_not_show 6, decide_when_both 6.
- **Themes that failed most:** T3-002 12, T3-033 9, T3-014 6.
- **Agreement:** before, reader against reader, 0.537 mean Jaccard; after, each reader against the ruling, 0.603. The figure after is not a reliability figure.
- **Mapping:** `assign_final.jsonl` was rewritten (class 1 2,566, class 2 1,990, ruled 938, pending 2,350).

What changed during the packet, and why:
- **The T3-016 correction (at item 146).** The T3-002|T3-070 paragraph had said that teaching a newcomer to place counts as directions. T3-016's `must_show` names "how to pick a colour and place". The paragraph now reads that such teaching is not a call, and is T3-016 when it explains the event. bindingofisaac t02 was revised by `--replace` (`revisions-01.jsonl`).
- **The T3-033 and T3-041 reading (from item 140).** T3-041's `must_not_show` gives "The room's first mark proposed" to T3-033. Proposals of a further piece beside a standing mark are T3-041, scheme-ambiguous on T3-033's `must_show`. clashroyale t02, ruled before the reading, was revised (`revisions-02.jsonl`). I checked the T3-033 concepts of the 22 other packet 2 rulings that place T3-033 with `out/_analysis/b4_theme_support_lines.py`; each proposes a first mark.
- **Class 4 went the other way.** In packet 1 I took the readers' list in 89 class 4 items and kept a B1 theme in 29. In packet 2 the figures are 53 and 63. Of packet 2's 65 author-disagrees, 39 keep the readers' theme and add mine under rule 0. The report says I cannot separate this from my pull toward my own grouping.
- **A batching slip, twice.** I put an Edit and the dry run that depends on it in one turn (revisions-01 and the chunk 12 fix). Both ran in order. I kept them apart from then on.

Readings applied in packet 2, to carry into the later packets (each from the theme's own sentences):
- **The counting rule for T3-002, T3-033 and T3-038.** Calls, volunteers and answers ("I'm in", "on it") count toward T3-002; placing and reports of the work's state, with coordinates of the work in progress, toward T3-038; a new mark named, even with a call for help, toward T3-033.
- **T3-065** takes the flag of the room's land, its calls and its proportions included (T3-002's `must_not_show`). **T3-169** takes the sub's name written; **T3-044** instead when bringing visitors in is the stated point.
- **T3-084** takes a request received from another room and another canvas group asked as a group; **T3-062** takes calls posted to other communities. "Canvas group" is undefined: scheme-ambiguous.
- **T3-074** needs the limit, the cooldown or a placing trouble while building. A member's exams, papers or sleep are not in its test (pakistan t10 scheme-ambiguous; rutgers t13 author-disagrees). With nothing built yet, doubt about the hands goes to **T3-136**, and a design scaled down to the hands to **T3-069**.
- **Smaller readings:**
  - T3-137 for following an outside sub's plan; T3-068 for another room's mark altered into the room's sign or joke;
  - T3-170 for friendly work mistaken for vandalism; T3-196 for former fans returning; T3-122 for greetings to or from neighbours;
  - T3-118 needs a loss; T3-125 for "we just wing it"; T3-141 for night shifts; T3-162 for vetting others' requests to build;
  - T3-116 for plans hidden from rivals; T3-111 for a canvas sub's future.

National, political and hate content is named in the whys as the words give it. Examples: "schleus de merde", an anti-German slur, in france t05; "until we reach the jews" in russia t04; the anarcho-capitalist and anarcho-communist flags in anarcho_capitalism t06; "Norwegian commie bastards" in texas t10.

The next packet is packet 3: 500 items, G07 and the first 254 of G08. Its conflicts pass runs over its notes before its first ruling.

`validate.py B4`, after packet 2:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 938: {'genuine-joint': 352, 'scheme-ambiguous': 185, 'reader-error': 80, 'author-error': 155, 'author-disagrees': 102, 'item-is-a-bag': 64}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 938, outstanding 2350
  coder conflicts 16

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## Packet 3, ruled at B4a-03 (2026-10-13)

Before the first item:
- **The conflicts pass** read packet 3's notes alone and added CC-017 to CC-025 to `coder_conflicts.jsonl` (25 lines now).
- **Nine boundaries were ruled once** in `boundaries.md` ("Packet 3"): every new pair on which five or more items split their primaries. Three pairs from packet 2 carry over as written: T3-002|T3-033, T3-002|T3-038 and T3-004|T3-070.

All 500 items are ruled, in 20 blind chunks of 25 (`out/_adjudication-B4/packet-03/rulings-NN.jsonl`). `packet-03/summary.md` holds the figures, and `adjudication_report.md` holds them with packets 1 and 2 as the interim report. In brief:
- **Taxonomy:** genuine-joint 231, scheme-ambiguous 106, item-is-a-bag 76, author-error 45, author-disagrees 39, reader-error 3.
- **Counts:** unresolved 7 (1.4%); named_neither 280 (56.0%), of which 123 add only themes from my B1 grouping and 157 add a theme no placement held (`out/_analysis/b4_named_neither_split.py`).
- **Fields that failed:** must_show 54, must_not_show 26, discriminators 23, decide_when_both 3. 24 of the 26 `must_not_show` failures are the homeland flag or its emblems.
- **Themes that failed most:** T3-004 25, T3-033 25, T3-038 11.
- **Agreement:** before, reader against reader, 0.475 mean Jaccard and 0.598 primary match; after, each reader against the ruling, 0.473 and 0.535. The figure after fell below the figure before, the first packet where it did. It is not a reliability figure.
- **Mapping:** `assign_final.jsonl` was rewritten (class 1 2,566, class 2 1,990, ruled 1,438, pending 1,850).

What changed during the packet, and why:
- **Three readings,** each written in `boundaries.md` where it was first met: the homeland flag's look (from item 16), a design cut down to the hands (from item 12) and a celebration while placement goes on (from item 280). catalonia t07 and packet 2's sadboys t03 were revised to match. The chunk 12 draft first read T3-009 against T3-026 by their `must_not_show` timing; T3-026's `decide_when_both` already decides the pair, so six draft lines were changed before the write.
- **T3-170 for members' own misclicks (from item 430).** Its `must_show` names "members' own misclicks or misplaced pixels owned and forgiven". bisexual t04 and kpop t05 were revised to place it (`revisions-02.jsonl`).
- **The append tool's support convention.** `b4_rule_append.py` (lines 131 to 145) lets the primary give up the concepts it shares with added themes where it keeps others. It does not resolve overlaps among added themes, and it refuses a placed theme only when its list equals another's. The new read-only check `out/_analysis/b4_own_support_check.py [--leg B4a-03]` lists placed themes whose concepts all sit under the ruling's other themes. It found seven (ManningPlace t05, KState t04, rainbowgrid t01, dofus t01, skyrim t03 and teamcube t04, and packet 1's nerf t08). All were rewritten by `--replace` (`packet-03/revisions-03.jsonl`, `packet-01/revisions-01.jsonl`). The check finds none over the three packets, and I ran it after every later chunk.
- **Boundary tags.** Eleven packet 3 rulings applied packet 2's counting rule but carried no `boundary_ruling`. The tags were added with the rulings unchanged (`revisions-04.jsonl`, built by the new `out/_analysis/b4_br_tag_draft.py`); a row comparison against the superseded ledger shows only the tag, the `revised` stamp and the why changed.
- **A log correction.** The chunk 13 line said the readers' list was taken in "11 of 17" class 4 items. The chunk holds 16 class 4 and 3 class 5 items, and a correction line says 11 of 19.
- **QB4-001 asked.** Two sources lowered agreement. In 76 items both readers put T3-038 first, and my rulings kept it first in 27. 201 of 500 rulings place three themes, often with a one- or two-concept theme no placement held. I asked J whether packets 4 to 7 should keep adding such themes. Meanwhile packets 4 to 7 are ruled as packets 1 to 3 were.

Readings applied in packet 3, to carry into the later packets:
- **The homeland flag.** The flag of the room's land, its build, size, expansion, proportions, spot, repair and calls for hands, is T3-065. Emblems in or beside it are T3-113. A reader's T3-004, T3-020 or T3-041 on that work is scheme-ambiguous on that theme's `must_not_show`.
- **Borders and help.** A border with no protection stated is T3-004, scheme-ambiguous on T3-055's `must_show`. "Defend" with no attacker named is T3-002. Refresh advice is T3-070. Requests received are T3-084. Permission asked of a host is T3-035, and the host's grant T3-012. Relying on a bigger room's protection is T3-099.
- **Smaller readings:**
  - T3-170 for members' own misclicks owned and forgiven; T3-171 for a colour or pattern faction spreading (EraseThePlace, the ss13 greytide);
  - T3-068 for converting another's mark; T3-061 for taking a neighbour's space; T3-081 for "Campaña al desierto"; T3-130 for national politics (Brexit, imam hatip, Hayır, "Zuma Must Fall");
  - a known mark located for a member is T3-026; a mark the room did not know of is T3-082 (CC-021);
  - "I added a little something for my bias", T3-092's own example, goes to T3-060 by T3-092's discriminator (bangtan t10, scheme-ambiguous).
- **Rule 0 as applied.** At most three placements. Order by concept count; ties go by how many of the three placements (reader A, reader B, my B1) hold the theme. A one- or two-concept theme is added when it passes its gate; where several tie with no placement ahead, none is added. Each placed theme has a concept of its own.

National, political, hate, sexual and drug content is named in the whys as the words give it. Examples: "LULA PRESO AMANHÃ" in brasil t02 and "LULA PRESO AMANHA" in brasil t04; "some fake nigga kept replacing my work" in drugs t01; Hitler moustaches kept off Kekkonen in suomi t07; a Menorah "less prone to being plastered by swastikas" in israel t01; "Thin Blue Line" in AmericanFlaginPlace t10; "based Pinochet snek" in physical_removal t02; "dirty limies" in detroitredwings t03; "yiff me daddy /r/furry" in furry t01.

The next packet is packet 4: 461 items, the last 6 of G08 and G09 to G11. Its conflicts pass runs over its notes before its first ruling.

`validate.py B4`, after packet 3:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 1438: {'genuine-joint': 583, 'scheme-ambiguous': 291, 'reader-error': 83, 'author-error': 200, 'author-disagrees': 141, 'item-is-a-bag': 140}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 1438, outstanding 1850
  coder conflicts 25

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## Packet 4, ruled at B4a-04 (2026-10-13)

Before the first item:
- **The conflicts pass** read packet 4's notes alone and added CC-026 to CC-036 to `coder_conflicts.jsonl` (36 lines now).
- **Four boundaries were ruled once** in `boundaries.md` ("Packet 4"): T3-005|T3-021 (B2's predicted pair 1), T3-021|T3-038, T3-005|T3-038 and T3-005|T3-073.

All 461 items are ruled, in 19 blind chunks (`out/_adjudication-B4/packet-04/rulings-NN.jsonl`). `packet-04/summary.md` holds the figures, and `adjudication_report.md` holds them with packets 1 to 3 as the interim report. In brief:
- **Taxonomy:** genuine-joint 219, scheme-ambiguous 84, author-error 75, item-is-a-bag 53, author-disagrees 17, reader-error 13.
- **Counts:** unresolved 10 (2.2%); named_neither 222 (48.2%), of which 89 add only themes from my B1 grouping and 133 add a theme no placement held, all 133 in items 1 to 400.
- **Fields that failed:** must_show 39, must_not_show 32, decide_when_both 11, discriminators 2. 20 of the 32 `must_not_show` failures are the homeland flag's repair on T3-021's `must_not_show`.
- **Themes that failed most:** T3-021 24, T3-005 10, T3-073 9, T3-027 7.
- **Agreement:** before, reader against reader, 0.519 mean Jaccard and 0.675 primary match; after, each reader against the ruling, 0.562 and 0.671. Not a reliability figure.
- **Mapping:** `assign_final.jsonl` was rewritten (class 1 2,566, class 2 1,990, ruled 1,899, pending 1,389).

What changed during the packet, and why:
- **QB4-001 answered, and the ruling rule changed at item 401.** J (06:43 Berlin): "Ask it to stop. The point is to try to adjudicate." J's rulings (06:47 Berlin), for the rest of packet 4: a ruling chooses among the readers' placements and my B1 grouping and adds no theme beyond them; it takes the union of placements only when it names, for each theme it keeps, the separate concept that carries it; otherwise it chooses. Chunk 17 had been read under the old practice; it was re-decided under the new rule before any line was written. Items 1 to 400 of packet 4, and packets 1 to 3, are re-ruled at the start of B4a-05, not now.
- **What the new rule did.** `out/_analysis/b4_agreement_range.py` (new, read-only) splits packet 4. Items 1 to 400: before 0.512 and 0.652, after 0.536 and 0.638, three themes placed in 179, a theme no placement held in 133. Items 401 to 461: before 0.566 and 0.820, after 0.726 and 0.883, three themes placed in 22, none beyond the placements. The two parts hold different families (G08 to G10 against G11), so the rise is not the rule's effect alone.
- **Rule 0 under the new rule.** Concepts count only toward placed themes; a concept whose act no placement holds is named in the why and left out of `support_by_theme`. Order by concept count, ties by how many of the three placements hold the theme. A one- or two-concept theme that a placement holds is kept when its concept passes the theme's gate and it leads its level on placements; where placed themes tie at a level, none is kept. A bag still names its other themes under `also_present`, which places nothing; bakchodi t09 lists T3-006, which no reading named.
- **Seven boundaries in packet 4's own families.** Beside the four ruled first: T3-020|T3-022 (from item 189; CC-033), and from item 401 T3-027|T3-028, T3-027|T3-087 and T3-089|T3-168. Two readings: the homeland flag kept and defended (from item 15) and a call to fight against a call to defend (from item 16).
- **One correction.** MonkeyIsland t03, ruled unresolved in chunk 6 on a full T3-005|T3-021 tie, was revised to place both themes, as the T3-005|T3-021 paragraph rules for a full tie (`packet-04/revisions-01.jsonl`).
- **Slips.** In chunk 5 a draft's write and its dry run went in one turn. They ran in order, and the later chunks kept them apart. After the compaction in chunk 16, the chunk 16 draft was written before the head was re-read and the reconciliation line logged. I then read the head and stage file, logged the line, checked the draft against the chunk file and fixed three whys before its dry run.

Readings applied in packet 4, to carry into the later packets:
- **The homeland flag** kept and defended: repair, calls for hands and its spot are T3-065; an attack on it, fought or raised as an alarm, T3-005; watching it T3-021; night watch T3-141.
- **Fights and calls.** A call to fight is T3-005; a call to defend or protect with no attack in the words is T3-002. A report with a call is T3-005; a report without one is T3-073.
- **Culprits.** Members doubting a damage was the room's own are tracing it (T3-087); a bare denial pointing at another room is T3-087 by T3-188's `must_not_show`; an organised room setting its plan apart from rogue placers is T3-188; friendly work taken for an attack is T3-170. A loss blamed after the close is T3-058.
- **Scripts.** Scripts made, shared, fixed or run for the room's work are T3-028; scripts to wreck another room's work are not. Arguing their fairness is T3-027; the larger part leads. Glitches used to place more, and extra accounts with concepts of their own, are T3-088. Accounts handed to someone else's bot are T3-120. A script changed to spare a neighbour is T3-168; the room's own versions fighting its plan are T3-089.

National, political, hate and slur content is named in the whys as the words give it. Examples: "pokatoličeni Srbi", a slur for Croats, in serbia t08; "od srba i ostale gamadi", Serbs called vermin, in bih t02; "Too many Pajeets", a slur for Indians, in 4chan t08; "porkies" and "randian" in bakchodi t06 and t11; "Indians , being the cheats they are" and "Saffron terrorists" in pakistan t08; "changed it to fags", a homophobic slur on the Leafs logo, in sabres t09; "Shadilay my brothers. Kek wills it!" in pepe t04; Richard Spencer and /pol/ in completeanarchy t12.

The next packet is packet 5: 409 items, G12 to G14. B4a-05 opens by re-ruling packets 1 to 3 and items 1 to 400 of packet 4 under J's rulings, as J directs.

`validate.py B4`, after packet 4:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 1899: {'genuine-joint': 802, 'scheme-ambiguous': 375, 'reader-error': 96, 'author-error': 275, 'author-disagrees': 158, 'item-is-a-bag': 193}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 1899, outstanding 1389
  coder conflicts 36

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## The re-ruling of packets 1 to 4, at B4a-05 (2026-10-13)

The PI's message for B4a-05 carried J's rulings (06:45 and 06:47 Berlin): (1) the placements are the readers' and mine (B1), and a ruling chooses among them and adds no theme beyond them; (2) a ruling takes the union only when it names, for each theme it keeps, the separate concept that carries it, otherwise it chooses; (3) re-rule only the items in packets 1 to 4 whose ruling holds a theme no placement held, under (1) and (2), keep the superseded ledger, and do (3) before packet 5. QB4-001's answer was read with `mem.py asks` before the first write.

What was done:
- **The work list.** `out/_analysis/b4_rerule_list.py` (new, read-only) lists the rulings that hold a theme no placement held, with both readings blinded as A and B, my B1 grouping, the old ruling and each removed theme's concepts. Packet 1 30, packet 2 58, packet 3 157, packet 4 133: 378. Every other ruled line already named a concept of its own per placed theme, so rule (2) reached no other line.
- **The decisions.** One line per item in `out/_adjudication-B4/rerule-B4a-05/decisions-NN.jsonl`; `out/_analysis/b4_rerule_draft.py` (new) builds a draft from them and refuses a ruling theme no placement holds; `b4_rule_append.py --replace` wrote each draft after its dry run in a turn of its own. Thirteen parts: packet 1 one, packet 2 one, packet 3 four, packet 4 seven. Each kept the old ledger as `disagreements.superseded-<time>.jsonl`. `b4_own_support_check.py` found no theme without a concept of its own after any part. `b4_rerule_list.py` returns nothing for all four packets.
- **The method** is in the diary entry that opened the leg and in `adjudication_report.md`: a removed theme's concepts count toward a placed theme whose `must_show` takes them; rule 0 then runs inside the placements, so a placed theme the old limit of three cut may enter; unresolved where no placement's test takes the material.

What it changed:
- **Taxonomy over the four packets:** genuine-joint 825 (was 802), scheme-ambiguous 336 (375), author-error 292 (275), item-is-a-bag 186 (193), author-disagrees 162 (158), reader-error 98 (96). Unresolved 82 (79): weezer t13, nbaspurs t17 and rainbowgrid t06 were added, where no placement's test takes the material.
- **named_neither** fell from 741 to 484. Every one now keeps a theme from my B1 grouping; none holds a theme no placement held.
- **Agreement after,** each reader against the ruling: 0.627 mean Jaccard and 0.698 primary match over the four packets (was 0.565 and 0.649). Packet 3 rose from 0.473 to 0.581. Not a reliability figure.
- **Readings replaced.** The homeland-flag reading and the call-to-defend reading of packet 4, packet 2's T3-002|T3-005 paragraph and packet 3's T3-033|T3-041 paragraph now send a concept to their theme only where a placement holds it. Where none does, calls to defend count toward T3-005, the flag's repair toward T3-021, its look and spot toward the readers' T3-004 or T3-020, and a further piece toward the readers' T3-033, T3-038 or T3-004.
- **Four earlier corrections undone:** catalonia t07, sadboys t03, bisexual t04 and kpop t05 had been corrected to a theme no placement held.
- **Bags.** Several bags placed a theme no placement held; they were re-placed among the placements, and some stopped being bags (adventuretime t04, suomi t07, archlinux t04, israel t02, loliconsunite t02, placeDE t03).

What I doubt:
- **Rule 0 inside the placements keeps more of my B1 than a choice would.** A one- or two-concept B1 theme that leads its level is kept as a third theme. 89 of packet 4's 137 named_neither rulings place three themes. Rule (2) permits that union, since each kept theme has its own concept; it does not require it. I applied the rule declared at item 401 so that all four packets are ruled one way. If J reads "otherwise it chooses" as asking for fewer unions, the rule to change is the one-concept keep.
- **Two labels do not match the rulings.** 12 author-error rulings from packet 4's items 401 to 461 keep a B1 theme (by §7 author-disagrees), and 2 packet 2 author-disagrees rulings take the readers' list. Rule (3) does not reach them, so they stand and the report gives both counts.
- **Where both must_show lines take a concept,** I followed the reading that placed it, or the more specific test (a swastika alarm to T3-146, '24-7 supervision' to T3-141 by T3-021's `must_not_show`). These choices decide whether a one-concept theme survives.

Slips: two Edit calls on `adjudication_report.md` ran in one turn; both applied, and the later edits went one at a time.

National, political, hate and slur content named in the re-ruled whys as the words give it, for example: "pokatoličenim Srbima" (Catholicised Serbs, a slur for Croats) and the tricolour that vandals tried to make "Bulgarian or Arab" in serbia t08; "porkies" for Pakistanis and "Randia" for India in bakchodi t06; the swastika on the Pakistani flag and "To Bakchodi fuckers" in pakistan t05; the black Nazi symbol in the menorah in israel t02; "TheDonald users and KotakuInAction" miscolouring the trans flag in traaaaaaannnnnnnnnns t02; "franchutes" for the French in spain t09; the Moors and the Empire in PORTUGALCARALHO t02.

## J's ruling on also_present, and the correction, at B4a-05 (2026-10-13)

The PI's message at 07:09 UTC carried J's ruling of 09:09 Berlin on bakchodi t09: rule (1) extends to `also_present`, which lists only themes that a reader or my B1 named; apply it to the rulings written from now on and to the ledger's existing entries, keeping the superseded ledger. I asked J whether a theme a reader listed under its own `also_present` counts as named (QB4-002). J's answer (09:20 Berlin): yes; `also_present` may list themes a reader placed, a reader listed under its own `also_present`, or my B1 named, nothing else; restore any entries the interim reading removed that this admits.

What was done:
- **The scan.** `out/_analysis/b4_ap_scan.py` (new, read-only; `--reading placed|named`, `--ledger`) found 128 lines in packets 1 to 4 (5, 32, 46, 45) listing 273 themes outside the named set. Dropped most: T3-002 29, T3-004 17, T3-041 16, T3-170 14, T3-073 14, T3-065 9, T3-070 8. 84 lines keep a theme only a reader's own `also_present` named, which QB4-002 admits.
- **The correction.** Four `--replace` parts from `out/_adjudication-B4/rerule-ap-B4a-05/draft-apNN-named.jsonl`; old ledgers `disagreements.superseded-20261013T072151Z.jsonl`, `-072154Z`, `-072158Z`, `-072202Z`. `b4_rerule_draft.py` now takes several decision files. `out/_analysis/b4_ap_emptied_show.py` (new, read-only) printed the four bags left with no theme at the floor; each was re-ruled by hand: archlinux t01 (genuine-joint), ireland t04 and starvstheforcesofevil t02 (author-disagrees), de t02 (author-error).
- **The interim reading** (placed themes only) ran as a dry run and removed nothing from the ledger, so nothing had to be restored.
- **From packet 5 on,** `also_present` lists only placed themes, and a bag needs four placed themes with three concepts each.

## Packet 5, ruled at B4a-05 (2026-10-13)

Before the first item:
- **The conflicts pass** read packet 5's notes alone and added CC-037 to CC-048 to `coder_conflicts.jsonl` (48 lines now).
- **Five boundaries were ruled once** in `boundaries.md` ("Packet 5"): T3-010|T3-024, T3-010|T3-149, T3-006|T3-061, T3-010|T3-011 and T3-010|T3-151, each applied under J's rulings.

All 409 items are ruled, in 17 blind chunks (`out/_adjudication-B4/packet-05/rulings-NN.jsonl`). `packet-05/summary.md` holds the figures, and `adjudication_report.md` holds them with packets 1 to 4 as the interim report. In brief:
- **Taxonomy:** genuine-joint 291, author-disagrees 44, author-error 41, reader-error 16, scheme-ambiguous 14, item-is-a-bag 3.
- **Counts:** unresolved 3 (linux t03, survivor t26, PurplePixels t13); named_neither 131 (32.0%), every one from my B1 alone, none beyond the placements.
- **Fields that failed:** must_show 2, must_not_show 8, decide_when_both 0, discriminators 4. The one sentence that failed more than once is T3-006's discriminator against T3-061 (4).
- **Agreement:** before 0.467 mean Jaccard and 0.623 primary match; after 0.612 and 0.677. Not a reliability figure.
- **Class 4:** the readers' list taken in 42, a B1 theme kept in 44.
- **Boundary tags:** T3-010|T3-149 34, T3-010|T3-151 31, T3-010|T3-024 26, T3-006|T3-061 18, T3-010|T3-011 14. Chunks 6 and 7 and item 409 were tagged after the packet (nine `--replace` lines; old ledger `disagreements.superseded-20261013T081847Z.jsonl`).
- **Mapping:** `assign_final.jsonl` rewritten (class 1 2,566, class 2 1,990, ruled 2,308, pending 980). The summaries of packets 1 to 4 were rerun after the `also_present` correction.

Readings applied in packet 5, to carry into the later packets:
- **Fights and deals.** T3-010's "with no fight to end" fails for a concept naming a fight, a threat, peace or a truce, even where no placement holds T3-149. A shift agreed with no request in the words is T3-010; a move because a neighbour asked is T3-039 where placed.
- **Help.** A request for help is T3-084 by T3-011's `must_not_show`. Help counts toward T3-151 only when the return is named. T3-150's `decide_when_both` keeps help traded inside an alliance when defence or a fight is the frame. A member whose effort moves to another room's build is T3-137.
- **Space.** A request for space to the room that holds it is T3-035; a host ruling on many requests T3-162; a single grant T3-012; a warning that a faction covers unapproved art T3-094.
- **Neighbours.** T3-079 needs national flags; T3-149 rooms already in contact; T3-078 kin felt in the words; T3-099 the bigger room's protection and its size in the words; T3-071 adoption into a neighbour's work; T3-170 friendly work taken for vandalism.
- **Rule 0 at the top.** Where the top of the order ties on concepts and placements, all the tied themes are placed (Clannad t05, Fez t06, Dustforce t08, aceattorney t10, androidgaming t06). Themes of three concepts or more tied on placements at the limit of three are left out together.

What I doubt:
- **My B1 kept against both readers.** Rule 0 inside the placements keeps a one- or two-concept B1 theme alone at its level. In class 4 that turned the ruling toward my B1 in 44 of 86 items, 7 of 7 in chunk 7 and 8 of 9 in chunk 14. 89 of the 131 named_neither rulings place three themes. If J reads "otherwise it chooses" as asking for fewer unions, the rule to change is the one-concept keep.
- **Requests for room inside a host's work.** The T3-010|T3-024 paragraph counts "a request for room" toward T3-010. In theitalyplace t11 I left the requests for room inside Italy's flag out as T3-035's act, which no placement held, and counted only requests between neighbouring works toward T3-010. Counted the other way, T3-010 leads that item; the ruling's set is the same.
- **Where both must_show lines take one concept,** the choice can decide the item: england t05 ('No' with a flood complaint), falcons t15 ('Nope ... or you get nothing'). I counted a reply that answers a request toward T3-115 both times.

Slips:
- After the first compaction of the leg, `rulings-06.jsonl` was written before the head was re-read and the reconciliation line logged. I then logged the line and re-checked the draft (item 138).
- Three Edit calls on `b4_ap_scan.py` ran in one turn. All applied; later edits went one at a time.
- One diary line said I had asked J before `mem.py ask` ran; the ask followed at once.
- One diary line gave the dropped-theme counts from the placed reading; a later line corrected them from the superseded ledger.
- The chunk 14 dry run refused c0185 on hawks t06 (a concept of another theme); it was removed before the write.
- After the last compaction, chunk 16 was read before the head; the reconciliation line was logged before any write.

National, political, hate and slur content named in packet 5's whys as the words give it, for example: 'BURN THE DISGUSTING ANCRAP RAG!', the hammer and sickle and 'Yellow Hordes of Ancapistan' (TheFarLeftSide t05); a white-supremacist parody about purging 'the inferior colored people' (ssbpm t17); 'remove the Russian scourge' and 'generalgovernment' (czech t07); 'utrota dansken vid 16.00' (sweden t03); 'Manifest Destiny' (AmericanFlaginPlace t06); 'Pakistani's who want to vandalize' and 'homosuck' (india t04); 'la escoria de Chavez' (uruguay t04); 'argentinos nojentos' (portugal t11); a joke about Norwegian sailors and rapes (europe t10); 'BASH THE FASH' and the NKVD beside Rosa Luxemburg (fullcommunism t05); 'frog shagging bastards of the north' (malta t03); a red swastika planned on a logo (liquicity t07); r/Eagles' 'Nazi Flag', 'kill this Nazi scum' and 'anti semetic bullshit' (falcons t15); 'Purify the core' (theblackvoid t02).

The next packet is packet 6: 500 items, G15 to G19 and part of G20. Its conflicts pass runs first.

`validate.py B4`, after packet 5:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 2308: {'genuine-joint': 1117, 'scheme-ambiguous': 350, 'reader-error': 114, 'author-error': 334, 'author-disagrees': 208, 'item-is-a-bag': 185}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 2308, outstanding 980
  coder conflicts 48

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## Packet 6, ruled at B4a-06 (2026-10-13)

Before the first item:
- **The conflicts pass** read packet 6's notes alone and added CC-049 to CC-062 to `coder_conflicts.jsonl` (62 lines now). The two that explain most splits: CC-049 (the room's joking written as one practice whether about the canvas, the sub's April Fools change, its ordinary talk or a rival) and CC-052 (G15's truces, alliances, help and borders as one practice, as CC-037 in packet 5).
- **Eight boundaries were ruled once** in `boundaries.md` ("Packet 6"): T3-010|T3-149, T3-017|T3-031, T3-001|T3-031, T3-023|T3-031, T3-150|T3-151, T3-031|T3-050, T3-018|T3-031 and T3-018|T3-052, with T3-010|T3-151 carried from packet 5 and the pairs below five applied as met.
- **QB4-003 asked** during chunk 5: whether a theme a reader listed under its own `also_present`, and no placement holds, counts in the bag test. Meanwhile a bag needed four placed themes.

### QB4-003, answered, and the revisit

J's answer (11:29 Berlin): "count them. Themes a reader listed under its own also_present count in the bag test. Apply it to packet 6 and to the 43 rulings in packets 1 to 5 that out/_analysis/b4_bag_named_check.py lists, keeping the superseded ledger." The test as applied from item 126 is written in `boundaries.md` ("The bag test after QB4-003"): the themes counted are the placed themes and the readers' own `also_present` themes; a named theme's concepts of its own are those its `must_show` takes that no placed theme in the ruling already holds; four themes with three concepts of their own make a bag; the bag places the largest act a placement holds; a placed theme with three concepts is never cut by the limit of three.

The revisit read 64 lines (43 in packets 1 to 5 and 21 in packet 6's items 1 to 125): 45 became bags and 19 were kept, where the readers' listed concepts did not hold three under the named theme's test. Four slips outside the list, where four placed themes with three concepts each had been cut at the limit, became bags: utaustin t05 and japan t05 (packet 6), loliconsunite t02 (packet 4) and lebanon t02 (packet 5). pcmasterrace t10 (packet 5), on the list, had also cut two placed themes at the limit. New tools: `b4_bag_view.py` (read-only; one item's readings, ledger line and named-only concepts) and `b4_bag_draft.py` (a bag re-rule draft from a short spec). Drafts and specs: `out/_adjudication-B4/rerule-bag-B4a-06/`. After packet 6, the check flagged seven packet 6 bags that could list one more named theme. Six hold two concepts or fewer under the test (de t11's T3-009, fivenightsatfreddys t08's T3-084, philippines t08's T3-072, turkey t06's T3-151, cfb t02's T3-150, frankocean t05's T3-084 and T3-011, EraseThePlace t06's T3-149). chibears t10 was a slip: reader A's T3-050 holds three, and it was re-ruled with T3-050 under `also_present` (`spec-06-084.json`; old ledger `disagreements.superseded-20261013T111959Z.jsonl`).

Carried open: 26 older bags in packets 1 to 5 could list more named themes; J named only the 43. The packet 4 item 197 `also_present` note carries unchanged.

### J's answer on lone B1 themes, and the rule I chose

The PI relayed J's answer at 10:28Z (12:28 Berlin): "Whatever the agent feels more comfortable with. They can also adapt the code definition if needed". The options J saw: (1) leave it, my B1 a full placement; (2) a theme only my B1 placed beats two agreeing readers only with three or more concepts of its own; (3) when both readers agree their list stands and my B1 is a note.

I chose option (2) with a condition. In class 4, a theme only my B1 placed stands against the two agreeing readers only with three concepts or more of its own; with fewer it is left out and named in the why. The readers' list then stands where its test takes concepts; where my reading finds it takes none, the item is unresolved, and no one-concept theme of mine is put in its place. Class 3 is unchanged.

Why. Two independent readers agreeing is the case where my B1 carries the author's pull most. Three concepts is the scheme's own floor for a theme of its own. Option (3) would make the adjudication measure obedience and would force a readers' theme whose test takes nothing.

Earlier packets: `b4_lone_b1_check.py` (new, read-only) found 250 class 4 rulings in packets 1 to 6 keeping a lone B1 theme, 130 under three concepts. `b4_lone_b1_draft.py` (new) built the drafts in `out/_adjudication-B4/rerule-loneb1-B4a-06/`; six `--replace` parts, old ledgers `disagreements.superseded-20261013T103259Z` to `-103319Z`. 130 lines changed: packet 1 11, packet 2 29, packet 3 31, packet 4 20, packet 5 23, packet 6 16; author-error 83, author-disagrees 40, scheme-ambiguous 7; unresolved 30. After packet 6 the check finds 144 class 4 rulings keeping a lone B1 theme, every one with three concepts or more.

### The figures

All 500 items are ruled, in 20 blind chunks (`out/_adjudication-B4/packet-06/rulings-NN.jsonl`). `packet-06/summary.md` holds the figures, and `adjudication_report.md` holds them with packets 1 to 5 as the interim report. In brief:
- **Taxonomy:** genuine-joint 256, author-error 83, scheme-ambiguous 71, author-disagrees 51, item-is-a-bag 20, reader-error 19.
- **Counts:** unresolved 49 (9.8%); named_neither 145 (29.0%), every one from my B1 alone, none beyond the placements.
- **Fields that failed:** must_show 31, must_not_show 8, decide_when_both 0, discriminators 32. The sentences that failed most: T3-017's discriminator against T3-031 (24) and T3-001's (8), both the canvas condition; T3-018's `must_show` (5); T3-052's `must_show` (4); T3-004's `must_not_show` (4, the homeland flag).
- **Agreement:** before 0.454 mean Jaccard and 0.510 primary match; after 0.600 and 0.595. Not a reliability figure. Items 1 to 316 (G15 to G19) 0.446 before, 0.593 after; items 317 to 500 (G20) 0.468 and 0.616.
- **Class 4 (134):** the readers' list taken in 87, a B1 theme kept in 32 (each with three concepts or more), unresolved 15.
- **Boundary tags:** T3-010|T3-149 28, T3-017|T3-031 24, T3-001|T3-031 9, T3-010|T3-151 6, T3-150|T3-151 5, T3-023|T3-031 5, T3-018|T3-052 5, T3-031|T3-050 4, T3-018|T3-031 1.
- **Mapping:** `assign_final.jsonl` rewritten (class 1 2,566, class 2 1,990, ruled 2,808, pending 480).
- **Packets 1 to 6:** 2,808 rulings; genuine-joint 1,348, author-error 482, scheme-ambiguous 421, item-is-a-bag 238, author-disagrees 186, reader-error 133; unresolved 161; named_neither 649; agreement before 0.489, after 0.642.

### Readings applied in packet 6, to carry into packet 7

- **G15 to G17.** Deals as in packet 5. The homeland flag's calls, build, spot, size and repair count toward T3-065 where a placement holds it, and toward the placed T3-002, T3-004, T3-020, T3-021 or T3-038 where none does; national pictures beside it are T3-113; national feeling through the flag T3-145.
- **G18.** T3-086 is the community's own quarrel carried onto the canvas (Hello Internet's flag quarrel, halo t14's FixMCC, Bitcoin's scaling split, the Texans' FTC mark). T3-130 is national politics; T3-080 a political symbol argued over, partisan marks included; T3-081 a canvas fight told in a nation's real history of war or occupation, not war talk between fandoms (T3-135); T3-179 ideology argued from the canvas.
- **G19.** T3-050 is taunts at a rival community, even in the joke register; T3-142 jokes about a people; T3-143 a joke's limits argued; T3-182 bigotry in the room's own talk answered; T3-146 and T3-177 covering and calling for swastikas. T3-154 takes victory claimed or rivals called defeated; T3-050 mockery with no victory claimed; T3-155 a salute after the fight. T3-099 needs the bigger room's size in the words; T3-078 kinship in the words. Visitors' help counts toward T3-011; requests received toward T3-084.
- **G20.** The canvas condition: a joke with the canvas in the words is T3-031; with none, T3-017, and April Fools play with nothing posted as true goes to a placed T3-017 or is left out. T3-016 takes the event, its rules, the heat map and why subs make pictures. A glitch used to place more is T3-088, coped with T3-074, explained T3-016. A figure worked out with a reason or a correction is T3-018; a bare name for a neighbour's figure T3-052; a mock reading kept up as a joke T3-031. T3-105 keeps records; T3-057 remakes them as wallpapers, memes or copypasta. A bare title naming r/place shows no act.
- **The level rule as applied.** A theme alone at its level is kept, even after a theme with more concepts was dropped at a higher level for not leading it on placements (cmu t05 keeps T3-018 at one concept after T3-009 at two; russia t13 keeps T3-050 after a top tie).

### What I doubt

- **The three-concept floor is my choice.** J let me choose. A theme of mine with exactly three concepts still overrides two agreeing readers (trees t07's stoner talk, T3-017; portugal t38's copypasta, T3-057). Class 3 still keeps my one-concept themes when they lead their level, which is most of packet 6's 145 named_neither.
- **The level rule past a dropped theme.** Keeping a one-concept theme alone at a lower level after a two-concept theme was dropped above it follows the rule's words, but it can keep a smaller act and drop a larger one.
- **The words or the thread.** I read the canvas condition from the concept's words. In bakchodi t19 I counted a correction of a bot's joke in a post about the canvas as canvas talk; in oneshot t11 and wholesomememes t23 I did not count side talk under a canvas post. The line is mine.
- **What I knew and the words did not say.** In serbia t04 I wrote "the 1999 war on the town's refinery" from 'Pančevo, proleće 1999' and 'gori rafinerija nafte'; the words give the date and the burning, not the war. In leagueoflegends t05 and kerbalspaceprogram t02 I read a sub change from the concepts' own words ('R/eEKapey+lKCV7UBLGIK7YMvL6gk=', 'the memeification', the banner). In 4chan t22 I did not take reader B's word that the board merger was the site's April Fools joke.
- **T3-052 when the room has no mark.** shitredditsays t03 placed T3-052 on a survey of the whole canvas; the test names pictures "around the room's mark".
- **Unresolved rose to 49.** Most are G20's bare titles and room jokes with no canvas in the words, as in packet 1. I did not push them to a placement.

### Slips

- After a compaction, I read the chunk 13 file and fetched tests before re-reading the head and logging the reconciliation line; the line was logged before any write.
- A chunk 6 diary line conflated two items ('BASH ... filthy blue tiles' and purplecorner t02); a later line corrected it.
- The QB4-003 revisit was first logged as 63 lines read, 45 re-ruled and 18 kept; the chunk 7 log corrected it to 64, 45 and 19, with four slips outside the list.
- Five rulings had cut a fourth placed theme with three concepts at the limit of three, against the bag test; each was re-ruled as a bag (utaustin t05, japan t05, loliconsunite t02, lebanon t02, pcmasterrace t10). After packet 6, chibears t10 had left reader A's named T3-050 unweighed; re-ruled.
- The chunk 17 dry run refused item 423 for T3-130 with no concept; the draft was fixed before the append.
- The guard refused `cut -c` after a helper script once; the command was re-run without it. A word the guard refuses appeared once in a Bash command.
- Rewriting `adjudication_report.md`, I shortened the packet 1 to 5 boundary paragraphs and `validate.py` found 10 pairs with no paragraph; they were restored from the B4a-05 text. The last Edit to the report and the validator run that checked it went in one turn.

### Content named

National, political, hate and slur content is named in packet 6's whys as the words give it, for example: 'Turkish scum DEUS VULT' and 'Mission remove kebab' (lithuania t09); 'REMOVE KEBAB' and 'CRUSADE against the infidel' (CKCrusaders t06); 'momo nigger chinky' and 'Designated Shitting Streets' (bakchodi t03); 'Porkistanis' and 'the paki flag is completely bhagwa now' (bakchodi t04); 'Islamic loving fucks' and 'burned by bhagwa' (bakchodi t18); 'dhotiwalas' and 'Katus' (pakistan t16); 'Hitler did nothing wrong' (texas t15) and 'Hitler hat nichts falsch gemacht' (kerbalspaceprogram t02); 'make the reich happen' (germany t05); 'Germany needs more lebensraum' (unitedkingdom t08); 'extra-jurisdictional excursions into Mexican living space' (ukplace t04); the 4chan flag 'basiert auf der Reichskriegsflagge', 'Operation Annexion' and 'Nacht und Nebel Aktion' (de t11); 'can we make France fascist?' (de t13); a Nazi flag and 'a huge racist flag' (eagles t15); the swastika petitions and calls (achievement_hunter t02, roosterteeth t11); 'heil harley' at a swastika (homestuck t12); 'white is right' and r/WhiteRights (EraseThePlace t08); 'jontron is a white supremacist' (h3h3productions t47); the call to put MH17 back on the Russian flag (thenetherlands t02); 'Hayır' above the Turkish flag (turkey t11); 'the fascist scourges' and the YPG and Rojava flags (kurdistan t04); 'teach WORST KOREA a lesson' (stlouisblues t03); 'greedy french people' (egypt t02); 'vastaškim moderatorima' (croatia t07); 'raça mestre feup' (portugal t38); 'solo nosotros italianos somos los ladrones' and Trump's wall (mexico t17); 'your going to elect a fascist' (france t11); the canvas called fit for Finns with autism (suomi t25); 'Faggot', 'Bullfags', 'Gay Unicorn' and the homophobic slur in costa_rica t10.

The next packet is packet 7: 480 items, the rest of G20 and G21. Its conflicts pass runs first.

`validate.py B4`, after packet 6:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 2808: {'genuine-joint': 1348, 'scheme-ambiguous': 421, 'reader-error': 133, 'author-error': 482, 'author-disagrees': 186, 'item-is-a-bag': 238}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 2808, outstanding 480
  coder conflicts 62

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## Packet 7, ruled at B4a-07 (2026-10-13)

The PI's message for this leg: rule packet 7 (480 items, the rest of G20 and G21), the last packet, conflicts pass first, under J's rulings (1) and (2), the `also_present` ruling of 09:09 Berlin, the answers to QB4-002 and QB4-003, and the lone-B1 rule I chose under J's answer of 12:28 Berlin. I read QB4-003's answer with `mem.py asks` before the first write. Every packet 7 item was ruled under all of these from its first ruling; nothing in the packet waited on an answer.

Before the first item:
- **The conflicts pass** read packet 7's notes alone and added CC-063 to CC-072 (72 lines now). The one that explains most splits is CC-063: the room's account of its finished work written as one practice (celebrating, crediting, thanking, saving, mourning, telling).
- **Three boundaries were ruled once** in `boundaries.md` ("Packet 7"): T3-009|T3-073 (B2's pair 9), T3-009|T3-043 (B2's pair 14) and T3-029|T3-073, with the pairs below five applied as met.

### The figures

All 480 items are ruled, in 20 blind chunks (`out/_adjudication-B4/packet-07/rulings-NN.jsonl`), with two corrections (`corrections-01.jsonl`). `packet-07/summary.md` holds the figures, and `adjudication_report.md` is now the full report over the seven packets. In brief:
- **Taxonomy:** genuine-joint 303, author-error 89, scheme-ambiguous 30, author-disagrees 22, reader-error 19, item-is-a-bag 17.
- **Counts:** unresolved 24 (5.0%); named_neither 108 (22.5%), every one from my B1 alone, none beyond the placements; 77 of the 108 place three themes.
- **Fields that failed:** must_show 25, discriminators 4, must_not_show 1, decide_when_both 0. Most failed sentences do not say whose work, whose picture or which room's feeling they mean: T3-052's `must_show` 4, T3-009's 3, T3-164's 3, T3-037's, T3-111's and T3-117's 2 each.
- **Agreement:** before 0.500 mean Jaccard and 0.650 primary match; after 0.669 and 0.731. Not a reliability figure. Items 1 to 53 (the rest of G20) 0.544 before, 0.663 after; items 54 to 480 (G21) 0.495 and 0.670.
- **Class 4 (118):** the readers' list taken in 91 (3 bags), a B1 theme kept in 18 (1 bag), each with three concepts or more, unresolved 9.
- **Boundary tags:** T3-009|T3-043 62, T3-009|T3-073 29, T3-029|T3-073 18, T3-009|T3-117 10, T3-073|T3-105 8, T3-009|T3-038 5, T3-054|T3-111 5, T3-057|T3-105 3, T3-018|T3-031 3, T3-009|T3-104 3, T3-105|T3-156 3, T3-031|T3-135 2, T3-009|T3-026 2, T3-038|T3-065 2.
- **Checks:** `b4_own_support_check.py` 0; `b4_lone_b1_check.py --packets 7`: 18 kept lone B1 themes, all with three concepts or more; `b4_bag_named_check.py --packets 7` flagged 8 lines, each already weighed in its why, none changed; `b4_both_readers_dropped.py` (new): 5 lines, each a theme with no concept of its own, none dropped by the level rule.
- **Mapping:** `assign_final.jsonl` rewritten: 7,844 lines (class 1 2,566, class 2 1,990, ruled 3,288, pending 0).
- **All seven packets:** 3,288 rulings; genuine-joint 1,651, author-error 571, scheme-ambiguous 451, item-is-a-bag 255, author-disagrees 208, reader-error 152; unresolved 185 (5.6%); named_neither 757 (23.0%); agreement before 0.491, after 0.646.

### Readings first applied in packet 7

Each is named in its rulings' whys and in `boundaries.md`:
- **Themes both readers placed.** A theme both readers placed, with a concept of its own, is not dropped by the level rule on a placement count only my B1 tips (kanye t28, msu t11). Two earlier rulings were corrected under it or for a miscount (ChronoTrigger t06, mindcrack t11).
- **The clone canvas.** The rebuild, the calls to it and its progress count toward T3-054; acts it does not name (the timer, a chat) toward their own themes (catholicism t09; twice t18 scheme-ambiguous).
- **The room's own work.** "The work" in T3-073 and T3-058 is the room's own (uvic t04, destiny t08, pathofexile t17, hungary t07).
- **A report that names the attacker.** The report leads (T3-073); T3-087 takes who is behind the damage or why (nbaspurs t13, overwatch t14).
- **T3-082** takes only a mark the room did not know of (mysterydungeon t08, MiamiHurricanes t06).
- **T3-111** does not reach a standing community's new project (forsen t11, paladins t21).
- **Cleaned copies** of the final canvas after the lock are records, T3-105.
- **T3-156** takes only a mark from the canvas; theme or header art the words do not tie to the canvas is T3-017 (fivenightsatfreddys t14, trees t12); flairs with no canvas mark are T3-185 (THE_R t04).

### Defects for stage C1, from packet 7

Logged here and in `adjudication_report.md`; the scheme is untouched:
- T3-003's discriminator against T3-043 speaks only of crediting others; T3-043's discriminator against T3-003 sends parts claimed after the work to T3-043. They should say the same thing.
- T3-073's and T3-058's `must_show` do not say "the room's own work".
- T3-054's `must_show` against T3-038's and T3-002's: no field says which takes calls and progress on a later canvas.
- T3-111's "the canvas sub's or chat's future" and a standing community's new project.
- T3-087's discriminator against T3-058 and one person traced after the close (T3-058 takes only a room or group).
- T3-117's "regret at the end" and a late reader's regret or question.
- T3-021's "cleaning stray ones" and a cleaned copy after the lock.
- T3-164's `must_show` and attachment to a flag, a creed read into a mark, or solidarity of unknown origin.
- T3-009's "the work said to have lasted to the end" against T3-073's "what survived".
- T3-052's "Pictures around the room's mark" and a picture whose owner or place the words do not give.
- Single sentences: T3-154's "implied rivals", T3-044's newcomers, T3-156's discriminator against T3-031, T3-038's discriminator against T3-009, T3-131's, T3-127's, T3-011's and T3-082's `must_show`, T3-029's discriminator against T3-183, T3-017's `must_not_show`, and T3-063's `must_show` for a post that is not a canvas post (CC-004).

### What I doubt

- **My B1 against two agreeing readers.** Under the lone-B1 rule a theme of mine with three concepts stood against both readers in 18 class 4 items. Several rest on a reading of mine about the words: that Kekistan is another room's work (destiny t08), that theme and header art is not from the canvas (fivenightsatfreddys t14, trees t12), that alarms call the room to the fight (overwatch t14). A stranger may not read them so.
- **The clone-canvas reading is mine.** T3-054's `must_show` names the rebuild; T3-038's and T3-002's also take progress and calls. I chose T3-054 and logged the defect.
- **"The act its words lead with."** I used it to place a concept that does two acts, beyond the T3-009|T3-043 pair where it was written (DCFU t03, Goodboye t11, portugal t29, Rainbow6 t16, nbaspurs t13). It decides some rulings on word order.
- **Fragment quotes and coders' labels.** Where a concept's quote is a fragment ('Two wars', 'Ended 3am on a weekday'), I read the coder's label with it (dwarffortress t11, straya t10, cirkeltrek t10, twice t17); where the quote is whole and says less than the label, I read the words (SquareSpiral t14's request offer was left out). The line is mine.
- **Three themes in class 3.** 77 of the 108 named_neither rulings place three themes: my B1 adds a third act beside the two the readers split on, often one concept alone at its level (TransFlagPlace t13's T3-132). The level rule allows it; it is still my pull.
- **Sad faces.** Whether ':(' after an account voices grief decided several T3-029|T3-073 rulings. I followed T3-029's `decide_when_both` and let the account lead where the sad face trails (geometrydash t07, rangers t13).

### Slips

- Two packet 7 rulings were wrong when first written and were corrected through `--replace`: mindcrack t11 (T3-029's placements miscounted) and ChronoTrigger t06 (T3-157, placed by both readers, dropped on a count only my B1 tipped).
- After the first compaction I drafted rulings-02 from memory and checked every id and quote against chunk-02 before the dry run.
- After the second compaction I fetched four tests and read the rest of chunk 14 before re-reading the head and the stage file; the reconciliation line was logged before any write.
- Two items carried the boundary T3-031|T3-135 with no paragraph until the packet summary showed it; the paragraph was added to `boundaries.md` before the summary was written.
- The first draft of the full report listed europe t21's T3-073 among packet 7's author-disagrees themes; europe t21 is a bag. Corrected before the validator ran.

### Content named

National, political, hate and slur content is named in packet 7's whys as the words give it, for example: 'Fuck the Falcons!', 'shit tier AFC peeps' and Mexico's flag offered for destruction (falcons t05); /pol/'s 'hate-fueled' attack, 't-slurs, mentally ill jokes' and 'transphobic or bigoted' (TransFlagPlace t13); 'the german menace' and 'German tyranny' (stlouisblues t05); 'Deus vult!' and 'Second Blue World Order' (thebluecorner t10); 'Ni🅱️🅱️a' and the Kekistani flag (dankmemes t16); 'ZULUL' and 'must have been too racist to remove him' (forsen t07); 'Scroll up faggot.', 'Pinochet Snek' and 'fight the commies' (anarcho_capitalism t13); the swastika drawn on Doc (ethoslab t06); 'Fuck /r/Denmark' and 'FUCK THE DANES!!' (frankocean t12); 'Turkish clay' and 'Defending against Armenia felt like a war' (turkey t14); Brexit and 'cunts and leave' (italy t14); the penis over Argentina's sun, SABAFU for BRICS, 'devolve o ouro', the German '7 a 1' and 'Senna's death might be our 9/11' (brasil t09); 'The fucking swedes man!' and '40 people with 100 accounts and scripts running' (overwatch t14); 'sromotną porażkę butnych germanów' (polska t08); 'Fuckin Seppos' and 'G'Day Cunts' (straya t10); 'los bots de Chávez' (argentina t15); 'comunisti', Aldo Moro and the Piave (theitalyplace t15); 'what a shitty country it's become lately', 'China dipped their finger' and 'It's China trying to invade us' (philippines t10); 'peniss', 'poniggs' and 'communist propaganda' (mylittlepony t15); 'pinches admins mecos' and 'nuestros heroes caidos en guerra' (mexico t16); 'VOOR VORST EN VADERLAND' and 'annexatie' (cirkeltrek t10); 'consuming smaller communities' and 'United Kinodom' (europe t21); the upside-down Philippine flag as a war flag (philippines t12); 'fucking heathens' and 'black void from 4chan' (Rainbow6 t16); 'that ghey ass pink OSU' (wallstreetbets t14); 'the sabotage of the trans-flag or the pride-rainbow' (chess t13).

All seven packets are ruled. The next step of stage B4 is B4b, the blind sample's build.

`validate.py B4`, after packet 7:

```
stage B4:
  leg: adjudication
  settled items 7844 = assignment_items_expected
  rulings 3288: {'genuine-joint': 1651, 'scheme-ambiguous': 451, 'reader-error': 152, 'author-error': 571, 'author-disagrees': 208, 'item-is-a-bag': 255}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 3288, outstanding 0
  coder conflicts 72

warn   RETURN-B4.md is not yet written; the build leg owes it, and this leg was read as an adjudication leg because neither RETURN-B4.md, a stage-B4 manifest entry nor _packets-B4/ exists

0 errors (0 distinct shapes), 1 warnings
```

## The blind sample, built at B4b (2026-10-13)

The PI's message for this leg (14:22Z) carries J's rulings for it:
- The sample is 500 items, 250 drawn uniformly from the analysed set and 250 from the adjudicated items, by a recorded seed, the two strata reported apart and never pooled (J, 12 October). This replaces §10's fifty and fifty.
- Two fresh DeepSeek V4.1 Flash readers per item, on the reader route `arm.json` sets for B4, for comparability with B2 and B3.
- A second arm on the same packets: OpenAI gpt-6-astra at medium effort, two replications, run on J's computer by the Codex orchestrator from a copy of my packets, reported apart and never pooled. No Claude reader.
- The packets are built once, for both arms. Both arms are declared here and in the manifest entry. Nothing else in §10 changes: no ruling, ledger, note or hint in any packet.

### Declared before the draw

- **What it measures.** Transmission after revision (FLEET.md): whether fresh readers holding only the frozen scheme reach the settled line. It is not reliability and is never called that. The settled line is each item's standing placement in `assign_final.jsonl` as at the B4a-07 close. No packet carries it.
- **Stratum U, uniform.** 250 items drawn uniformly at random, without replacement, from the analysed set: the 7,844 second-order themes of `assign_final.jsonl`. It says whether the scheme decides the ordinary item. About 42% of the analysed set was adjudicated, so U will hold adjudicated items; they stay in U and are reported in U.
- **Stratum A, adjudicated.** 250 items drawn uniformly at random, without replacement, from the 3,288 ruled items of `disagreements.jsonl` that U did not take. It says whether my rulings can be reached by a stranger. Drawing A from what U left keeps the strata disjoint, so each item is served once and counts in one stratum only.
- **What stays in the frame.** Items with an unresolved ruling stay; the check leg excludes their readings from the fresh-against-settled denominator and says how many (§12). Gold and pilot items stay as corpus items; nothing marks them.
- **No redraw.** No drawn item is swapped out for any reason.
- **The seed: 20261013.** U is `random.Random("20261013:U").sample` over the analysed set sorted by room and theme id. A is `random.Random("20261013:A").sample` over the ruled items U did not take, in the same order. The serving order is `random.Random("20261013:order").shuffle` of the 500, with the strata mixed, so no packet shows a stratum. The script is `out/_analysis/b4b_sample.py`. It writes `out/sample-B4.jsonl`, which holds each item's stratum, sits outside the packets folder and is never served.
- **Arm 1, the fleet's readers.** DeepSeek V4.1 Flash, two fresh readers per item, one dispatch, each packet to two readers, never the same reader for both readings of an item. The route is the one `arm.json` sets for B4; my platform file lists "@preset/cheap x2 via gateway". `CONTROL/arm.json` is outside what I may read, so the served model, route, effort and decoding are taken from the dispatch's `_fleet_raw/B4/arm.json` at the check.
- **Arm 2, J's second arm.** OpenAI gpt-6-astra at medium effort, two replications, run by the Codex orchestrator on J's computer from a copy of `out/_packets-B4/`, under the same `RETURN-B4.md`. Reported apart; never pooled with arm 1.
- **The comparisons.** For each arm, each reading is compared with the settled line on its own: 500 items × 2 readings = 1,000 comparisons, a rate over readings, reported per stratum (500 each). The two readers' agreement with each other is reported beside it, per stratum. Strata, arms and the two kinds of figure are never pooled.
- **The agreement definition: stage B2's, unchanged** (`notes-B2.md`, "which stages B3 and B4 reuse unchanged"). Two placement sets agree by their Jaccard index; `["T3-004"]` against `["T3-004","T3-011"]` scores 0.5, partial agreement. Alpha is Krippendorff's alpha with distance 1 − Jaccard, over items run at more than one reader; chance correction is over sets, the expected disagreement computed from all the placement sets of the comparison, pooled. Exact agreement on the primary is reported beside, never in place. Scoring reads pass 1 only, as at B3.
- **Exemplars: none.** Stage B3 served none (its manifest entry: "none served").
- **No bag flags.** B3's packets marked some items as flagged bags from my B1 grouping. Here a flag would show the reader something of my reading, so no item is marked. A reader may still return a bag under the return specification.
- **The packets** (`out/_analysis/b4b_packets.py`, into `out/_packets-B4/`):
  - The shared pages come from `scheme_final.jsonl` through `tools/packets.py`'s `scheme_pages`: `index.md` and `G01.md` to `G21.md`, no exemplars, each under 50 KB.
  - Item packets carry fleet ids only (J), rendered by stage B2's renderer (`b2_packets_fleet.py`): the heading with the room and the fleet theme id, the label, the note, and each concept under its fleet id with the participants' words. `tools/packets.py B4` writes room ids, the fault behind QB3-003, so the builder is a script on B2's renderer, as at B2 and B3.
  - No sibling block (as `packets.py B4` and stage B2), no bag flag, no stratum, no ruling, no reader's line and no hint that the items were decided. Packets are named `S05-NN`, as `packets.py B4` names them. Each holds a title, the brief with its own item count, the items and the end line.
  - Caps: at most 15 items a packet (J's cap at B2 and B3) and every packet file under 50 KB (§10 and FLEET.md), cut consecutively from the serving order so that the largest packet is as small as the caps allow.
  - One item of the analysed set exceeds the ceiling on its own: leagueoflegends t02, 89,162 bytes rendered (`out/_analysis/b4b_item_sizes.py`; the next largest is 48,324). If the draw takes it, it is served alone in a packet of its own under B2's and B3's shape (at most 180,000 bytes of item text, J). That is the one exception, declared here before the draw.
  - `MANIFEST.json` gives per packet the items, bytes, item bytes, sha256, count key and excludes, and `codes_by_item` for `fleet.py`'s citation check. It names no stratum.
  - The build stops on a room id in an id position, a canvas field, or a broken cap other than the declared exception.
- **`RETURN-B4.md` as at B3.** It holds rule 0 in the contract's words, the prediction line, the return line, the multiplacement record, the second pass, the end marker and the confirm line, with B3's fields. It changes only where the packets differ: no sibling block and no flagged bag; the batch is the packet name; the replicate is as given with the reader id. Keeping B3's task lets the figures stand beside B3's.
- **The manifest entry** on stage A1's schema (both arms, the seed, decoding, reader counts) is appended to `run_manifest.json` before the first packet leaves.

### The draw

`out/_analysis/b4b_sample.py --write`, seed 20261013, as declared. `out/sample-B4.jsonl` holds 500 lines (sha256 2fe441cd…); the record is `out/_analysis/b4b_sample.json`. The next table gives the two strata.

| stratum | items | rooms | class 1 | class 2 | class 3 | class 4 | class 5 | ruled | unresolved | gold | pilot |
|---|---|---|---|---|---|---|---|---|---|---|---|
| U, uniform | 250 | 204 | 87 | 53 | 81 | 28 | 1 | 110 | 3 | 2 | 2 |
| A, adjudicated | 250 | 202 | 0 | 0 | 180 | 63 | 7 | 250 | 15 | 2 | 2 |

- Stratum A was drawn from the 3,178 ruled items U did not take; the strata are disjoint.
- leagueoflegends t02, the one item over the ceiling alone, was not drawn, so the declared exception does not arise.
- The settled line is `assign_final.jsonl` at sha256 d3506a88… (`disagreements.jsonl` ec740989…). The check leg reads these files, not anything in the packets.
- No item was redrawn.

### The build

- **`RETURN-B4.md`** is RETURN-B3.md's specification with the changes declared above. Its rule 0 is the contract's current wording. RETURN-B3.md had carried the wording from before J's amendment of 11 October (the `also_present` record and the concepts behind a placement), while B3's index page, built by `scheme_pages` from the contract, already carried the amended rule. So B3's readers saw two wordings, and B4's readers see one. The builder refused to build until RETURN-B4.md matched the contract (`out/_analysis/b4b_rule0_diff.py`). The fields a reader returns are unchanged from B3.
- **The packets** (`out/_analysis/b4b_packets.py --write`, in `out/_packets-B4/`):
  - `index.md` and `G01.md` to `G21.md`, byte for byte the pages served at B3, the largest 33,636 bytes.
  - 34 packets, `S05-01` to `S05-34`, cut consecutively from the serving order. They hold 10 to 15 items and run 21,280 to 49,994 bytes; 34 is the fewest the caps allow. The largest item is 25,636 bytes.
  - `MANIFEST.json`: 500 lines due, with `codes_by_item` for each packet.
  - `out/_analysis/b4b_order.json` records which items each packet holds. It sits outside the packets folder.
- **Fleet ids only.** nyjets t11 is in the sample; its coder note names c0104, which is served under its fleet id with the words unchanged, as at B3. No room-id-like string stands in participants' words in these packets.
- **The check** (`out/_analysis/b4b_packets_check.py`): 0 errors.
  - The folder holds only the 22 pages, the 34 packets and `MANIFEST.json`.
  - Each packet is under 51,200 bytes, ends with the end line, and agrees with its MANIFEST entry and its brief's count.
  - The 500 items are served once each, in the serving order, and each heading's fleet id translates back to its room.
  - Each item's concept lines are exactly its `codes_by_item`.
  - No packet holds a third-order id, a room id in an id position or a canvas field.
  - 22 lines carry a word that could hint at a decision ("ruling", "settled", "disagree", "unresolved"). I read all 22: each is a coder's label or note or the participants' words ("once we settled down", "I disagree", "ruling that logos are art", a note's "unresolved search for responsibility"). None speaks of my rulings.
- **The manifest.** Entry 12 of `run_manifest.json` (stage B4, leg B4b; `out/_analysis/b4b_manifest.py`) declares:
  - arm 1, DeepSeek V4.1 Flash, two readers per item on the route `arm.json` sets for B4, 68 agents;
  - arm 2, OpenAI gpt-6-astra at medium effort, two replications by the Codex orchestrator on J's computer, 68 agents;
  - decoding as each arm's dispatch sets it; the seed and its three streams; 500 items, 34 packets and 1,000 comparisons an arm;
  - the caps; no exemplars, bag flags or sibling blocks;
  - the sha256 of the scheme, `RETURN-B4.md` (0c1fb067…), the sample and the settled line.
- **The manifest, corrected.** `validate.py B4` found that entry 12 carried the reader count only inside each arm, with no `n_agents` at the top. I did not edit it. Entry 13 (`out/_analysis/b4b_manifest2.py`) is a copy with `n_agents` 2 (two fresh readers per item in each arm; 68 reader sessions an arm) and a `supersedes` field naming entry 12, which stays in the file.
- **The validator's warnings.** Eight files mention "ruling" or "unresolved". I read all 13 lines:
  - `G01.md` (T3-093's `must_show`, "jokes about ruling") and `G14.md` (six lines on T3-162, "a host ruling on requests") are the frozen scheme's words, served byte for byte at B3.
  - S05-02, S05-10, S05-13, S05-17, S05-19 and S05-33 hold coders' labels and notes and participants' words.
  - None speaks of my rulings. The scheme is frozen and the coders' words are served as written, so the warnings stand as read.
- **What the dispatch needs.** Arm 1: `out/_packets-B4/` and `out/RETURN-B4.md`, each packet to two fresh readers. Arm 2: a copy of the same folder and the same `RETURN-B4.md`. The check leg will read the returns from `_fleet_raw/B4/`, translate them back through `fleet_ids.jsonl`, and score each arm and each stratum apart.

### What I doubt

- **The disjoint strata are my reading of J's ruling.** "250 drawn uniformly from the analysed set and 250 from the adjudicated items" could also mean two independent draws that may share items. I drew A from what U left so that no item is read twice and counted in both strata. U still holds 110 ruled items, about the 42% the analysed set holds, and they are reported in U.
- **The task differs from B3's in three ways the stage requires:** no sibling block, no bag flags, and rule 0 in one wording. A difference between the B4 and B3 figures may come partly from these, not only from the scheme.
- **Two arms on one packet set.** Arm 2's readers are a different model family, run outside the fleet's dispatch. Their figures say whether the written instrument decides for another architecture. They are never pooled with arm 1's.

### Slips

- My first manifest entry put the reader count only inside each arm; the validator caught it, and entry 13 supersedes it.
- A diary line named G01's warning theme with a placeholder in place of its id; the next line corrected it to T3-093.

The build leg closes with `done.sh B4 --cut packets-out`. The dispatch is not mine. The next launch of stage B4 is the check leg.

`validate.py B4`, at the build's close:

```
stage B4:
  leg: build
  settled items 7844 = assignment_items_expected
  rulings 3288: {'genuine-joint': 1651, 'scheme-ambiguous': 451, 'reader-error': 152, 'author-error': 571, 'author-disagrees': 208, 'item-is-a-bag': 255}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 3288, outstanding 0
  coder conflicts 72

warn   _packets-B4/G01.md mentions a ruling, an adjudication or the gold key; no hint that these items were decided before reaches a blind reader (section 10). Read the packet.  [8 lines with this shape; first: G01.md]

0 errors (0 distinct shapes), 8 warnings
```

## Stratum R, the other 18 unresolved items (B4b-p2, 2026-10-13)

J's answer at 16:43 Berlin, after the PI told him that 18 of the 185 unresolved items were already in the draw (15 in A, 3 in U): "draw other 18". The PI reads it as follows (message of 14:49Z): draw 18 more of the unresolved items that `sample-B4.jsonl` does not hold, by a recorded seed, as a third stratum reported apart and never pooled with U or A. It is diagnostic: whether fresh readers converge where I found that no placement's test takes the concepts. It does not resolve those items. The 500 items and the 34 packets stay as built, and both arms read the new packets.

### Declared before the draw

- **The frame.** The unresolved rulings of `disagreements.jsonl` (185 items) that `sample-B4.jsonl` does not hold: 167 items, sorted by room and theme id.
- **The draw.** 18 items, uniformly at random, without replacement: `random.Random("20261013:R").sample` over the frame. The serving order of the 18 is `random.Random("20261013:R-order").shuffle`. The seed is the sample's, 20261013, with two new streams. Script `out/_analysis/b4b_sample_R.py`. It writes a sibling record, `out/sample-B4-R.jsonl` (stratum R, orders 501 to 518), and leaves `sample-B4.jsonl` as it stands. No redraw.
- **The 18 already drawn** (3 in U, 15 in A) stay in their strata. As declared for B4b, their readings leave the fresh-against-settled denominator and are counted.
- **What R measures, and its denominator.** R has no settled line to compare against: each of its items is unresolved, and its line in `assign_final.jsonl` stays as it is. For each arm the check reports, over R's 18 items and 36 readings:
  - the two readers' agreement with each other (mean Jaccard, primary match beside it), and alpha on the 18 by stage B2's definition;
  - for each item, whether the two readers' primaries meet;
  - whether the fresh placements fall among the placements the item already had (reading A, reading B, my B1) or outside them.
  The same diagnostic for the 18 unresolved items already in U and A is reported beside R, by stratum, never pooled with R or with each other. No fresh reading changes a ruling.
- **The packets.** Same §10 rules as the 34, in `out/_packets-B4/` beside them: fleet ids only, on B2's renderer, the same brief and end line, at most 15 items, each file under 50 KB, no sibling block, bag flag, stratum or ruling. The cut is chosen so that the largest packet is as small as the caps allow. The names run on from the 34: `S05-35` and following. The exception declared for B4b carries over: an item over the ceiling alone would be served alone under B2's and B3's shape.
- **The records.**
  - `MANIFEST.json` gains the new packets' entries; the 34 entries stay as they are. The manifest as it stood is kept first as `out/_analysis/packets-B4_MANIFEST_before_R.json`.
  - `out/_analysis/b4b_order_R.json` records each R packet's items.
  - `run_manifest.json` gains an entry that supersedes entry 13 and names stratum R, its seed streams, 36 packets and 518 items.

### The draw

`out/_analysis/b4b_sample_R.py --write`, as declared.
- **Records.** `out/sample-B4-R.jsonl` holds 18 lines, orders 501 to 518, sha256 1d0c75a6…; the record is `out/_analysis/b4b_sample_R.json`. `sample-B4.jsonl` is unchanged (2fe441cd…).
- **The frame.** 167 items. The other 18 unresolved items are already drawn: 3 in U and 15 in A, listed in the record.
- **Stratum R.** 18 items from 18 rooms, by class: 3 nine, 4 eight, 5 one. None is a gold or pilot item.
- **Why each item is unresolved.**
  - 13 are scheme-ambiguous with no placement: T3-001's `must_show` or discriminators five, and T3-023, T3-139, T3-005, T3-052, T3-113, T3-192, T3-029 and T3-164 one each.
  - 5 are author-disagrees. One is a class 5 bare title (kuwait t09). The other four are class 4 items where the lone-B1 rule left my theme out and the readers' test took nothing: touhou t18, shield t07, austria t12, yogscast t11.
- **Where they came from.** By adjudication packet: 1 seven, 2 two, 4 three, 6 four, 7 two.
- **For the check.** `out/_analysis/b4b_R_list.py` (read-only) lists each item's reading A, reading B and my B1, so the check can tell whether the fresh placements fall among them.

The next table gives the 18 in serving order, with the placements each had.

| order | item | class | reading A | reading B | my B1 |
|---|---|---|---|---|---|
| 501 | touhou t18 | 4 | T3-064 | T3-064 | T3-057 |
| 502 | wholesomememes t14 | 3 | T3-017 | T3-001 | T3-017 |
| 503 | kpop t13 | 3 | T3-139 | T3-050 | T3-005 |
| 504 | katawashoujo t02 | 3 | T3-048 | T3-023 | T3-023, T3-043 |
| 505 | habs t13 | 3 | T3-050 | T3-052 | T3-005 |
| 506 | shield t07 | 4 | T3-034 | T3-034 | T3-002 |
| 507 | 49ers t03 | 3 | T3-001 | T3-023 | T3-031 |
| 508 | GuildWars2 t07 | 4 | T3-048 | T3-048 | T3-001 |
| 509 | kuwait t09 | 5 | T3-002 | T3-017 | none |
| 510 | danganronpa t19 | 4 | T3-048 | T3-048 | T3-001 |
| 511 | wallstreetbets t17 | 3 | T3-018 | T3-026 | T3-052 |
| 512 | romania t18 | 4 | T3-113 | T3-113 | T3-031 |
| 513 | berserk t02 | 3 | T3-031 | T3-048 | T3-001 |
| 514 | austria t12 | 4 | T3-001 | T3-001 | T3-048 |
| 515 | dallasstars t01 | 3 | T3-192 | T3-146 | T3-031, T3-050 |
| 516 | opticgaming t12 | 3 | T3-029 | T3-183 | T3-029 |
| 517 | AcePlace t13 | 4 | T3-164 | T3-164 | T3-123 |
| 518 | yogscast t11 | 4 | T3-121 | T3-121 | T3-031 |

In 8 of the 18 items the two B3 readers agreed and I still found that their test takes nothing (class 4). Those are the items where fresh readers converging on the same theme would most test my reading.

### The build

- **The packets.** `out/_analysis/b4b_packets_R.py --write` uses the B4b builder's renderer, brief, end line and checks. It wrote `S05-35` (8 items, 8,204 bytes) and `S05-36` (10 items, 5,947 bytes) into `out/_packets-B4/` beside the 34. They carry fleet ids only; no room-id-like string stands in participants' words.
- **Before writing,** the builder checked that the 34 packets matched their MANIFEST sha256 and that no `S05-35` existed.
- **The manifest file.** `MANIFEST.json` was first kept as `out/_analysis/packets-B4_MANIFEST_before_R.json`, then given the two new entries only: 36 entries, 518 lines due. `out/_analysis/b4b_order_R.json` records the R packets' items.
- **The check.** `out/_analysis/b4b_packets_check2.py` runs the B4b check over both sample records together and adds a test that B4b's 34 entries are unchanged. It found 0 errors: 518 items served once each in order, each translating back to its room. The R packets add no line with a word that could hint at a decision. One coder's note in `S05-36` says a single-code theme "preserves rather than resolves that ambiguity". That is the coder's word about the coder's own grouping, served as at B3, not a mark of my ruling.
- **The run manifest.** Entry 14 of `run_manifest.json` (`out/_analysis/b4b_manifest3.py`) supersedes entry 13, which stays in the file. It records:
  - 518 items in 36 packets (8 to 15 items, 5,947 to 49,994 bytes) and stratum R with its seed streams and sha256;
  - `n_agents` 2, with 72 reader sessions an arm;
  - for each arm, 1,000 settled-line comparisons for U and A, and R's 36 readings scored only for the readers' own agreement and convergence.
- **The arms** are as declared at B4b: both read `S05-35` and `S05-36`.

### What I doubt

- **R packets hold unresolved items only.** A reader cannot know that, but they are thin items (titles, single replies, April Fools play with no canvas in the words). A reader of `S05-36` meets ten such items together, while a reader of the 34 meets them one at a time among ordinary items. If R's readers agree less than U's readers on similar items, the packet's make-up may be part of the reason.
- **Eighteen items are few.** R's figures say where fresh readers land on these items; they cannot estimate a rate for the 185.

`validate.py B4`, at B4b-p2's close:

```
stage B4:
  leg: build
  settled items 7844 = assignment_items_expected
  rulings 3288: {'genuine-joint': 1651, 'scheme-ambiguous': 451, 'reader-error': 152, 'author-error': 571, 'author-disagrees': 208, 'item-is-a-bag': 255}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 3288, outstanding 0
  coder conflicts 72

warn   _packets-B4/G01.md mentions a ruling, an adjudication or the gold key; no hint that these items were decided before reaches a blind reader (section 10). Read the packet.  [8 lines with this shape; first: G01.md]

0 errors (0 distinct shapes), 8 warnings
```

## Stratum R, all 185 unresolved items (B4b-p3, 2026-10-13)

J corrected the PI's reading at 17:10 Berlin: "No. There were some 180that were un resolved. They should all be in r". Stratum R holds all 185 unresolved items, not a draw of 18 (the PI's message of 15:11Z). This replaces the B4b-p2 declaration of R's frame and size. The rest of that declaration stands: R is diagnostic, reported apart, never pooled with U or A, and no fresh reading changes a ruling. Nothing has been dispatched; both arms wait for this build.

### Declared before the build

- **R's members: all 185 unresolved rulings of `disagreements.jsonl`.**
  - **18 already in R:** drawn at B4b-p2 and served in `S05-35` and `S05-36`, orders 501 to 518, as built.
  - **149 added now:** the unresolved items neither R nor the 500 holds (185 − 18 in R − 18 in U and A).
  - **18 already in U (3) and A (15):** these count in R from the same readings, as the PI reads it. No arm reads any item twice, and U and A stay as drawn.
  - The PI's "add the 167" counts the 18 in U and A among them. 167 = 185 − 18 in R; 149 of the 167 are served anew, and 18 are read once, in their U or A packets.
- **Reading the 18 twice: one reason, kept once until J rules.**
  - **The reason.** The packet context differs. The 167 items read in R packets meet only unresolved items. The 18 in U and A were read among ordinary items. Reading those 18 again in R packets would give R one context throughout and would let the two contexts be compared on the same items.
  - **Against it.** It would have one arm read an item twice, with different reader sessions, and the readings could not count in both strata without a rule for which counts.
  - **What I do.** Following the PI, I keep the 18 once. R's figures are reported whole over 185 and split by where the item was read: R packets, 167; U and A packets, 18.
- **No draw, one order.** Every unresolved item is taken, so there is no sampling seed. The 149 are served in the order `random.Random("20261013:R-all-order").shuffle` gives over them sorted by room and theme id, orders 519 to 667.
- **The R record.** `out/sample-B4-R.jsonl` (18 lines, B4b-p2) is kept as `out/sample-B4-R.superseded-B4b-p2.jsonl` and rewritten with all 185 members.
  - Each line gives the item's stratum ("R"), its order, and where it is read: R packets for the 167, or "U" or "A" for the 18, whose order there is null because their reading sits under their U or A order in `sample-B4.jsonl`.
  - Each line also gives the class and the taxonomy, and how the item joined: drawn at B4b-p2, added at B4b-p3, or already in U or A.
- **R's denominator, per arm.** 185 items, 370 readings, 185 reader pairs. The diagnostic is the one declared at B4b-p2:
  - the readers' agreement with each other (mean Jaccard, primary beside it) and alpha by stage B2's definition;
  - whether primaries meet;
  - whether fresh placements fall among reading A's, reading B's and my B1's placements or outside them.
  It is reported over all 185 and split by the context above. There is no settled-line comparison for R. The 18 in U and A still leave U's and A's fresh-against-settled denominators as declared at B4b. Their readers' agreement with each other is reported in U and A as drawn and in R, each stratum apart.
- **The packets.** The 149 go into `out/_packets-B4/` beside the 36, under the same §10 rules: fleet ids, B2's renderer, the same brief and end line, at most 15 items, each file under 50 KB, no sibling block, bag flag, stratum or ruling, and the largest packet as small as the caps allow. Names run on from `S05-37`. The exception for an item over the ceiling alone carries over (leagueoflegends t02, if it is among the 149, is served alone under B2's and B3's shape).
- **The other records.**
  - `MANIFEST.json` gains the new entries only; the 36 entries stay. The manifest as it stood is kept first as `out/_analysis/packets-B4_MANIFEST_before_R_all.json`.
  - `out/_analysis/b4b_order_R_all.json` records the new packets' items.
  - `run_manifest.json` gains an entry that supersedes entry 14 and names R's 185 members, its order stream, and the packet and line counts.

### The record

`out/_analysis/b4b_R_all.py --write`.
- **Files.** `out/sample-B4-R.jsonl` now holds 185 lines; the B4b-p2 record (18 lines) is kept as `out/sample-B4-R.superseded-B4b-p2.jsonl`. The run's record is `out/_analysis/b4b_sample_R_all.json`. `sample-B4.jsonl` is unchanged.
- **Where R's items are read.** 167 in R packets: the 18 drawn at B4b-p2 (orders 501 to 518) and the 149 added (orders 519 to 667, in the order of `Random("20261013:R-all-order")`). 3 in U and 15 in A, with order null and counted from the same readings.
- **R's make-up.** By class: 3 seventy-one, 4 seventy-eight, 5 thirty-six. By taxonomy: scheme-ambiguous 114, author-disagrees 71. By adjudication packet: 1 sixty-six, 2 nineteen, 3 nine, 4 twelve, 5 six, 6 forty-nine, 7 twenty-four.
- **One gold item** is among R's 185 and stays as a corpus item, as declared at B4b.
- leagueoflegends t02 is not among the 149, so the declared exception does not arise.

### The build

- **The packets.** `out/_analysis/b4b_packets_R_all.py --write` uses the B4b builder's renderer, brief, end line and checks. It wrote `S05-37` to `S05-46` into `out/_packets-B4/` beside the 36: 10 packets, the fewest the caps allow, of 14 or 15 items and 7,619 to 14,070 bytes. The largest item is 2,937 bytes. Fleet ids only; no room-id-like string stands in participants' words.
- **Before writing,** the 36 packets matched their MANIFEST sha256 and no `S05-37` existed.
- **The manifest file.** `MANIFEST.json` was first kept as `out/_analysis/packets-B4_MANIFEST_before_R_all.json`, then given the ten new entries only: 46 entries, 667 lines due. `out/_analysis/b4b_order_R_all.json` records the new packets' items.
- **The check.** `out/_analysis/b4b_packets_check3.py` found 0 errors:
  - 667 items served once each, in orders 1 to 667, each translating back to its room;
  - the 18 R lines read in U and A are U's and A's own items and are not served again;
  - the 34 entries of B4b and the 36 of B4b-p2 are unchanged.
- **Two new lines with the word "unresolved",** both in `S05-45`, are coders' notes on what an absent image or video leaves open ("leaves the meaning of space unresolved"). They are the coders' words, served as at B3, and say nothing of my rulings.
- **The run manifest.** Entry 15 of `run_manifest.json` (`out/_analysis/b4b_manifest4.py`) supersedes entry 14, which stays. It records:
  - R's 185 members, its order stream, the R record's sha256 and its superseded copy;
  - 667 items served in 46 packets (8 to 15 items, 5,947 to 49,994 bytes);
  - `n_agents` 2, with 92 reader sessions an arm;
  - R's 370 readings an arm (334 from R packets, 36 from U and A packets), scored only for the readers' own agreement and convergence.
- **The arms** are as declared at B4b. Both read all 46 packets. Nothing has been dispatched.

### What I doubt

- **Packet context is now R's main confound.** The 167 R items read in R packets meet only unresolved items, ten R packets in a row of thin material. The 18 in U and A were read among ordinary items. I report R whole and split by context, but the split compares 167 items with 18, so it cannot settle how much the context matters. Reading the 18 again in R packets would settle it on the same items. I name that reason here and keep them once until J rules.
- **R has no settled line.** Its readers' agreement with each other can be high on a placement no earlier reading or ruling made, and that would not resolve the item. R says whether strangers converge, not whether they are right.

### Slips

- The B4b-p3 declaration and its diary line were written in one turn, as parallel calls. The edit had answered before I read the log's output, but the rule is to log a write only after the tool answers.

`validate.py B4`, at B4b-p3's close:

```
stage B4:
  leg: build
  settled items 7844 = assignment_items_expected
  rulings 3288: {'genuine-joint': 1651, 'scheme-ambiguous': 451, 'reader-error': 152, 'author-error': 571, 'author-disagrees': 208, 'item-is-a-bag': 255}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 3288, outstanding 0
  coder conflicts 72

warn   _packets-B4/G01.md mentions a ruling, an adjudication or the gold key; no hint that these items were decided before reaches a blind reader (section 10). Read the packet.  [9 lines with this shape; first: G01.md]

0 errors (0 distinct shapes), 9 warnings
```

## Stratum R, the 18 from U and A read again in R packets (B4b-p4, 2026-10-13)

J at 17:21 Berlin, on the B4b-p3 build: "We should have 685 in total" (the PI's message of 15:26Z). That is 250 in U, 250 in A and all 185 unresolved items in R. The PI's reading at 17:10, that the 18 unresolved items in U and A count in R from their U and A readings, was wrong. This replaces what the B4b-p3 declaration said of those 18. The rest of it stands: R is all 185 unresolved rulings, diagnostic, reported apart and never pooled with U or A, and no fresh reading changes a ruling. Nothing has been dispatched.

### Declared before the build

- **The 18 join R as R's own items.** The 3 unresolved items in U and the 15 in A are R's items, served again in R's own packets. U and A stay as drawn: their 500 items, their 34 packets and their orders 1 to 500 do not change.
- **Each arm reads these 18 items twice,** once in their U or A packet and once in an R packet, in different reader sessions.
  - Each reading counts only in the stratum of the packet it came from. The U or A reading is scored against the settled line as declared at B4b, where an unresolved settled item leaves that denominator and is counted. The R reading is scored as R's.
  - No reading counts in two strata, and the two readings of one item are never pooled.
- **685 lines due per reader set:** 500 in U and A, 185 in R. They hold 667 distinct items; the 18 are the only items served twice.
- **No draw, one order.** The 18 are sorted by room and theme id, then served in the order `random.Random("20261013:R-ua-order").shuffle` gives, orders 668 to 685.
- **The R record.** `out/sample-B4-R.jsonl` (185 lines, B4b-p3) is kept as `out/sample-B4-R.superseded-B4b-p3.jsonl` and rewritten.
  - All 185 lines are read in R packets, orders 501 to 685.
  - A new field `also_in` gives "U" or "A" for the 18 and null for the other 167. The 18 lines get their order, read_in "R" and a new `joined` text; the 167 lines change in nothing else.
- **R's denominator, per arm.** 185 items, 370 readings, all from R packets, so R is read in one context throughout.
  - The diagnostic is the one declared at B4b-p2: the readers' agreement with each other by stage B2's definition, primary beside it; whether primaries meet; whether fresh placements fall among reading A's, reading B's and my B1's placements.
  - The B4b-p3 split of R by reading context is withdrawn.
  - On the 18 only, R's readings are set beside the same arm's U or A readings of the same items: whether the readers' agreement with each other and their placements differ between the two packet contexts. This is a side note on 18 items, reported apart.
- **The packets.** The 18 go into `out/_packets-B4/` beside the 46, under the same §10 rules: fleet ids, B2's renderer, the same brief and end line, at most 15 items, each file under 50 KB, no sibling block, bag flag, stratum or ruling, and the largest packet as small as the caps allow. Names run on from `S05-47`. No packet says that an item is served elsewhere. The exception for an item over the ceiling alone carries over if it arises.
- **The other records.**
  - `MANIFEST.json` gains the new entries only; the 46 entries stay. The manifest as it stands is kept first as `out/_analysis/packets-B4_MANIFEST_before_R_ua.json`.
  - `out/_analysis/b4b_order_R_ua.json` records the new packets' items.
  - A new read-only check, `out/_analysis/b4b_packets_check4.py`, allows exactly the 18 repeats: each served once in orders 1 to 500 and once in orders 668 to 685, and no other item served twice.
  - `run_manifest.json` gains an entry that supersedes entry 15 and names the 685 lines, the order stream, and the packet counts.

### The record

`out/_analysis/b4b_R_ua.py --write`.
- **Files.** `out/sample-B4-R.jsonl` holds 185 lines, all read in R packets, orders 501 to 685. The B4b-p3 record (185 lines) is kept as `out/sample-B4-R.superseded-B4b-p3.jsonl`. The run's record is `out/_analysis/b4b_sample_R_ua.json`. `sample-B4.jsonl` is unchanged.
- **The 18 from U and A** take orders 668 to 685 in the order of `Random("20261013:R-ua-order")`, with `also_in` "U" for 3 and "A" for 15. By class: 3 three, 4 nine, 5 six. By taxonomy: scheme-ambiguous 7, author-disagrees 11. None is a gold or pilot item.
- **The other 167 lines** gain `also_in` null and change in nothing else; the script compares each with its B4b-p3 line before writing.

### The build

- **The packets.** `out/_analysis/b4b_packets_R_ua.py --write` uses the B4b builder's renderer, brief, end line and checks. It wrote `S05-47` (8 items, 4,576 bytes) and `S05-48` (10 items, 4,318 bytes) beside the 46: the fewest packets the caps allow. The largest item is 1,474 bytes. Fleet ids only; no room-id-like string stands in participants' words.
- **Before writing,** the 46 packets matched their MANIFEST sha256, no `S05-47` existed, each of the 18 was among the 500 in the stratum its `also_in` names, and none was served in `S05-35` to `S05-46`.
- **The manifest file.** `MANIFEST.json` was first kept as `out/_analysis/packets-B4_MANIFEST_before_R_ua.json`, then given the two new entries only: 48 entries, 685 lines due. `out/_analysis/b4b_order_R_ua.json` records the new packets' items.
- **The check.** `out/_analysis/b4b_packets_check4.py` found 0 errors:
  - 685 items served in orders 1 to 685, 667 of them distinct, each translating back to its room;
  - exactly the 18 are served twice, each once in orders 1 to 500 and once in orders 668 to 685;
  - the earlier entries of B4b (34), B4b-p2 (36) and B4b-p3 (46) are unchanged.
- **Hint words.** The check lists 24 lines with a word that could hint at a decision, the same 24 as at B4b-p3. `S05-47` and `S05-48` add none.
- **The run manifest.** Entry 16 of `run_manifest.json` (`out/_analysis/b4b_manifest5.py`) supersedes entry 15, which stays. It records:
  - R's 185 members, all read in R packets, the order stream "20261013:R-ua-order", the R record's sha256 and both superseded copies;
  - 685 lines due in 48 packets (8 to 15 items, 4,318 to 49,994 bytes), 667 distinct items;
  - `n_agents` 2, with 96 reader sessions an arm;
  - R's 370 readings an arm, all from R packets, and the side note on the 18 beside their U or A readings.
- **The arms** are as declared at B4b. Both read all 48 packets. Nothing has been dispatched.

### What I doubt

- **R is now read in one context, and it is a thin one.** All 185 R items sit in fourteen packets, `S05-35` to `S05-48`, that hold only unresolved items. That removes the B4b-p3 split, but R's figures still describe unresolved items read among unresolved items. They cannot be set beside U's or A's figures as a measure of the items alone.
- **The side note on the 18 mixes two causes.** Each arm reads each of the 18 in two packets, in different reader sessions. A difference between the two readings is the packet context's and the reader's together. With 18 items and two readers in each packet, it is a side note, not a measure of context.

`validate.py B4`, at B4b-p4's close:

```
stage B4:
  leg: build
  settled items 7844 = assignment_items_expected
  rulings 3288: {'genuine-joint': 1651, 'scheme-ambiguous': 451, 'reader-error': 152, 'author-error': 571, 'author-disagrees': 208, 'item-is-a-bag': 255}
  classes 1: 2566, 2: 1990, 3: 2393, 4: 837, 5: 58; contested (3, 4, 5) 3288, ruled 3288, outstanding 0
  coder conflicts 72

warn   _packets-B4/G01.md mentions a ruling, an adjudication or the gold key; no hint that these items were decided before reaches a blind reader (section 10). Read the packet.  [9 lines with this shape; first: G01.md]

0 errors (0 distinct shapes), 9 warnings
```
