r/place A fruit fly for organization science

out/notes-B2.md

Saved at B2.B2d: gold and stability check. This reading copy substitutes participant identifiers in saved text; it is not a new interview response. Reading Markdown.

Participant handles in these reading copies use the pixel stream's identifiers: base64(SHA1(username)), case preserved, without a salt. These are linkable pseudonyms. Profile links are removed; missing-author markers remain. Original research files are unchanged. Quote offsets refer to original text. Source and reading-copy hashes are listed separately.

Source commit: 986c0bf4891c, 2026-10-12T16:09:56+02:00. Saved-state date: 2026-10-12T14:09:45Z. Catalogue close receipt Commit date and saved-state date are distinct.

Original GitHub file. Original SHA-256: 822305d866068c1eb721f7f28b1db428366fbdd993db2d61eccfd58a6c857948. Reading-copy SHA-256: 822305d866068c1eb721f7f28b1db428366fbdd993db2d61eccfd58a6c857948.

Notes, stage B2: the pilot

Standing instruction from J (2026-10-11, 16:54 Berlin, through the handler)

"Stop cutting room reads to a line length (cut -c1-100 or any other cut). Read room lines whole. When a read is too long, page it by line ranges or by offset, never by truncating lines."

From B2a-r1 on, every room read is whole by line. A long read is paged by line range or offset. No cut -c and no other truncation is applied to room material.

J also said (17:01 Berlin): ask J whenever a question is needed, with mem.py ask; asking does not stop the run.

Leg B2a-r1, build round 1, 2026-10-11

Declarations, made before round 1

The hard set: sizes and sources. 40 items, drawn by out/_analysis/b2_select.py with the string seed b2a-r1:hard. The list is out/_analysis/b2_hardset_r1.tsv.

A departure from section 1, and why (QB2-001 asks J). packets.py B2 serves each round as one packet under the 50 KB ceiling. Section 1 asks for 40 to 60 items, including the ten biggest bags of notes-B1.md.

The gold set. 40 items by the same rule, seed b2a-r1:gold, in out/_analysis/b2_goldset.tsv: 19 pair items from the pairs' pools (none a round-1 item), 8 rule 0 bags and 13 random. No second-order theme sits in both sets. The items render 42,148 bytes. I placed them myself into out/gold_items.jsonl with confidence and reasons. They are shown to no pilot reader and kept outside the readers' directory.

The stopping threshold. Rounds stop when the mean pairwise agreement on the hard set reaches 0.70 (the definition is below). The other stops of section 5 also hold: a round with no scheme edit, or four rounds. Why 0.70: the set is drawn hard, half from pairs a reader is expected to confuse. On easy items the scheme should do far better, and stage B3 reports that.

The agreement definition, which stages B3 and B4 reuse unchanged.

The gold policy.

The batch cap for stage B3. Set at the check leg B2b-r1, from the position curves of section 4. It is not set here.

Author placements. Every item of both sets was placed by me into author_items.jsonl and gold_items.jsonl before any packet existed. Each line has the set of third-order themes, a why per theme, a confidence (clear or arguable) and the concepts it rests on. I read each item through mem.py theme <sub>/<tNN>, whole, paged where long. That verb prints the working placements of scheme_current.jsonl above the concepts, so they were in view. Those placements are my own from B1. Each author placement was made against the shipped gates in scheme.jsonl, and where it differs from the working placement, the line says so.

What was built

The author's placements (out/_analysis/b2_author.py, which checked every theme id against scheme.jsonl and every support concept against the item's own concepts in the store):

RETURN-B2.md. It holds rule 0 in the contract's words and the return line of section 1. Rule 0's line for multiplacement_log.jsonl is carried on the return line as multiplacement_log, null when multi is false. The check leg copies those lines into the pilot's record, never into the B1 log. It also holds item_is_a_bag, the end marker END-OF-RETURN in the fenced block, and the line telling the reader to confirm it reached the marker.

The packets. packets.py B2 --round 1 --scheme scheme.jsonl --items author_items.jsonl --seed 20261011 --to out/_packets-B2 wrote:

No exemplar is served, and no gold file is in the folder. The scheme served is scheme.jsonl as shipped at B1e. packets.py would otherwise have preferred scheme_current.jsonl, which holds no gates, so --scheme was given.

Where the packets live (QB2-002 asks J). packets.py writes to _packets-B2/round-1/ by default. HOW-TO-RUN.md and validate.py B2 expect the packets flat in _packets-B2/. I built flat. The first, nested build is byte-identical and moved to out/_analysis/b2_packets_round1_nested/, so the dispatch finds one packet only.

Manifest. run_manifest.json has a B2 round-1 entry: readers on @preset/cheap through the gateway, three of them; the seeds; 40 items; and the packet's path and hash. The decoding settings are left to the dispatch, which records what served.

Questions open: QB2-001 (the 50 KB ceiling against the ten biggest bags) and QB2-002 (the packet path). Each carries its assumption, and the work above rests on both.

Reading. From this leg on, no room read was cut to a line length. The only "…" in the reads is mem.py's own display of the label column; the quote column was whole in every read.

The close-check, B2a-r1

validate.py B2 reported:

stage B2:
  leg: build (0 dispatch folders with DONE)
  author items 40, gold items 40, scheme ids 197

0 errors (0 distinct shapes), 0 warnings

The leg closes with done.sh B2 --cut packets-out. The dispatch sends P03-r1.md to three fresh readers. The check leg B2b-r1 scores fidelity, pairwise agreement and alpha, sets the batch cap for stage B3, and makes the edits.

Leg B2b-r1, check round 1, 2026-10-11

What the PI and J ruled before and during this leg

The dispatch, in fleet.py's counts

out/_fleet_raw/B2/round-1/ holds four attempts.

reader reissue elapsed (s) input tokens output tokens (thinking) cost (USD)
r12 0 582.7 158,259 85,776 (61,498) 0.066
r15 1 1,396.4 286,397 129,100 (117,668) 0.099
r16 1 273.0 133,410 60,104 (49,156) 0.046

The whole last run cost 0.369 USD, with 747,469 input and 494,282 output tokens. Each reader's usage record shows one tool call; the record does not say what it was.

Round 1's three numbers

Scored by out/_analysis/b2_score.py on r12, r15 and r16 only, by the definitions declared above:

What licenses these figures, in FLEET.md's words: readers share an architecture with me or with each other, so the figures bound whether the written instrument decides, never whether it is right. The claim they support is what I would have produced at a scale one analyst cannot reach, not what any competent reader would have produced.

By source and by my confidence:

The main finding is mine to own. I placed 24 of the 40 items on two kinds. The readers placed one kind in most items: 3, 6 and 1 multi lines out of 40. In 14 items all three readers placed one theme that is among mine, so the item scores 0.5 against me while the readers agree perfectly. Rule 0 asks for a second placement only where one cannot carry the material. The readers read it more strictly than I did. Those second placements are author-errors (the rechecks below record them). The readers are not wrong.

Stopping. Pairwise agreement (0.733) clears the declared threshold of 0.70. Under the round-2 rule no round may stop before the ten biggest bags have been read, and this round made edits. So round 2 opens.

What divided readers, and the verdicts

out/_analysis/b2_r1_items.tsv has every item.

The edits

scheme_edits.jsonl: 272 lines, all round 1.

The first record bundled mirrors and new questions one line per theme and field (36 lines). After QB2-003 it moved to out/_analysis/scheme_edits_b2b-r1_bundled.jsonl, and the record was rewritten one line per change. The 36 tier_history lines written for the bundled record (253 to 288) are superseded by the per-edit lines that follow them.

The rechecks

Every edit that is not a gate-check owes rechecks of my own placements on the themes it touches. There are 70 such edits; they owe 594 records over 78 items. out/_analysis/b2_rechecks_r1.py decides each item once and records it under every edit that owes it, with mem.py recheck and the concepts behind each theme.

Section 4

Position curves (each reader's items at positions 1 to 10 against 31 to 40):

Two of three readers still improve inside the round, so convention formation is not over at 40 items. Ten items per bin and three readers make this weak evidence. Following section 4, the remedy is a warm-up block, not a bigger batch.

The batch cap for stage B3 (declared here): 40 items per batch, the first 10 of them a warm-up block that is placed and not counted. To be revisited with round 2's curves.

Exemplar candidates: the 18 items that divided readers are in exemplar_candidates.jsonl, with the readers' sets and mine.

Predicted confusions, so far

Of the 19 pairs in confusions.md, round 1's readers split on:

The hardest predicted pair, T3-005/T3-021, did not split: GreenCorner t03 went to T3-005 for all three readers. The scored scorecard comes after the gold round.

Next

Round 2 is built at B2a-r2, in out/_packets-B2/round-2/, from the edited scheme.jsonl:

Added after the section above, in the same leg

The deal cluster. Reading T3-010's 17 pairs found seven where a decide_when_both names T3-010 but no discriminator separates the pair: T3-012, T3-035, T3-039, T3-040, T3-084, T3-123 and T3-139. mem.py gates checks only must_not_show lines, so it does not see this shape. Seven questions were written into both gates (out/_analysis/b2_newpairs_r1c.json; scheme_edits 273 to 286). They are kind scheme-ambiguous, with caused_by gates:A|T3-010 and 14 tier_history lines.

The final counts are:

The rechecks, final. 697 recheck records, none owed. 22 items moved from my original placement: 18 author-errors and 4 edits doing their work.

The close-check, B2b-r1

validate.py B2 reported:

stage B2:
  leg: check (1 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  author items 40, gold items 40, rounds scored 1, edits 286 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

0 errors (0 distinct shapes), 443 warnings
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

The 443 warnings are pairs touching an edited theme that are not yet confirmed. They are read and confirmed before the freeze, where they become errors. The check counts 120 return lines because round-1 holds only the three valid readers' .jsonl files; the failed attempts are .failed.txt.

The leg closes with done.sh B2. Round 2's build leg, B2a-r2, comes next.

Leg B2a-r2, build round 2, 2026-10-11

QB2-003, revisited

The PI's answer to QB2-003 arrived during B2b-r1, and that leg applied it in full. Every repair is a scheme_edits.jsonl line with caused_by gates:T3-a|T3-b; mirrors are kind gate-check, with no recheck and no tier_history line; new sentences are scheme-ambiguous and owe both. My assumption, to repair only the pairs round 1's edited themes belong to, was dropped in that leg. No work of this leg rested on it. mem.py gates on the scheme served this round finds 0 one-way discriminators, 0 must_not_show lines without a discriminator and 0 unknown ids. 28 pairs are confirmed and 464 are not. The answer asks me to confirm each pair I read; the 464 are read and confirmed before the freeze.

The ten biggest bags, placed

I read all ten second-order themes whole, paged with --limit and --offset and never cut. Then I placed them, before any round-2 packet existed. out/_analysis/b2_author_r2.py appended them to author_items.jsonl. It checked every theme id against scheme.jsonl, and every concept against the item's own concepts with vlib.support_problems and vlib.also_present_problems. It also checked that no item was already in the hard or gold set, and it took each item's rank from notes-B1.md's list. Each line carries source "biggest-bag", support_by_theme, item_is_a_bag and also_present. All ten are arguable. The hard set is now 50 items.

Rule 0, as amended, decides the form. Round 1 showed that my second kinds were author-errors whenever one theme carried the material. So no line places more than one theme. A bag, an item that needs more than three themes, places one and names the rest under also_present, each with its own concepts.

The next table lists the ten items: the theme placed, the themes named under also_present, and the B1 working kinds.

rank item concepts placed also_present B1 working kinds
1 leagueoflegends t02 798 T3-023 none T3-023
2 theblackvoid t09 389 T3-006 none T3-006, T3-080, T3-085
3 ainbowroad t11 361 T3-035 none T3-035, T3-084, T3-139
4 2007scape t04 349 T3-038 T3-005, T3-123, T3-010, T3-179, T3-157 T3-038
5 theblackvoid t12 335 T3-174 T3-006, T3-163, T3-190, T3-005 T3-031, T3-163, T3-174
6 ainbowroad t04 327 T3-021 T3-139, T3-024, T3-011, T3-084 T3-021
7 ainbowroad t03 326 T3-005 T3-084, T3-149, T3-050, T3-124 T3-005
8 dota2 t05 314 T3-023 none T3-023, T3-032
9 ainbowroad t07 311 T3-041 T3-035, T3-160, T3-033, T3-061 T3-038, T3-041, T3-160
10 sweden t01 310 T3-065 T3-035, T3-012, T3-061, T3-113, T3-151 T3-065

Six are bags and four take one theme. Points from the reads:

What was built

RETURN-B2.md. It gains the also_present clause in J's words of section 1. A bag places one theme and names every other with its own concept ids; otherwise the field is {}. It also gains a paragraph on parts: read every part, reply with the end marker alone on every part but the last, and answer for all items on the last. The batch name is now P03-r2. The round-1 text is kept as out/_analysis/RETURN-B2_round1.md; round 1 is scored as it was sent.

The packets, in parts (QB2-001). packets.py B2 writes one packet and exits when it is over 50 KB. Round 2 renders to about 513 KB, and leagueoflegends t02 alone is about 87 KB. So the splitter out/_analysis/b2_parts_r2.py imports packets.py and uses its own Store.item and scheme_pages. It shuffles the 50 items as packets.py does, with seed 20261012. Then it cuts the rendered lines into parts. An item that does not fit runs on into the next part under its heading marked "(continued)". A concept line always travels with its quote line, and positions run on across parts. The helper checks that every concept of every item is served exactly once. It wrote out/_packets-B2/round-2/:

The next table lists the positions each part holds.

part positions part positions
p1 1-8 p7 37
p2 8-19 p8 37-39
p3 19-27 p9 39-43
p4 27-28 p10 43-47
p5 28-36 p11 47-50
p6 36-37

Position 37 runs over four parts (p5 to p8); it is leagueoflegends t02. The seeded order and the positions per part are in out/_analysis/b2_order_r2.json, outside the readers' folder. Round 1's packets are where they were: flat in out/_packets-B2/, and J's copy in round-1/. No gold item and no room note is in the folder.

MANIFEST.json, on QB2-004's assumption. QB2-004 is open. It asks what form fleet.py expects when one item is larger than a part. Until it is answered, each part carries count_key position, the B3 exclusions, group P03-r2, part k and parts 11. Parts 1 to 10 carry items 0, since their reply is the end marker alone, and part 11 carries all 50. Each entry also records its positions and the seed. If J answers otherwise, the next build leg rebuilds from the same helper.

Manifest. run_manifest.json has a B2 round-2 entry (out/_analysis/b2_manifest_r2.py). It records the model, deepseek/deepseek-v4-flash-0731, and J's reader settings: one provider (Relace) and medium reasoning effort. Round 1 ran at high effort on mixed providers. A change in agreement between the rounds is therefore partly the settings and not only the edits. The entry also records the seed, 3 agents, 50 items, and every part's bytes and sha256.

The PI's round-2 rule. No round may meet a stopping rule before the ten biggest bags have been read once. Round 2 serves all ten, so its check leg may apply the stopping rules.

Questions open: QB2-004.

The rechecks the ten new items owed

The ten bags sit on themes that round 1's edits changed. The first run of validate.py B2 in this leg therefore found 57 rechecks owed under 42 edits, one error line per edit. No edit can have moved a placement made after it. The check still asks for the record, so out/_analysis/b2_rechecks_r2.py --show printed each edit's changed sentence beside the items it owes. I read each and wrote one reason per edit. None moves a placement. The 57 records went in through mem.py recheck, all unchanged, with the concepts from each line's support_by_theme. rechecks-B2.jsonl now has 754 records, and none is owed.

The close-check, B2a-r2

validate.py B2 reported:

stage B2:
  leg: check (1 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  author items 50, gold items 40, rounds scored 1, edits 286 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 443 warnings

The 443 warnings are the unconfirmed pairs that touch an edited theme. They are read and confirmed before the freeze. The check calls the leg "check" because round 1's dispatch folder holds DONE; this leg is round 2's build. The leg closes with done.sh B2 --cut packets-out. The dispatch sends the eleven parts of P03-r2 to each of three fresh readers. The check leg B2b-r2 scores fidelity against author_items.jsonl and against the rechecked placements, with pairwise agreement and alpha.

Leg B2b-r2, round 2 rebuilt, 2026-10-12

Why round 2 was rebuilt

Round 2's dispatch ran three times, and every reader was exhausted. There is no valid return. out/_fleet_raw/B2/round-2/ holds DONE, EXHAUSTED.tsv and log.jsonl; nothing in it is scored. The handler gave two causes, both in the log.

QB2-004 was answered before the dispatch: J confirmed my MANIFEST form for parts. J's ruling of 2026-10-12 replaces the parts design, so nothing rests on that answer any longer.

J's ruling, as applied

The ruling asks for self-contained packets: at most 15 items and at most 180,000 bytes of item text each; no item split across packets; no MANIFEST group, part or parts; the same 50 items, shared pages and RETURN-B2.md, minus its parts paragraph.

out/_analysis/b2_packets_r2b.py built them with packets.py's own Store.item. It keeps round 2's seeded order (seed 20261012, out/_analysis/b2_order_r2.json) and cuts it into consecutive packets, choosing the cut points that make the largest packet smallest. No item is over the cap; the largest, leagueoflegends t02, is about 87,000 bytes. Four packets would meet the caps, but one would hold 166,501 bytes of item text, close to the cap. I built five, so the largest holds 128,155 bytes and each reader has more room inside the window.

The next table lists the five packets that the dispatch must read, all in out/_packets-B2/round-2/.

packet items bytes of item text bytes in all
P03-r2-1.md 15 58,210 58,656
P03-r2-2.md 12 96,519 96,965
P03-r2-3.md 9 128,155 128,599
P03-r2-4.md 3 125,484 125,928
P03-r2-5.md 11 97,101 97,547

Each packet numbers its items from 1 and says how many lines to return. MANIFEST.json gives each packet its own item count, with count_key position, and no group or part. The items per packet are in out/_analysis/b2_order_r2b.json. The shared pages beside them are index.md and G01.md to G21.md, unchanged from B2a-r2. Packet 4 holds three items: leagueoflegends t02, acecombat t05 and dota2 t05.

The packets are over FLEET.md's 50 KB ceiling by J's ruling, which sets the byte cap at 180,000 of item text. packets.py's writer asserts 50 KB, so the helper writes the files itself.

Superseded, not deleted. The eleven parts P03-r2-p1.md to P03-r2-p11.md and their MANIFEST.json moved to out/_analysis/b2_packets_round2_parts/. The dispatch must not read them.

RETURN-B2.md loses its paragraph on parts. The batch field is now the name on the packet's title line, such as P03-r2-3. The parts version is kept as out/_analysis/RETURN-B2_round2_parts.md.

Manifest. run_manifest.json has a new round-2 entry from this leg (out/_analysis/b2_manifest_r2b.py). It supersedes the B2a-r2 entry, which stays. It records the five packets with bytes and hashes, J's caps, and the same reader settings: one provider (Relace) and medium effort.

The close-check, B2b-r2

validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 0 readers, 0 return lines
  author items 50, gold items 40, rounds scored 1, edits 286 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

ERROR  _fleet_raw/B2/round-2 holds a finished dispatch and pilot_rounds.jsonl has no line for round 2; the check leg scores it (fidelity, pairwise agreement, alpha) before it closes
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

1 errors (1 distinct shapes), 443 warnings

The error conflicts with J's ruling. The failed folder holds no reading, so there is nothing to score, and the check accepts no line without numbers. QB2-005 asks J how to record a failed dispatch. Meanwhile I write no pilot_rounds.jsonl line for round 2 and leave _fleet_raw/B2/round-2/ as the dispatch left it. A diary line of kind ask at 03:56 carries the same question without an id; I wrote it with mem.py log by mistake, and QB2-005 is the record.

The 443 warnings are the unconfirmed gate pairs, read before the freeze.

QB2-005, answered: the failed dispatch moved aside

J ruled (2026-10-12, 06:55 Berlin). The failed folder is renamed and no pilot_rounds.jsonl line is written for it. I ran mv out/_fleet_raw/B2/round-2 out/_fleet_raw/B2/round-2-failed; nothing was deleted. J dispatches round 2 again into a fresh round-2/ folder.

round-2-failed/ holds the three exhausted dispatches of the eleven-part packet and no reading. Its DONE file counts 11 packets, 3 readers, 0 valid returns and 3 exhausted, on deepseek/deepseek-v4-flash-0731. They used 1,873,195 input tokens and 10,054 output tokens, at a cost of 0.087 USD. The log holds 70 calls from 14 reader ids (r1 to r14). The folder holds 13 failure files:

My assumption under QB2-005 was to write no line and leave the folder alone. The first half stands; the folder is now renamed as J ruled.

The close-check after the rename (QB2-006)

After the rename, validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2-failed: 0 readers, 0 return lines
  author items 50, gold items 40, rounds scored 1, edits 286 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

ERROR  stage output 'scheme_final.md' was not written
ERROR  stage output 'scheme_final.jsonl' was not written
ERROR  stage output 'stability-B2.md' was not written
ERROR  stage output 'pilot_report.md' was not written
warn   _fleet_raw/B2/round-2-failed returned but no pilot_rounds.jsonl line is flagged "gold": true; the gold figure is reported beside the last round's
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences [443 lines with this shape]

The round-2 error is gone. The check treats every folder in _fleet_raw/B2/ that holds DONE and is not named round-N as a gold or stability dispatch, so it reads the stage as finished and asks for the freeze outputs. The stage is not finished, and writing those files now would be false. round-2-failed/ still holds the dispatch's own DONE file, which I leave untouched. QB2-006 asks J which fix he wants: move the folder out of _fleet_raw/B2/, have the dispatch rename DONE, or have the check skip folders named *-failed. Meanwhile the folder stays where J named it, and the leg stays open if done.sh refuses. The five packets in out/_packets-B2/round-2/ are ready for the new dispatch either way.

QB2-006, answered: the failed dispatch moved out of _fleet_raw/B2/

J ruled at 06:55, and the handler placed the folder under that ruling. The check is not changed. I moved out/_fleet_raw/B2/round-2-failed/ whole to out/_analysis/fleet_B2_round2_failed/ (mv). Nothing was deleted, and its DONE, EXHAUSTED.tsv, arm.json, log.jsonl and 39 reader files are inside, untouched. The new path is where the failed first dispatch of round 2 lives; it holds no reading and is never scored. _fleet_raw/B2/ now holds round-1/ only, and J dispatches round 2 again into a fresh round-2/.

validate.py B2 after the move:

stage B2:
  leg: check (1 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  author items 50, gold items 40, rounds scored 1, edits 286 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 443 warnings

The 443 warnings are the unconfirmed gate pairs, read before the freeze. The leg closes with done.sh B2 --cut packets-out. The dispatch must read the five packets P03-r2-1.md to P03-r2-5.md in out/_packets-B2/round-2/.

Leg B2b-r2-p2, check round 2, 2026-10-12

QB2-005 and QB2-006, revisited

Both were applied at B2b-r2. The failed first dispatch is at out/_analysis/fleet_B2_round2_failed/, and it is never scored. No work of this leg rested on either assumption.

Rounds 1 and 2 had different readers (J, 2026-10-12 07:34 Berlin)

J's reading: the preset refused even a 32-token probe with HTTP 400. So the part-6 failures of the first dispatch were most likely the preset or its provider pin, not the context window (OpenRouter lists V4.1 Flash at 1,048,576 tokens). The same readers serve B3 and B4. Every change from round 1 to round 2 below is partly a change of readers, not only of the scheme.

The dispatch, in fleet.py's counts

_fleet_raw/B2/round-2/DONE and log.jsonl record 5 packets, each sent to 3 fresh readers (15 readers, r1 to r3 inside each packet folder). There were 15 valid returns, 0 exhausted and 0 reissues. Calls took 67.6 to 235.7 seconds each. The round used 751,923 input and 489,651 output tokens, at a cost of 0.598 USD. All 150 lines came back.

One line mistyped its heading. In P03-r2-5/r2, position 7 returned AyyMD t02, where the packet holds AyyMD t08. Its concepts (c0037, c0041) are t08's, so it is scored as t08 by position.

Round 2's three numbers

out/_analysis/b2_score_r2.py scores the round by the declared definitions, reusing b2_score.py's Jaccard and alpha. out/_analysis/b2_rechecked.py builds the rechecked placements: each item's latest recheck, which moves 19 hard items. The next table gives the figures for the whole set and for its two parts.

set fidelity primary match fidelity vs rechecked pairwise primary pairwise alpha
all 50 (the hard set) 0.639 0.747 0.701 0.718 0.833 0.710
the 40 round-1 items 0.572 0.683 0.648 0.685 0.792 0.676
the ten biggest bags 0.911 1.000 0.911 0.850 1.000

Round 1, on its 40 items, scored fidelity 0.594, pairwise 0.733 and alpha 0.726. On the same 40 items round 2 is lower on all three. 27 of 50 items have two readers differing; 24 of them are round-1 items.

The largest change is in how many themes a reader places. Round 2's readers placed more than one theme on 47 of 150 lines; round 1's placed more than one on 10 of 120. Most of round 2's divisions are a second or third theme added by one or two readers. Each comes with a why_not_one that reads "carry" as "cover every concept". Rule 0's words are the contract's and stay. The rate of second placements is a property of the reader model, and B3, which uses these readers, should expect it.

What these figures license, in FLEET.md's words: they support the claim "what you would have produced at a scale one analyst cannot reach". They do not support "what any competent reader would have produced".

The ten biggest bags. All 30 lines put my placed theme first (primary 1.000). Readers marked the six bags as bags on 11 of 18 lines. They also marked bags I did not: ainbowroad t11, dota2 t05, leagueoflegends t02 and theblackvoid t09 each drew one or two bag lines. also_present diverges widely. The themes a reader names, placed and also present, score a mean Jaccard of 0.283 against mine. On 2007scape t04 one reader named 85 themes (the other two 29 and 16). On sweden t01 the three named 34, 35 and 25; I named 5. QB2-008 asks J for a concept floor.

The verdicts

The next table gives one verdict for each item that divided readers, and for each where all three readers left my placement. Stage B4's taxonomy names the kinds. "Rechecked" means my placement after round 1's rechecks.

item readers verdict
guatemala t02 all three T3-002, T3-167, T3-026; none T3-065 scheme-ambiguous: the concepts say only "a flag" in r/guatemala, and two readers never opened G17. Edits 287, 290, 293, 294
nVade t04 T3-195, T3-195, T3-005 scheme-ambiguous: a pledge honoured by defending had no T3-195 question against T3-011 or T3-005. Edits 288, 289, 295
n64 t02 T3-033+T3-002, T3-033+T3-038, T3-038 scheme-ambiguous: no question between T3-033 and T3-038. Edits 291, 292
dofus t01 T3-033 in all three, seconds T3-092, T3-038 the same pair; edits 291, 292
AyyMD t08 T3-001, T3-023, T3-023 author-error: the moderator's takeover and CSS change (c0041, c0042) make it T3-023, as T3-023's question asks
nyu t01 T3-070, T3-070, T3-004+T3-020 author-error: coordinates, a moved spot and a template handed out are T3-070
cubers t12 T3-038, T3-044+T3-005, T3-044+T3-005+T3-021 author-error: the tag is made to send lost cubers to the sub (c0075), so T3-044, not T3-169
harrypotter t08 T3-159, T3-031, T3-017+T3-159 author-error: house points awarded for r/place work are a reward to helpers (T3-159)
farmcarrots t15 T3-031 in all three, T3-050 in two author-error: the room's carrot-joke replies lead; the taunt is the provocation
parabola t02 T3-010 in all three, T3-150 in two author-error: the border settled leads; my single T3-150 missed it
redhotchilipeppers t09 T3-009, T3-009+T3-072+T3-073, T3-009 author-error on my second theme, T3-043, which the readers do not need; T3-009 is primary in all three
Slovakia t07 T3-065+T3-024, T3-024+T3-060, T3-024 primary T3-024 matches all three; my second, T3-079, was drawn by none: author-error (Slovak hearts in the placehearts grid join no flags)
kpop t04 all three T3-033, T3-066, T3-136 genuine-joint: three readers agree on three themes; the vote proposal (c0024) and the turnout doubt have concepts of their own
floridagators t09 T3-014+T3-152 in all three, T3-153 in two genuine-joint: my original pair, plus the alliance meeting in the chat (c0124)
4chan t07 T3-010 in all three, T3-149 in two genuine-joint: peace asked of the blue box (c0136, c0143)
anarcho_capitalism t12 T3-149 and T3-010 in two, T3-149 alone in one genuine-joint, as I placed it; one reader's T3-153 is a reader-error
simonfraser t08 T3-084, T3-011+T3-084, T3-011+T3-084+T3-170 genuine-joint: help sent (c0029, c0043) beside help asked
korea t15 T3-015 in all three, T3-075 in one genuine-joint by one reader, my original second
Goodboye t03, acecombat t05 divided across T3-084, T3-151, T3-011; T3-010, T3-014, T3-062 item-is-a-bag, as at round 1
flashtv t13 T3-009, T3-073, T3-073+T3-009 two readers hold my rechecked T3-073; round 1's question holds; reader-error for the third
drumcorps t07, furry t10, placestart t15, stardustcrusaders t19, orderofthebluecorner t08 one reader adds themes; the others hold my rechecked placement reader-error: unneeded second placements
dota2 t05, leagueoflegends t02, theblackvoid t12 all hold my primary; one or two add the themes I left in why reader-error by rule 0, read strictly

GreenCorner t03, WisconsinBadgers t04, england t03, megaman t11 and signal t01 are unanimous. Each falls on my rechecked placement: round 1's author-error verdicts, confirmed by new readers. There are eight author-error verdicts this round: AyyMD t08, nyu t01, cubers t12, harrypotter t08, farmcarrots t15, parabola t02, redhotchilipeppers t09 and Slovakia t07. They change no sentence, so they are listed here and not in scheme_edits.jsonl. author_items.jsonl stays as written.

The edits

out/_analysis/b2_edits_r2.py wrote scheme_edits.jsonl lines 287 to 295, all scheme-ambiguous, with tier_history lines 373 to 381. They change 9 fields over 8 themes:

No edit narrows a theme. b1e_assemble.py --write rebuilt scheme.jsonl, families.jsonl and scheme.md. mem.py gates finds no defect.

The rechecks. The nine edits owed 133 records over 59 items in the hard and gold sets. out/_analysis/b2_rechecks_r2b.py read each against its edit's sentence; none moves. rechecks-B2.jsonl holds 887 records, and none is owed.

The gates. I read ten pairs and confirmed them (out/_analysis/b2_confirm_r2.json): the five new or reworded pairs, and five whose confirmation the edits had made stale. 31 pairs are confirmed, 0 are stale and 464 are unconfirmed.

Section 4

Round 2's packets hold 3 to 15 items, so round 1's curve (first ten items against last ten) cannot be drawn. Within the four packets of 9 or more items, I compared each reader's first half with its last half. The arguable rate falls in 8 of 12 readers and rises in 3. Agreement with the other two falls in 9 and rises in 2. The curve shows no sign that agreement grows with position. The B3 batch cap stays as declared: 40 items, the first 10 a warm-up block.

Stopping (QB2-007)

Section 5 stops the rounds when pairwise agreement on the hard set clears the threshold. Round 2's figure on the 50-item hard set is 0.718, above 0.70. The PI's round-2 rule holds: the ten biggest bags have now been read once. But the 40 items both rounds share fell from 0.733 to 0.685, with new readers, and the ten bags lift the whole. QB2-007 asks J whether the rounds stop and the scheme freezes, or round 3 opens. Meanwhile the rounds stop under the declared rule, with the 40-item figure reported beside it. This leg does not freeze: the freeze needs the 464 unconfirmed pairs read and the decide_when_both clusters checked. The leg closes with done.sh B2.

Questions open: QB2-007 (stopping), QB2-008 (a floor for also_present).

The close-check, B2b-r2-p2: return lines that break the specification (QB2-009)

validate.py B2 reported 44 errors in 9 shapes, all in _fleet_raw/B2/round-2/. fleet.py had accepted every line. out/_analysis/b2_r2_return_problems.py lists 16 of 150 lines in out/_analysis/b2_r2_return_problems.txt:

Every line carries its third_order, and the scores use nothing else. The stage says a return that fails the specification is reissued, not scored. Reissuing is the dispatch's work, not mine. QB2-009 asks J whether the dispatch reissues the ten affected returns (packet 2 r1, r2, r3; packet 3 r1, r2; packet 4 r1, r3; packet 5 r1, r2, r3), or the lines are scored as they stand with their errors on the record.

Meanwhile the scores stand as computed on all 150 lines (pilot_rounds.jsonl line 2). No edit rests on an affected line: edits 287 to 295 came from guatemala t02, nVade t04, n64 t02 and dofus t01, whose lines are all within the specification. The AyyMD t08 author-error verdict rests partly on the mistyped line, one of its two T3-023 placements. The bag figures (primary 1.000, also_present Jaccard 0.283) rest partly on the affected lines. If the returns are reissued, I rescore, write a superseding pilot_rounds line, and revisit these. The leg stays open until the close-check passes.

The bag recut: a proposal to J (QB2-010), not yet acted on

J ruled (QB2-008) that a second-order theme whose concepts spread over 16 to 85 third-order themes was cut too coarse. One item should sit in one theme most of the time, a few in two or three. Nothing below is cut until J's word.

How coarse the themes are (out/_analysis/b2_recut_survey.py, one line per theme in b2_recut_survey.tsv):

A cut by thread does not work. The bags were gathered across threads by what the concepts do. On ainbowroad t03, 309 of 326 concepts are alone in their thread; on sweden t01, 202 of 310. A neutral cut by thread would leave hundreds of one-concept parts. The cut has to be by doing, which is coding work.

The sibling citations. Most of round 2's failing lines cite concepts of sibling themes of the same room. They split into two groups:

So the citations are not evidence that sibling themes overlap, and the proposal does not regroup siblings. Fleet ids stop the second group. For the first group, the packet builder could keep one item per room in a packet, with J's agreement.

The proposal.

  1. Which items.

    • At once, before round 3: the hard set's six author bags (2007scape t04, theblackvoid t12, ainbowroad t03, t04 and t07, sweden t01) and the gold set's bags.
    • Before B3, by the same rule: every B1 bag (846 themes), and every theme of 100 or more concepts that round 3 shows to need more than three kinds.
    • The round-1 items I placed as bags in round 1 (Goodboye t03, acecombat t05) follow the same rule if they still need more than three kinds.
  2. By what rule.

    • I read the theme whole, in a blind window (mem.py blind on), so B1's working placements are hidden.
    • I group its concepts into children, each one doing in the room's own terms. Each child gets a label and a note written as a second-order theme, with no third-order ids and no scheme words.
    • A child needs at least three concepts (J's floor). A concept that fits no child of three joins the nearest child by its doing.
    • Every concept goes to exactly one child, and the parent's concept ids are kept.
    • Then, outside the window, each child is placed like any item, with a target of one third-order theme and at most three. A child that still needs more than three is cut again.
  3. With which verbs. No verb cuts a second-order theme today: package/store is read-only, and reassign re-places a theme only after a recut. I propose J adds two verbs:

    • A recut writer, mem.py recut <sub>:<tNN> --child "label|note|c1,c2,..." --reason .... It writes a recut layer beside the store (out/recut/themes.jsonl, the children with new room ids after the room's last tNN, and out/recut/codes.jsonl, each concept's child). It marks the parent superseded, never deletes it, and logs kind split.
    • Store readers (mem.py theme, codes --sub, packets.py's Store) that read the layer.

    The children also need fleet ids. J's table maker would draw new T2 ids from the same space, so fleet_ids.jsonl covers them.

  4. What it reopens of B1.

    • scheme_current.jsonl: the parents' placements are superseded by the children's (13,432 placements and 7,786 placed themes change by the cut).
    • multiplacement_log.jsonl: the parents' bag records and rule 0 lines are superseded.
    • F-001's within-room grain claim, which counts kinds per theme, is recomputed.
    • Each third-order theme's member counts are recomputed, so its tier (rare at under two unlike rooms) is checked again; rooms per theme do not change.
    • confusions.md rates are recomputed where they count parents.

    Not reopened: the codes themselves (episodes and exemplars cite concept ids, which stay), the third-order scheme's sentences, and the rooms' notes.

  5. What it changes in B2. author_items.jsonl stays as written. The children are appended as new lines (source "recut", with their parent), and the parents leave the hard set from round 3, so round 3's set is not round 2's on those items. Round 3's comparison with round 2 is reported on the 40 unchanged round-1 items. J may also prefer that round 3 keeps the parents beside the children, for one round's comparison.

Fleet ids. Round 3 is the first round with fleet ids. out/_analysis/b2_packets_fleet.py builds the packets: room name plus T2- theme ids and C concept ids; no room id in an id position; J's caps of 15 items and 180,000 bytes. A dry run on the current hard set (seed 20261013) gives five packets of 7 to 13 items. out/_analysis/b2_translate_fleet.py translates returns back before scoring and reports every id the table lacks, or that belongs to another room or theme. RETURN-B2.md now asks for fleet ids, and it carries J's floor: a theme enters also_present only with at least three concepts of its own. Its round-2 text is kept as out/_analysis/RETURN-B2_round2.md. B3's specification does not exist yet; the head carries both rules for it.

Two points for J:

QB2-007 and QB2-008, answered; fleet ids (J, 2026-10-12)

QB2-007. J rules that round 3 runs on the edited scheme with round 2's readers: deepseek-v4.1-flash, called directly, at medium effort. Round 3 is the first round in which only the scheme changes. My assumption, that the rounds stop, is withdrawn, and nothing is frozen. pilot_rounds.jsonl line 2 stands as round 2's record. The section "Stopping (QB2-007)" above is superseded by this ruling.

QB2-008. Yes to the floor: a theme enters also_present only with at least three concepts of its own. It is now in RETURN-B2.md, and the head carries it for B3's specification, which does not exist yet. J adds that the bags need a recut, proposed before round 3's packets and not cut before his word. The proposal follows (QB2-010).

Fleet ids. From round 3, and in B3, packets carry only fleet ids for codes and second-order themes (out/fleet_ids.jsonl, seed 20261012). My own files keep the room ids, and returns are translated back before scoring. Round 3 is the first round with fleet ids. A made-up code id lands on a real code about 7.5% of the time, and a made-up theme id about 7.8%; with room ids, an invented c-number in range almost always landed on a sibling.

QB2-009, answered: the 16 lines waived, round 2 scored as it stands

J ruled (2026-10-12, 09:27 Berlin): no reissue of round 2. The 16 lines in out/_analysis/b2_r2_return_problems.txt are waived by name, in out/return_waivers.jsonl (out/_analysis/b2_waivers_r2.py). Each line names the round folder, the file, the item as the line writes it, the problem as listed, and J's ruling. The AyyMD line's reason also names its mistyped heading. validate.py B2 skips the waived lines and counts them aloud.

Round 2 stays scored on third_order, as before. pilot_rounds.jsonl line 2, the verdicts and edits 287 to 295 stand unchanged; nothing rested on a reissue.

The 16 lines are reader faults:

The faults came from two things, and both are artefacts of room ids:

From round 3 the fleet ids of out/fleet_ids.jsonl end both: no id repeats, and a made-up id lands on a real code about 7.5% of the time. fleet.py rejects, and reissues in the dispatch, a line citing an id not under its item. For that check, round 3's builder out/_analysis/b2_packets_fleet.py writes codes_by_item into each packet's MANIFEST entry: the item's fleet theme id, as the line writes theme_id, with the fleet code ids served under it. Tested on guatemala t02 (8 codes) and sweden t01 (310). No round-3 packet is built yet: QB2-010, the recut, waits for J's word.

The close-check, B2b-r2-p2

validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  author items 50, gold items 40, rounds scored 2, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 443 warnings

The 443 warnings are the unconfirmed pairs that touch an edited theme; they are read before any freeze. The leg closes with done.sh B2. Round 3 opens (QB2-007). Its build waits for J's word on the recut (QB2-010), and its packets carry fleet ids.

QB2-010: the bags split (J approved, 2026-10-12 09:32 Berlin)

J approved the cut as proposed, at medium effort. The handler installed mem.py split. It writes out/recut/themes.jsonl and out/recut/codes.jsonl beside the read-only store and gives each child the room's next free tNN and a fleet id in out/fleet_ids.jsonl. The parent is superseded, never deleted. Each child names me ("analyst") as its author and names the parent it supersedes.

How the cut was made. I read every bag whole in one blind window (mem.py blind on, closed at 07:49:15), with B1's placements hidden. I grouped each bag's concepts into children by what the concepts do; each child has at least three concepts, and every concept is in one child. Each cut is written in out/_analysis/b2_split_<sub>_<tNN>.txt and was run by out/_analysis/b2_split_run.py. The helper checks coverage and the three-concept floor against the store before it calls mem.py split.

mem.py theme printed some concept lines blank (c0084, c0505, c0595 and c0960 of 2007scape t04, for example). I read the bags with mem.py codes --sub S --second tNN, and the helper's coverage check named every concept I had not yet assigned. Each one was read and assigned.

The six hard-set bags became 54 children. The next table lists each bag with its children and their sizes.

bag children the children (concepts)
2007scape t04 (349) t15 to t28 proposing what to make 48; the design's spot, size and look 20; building and reporting 85; coordinates and references 12; fixing misplaced pixels 22; defending the corner 11; covering others' art 13; refusing to give up the corner 6; dealing with neighbours 35; Trump politics with r/The_Donald 13; pride in working together 35; the flood of r/place posts 7; jokes and asides 38; pushing posts up 4
sweden t01 (310) t08 to t17 building, cleaning and holding the flag 54; defending it and calling out vandals 18; taking over the Danish flag and neighbours 28; Swedish emblems on the flag 44; other rooms asking for space 51; other rooms asking for help 22; settling with neighbours and letting art stay 31; Nordic friendship 9; looking back and the Maryland friendship 27; off-topic talk 26
theblackvoid t12 (335) t16 to t25 hailing the Void and its creed 88; calling it to consume named targets 71; keeping and defending the cores 43; arguing what the true Void is 30; leaving other colours for the Void 11; other rooms dealing with the Void 15; critics and taunts 21; looking back after its end 10; jokes and asides 36; new cores elsewhere 10
ainbowroad t03 (326) t14 to t21 alarms and fighting the Void 59; alarms about other attacks and collisions 70; calls to attack other rooms' work 22; war and peace with Blue and others 33; dealing with the Void 38; other rooms asking for help or to be spared 61; routing the road and proposing designs 30; hostility and insults against the road 13
ainbowroad t04 (327) t22 to t27 repairing the road itself 103; repairing and protecting other rooms' art 74; deciding to spare and share space 38; other rooms asking to be spared or helped 96; defending the road 12; looking back 4
ainbowroad t07 (311) t28 to t33 extending the road and planning its course 50; proposing pictures and features for it 156; other rooms asking for space on it 38; working beside neighbours without harming their art 39; the Gilbert Baker memorial 5; shards, takeovers and disputes over its spread 23

The hostility child of ainbowroad t03 holds "KILL THE GAYS" (c1395), posted to the room; it is kept and served as it stands.

The gold set's eight B1 bags. One was cut: dankmemes t16 (12 concepts) became t18, pointing out drawings on the canvas (5), and t19, reporting the build failed and mourning the canvas (7). Seven were not cut:

These small themes were B1 bags because nearly every concept did something different. With a floor of three concepts per child, they cannot be cut.

The children placed. I placed the 56 children like any item after the window closed (out/_analysis/b2_author_split.py). The 54 hard-set children were appended to author_items.jsonl and the 2 gold children to gold_items.jsonl. Each line carries its parent, source "split", support_by_theme and its fleet theme id. 40 children take one theme and 16 take two; each second theme has concepts of its own, named on the line. No child needs more than three themes, so none is a bag. The parents' lines stay as written. author_items.jsonl now has 104 lines and gold_items.jsonl 42. Round 3's hard set is the 44 unsplit items and the 54 children: 98 items.

The rechecks. The children sit on themes that earlier edits changed, so 86 edits owed them 526 rechecks. I read each edit's changed sentence against the children it owes (out/_analysis/b2_rechecks_split_show.txt), and none moves a child. The closest call is ainbowroad t24's second theme, T3-010: three of its five concepts invoke agreements already made, which T3-195 names. It stays, because the trimming to the agreed size is itself the border being settled. The 526 records were written with out/_analysis/b2_rechecks_split.py, one reason per edit. rechecks-B2.jsonl has 1,413 records, and none is owed.

What the split leaves for the check (QB2-011). validate.py B2 reports 698 errors in five shapes. All come from the split layer meeting records made before it:

QB2-011 asks J whether the check should read the split layer for items, keep a parent's own concepts for records that name the parent, and count the hard set without the superseded parents. Meanwhile the leg stays open. No round-3 packet is built. The 846 B1 bags wait for J's word.

QB2-011, answered: the check reads the split layer

The handler fixed the three error shapes in tools/vlib.py and tools/checks/stage_B2.py. They were faults of the check, not of the run.

My assumption needed no revisit. I recorded the 526 rechecks and left these shapes to the check, which now passes. Round 3's packets carry the children, not their parents.

The close-check, B2b-r2-p2, after the split

validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  author items 104, gold items 42, rounds scored 2, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   author_items.jsonl has 104 items; section 1 says forty to sixty
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 444 warnings

author_items.jsonl holds 104 lines: the six superseded parents kept as written, beside their 54 children. Round 3 sends 98 items. The 443 pair warnings are the unconfirmed pairs, read before any freeze. The leg closes with done.sh B2. Next comes round 3's build: b2_packets_fleet.py --round 3 on the 98 items, with the superseded parents left out and fleet ids only. The 846 B1 bags wait for J.

Leg B2a-r3, build round 3, 2026-10-12

The answers this leg was told to read

QB2-007 to QB2-011 were all applied at B2b-r2-p2:

Nothing in this leg rests on an assumption.

What was built

Round 3 is the first round in which only the scheme changes (QB2-007), and the first with fleet ids (J, 2026-10-12).

Items. Round 3 serves 98 items: the 44 unsplit hard items and the 54 children of the six split bags. The six parents (2007scape t04, sweden t01, theblackvoid t12, ainbowroad t03, t04 and t07) are not served. author_items.jsonl keeps their lines as written, so it holds 104 lines.

The packets. out/_analysis/b2_packets_fleet.py built the round, with two changes this leg. It now reads the split layer by giving packets.py's Store the out/ path. It also leaves out any item whose children are in out/recut/themes.jsonl. The round has seven self-contained packets in out/_packets-B2/round-3/, cut from the order seeded with 20261013. The next table lists them.

packet items bytes of item text
P03-r3-1.md 10 113,527
P03-r3-2.md 13 112,021
P03-r3-3.md 15 42,159
P03-r3-4.md 15 48,792
P03-r3-5.md 15 88,494
P03-r3-6.md 15 31,082
P03-r3-7.md 15 91,999

Each packet is within J's caps: at most 15 items and 180,000 bytes of item text, with no item split. The items per packet are in out/_analysis/b2_order_r3.json. Beside the packets are index.md and G01.md to G21.md, built from the edited scheme.jsonl.

Fleet ids. Each item is headed by its room and its T2- id, and each concept by its C id. The builder stops if a room id would stand in an id position, and none did. MANIFEST.json gives each packet its item count and codes_by_item: the fleet theme id of each item with the fleet code ids served under it. With that entry, fleet.py rejects and reissues any line that cites a code its item does not hold (QB2-009). Returns are translated back to room ids with out/_analysis/b2_translate_fleet.py before scoring; the check translates them through out/fleet_ids.jsonl itself (QB2-010).

RETURN-B2.md. It is unchanged since B2b-r2-p2. It asks for fleet ids and carries the floor of three concepts of its own for also_present.

Manifest. run_manifest.json has a round-3 entry (out/_analysis/b2_manifest_r3.py). It records the same readers as round 2 (deepseek/deepseek-v4.1-flash, called directly, medium effort, max_tokens 128,000), the seed, 98 items, and every packet's bytes and hash.

One packing matter for J. Some packets hold several children of one parent; for example, packet 3 holds ainbowroad children beside one another. At round 2, readers took concepts from a sibling item in the same packet. With fleet ids and codes_by_item, fleet.py now catches such a citation and reissues the reader. Packing one item per room per packet was proposed at B2b-r2-p2 and not ruled on, so it is not applied.

The close-check, B2a-r3

validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  author items 104, gold items 42, rounds scored 2, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   author_items.jsonl has 104 items; section 1 says forty to sixty
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 444 warnings

The leg closes with done.sh B2 --cut packets-out. The dispatch sends each of the seven packets to three fresh readers.

Leg B2a-r3-p2, the split withdrawn and round 3 rebuilt, 2026-10-12

The split, withdrawn

What was cut. At B2b-r2-p2 (QB2-010) I split six bags of the hard set and one gold bag with mem.py split, in one blind window. 2007scape t04 became 14 children, sweden t01 10, theblackvoid t12 10, ainbowroad t03 8, ainbowroad t04 6 and ainbowroad t07 6. In the gold set, dankmemes t16 became 2. The 56 children are in out/recut/themes.jsonl, and their concepts in out/recut/codes.jsonl. I placed each child and recorded 526 rechecks for them. The B2a-r3 round 3 served 98 items: 44 unsplit items and 54 children.

Why J withdrew it (J, 2026-10-12, 12:04 to 12:10 Berlin). Bags are a coder problem. Second-order themes are the coders' to cut, and the aggregator takes them as given. The split was a mistake, so the run goes back to before any cut and goes on from there, inside this run, with nothing deleted.

What the withdrawal did.

Records that belong to the withdrawn split. No figure counts these. out/_analysis/b2_split_withdrawn_count.py matched each file against the 56 children.

The split wrote no line on a child in scheme_current.jsonl, multiplacement_log.jsonl, tier_history.jsonl, exemplar_candidates.jsonl or scheme_edits.jsonl, so nothing there needs superseding.

What stands. Round 2's scores. The 16 waivers in return_waivers.jsonl (QB2-009). Edits 287 to 295 and their 133 rechecks (records 755 to 887). The 31 confirmed gate pairs.

The B1 bags. This run splits none of them. J will decide how the coders recut them. Struck at B2b-r3 (J, 12:24 Berlin): no one cuts the bags, neither this run nor the coders; the second-order themes stand as the coders made them, and a bag stays one item through B2 and B3, one theme placed and its other themes under also_present, each with three concepts of its own at least. J's ruling counts 841 B1 bags; my head said 846, and I have not reconciled the two counts.

Round 3 is round 2's set

Round 3 serves round 2's 50 hard items, each bag as one item. The six parents are served whole; for example, sweden t01 is served as one item with its 310 concepts. out/_analysis/b2_packets_fleet.py now leaves out no parent when out/recut/WITHDRAWN.json exists. It built five self-contained packets from the order seeded with 20261013. The next table lists the packets.

packet items bytes of item text
P03-r3-1.md 12 89,418
P03-r3-2.md 13 135,742
P03-r3-3.md 8 98,208
P03-r3-4.md 7 98,843
P03-r3-5.md 10 95,887

Each packet is within J's caps: at most 15 items and 180,000 bytes of item text, with no item split. The items per packet are in out/_analysis/b2_order_r3.json. index.md and G01.md to G21.md are built from the edited scheme.jsonl. Each MANIFEST.json entry carries codes_by_item. RETURN-B2.md is unchanged.

Fleet ids (J, 12:15 Berlin: fleet.py refuses a packet with codes_by_item if any room code or room theme id appears in its text, headings included). out/_analysis/b2_r3_roomid_scan.py scanned the five packets and the 22 shared pages and found 0 room ids. The same pattern finds 50 room ids in b2_order_r3.json. All 50 item headings carry T2- ids, and all 4,094 concept lines carry C ids.

Manifest. run_manifest.json now has 6 entries. The new round-3 entry (out/_analysis/b2_manifest_r3b.py, leg B2a-r3-p2) records 50 items in 5 packets and supersedes the B2a-r3 entry. The readers are round 2's: deepseek/deepseek-v4.1-flash, called directly, medium effort, max_tokens 128,000.

Round 3 is the first round in which only the scheme changes (QB2-007). Its check compares it with round 2 item for item.

The close-check, B2a-r3-p2

validate.py B2 reported:

stage B2:
  leg: check (2 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  author items 50, gold items 40, rounds scored 2, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 443 warnings

The leg closes with done.sh B2 --cut packets-out. The dispatch sends each of the five packets to three fresh readers.

Leg B2b-r3, check round 3, 2026-10-12

J's ruling of 12:24 Berlin, applied

No one cuts the bags, neither this run nor the coders. The second-order themes stand as the coders made them. A bag stays one item through B2 and B3: one theme placed, and its other themes under also_present, each with three concepts of its own at least. The line under "The B1 bags" that waited for a coder recut is struck, and the head's line with it.

The dispatch, as the handler rescued it

The dispatch log (_fleet_raw/B2/round-3/DONE) reported 7 valid returns and 8 exhausted packets. That was the handler's defect, not the readers': fleet.py's new check counted the third-order ids in multiplacement_log.additional as concept codes. The handler fixed it, re-validated every saved reply with the fixed check, and kept per packet the first three valid replies in reader order (_fleet_raw/B2/round-3/RESCUE-2026-10-12.json). The other valid replies are in each packet's _beyond_three/ and are not scored. EXHAUSTED.tsv is superseded by the rescue record.

fleet.py's counts (_fleet_raw/B2/round-3/log.jsonl, read by out/_analysis/b2_r3_look.py): 36 calls on deepseek/deepseek-v4.1-flash, medium effort; 15 first issues, 12 first reissues and 9 second reissues; 1.4904 USD; 7,431 seconds of calls in all. Of the 29 calls refused at dispatch, 27 were refused by the faulty check; two had faults of their own (P03-r3-2 r1 cited C0286150, a code not under its item; P03-r3-2 r5 lacked the end marker). The next table lists the kept replies.

packet items kept replies their durations (s) their output tokens
P03-r3-1 12 r1, r2, r3 141, 156, 410 38,319; 26,513; 33,862
P03-r3-2 13 r2, r3, r6 151, 188, 392 27,741; 38,694; 34,939
P03-r3-3 8 r2, r3, r10 199, 389, 387 38,176; 33,973; 54,632
P03-r3-4 7 r1, r2, r3 188, 203, 922 34,136; 44,211; 92,036
P03-r3-5 10 r1, r2, r3 55, 170, 276 13,826; 29,731; 24,440

Translation. Round 3 is in fleet ids. out/_analysis/b2_translate_fleet.py --round 3 read only the kept replies and wrote room-id copies to out/_analysis/b2_r3_returns/: 150 lines, 0 id problems. The readers wrote the room as "r/name"; the translator drops the "r/" before the lookup in out/fleet_ids.jsonl. Every line's heading matches its packet position.

The three numbers

out/_analysis/b2_score_r3.py scored round 3 by the declared definitions (per-item table out/_analysis/b2_r3_items.tsv; pilot_rounds.jsonl line 3). The readers are round 2's, so the change from round 2 is the scheme's edits 287 to 295 and the readers' own variation (QB2-007). The next table lists rounds 2 and 3.

figure round 2 round 3
fidelity, all 50 0.639 0.682
fidelity against the rechecked placements 0.701 0.760
primary match 0.747 0.780
pairwise agreement, all 50 0.718 0.728
primary pairwise 0.833 0.793
alpha 0.710 0.721
items with two readers differing 27 23
round-1 items (40): fidelity / pairwise / alpha 0.572 / 0.685 / 0.676 0.611 / 0.676 / 0.668
ten biggest bags: fidelity / pairwise 0.911 / 0.850 0.967 / 0.933
lines with two or more themes, of 150 47 27

Item by item against round 2, pairwise rose on 17 items, fell on 12 and held on 21. By source, pairwise is 0.731 on the pair items, 0.671 on the random items, 0.556 on the round-1 bags and 0.933 on the ten biggest bags.

Bags. 22 lines set item_is_a_bag; 18 lines name 145 themes under also_present, none under the three-concept floor. The themes readers name (placed plus also_present) score Jaccard 0.283 against mine on the ten biggest bags, as at round 2. One reader named 24 on ainbowroad t03. Four lines flag a bag and name no also_present (QB2-013, below).

What round 3 showed

The round-2 edits.

The cluster that still divides. T3-002 (a call for hands), T3-033 (proposing the room's mark) and T3-038 (building and reporting a mark). signal t01 gets three readers on three themes; n64 t02 divides T3-002 and T3-038; on 2007scape t04 one reader leads with T3-070 (directions for placers) where the other two place T3-038. All three items were steady at round 2 except n64 t02. The readers' reasons turn on which act leads: the call, the offer of an idea, or the build and its reports. The scheme's questions in this cluster do not decide that when one item holds all three.

Single-reader departures on items unanimous at round 2. ice_poseidon t16 (one reader on T3-192, joking about damage, against T3-031), WisconsinBadgers t04 (one reader on T3-042 alone, the other two adding T3-042 or T3-006 to T3-076), donaldglover t04 (one reader adds T3-032), kpop t04 (the readers' additions vary between T3-136 and T3-066). None touches an edited theme.

Divisions that persist from round 2. AyyMD t08 (two of three on T3-023, as at round 2; my author-error), flashtv t13 (T3-073 against T3-009), acecombat t05 (two on T3-014), simonfraser t08 and Goodboye t03 (bags), floridagators t09, furry t10, parabola t02, harrypotter t08, nyu t01, cubers t12, Slovakia t07, anarcho_capitalism t12, farmcarrots t15.

Base rates of the edited themes, per reader against my count over the 50: T3-065 2.7 against 3; T3-195 0.3 against 0 (round 2 more); T3-033 2.3 against 2; T3-038 1.7 against 3; T3-002 1.3 against 0; T3-026 0 against 0. No edited theme's rate fell to rare.

Section 4. The packets hold 7 to 13 items, too few for a first-ten against last-ten curve. Within packets, agreement with the other two falls from first half to last in 9 of 15 readers and rises in 6 (all six in the two shortest packets). The B3 cap stays at 40 with a 10-item warm-up. 23 dividing items are appended to exemplar_candidates.jsonl (68 lines).

The decision

Round 3's pairwise agreement on the hard set, 0.728, clears the declared threshold of 0.70. By section 5 the rounds stop, and no round 4 opens. This leg writes no scheme edit. The freeze needs, first, the 443 unconfirmed gate pairs read and confirmed and every cluster read for a decide_when_both that names a theme with no discriminator; the T3-002/T3-033/T3-038 cluster is the first to read. That work and the freeze are the next leg's; I asked J whether a fix to the cluster waits for the gold round or gets a round 4 (QB2-012, assumed: rounds stop).

The figure licenses this claim, in FLEET.md's terms: readers holding only the scheme reproduce what I would have produced at a scale one analyst cannot reach, on hard items, at 0.682 fidelity. It does not license the claim that any competent reader would have produced it.

QB2-013: four bag flags with no also_present

validate.py B2 reports 4 errors. Four kept lines set item_is_a_bag true and leave also_present empty: P03-r3-2/r3.jsonl lines 6, 10 and 11 (acecombat t05, n64 t02, Goodboye t03) and P03-r3-2/r6.jsonl line 6 (acecombat t05). Each places one theme validly. Reader r6 says why: the item is a bag, but no other theme has three concepts of its own. The flag and the three-concept floor collide. fleet.py accepted the lines. I asked J to waive them by name, as at QB2-009, and whether the return spec should say that a bag with no other theme at the floor is not flagged. Meanwhile round 3 is scored with the four lines as given; the flag enters no figure.

The close-check, B2b-r3

validate.py B2 reported:

stage B2:
  leg: check (3 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-3: 15 readers, 150 return lines
  author items 50, gold items 40, rounds scored 3, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

ERROR  _fleet_raw/B2/round-3: a return on acecombat/t05 is a bag and names no also_present; rule 0 keeps every theme beyond the one placed, each with its own concepts  [4 lines with this shape; first: r3.jsonl line 6]
warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

4 errors (1 distinct shapes), 443 warnings

The 4 errors are the four bag flags of QB2-013. J had not answered when the leg closed. I write no waiver without J's word, so the close-check refuses this close. The leg reopens on J's answer: with a waiver, I write the four lines into return_waivers.jsonl and close again.

J's answers (13:47 Berlin), and the close

QB2-012. No round 4. A freeze leg of its own does three things: the 443 gate-pair confirmations, the cluster reads for T3-002, T3-033 and T3-038, and any sentence fix to that cluster. A fix made there is tested only by the gold round in B2c. My assumption was that rounds stop and this leg writes no edit. It held, so nothing here changes.

QB2-013. J ruled yes to both parts.

The also_present bound (J, 13:47). In round 3 some bag returns listed up to 85 themes. RETURN-B2.md now says also_present names "twenty themes at most", each with at least three concepts of its own. It says twenty is a bound, not a goal. The validator and fleet.py apply the bound only where that exact phrase stands. They refuse a return with more than twenty themes, or with a theme that has fewer than three concepts. Returns already kept in rounds 1 to 3 are scored as given. B3's return specification does not exist yet. The head carries both rules into it, with the phrase word for word.

validate.py B2 reported, after the waivers:

stage B2:
  leg: check (3 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-3: 15 readers, 150 return lines, 4 waived by J (return_waivers.jsonl)
  author items 50, gold items 40, rounds scored 3, edits 295 (author-error 4), scheme ids 197 (scheme/scheme_current.jsonl)

warn   scheme.jsonl: the pair T3-001|T3-017 touches an edited theme and is not confirmed against its current sentences (mem.py gates T3-001 T3-017 --confirm --reason ...)  [443 lines with this shape; first: T3-001|T3-017]

0 errors (0 distinct shapes), 443 warnings

The 443 warnings are the gate pairs the freeze leg confirms. The leg closes with done.sh B2.

Leg B2b-r3-p2, J's answers checked, 2026-10-12

J's answers to QB2-012 and QB2-013 (13:47 Berlin) came during leg B2b-r3 and were applied there, before its close (section "J's answers (13:47 Berlin), and the close", above). This leg read both answers again with mem.py asks and checked the files.

validate.py B2 reported 0 errors and 443 warnings, the same report as at B2b-r3's close. The 443 warnings are the gate pairs the freeze leg confirms. The leg closes with done.sh B2.

Leg B2b-r3-p3, the freeze, 2026-10-12

J ruled at QB2-012 (13:47 Berlin) that no round 4 runs. The handler made this leg the freeze leg itself (12:25Z). It has four tasks: read the T3-002/T3-033/T3-038 cluster, make any sentence fix the reading calls for, confirm the gate pairs on edited themes, and freeze. A fix made here is tested only by the gold round in B2c.

The cluster read

Round 3's readers split on three items. On signal t01 the three readers chose T3-033, T3-038 and T3-002. On n64 t02 they chose T3-002 with T3-070, T3-002 alone, and T3-038. On 2007scape t04 one reader chose T3-070 and two chose T3-038. I read each item whole:

The readers who left T3-038 took the opening post as "the lead". The three pairs of the cluster used three different measures. T3-002 against T3-033 used "the lead". T3-038's decide_when_both used "the larger part". T3-033 against T3-038 used "the side with more concepts". None covered an item holding all three acts.

The fix (out/_analysis/b2_edits_freeze.py, scheme_edits 296 to 302, scheme-ambiguous, caused_by signal t01, n64 t02, 2007scape t04):

No theme was narrowed. Each theme keeps its members, and the edits only order the cluster.

Rechecks (b2_rechecks_freeze.py): 129 records over 44 items, and none moves. I read whole every item that holds two of the cluster's acts, or coordinates beside a report. The next table lists their counts.

item file concepts by act placement
2007scape t04 author 349 concepts: about 44 build or report, 35 call, 23 give directions, 13 propose T3-038 stays
signal t01 author 2 build or report, 1 opening question T3-038 stays
n64 t02 author 2 build (c0011, c0012), 1 call (c0010) T3-038 stays
Villanova t01 gold 3 build or report, 2 calls T3-038 stays
roosterteeth t03 gold 7 build or report, no call T3-038 stays
cloud9 t12 gold 1 call, 1 failed attempt; a tie, nothing placed T3-002 stays
edboxes t02, mindcrack t03 gold calls lead T3-002 stays
dankmemes t10, dofus t01, kpop t04 gold, author, author proposals lead T3-033 stays
GabrielDropout t03 gold 4 directions, 2 reports; the closest T3-070 stays
predators t04, england t03, furry t10 gold, author, author directions lead T3-070 stays

On furry t10, c0034 ("working on it at (965, 759)") is now a report of where the work stands, and it leaves T3-070's support.

The gate pairs read

out/_analysis/b2_pairs_dump.py wrote each unconfirmed pair on an edited theme side by side to out/_analysis/b2_pairs_read_first.txt. There were 449 pairs:

I read all 449, to the end marker. Two faults were found.

The fixes (out/_analysis/b2_edits_freeze2.py, scheme_edits 303 to 306):

Confirmed. The fixes changed six themes from the round-3 scheme (kept as out/_analysis/scheme_round3.jsonl and .md): T3-002, T3-033, T3-038, T3-070, T3-072 and T3-157. After them, 450 pairs touched an edited theme.

mem.py gates reports 496 pairs, all 496 confirmed and 0 stale. It finds no one-way question, no must_not_show with no question against its target, and no undefined id.

The freeze

out/_analysis/b2_freeze.py wrote two files. families.jsonl (21 families) stands beside them.

The sentences are those after the 306 lines of scheme_edits.jsonl. The sha256 of scheme_final.jsonl is fb8b543a98982d36df299d0494773f1bf9ee481b3966331bffc4d299127be595.

The tier word (QB2-014, open). The rare tier is marked "tier": "rare" (14 themes). The main tier is marked "tier": "common" (183 themes). The B2 close-check accepts only none, rare, common or core, so "main" would fail it 183 times. The C1 check expects main or rare, and it finds moves to rare by looking for "main" in the frozen file. I asked J which word stands, and whether the handler will make the two checks agree. If J rules "main", I supersede scheme_final.jsonl under a new name once the B2 check accepts that word.

Base rates. No theme was narrowed at the freeze, so no theme's base rate falls from these edits. The edits change only which act of the cluster is primary when an item holds several. The gold round shows whether T3-002's and T3-033's rates fall against T3-038's.

The sentence I am least sure a stranger reads as I meant. It is the cluster's new rule, "count the concepts of each: the act with the most concepts of its own is primary". A reader must sort each concept into one act before counting. On 2007scape t04 that sorting is itself a judgement over 349 concepts.

The close-check, B2b-r3-p3

validate.py B2 reported:

stage B2:
  leg: check (3 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-3: 15 readers, 150 return lines, 4 waived by J (return_waivers.jsonl)
  author items 50, gold items 40, rounds scored 3, edits 306 (author-error 4), scheme ids 197 (scheme_final.jsonl), frozen


0 errors (0 distinct shapes), 0 warnings

The leg closes with done.sh B2. B2c builds the gold round and the two stability rounds on the frozen scheme.

Leg B2c, the gold round and the stability rounds built, 2026-10-12

QB2-014 applied: the tier word is "main"

J ruled at 15:06 Berlin that the frozen scheme's main tier is "main", the word of B1's scheme.jsonl and of C1's check. The handler changed checks/stage_B2.py to accept only "main" or "rare" on scheme_final.jsonl. After that change the freeze's file failed the check 183 times.

out/_analysis/b2_freeze_main.py superseded the file:

My assumption was that "common" would stand. J ruled "main", so the file and its header changed, and nothing else rested on the word. The gate check still reads 496 pairs, all confirmed, because the tier is not a gate field.

The three rounds

Stage B2 section 5 asks for three rounds on the frozen scheme. The gold round serves the gold set to fresh readers. The two stability rounds serve the gold set to the same reader arm under two rewordings of the brief that change no test.

out/_analysis/b2_packets_fleet2.py built all three. It is round 3's fleet-id builder with three changes: it reads gold_items.jsonl, it takes the shared pages from scheme_final.jsonl, and it takes the brief from a file. The packets keep J's rules: fleet ids only, at most 15 items and 180,000 bytes of item text a packet, no item split, and codes_by_item in each MANIFEST entry.

One seed, one cut. All three rounds use seed 20261014. The same 40 items fall in the same 3 packets in the same order, so the brief is the only difference between the rounds. The next table lists the packets of each round.

packet in each round items bytes of item text
first 14 14,157
second 14 14,803
third 12 14,137

The briefs. The brief is the packet's opening paragraph.

Each brief tells the reader the same four things in other words: one line per item in the return specification's form, items numbered by position, ids copied exactly, and the packet complete in itself. The item count follows as its own sentence, the same in every round. No brief names a theme, a test or a placement.

Checks. Each round's folder (out/_packets-B2/round-gold/, round-stab-1/, round-stab-2/) holds index.md, G01.md to G21.md, the three packets and MANIFEST.json. out/_analysis/b2_roomid_scan.py found 0 room ids in all 75 files. The gold placements appear nowhere in the packets. The orders are in out/_analysis/b2_order_rgold.json, b2_order_rstab-1.json and b2_order_rstab-2.json.

Return specification. RETURN-B2.md is unchanged since B2b-r3. It carries fleet ids, the three-concept floor for also_present, the rule that a bag with no other theme at the floor is not flagged, and "twenty themes at most".

Manifest. run_manifest.json has three B2c entries (out/_analysis/b2_manifest_b2c.py), 9 entries in all. Each entry records the readers of rounds 2 and 3 (deepseek/deepseek-v4.1-flash, called directly, medium effort, max_tokens 128,000), the seed, the 40 items, every packet's bytes and hash, the frozen scheme's sha256 and the brief.

J runs the three dispatches. The check leg, B2d, scores the gold round against round 3. It writes the stability figure to stability-B2.md and writes pilot_report.md.

The close-check, B2c

validate.py B2 reported:

stage B2:
  leg: check (3 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-3: 15 readers, 150 return lines, 4 waived by J (return_waivers.jsonl)
  author items 50, gold items 40, rounds scored 3, edits 306 (author-error 4), scheme ids 197 (scheme_final.jsonl), frozen


0 errors (0 distinct shapes), 0 warnings

The leg closes with done.sh B2 --cut packets-out.

Leg B2d, the gold round and the stability check scored, 2026-10-12

The dispatches

J ran the three dispatches on the frozen scheme. fleet.py's counts come from each round's DONE record. The next table lists them.

round packets readers valid returns exhausted cost (USD) input tokens output tokens
gold 3 3 a packet 9 0 0.231 288,978 225,436
stab-1 3 3 a packet 9 0 0.178 46,041 211,978
stab-2 3 3 a packet 9 0 0.220 132,118 276,244

validate.py B2 checked the 360 return lines with no error. out/_analysis/b2_translate_fleet.py translated each round to room ids, 120 lines a round with 0 id problems (copies in out/_analysis/b2_r<round>_returns/).

The scores

out/_analysis/b2_score_final.py scored the three rounds. Its outputs are b2_final_score.json and the per-item table b2_gold_items.tsv. The rounds' lines are lines 4 to 6 of pilot_rounds.jsonl, and the gold line is flagged gold (b2_round_lines_final.py). Gold items are not exported to exemplar_candidates.jsonl, because B3 seeds the gold set unannounced. The next table lists the figures.

round fidelity against rechecked primary pairwise alpha items differing
gold 0.624 0.661 0.800 0.818 0.809 14 of 40
stab-1 0.636 0.674 0.800 0.800 0.789 14 of 40
stab-2 0.631 0.669 0.800 0.756 0.743 18 of 40

Stability: 0.807. This is the mean Jaccard of stab-1 readers against stab-2 readers, nine pairs per item. Primary placements matched in 0.853 of those pairs. Alpha over the six stability readers is 0.784. The figure sits level with the pairwise agreement inside each stability round, so the rewording of the brief adds no disagreement (stability-B2.md).

The gold gap. Gold fidelity (0.624) is lower than round 3's (0.682), while gold pairwise (0.818) is higher. On ten gold items the readers keep only my primary of two placements. The gold set was placed at B2a-r1, before round 1 showed this author-error. Primary match is 0.800, as at round 3.

The blind re-placement

The ten hard items were drawn by seed b2d:blind: guatemala t02, harrypotter t08, ice_poseidon t16, ainbowroad t04, parabola t02, ainbowroad t03, megaman t11, anarcho_capitalism t12, dota2 t05 and theblackvoid t09.

The predicted confusions

Of the nineteen pairs in confusions.md, four split readers in any round and three more than once:

The hardest pair, T3-005/T3-021, never split. I had estimated 15 to 20%, and the observed rate is 0 in 64 reader pairs.

The reports

The close-check, B2d

validate.py B2 reported:

stage B2:
  leg: check (6 dispatch folders with DONE)
  _fleet_raw/B2/round-1: 3 readers, 120 return lines
  _fleet_raw/B2/round-2: 15 readers, 150 return lines, 16 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-3: 15 readers, 150 return lines, 4 waived by J (return_waivers.jsonl)
  _fleet_raw/B2/round-gold: 9 readers, 120 return lines
  _fleet_raw/B2/round-stab-1: 9 readers, 120 return lines
  _fleet_raw/B2/round-stab-2: 9 readers, 120 return lines
  author items 50, gold items 40, rounds scored 6, edits 306 (author-error 4), scheme ids 197 (scheme_final.jsonl), frozen


0 errors (0 distinct shapes), 0 warnings

The leg closes with done.sh B2.