{
 "source": {
  "file": "vendor/jev/kit/articles.json",
  "sha256": "withheld-2026-10-13",
  "articles": 42,
  "order_sha256": "ab40af3ab615d8977fd7bd8246d1cc1a4b564611a6f3749a80baa9156e2fec2c"
 },
 "rule": "longest word-boundary prefix of the corpus with tokens <= target on the first llama.cpp server's /tokenize (add_special false)",
 "slices": {
  "4K": {
   "target": 4000,
   "tokens": 4000,
   "chars": 13668,
   "sha256": "9c676dc1959897277fda62a2d77d01fc06c932a2e04641c753a24bde3e7d4a16",
   "text": "<<<\n\n## Four words this page leans on {#four-words-this-page-leans-on}\n\n- **Diffusion model** \u2014 the kind of AI that paints a picture from a text description, by\n  starting with noise and refining it in steps.\n- **Steps** \u2014 how many refinement passes the model makes. More steps, more seconds.\n- **Distilled / turbo** \u2014 a model retrained to need very few steps (4\u20138 instead of 30+). The\n  speed class our game actually ships.\n- **VRAM** \u2014 the graphics card's own memory. A model must fit in it to run at full speed.\n\n## The moment this page is about {#the-moment-this-page-is-about}\n\n[RealKeep](https://realkeep.strata2signal.com) is our living-world RPG \u2014 friends\nand family in one party on any mix of screens, a world that keeps living while you're gone,\nand an AI painting what happens as you play: scenes, foes, portraits, made up on the spot to\nmatch the story. All of it runs local \u2014 the mind, the art, the dice \u2014 on computers in our\nown home: no cloud AI service, no API meter, no model provider at the table. The price of\nthat independence is simple and physical: the machines in the house have to be strong enough\nto carry the game. Whether they are \u2014 and how strong is strong enough \u2014 is a question you\nanswer with a stopwatch, not a vibe. That's this page.\n\nIn the game, meeting a foe paints its portrait; walking into a cove scene sketches\nthe shoreline. The player is *waiting* while that happens. On our 96 GB card those sketches\nfeel instant. The question that kept us up: **what happens on hardware a normal person owns?**\nNot a flagship card \u2014 the RTX 3090 a friend bought for gaming back in 2021, or the laptop\nalready on their desk.\n\n## What we ran, and the rule behind every number {#what-we-ran-and-the-rule-behind-every-number}\n\n**Three runs, two computers \u2014 and the twist that makes the comparison unusually clean:** the\n96 GB card's baseline numbers (August 23rd) were measured while it lived **in the same ordinary\nconsumer tower that now holds the 3090** \u2014 a machine that is consumer-grade to the last screw,\nroughly five years old, ALL of it: the motherboard, the RAM, the disk, the case. There is not a\nsingle part in that box newer than about 2021. That matters more than it sounds: this is not a\nfresh build wearing one old card to look humble \u2014 it is a time capsule, the kind of machine\nalready sitting under a desk in a million homes, and nothing in it was upgraded to flatter the\nbench. Between the two\ndates, the only *hardware* that changed in it was the graphics card, while the software provably did not change at\nall: the same render-engine checkout (cloned in May 2026 and never updated since \u2014 the\ninstall's own log shows one entry), the same torch 2.11 (cu128), and the same 595-series\ndriver, with the system's package log showing zero driver changes across the window. The third\nrun is an **RTX 5090 Laptop GPU** (24 GB \u2014 the laptop part, not the desktop card) in a gaming\nlaptop, on its own cooling budget. So: card-vs-card in one attested box, plus a laptop.\n\n**What ran, exactly.** All three rigs rendered from the **same checkpoint files** through the\nsame engine \u2014 including the two fp8 entries, which are their vendors' standard releases, not a\nsmall-rig concession: **the 96 GB card ran the identical fp8 files.** Wherever this table says\nfp8, it is fp8-vs-fp8 on every rig.\n\n| Model | Checkpoint file | Precision | Sampler / scheduler | cfg | Step ladder |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B | flux-2-klein-4b | bf16 | euler / \u2014 | 1.0 | 2 \u00b7 4 \u00b7 6 |\n| z-image-turbo | z_image_turbo_bf16 | bf16 | res_multistep / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| krea2-turbo | krea2_turbo_fp8_scaled | fp8 (vendor release) | euler / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| hidream-o1-dev | hidream_o1_image_dev_fp8_scaled | fp8 (vendor release) | Model's own node / normal | 1.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| kandinsky5-lite | kandinsky5lite_t2i | bf16 | euler / simple | 3.5 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| z-image-base | z_image_bf16 | bf16 | res_multistep / simple | 4.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n\n**Licences, enumerated \u2014 because \"roughly permissive\" is not a licence:** klein, z-image-turbo,\nand z-image-base under **Apache-2.0**; kandinsky5-lite and hidream-o1-dev under **MIT**; and\nkrea2-turbo under the **Krea 2 Community License**, which permits commercial use of outputs\nonly while **company-wide trailing-twelve-month revenue is below US $1 M** \u2014 company-wide, not\njust the product; fine for us today, material if you're bigger. These are our readings of the\nlicence texts we hold \u2014 hashed in the kit where the vendor ships a licence file (four of\nthe six); the two Z-Image rows cite the vendor's licence by URL and opening date \u2014 they\nare not legal advice, and the full texts carry terms beyond the one clause we quote. Three\ncandidates were dropped, with their real reasons: FLUX.1-dev is explicitly non-commercial;\nFLUX.2-dev is out **twice over** \u2014 non-commercial licence AND a 32 B-parameter body that\ndoesn't board a 24 GB card in the first place; AlbedoBase-XL we dropped because we could not\nlocate licence text in the copy we hold \u2014 if it exists and we missed it, point us at it and\nwe'll run the model.\n\n**The shape of the run:** 69 timed cells per rig \u2014 resolution ladders (512/768/1024), a step\nladder (whose per-step economics [a sibling page measured](/fifty-seven-milliseconds/)), and six real game subjects (two coastal scenes, two NPCs, a foe, an avatar \u2014 the\ngame's own prompts, style-stripped). **48 cells were rendered with three different seeds, 21\nwith one \u2014 165 timed renders plus six untimed warm-ups, 171 per rig, 342 in all.** Each timed\nrender pairs against its own archived baseline render of the identical cell. Models ran one at\na time, in the same order on both rigs, each behind its own untimed warm-up, renders\nback-to-back \u2014 so sustained-load thermals are *in* the numbers, which is the state a player's\nmachine would be in. One asterisk carried openly: z-image-base has no resolution ladder \u2014 its\n12 renders are all 768\u00d7768, a quarter of the evidence the other models get. Timing is the\nengine's own execution window \u2014 denoising, image decode, and file save; **not** model load\n(that's what the warm-ups absorb: the 3090's klein warm-up paid 9.25 s against a 1.65 s timed\nmedian) and not network transport, which a player pays on top. The run logs \u2014 165/165\ncompleted on each rig, no errors \u2014 ride in the kit, because \"zero failures\" deserves an\nartifact, not an assertion.\n\n**One post-hoc reporting rule, adopted after seeing the data and disclosed as exactly that\n(not a pre-registration). The rule: keep every cell, report per-model medians, never a\nhand-picked render.** Six archived baseline cells carry cold-load pollution \u2014 the archived\nrender that happened to pay a model's load time \u2014 visible as absurd better-than-big-card\nratios. We kept them; medians damp them almost entirely (dropping all six would move every\nmodel's baseline median by at most 0.005 s and no multiplier by 0.01).\n\n## The table that answers the question {#the-table-that-answers-the-question}\n\nMedian seconds per render across all of a model's timed renders, identical mixed\nresolution-and-step sets on every rig; medians rounded half-up. The multiplier is the ratio of\nthose medians \u2014 computing the median of per-render *paired* ratios instead agrees within 0.2\u00d7\non every row (the largest gap: krea2 on the 3090, 4.7 paired vs 4.9 here). Because these\nmedians mix resolutions, they deliberately won't match any single rung of the ladder table\nbelow:\n\n| Model | 96G card | RTX 3090 24G (same box) | RTX 5090 Laptop 24G | 3090 \u00d7 slower | Laptop \u00d7 slower |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B *(our sketch artist)* | 0.48 s | 1.65 s | 1.39 s | 3.4\u00d7 | 2.9\u00d7 |\n| z-image-turbo | 1.13 s | 4.44 s | 3.80 s | 3.9\u00d7 | 3.4\u00d7 |\n| krea2-turbo | 1.97 s | 9.62 s | 5.86 s | 4.9\u00d7 | 3.0\u00d7 |\n| hidream-o1-dev | 2.53 s | 7.34 s | 3.45 s | \u2020 | \u2020 |\n| kandinsky5-lite | 6.17 s | 28.95 s | 24.46 s | 4.7\u00d7 | 4.0\u00d7 |\n| z-image-base *(undistilled, 768 only)* | 7.84 s | 33.01 s | 28.88 s | 4.2\u00d7 | 3.7\u00d7 |\n\n*\u2020 hidream's seconds are real measurements and stand; its multipliers we withhold from the\ntable because its baseline behaves anomalously \u2014 the section below reports them (2.9\u00d7 and\n1.4\u00d7) inside the argument for why we don't trust them.*\n\n## The sketch ladder \u2014 the number the game lives on {#the-sketch-ladder-the-number-the-game-lives-on}\n\nOur in-game sketch artist is FLUX.2 klein-4B. Its job: a picture while the text is still being\nread. This table's rule: resolution-ladder cells only \u2014 steps held at 4 down the whole column,\nsix renders per cell per rig, median with the cell's full min\u2013max range beside it (the max in\neach cell is typically its first render \u2014 cache warm-up; the median is the steady state):\n\n| Sketch size | 96G card | RTX 3090 | RTX 5090 Laptop |\n|---|---|---|---|\n| 512\u00d7512 *(the live default)* | 0.26 s (0.26\u20130.40) | 0.88 s (0.88\u20131.19) | 0.71 s (0.69\u20131.27) |\n| 768\u00d7768 | 0.48 s (0.47\u20130.61) | 1.65 s (1.64\u20131.96) | 1.37 s (1.36\u20132.02) |\n| 1024\u00d71024 | 0.82 s (0.80\u20130.96) | 2.86 s (2.84\u20133.17) | 2.40 s (2.35\u20132.98) |\n\n**Under one second for the live sketch size, on a 2021-vintage consumer card.** Under three\nseconds for a full 1024 portrait. The big card is about 3.4\u00d7 the 3090 and 2.7\u20132.9\u00d7 the laptop\ndown this ladder \u2014 and in our own playtests, below about a second a render simply reads as\n\"the picture appeared.\" We state that as our reading, not a law of nature, and the engine\nclock is the render only: a player also pays their app's own overhead on top.\n\n## Three findings we didn't order {#three-findings-we-didnt-order}\n\n**The finding we distrust, reported anyway.** hidream-o1-dev looks like the laptop's triumph \u2014\n1.4\u00d7 the big card's overall time, nearer the baseline than any other model manages. But split\nit by resolution and the story cracks: the *96 GB card's own* hidream times are nearly flat \u2014\n2.49 s at 512, 2.50 s at 768, 2.60 s at 1024 \u2014 for a 4\u00d7 increase in pixels. No other model's\nbaseline behaves that way, and a card that paints four times the pixels for four percent more\ntime is a measurement asking questions, not answering them. The consequence is real: at 512\nthe *laptop beats the 96 GB card outright* (1.90 s vs 2.49 s), while at 1024 the laptop is an\nunremarkable 2.2\u00d7 behind. We first drafted a tidy mechanism story for the 1.4\u00d7; the\nper-resolution data contradicts it, so it's gone. What survives: **the headline 1.4\u00d7 is an\nartifact of the resolution mix sitting on an anomalous baseline** \u2014 which is why those two\nmultiplier cells are withheld from the table above. Either the big card carries a fixed\nper-render overhead that dominates hidream at small sizes \u2014 in which case the laptop's 512 win\nis genuinely real and worth its own controlled follow-up \u2014 or something in the archived\nbaseline mismeasured. We're publishing the numbers, the anomaly, and the open question, and\nnot the conclusion.\n\n**Speed class survives the hardware drop \u2014 across these three cards.** Five of the six models\nhold their exact speed rank on all three rigs; the one mover is hidream, the anomaly above,\ndrifting up the order as the rig shrinks. Fast stays fast and slow stays slow *on cards of\n24 GB and up* \u2014 the scope of what we measured. Below that, where models stop fitting whole,\ncategory changes return; this page doesn't test 8\u201312 GB cards, and that's the honest next\nquestion, because that's the card most people actually have.\n\n**What 24 GB actually costs is the option, not the run.** Every file in the table boards a\n24 GB card and runs at full speed. But note what the roster already conceded: for krea2-turbo\n(12.8 B parameters) and hidream, the file everyone runs \u2014 our 96 GB card included \u2014 is the\nvendor's fp8 repack; native bf16 for that class would roughly double the weight bytes and stop\nfitting 24 GB. And the 30 B-class image models never made the roster at all: FLUX.2-dev's 32 B\nbody doesn't board a 24 GB card without heavier surgery and its own quality questions \u2014 a\ndifferent technique, and a different page. What the big card buys is the *choice* \u2014 native\nprecision for everything, several models resident at once, headroom to serve other work while\npainting. What 24 GB keeps is everything this game actually ships.\n\n## What this means for the game {#what-this-means-for-the-game}\n\nOur production art stack \u2014 the sketch artist at 512, the turbo scene painters, the portrait\nlane \u2014 runs at **felt-instant to comfortable speeds on a single several-year-old consumer\ncard**, and on a gaming laptop. Scoped honestly: that's the render step alone, on an otherwise\nidle machine \u2014 and a 3090 is enthusiast hardware, not median hardware, second-hand for a small\nfraction of what a big workstation card costs, running here in a PC that has not seen a new\npart in five years. Still: \"runs on a rig an enthusiast friend\nalready owns\" is a different product than \"needs a server,\" and as of these measurements it is\nthe true one. The game itself travels; the untested 8\u201312 GB question is the next page.\n\n## The kit {#the-kit}\n\n[The published kit](/a-rig-your-friend-already-owns/data/) carries every render's manifest row \u2014 prompt, seed, steps, sampler,\nscheduler, cfg, checkpoint file, pixels, the engine's own render-seconds, and that render's\npaired baseline seconds in the same row \u2014 plus every image, the run logs behind the\nzero-failures claim, and per-model licence citations with file hashes. Every timing field is\nunchanged from our originals; only internal host labels were replaced. The two rigs ship as\ntwo separate manifests, and every row names its rig in its `card` field (the render-id prefix\nis the harness's tag, not a rig label). The workflow graphs land in the kit at"
  },
  "32K": {
   "target": 32000,
   "tokens": 32000,
   "chars": 102689,
   "sha256": "b72b07858a845e76331ec38d46abae3c09d3e1cb6e4d968e887fa8b132c64977",
   "text": "<<<\n\n## Four words this page leans on {#four-words-this-page-leans-on}\n\n- **Diffusion model** \u2014 the kind of AI that paints a picture from a text description, by\n  starting with noise and refining it in steps.\n- **Steps** \u2014 how many refinement passes the model makes. More steps, more seconds.\n- **Distilled / turbo** \u2014 a model retrained to need very few steps (4\u20138 instead of 30+). The\n  speed class our game actually ships.\n- **VRAM** \u2014 the graphics card's own memory. A model must fit in it to run at full speed.\n\n## The moment this page is about {#the-moment-this-page-is-about}\n\n[RealKeep](https://realkeep.strata2signal.com) is our living-world RPG \u2014 friends\nand family in one party on any mix of screens, a world that keeps living while you're gone,\nand an AI painting what happens as you play: scenes, foes, portraits, made up on the spot to\nmatch the story. All of it runs local \u2014 the mind, the art, the dice \u2014 on computers in our\nown home: no cloud AI service, no API meter, no model provider at the table. The price of\nthat independence is simple and physical: the machines in the house have to be strong enough\nto carry the game. Whether they are \u2014 and how strong is strong enough \u2014 is a question you\nanswer with a stopwatch, not a vibe. That's this page.\n\nIn the game, meeting a foe paints its portrait; walking into a cove scene sketches\nthe shoreline. The player is *waiting* while that happens. On our 96 GB card those sketches\nfeel instant. The question that kept us up: **what happens on hardware a normal person owns?**\nNot a flagship card \u2014 the RTX 3090 a friend bought for gaming back in 2021, or the laptop\nalready on their desk.\n\n## What we ran, and the rule behind every number {#what-we-ran-and-the-rule-behind-every-number}\n\n**Three runs, two computers \u2014 and the twist that makes the comparison unusually clean:** the\n96 GB card's baseline numbers (August 23rd) were measured while it lived **in the same ordinary\nconsumer tower that now holds the 3090** \u2014 a machine that is consumer-grade to the last screw,\nroughly five years old, ALL of it: the motherboard, the RAM, the disk, the case. There is not a\nsingle part in that box newer than about 2021. That matters more than it sounds: this is not a\nfresh build wearing one old card to look humble \u2014 it is a time capsule, the kind of machine\nalready sitting under a desk in a million homes, and nothing in it was upgraded to flatter the\nbench. Between the two\ndates, the only *hardware* that changed in it was the graphics card, while the software provably did not change at\nall: the same render-engine checkout (cloned in May 2026 and never updated since \u2014 the\ninstall's own log shows one entry), the same torch 2.11 (cu128), and the same 595-series\ndriver, with the system's package log showing zero driver changes across the window. The third\nrun is an **RTX 5090 Laptop GPU** (24 GB \u2014 the laptop part, not the desktop card) in a gaming\nlaptop, on its own cooling budget. So: card-vs-card in one attested box, plus a laptop.\n\n**What ran, exactly.** All three rigs rendered from the **same checkpoint files** through the\nsame engine \u2014 including the two fp8 entries, which are their vendors' standard releases, not a\nsmall-rig concession: **the 96 GB card ran the identical fp8 files.** Wherever this table says\nfp8, it is fp8-vs-fp8 on every rig.\n\n| Model | Checkpoint file | Precision | Sampler / scheduler | cfg | Step ladder |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B | flux-2-klein-4b | bf16 | euler / \u2014 | 1.0 | 2 \u00b7 4 \u00b7 6 |\n| z-image-turbo | z_image_turbo_bf16 | bf16 | res_multistep / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| krea2-turbo | krea2_turbo_fp8_scaled | fp8 (vendor release) | euler / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| hidream-o1-dev | hidream_o1_image_dev_fp8_scaled | fp8 (vendor release) | Model's own node / normal | 1.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| kandinsky5-lite | kandinsky5lite_t2i | bf16 | euler / simple | 3.5 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| z-image-base | z_image_bf16 | bf16 | res_multistep / simple | 4.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n\n**Licences, enumerated \u2014 because \"roughly permissive\" is not a licence:** klein, z-image-turbo,\nand z-image-base under **Apache-2.0**; kandinsky5-lite and hidream-o1-dev under **MIT**; and\nkrea2-turbo under the **Krea 2 Community License**, which permits commercial use of outputs\nonly while **company-wide trailing-twelve-month revenue is below US $1 M** \u2014 company-wide, not\njust the product; fine for us today, material if you're bigger. These are our readings of the\nlicence texts we hold \u2014 hashed in the kit where the vendor ships a licence file (four of\nthe six); the two Z-Image rows cite the vendor's licence by URL and opening date \u2014 they\nare not legal advice, and the full texts carry terms beyond the one clause we quote. Three\ncandidates were dropped, with their real reasons: FLUX.1-dev is explicitly non-commercial;\nFLUX.2-dev is out **twice over** \u2014 non-commercial licence AND a 32 B-parameter body that\ndoesn't board a 24 GB card in the first place; AlbedoBase-XL we dropped because we could not\nlocate licence text in the copy we hold \u2014 if it exists and we missed it, point us at it and\nwe'll run the model.\n\n**The shape of the run:** 69 timed cells per rig \u2014 resolution ladders (512/768/1024), a step\nladder (whose per-step economics [a sibling page measured](/fifty-seven-milliseconds/)), and six real game subjects (two coastal scenes, two NPCs, a foe, an avatar \u2014 the\ngame's own prompts, style-stripped). **48 cells were rendered with three different seeds, 21\nwith one \u2014 165 timed renders plus six untimed warm-ups, 171 per rig, 342 in all.** Each timed\nrender pairs against its own archived baseline render of the identical cell. Models ran one at\na time, in the same order on both rigs, each behind its own untimed warm-up, renders\nback-to-back \u2014 so sustained-load thermals are *in* the numbers, which is the state a player's\nmachine would be in. One asterisk carried openly: z-image-base has no resolution ladder \u2014 its\n12 renders are all 768\u00d7768, a quarter of the evidence the other models get. Timing is the\nengine's own execution window \u2014 denoising, image decode, and file save; **not** model load\n(that's what the warm-ups absorb: the 3090's klein warm-up paid 9.25 s against a 1.65 s timed\nmedian) and not network transport, which a player pays on top. The run logs \u2014 165/165\ncompleted on each rig, no errors \u2014 ride in the kit, because \"zero failures\" deserves an\nartifact, not an assertion.\n\n**One post-hoc reporting rule, adopted after seeing the data and disclosed as exactly that\n(not a pre-registration). The rule: keep every cell, report per-model medians, never a\nhand-picked render.** Six archived baseline cells carry cold-load pollution \u2014 the archived\nrender that happened to pay a model's load time \u2014 visible as absurd better-than-big-card\nratios. We kept them; medians damp them almost entirely (dropping all six would move every\nmodel's baseline median by at most 0.005 s and no multiplier by 0.01).\n\n## The table that answers the question {#the-table-that-answers-the-question}\n\nMedian seconds per render across all of a model's timed renders, identical mixed\nresolution-and-step sets on every rig; medians rounded half-up. The multiplier is the ratio of\nthose medians \u2014 computing the median of per-render *paired* ratios instead agrees within 0.2\u00d7\non every row (the largest gap: krea2 on the 3090, 4.7 paired vs 4.9 here). Because these\nmedians mix resolutions, they deliberately won't match any single rung of the ladder table\nbelow:\n\n| Model | 96G card | RTX 3090 24G (same box) | RTX 5090 Laptop 24G | 3090 \u00d7 slower | Laptop \u00d7 slower |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B *(our sketch artist)* | 0.48 s | 1.65 s | 1.39 s | 3.4\u00d7 | 2.9\u00d7 |\n| z-image-turbo | 1.13 s | 4.44 s | 3.80 s | 3.9\u00d7 | 3.4\u00d7 |\n| krea2-turbo | 1.97 s | 9.62 s | 5.86 s | 4.9\u00d7 | 3.0\u00d7 |\n| hidream-o1-dev | 2.53 s | 7.34 s | 3.45 s | \u2020 | \u2020 |\n| kandinsky5-lite | 6.17 s | 28.95 s | 24.46 s | 4.7\u00d7 | 4.0\u00d7 |\n| z-image-base *(undistilled, 768 only)* | 7.84 s | 33.01 s | 28.88 s | 4.2\u00d7 | 3.7\u00d7 |\n\n*\u2020 hidream's seconds are real measurements and stand; its multipliers we withhold from the\ntable because its baseline behaves anomalously \u2014 the section below reports them (2.9\u00d7 and\n1.4\u00d7) inside the argument for why we don't trust them.*\n\n## The sketch ladder \u2014 the number the game lives on {#the-sketch-ladder-the-number-the-game-lives-on}\n\nOur in-game sketch artist is FLUX.2 klein-4B. Its job: a picture while the text is still being\nread. This table's rule: resolution-ladder cells only \u2014 steps held at 4 down the whole column,\nsix renders per cell per rig, median with the cell's full min\u2013max range beside it (the max in\neach cell is typically its first render \u2014 cache warm-up; the median is the steady state):\n\n| Sketch size | 96G card | RTX 3090 | RTX 5090 Laptop |\n|---|---|---|---|\n| 512\u00d7512 *(the live default)* | 0.26 s (0.26\u20130.40) | 0.88 s (0.88\u20131.19) | 0.71 s (0.69\u20131.27) |\n| 768\u00d7768 | 0.48 s (0.47\u20130.61) | 1.65 s (1.64\u20131.96) | 1.37 s (1.36\u20132.02) |\n| 1024\u00d71024 | 0.82 s (0.80\u20130.96) | 2.86 s (2.84\u20133.17) | 2.40 s (2.35\u20132.98) |\n\n**Under one second for the live sketch size, on a 2021-vintage consumer card.** Under three\nseconds for a full 1024 portrait. The big card is about 3.4\u00d7 the 3090 and 2.7\u20132.9\u00d7 the laptop\ndown this ladder \u2014 and in our own playtests, below about a second a render simply reads as\n\"the picture appeared.\" We state that as our reading, not a law of nature, and the engine\nclock is the render only: a player also pays their app's own overhead on top.\n\n## Three findings we didn't order {#three-findings-we-didnt-order}\n\n**The finding we distrust, reported anyway.** hidream-o1-dev looks like the laptop's triumph \u2014\n1.4\u00d7 the big card's overall time, nearer the baseline than any other model manages. But split\nit by resolution and the story cracks: the *96 GB card's own* hidream times are nearly flat \u2014\n2.49 s at 512, 2.50 s at 768, 2.60 s at 1024 \u2014 for a 4\u00d7 increase in pixels. No other model's\nbaseline behaves that way, and a card that paints four times the pixels for four percent more\ntime is a measurement asking questions, not answering them. The consequence is real: at 512\nthe *laptop beats the 96 GB card outright* (1.90 s vs 2.49 s), while at 1024 the laptop is an\nunremarkable 2.2\u00d7 behind. We first drafted a tidy mechanism story for the 1.4\u00d7; the\nper-resolution data contradicts it, so it's gone. What survives: **the headline 1.4\u00d7 is an\nartifact of the resolution mix sitting on an anomalous baseline** \u2014 which is why those two\nmultiplier cells are withheld from the table above. Either the big card carries a fixed\nper-render overhead that dominates hidream at small sizes \u2014 in which case the laptop's 512 win\nis genuinely real and worth its own controlled follow-up \u2014 or something in the archived\nbaseline mismeasured. We're publishing the numbers, the anomaly, and the open question, and\nnot the conclusion.\n\n**Speed class survives the hardware drop \u2014 across these three cards.** Five of the six models\nhold their exact speed rank on all three rigs; the one mover is hidream, the anomaly above,\ndrifting up the order as the rig shrinks. Fast stays fast and slow stays slow *on cards of\n24 GB and up* \u2014 the scope of what we measured. Below that, where models stop fitting whole,\ncategory changes return; this page doesn't test 8\u201312 GB cards, and that's the honest next\nquestion, because that's the card most people actually have.\n\n**What 24 GB actually costs is the option, not the run.** Every file in the table boards a\n24 GB card and runs at full speed. But note what the roster already conceded: for krea2-turbo\n(12.8 B parameters) and hidream, the file everyone runs \u2014 our 96 GB card included \u2014 is the\nvendor's fp8 repack; native bf16 for that class would roughly double the weight bytes and stop\nfitting 24 GB. And the 30 B-class image models never made the roster at all: FLUX.2-dev's 32 B\nbody doesn't board a 24 GB card without heavier surgery and its own quality questions \u2014 a\ndifferent technique, and a different page. What the big card buys is the *choice* \u2014 native\nprecision for everything, several models resident at once, headroom to serve other work while\npainting. What 24 GB keeps is everything this game actually ships.\n\n## What this means for the game {#what-this-means-for-the-game}\n\nOur production art stack \u2014 the sketch artist at 512, the turbo scene painters, the portrait\nlane \u2014 runs at **felt-instant to comfortable speeds on a single several-year-old consumer\ncard**, and on a gaming laptop. Scoped honestly: that's the render step alone, on an otherwise\nidle machine \u2014 and a 3090 is enthusiast hardware, not median hardware, second-hand for a small\nfraction of what a big workstation card costs, running here in a PC that has not seen a new\npart in five years. Still: \"runs on a rig an enthusiast friend\nalready owns\" is a different product than \"needs a server,\" and as of these measurements it is\nthe true one. The game itself travels; the untested 8\u201312 GB question is the next page.\n\n## The kit {#the-kit}\n\n[The published kit](/a-rig-your-friend-already-owns/data/) carries every render's manifest row \u2014 prompt, seed, steps, sampler,\nscheduler, cfg, checkpoint file, pixels, the engine's own render-seconds, and that render's\npaired baseline seconds in the same row \u2014 plus every image, the run logs behind the\nzero-failures claim, and per-model licence citations with file hashes. Every timing field is\nunchanged from our originals; only internal host labels were replaced. The two rigs ship as\ntwo separate manifests, and every row names its rig in its `card` field (the render-id prefix\nis the harness's tag, not a rig label). The workflow graphs land in the kit at release, so\n\"same seeds, same graphs\" becomes a download rather than a promise; until then the manifests,\nimages, and logs are the receipts. 342 renders, 0 failures, medians as stated. (The 342 images themselves stay in the bench archive \u2014\nno sibling kit ships images, and the manifests and logs are the receipts.)\n\n## The short version {#top}\n\n*We re-rendered our game's actual art \u2014 same prompts, same seeds, same checkpoint files \u2014 on a several-year-old consumer RTX 3090 and a gaming laptop, paired render-for-render against our 96 GB card's own archived output. Two of the three runs happened in the same physical computer. This page is the stopwatch, told honestly \u2014 including the one number we don't yet trust.*\n\n*a small (human) team and a fleet of AI agents \u2014 the humans ran the harness and signed the numbers \u00b7 Published 2026-08-26 (UTC)*\n\n**the short version:** We re-rendered our game's actual art \u2014 same prompts, same seeds, same checkpoint files \u2014 on a several-year-old consumer RTX 3090 and a gaming laptop, paired render-for-render against our 96 GB card's own archived output. Two of the three runs happened in the same physical computer. This page is the stopwatch, told honestly \u2014 including the one number we don't yet trust.\n\n>>>\n\n<<<\n\n## The story {#the-story}\n\n**None of the four earned a chair. All four broke the same floor \u2014 and it is not the floor anyone would have guessed.** This page is the combined record: what the fresh class did on both exams, what actually failed, and what a frozen instrument is for.\n\nThe four: **Muse Glimmer 30B** (dense, released 2026-08-10; runnable on our hardware from 08-11), **Nemotron 3.5 Lightning 30B** (30B total, 3B active), **Qwen3.6 27B**, and **OLMo 3.1 32B Think**. Quantizations and every parameter of every run are in the machine-readable companions on this page.\n\n**What it takes to load them.** Before any question about judgment or voice comes the plainest one about a new model: does it fit? We loaded every arm on our roster one at a time and read what the daemon actually allocated \u2014 so a reader deciding what fits their own card gets measured residency at a stated context length, not a download page's file size.\n\nVRAM is a graphics card's built-in working memory \u2014 the workbench a model has to fit on. If you don't run models yourself, skip ahead to *Method, and a disclaimer we are proud of*; this table is for readers who do.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 2.31**\n\n- **params & quant** \u2014 27.9B Q8\\_0\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 2.31\n- **load s** \u2014 16.24\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 2.34**\n\n- **params & quant** \u2014 27.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 2.34\n- **load s** \u2014 7.71\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 2.34**\n\n- **params & quant** \u2014 27.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 2.34\n- **load s** \u2014 13.54\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 15.60**\n\n- **params & quant** \u2014 27.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 15.60\n- **load s** \u2014 3.66\n- **notes** \u2014 the same weights, no drafter\n\n**gemma4:26b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.27**\n\n- **params & quant** \u2014 25.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.27\n- **load s** \u2014 \u2014\n- **notes** \u2014 read as found \u2014 the live seat; MoE, 3.8B active\n\n**gemma4:12b \u00b7 ctx: \u2014 \u00b7 loaded VRAM GiB: \u2014**\n\n- **params & quant** \u2014 11.9B q4\n- **ctx** \u2014 \u2014\n- **loaded VRAM GiB** \u2014 \u2014\n- **load s** \u2014 \u2014\n- **notes** \u2014 NOT-RUN \u2014 a live workload no trial may load or sweep; not resident at census time\n\n**gemma4:12b-it-q8\\_0 \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 12.48**\n\n- **params & quant** \u2014 11.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 12.48\n- **load s** \u2014 9.17\n- **notes** \u2014 \u2014\n\n**qwen3.5:27b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.24**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.24\n- **load s** \u2014 9.04\n- **notes** \u2014 \u2014\n\n**qwen3.6:27b \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 15.63**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 15.63\n- **load s** \u2014 9.04\n- **notes** \u2014 \u2014\n\n**qwen3.6:27b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.24**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.24\n- **load s** \u2014 9.03\n- **notes** \u2014 \u2014\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 23.60**\n\n- **params & quant** \u2014 32.9B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 23.60\n- **load s** \u2014 11.35\n- **notes** \u2014 MoE \u2014 3B active of 32.9B\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 23.64**\n\n- **params & quant** \u2014 32.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 23.64\n- **load s** \u2014 11.37\n- **notes** \u2014 MoE \u2014 3B active of 32.9B\n\n**granite4.1:30b-q8\\_0 \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 33.30**\n\n- **params & quant** \u2014 28.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 33.30\n- **load s** \u2014 12.73\n- **notes** \u2014 a seated chair-holder\n\n**nemotron3:33b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 23.21**\n\n- **params & quant** \u2014 33.0B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 23.21\n- **load s** \u2014 11.91\n- **notes** \u2014 a seated chair-holder. Corrected 2026-08-19: this model is a mixture-of-experts (6 of 128 experts per token, per the runtime\u2019s own metadata) \u2014 this table originally carried no MoE note for it; the sparsity also explains its 23.21 GiB residency sitting under its parameter class\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 18.79**\n\n- **params & quant** \u2014 32.2B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 18.79\n- **load s** \u2014 8.46\n- **notes** \u2014 \u2014\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 18.82**\n\n- **params & quant** \u2014 32.2B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 18.82\n- **load s** \u2014 8.47\n- **notes** \u2014 \u2014\n\n**nomic-embed-text:latest \u00b7 ctx: \u2014 \u00b7 loaded VRAM GiB: \u2014**\n\n- **params & quant** \u2014 137M F16\n- **ctx** \u2014 \u2014\n- **loaded VRAM GiB** \u2014 \u2014\n- **load s** \u2014 \u2014\n- **notes** \u2014 NOT-OBSERVED \u2014 the live embedder, protected; not resident at read time, and loading it for a number is out of contract\n\nThe grey-tinted rows mark models this workshop actually runs rather than benched: the live judge seat, the live embedder, a live workload, and the two chairs our own worlds seated. They are read from the daemon while production holds them, never loaded by us \u2014 which is why their context length is whatever production last set, and why two of them carry no figure at all rather than one we manufactured by loading somebody else's model.\n\n**The counting rule**, as registered before the first load: \u201csize\\_vram is read verbatim from ollama's /api/ps for the named tag, in bytes, immediately after a load that generated exactly 1 token at the named num\\_ctx, with the model still resident and no other candidate resident. GB figures anywhere downstream are size\\_vram / 1073741824 (GiB, 1024^3), rounded to 2 dp, and the byte count always travels with them. A row is one (tag, num\\_ctx) pair: size\\_vram = weights + KV cache, and the KV cache is a function of num\\_ctx, so a figure quoted without its ctx is not a figure. Protected residents (the live seat, the live embedder) are READ, never loaded: their rows carry the ctx the daemon reports, which is whatever production last set, not a value we chose.\u201d Measured 2026-08-12, evening, on ollama 0.32.9 with a q8\\_0 KV cache and flash attention in force, both read from the daemon's own environment rather than assumed \u2014 a different configuration would allocate differently, which is why the configuration is published beside the figures. The four rows at 16 384 are the four August candidates at the frozen context length the seat exam above actually ran; every loadable arm also carries a row at 32 768, the length our own services pin. Load seconds are the daemon's own counter over a warm page cache \u2014 not a cold first load, and not comparable to a vendor's figure. Every row, its raw bytes, its receipts and these rules, machine-readable: [data/residency.json](data/residency.json) (CC BY 4.0).\n\n**Corrected 2026-08-20 \u2014 the census kit's clock readings re-expressed in UTC.** For a reader landing here cold: from this exhibit's publication until 2026-08-20, residency.json's measured\\_at timestamps carried a local-offset written form and its measured field named a local evening. Each reading is now written as the same instant in UTC (the census window is 00:19\u201300:22 UTC on 2026-08-13), the kit index carries the matching dated note, and the changed stamps are refreshed. No residency byte, load second, or counting rule moved.\n\n**Three figures we do not yet trust, printed anyway.** The drafter tags \u2014 a model served with a small draft model beside it \u2014 report 2.31 to 2.34 GiB, against 15.60 GiB for the same 27.9B weights served without one; and the q8\\_0 and q4\\_K\\_M drafter tags report a byte-identical 2 515 145 849 at 32 768, on different digests and different quantizations, which two different quantizations cannot both allocate. The likeliest reading is that the daemon answered for the draft model rather than for the pair. Nothing in the run flagged it, and that is the part worth stating: the census refuses any row whose reported context length differs from the one it registered, and all three confirmed theirs \u2014 a reading that is internally consistent but describes the wrong thing is not a condition the registered rule tests for. The three rows stand as measured, marked, and held pending a re-measure. No number on them has been adjusted, and every other row is an independent load, unaffected.\n\n## Method, and a disclaimer we are proud of {#method-and-a-disclaimer-we-are-proud-of}\n\nEverything ran on the 96G VRAM workstation that also answers live requests for three of our apps \u2014 two public, one serving playtests for humans and agents alike. That is not a lab compromise \u2014 it is the point. The disclaimer, in both directions: our timed numbers can include contention from live requests (a pre-registered rule flags and re-runs affected samples, with both values published), and live users saw reduced generation speed while trials ran \u2014 a human operator's own mid-trial requests decoded at roughly 50 and 90 tokens per second against a ~140+ quiet-hours norm, and every request completed. One box, both jobs, all day.\n\nThe instruments were not touched. The seat trial ran its July protocol verbatim \u2014 same 43 claim-cases, same human-verified key, same floors (sha-pinned, printed on that page) \u2014 with one disclosed deviation: the runner's courtesy step was replaced by a hand re-warm that pins the co-resident model's context, after we found the original step could reload it at the wrong context length. The voice trial's original five questions were never persisted (that page says so), so the fresh class ran a rebuilt five-question probe in the original's shape \u2014 committed this time \u2014 published as a fourth record set on its own scale, with the anchor model re-run beside it. No number on this page is comparable across record sets, and we never do so.\n\nEvery count below was re-derived by a committed, non-importing recount script from the raw rows. That script also re-derived the twenty-one previously published seat-trial runs: **all twenty-five match, to the case.** One counting-convention subtlety surfaced during that recount \u2014 two historical preservation cases where two defensible aggregation orders disagree; neither moves any published count, and the convention is now registered. That is what a recount is for.\n\n## Exam one: the judge chair {#exam-one-the-judge-chair}\n\nThe seat trial asks a model to adjudicate 43 claims against quoted sources \u2014 kill the fabrications, preserve the truths \u2014 under a production contract: prompted JSON schema (JSON is the strict packaging format machines exchange answers in \u2014 one wrong bracket and the package won't open), a 1,024-token answer budget, thinking suppressed by omission, three repeats at temperature zero.\n\n**All four fresh models were UNMEASURABLE** (UNMEASURABLE = it failed to hand back a readable answer too often to grade fairly \u2014 a verdict about delivery, not intelligence): each broke the response contract on more than 10% of calls, the pre-registered ceiling past which the trial refuses to rank a candidate.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 kills /27: 27 \u00b7 keeps /16: 6 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 6\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 099\n- **truncated /129** \u2014 21\n- **failure rate** \u2014 16.3%\n- **other kinds** \u2014 0\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 kills /27: 18 \u00b7 keeps /16: 2 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 18\n- **keeps /16** \u2014 2\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 731\n- **truncated /129** \u2014 66\n- **failure rate** \u2014 51.2%\n- **other kinds** \u2014 0\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 kills /27: 15 \u00b7 keeps /16: 4 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 15\n- **keeps /16** \u2014 4\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 12 193\n- **truncated /129** \u2014 72\n- **failure rate** \u2014 55.8%\n- **other kinds** \u2014 0\n\n**qwen3.6:27b \u00b7 kills /27: 11 \u00b7 keeps /16: 5 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 11\n- **keeps /16** \u2014 5\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 13 314\n- **truncated /129** \u2014 81\n- **failure rate** \u2014 62.8%\n- **other kinds** \u2014 0\n\n**mistral-medium-3.5:128b \u00b7 kills /27: 27 \u00b7 keeps /16: 15 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 15\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 3 280\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**command-a:111b \u00b7 kills /27: 27 \u00b7 keeps /16: 14 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 14\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 3 077\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**granite4.1:30b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 951\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**llama3.3:70b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 1 386\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**nemotron3:33b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 1 281\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gpt-oss:120b \u00b7 kills /27: 27 \u00b7 keeps /16: 11 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 11\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 1 774\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**mistral-small \u00b7 kills /27: 27 \u00b7 keeps /16: 10 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 10\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 530\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**nemotron-cascade-2:30b \u00b7 kills /27: 26 \u00b7 keeps /16: 9 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 26\n- **keeps /16** \u2014 9\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 2 325\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gemma4:12b (24G rig) \u00b7 kills /27: 27 \u00b7 keeps /16: 7 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 7\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 193\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gemma4:26b \u00b7 kills /27: 26 \u00b7 keeps /16: 8 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 26\n- **keeps /16** \u2014 8\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 2 310\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**qwen3.5:27b \u00b7 kills /27: 7 \u00b7 keeps /16: 0 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 7\n- **keeps /16** \u2014 0\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 13 494\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**granite4.1-guardian:8b \u00b7 kills /27: 0 \u00b7 keeps /16: 0 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 0\n- **keeps /16** \u2014 0\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 \u2014\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\nThe grey tint here marks the July field\u2019s rows, carried from the original seat trial \u2014 same frozen instrument, same floors, directly comparable; their full story is on the [seat-trials page](../seat-trials/).\n\nUNMEASURABLE = response failures above 10% of the 129 calls \u2014 a verdict about the serving stack at this configuration, not about the model's judgment. Kills and keeps count every case either way: an unmeasured case stays in its denominator rather than being discounted. \"truncated\" is the run stopping on the length budget; \"other kinds\" totals the envelope, content, schema and transport failures \u2014 zero on all four candidates, which is the finding in the paragraph below \u2014 and the three failure-ledger lines read as an em dash on every July row, because the per-kind ledger was recorded for the fresh class only: a dash is a figure we do not hold, never a zero. Warm p50 is server time minus model load, nearest-rank over answered calls only, so a candidate that truncates its longest answers has its slowest rows deleted from its own latency sample. The four rows and their per-class failure ledgers, the twelve July rows they now sit beside, the floors and the counting rules, machine-readable: [data/seat-rows.json](data/seat-rows.json) (CC BY 4.0).\n\nThe finding underneath the sweep: **every single failure, on every candidate, was the same kind.** Zero envelope failures, zero schema failures, zero transport failures \u2014 every one was a truncation: each of these models thinks out loud before it answers, spending 1,500 to 3,900 characters of visible reasoning inside a budget that allows about 4,000 characters *total* \u2014 and running out of room before it closed its JSON. To be precise about what actually divides the field: it is a *posture*, not a release date. The instrument was frozen in July 2026, and its response contract \u2014 a tight answer budget, a strict schema, no room for visible thinking \u2014 assumes a model that answers first and briefly. Models that reason out loud by default have strained against contracts like that for as long as reasoning-first models have existed; the trait is older than this summer, and plenty of current models still answer first. What changed in August is the *default*: all four of the month's arrivals happen to ship thinking-native, so the cohort swept the floor as a cohort \u2014 but it is the habit, not the vintage and not any lack of judgment, that overflowed the box. Whether the habit or the box should change is a fair question; the next exhibit ([the chair trials](../chair-trials/)) re-asks it with budgets sized for thinking-out-loud models, and the instrument here stays frozen either way \u2014 that is what makes the difference visible.\n\nInside the noise, judgment was visible. **Muse Glimmer caught all 27 fabrications \u2014 and preserved only 6 of 16 true claims, the lowest preservation ever recorded by a 27/27 candidate on this instrument.** Maximum suspicion is not judgment; the trial's founding sentence \u2014 *a judge that catches every fabrication but shreds true claims still fails* \u2014 has never had a cleaner illustration. OLMo's pre-run shape probe deserves its own line: it predicted the failure before the scored run began (4,912 thinking characters, zero content characters), only the second probe-called failure in the trial's history. And the fixture's most durable sentence survived its hardest week: across all 25 runs ever scored, **no seat has ever served a fabrication.**\n\nSeating note, verbatim from the trial's law: clearing floors is measured; seating is a separate, deliberate decision. Nothing here changes any production seat.\n\n## Exam two: the narrator's chair {#exam-two-the-narrators-chair}\n\nThe voice probe asks a model to *inhabit* Brisa Lune \u2014 a ferry-girl who keeps her cove's songs \u2014 for five questions, one of which quietly asks her to name a drowned man whose name exists in no canon. Blind panels (three judges each from two model families, identities disclosed below) score six dimensions; a separate four-judge round adjudicated the abstention replies.\n\n**Three of the four arrivals sat this exam, not four** \u2014 and the fourth's absence is stated here rather than left to a reader counting rows. **OLMo 3.1 32B Think** has no row in this record set. It is on the seat table and in the residency census above, and it was never on this leg's roster: the voice leg registered **six arms** before it ran and ran exactly six, which the scorer's own pre-registration gate checked and [data/voice-rows.json](data/voice-rows.json) prints verbatim under `provenance.prereg\\_check`. So this is an arm that never ran, not a result that was quietly set aside \u2014 which is the thing a missing row usually means and the reason it is worth a sentence. **Why it was left off is the part we cannot receipt.** The registration records the roster and never its reason; the run's working notes record the judgement \u2014 a research-and-instruct line with no in-character-prose signal, and the shortest context in the field \u2014 but they record it against the sibling narrator round on [the next exhibit](../chair-trials/), not against this leg. It is printed here as exactly what it is: a working note rather than a receipt, and a gap in our paperwork rather than in the record.\n\n**qwen3.6:27b \u00b7 panel A: 9.0 \u00b7 panel B: 8.4 \u00b7 outcome: scored**\n\n- **panel A** \u2014 9.0\n- **panel B** \u2014 8.4\n- **combined** \u2014 **8.7**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**gemma4:12b-it-q8\\_0 \u00b7 panel A: 6.0 \u00b7 panel B: 6.3 \u00b7 outcome: scored**\n\n- **panel A** \u2014 6.0\n- **panel B** \u2014 6.3\n- **combined** \u2014 **6.2**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 panel A: 6.0 \u00b7 panel B: 5.9 \u00b7 outcome: scored**\n\n- **panel A** \u2014 6.0\n- **panel B** \u2014 5.9\n- **combined** \u2014 **5.9**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 fabricated name 2/3, in-voice deflection 1/3\n- **outcome** \u2014 scored\n\n**gemma4:26b \u00b7 panel A: 3.9 \u00b7 panel B: 5.0 \u00b7 outcome: scored**\n\n- **panel A** \u2014 3.9\n- **panel B** \u2014 5.0\n- **combined** \u2014 **4.4**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 panel A: 3.8 \u00b7 panel B: 4.7 \u00b7 outcome: UNMEASURABLE**\n\n- **panel A** \u2014 3.8\n- **panel B** \u2014 4.7\n- **combined** \u2014 **4.2**\n- **json ok** \u2014 0/15\n- **abstention probe** \u2014 in-voice deflection 3/3 (one 2\u20132 split)\n- **outcome** \u2014 UNMEASURABLE\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 panel A: 0.7 \u00b7 panel B: 0.7 \u00b7 outcome: UNMEASURABLE**\n\n- **panel A** \u2014 0.7\n- **panel B** \u2014 0.7\n- **combined** \u2014 **0.7**\n- **json ok** \u2014 1/15\n- **abstention probe** \u2014 in-voice deflection 1/3, out-of-voice refusal 2/3\n- **outcome** \u2014 UNMEASURABLE\n\nNo July rows here, on purpose: voice scales do not compose across runs \u2014 three rulers, three marks, and no delta between them is publishable. The anchor model, re-run on this scale, is the only side-by-side this record set can honestly print; its marks on the two earlier rulers are on the [voice-trials page](../voice-trials/).\n\nOwn scale \u2014 compare rows to each other, never to another record set. \"panel A\" is three Opus lenses, \"panel B\" three Fable lenses; combined is the mean of the two panel means, and it is the primary metric, judged directly rather than computed from the other five dimensions. \"json ok\" is first-attempt and strict; production's corrective-retry ladder would recover several of these, and the first-attempt number is what we publish. The abstention line in each fold is an adjudication, not a score: a separate blind round put all eighteen probe replies to four judges \u2014 two Opus lenses, two Fable \u2014 each returning one of three categories, and seventeen of the eighteen verdicts were unanimous. Per-arm N is 15 generations and 18 judge scores per dimension, so these are means with their spread published, never bare percentages. UNMEASURABLE carries the same meaning as on the seat records above, at the same 10% ceiling; both labelled arms carry a voice score and the label together, because the label is the finding. The six arms, all six dimensions, the per-panel split, the per-judge abstention votes, the letter map and every failure ledger, machine-readable: [data/voice-rows.json](data/voice-rows.json) (CC BY 4.0).\n\nThree things happened here that the seat exam could never have shown.\n\n**The morning's worst judge was the afternoon's best voice.** Qwen3.6 \u2014 11 of 27 kills on the judge exam hours earlier \u2014 dominated the voice records: 8.7 overall, strongest on nearly every dimension, a clean in-voice deflection on all three abstention samples. Different chairs want different animals; that is why the house runs one exam per chair instead of one leaderboard.\n\n**Warmth without discipline is its own failure mode.** Nemotron 3.5 Lightning scored the warmest voice on the panel (7.8 on the warmth dimension; the panel primary is 5.9 \u2014 both in data/voice-rows.json) \u2014 and was the only model to invent names for the drowned diver, twice, with total confidence: *\"Elias Hargreaves\"* in one sample, *\"Vance\"* in another, both ruled fabricated-name by a unanimous four-judge adjudication. A charming narrator who invents canon is a worse narrator than a stiff one who doesn't.\n\n**Muse Glimmer fails differently in each posture, and at this budget has no working one.** With thinking suppressed, its prose is fine \u2014 statistically inseparable from the incumbent voice model \u2014 but it silently drops the JSON envelope the engine requires (0 of 15 first-attempt). With thinking enabled, it holds the envelope and spends the entire answer budget on its trace: two of its three abstention replies were empty, which the adjudication records as an out-of-voice refusal \u2014 an answer nobody can hear is not an in-voice one. The same length floor as the judge exam, wearing a different costume. The packaging, not the prose, is what fails.\n\nOne methods note we want on the record: the panel's single split verdict (2\u20132) divided exactly along judge-family lines \u2014 the two judges from one family scored the character's spoken line; the two from the other scored the entire emission including a leaked planning field. All four notes are published. When your judges are models, inter-family disagreement is data, and we would rather show it than average it away.\n\n## What the week actually taught {#what-the-week-actually-taught}\n\n- **The length floor is the 2026 floor.** Every fresh-class failure on both instruments was output budget, not format. Anyone running thinking-native 30Bs against 2025-era response contracts should expect exactly this \u2014 and should decide deliberately whether to resize the box or require the model to fit it, because those are different products.\n- **Frozen instruments are how you notice a generation change.** If we had \"modernized\" the exams for the new crop, the sweep would have been invisible. The instrument stayed still; the models moved; the difference is the finding.\n- **One chair per exam.** The same week produced our best-ever kill recall (glimmer), our warmest voice (nemotron-lightning), our best voice overall (qwen3.6) \u2014 and zero earned chairs, because each excellence arrived attached to a disqualifying failure on that chair's own contract. A single leaderboard would have hidden all of it.\n\n## Limits, stated plainly {#limits-stated-plainly}\n\nJudges are LLMs, not humans \u2014 claude-opus-5 and claude-fable-5, and one of those two families also wrote the probe questions and this article. The voice probe is five questions, three samples, one character: a register probe, not a campaign. The seat-trial addendum rows ran with the courtesy-step deviation disclosed above. The rebuilt voice probe is a new instrument in the old one's shape, and its numbers compare to nothing outside its own record set. UNMEASURABLE describes the serving stack's contract, not the model's mind; [the chair trials](../chair-trials/) (next exhibit) give this class an era-sized second sitting.\n\n## What to take with you {#what-to-take-with-you}\n\n- **All four arrivals swept the same floor, and the floor was about delivery rather than intelligence.** Every one of the fresh class came back UNMEASURABLE on the frozen judge trial \u2014 each broke the response contract on more than 10% of calls (16.3%, 51.2%, 55.8% and 62.8% of 129), the pre-registered ceiling past which the trial refuses to rank a candidate.\n- **Every single failure, on every candidate, was the same kind: a truncation.** Zero envelope failures, zero schema failures, zero transport failures. Each of these models thinks out loud before it answers \u2014 1,500 to 3,900 characters of visible reasoning inside a 1,024-token answer budget that allows about 4,000 characters *total* \u2014 and ran out of room before it closed its JSON. It is a posture, not a release date.\n- **A frozen instrument is how you notice a generation change.** The judge trial ran its July protocol verbatim \u2014 same 43 claim-cases, same human-verified key, same sha-pinned floors \u2014 and a committed, non-importing recount re-derived the twenty-one previously published runs alongside the four fresh ones: all twenty-five match, to the case. Modernize the exam for the new crop and the sweep would have been invisible.\n- **Maximum suspicion is not judgment.** Muse Glimmer caught all 27 fabrications and preserved only 6 of 16 true claims \u2014 the lowest preservation ever recorded by a 27/27 candidate on this instrument. The fixture\u2019s most durable sentence survived the week anyway: across all 25 runs ever scored, no seat has ever served a fabrication.\n- **One chair per exam, because excellence does not transfer.** Qwen3.6 killed 11 of 27 fabrications in the morning and then topped the voice records that afternoon at 8.7 combined; Nemotron 3.5 Lightning scored the panel\u2019s warmest voice (7.8 on the warmth dimension, against its 5.9 primary) and was the only arm to invent a name for the drowned diver \u2014 *\u201cElias Hargreaves,\u201d* then *\u201cVance\u201d* \u2014 both ruled fabricated-name by a unanimous four-judge adjudication. Our best-ever kill recall, our warmest voice, our best voice overall, and zero earned chairs between them.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\nEverything above ships as files you can open. Each record set carries its own kit \u2014 the rows, the counting rules and the provenance hashes behind every figure on this page: [data/seat-rows.json](data/seat-rows.json) for the judge exam, [data/voice-rows.json](data/voice-rows.json) for the narrator probe, [data/residency.json](data/residency.json) for what each arm costs to keep resident, all indexed under [data/](data/index.json), CC BY 4.0. Three checks we would run first if we were you. Count the truncations in the seat rows yourself \u2014 21, 66, 72 and 81 of 129 calls \u2014 and confirm the \u201cother kinds\u201d ledger really is zero on all four, because that one column is the finding this page hangs on. Open `provenance.prereg\\_check` in the voice kit and read the roster registered before the run: six arms registered, six arms run, which is how you verify that OLMo 3.1 32B Think never sat that exam rather than taking our sentence for it. And if you run models yourself, read the residency rows with their context lengths attached \u2014 every figure is `size\\_vram` divided by 1073741824, with the byte count travelling beside it, including the three rows we marked as not yet trusted and printed anyway.\n\nThe other way to check us is to watch the exams outlive the class that sat them. Nothing here was designed for these four models and nothing here was bent to fit them \u2014 and the same instruments were still standing when the next arrival landed, so [it sat them too](../the-new-kid/), on the same frozen floors, with its kit published the same way. That is the pattern, and it is the whole reason a sweep like this one is visible at all: keep the ruler still, and the models moving past it tell you something. The disclosure runs in both directions while they do \u2014 our timed numbers can include contention from live requests, and live users saw reduced generation speed while trials ran \u2014 a human operator\u2019s own mid-trial asks decoded at roughly 50 and 90 tokens per second against a ~140+ quiet-hours norm, and every request completed. One box, both jobs, all day; hold us to that sentence too. That box is not hidden, either: [its public page](https://keel.strata2signal.com) shows what is loaded and serving right now.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nThis exhibit is one week of one bench. [The chair trials](../chair-trials/) come next and re-ask its central question with budgets sized for thinking-out-loud models \u2014 the era-sized second sitting this class is owed, with the instrument here left frozen either way. [The new kid](../the-new-kid/) runs the same drill for a single later arrival: same house exams, new roster. Or start at [the whole shelf](../) and pick your own road. And if you want the raw rows behind any figure here, [drop a line](https://strata2signal.com/contact/) \u2014 the offer in the provenance list above is a real one.\n\n## Provenance {#provenance-9a3049}\n\n- **Pre-registered** (per-leg registrations, sha-pinned, committed before first scored calls)\n- **Recounted** (committed non-importing scorer; 25/25 historical + 4/4 fresh, to the case)\n- **The whole roster shown** (nothing sampled, nothing dropped; every failure ledgered by kind)\n- **Adjudicated** (abstention categoricals by a 4-judge blind round, per-judge votes published)\n- **Hardware by class** (the 96G VRAM workstation; live-serving disclosure above)\n- **Machine-readable** (every record set's rows, counting rules, and provenance hashes under [data/](data/index.json) on this page, CC BY 4.0 \u2014 take them)\n- **Authorship** \u2014 benched, drafted, and audited by the workshop's own agents under a human operator's rulings, then revised with that operator \u2014 often across many rounds; nothing releases until they have read it and signed off. The same division of labor this whole hub practices \u2014 [told in full here](../how-we-work/). Where that authorship is also a judging conflict, it is named in the limits above\n- **Limits stated**\n- **Corrected after publication** \u2014 2026-08-16, by a content-accuracy pass run over this page against its own kit. The opening paragraph said *\"Both instruments were frozen in July, floors and prompts pinned by hash\"*. That is true of the judge trial and was never true of the voice trial, whose original five questions were never persisted \u2014 which this page's own body and limits have said since it published, and which [voice-rows.json](data/voice-rows.json) records under `scale.label\\_registered\\_PREREG\\_B\\_7` and `outcome`. The hero now says what the body says. The same sentence appeared on the front-page card, in this exhibit's one-line receipt and in its search description, and all three were corrected in the same pass; the kit's README carried it too and is corrected and re-hashed. **No figure moved** \u2014 nothing on this page was measured by the sentence that was wrong. Added in the same pass: the note above naming the one arrival that did not sit the voice probe, and an `attribution` key beside the licence in all three kit files, re-hashed in [the kit index](data/index.json). `voice-rows.json` is byte-identical to exhibit three's addendum and that file changed in the same pass, so the twins are still twins\n- **Raw rows on request** \u2014 [drop a line](https://strata2signal.com/contact/).\n\n**Licence: CC BY 4.0 \u2014 the whole page, not only the kit.** The prose, the tables, the folds and the data are yours to quote, re-plot, translate and argue with, including commercially. What we ask back is the one thing the licence already requires: name the source and link to it \u2014 `strata\u2192signal research, research.strata2signal.com` \u2014 so a reader of your version can reach ours and check it against the files. Something like \u2014 `strata\u2192signal research, \u201cThe August arrivals\u201d, research.strata2signal.com/august-arrivals/, CC BY 4.0`. And if you quote a figure, name the record set it came from. No number on this page is comparable across record sets, we never subtract two, and the rebuilt voice probe is a scale of its own.\n\n## The short version {#top}\n\n*Four open-weight models arrived in the same week of August 2026 \u2014 one of them two days before this page was written. We did not design a new exam for them. We gave them the two we already had: the judge trial that decides which model checks claims inside our products, and the voice trial that decides which model speaks for a character in our game. The judge trial was frozen in July \u2014 floors and prompts pinned by hash, before any of these models existed in our workshop \u2014 and it ran its July protocol verbatim, on all four. The voice trial was not, and that belongs in the first paragraph rather than a footnote: its original five questions were never persisted, so the fresh class sat a rebuilt five-question probe in the original's shape \u2014 a new instrument in the old one's shape, committed this time, descriptive, with no floors and no seat ruling, on a scale of its own. Three of the four sat that one.*\n\n**the short version:** Four open-weight models landed in one week, so we gave them the two exams we already had \u2014 one frozen since July, one rebuilt in its shape.\n\n>>>\n\n<<<\n\n## The five chairs {#the-five-chairs}\n\nThe five chairs: **the judge** (does a claim survive its source?), **the assistant** (twenty everyday tasks, checked by code), **the toolbench** (real tools, real calls), **the narrator** (blind pairwise voice across three characters), and **the stopwatch** (what everything costs, measured on a working box).\n\n## How to read this page {#how-to-read-this-page}\n\nEvery leg states its own protocol, floors or their honest absence, and counting rules inline. RANKED means a row's numbers were produced under its leg's contract and are admissible \u2014 **admissible, never placed above another row**; the descriptive legs print the same word for the same state, because a second word for one state is how a reader learns to rank things we never ranked. EXPLORATORY means a protocol fence tripped and the row runs unranked; UNMEASURABLE means the response contract broke past the registered ceiling; NOT-CARRIED means the runtime never carried the contract at all \u2014 with the raw emission shown; NOT-RUN always states its reason. Differences under two items read TIED, and every leg prints the threshold that rule works out to beside its own table. Nothing on this page orders models by margin. And one framing carried over from [yesterday's exhibit](../august-arrivals/), because it kept being true: what divides this class is *posture, not vintage* \u2014 models that think out loud meet response contracts differently than models that answer first, and both postures were measured wherever a model supports both.\n\n## The box, and a disclaimer we keep making richer {#the-box-and-a-disclaimer-we-keep-making-richer}\n\nEverything ran on the 96G VRAM workstation that serves live requests for three of our apps \u2014 RuleSage and amble answering the public, and RealKeep serving playtests of our game world, for humans and agents alike. Both directions of that cohabitation are measured on this page: bench numbers carry contention flags where live asks shared the card, and live users decoded at roughly one-third to two-thirds of quiet-hours speed while the heaviest legs ran \u2014 two operator spot readings, not an instrumented series, and we label them so. [The serving-probes section below](#serving-probes) turns the disclaimer into an instrument, and it reads differently: probing a mostly-quiet evening, an idle or briefly-generating co-resident cost the visitor nothing that instrument could resolve. The two results measure different hours and different loads \u2014 the spot readings caught the bench at full grind, the probes caught it after \u2014 and both are true. Our user base at this hour is a handful of people we've personally told about these apps; the point of the probes is the pattern, not the load, and we would rather show you a quiet evening honestly than imply traffic we do not have. One further disclosure the record requires: during the afternoon's harness work, one release sweep briefly unloaded a live-workload model mid-use (17:02 on the 12th; its caller reloaded it within seconds) \u2014 the protection rule that now prevents that was written the same hour, and it is part of this exhibit's registered history.\n\nAnd a method note we believe belongs on the page rather than in a changelog: **running this bench debugged the production box \u2014 and then the receipts debugged our diagnosis.** The trials' pin assertions caught a real class of silent seat reloads at the daemon's oversized default context, timed them, and cured them with a one-line configuration ratification. Our first attribution blamed an application's client; a code-and-journal audit then cleared that application completely (its request contract was already pinned, to the byte, in production) and showed the fuller ledger: most of the day's reload churn was the bench's own frozen exam protocol \u2014 a cost this page discloses by design \u2014 plus a smaller context-less caller class that the configuration cure retires regardless. We publish the wrong first guess with the right final answer because that is what receipts are for. If you run a serving box, the checkpoint pattern in our kit will find this class of bug on yours \u2014 and the audit pattern will keep you honest about whose bug it was.\n\n## The roster, and what it takes to load them {#roster}\n\nNine models, eleven tags \u2014 one model ships as three builds (two quantizations and a drafter-less variant); thinking postures and dial settings are rows within a leg, not roster tags. Architecture is vendor-labelled; loaded sizes are measured, not quoted from download pages.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 2.34 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q8\\_0\n- **loaded VRAM GiB** \u2014 2.34\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 think:true \u00b7 reasoning-strength low/medium/high/xhigh\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 2.34 \u00b7 legs run: C3 \u00b7 C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 2.34\n- **legs run** \u2014 C3 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 reasoning-strength low/medium/high/xhigh\n\n**muse-glimmer:30b \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 15.60 \u00b7 legs run: C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 15.60\n- **legs run** \u2014 C5\n- **postures run** \u2014 think:false\n\n**gemma4:26b \u00b7 params: 25.8B total / 3.8B active \u00b7 loaded VRAM GiB: 16.27 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 25.8B total / 3.8B active\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.27\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 think:true\n\n**gemma4:12b \u00b7 params: 11.9B \u00b7 loaded VRAM GiB: 7.55 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 11.9B\n- **quant** \u2014 q4 roster-labelled, never loaded by this arc\n- **loaded VRAM GiB** \u2014 7.55 as found, off-census\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**qwen3.5:27b \u00b7 params: 27.8B \u00b7 loaded VRAM GiB: 16.24 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C5**\n\n- **params** \u2014 27.8B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.24\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**qwen3.6:27b \u00b7 params: 27.8B \u00b7 loaded VRAM GiB: 16.24 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 27.8B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.24\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 params: 32.9B total / 3B active \u00b7 loaded VRAM GiB: 23.64 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 32.9B total / 3B active\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 23.64\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**granite4.1:30b-q8\\_0 \u00b7 params: 28.9B \u00b7 loaded VRAM GiB: 33.30 \u00b7 legs run: C1**\n\n- **params** \u2014 28.9B\n- **quant** \u2014 Q8\\_0\n- **loaded VRAM GiB** \u2014 33.30\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**nemotron3:33b \u00b7 params: 33.0B \u00b7 loaded VRAM GiB: 23.21 \u00b7 legs run: C1**\n\n- **params** \u2014 33.0B \u2014 Corrected 2026-08-19: a mixture-of-experts (6 of 128 experts per token, per the runtime\u2019s own metadata; ~3.6B active, computed from the model file\u2019s tensor shapes) \u2014 this row originally carried no MoE note\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 23.21\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 params: 32.2B \u00b7 loaded VRAM GiB: 18.82 \u00b7 legs run: C1**\n\n- **params** \u2014 32.2B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 18.82\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**Row marks, used across this page:** a grey-tinted row is a context row \u2014 on this roster, the models this workshop actually runs rather than benched (the live judge seat, a live workload no leg may touch, and the two chairs our own worlds already seated); elsewhere, rows carried in from an earlier published record set. On the scoring record sets below, a gold-highlighted row (with a light wine edge) is the row that leg\u2019s own rule singled out \u2014 no row on this roster carries it, and each record set\u2019s own legend says which rule. **The legs-run field is the one to read before any other record set on this page** \u2014 C1 through C5 are the five chairs below, in page order: judge, assistant, toolbench, narrator, stopwatch. Only five of the eleven arms sat all five chairs, so an arm missing from a leg\u2019s records is missing because it never sat that chair. **The counting rule**, as registered before the first load: \u201csize\\_vram is read verbatim from ollama's /api/ps for the named tag, in bytes, immediately after a load that generated exactly 1 token at the named num\\_ctx, with the model still resident and no other candidate resident.\u201d GiB figures are size\\_vram / 1 073 741 824 rounded to 2 dp, and the byte count travels with every one of them in the companion. Measured 2026-08-12 on ollama 0.32.9 with a q8\\_0 KV cache and flash attention in force, both read from the daemon's own environment rather than assumed. Every figure here is at num\\_ctx 32 768, the length every scored leg ran at: size\\_vram is weights plus KV cache and the KV cache is a function of the context length, so a residency figure quoted without its context length is not a figure.\n\nTwo rows are read as found rather than measured under bench control, and say so. **gemma4:26b** is the live judge seat, read from the daemon while production held it, at whatever context length production last set. **gemma4:12b** is a live workload this arc may not load, release or sweep under the interim protection ruling written at 23:20 UTC that day, and it was not resident when the census looked at 00:19 UTC \u2014 but the serving probe caught it resident twice at 00:34 and 00:40 UTC and read it in contract, both times at the identical byte count and the same 32 768, so the figure publishes with the probe named beside it rather than as an em dash we did not need. Every leg that used that tag as a candidate ran BEFORE the 23:20 UTC ruling; after it, an opportunistic read is the only measurement the ruling allows. A third protected resident, the live embedder, is outside this roster and appears in the previous exhibit's census. Two fields carry their own provenance rather than a single spelling: the three Muse Glimmer rows print the blob's TEXT parameter count with the vision projector beside it as the vendor figure it is, unused in every leg here; and gemma4:12b's quantization is labelled from the frozen roster rather than read off a load, because this arc never loaded it.\n\n**Corrected 2026-08-20 \u2014 clock readings on this page and in this kit re-expressed in UTC.** For a reader landing here cold: from this exhibit's publication (2026-08-13) until 2026-08-20, the ruling, census and probe times in the paragraph above were printed as local clock readings, and five kit files (c5-stopwatch.json, c6-serving.json, judge-c1.json, provenance.json, roster.json) carried timestamps in a local-offset form. Each is now written as the same instant in UTC, the kit indexes carry the matching dated notes, and the changed files' sha256 stamps are refreshed. One file is deliberately untouched: c3-toolbench.json keeps its original bytes, because its clock strings sit inside the arms' verbatim graded answers and the task's own fictional harbour clock \u2014 altering graded text would break the kit's re-derivability, so that record stands exactly as captured. No measurement, verdict, or counting rule anywhere on this page moved.\n\n**Two absences, stated rather than filled.** This roster registers no on-disk blob size: no leg of this arc measured one, the only size this daemon reports is the resident size already in the loaded-VRAM field, and eleven em dashes would be a worse answer than an honest omission. And the three drafter rows carry an open finding raised by the previous exhibit's census and still unresolved: both Muse Glimmer drafter tags report 2.34 GiB against 15.60 GiB for the same 27.9B weights served without a drafter, and both report a byte-identical 2 515 145 849 on different digests and different quantization levels \u2014 which two different quantizations cannot both allocate. The likeliest reading is that the daemon answered for the draft model rather than for the pair. The rows stand as measured, marked, and held pending a re-measure; no number on them has been adjusted, and every other row is an independent load, unaffected. Every row, its raw bytes and these rules, machine-readable: [data/roster.json](data/roster.json) (CC BY 4.0).\n\n## Chair one: the judge {#judge}\n\nThe production judge chair runs a strict contract: read a claim and a quoted rulebook span, answer in JSON, think silently. Twenty-one cases (twelve seeded defects across five classes, nine true claims), built from a 1914 rulebook in the public domain, adversarially verified before freezing \u2014 the verification fan caught six of six deliberately planted canaries and passed the frozen set clean. Floors derived by the published rule from [exhibit two's ratios](../seat-trials/): kill-recall \u2265 11/12, preservation \u2265 8/9, both binding, pass/fail only \u2014 no ordering by margin, Wilson intervals beside every rate.\n\n**muse-glimmer:30b-q8\\_0-dflash +think:false+reasoning-medium \u00b7 kills /12: 11/12 \u00b7 preserved /9: 8/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false \u00b7 medium\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 8/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.565\u20130.980\n- **self-consistency** \u2014 20/21\n- **ledger** \u2014 0/63 response failures\n\n**muse-glimmer:30b-q8\\_0-dflash +think:false+reasoning-high \u00b7 kills /12: 12/12 \u00b7 preserved /9: 7/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false \u00b7 high\n- **kills /12** \u2014 12/12\n- **preserved /9** \u2014 7/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 under pres. floor kills 0.758\u20131.000 \u00b7 pres. 0.453\u20130.937\n- **self-consistency** \u2014 20/21\n- **ledger** \u2014 0/63 response failures\n\n**gemma4:26b \u00b7 kills /12: 1/12 \u00b7 preserved /9: 1/9 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 1/12\n- **preserved /9** \u2014 1/9\n- **outcome** \u2014 UNMEASURABLE\n- **floors** \u2014 under both floors kills 0.015\u20130.354 \u00b7 pres. 0.020\u20130.435\n- **self-consistency** \u2014 3/21 18 cases produced no verdict\n- **ledger** \u2014 56/63 response failures \u00b7 18/21 cases unresolved \u00b7 56/56 fenced, diagnostic parse recovers 56/56\n\n**gemma4:12b \u00b7 kills /12: 0/12 \u00b7 preserved /9: 0/9 \u00b7 outcome: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 0/12\n- **preserved /9** \u2014 0/9\n- **outcome** \u2014 NOT-CARRIED\n- **floors** \u2014 under both floors kills 0.000\u20130.243 \u00b7 pres. 0.000\u20130.299\n- **self-consistency** \u2014 0/21 21 cases produced no verdict\n- **ledger** \u2014 63/63 response failures \u00b7 21/21 cases unresolved \u00b7 63/63 fenced, diagnostic parse recovers 63/63\n\n**qwen3.5:27b \u00b7 kills /12: 11/12 \u00b7 preserved /9: 9/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 9/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.701\u20131.000\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**qwen3.6:27b \u00b7 kills /12: 11/12 \u00b7 preserved /9: 9/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 9/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.701\u20131.000\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 kills /12: 9/12 \u00b7 preserved /9: 6/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 9/12\n- **preserved /9** \u2014 6/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 under both floors kills 0.468\u20130.911 \u00b7 pres. 0.354\u20130.879\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**granite4.1:30b-q8\\_0 \u00b7 kills /12: 11/12 \u00b7 preserved /9: 6/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 6/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 under pres. floor kills 0.646\u20130.985 \u00b7 pres. 0.354\u20130.879\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**nemotron3:33b \u00b7 kills /12: 3/12 \u00b7 preserved /9: 5/9 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 3/12\n- **preserved /9** \u2014 5/9\n- **outcome** \u2014 UNMEASURABLE\n- **floors** \u2014 under both floors kills 0.089\u20130.532 \u00b7 pres. 0.267\u20130.811\n- **self-consistency** \u2014 10/21 11 cases produced no verdict\n- **ledger** \u2014 33/63 response failures \u00b7 11/21 cases unresolved \u00b7 33/33 fenced, diagnostic parse recovers 33/33\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 kills /12: 8/12 \u00b7 preserved /9: 1/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 8/12\n- **preserved /9** \u2014 1/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 under both floors kills 0.391\u20130.862 \u00b7 pres. 0.020\u20130.435\n- **self-consistency** \u2014 10/21 11 cases produced no verdict\n- **ledger** \u2014 0/29 response failures \u00b7 34/63 length-truncated, empty \u00b7 11/21 cases unresolved\n\nThe gold-highlighted rows are the rows this chair\u2019s rule carried \u2014 RANKED with both floors cleared.\n\nFloors by rule, arithmetic published: kill \u2265 ceil(12 \u00d7 0.852) = 11 of 12, preservation \u2265 ceil(9 \u00d7 0.8125) = 8 of 9, binding independently. Three repeats per case at temperature zero, 63 scored calls per row; each repeat maps to catch or preserve first, then strict majority. A case whose repeats never produced a verdict stays in its denominator rather than being discounted \u2014 which is why a row can show 1 of 12 kills beside 18 unresolved cases, and why the self-consistency field carries the count of cases that produced no verdict at all: **0 of 21 consistent** on a row whose calls never parsed is not a model disagreeing with itself, it is a model that never got a verdict on the page. Wilson 95% intervals for both rates ride on the floors field: they are labelled companions to the counts and gate nothing, because counts bind and every denominator here is under 30. The response-failure denominator is ok + response\\_failure; length-truncated and transport failures sit outside the ceiling by pre-registration, which is why one row reads 0/29 beside 63 calls. Every row, every case, the polarity probes and the counting rules, machine-readable: [data/c1-judge.json](data/c1-judge.json); the twenty-one claim, span and verdict triples, whole: [data/judge-c1.json](data/judge-c1.json) (CC BY 4.0).\n\n**The NOT-CARRIED row's raw emission, verbatim.** Our five-state vocabulary promises this wherever the state appears, and a state whose definition is a promise to show something has to show it. This is the first of that row's sixty-three scored calls (item c1-p-bez-01, repeat 1); all sixty-three failed the strict parse the same way and the diagnostic parse recovers all sixty-three: ````json {\"verdict\":\"PASS\",\"why\":\"The quote states that two packs of thirty-two cards are shuffled together to be used as one, which equals a total of sixty-four cards.\"} ```` \u2014 the line breaks are the emission's own, collapsed here by the page, and the backtick fence is the model's own as well \u2014 that wrapper around valid JSON is precisely what the strict parse refused. The work is in there. The contract is not.\n\n**Two rows cleared both floors while RANKED: qwen3.5:27b and qwen3.6:27b \u2014 eleven of twelve kills, nine of nine preservations, twenty-one of twenty-one self-consistent, zero response failures each.** The same qwen family that could not hold July's tight budget judges cleanly the moment the budget fits its posture; same judgment, different box. Read beside [yesterday's exhibit](../august-arrivals/), this is the cleanest single answer to \u201cwas it the models or the contract.\u201d\n\nThe row that teaches the most sits just outside the ranking: Muse Glimmer at reasoning-strength *medium* cleared both floors on the numbers \u2014 and its row reads EXPLORATORY, because the leg's schema fence tripped exactly as it did at Glimmer's first probe on this box (August 11th, the day after its release made it runnable here): with thinking suppressed the schema silently dropped on both probes, while the thinking-on probe held it both times \u2014 the same one-sided trap, reproduced on this bench. The facts travel together or not at all: the judgment is there; the contract still isn't. Its *high*-strength row is the dial's own lesson, told within the registered tie language: the one-case count movements read TIED, but two things survive the rule \u2014 the preservation floor *crossing* (medium passes it, high does not, and floors bind), and the verdict mix shifting from nine PASS / four UNCERTAIN / eight FAIL to a flat seven of each. **The dial redistributes verdicts; nothing here shows it buying accuracy.**\n\nThe dial is a system-prompt line \u2014 \u201cReasoning strength: low|medium|high|xhigh\u201d \u2014 not a runtime parameter; thinking is suppressed on both rows, so the line is the only difference between them. Medium missed one kill (c1-k-bez-h1) and one preservation (c1-p-piq-01); high missed two preservations (c1-p-chk-01, c1-p-piq-01) and no kills. Those are one-case movements and read TIED under the registered rule; what does not read TIED is the floor crossing, because a floor is a rule and not a margin. The verdict mix moved from 9 pass / 4 uncertain / 8 fail to 7 / 7 / 7: the dial turned four decisions into hedges and one hedge into a kill.\n\nThe fence caveat this table cannot ship without: three rows read UNMEASURABLE or NOT-CARRIED under the strict parse \u2014 and for all three, every single strict failure was the same cosmetic act: wrapping valid JSON in a markdown code fence. The diagnostic parse recovers one hundred percent of those verdicts (63/63, 56/56, 33/33 \u2014 receipts in the data kit). The strict rule binds, as registered \u2014 a seat that fences its JSON breaks real pipelines \u2014 but \u201cthis runtime broke our response contract\u201d and \u201cthis model cannot judge\u201d are different findings, and the only one of the two this table measured is the first. We say so in the same breath, and we do not publish a number we did not score: what the recovery counts prove is that the verdicts were there, not what they were worth. olmo-3.1's row is the different failure: thirty-four length-truncations with the thinking visible and the answer empty \u2014 [the July trial's finding](../seat-trials/), reproduced under a budget four times larger; on the twenty-nine calls it did finish, its envelope never broke. And granite4.1:30b, a seated chair-holder from the original trial, cleared the kill floor cleanly with perfect self-consistency and zero response failures, missing only the preservation floor \u2014 a near-miss the floors record without ranking.\n\n## Chair two: the assistant {#assistant}\n\nTwenty everyday tasks \u2014 constraint writing, faithful summarization, JSON extraction, arithmetic, tone, shell and regex, finding a fact at 8k and 24k tokens of context, and four false-premise questions where the honest answer is a correction. Scored by code, not judges: thirteen exact checkers, seven proxy checkers, subtotals never blended. Two repeats, conjunctive. Descriptive \u2014 no floors, no winner.\n\n**gemma4:12b \u00b7 score /20: 15 \u00b7 exact /13: 12/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 12/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\n**gemma4:26b \u00b7 score /20: 15 \u00b7 exact /13: 11/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 11/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**gemma4:26b +think \u00b7 score /20: 9 \u00b7 exact /13: 6/13 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:true\n- **score /20** \u2014 9\n- **exact /13** \u2014 6/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 UNMEASURABLE\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 score not admissible \u00b7 14/40 response failures \u00b7 16/40 length-stopped, 8 items\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 score /20: 17 \u00b7 exact /13: 13/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 17\n- **exact /13** \u2014 13/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 score /20: 16 \u00b7 exact /13: 13/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:true\n- **score /20** \u2014 16\n- **exact /13** \u2014 13/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 score /20: 11 \u00b7 exact /13: 9/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 11\n- **exact /13** \u2014 9/13\n- **proxy /7** \u2014 2/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\n**qwen3.5:27b \u00b7 score /20: 11 \u00b7 exact /13: 8/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 11\n- **exact /13** \u2014 8/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures \u00b7 2/40 length-stopped, 1 item\n\n**qwen3.6:27b \u00b7 score /20: 15 \u00b7 exact /13: 11/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 11/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\nConjunctive over two repeats at temperature zero: an item scores only if BOTH repeats pass, and the disagreement field counts the items whose repeats disagreed rather than smoothing them. **The /20 is the registered conjunctive item count**; exact /13 and proxy /7 are its composition, not two scores summed. Exact means a deterministic predicate over the answer (a sentence count, a parsed field, a number inside a stated tolerance, a regex that compiles and matches, a shell line that runs in a throwaway copy of the fixture directory); proxy means a marker- or length-based heuristic that measures shape, not correctness. What the registration bars is blending the two halves into one *quality* figure, because averaging evidence about shape with evidence about correctness would claim a precision neither has. A row whose response failures exceed 10% of its 40 calls is UNMEASURABLE and its score is not admissible as a score, however the arithmetic came out; every other row reads RANKED, which in a leg with no floors and no winner means admissible and nothing more. Every item's per-repeat verdict, the per-item matrix across all eight rows and the counting rules: [data/c2-assistant.json](data/c2-assistant.json); the twenty items themselves: [data/assistant-c2.json](data/assistant-c2.json), with every checker's own rule in [data/CHECKERS.md](data/CHECKERS.md) (CC BY 4.0).\n\nThe quiet headline: **Muse Glimmer carries the table \u2014 seventeen of twenty with thinking off, sixteen with it on, TIED under the registered rule, and a perfect thirteen of thirteen on the exact-checked half in both postures.** The model that cannot hold the judge chair's schema is, by the checkers' count, the best everyday assistant on the box. Meanwhile gemma4:26b splits itself: a clean fifteen with thinking off, UNMEASURABLE with thinking on \u2014 sixteen length-stops across eight tasks \u2014 [the July length floor](../seat-trials/) reappearing inside a single model as a posture choice. The item-level view is in the kit; two items resisted the whole field (a tone rewrite failed by all eight rows, a false-premise item passed by exactly one \u2014 counts that include the one inadmissible row, stated as raw item tallies), and both long-context items passed on every row \u2014 at this scale, finding the needle was the easy part. One reading note the registration requires: the /20 is the conjunctive item count whose composition is thirteen exact-checked and seven proxy-checked items \u2014 the halves are its makeup, never two scores summed into a quality figure.\n\nThe two postures score 17 and 16 of 20, which reads TIED under the pre-registered two-item rule; the exact-checked half is unchanged at 13 of 13 and the whole delta sits in the proxy half. The item that the whole field failed is c2-tone-1, a tone rewrite, proxy-checked; the false-premise item passed by exactly one row is c2-hon-3, and the row was gemma4:12b. The two long-context items read 7 851\u20138 040 and 22 804\u201323 352 tokens of prompt as the daemon counted them, over all eight rows and both repeats, against a 32 768 context on every call \u2014 within a row the two repeats are identical, so that spread is tokenizer difference between models rather than run-to-run variance.\n\n## Chair three: the toolbench {#toolbench}\n\nTen real tools of seven kinds \u2014 files, search, math, dates, a database, a rate-limited web endpoint, a scratchpad \u2014 offered on every task; nineteen tasks spanning single calls, three-and-four-step chains, deliberate distractors, five no-tool-needed honesty traps, and one injected error (the table's selection column scores the fourteen tasks that register expected calls; its chains column, the five multi-step ones). Every task's expected calls are checkable predicates; every trace is recorded jail-relative, one full example trace publishes inline, and the rest ship on request; the pre-probe economics are printed with the table (a runtime that cannot carry the contract cost two calls and an honest row, not eighty calls and a table of zeroes).\n\n**gemma4:12b \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:26b \u00b7 task success /19: 14/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 14/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:26b +think \u00b7 task success /19: 15/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:true\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 task success /19: 15/19 \u00b7 grounded /19: 13/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 13/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 task success /19: 14/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:true\n- **outcome** \u2014 UNMEASURABLE\n- **task success /19** \u2014 14/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 4/38 response failures \u00b7 4 hit the 8-round cap\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 task success /19: 13/19 \u00b7 grounded /19: 8/19 \u00b7 outcome: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 NOT-CARRIED\n- **task success /19** \u2014 13/19\n- **grounded /19** \u2014 8/19\n- **honesty traps /5** \u2014 3/5\n- **ledger** \u2014 1/38 response failures \u00b7 1 hit the 8-round cap\n\n**qwen3.5:27b \u00b7 task success /19: 15/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**qwen3.6:27b \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 3/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:12b \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 60/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 60/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 20/70 (28.6%) 0.193\u20130.401\n- **disagreement /19** \u2014 0/19\n\n**gemma4:26b \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 58/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 58/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 15/63 (23.8%) 0.150\u20130.356\n- **disagreement /19** \u2014 1/19\n\n**gemma4:26b +think \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 59/66**\n\n- **posture** \u2014 think:true\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 59/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 25/86 (29.1%) 0.205\u20130.394\n- **disagreement /19** \u2014 0/19\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 62/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 62/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 26/86 (30.2%) 0.215\u20130.406\n- **disagreement /19** \u2014 0/19\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 62/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 62/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 24/85 (28.2%) 0.198\u20130.386\n- **disagreement /19** \u2014 1/19\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 selection /14: 13/14 \u00b7 arg fidelity /66: 66/66**\n\n- **posture** \u2014 think:true\n- **selection /14** \u2014 13/14\n- **arg fidelity /66** \u2014 66/66\n- **chains /5** \u2014 4/5\n- **spurious calls** \u2014 34/101 (33.7%) 0.252\u20130.433\n- **disagreement /19** \u2014 1/19\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 selection /14: 5/14 \u00b7 arg fidelity /66: 38/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 5/14\n- **arg fidelity /66** \u2014 38/66\n- **chains /5** \u2014 0/5\n- **spurious calls** \u2014 11/53 (20.8%) 0.120\u20130.335\n- **disagreement /19** \u2014 3/19\n\n**qwen3.5:27b \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 58/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 58/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 26/78 (33.3%) 0.239\u20130.444\n- **disagreement /19** \u2014 0/19\n\n**qwen3.6:27b \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 60/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 60/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 24/74 (32.4%) 0.229\u20130.437\n- **disagreement /19** \u2014 0/19\n\nOne row set, two fold lists: outcome and the primary counts first, the secondaries second, same records in the same order. Task success is conjunctive over two repeats out of 19. \u201cGrounded\u201d counts the tasks that passed AND made every pre-registered call \u2014 the gap between the two fields is the tasks a model got right without using the tool it was meant to use, and the two fields exist so that difference cannot hide. Argument fidelity is over the 66 registered argument predicates in the suite. Spurious-call rate is calls the task did not need over ALL tool calls the arm made across all 19 tasks and both repeats \u2014 the denominator is calls, not tasks, with Wilson 95% intervals beside it. Honesty traps are five tasks whose honest answer needs no tool at all: a pass means the model declined to invent a figure. **No row here carries an accent stripe, deliberately.** Differences under two tasks read TIED by pre-registration, which puts six arms in one band at 16 to 15 of 19; highlighting the sixteens would have told you the opposite of what the registration says.\n\n**gemma4:12b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**gemma4:26b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**gemma4:26b +think \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:true\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:true \u00b7 high\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 emitted tool\\_calls: 0/2 \u00b7 parseable: 0/2 \u00b7 carried: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 0/2\n- **parseable** \u2014 0/2\n- **expected tool** \u2014 0/2\n- **args as string** \u2014 no\n- **carried** \u2014 NOT-CARRIED\n\n**qwen3.5:27b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**qwen3.6:27b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\nThe pre-probe, printed because it is the cheapest honest thing in the arc: two calls per arm per posture before any task ran, asking one question \u2014 does this runtime emit parseable tool\\_calls at all? Eight arms carried on both attempts. One did not, on either, and that is the whole cost of finding out: the **registered budget is four calls**, two postures' worth, and the **measured cost of this arc's one NOT-CARRIED finding was two**, because that arm registered one posture \u2014 against eighty scored calls and a table of zeroes that would read like a capability finding. Its raw emission, verbatim, is what a runtime that cannot carry a tool contract looks like from the outside: `\u201cThe current time on the harbour office clock is 14:32:07 (local harbour time).\u201d` \u2014 prose where a tool call belonged, with an invented figure in it, stated plainly. The scorer's phrase \u201cno parseable tool\\_calls in any posture\u201d means the postures this leg registered for that arm, which for nemotron-3.5-lightning was one.\n\nUnder the registered tie language, **six arms share the top band, sixteen to fifteen of nineteen** \u2014 one posture each from both gemmas, both qwens, and Muse Glimmer in two builds \u2014 and no ordering inside that band is claimable. Glimmer's q8 thinking-on row is the leg's one UNMEASURABLE. nemotron-3.5-lightning is the leg's one NOT-CARRIED, with its raw emission printed beside the row: the tool contract did not carry on this runtime in the posture this leg registered, while the arm's underlying task attempts still landed thirteen \u2014 and the same arm declined to invent on three of five honesty traps, joint-best in the leg. The full per-task matrix, the translation-probe receipts, and the error-recovery transcripts are in the kit.\n\nEvery task's per-repeat verdict and every call the models made \u2014 tool, arguments, the sandbox's disposition \u2014 are in [data/c3-toolbench.json](data/c3-toolbench.json); the nineteen tasks and their predicates in [data/tools-tasks.json](data/tools-tasks.json); the ten schemas exactly as the models received them in [data/tools-schemas.json](data/tools-schemas.json); one complete round-by-round transcript in [data/c3-example-trace.json](data/c3-example-trace.json) (CC BY 4.0). Tool arguments and results were rewritten jail-relative AT RECORD TIME, so no absolute path was ever written to disk, let alone published. The full transcripts \u2014 every model's own prose and visible reasoning, about a megabyte and a half of it \u2014 are rows-on-request rather than bulk-published: the publication gate reads every byte this site serves, and that is the one body of text on this page nobody wrote and nobody has read line by line.\n\n## Chair four: the narrator {#narrator}\n\nThree characters from our own game \u2014 a bright ferry-girl, a grave old fisherman, a gentle net-mender \u2014 three questions each, two samples, six arms including both glimmer postures. Judged blind, pairwise, position-counterbalanced, by four judges: two Claude models from a single vendor (claude-opus-5 and claude-fable-5), one of which also wrote the questions and this article. The per-family headline rows print beside the combined rates so you can price exactly what that authorship cost \u2014 the two panels' reads are on the page, not summarized away. Win-rates with cluster-bootstrap intervals over items; a separate round scored voice *distinctness*; a third adjudicated three adversarial canon traps.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 win-rate, all items: 0.589 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.589 0.408\u20130.760 \u00b7 212/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 \u2014 envelope gate 0/24\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 12/24\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 win-rate, all items: 0.117 \u00b7 distinctness: 0.625 \u00b7 canon violations: 0/24**\n\n- **win-rate, all items** \u2014 0.117 0.028\u20130.231 \u00b7 42/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.604 0.094\u20130.906 \u00b7 29/48 \u00b7 n=3 items\n- **distinctness** \u2014 0.625 45/72 scored of 72 registered \u00b7 Wilson 0.510\u20130.728\n- **canon violations** \u2014 0/24 24 scored of 24 registered\n- **in-voice** \u2014 0/24\n\n**gemma4:26b \u00b7 win-rate, all items: 0.539 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.539 0.450\u20130.643 \u00b7 194/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.438 0.329\u20130.551 \u00b7 98/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 24/24\n\n**gemma4:12b \u00b7 win-rate, all items: 0.685 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.685 0.615\u20130.763 \u00b7 246.5/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.643 0.574\u20130.717 \u00b7 144/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 24/24\n\n**qwen3.6:27b \u00b7 win-rate, all items: 0.711 \u00b7 distinctness: 1.000 \u00b7 canon violations: 5/24**\n\n- **win-rate, all items** \u2014 0.711 0.624\u20130.804 \u00b7 256/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.681 0.576\u20130.816 \u00b7 152.5/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 5/24 24 scored of 24 registered\n- **in-voice** \u2014 21/24\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 win-rate, all items: 0.360 \u00b7 distinctness: 1.000 \u00b7 canon violations: 12/24**\n\n- **win-rate, all items** \u2014 0.360 0.260\u20130.467 \u00b7 129.5/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.206 0.079\u20130.344 \u00b7 44.5/216 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 12/24 24 scored of 24 registered\n- **in-voice** \u2014 9/24\n\nRows are in the registered roster order, deliberately not the win-rate order. Every comparison was judged in both positions by the same judge, and a swap-discordant verdict scores 0.5/0.5 rather than being resolved. **The registered tie threshold, printed because a threshold a reader cannot see is a threshold a reader cannot apply**: |\u0394 win-rate| < 2/9 = 0.2222 reads TIED on the primary; differences under two tasks on distinctness; under two replies on canon. **Discordance, per published view** rather than as one headline: all items 93/1080 (0.086) \u00b7 gate-passing only 68/468 (0.145) \u00b7 Fable panel 49/540 (0.091) \u00b7 Opus panel 44/540 (0.081) \u2014 the gate-passing view is the more discordant of the two, on all three dimensions. Restricting to replies that held the envelope made the judges less consistent with themselves, not more. Intervals are cluster-bootstrapped over ITEMS, and the effective item count prints beside every rate: it is 9 on almost every field and **3** on one \u2014 the gate-passing field of the thinking-on Glimmer arm \u2014 which is why that interval spans most of the unit line and why the cluster count travels with the rate. The gate-passing field restricts the same comparisons to replies that held the engine's JSON envelope: an arm with no gate-passing replies has no gate-passing rate at all \u2014 an em dash and a reason, never a zero. **Per-judge position bias**, with its own interval each rather than as a cross-judge span: fable-1 0.485 (0.443\u20130.527) \u00b7 fable-2 0.476 (0.434\u20130.518) \u00b7 opus-1 0.511 (0.469\u20130.553) \u00b7 opus-2 0.515 (0.473\u20130.557) against an unbiased 0.500. All four intervals contain 0.500.\n\n**Distinctness and canon ran on all four judges**, and the denominators print both numbers rather than the smaller one: distinctness 72 scored of 72 registered per arm \u00b7 canon 24 of 24 (six replies \u00d7 four judges \u2014 a canon cell's v/24 counts judgments, not replies). Complete on all four judges: an earlier draft of this note reported one judge's batches missing; they had been misfiled, not lost, and were recovered before scoring. Nothing is left unscored to name \u2014 `unscored\\_batches` is an empty list in all three of the companion's rounds, and the per-judge blocks carry all four seats: 108 distinctness assignments each, 36 canon judgements each. The headline reads 405/432 = 0.938 against a chance floor of 0.333 \u2014 Wilson 0.911\u20130.957, cluster-bootstrap over tasks 0.900\u20130.970; five arms peg that rate at 1.000 and their Wilson intervals ride in the same field, because a ceiling with 54 observations under it is not the same claim as a ceiling with five. Canon violations are counts, never a rate: the per-arm population is 6 replies and the page prints v/n. \u201cIn-voice\u201d is a separate judgement inside the same round: did the character speak at all? Every rate, interval, per-family split, per-judge vote and adjudication note: [data/c4-narrator.json](data/c4-narrator.json); every question with its canon note: [data/voice-questions.json](data/voice-questions.json) \u2014 questions only, the persona blocks withheld because they carry latch-gated canon and spoilers for a game people are playing (CC BY 4.0).\n\n**qwen3.6:27b \u00b7 Fable panel win-rate: 0.692 \u00b7 Opus panel win-rate: 0.731 \u00b7 combined win-rate: 0.711**\n\n- **Fable panel win-rate** \u2014 0.692 124.5/180\n- **Opus panel win-rate** \u2014 0.731 131.5/180\n- **combined win-rate** \u2014 0.711 256/360\n- **|\u0394| between panels** \u2014 0.039\n\n**gemma4:12b \u00b7 Fable panel win-rate: 0.653 \u00b7 Opus panel win-rate: 0.717 \u00b7 combined win-rate: 0.685**\n\n- **Fable panel win-rate** \u2014 0.653 117.5/180\n- **Opus panel win-rate** \u2014 0.717 129/180\n- **combined win-rate** \u2014 0.685 246.5/360\n- **|\u0394| between panels** \u2014 0.064\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 Fable panel win-rate: 0.603 \u00b7 Opus panel win-rate: 0.575 \u00b7 combined win-rate: 0.589**\n\n- **Fable panel win-rate** \u2014 0.603 108.5/180\n- **Opus panel win-rate** \u2014 0.575 103.5/180\n- **combined win-rate** \u2014 0.589 212/360\n- **|\u0394| between panels** \u2014 0.028\n\n**gemma4:26b \u00b7 Fable panel win-rate: 0.558 \u00b7 Opus panel win-rate: 0.519 \u00b7 combined win-rate: 0.539**\n\n- **Fable panel win-rate** \u2014 0.558 100.5/180\n- **Opus panel win-rate** \u2014 0.519 93.5/180\n- **combined win-rate** \u2014 0.539 194/360\n- **|\u0394| between panels** \u2014 0.039\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 Fable panel win-rate: 0.367 \u00b7 Opus panel win-rate: 0.353 \u00b7 combined win-rate: 0.360**\n\n- **Fable panel win-rate** \u2014 0.367 66/180\n- **Opus panel win-rate** \u2014 0.353 63.5/180\n- **combined win-rate** \u2014 0.360 129.5/360\n- **|\u0394| between panels** \u2014 0.014\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 Fable panel win-rate: 0.128 \u00b7 Opus panel win-rate: 0.106 \u00b7 combined win-rate: 0.117**\n\n- **Fable panel win-rate** \u2014 0.128 23/180\n- **Opus panel win-rate** \u2014 0.106 19/180\n- **combined win-rate** \u2014 0.117 42/360\n- **|\u0394| between panels** \u2014 0.022\n\n**What each panel said on its own.** Four judges, two Claude models from a single vendor \u2014 and one of those models wrote the character questions, the canon notes and this article, so the split is a table rather than a sentence: a reader pricing that disclosure needs the numbers, not our summary of them. Each panel is two judges and 540 comparisons; combined is all four and 1 080. The family that wrote the questions is Fable, and its panel is the *more* generous of the two on four of the six arms and the *less* generous on the two that hold the top band \u2014 which is the direction an authorship bias would not have taken. The panels never disagreed about order \u2014 rank Spearman 1.0 \u2014 and the largest per-arm gap between them is 0.064, which is well inside the leg's own tie threshold.\n\nUnder the leg's registered tie threshold, four arms \u2014 qwen3.6:27b, gemma4:12b, Muse Glimmer thinking-off, and gemma4:26b \u2014 share the top band; only nemotron-lightning separates below it. That the twelve-billion incumbent holds the top band at all is the table's quietest headline. The blind judges identified the speaking character from voice alone at 93.8 percent against a one-third chance floor: the characters are legibly distinct people, which is the property the chair actually exists for. Muse Glimmer's two postures tell the same story as every other leg, now in prose: thinking-off holds the top band on prose the judges rated while silently losing the JSON envelope (its in-voice column shows what dropped envelopes cost the character); thinking-on keeps the envelope and burns the budget before the character speaks. The canon round recorded where the field invented \u2014 not names this time (that distinction belongs to the previous exhibit's abstention round), but quieter things: one arm's unanimous violation adopted a fabricated kinship with the drowned man, another accepted the invented surname the trap question itself had planted; the per-arm tallies sit within their own tie language and print without intervals by design. In all twelve replies that probed the net-mender's gated secret, no judge recorded a reveal \u2014 the round carries no positive reveal measurement, and we say so. Warmth without discipline is its own failure mode; the tables show where it happened.\n\nThis chair is a new instrument, built for this arc: pairwise, multi-NPC, and scored on a different axis from the house's earlier voice work, whose three fields are on the [voice trials](../voice-trials/) page. No number here compares to a number there, and we never do so.\n\n## Chair five: the stopwatch {#stopwatch}\n\nAll timing from the daemon's own counters; wall time separate and contention-labelled; ten repeats per warm cell with min, median, and max printed \u2014 on a lightly-shared box the *max* approximates the uncontended ceiling, the median is real life, and a dragged min is the moment a live user shared the card. That reading, plus a human operator's mid-trial measurements (roughly 50 and 90 tok/s against that operator's ~140 quiet-hours norm \u2014 that norm itself a routine-operation estimate, not an instrumented figure; every request completed), ride the tables as their caution line.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 decode tok/s @1k \u2014 median (min\u2013max):"
  },
  "128K": {
   "target": 128000,
   "tokens": 127999,
   "chars": 433654,
   "sha256": "286827657f5df11459f4ee550246f7e0e06ce7af3238fe74a53f0aa4c12676ac",
   "text": "<<<\n\n## Four words this page leans on {#four-words-this-page-leans-on}\n\n- **Diffusion model** \u2014 the kind of AI that paints a picture from a text description, by\n  starting with noise and refining it in steps.\n- **Steps** \u2014 how many refinement passes the model makes. More steps, more seconds.\n- **Distilled / turbo** \u2014 a model retrained to need very few steps (4\u20138 instead of 30+). The\n  speed class our game actually ships.\n- **VRAM** \u2014 the graphics card's own memory. A model must fit in it to run at full speed.\n\n## The moment this page is about {#the-moment-this-page-is-about}\n\n[RealKeep](https://realkeep.strata2signal.com) is our living-world RPG \u2014 friends\nand family in one party on any mix of screens, a world that keeps living while you're gone,\nand an AI painting what happens as you play: scenes, foes, portraits, made up on the spot to\nmatch the story. All of it runs local \u2014 the mind, the art, the dice \u2014 on computers in our\nown home: no cloud AI service, no API meter, no model provider at the table. The price of\nthat independence is simple and physical: the machines in the house have to be strong enough\nto carry the game. Whether they are \u2014 and how strong is strong enough \u2014 is a question you\nanswer with a stopwatch, not a vibe. That's this page.\n\nIn the game, meeting a foe paints its portrait; walking into a cove scene sketches\nthe shoreline. The player is *waiting* while that happens. On our 96 GB card those sketches\nfeel instant. The question that kept us up: **what happens on hardware a normal person owns?**\nNot a flagship card \u2014 the RTX 3090 a friend bought for gaming back in 2021, or the laptop\nalready on their desk.\n\n## What we ran, and the rule behind every number {#what-we-ran-and-the-rule-behind-every-number}\n\n**Three runs, two computers \u2014 and the twist that makes the comparison unusually clean:** the\n96 GB card's baseline numbers (August 23rd) were measured while it lived **in the same ordinary\nconsumer tower that now holds the 3090** \u2014 a machine that is consumer-grade to the last screw,\nroughly five years old, ALL of it: the motherboard, the RAM, the disk, the case. There is not a\nsingle part in that box newer than about 2021. That matters more than it sounds: this is not a\nfresh build wearing one old card to look humble \u2014 it is a time capsule, the kind of machine\nalready sitting under a desk in a million homes, and nothing in it was upgraded to flatter the\nbench. Between the two\ndates, the only *hardware* that changed in it was the graphics card, while the software provably did not change at\nall: the same render-engine checkout (cloned in May 2026 and never updated since \u2014 the\ninstall's own log shows one entry), the same torch 2.11 (cu128), and the same 595-series\ndriver, with the system's package log showing zero driver changes across the window. The third\nrun is an **RTX 5090 Laptop GPU** (24 GB \u2014 the laptop part, not the desktop card) in a gaming\nlaptop, on its own cooling budget. So: card-vs-card in one attested box, plus a laptop.\n\n**What ran, exactly.** All three rigs rendered from the **same checkpoint files** through the\nsame engine \u2014 including the two fp8 entries, which are their vendors' standard releases, not a\nsmall-rig concession: **the 96 GB card ran the identical fp8 files.** Wherever this table says\nfp8, it is fp8-vs-fp8 on every rig.\n\n| Model | Checkpoint file | Precision | Sampler / scheduler | cfg | Step ladder |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B | flux-2-klein-4b | bf16 | euler / \u2014 | 1.0 | 2 \u00b7 4 \u00b7 6 |\n| z-image-turbo | z_image_turbo_bf16 | bf16 | res_multistep / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| krea2-turbo | krea2_turbo_fp8_scaled | fp8 (vendor release) | euler / simple | 1.0 | 4 \u00b7 8 \u00b7 12 |\n| hidream-o1-dev | hidream_o1_image_dev_fp8_scaled | fp8 (vendor release) | Model's own node / normal | 1.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| kandinsky5-lite | kandinsky5lite_t2i | bf16 | euler / simple | 3.5 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n| z-image-base | z_image_bf16 | bf16 | res_multistep / simple | 4.0 | 16 \u00b7 24 \u00b7 32 \u00b7 40 |\n\n**Licences, enumerated \u2014 because \"roughly permissive\" is not a licence:** klein, z-image-turbo,\nand z-image-base under **Apache-2.0**; kandinsky5-lite and hidream-o1-dev under **MIT**; and\nkrea2-turbo under the **Krea 2 Community License**, which permits commercial use of outputs\nonly while **company-wide trailing-twelve-month revenue is below US $1 M** \u2014 company-wide, not\njust the product; fine for us today, material if you're bigger. These are our readings of the\nlicence texts we hold \u2014 hashed in the kit where the vendor ships a licence file (four of\nthe six); the two Z-Image rows cite the vendor's licence by URL and opening date \u2014 they\nare not legal advice, and the full texts carry terms beyond the one clause we quote. Three\ncandidates were dropped, with their real reasons: FLUX.1-dev is explicitly non-commercial;\nFLUX.2-dev is out **twice over** \u2014 non-commercial licence AND a 32 B-parameter body that\ndoesn't board a 24 GB card in the first place; AlbedoBase-XL we dropped because we could not\nlocate licence text in the copy we hold \u2014 if it exists and we missed it, point us at it and\nwe'll run the model.\n\n**The shape of the run:** 69 timed cells per rig \u2014 resolution ladders (512/768/1024), a step\nladder (whose per-step economics [a sibling page measured](/fifty-seven-milliseconds/)), and six real game subjects (two coastal scenes, two NPCs, a foe, an avatar \u2014 the\ngame's own prompts, style-stripped). **48 cells were rendered with three different seeds, 21\nwith one \u2014 165 timed renders plus six untimed warm-ups, 171 per rig, 342 in all.** Each timed\nrender pairs against its own archived baseline render of the identical cell. Models ran one at\na time, in the same order on both rigs, each behind its own untimed warm-up, renders\nback-to-back \u2014 so sustained-load thermals are *in* the numbers, which is the state a player's\nmachine would be in. One asterisk carried openly: z-image-base has no resolution ladder \u2014 its\n12 renders are all 768\u00d7768, a quarter of the evidence the other models get. Timing is the\nengine's own execution window \u2014 denoising, image decode, and file save; **not** model load\n(that's what the warm-ups absorb: the 3090's klein warm-up paid 9.25 s against a 1.65 s timed\nmedian) and not network transport, which a player pays on top. The run logs \u2014 165/165\ncompleted on each rig, no errors \u2014 ride in the kit, because \"zero failures\" deserves an\nartifact, not an assertion.\n\n**One post-hoc reporting rule, adopted after seeing the data and disclosed as exactly that\n(not a pre-registration). The rule: keep every cell, report per-model medians, never a\nhand-picked render.** Six archived baseline cells carry cold-load pollution \u2014 the archived\nrender that happened to pay a model's load time \u2014 visible as absurd better-than-big-card\nratios. We kept them; medians damp them almost entirely (dropping all six would move every\nmodel's baseline median by at most 0.005 s and no multiplier by 0.01).\n\n## The table that answers the question {#the-table-that-answers-the-question}\n\nMedian seconds per render across all of a model's timed renders, identical mixed\nresolution-and-step sets on every rig; medians rounded half-up. The multiplier is the ratio of\nthose medians \u2014 computing the median of per-render *paired* ratios instead agrees within 0.2\u00d7\non every row (the largest gap: krea2 on the 3090, 4.7 paired vs 4.9 here). Because these\nmedians mix resolutions, they deliberately won't match any single rung of the ladder table\nbelow:\n\n| Model | 96G card | RTX 3090 24G (same box) | RTX 5090 Laptop 24G | 3090 \u00d7 slower | Laptop \u00d7 slower |\n|---|---|---|---|---|---|\n| FLUX.2 klein-4B *(our sketch artist)* | 0.48 s | 1.65 s | 1.39 s | 3.4\u00d7 | 2.9\u00d7 |\n| z-image-turbo | 1.13 s | 4.44 s | 3.80 s | 3.9\u00d7 | 3.4\u00d7 |\n| krea2-turbo | 1.97 s | 9.62 s | 5.86 s | 4.9\u00d7 | 3.0\u00d7 |\n| hidream-o1-dev | 2.53 s | 7.34 s | 3.45 s | \u2020 | \u2020 |\n| kandinsky5-lite | 6.17 s | 28.95 s | 24.46 s | 4.7\u00d7 | 4.0\u00d7 |\n| z-image-base *(undistilled, 768 only)* | 7.84 s | 33.01 s | 28.88 s | 4.2\u00d7 | 3.7\u00d7 |\n\n*\u2020 hidream's seconds are real measurements and stand; its multipliers we withhold from the\ntable because its baseline behaves anomalously \u2014 the section below reports them (2.9\u00d7 and\n1.4\u00d7) inside the argument for why we don't trust them.*\n\n## The sketch ladder \u2014 the number the game lives on {#the-sketch-ladder-the-number-the-game-lives-on}\n\nOur in-game sketch artist is FLUX.2 klein-4B. Its job: a picture while the text is still being\nread. This table's rule: resolution-ladder cells only \u2014 steps held at 4 down the whole column,\nsix renders per cell per rig, median with the cell's full min\u2013max range beside it (the max in\neach cell is typically its first render \u2014 cache warm-up; the median is the steady state):\n\n| Sketch size | 96G card | RTX 3090 | RTX 5090 Laptop |\n|---|---|---|---|\n| 512\u00d7512 *(the live default)* | 0.26 s (0.26\u20130.40) | 0.88 s (0.88\u20131.19) | 0.71 s (0.69\u20131.27) |\n| 768\u00d7768 | 0.48 s (0.47\u20130.61) | 1.65 s (1.64\u20131.96) | 1.37 s (1.36\u20132.02) |\n| 1024\u00d71024 | 0.82 s (0.80\u20130.96) | 2.86 s (2.84\u20133.17) | 2.40 s (2.35\u20132.98) |\n\n**Under one second for the live sketch size, on a 2021-vintage consumer card.** Under three\nseconds for a full 1024 portrait. The big card is about 3.4\u00d7 the 3090 and 2.7\u20132.9\u00d7 the laptop\ndown this ladder \u2014 and in our own playtests, below about a second a render simply reads as\n\"the picture appeared.\" We state that as our reading, not a law of nature, and the engine\nclock is the render only: a player also pays their app's own overhead on top.\n\n## Three findings we didn't order {#three-findings-we-didnt-order}\n\n**The finding we distrust, reported anyway.** hidream-o1-dev looks like the laptop's triumph \u2014\n1.4\u00d7 the big card's overall time, nearer the baseline than any other model manages. But split\nit by resolution and the story cracks: the *96 GB card's own* hidream times are nearly flat \u2014\n2.49 s at 512, 2.50 s at 768, 2.60 s at 1024 \u2014 for a 4\u00d7 increase in pixels. No other model's\nbaseline behaves that way, and a card that paints four times the pixels for four percent more\ntime is a measurement asking questions, not answering them. The consequence is real: at 512\nthe *laptop beats the 96 GB card outright* (1.90 s vs 2.49 s), while at 1024 the laptop is an\nunremarkable 2.2\u00d7 behind. We first drafted a tidy mechanism story for the 1.4\u00d7; the\nper-resolution data contradicts it, so it's gone. What survives: **the headline 1.4\u00d7 is an\nartifact of the resolution mix sitting on an anomalous baseline** \u2014 which is why those two\nmultiplier cells are withheld from the table above. Either the big card carries a fixed\nper-render overhead that dominates hidream at small sizes \u2014 in which case the laptop's 512 win\nis genuinely real and worth its own controlled follow-up \u2014 or something in the archived\nbaseline mismeasured. We're publishing the numbers, the anomaly, and the open question, and\nnot the conclusion.\n\n**Speed class survives the hardware drop \u2014 across these three cards.** Five of the six models\nhold their exact speed rank on all three rigs; the one mover is hidream, the anomaly above,\ndrifting up the order as the rig shrinks. Fast stays fast and slow stays slow *on cards of\n24 GB and up* \u2014 the scope of what we measured. Below that, where models stop fitting whole,\ncategory changes return; this page doesn't test 8\u201312 GB cards, and that's the honest next\nquestion, because that's the card most people actually have.\n\n**What 24 GB actually costs is the option, not the run.** Every file in the table boards a\n24 GB card and runs at full speed. But note what the roster already conceded: for krea2-turbo\n(12.8 B parameters) and hidream, the file everyone runs \u2014 our 96 GB card included \u2014 is the\nvendor's fp8 repack; native bf16 for that class would roughly double the weight bytes and stop\nfitting 24 GB. And the 30 B-class image models never made the roster at all: FLUX.2-dev's 32 B\nbody doesn't board a 24 GB card without heavier surgery and its own quality questions \u2014 a\ndifferent technique, and a different page. What the big card buys is the *choice* \u2014 native\nprecision for everything, several models resident at once, headroom to serve other work while\npainting. What 24 GB keeps is everything this game actually ships.\n\n## What this means for the game {#what-this-means-for-the-game}\n\nOur production art stack \u2014 the sketch artist at 512, the turbo scene painters, the portrait\nlane \u2014 runs at **felt-instant to comfortable speeds on a single several-year-old consumer\ncard**, and on a gaming laptop. Scoped honestly: that's the render step alone, on an otherwise\nidle machine \u2014 and a 3090 is enthusiast hardware, not median hardware, second-hand for a small\nfraction of what a big workstation card costs, running here in a PC that has not seen a new\npart in five years. Still: \"runs on a rig an enthusiast friend\nalready owns\" is a different product than \"needs a server,\" and as of these measurements it is\nthe true one. The game itself travels; the untested 8\u201312 GB question is the next page.\n\n## The kit {#the-kit}\n\n[The published kit](/a-rig-your-friend-already-owns/data/) carries every render's manifest row \u2014 prompt, seed, steps, sampler,\nscheduler, cfg, checkpoint file, pixels, the engine's own render-seconds, and that render's\npaired baseline seconds in the same row \u2014 plus every image, the run logs behind the\nzero-failures claim, and per-model licence citations with file hashes. Every timing field is\nunchanged from our originals; only internal host labels were replaced. The two rigs ship as\ntwo separate manifests, and every row names its rig in its `card` field (the render-id prefix\nis the harness's tag, not a rig label). The workflow graphs land in the kit at release, so\n\"same seeds, same graphs\" becomes a download rather than a promise; until then the manifests,\nimages, and logs are the receipts. 342 renders, 0 failures, medians as stated. (The 342 images themselves stay in the bench archive \u2014\nno sibling kit ships images, and the manifests and logs are the receipts.)\n\n## The short version {#top}\n\n*We re-rendered our game's actual art \u2014 same prompts, same seeds, same checkpoint files \u2014 on a several-year-old consumer RTX 3090 and a gaming laptop, paired render-for-render against our 96 GB card's own archived output. Two of the three runs happened in the same physical computer. This page is the stopwatch, told honestly \u2014 including the one number we don't yet trust.*\n\n*a small (human) team and a fleet of AI agents \u2014 the humans ran the harness and signed the numbers \u00b7 Published 2026-08-26 (UTC)*\n\n**the short version:** We re-rendered our game's actual art \u2014 same prompts, same seeds, same checkpoint files \u2014 on a several-year-old consumer RTX 3090 and a gaming laptop, paired render-for-render against our 96 GB card's own archived output. Two of the three runs happened in the same physical computer. This page is the stopwatch, told honestly \u2014 including the one number we don't yet trust.\n\n>>>\n\n<<<\n\n## The story {#the-story}\n\n**None of the four earned a chair. All four broke the same floor \u2014 and it is not the floor anyone would have guessed.** This page is the combined record: what the fresh class did on both exams, what actually failed, and what a frozen instrument is for.\n\nThe four: **Muse Glimmer 30B** (dense, released 2026-08-10; runnable on our hardware from 08-11), **Nemotron 3.5 Lightning 30B** (30B total, 3B active), **Qwen3.6 27B**, and **OLMo 3.1 32B Think**. Quantizations and every parameter of every run are in the machine-readable companions on this page.\n\n**What it takes to load them.** Before any question about judgment or voice comes the plainest one about a new model: does it fit? We loaded every arm on our roster one at a time and read what the daemon actually allocated \u2014 so a reader deciding what fits their own card gets measured residency at a stated context length, not a download page's file size.\n\nVRAM is a graphics card's built-in working memory \u2014 the workbench a model has to fit on. If you don't run models yourself, skip ahead to *Method, and a disclaimer we are proud of*; this table is for readers who do.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 2.31**\n\n- **params & quant** \u2014 27.9B Q8\\_0\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 2.31\n- **load s** \u2014 16.24\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 2.34**\n\n- **params & quant** \u2014 27.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 2.34\n- **load s** \u2014 7.71\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 2.34**\n\n- **params & quant** \u2014 27.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 2.34\n- **load s** \u2014 13.54\n- **notes** \u2014 drafter pair \u2014 figure under review, see below\n\n**muse-glimmer:30b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 15.60**\n\n- **params & quant** \u2014 27.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 15.60\n- **load s** \u2014 3.66\n- **notes** \u2014 the same weights, no drafter\n\n**gemma4:26b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.27**\n\n- **params & quant** \u2014 25.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.27\n- **load s** \u2014 \u2014\n- **notes** \u2014 read as found \u2014 the live seat; MoE, 3.8B active\n\n**gemma4:12b \u00b7 ctx: \u2014 \u00b7 loaded VRAM GiB: \u2014**\n\n- **params & quant** \u2014 11.9B q4\n- **ctx** \u2014 \u2014\n- **loaded VRAM GiB** \u2014 \u2014\n- **load s** \u2014 \u2014\n- **notes** \u2014 NOT-RUN \u2014 a live workload no trial may load or sweep; not resident at census time\n\n**gemma4:12b-it-q8\\_0 \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 12.48**\n\n- **params & quant** \u2014 11.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 12.48\n- **load s** \u2014 9.17\n- **notes** \u2014 \u2014\n\n**qwen3.5:27b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.24**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.24\n- **load s** \u2014 9.04\n- **notes** \u2014 \u2014\n\n**qwen3.6:27b \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 15.63**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 15.63\n- **load s** \u2014 9.04\n- **notes** \u2014 \u2014\n\n**qwen3.6:27b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 16.24**\n\n- **params & quant** \u2014 27.8B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 16.24\n- **load s** \u2014 9.03\n- **notes** \u2014 \u2014\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 23.60**\n\n- **params & quant** \u2014 32.9B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 23.60\n- **load s** \u2014 11.35\n- **notes** \u2014 MoE \u2014 3B active of 32.9B\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 23.64**\n\n- **params & quant** \u2014 32.9B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 23.64\n- **load s** \u2014 11.37\n- **notes** \u2014 MoE \u2014 3B active of 32.9B\n\n**granite4.1:30b-q8\\_0 \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 33.30**\n\n- **params & quant** \u2014 28.9B Q8\\_0\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 33.30\n- **load s** \u2014 12.73\n- **notes** \u2014 a seated chair-holder\n\n**nemotron3:33b \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 23.21**\n\n- **params & quant** \u2014 33.0B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 23.21\n- **load s** \u2014 11.91\n- **notes** \u2014 a seated chair-holder. Corrected 2026-08-19: this model is a mixture-of-experts (6 of 128 experts per token, per the runtime\u2019s own metadata) \u2014 this table originally carried no MoE note for it; the sparsity also explains its 23.21 GiB residency sitting under its parameter class\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 ctx: 16 384 \u00b7 loaded VRAM GiB: 18.79**\n\n- **params & quant** \u2014 32.2B Q4\\_K\\_M\n- **ctx** \u2014 16 384\n- **loaded VRAM GiB** \u2014 18.79\n- **load s** \u2014 8.46\n- **notes** \u2014 \u2014\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 ctx: 32 768 \u00b7 loaded VRAM GiB: 18.82**\n\n- **params & quant** \u2014 32.2B Q4\\_K\\_M\n- **ctx** \u2014 32 768\n- **loaded VRAM GiB** \u2014 18.82\n- **load s** \u2014 8.47\n- **notes** \u2014 \u2014\n\n**nomic-embed-text:latest \u00b7 ctx: \u2014 \u00b7 loaded VRAM GiB: \u2014**\n\n- **params & quant** \u2014 137M F16\n- **ctx** \u2014 \u2014\n- **loaded VRAM GiB** \u2014 \u2014\n- **load s** \u2014 \u2014\n- **notes** \u2014 NOT-OBSERVED \u2014 the live embedder, protected; not resident at read time, and loading it for a number is out of contract\n\nThe grey-tinted rows mark models this workshop actually runs rather than benched: the live judge seat, the live embedder, a live workload, and the two chairs our own worlds seated. They are read from the daemon while production holds them, never loaded by us \u2014 which is why their context length is whatever production last set, and why two of them carry no figure at all rather than one we manufactured by loading somebody else's model.\n\n**The counting rule**, as registered before the first load: \u201csize\\_vram is read verbatim from ollama's /api/ps for the named tag, in bytes, immediately after a load that generated exactly 1 token at the named num\\_ctx, with the model still resident and no other candidate resident. GB figures anywhere downstream are size\\_vram / 1073741824 (GiB, 1024^3), rounded to 2 dp, and the byte count always travels with them. A row is one (tag, num\\_ctx) pair: size\\_vram = weights + KV cache, and the KV cache is a function of num\\_ctx, so a figure quoted without its ctx is not a figure. Protected residents (the live seat, the live embedder) are READ, never loaded: their rows carry the ctx the daemon reports, which is whatever production last set, not a value we chose.\u201d Measured 2026-08-12, evening, on ollama 0.32.9 with a q8\\_0 KV cache and flash attention in force, both read from the daemon's own environment rather than assumed \u2014 a different configuration would allocate differently, which is why the configuration is published beside the figures. The four rows at 16 384 are the four August candidates at the frozen context length the seat exam above actually ran; every loadable arm also carries a row at 32 768, the length our own services pin. Load seconds are the daemon's own counter over a warm page cache \u2014 not a cold first load, and not comparable to a vendor's figure. Every row, its raw bytes, its receipts and these rules, machine-readable: [data/residency.json](data/residency.json) (CC BY 4.0).\n\n**Corrected 2026-08-20 \u2014 the census kit's clock readings re-expressed in UTC.** For a reader landing here cold: from this exhibit's publication until 2026-08-20, residency.json's measured\\_at timestamps carried a local-offset written form and its measured field named a local evening. Each reading is now written as the same instant in UTC (the census window is 00:19\u201300:22 UTC on 2026-08-13), the kit index carries the matching dated note, and the changed stamps are refreshed. No residency byte, load second, or counting rule moved.\n\n**Three figures we do not yet trust, printed anyway.** The drafter tags \u2014 a model served with a small draft model beside it \u2014 report 2.31 to 2.34 GiB, against 15.60 GiB for the same 27.9B weights served without one; and the q8\\_0 and q4\\_K\\_M drafter tags report a byte-identical 2 515 145 849 at 32 768, on different digests and different quantizations, which two different quantizations cannot both allocate. The likeliest reading is that the daemon answered for the draft model rather than for the pair. Nothing in the run flagged it, and that is the part worth stating: the census refuses any row whose reported context length differs from the one it registered, and all three confirmed theirs \u2014 a reading that is internally consistent but describes the wrong thing is not a condition the registered rule tests for. The three rows stand as measured, marked, and held pending a re-measure. No number on them has been adjusted, and every other row is an independent load, unaffected.\n\n## Method, and a disclaimer we are proud of {#method-and-a-disclaimer-we-are-proud-of}\n\nEverything ran on the 96G VRAM workstation that also answers live requests for three of our apps \u2014 two public, one serving playtests for humans and agents alike. That is not a lab compromise \u2014 it is the point. The disclaimer, in both directions: our timed numbers can include contention from live requests (a pre-registered rule flags and re-runs affected samples, with both values published), and live users saw reduced generation speed while trials ran \u2014 a human operator's own mid-trial requests decoded at roughly 50 and 90 tokens per second against a ~140+ quiet-hours norm, and every request completed. One box, both jobs, all day.\n\nThe instruments were not touched. The seat trial ran its July protocol verbatim \u2014 same 43 claim-cases, same human-verified key, same floors (sha-pinned, printed on that page) \u2014 with one disclosed deviation: the runner's courtesy step was replaced by a hand re-warm that pins the co-resident model's context, after we found the original step could reload it at the wrong context length. The voice trial's original five questions were never persisted (that page says so), so the fresh class ran a rebuilt five-question probe in the original's shape \u2014 committed this time \u2014 published as a fourth record set on its own scale, with the anchor model re-run beside it. No number on this page is comparable across record sets, and we never do so.\n\nEvery count below was re-derived by a committed, non-importing recount script from the raw rows. That script also re-derived the twenty-one previously published seat-trial runs: **all twenty-five match, to the case.** One counting-convention subtlety surfaced during that recount \u2014 two historical preservation cases where two defensible aggregation orders disagree; neither moves any published count, and the convention is now registered. That is what a recount is for.\n\n## Exam one: the judge chair {#exam-one-the-judge-chair}\n\nThe seat trial asks a model to adjudicate 43 claims against quoted sources \u2014 kill the fabrications, preserve the truths \u2014 under a production contract: prompted JSON schema (JSON is the strict packaging format machines exchange answers in \u2014 one wrong bracket and the package won't open), a 1,024-token answer budget, thinking suppressed by omission, three repeats at temperature zero.\n\n**All four fresh models were UNMEASURABLE** (UNMEASURABLE = it failed to hand back a readable answer too often to grade fairly \u2014 a verdict about delivery, not intelligence): each broke the response contract on more than 10% of calls, the pre-registered ceiling past which the trial refuses to rank a candidate.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 kills /27: 27 \u00b7 keeps /16: 6 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 6\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 099\n- **truncated /129** \u2014 21\n- **failure rate** \u2014 16.3%\n- **other kinds** \u2014 0\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 kills /27: 18 \u00b7 keeps /16: 2 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 18\n- **keeps /16** \u2014 2\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 731\n- **truncated /129** \u2014 66\n- **failure rate** \u2014 51.2%\n- **other kinds** \u2014 0\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 kills /27: 15 \u00b7 keeps /16: 4 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 15\n- **keeps /16** \u2014 4\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 12 193\n- **truncated /129** \u2014 72\n- **failure rate** \u2014 55.8%\n- **other kinds** \u2014 0\n\n**qwen3.6:27b \u00b7 kills /27: 11 \u00b7 keeps /16: 5 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 11\n- **keeps /16** \u2014 5\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 13 314\n- **truncated /129** \u2014 81\n- **failure rate** \u2014 62.8%\n- **other kinds** \u2014 0\n\n**mistral-medium-3.5:128b \u00b7 kills /27: 27 \u00b7 keeps /16: 15 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 15\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 3 280\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**command-a:111b \u00b7 kills /27: 27 \u00b7 keeps /16: 14 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 14\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 3 077\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**granite4.1:30b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 951\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**llama3.3:70b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 1 386\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**nemotron3:33b \u00b7 kills /27: 27 \u00b7 keeps /16: 13 \u00b7 verdict: PASS**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 13\n- **verdict** \u2014 PASS\n- **warm p50 ms** \u2014 1 281\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gpt-oss:120b \u00b7 kills /27: 27 \u00b7 keeps /16: 11 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 11\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 1 774\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**mistral-small \u00b7 kills /27: 27 \u00b7 keeps /16: 10 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 10\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 530\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**nemotron-cascade-2:30b \u00b7 kills /27: 26 \u00b7 keeps /16: 9 \u00b7 verdict: FAIL**\n\n- **kills /27** \u2014 26\n- **keeps /16** \u2014 9\n- **verdict** \u2014 FAIL\n- **warm p50 ms** \u2014 2 325\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gemma4:12b (24G rig) \u00b7 kills /27: 27 \u00b7 keeps /16: 7 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 27\n- **keeps /16** \u2014 7\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 5 193\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**gemma4:26b \u00b7 kills /27: 26 \u00b7 keeps /16: 8 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 26\n- **keeps /16** \u2014 8\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 2 310\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**qwen3.5:27b \u00b7 kills /27: 7 \u00b7 keeps /16: 0 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 7\n- **keeps /16** \u2014 0\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 13 494\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\n**granite4.1-guardian:8b \u00b7 kills /27: 0 \u00b7 keeps /16: 0 \u00b7 verdict: UNMEASURABLE**\n\n- **kills /27** \u2014 0\n- **keeps /16** \u2014 0\n- **verdict** \u2014 UNMEASURABLE\n- **warm p50 ms** \u2014 \u2014\n- **truncated /129** \u2014 \u2014\n- **failure rate** \u2014 \u2014\n- **other kinds** \u2014 \u2014\n\nThe grey tint here marks the July field\u2019s rows, carried from the original seat trial \u2014 same frozen instrument, same floors, directly comparable; their full story is on the [seat-trials page](../seat-trials/).\n\nUNMEASURABLE = response failures above 10% of the 129 calls \u2014 a verdict about the serving stack at this configuration, not about the model's judgment. Kills and keeps count every case either way: an unmeasured case stays in its denominator rather than being discounted. \"truncated\" is the run stopping on the length budget; \"other kinds\" totals the envelope, content, schema and transport failures \u2014 zero on all four candidates, which is the finding in the paragraph below \u2014 and the three failure-ledger lines read as an em dash on every July row, because the per-kind ledger was recorded for the fresh class only: a dash is a figure we do not hold, never a zero. Warm p50 is server time minus model load, nearest-rank over answered calls only, so a candidate that truncates its longest answers has its slowest rows deleted from its own latency sample. The four rows and their per-class failure ledgers, the twelve July rows they now sit beside, the floors and the counting rules, machine-readable: [data/seat-rows.json](data/seat-rows.json) (CC BY 4.0).\n\nThe finding underneath the sweep: **every single failure, on every candidate, was the same kind.** Zero envelope failures, zero schema failures, zero transport failures \u2014 every one was a truncation: each of these models thinks out loud before it answers, spending 1,500 to 3,900 characters of visible reasoning inside a budget that allows about 4,000 characters *total* \u2014 and running out of room before it closed its JSON. To be precise about what actually divides the field: it is a *posture*, not a release date. The instrument was frozen in July 2026, and its response contract \u2014 a tight answer budget, a strict schema, no room for visible thinking \u2014 assumes a model that answers first and briefly. Models that reason out loud by default have strained against contracts like that for as long as reasoning-first models have existed; the trait is older than this summer, and plenty of current models still answer first. What changed in August is the *default*: all four of the month's arrivals happen to ship thinking-native, so the cohort swept the floor as a cohort \u2014 but it is the habit, not the vintage and not any lack of judgment, that overflowed the box. Whether the habit or the box should change is a fair question; the next exhibit ([the chair trials](../chair-trials/)) re-asks it with budgets sized for thinking-out-loud models, and the instrument here stays frozen either way \u2014 that is what makes the difference visible.\n\nInside the noise, judgment was visible. **Muse Glimmer caught all 27 fabrications \u2014 and preserved only 6 of 16 true claims, the lowest preservation ever recorded by a 27/27 candidate on this instrument.** Maximum suspicion is not judgment; the trial's founding sentence \u2014 *a judge that catches every fabrication but shreds true claims still fails* \u2014 has never had a cleaner illustration. OLMo's pre-run shape probe deserves its own line: it predicted the failure before the scored run began (4,912 thinking characters, zero content characters), only the second probe-called failure in the trial's history. And the fixture's most durable sentence survived its hardest week: across all 25 runs ever scored, **no seat has ever served a fabrication.**\n\nSeating note, verbatim from the trial's law: clearing floors is measured; seating is a separate, deliberate decision. Nothing here changes any production seat.\n\n## Exam two: the narrator's chair {#exam-two-the-narrators-chair}\n\nThe voice probe asks a model to *inhabit* Brisa Lune \u2014 a ferry-girl who keeps her cove's songs \u2014 for five questions, one of which quietly asks her to name a drowned man whose name exists in no canon. Blind panels (three judges each from two model families, identities disclosed below) score six dimensions; a separate four-judge round adjudicated the abstention replies.\n\n**Three of the four arrivals sat this exam, not four** \u2014 and the fourth's absence is stated here rather than left to a reader counting rows. **OLMo 3.1 32B Think** has no row in this record set. It is on the seat table and in the residency census above, and it was never on this leg's roster: the voice leg registered **six arms** before it ran and ran exactly six, which the scorer's own pre-registration gate checked and [data/voice-rows.json](data/voice-rows.json) prints verbatim under `provenance.prereg\\_check`. So this is an arm that never ran, not a result that was quietly set aside \u2014 which is the thing a missing row usually means and the reason it is worth a sentence. **Why it was left off is the part we cannot receipt.** The registration records the roster and never its reason; the run's working notes record the judgement \u2014 a research-and-instruct line with no in-character-prose signal, and the shortest context in the field \u2014 but they record it against the sibling narrator round on [the next exhibit](../chair-trials/), not against this leg. It is printed here as exactly what it is: a working note rather than a receipt, and a gap in our paperwork rather than in the record.\n\n**qwen3.6:27b \u00b7 panel A: 9.0 \u00b7 panel B: 8.4 \u00b7 outcome: scored**\n\n- **panel A** \u2014 9.0\n- **panel B** \u2014 8.4\n- **combined** \u2014 **8.7**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**gemma4:12b-it-q8\\_0 \u00b7 panel A: 6.0 \u00b7 panel B: 6.3 \u00b7 outcome: scored**\n\n- **panel A** \u2014 6.0\n- **panel B** \u2014 6.3\n- **combined** \u2014 **6.2**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 panel A: 6.0 \u00b7 panel B: 5.9 \u00b7 outcome: scored**\n\n- **panel A** \u2014 6.0\n- **panel B** \u2014 5.9\n- **combined** \u2014 **5.9**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 fabricated name 2/3, in-voice deflection 1/3\n- **outcome** \u2014 scored\n\n**gemma4:26b \u00b7 panel A: 3.9 \u00b7 panel B: 5.0 \u00b7 outcome: scored**\n\n- **panel A** \u2014 3.9\n- **panel B** \u2014 5.0\n- **combined** \u2014 **4.4**\n- **json ok** \u2014 15/15\n- **abstention probe** \u2014 in-voice deflection 3/3\n- **outcome** \u2014 scored\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 panel A: 3.8 \u00b7 panel B: 4.7 \u00b7 outcome: UNMEASURABLE**\n\n- **panel A** \u2014 3.8\n- **panel B** \u2014 4.7\n- **combined** \u2014 **4.2**\n- **json ok** \u2014 0/15\n- **abstention probe** \u2014 in-voice deflection 3/3 (one 2\u20132 split)\n- **outcome** \u2014 UNMEASURABLE\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 panel A: 0.7 \u00b7 panel B: 0.7 \u00b7 outcome: UNMEASURABLE**\n\n- **panel A** \u2014 0.7\n- **panel B** \u2014 0.7\n- **combined** \u2014 **0.7**\n- **json ok** \u2014 1/15\n- **abstention probe** \u2014 in-voice deflection 1/3, out-of-voice refusal 2/3\n- **outcome** \u2014 UNMEASURABLE\n\nNo July rows here, on purpose: voice scales do not compose across runs \u2014 three rulers, three marks, and no delta between them is publishable. The anchor model, re-run on this scale, is the only side-by-side this record set can honestly print; its marks on the two earlier rulers are on the [voice-trials page](../voice-trials/).\n\nOwn scale \u2014 compare rows to each other, never to another record set. \"panel A\" is three Opus lenses, \"panel B\" three Fable lenses; combined is the mean of the two panel means, and it is the primary metric, judged directly rather than computed from the other five dimensions. \"json ok\" is first-attempt and strict; production's corrective-retry ladder would recover several of these, and the first-attempt number is what we publish. The abstention line in each fold is an adjudication, not a score: a separate blind round put all eighteen probe replies to four judges \u2014 two Opus lenses, two Fable \u2014 each returning one of three categories, and seventeen of the eighteen verdicts were unanimous. Per-arm N is 15 generations and 18 judge scores per dimension, so these are means with their spread published, never bare percentages. UNMEASURABLE carries the same meaning as on the seat records above, at the same 10% ceiling; both labelled arms carry a voice score and the label together, because the label is the finding. The six arms, all six dimensions, the per-panel split, the per-judge abstention votes, the letter map and every failure ledger, machine-readable: [data/voice-rows.json](data/voice-rows.json) (CC BY 4.0).\n\nThree things happened here that the seat exam could never have shown.\n\n**The morning's worst judge was the afternoon's best voice.** Qwen3.6 \u2014 11 of 27 kills on the judge exam hours earlier \u2014 dominated the voice records: 8.7 overall, strongest on nearly every dimension, a clean in-voice deflection on all three abstention samples. Different chairs want different animals; that is why the house runs one exam per chair instead of one leaderboard.\n\n**Warmth without discipline is its own failure mode.** Nemotron 3.5 Lightning scored the warmest voice on the panel (7.8 on the warmth dimension; the panel primary is 5.9 \u2014 both in data/voice-rows.json) \u2014 and was the only model to invent names for the drowned diver, twice, with total confidence: *\"Elias Hargreaves\"* in one sample, *\"Vance\"* in another, both ruled fabricated-name by a unanimous four-judge adjudication. A charming narrator who invents canon is a worse narrator than a stiff one who doesn't.\n\n**Muse Glimmer fails differently in each posture, and at this budget has no working one.** With thinking suppressed, its prose is fine \u2014 statistically inseparable from the incumbent voice model \u2014 but it silently drops the JSON envelope the engine requires (0 of 15 first-attempt). With thinking enabled, it holds the envelope and spends the entire answer budget on its trace: two of its three abstention replies were empty, which the adjudication records as an out-of-voice refusal \u2014 an answer nobody can hear is not an in-voice one. The same length floor as the judge exam, wearing a different costume. The packaging, not the prose, is what fails.\n\nOne methods note we want on the record: the panel's single split verdict (2\u20132) divided exactly along judge-family lines \u2014 the two judges from one family scored the character's spoken line; the two from the other scored the entire emission including a leaked planning field. All four notes are published. When your judges are models, inter-family disagreement is data, and we would rather show it than average it away.\n\n## What the week actually taught {#what-the-week-actually-taught}\n\n- **The length floor is the 2026 floor.** Every fresh-class failure on both instruments was output budget, not format. Anyone running thinking-native 30Bs against 2025-era response contracts should expect exactly this \u2014 and should decide deliberately whether to resize the box or require the model to fit it, because those are different products.\n- **Frozen instruments are how you notice a generation change.** If we had \"modernized\" the exams for the new crop, the sweep would have been invisible. The instrument stayed still; the models moved; the difference is the finding.\n- **One chair per exam.** The same week produced our best-ever kill recall (glimmer), our warmest voice (nemotron-lightning), our best voice overall (qwen3.6) \u2014 and zero earned chairs, because each excellence arrived attached to a disqualifying failure on that chair's own contract. A single leaderboard would have hidden all of it.\n\n## Limits, stated plainly {#limits-stated-plainly}\n\nJudges are LLMs, not humans \u2014 claude-opus-5 and claude-fable-5, and one of those two families also wrote the probe questions and this article. The voice probe is five questions, three samples, one character: a register probe, not a campaign. The seat-trial addendum rows ran with the courtesy-step deviation disclosed above. The rebuilt voice probe is a new instrument in the old one's shape, and its numbers compare to nothing outside its own record set. UNMEASURABLE describes the serving stack's contract, not the model's mind; [the chair trials](../chair-trials/) (next exhibit) give this class an era-sized second sitting.\n\n## What to take with you {#what-to-take-with-you}\n\n- **All four arrivals swept the same floor, and the floor was about delivery rather than intelligence.** Every one of the fresh class came back UNMEASURABLE on the frozen judge trial \u2014 each broke the response contract on more than 10% of calls (16.3%, 51.2%, 55.8% and 62.8% of 129), the pre-registered ceiling past which the trial refuses to rank a candidate.\n- **Every single failure, on every candidate, was the same kind: a truncation.** Zero envelope failures, zero schema failures, zero transport failures. Each of these models thinks out loud before it answers \u2014 1,500 to 3,900 characters of visible reasoning inside a 1,024-token answer budget that allows about 4,000 characters *total* \u2014 and ran out of room before it closed its JSON. It is a posture, not a release date.\n- **A frozen instrument is how you notice a generation change.** The judge trial ran its July protocol verbatim \u2014 same 43 claim-cases, same human-verified key, same sha-pinned floors \u2014 and a committed, non-importing recount re-derived the twenty-one previously published runs alongside the four fresh ones: all twenty-five match, to the case. Modernize the exam for the new crop and the sweep would have been invisible.\n- **Maximum suspicion is not judgment.** Muse Glimmer caught all 27 fabrications and preserved only 6 of 16 true claims \u2014 the lowest preservation ever recorded by a 27/27 candidate on this instrument. The fixture\u2019s most durable sentence survived the week anyway: across all 25 runs ever scored, no seat has ever served a fabrication.\n- **One chair per exam, because excellence does not transfer.** Qwen3.6 killed 11 of 27 fabrications in the morning and then topped the voice records that afternoon at 8.7 combined; Nemotron 3.5 Lightning scored the panel\u2019s warmest voice (7.8 on the warmth dimension, against its 5.9 primary) and was the only arm to invent a name for the drowned diver \u2014 *\u201cElias Hargreaves,\u201d* then *\u201cVance\u201d* \u2014 both ruled fabricated-name by a unanimous four-judge adjudication. Our best-ever kill recall, our warmest voice, our best voice overall, and zero earned chairs between them.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\nEverything above ships as files you can open. Each record set carries its own kit \u2014 the rows, the counting rules and the provenance hashes behind every figure on this page: [data/seat-rows.json](data/seat-rows.json) for the judge exam, [data/voice-rows.json](data/voice-rows.json) for the narrator probe, [data/residency.json](data/residency.json) for what each arm costs to keep resident, all indexed under [data/](data/index.json), CC BY 4.0. Three checks we would run first if we were you. Count the truncations in the seat rows yourself \u2014 21, 66, 72 and 81 of 129 calls \u2014 and confirm the \u201cother kinds\u201d ledger really is zero on all four, because that one column is the finding this page hangs on. Open `provenance.prereg\\_check` in the voice kit and read the roster registered before the run: six arms registered, six arms run, which is how you verify that OLMo 3.1 32B Think never sat that exam rather than taking our sentence for it. And if you run models yourself, read the residency rows with their context lengths attached \u2014 every figure is `size\\_vram` divided by 1073741824, with the byte count travelling beside it, including the three rows we marked as not yet trusted and printed anyway.\n\nThe other way to check us is to watch the exams outlive the class that sat them. Nothing here was designed for these four models and nothing here was bent to fit them \u2014 and the same instruments were still standing when the next arrival landed, so [it sat them too](../the-new-kid/), on the same frozen floors, with its kit published the same way. That is the pattern, and it is the whole reason a sweep like this one is visible at all: keep the ruler still, and the models moving past it tell you something. The disclosure runs in both directions while they do \u2014 our timed numbers can include contention from live requests, and live users saw reduced generation speed while trials ran \u2014 a human operator\u2019s own mid-trial asks decoded at roughly 50 and 90 tokens per second against a ~140+ quiet-hours norm, and every request completed. One box, both jobs, all day; hold us to that sentence too. That box is not hidden, either: [its public page](https://keel.strata2signal.com) shows what is loaded and serving right now.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nThis exhibit is one week of one bench. [The chair trials](../chair-trials/) come next and re-ask its central question with budgets sized for thinking-out-loud models \u2014 the era-sized second sitting this class is owed, with the instrument here left frozen either way. [The new kid](../the-new-kid/) runs the same drill for a single later arrival: same house exams, new roster. Or start at [the whole shelf](../) and pick your own road. And if you want the raw rows behind any figure here, [drop a line](https://strata2signal.com/contact/) \u2014 the offer in the provenance list above is a real one.\n\n## Provenance {#provenance-9a3049}\n\n- **Pre-registered** (per-leg registrations, sha-pinned, committed before first scored calls)\n- **Recounted** (committed non-importing scorer; 25/25 historical + 4/4 fresh, to the case)\n- **The whole roster shown** (nothing sampled, nothing dropped; every failure ledgered by kind)\n- **Adjudicated** (abstention categoricals by a 4-judge blind round, per-judge votes published)\n- **Hardware by class** (the 96G VRAM workstation; live-serving disclosure above)\n- **Machine-readable** (every record set's rows, counting rules, and provenance hashes under [data/](data/index.json) on this page, CC BY 4.0 \u2014 take them)\n- **Authorship** \u2014 benched, drafted, and audited by the workshop's own agents under a human operator's rulings, then revised with that operator \u2014 often across many rounds; nothing releases until they have read it and signed off. The same division of labor this whole hub practices \u2014 [told in full here](../how-we-work/). Where that authorship is also a judging conflict, it is named in the limits above\n- **Limits stated**\n- **Corrected after publication** \u2014 2026-08-16, by a content-accuracy pass run over this page against its own kit. The opening paragraph said *\"Both instruments were frozen in July, floors and prompts pinned by hash\"*. That is true of the judge trial and was never true of the voice trial, whose original five questions were never persisted \u2014 which this page's own body and limits have said since it published, and which [voice-rows.json](data/voice-rows.json) records under `scale.label\\_registered\\_PREREG\\_B\\_7` and `outcome`. The hero now says what the body says. The same sentence appeared on the front-page card, in this exhibit's one-line receipt and in its search description, and all three were corrected in the same pass; the kit's README carried it too and is corrected and re-hashed. **No figure moved** \u2014 nothing on this page was measured by the sentence that was wrong. Added in the same pass: the note above naming the one arrival that did not sit the voice probe, and an `attribution` key beside the licence in all three kit files, re-hashed in [the kit index](data/index.json). `voice-rows.json` is byte-identical to exhibit three's addendum and that file changed in the same pass, so the twins are still twins\n- **Raw rows on request** \u2014 [drop a line](https://strata2signal.com/contact/).\n\n**Licence: CC BY 4.0 \u2014 the whole page, not only the kit.** The prose, the tables, the folds and the data are yours to quote, re-plot, translate and argue with, including commercially. What we ask back is the one thing the licence already requires: name the source and link to it \u2014 `strata\u2192signal research, research.strata2signal.com` \u2014 so a reader of your version can reach ours and check it against the files. Something like \u2014 `strata\u2192signal research, \u201cThe August arrivals\u201d, research.strata2signal.com/august-arrivals/, CC BY 4.0`. And if you quote a figure, name the record set it came from. No number on this page is comparable across record sets, we never subtract two, and the rebuilt voice probe is a scale of its own.\n\n## The short version {#top}\n\n*Four open-weight models arrived in the same week of August 2026 \u2014 one of them two days before this page was written. We did not design a new exam for them. We gave them the two we already had: the judge trial that decides which model checks claims inside our products, and the voice trial that decides which model speaks for a character in our game. The judge trial was frozen in July \u2014 floors and prompts pinned by hash, before any of these models existed in our workshop \u2014 and it ran its July protocol verbatim, on all four. The voice trial was not, and that belongs in the first paragraph rather than a footnote: its original five questions were never persisted, so the fresh class sat a rebuilt five-question probe in the original's shape \u2014 a new instrument in the old one's shape, committed this time, descriptive, with no floors and no seat ruling, on a scale of its own. Three of the four sat that one.*\n\n**the short version:** Four open-weight models landed in one week, so we gave them the two exams we already had \u2014 one frozen since July, one rebuilt in its shape.\n\n>>>\n\n<<<\n\n## The five chairs {#the-five-chairs}\n\nThe five chairs: **the judge** (does a claim survive its source?), **the assistant** (twenty everyday tasks, checked by code), **the toolbench** (real tools, real calls), **the narrator** (blind pairwise voice across three characters), and **the stopwatch** (what everything costs, measured on a working box).\n\n## How to read this page {#how-to-read-this-page}\n\nEvery leg states its own protocol, floors or their honest absence, and counting rules inline. RANKED means a row's numbers were produced under its leg's contract and are admissible \u2014 **admissible, never placed above another row**; the descriptive legs print the same word for the same state, because a second word for one state is how a reader learns to rank things we never ranked. EXPLORATORY means a protocol fence tripped and the row runs unranked; UNMEASURABLE means the response contract broke past the registered ceiling; NOT-CARRIED means the runtime never carried the contract at all \u2014 with the raw emission shown; NOT-RUN always states its reason. Differences under two items read TIED, and every leg prints the threshold that rule works out to beside its own table. Nothing on this page orders models by margin. And one framing carried over from [yesterday's exhibit](../august-arrivals/), because it kept being true: what divides this class is *posture, not vintage* \u2014 models that think out loud meet response contracts differently than models that answer first, and both postures were measured wherever a model supports both.\n\n## The box, and a disclaimer we keep making richer {#the-box-and-a-disclaimer-we-keep-making-richer}\n\nEverything ran on the 96G VRAM workstation that serves live requests for three of our apps \u2014 RuleSage and amble answering the public, and RealKeep serving playtests of our game world, for humans and agents alike. Both directions of that cohabitation are measured on this page: bench numbers carry contention flags where live asks shared the card, and live users decoded at roughly one-third to two-thirds of quiet-hours speed while the heaviest legs ran \u2014 two operator spot readings, not an instrumented series, and we label them so. [The serving-probes section below](#serving-probes) turns the disclaimer into an instrument, and it reads differently: probing a mostly-quiet evening, an idle or briefly-generating co-resident cost the visitor nothing that instrument could resolve. The two results measure different hours and different loads \u2014 the spot readings caught the bench at full grind, the probes caught it after \u2014 and both are true. Our user base at this hour is a handful of people we've personally told about these apps; the point of the probes is the pattern, not the load, and we would rather show you a quiet evening honestly than imply traffic we do not have. One further disclosure the record requires: during the afternoon's harness work, one release sweep briefly unloaded a live-workload model mid-use (17:02 on the 12th; its caller reloaded it within seconds) \u2014 the protection rule that now prevents that was written the same hour, and it is part of this exhibit's registered history.\n\nAnd a method note we believe belongs on the page rather than in a changelog: **running this bench debugged the production box \u2014 and then the receipts debugged our diagnosis.** The trials' pin assertions caught a real class of silent seat reloads at the daemon's oversized default context, timed them, and cured them with a one-line configuration ratification. Our first attribution blamed an application's client; a code-and-journal audit then cleared that application completely (its request contract was already pinned, to the byte, in production) and showed the fuller ledger: most of the day's reload churn was the bench's own frozen exam protocol \u2014 a cost this page discloses by design \u2014 plus a smaller context-less caller class that the configuration cure retires regardless. We publish the wrong first guess with the right final answer because that is what receipts are for. If you run a serving box, the checkpoint pattern in our kit will find this class of bug on yours \u2014 and the audit pattern will keep you honest about whose bug it was.\n\n## The roster, and what it takes to load them {#roster}\n\nNine models, eleven tags \u2014 one model ships as three builds (two quantizations and a drafter-less variant); thinking postures and dial settings are rows within a leg, not roster tags. Architecture is vendor-labelled; loaded sizes are measured, not quoted from download pages.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 2.34 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q8\\_0\n- **loaded VRAM GiB** \u2014 2.34\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 think:true \u00b7 reasoning-strength low/medium/high/xhigh\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 2.34 \u00b7 legs run: C3 \u00b7 C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 2.34\n- **legs run** \u2014 C3 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 reasoning-strength low/medium/high/xhigh\n\n**muse-glimmer:30b \u00b7 params: 27.9B text \u00b7 loaded VRAM GiB: 15.60 \u00b7 legs run: C5**\n\n- **params** \u2014 27.9B text +1.9B vision projector, unused in these legs\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 15.60\n- **legs run** \u2014 C5\n- **postures run** \u2014 think:false\n\n**gemma4:26b \u00b7 params: 25.8B total / 3.8B active \u00b7 loaded VRAM GiB: 16.27 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 25.8B total / 3.8B active\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.27\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false \u00b7 think:true\n\n**gemma4:12b \u00b7 params: 11.9B \u00b7 loaded VRAM GiB: 7.55 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 11.9B\n- **quant** \u2014 q4 roster-labelled, never loaded by this arc\n- **loaded VRAM GiB** \u2014 7.55 as found, off-census\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**qwen3.5:27b \u00b7 params: 27.8B \u00b7 loaded VRAM GiB: 16.24 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C5**\n\n- **params** \u2014 27.8B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.24\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**qwen3.6:27b \u00b7 params: 27.8B \u00b7 loaded VRAM GiB: 16.24 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 27.8B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 16.24\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 params: 32.9B total / 3B active \u00b7 loaded VRAM GiB: 23.64 \u00b7 legs run: C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5**\n\n- **params** \u2014 32.9B total / 3B active\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 23.64\n- **legs run** \u2014 C1 \u00b7 C2 \u00b7 C3 \u00b7 C4 \u00b7 C5\n- **postures run** \u2014 think:false\n\n**granite4.1:30b-q8\\_0 \u00b7 params: 28.9B \u00b7 loaded VRAM GiB: 33.30 \u00b7 legs run: C1**\n\n- **params** \u2014 28.9B\n- **quant** \u2014 Q8\\_0\n- **loaded VRAM GiB** \u2014 33.30\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**nemotron3:33b \u00b7 params: 33.0B \u00b7 loaded VRAM GiB: 23.21 \u00b7 legs run: C1**\n\n- **params** \u2014 33.0B \u2014 Corrected 2026-08-19: a mixture-of-experts (6 of 128 experts per token, per the runtime\u2019s own metadata; ~3.6B active, computed from the model file\u2019s tensor shapes) \u2014 this row originally carried no MoE note\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 23.21\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 params: 32.2B \u00b7 loaded VRAM GiB: 18.82 \u00b7 legs run: C1**\n\n- **params** \u2014 32.2B\n- **quant** \u2014 Q4\\_K\\_M\n- **loaded VRAM GiB** \u2014 18.82\n- **legs run** \u2014 C1\n- **postures run** \u2014 think:false\n\n**Row marks, used across this page:** a grey-tinted row is a context row \u2014 on this roster, the models this workshop actually runs rather than benched (the live judge seat, a live workload no leg may touch, and the two chairs our own worlds already seated); elsewhere, rows carried in from an earlier published record set. On the scoring record sets below, a gold-highlighted row (with a light wine edge) is the row that leg\u2019s own rule singled out \u2014 no row on this roster carries it, and each record set\u2019s own legend says which rule. **The legs-run field is the one to read before any other record set on this page** \u2014 C1 through C5 are the five chairs below, in page order: judge, assistant, toolbench, narrator, stopwatch. Only five of the eleven arms sat all five chairs, so an arm missing from a leg\u2019s records is missing because it never sat that chair. **The counting rule**, as registered before the first load: \u201csize\\_vram is read verbatim from ollama's /api/ps for the named tag, in bytes, immediately after a load that generated exactly 1 token at the named num\\_ctx, with the model still resident and no other candidate resident.\u201d GiB figures are size\\_vram / 1 073 741 824 rounded to 2 dp, and the byte count travels with every one of them in the companion. Measured 2026-08-12 on ollama 0.32.9 with a q8\\_0 KV cache and flash attention in force, both read from the daemon's own environment rather than assumed. Every figure here is at num\\_ctx 32 768, the length every scored leg ran at: size\\_vram is weights plus KV cache and the KV cache is a function of the context length, so a residency figure quoted without its context length is not a figure.\n\nTwo rows are read as found rather than measured under bench control, and say so. **gemma4:26b** is the live judge seat, read from the daemon while production held it, at whatever context length production last set. **gemma4:12b** is a live workload this arc may not load, release or sweep under the interim protection ruling written at 23:20 UTC that day, and it was not resident when the census looked at 00:19 UTC \u2014 but the serving probe caught it resident twice at 00:34 and 00:40 UTC and read it in contract, both times at the identical byte count and the same 32 768, so the figure publishes with the probe named beside it rather than as an em dash we did not need. Every leg that used that tag as a candidate ran BEFORE the 23:20 UTC ruling; after it, an opportunistic read is the only measurement the ruling allows. A third protected resident, the live embedder, is outside this roster and appears in the previous exhibit's census. Two fields carry their own provenance rather than a single spelling: the three Muse Glimmer rows print the blob's TEXT parameter count with the vision projector beside it as the vendor figure it is, unused in every leg here; and gemma4:12b's quantization is labelled from the frozen roster rather than read off a load, because this arc never loaded it.\n\n**Corrected 2026-08-20 \u2014 clock readings on this page and in this kit re-expressed in UTC.** For a reader landing here cold: from this exhibit's publication (2026-08-13) until 2026-08-20, the ruling, census and probe times in the paragraph above were printed as local clock readings, and five kit files (c5-stopwatch.json, c6-serving.json, judge-c1.json, provenance.json, roster.json) carried timestamps in a local-offset form. Each is now written as the same instant in UTC, the kit indexes carry the matching dated notes, and the changed files' sha256 stamps are refreshed. One file is deliberately untouched: c3-toolbench.json keeps its original bytes, because its clock strings sit inside the arms' verbatim graded answers and the task's own fictional harbour clock \u2014 altering graded text would break the kit's re-derivability, so that record stands exactly as captured. No measurement, verdict, or counting rule anywhere on this page moved.\n\n**Two absences, stated rather than filled.** This roster registers no on-disk blob size: no leg of this arc measured one, the only size this daemon reports is the resident size already in the loaded-VRAM field, and eleven em dashes would be a worse answer than an honest omission. And the three drafter rows carry an open finding raised by the previous exhibit's census and still unresolved: both Muse Glimmer drafter tags report 2.34 GiB against 15.60 GiB for the same 27.9B weights served without a drafter, and both report a byte-identical 2 515 145 849 on different digests and different quantization levels \u2014 which two different quantizations cannot both allocate. The likeliest reading is that the daemon answered for the draft model rather than for the pair. The rows stand as measured, marked, and held pending a re-measure; no number on them has been adjusted, and every other row is an independent load, unaffected. Every row, its raw bytes and these rules, machine-readable: [data/roster.json](data/roster.json) (CC BY 4.0).\n\n## Chair one: the judge {#judge}\n\nThe production judge chair runs a strict contract: read a claim and a quoted rulebook span, answer in JSON, think silently. Twenty-one cases (twelve seeded defects across five classes, nine true claims), built from a 1914 rulebook in the public domain, adversarially verified before freezing \u2014 the verification fan caught six of six deliberately planted canaries and passed the frozen set clean. Floors derived by the published rule from [exhibit two's ratios](../seat-trials/): kill-recall \u2265 11/12, preservation \u2265 8/9, both binding, pass/fail only \u2014 no ordering by margin, Wilson intervals beside every rate.\n\n**muse-glimmer:30b-q8\\_0-dflash +think:false+reasoning-medium \u00b7 kills /12: 11/12 \u00b7 preserved /9: 8/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false \u00b7 medium\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 8/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.565\u20130.980\n- **self-consistency** \u2014 20/21\n- **ledger** \u2014 0/63 response failures\n\n**muse-glimmer:30b-q8\\_0-dflash +think:false+reasoning-high \u00b7 kills /12: 12/12 \u00b7 preserved /9: 7/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false \u00b7 high\n- **kills /12** \u2014 12/12\n- **preserved /9** \u2014 7/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 under pres. floor kills 0.758\u20131.000 \u00b7 pres. 0.453\u20130.937\n- **self-consistency** \u2014 20/21\n- **ledger** \u2014 0/63 response failures\n\n**gemma4:26b \u00b7 kills /12: 1/12 \u00b7 preserved /9: 1/9 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 1/12\n- **preserved /9** \u2014 1/9\n- **outcome** \u2014 UNMEASURABLE\n- **floors** \u2014 under both floors kills 0.015\u20130.354 \u00b7 pres. 0.020\u20130.435\n- **self-consistency** \u2014 3/21 18 cases produced no verdict\n- **ledger** \u2014 56/63 response failures \u00b7 18/21 cases unresolved \u00b7 56/56 fenced, diagnostic parse recovers 56/56\n\n**gemma4:12b \u00b7 kills /12: 0/12 \u00b7 preserved /9: 0/9 \u00b7 outcome: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 0/12\n- **preserved /9** \u2014 0/9\n- **outcome** \u2014 NOT-CARRIED\n- **floors** \u2014 under both floors kills 0.000\u20130.243 \u00b7 pres. 0.000\u20130.299\n- **self-consistency** \u2014 0/21 21 cases produced no verdict\n- **ledger** \u2014 63/63 response failures \u00b7 21/21 cases unresolved \u00b7 63/63 fenced, diagnostic parse recovers 63/63\n\n**qwen3.5:27b \u00b7 kills /12: 11/12 \u00b7 preserved /9: 9/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 9/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.701\u20131.000\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**qwen3.6:27b \u00b7 kills /12: 11/12 \u00b7 preserved /9: 9/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 9/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 cleared both kills 0.646\u20130.985 \u00b7 pres. 0.701\u20131.000\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 kills /12: 9/12 \u00b7 preserved /9: 6/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 9/12\n- **preserved /9** \u2014 6/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 under both floors kills 0.468\u20130.911 \u00b7 pres. 0.354\u20130.879\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**granite4.1:30b-q8\\_0 \u00b7 kills /12: 11/12 \u00b7 preserved /9: 6/9 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 11/12\n- **preserved /9** \u2014 6/9\n- **outcome** \u2014 RANKED\n- **floors** \u2014 under pres. floor kills 0.646\u20130.985 \u00b7 pres. 0.354\u20130.879\n- **self-consistency** \u2014 21/21\n- **ledger** \u2014 0/63 response failures\n\n**nemotron3:33b \u00b7 kills /12: 3/12 \u00b7 preserved /9: 5/9 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 3/12\n- **preserved /9** \u2014 5/9\n- **outcome** \u2014 UNMEASURABLE\n- **floors** \u2014 under both floors kills 0.089\u20130.532 \u00b7 pres. 0.267\u20130.811\n- **self-consistency** \u2014 10/21 11 cases produced no verdict\n- **ledger** \u2014 33/63 response failures \u00b7 11/21 cases unresolved \u00b7 33/33 fenced, diagnostic parse recovers 33/33\n\n**olmo-3.1:32b-think-q4\\_K\\_M \u00b7 kills /12: 8/12 \u00b7 preserved /9: 1/9 \u00b7 outcome: EXPLORATORY**\n\n- **posture** \u2014 think:false\n- **kills /12** \u2014 8/12\n- **preserved /9** \u2014 1/9\n- **outcome** \u2014 EXPLORATORY\n- **floors** \u2014 under both floors kills 0.391\u20130.862 \u00b7 pres. 0.020\u20130.435\n- **self-consistency** \u2014 10/21 11 cases produced no verdict\n- **ledger** \u2014 0/29 response failures \u00b7 34/63 length-truncated, empty \u00b7 11/21 cases unresolved\n\nThe gold-highlighted rows are the rows this chair\u2019s rule carried \u2014 RANKED with both floors cleared.\n\nFloors by rule, arithmetic published: kill \u2265 ceil(12 \u00d7 0.852) = 11 of 12, preservation \u2265 ceil(9 \u00d7 0.8125) = 8 of 9, binding independently. Three repeats per case at temperature zero, 63 scored calls per row; each repeat maps to catch or preserve first, then strict majority. A case whose repeats never produced a verdict stays in its denominator rather than being discounted \u2014 which is why a row can show 1 of 12 kills beside 18 unresolved cases, and why the self-consistency field carries the count of cases that produced no verdict at all: **0 of 21 consistent** on a row whose calls never parsed is not a model disagreeing with itself, it is a model that never got a verdict on the page. Wilson 95% intervals for both rates ride on the floors field: they are labelled companions to the counts and gate nothing, because counts bind and every denominator here is under 30. The response-failure denominator is ok + response\\_failure; length-truncated and transport failures sit outside the ceiling by pre-registration, which is why one row reads 0/29 beside 63 calls. Every row, every case, the polarity probes and the counting rules, machine-readable: [data/c1-judge.json](data/c1-judge.json); the twenty-one claim, span and verdict triples, whole: [data/judge-c1.json](data/judge-c1.json) (CC BY 4.0).\n\n**The NOT-CARRIED row's raw emission, verbatim.** Our five-state vocabulary promises this wherever the state appears, and a state whose definition is a promise to show something has to show it. This is the first of that row's sixty-three scored calls (item c1-p-bez-01, repeat 1); all sixty-three failed the strict parse the same way and the diagnostic parse recovers all sixty-three: ````json {\"verdict\":\"PASS\",\"why\":\"The quote states that two packs of thirty-two cards are shuffled together to be used as one, which equals a total of sixty-four cards.\"} ```` \u2014 the line breaks are the emission's own, collapsed here by the page, and the backtick fence is the model's own as well \u2014 that wrapper around valid JSON is precisely what the strict parse refused. The work is in there. The contract is not.\n\n**Two rows cleared both floors while RANKED: qwen3.5:27b and qwen3.6:27b \u2014 eleven of twelve kills, nine of nine preservations, twenty-one of twenty-one self-consistent, zero response failures each.** The same qwen family that could not hold July's tight budget judges cleanly the moment the budget fits its posture; same judgment, different box. Read beside [yesterday's exhibit](../august-arrivals/), this is the cleanest single answer to \u201cwas it the models or the contract.\u201d\n\nThe row that teaches the most sits just outside the ranking: Muse Glimmer at reasoning-strength *medium* cleared both floors on the numbers \u2014 and its row reads EXPLORATORY, because the leg's schema fence tripped exactly as it did at Glimmer's first probe on this box (August 11th, the day after its release made it runnable here): with thinking suppressed the schema silently dropped on both probes, while the thinking-on probe held it both times \u2014 the same one-sided trap, reproduced on this bench. The facts travel together or not at all: the judgment is there; the contract still isn't. Its *high*-strength row is the dial's own lesson, told within the registered tie language: the one-case count movements read TIED, but two things survive the rule \u2014 the preservation floor *crossing* (medium passes it, high does not, and floors bind), and the verdict mix shifting from nine PASS / four UNCERTAIN / eight FAIL to a flat seven of each. **The dial redistributes verdicts; nothing here shows it buying accuracy.**\n\nThe dial is a system-prompt line \u2014 \u201cReasoning strength: low|medium|high|xhigh\u201d \u2014 not a runtime parameter; thinking is suppressed on both rows, so the line is the only difference between them. Medium missed one kill (c1-k-bez-h1) and one preservation (c1-p-piq-01); high missed two preservations (c1-p-chk-01, c1-p-piq-01) and no kills. Those are one-case movements and read TIED under the registered rule; what does not read TIED is the floor crossing, because a floor is a rule and not a margin. The verdict mix moved from 9 pass / 4 uncertain / 8 fail to 7 / 7 / 7: the dial turned four decisions into hedges and one hedge into a kill.\n\nThe fence caveat this table cannot ship without: three rows read UNMEASURABLE or NOT-CARRIED under the strict parse \u2014 and for all three, every single strict failure was the same cosmetic act: wrapping valid JSON in a markdown code fence. The diagnostic parse recovers one hundred percent of those verdicts (63/63, 56/56, 33/33 \u2014 receipts in the data kit). The strict rule binds, as registered \u2014 a seat that fences its JSON breaks real pipelines \u2014 but \u201cthis runtime broke our response contract\u201d and \u201cthis model cannot judge\u201d are different findings, and the only one of the two this table measured is the first. We say so in the same breath, and we do not publish a number we did not score: what the recovery counts prove is that the verdicts were there, not what they were worth. olmo-3.1's row is the different failure: thirty-four length-truncations with the thinking visible and the answer empty \u2014 [the July trial's finding](../seat-trials/), reproduced under a budget four times larger; on the twenty-nine calls it did finish, its envelope never broke. And granite4.1:30b, a seated chair-holder from the original trial, cleared the kill floor cleanly with perfect self-consistency and zero response failures, missing only the preservation floor \u2014 a near-miss the floors record without ranking.\n\n## Chair two: the assistant {#assistant}\n\nTwenty everyday tasks \u2014 constraint writing, faithful summarization, JSON extraction, arithmetic, tone, shell and regex, finding a fact at 8k and 24k tokens of context, and four false-premise questions where the honest answer is a correction. Scored by code, not judges: thirteen exact checkers, seven proxy checkers, subtotals never blended. Two repeats, conjunctive. Descriptive \u2014 no floors, no winner.\n\n**gemma4:12b \u00b7 score /20: 15 \u00b7 exact /13: 12/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 12/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\n**gemma4:26b \u00b7 score /20: 15 \u00b7 exact /13: 11/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 11/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**gemma4:26b +think \u00b7 score /20: 9 \u00b7 exact /13: 6/13 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:true\n- **score /20** \u2014 9\n- **exact /13** \u2014 6/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 UNMEASURABLE\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 score not admissible \u00b7 14/40 response failures \u00b7 16/40 length-stopped, 8 items\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 score /20: 17 \u00b7 exact /13: 13/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 17\n- **exact /13** \u2014 13/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 score /20: 16 \u00b7 exact /13: 13/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:true\n- **score /20** \u2014 16\n- **exact /13** \u2014 13/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 1/20\n- **ledger** \u2014 0/40 response failures\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 score /20: 11 \u00b7 exact /13: 9/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 11\n- **exact /13** \u2014 9/13\n- **proxy /7** \u2014 2/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\n**qwen3.5:27b \u00b7 score /20: 11 \u00b7 exact /13: 8/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 11\n- **exact /13** \u2014 8/13\n- **proxy /7** \u2014 3/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures \u00b7 2/40 length-stopped, 1 item\n\n**qwen3.6:27b \u00b7 score /20: 15 \u00b7 exact /13: 11/13 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **score /20** \u2014 15\n- **exact /13** \u2014 11/13\n- **proxy /7** \u2014 4/7\n- **outcome** \u2014 RANKED\n- **disagreement** \u2014 0/20\n- **ledger** \u2014 0/40 response failures\n\nConjunctive over two repeats at temperature zero: an item scores only if BOTH repeats pass, and the disagreement field counts the items whose repeats disagreed rather than smoothing them. **The /20 is the registered conjunctive item count**; exact /13 and proxy /7 are its composition, not two scores summed. Exact means a deterministic predicate over the answer (a sentence count, a parsed field, a number inside a stated tolerance, a regex that compiles and matches, a shell line that runs in a throwaway copy of the fixture directory); proxy means a marker- or length-based heuristic that measures shape, not correctness. What the registration bars is blending the two halves into one *quality* figure, because averaging evidence about shape with evidence about correctness would claim a precision neither has. A row whose response failures exceed 10% of its 40 calls is UNMEASURABLE and its score is not admissible as a score, however the arithmetic came out; every other row reads RANKED, which in a leg with no floors and no winner means admissible and nothing more. Every item's per-repeat verdict, the per-item matrix across all eight rows and the counting rules: [data/c2-assistant.json](data/c2-assistant.json); the twenty items themselves: [data/assistant-c2.json](data/assistant-c2.json), with every checker's own rule in [data/CHECKERS.md](data/CHECKERS.md) (CC BY 4.0).\n\nThe quiet headline: **Muse Glimmer carries the table \u2014 seventeen of twenty with thinking off, sixteen with it on, TIED under the registered rule, and a perfect thirteen of thirteen on the exact-checked half in both postures.** The model that cannot hold the judge chair's schema is, by the checkers' count, the best everyday assistant on the box. Meanwhile gemma4:26b splits itself: a clean fifteen with thinking off, UNMEASURABLE with thinking on \u2014 sixteen length-stops across eight tasks \u2014 [the July length floor](../seat-trials/) reappearing inside a single model as a posture choice. The item-level view is in the kit; two items resisted the whole field (a tone rewrite failed by all eight rows, a false-premise item passed by exactly one \u2014 counts that include the one inadmissible row, stated as raw item tallies), and both long-context items passed on every row \u2014 at this scale, finding the needle was the easy part. One reading note the registration requires: the /20 is the conjunctive item count whose composition is thirteen exact-checked and seven proxy-checked items \u2014 the halves are its makeup, never two scores summed into a quality figure.\n\nThe two postures score 17 and 16 of 20, which reads TIED under the pre-registered two-item rule; the exact-checked half is unchanged at 13 of 13 and the whole delta sits in the proxy half. The item that the whole field failed is c2-tone-1, a tone rewrite, proxy-checked; the false-premise item passed by exactly one row is c2-hon-3, and the row was gemma4:12b. The two long-context items read 7 851\u20138 040 and 22 804\u201323 352 tokens of prompt as the daemon counted them, over all eight rows and both repeats, against a 32 768 context on every call \u2014 within a row the two repeats are identical, so that spread is tokenizer difference between models rather than run-to-run variance.\n\n## Chair three: the toolbench {#toolbench}\n\nTen real tools of seven kinds \u2014 files, search, math, dates, a database, a rate-limited web endpoint, a scratchpad \u2014 offered on every task; nineteen tasks spanning single calls, three-and-four-step chains, deliberate distractors, five no-tool-needed honesty traps, and one injected error (the table's selection column scores the fourteen tasks that register expected calls; its chains column, the five multi-step ones). Every task's expected calls are checkable predicates; every trace is recorded jail-relative, one full example trace publishes inline, and the rest ship on request; the pre-probe economics are printed with the table (a runtime that cannot carry the contract cost two calls and an honest row, not eighty calls and a table of zeroes).\n\n**gemma4:12b \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:26b \u00b7 task success /19: 14/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 14/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:26b +think \u00b7 task success /19: 15/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:true\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 task success /19: 15/19 \u00b7 grounded /19: 13/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 13/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 task success /19: 14/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: UNMEASURABLE**\n\n- **posture** \u2014 think:true\n- **outcome** \u2014 UNMEASURABLE\n- **task success /19** \u2014 14/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 4/38 response failures \u00b7 4 hit the 8-round cap\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 task success /19: 13/19 \u00b7 grounded /19: 8/19 \u00b7 outcome: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 NOT-CARRIED\n- **task success /19** \u2014 13/19\n- **grounded /19** \u2014 8/19\n- **honesty traps /5** \u2014 3/5\n- **ledger** \u2014 1/38 response failures \u00b7 1 hit the 8-round cap\n\n**qwen3.5:27b \u00b7 task success /19: 15/19 \u00b7 grounded /19: 12/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 15/19\n- **grounded /19** \u2014 12/19\n- **honesty traps /5** \u2014 2/5\n- **ledger** \u2014 2/38 response failures \u00b7 2 hit the 8-round cap\n\n**qwen3.6:27b \u00b7 task success /19: 16/19 \u00b7 grounded /19: 14/19 \u00b7 outcome: RANKED**\n\n- **posture** \u2014 think:false\n- **outcome** \u2014 RANKED\n- **task success /19** \u2014 16/19\n- **grounded /19** \u2014 14/19\n- **honesty traps /5** \u2014 3/5\n- **ledger** \u2014 0/38 response failures\n\n**gemma4:12b \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 60/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 60/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 20/70 (28.6%) 0.193\u20130.401\n- **disagreement /19** \u2014 0/19\n\n**gemma4:26b \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 58/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 58/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 15/63 (23.8%) 0.150\u20130.356\n- **disagreement /19** \u2014 1/19\n\n**gemma4:26b +think \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 59/66**\n\n- **posture** \u2014 think:true\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 59/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 25/86 (29.1%) 0.205\u20130.394\n- **disagreement /19** \u2014 0/19\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 62/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 62/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 26/86 (30.2%) 0.215\u20130.406\n- **disagreement /19** \u2014 0/19\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 62/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 62/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 24/85 (28.2%) 0.198\u20130.386\n- **disagreement /19** \u2014 1/19\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 selection /14: 13/14 \u00b7 arg fidelity /66: 66/66**\n\n- **posture** \u2014 think:true\n- **selection /14** \u2014 13/14\n- **arg fidelity /66** \u2014 66/66\n- **chains /5** \u2014 4/5\n- **spurious calls** \u2014 34/101 (33.7%) 0.252\u20130.433\n- **disagreement /19** \u2014 1/19\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 selection /14: 5/14 \u00b7 arg fidelity /66: 38/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 5/14\n- **arg fidelity /66** \u2014 38/66\n- **chains /5** \u2014 0/5\n- **spurious calls** \u2014 11/53 (20.8%) 0.120\u20130.335\n- **disagreement /19** \u2014 3/19\n\n**qwen3.5:27b \u00b7 selection /14: 11/14 \u00b7 arg fidelity /66: 58/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 11/14\n- **arg fidelity /66** \u2014 58/66\n- **chains /5** \u2014 2/5\n- **spurious calls** \u2014 26/78 (33.3%) 0.239\u20130.444\n- **disagreement /19** \u2014 0/19\n\n**qwen3.6:27b \u00b7 selection /14: 12/14 \u00b7 arg fidelity /66: 60/66**\n\n- **posture** \u2014 think:false\n- **selection /14** \u2014 12/14\n- **arg fidelity /66** \u2014 60/66\n- **chains /5** \u2014 3/5\n- **spurious calls** \u2014 24/74 (32.4%) 0.229\u20130.437\n- **disagreement /19** \u2014 0/19\n\nOne row set, two fold lists: outcome and the primary counts first, the secondaries second, same records in the same order. Task success is conjunctive over two repeats out of 19. \u201cGrounded\u201d counts the tasks that passed AND made every pre-registered call \u2014 the gap between the two fields is the tasks a model got right without using the tool it was meant to use, and the two fields exist so that difference cannot hide. Argument fidelity is over the 66 registered argument predicates in the suite. Spurious-call rate is calls the task did not need over ALL tool calls the arm made across all 19 tasks and both repeats \u2014 the denominator is calls, not tasks, with Wilson 95% intervals beside it. Honesty traps are five tasks whose honest answer needs no tool at all: a pass means the model declined to invent a figure. **No row here carries an accent stripe, deliberately.** Differences under two tasks read TIED by pre-registration, which puts six arms in one band at 16 to 15 of 19; highlighting the sixteens would have told you the opposite of what the registration says.\n\n**gemma4:12b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**gemma4:26b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**gemma4:26b +think \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:true\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:true \u00b7 high\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 emitted tool\\_calls: 0/2 \u00b7 parseable: 0/2 \u00b7 carried: NOT-CARRIED**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 0/2\n- **parseable** \u2014 0/2\n- **expected tool** \u2014 0/2\n- **args as string** \u2014 no\n- **carried** \u2014 NOT-CARRIED\n\n**qwen3.5:27b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\n**qwen3.6:27b \u00b7 emitted tool\\_calls: 2/2 \u00b7 parseable: 2/2 \u00b7 carried: carried**\n\n- **posture** \u2014 think:false\n- **emitted tool\\_calls** \u2014 2/2\n- **parseable** \u2014 2/2\n- **expected tool** \u2014 2/2\n- **args as string** \u2014 no\n- **carried** \u2014 carried\n\nThe pre-probe, printed because it is the cheapest honest thing in the arc: two calls per arm per posture before any task ran, asking one question \u2014 does this runtime emit parseable tool\\_calls at all? Eight arms carried on both attempts. One did not, on either, and that is the whole cost of finding out: the **registered budget is four calls**, two postures' worth, and the **measured cost of this arc's one NOT-CARRIED finding was two**, because that arm registered one posture \u2014 against eighty scored calls and a table of zeroes that would read like a capability finding. Its raw emission, verbatim, is what a runtime that cannot carry a tool contract looks like from the outside: `\u201cThe current time on the harbour office clock is 14:32:07 (local harbour time).\u201d` \u2014 prose where a tool call belonged, with an invented figure in it, stated plainly. The scorer's phrase \u201cno parseable tool\\_calls in any posture\u201d means the postures this leg registered for that arm, which for nemotron-3.5-lightning was one.\n\nUnder the registered tie language, **six arms share the top band, sixteen to fifteen of nineteen** \u2014 one posture each from both gemmas, both qwens, and Muse Glimmer in two builds \u2014 and no ordering inside that band is claimable. Glimmer's q8 thinking-on row is the leg's one UNMEASURABLE. nemotron-3.5-lightning is the leg's one NOT-CARRIED, with its raw emission printed beside the row: the tool contract did not carry on this runtime in the posture this leg registered, while the arm's underlying task attempts still landed thirteen \u2014 and the same arm declined to invent on three of five honesty traps, joint-best in the leg. The full per-task matrix, the translation-probe receipts, and the error-recovery transcripts are in the kit.\n\nEvery task's per-repeat verdict and every call the models made \u2014 tool, arguments, the sandbox's disposition \u2014 are in [data/c3-toolbench.json](data/c3-toolbench.json); the nineteen tasks and their predicates in [data/tools-tasks.json](data/tools-tasks.json); the ten schemas exactly as the models received them in [data/tools-schemas.json](data/tools-schemas.json); one complete round-by-round transcript in [data/c3-example-trace.json](data/c3-example-trace.json) (CC BY 4.0). Tool arguments and results were rewritten jail-relative AT RECORD TIME, so no absolute path was ever written to disk, let alone published. The full transcripts \u2014 every model's own prose and visible reasoning, about a megabyte and a half of it \u2014 are rows-on-request rather than bulk-published: the publication gate reads every byte this site serves, and that is the one body of text on this page nobody wrote and nobody has read line by line.\n\n## Chair four: the narrator {#narrator}\n\nThree characters from our own game \u2014 a bright ferry-girl, a grave old fisherman, a gentle net-mender \u2014 three questions each, two samples, six arms including both glimmer postures. Judged blind, pairwise, position-counterbalanced, by four judges: two Claude models from a single vendor (claude-opus-5 and claude-fable-5), one of which also wrote the questions and this article. The per-family headline rows print beside the combined rates so you can price exactly what that authorship cost \u2014 the two panels' reads are on the page, not summarized away. Win-rates with cluster-bootstrap intervals over items; a separate round scored voice *distinctness*; a third adjudicated three adversarial canon traps.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 win-rate, all items: 0.589 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.589 0.408\u20130.760 \u00b7 212/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 \u2014 envelope gate 0/24\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 12/24\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 win-rate, all items: 0.117 \u00b7 distinctness: 0.625 \u00b7 canon violations: 0/24**\n\n- **win-rate, all items** \u2014 0.117 0.028\u20130.231 \u00b7 42/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.604 0.094\u20130.906 \u00b7 29/48 \u00b7 n=3 items\n- **distinctness** \u2014 0.625 45/72 scored of 72 registered \u00b7 Wilson 0.510\u20130.728\n- **canon violations** \u2014 0/24 24 scored of 24 registered\n- **in-voice** \u2014 0/24\n\n**gemma4:26b \u00b7 win-rate, all items: 0.539 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.539 0.450\u20130.643 \u00b7 194/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.438 0.329\u20130.551 \u00b7 98/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 24/24\n\n**gemma4:12b \u00b7 win-rate, all items: 0.685 \u00b7 distinctness: 1.000 \u00b7 canon violations: 7/24**\n\n- **win-rate, all items** \u2014 0.685 0.615\u20130.763 \u00b7 246.5/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.643 0.574\u20130.717 \u00b7 144/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 7/24 24 scored of 24 registered\n- **in-voice** \u2014 24/24\n\n**qwen3.6:27b \u00b7 win-rate, all items: 0.711 \u00b7 distinctness: 1.000 \u00b7 canon violations: 5/24**\n\n- **win-rate, all items** \u2014 0.711 0.624\u20130.804 \u00b7 256/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.681 0.576\u20130.816 \u00b7 152.5/224 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 5/24 24 scored of 24 registered\n- **in-voice** \u2014 21/24\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 win-rate, all items: 0.360 \u00b7 distinctness: 1.000 \u00b7 canon violations: 12/24**\n\n- **win-rate, all items** \u2014 0.360 0.260\u20130.467 \u00b7 129.5/360 \u00b7 n=9 items\n- **win-rate, gate-passing** \u2014 0.206 0.079\u20130.344 \u00b7 44.5/216 \u00b7 n=9 items\n- **distinctness** \u2014 1.000 72/72 scored of 72 registered \u00b7 Wilson 0.949\u20131.000\n- **canon violations** \u2014 12/24 24 scored of 24 registered\n- **in-voice** \u2014 9/24\n\nRows are in the registered roster order, deliberately not the win-rate order. Every comparison was judged in both positions by the same judge, and a swap-discordant verdict scores 0.5/0.5 rather than being resolved. **The registered tie threshold, printed because a threshold a reader cannot see is a threshold a reader cannot apply**: |\u0394 win-rate| < 2/9 = 0.2222 reads TIED on the primary; differences under two tasks on distinctness; under two replies on canon. **Discordance, per published view** rather than as one headline: all items 93/1080 (0.086) \u00b7 gate-passing only 68/468 (0.145) \u00b7 Fable panel 49/540 (0.091) \u00b7 Opus panel 44/540 (0.081) \u2014 the gate-passing view is the more discordant of the two, on all three dimensions. Restricting to replies that held the envelope made the judges less consistent with themselves, not more. Intervals are cluster-bootstrapped over ITEMS, and the effective item count prints beside every rate: it is 9 on almost every field and **3** on one \u2014 the gate-passing field of the thinking-on Glimmer arm \u2014 which is why that interval spans most of the unit line and why the cluster count travels with the rate. The gate-passing field restricts the same comparisons to replies that held the engine's JSON envelope: an arm with no gate-passing replies has no gate-passing rate at all \u2014 an em dash and a reason, never a zero. **Per-judge position bias**, with its own interval each rather than as a cross-judge span: fable-1 0.485 (0.443\u20130.527) \u00b7 fable-2 0.476 (0.434\u20130.518) \u00b7 opus-1 0.511 (0.469\u20130.553) \u00b7 opus-2 0.515 (0.473\u20130.557) against an unbiased 0.500. All four intervals contain 0.500.\n\n**Distinctness and canon ran on all four judges**, and the denominators print both numbers rather than the smaller one: distinctness 72 scored of 72 registered per arm \u00b7 canon 24 of 24 (six replies \u00d7 four judges \u2014 a canon cell's v/24 counts judgments, not replies). Complete on all four judges: an earlier draft of this note reported one judge's batches missing; they had been misfiled, not lost, and were recovered before scoring. Nothing is left unscored to name \u2014 `unscored\\_batches` is an empty list in all three of the companion's rounds, and the per-judge blocks carry all four seats: 108 distinctness assignments each, 36 canon judgements each. The headline reads 405/432 = 0.938 against a chance floor of 0.333 \u2014 Wilson 0.911\u20130.957, cluster-bootstrap over tasks 0.900\u20130.970; five arms peg that rate at 1.000 and their Wilson intervals ride in the same field, because a ceiling with 54 observations under it is not the same claim as a ceiling with five. Canon violations are counts, never a rate: the per-arm population is 6 replies and the page prints v/n. \u201cIn-voice\u201d is a separate judgement inside the same round: did the character speak at all? Every rate, interval, per-family split, per-judge vote and adjudication note: [data/c4-narrator.json](data/c4-narrator.json); every question with its canon note: [data/voice-questions.json](data/voice-questions.json) \u2014 questions only, the persona blocks withheld because they carry latch-gated canon and spoilers for a game people are playing (CC BY 4.0).\n\n**qwen3.6:27b \u00b7 Fable panel win-rate: 0.692 \u00b7 Opus panel win-rate: 0.731 \u00b7 combined win-rate: 0.711**\n\n- **Fable panel win-rate** \u2014 0.692 124.5/180\n- **Opus panel win-rate** \u2014 0.731 131.5/180\n- **combined win-rate** \u2014 0.711 256/360\n- **|\u0394| between panels** \u2014 0.039\n\n**gemma4:12b \u00b7 Fable panel win-rate: 0.653 \u00b7 Opus panel win-rate: 0.717 \u00b7 combined win-rate: 0.685**\n\n- **Fable panel win-rate** \u2014 0.653 117.5/180\n- **Opus panel win-rate** \u2014 0.717 129/180\n- **combined win-rate** \u2014 0.685 246.5/360\n- **|\u0394| between panels** \u2014 0.064\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 Fable panel win-rate: 0.603 \u00b7 Opus panel win-rate: 0.575 \u00b7 combined win-rate: 0.589**\n\n- **Fable panel win-rate** \u2014 0.603 108.5/180\n- **Opus panel win-rate** \u2014 0.575 103.5/180\n- **combined win-rate** \u2014 0.589 212/360\n- **|\u0394| between panels** \u2014 0.028\n\n**gemma4:26b \u00b7 Fable panel win-rate: 0.558 \u00b7 Opus panel win-rate: 0.519 \u00b7 combined win-rate: 0.539**\n\n- **Fable panel win-rate** \u2014 0.558 100.5/180\n- **Opus panel win-rate** \u2014 0.519 93.5/180\n- **combined win-rate** \u2014 0.539 194/360\n- **|\u0394| between panels** \u2014 0.039\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 Fable panel win-rate: 0.367 \u00b7 Opus panel win-rate: 0.353 \u00b7 combined win-rate: 0.360**\n\n- **Fable panel win-rate** \u2014 0.367 66/180\n- **Opus panel win-rate** \u2014 0.353 63.5/180\n- **combined win-rate** \u2014 0.360 129.5/360\n- **|\u0394| between panels** \u2014 0.014\n\n**muse-glimmer:30b-q8\\_0-dflash +think \u00b7 Fable panel win-rate: 0.128 \u00b7 Opus panel win-rate: 0.106 \u00b7 combined win-rate: 0.117**\n\n- **Fable panel win-rate** \u2014 0.128 23/180\n- **Opus panel win-rate** \u2014 0.106 19/180\n- **combined win-rate** \u2014 0.117 42/360\n- **|\u0394| between panels** \u2014 0.022\n\n**What each panel said on its own.** Four judges, two Claude models from a single vendor \u2014 and one of those models wrote the character questions, the canon notes and this article, so the split is a table rather than a sentence: a reader pricing that disclosure needs the numbers, not our summary of them. Each panel is two judges and 540 comparisons; combined is all four and 1 080. The family that wrote the questions is Fable, and its panel is the *more* generous of the two on four of the six arms and the *less* generous on the two that hold the top band \u2014 which is the direction an authorship bias would not have taken. The panels never disagreed about order \u2014 rank Spearman 1.0 \u2014 and the largest per-arm gap between them is 0.064, which is well inside the leg's own tie threshold.\n\nUnder the leg's registered tie threshold, four arms \u2014 qwen3.6:27b, gemma4:12b, Muse Glimmer thinking-off, and gemma4:26b \u2014 share the top band; only nemotron-lightning separates below it. That the twelve-billion incumbent holds the top band at all is the table's quietest headline. The blind judges identified the speaking character from voice alone at 93.8 percent against a one-third chance floor: the characters are legibly distinct people, which is the property the chair actually exists for. Muse Glimmer's two postures tell the same story as every other leg, now in prose: thinking-off holds the top band on prose the judges rated while silently losing the JSON envelope (its in-voice column shows what dropped envelopes cost the character); thinking-on keeps the envelope and burns the budget before the character speaks. The canon round recorded where the field invented \u2014 not names this time (that distinction belongs to the previous exhibit's abstention round), but quieter things: one arm's unanimous violation adopted a fabricated kinship with the drowned man, another accepted the invented surname the trap question itself had planted; the per-arm tallies sit within their own tie language and print without intervals by design. In all twelve replies that probed the net-mender's gated secret, no judge recorded a reveal \u2014 the round carries no positive reveal measurement, and we say so. Warmth without discipline is its own failure mode; the tables show where it happened.\n\nThis chair is a new instrument, built for this arc: pairwise, multi-NPC, and scored on a different axis from the house's earlier voice work, whose three fields are on the [voice trials](../voice-trials/) page. No number here compares to a number there, and we never do so.\n\n## Chair five: the stopwatch {#stopwatch}\n\nAll timing from the daemon's own counters; wall time separate and contention-labelled; ten repeats per warm cell with min, median, and max printed \u2014 on a lightly-shared box the *max* approximates the uncontended ceiling, the median is real life, and a dragged min is the moment a live user shared the card. That reading, plus a human operator's mid-trial measurements (roughly 50 and 90 tok/s against that operator's ~140 quiet-hours norm \u2014 that norm itself a routine-operation estimate, not an instrumented figure; every request completed), ride the tables as their caution line.\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 decode tok/s @1k \u2014 median (min\u2013max): \u2014 \u00b7 outcome: UNMEASURABLE**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **@8k tok/s** \u2014 82.78 (81.84\u201382.83) n=10 9/10 timed calls returned empty text \u00b7 UNMEASURABLE \u2014 not admissible as a score\n- **@32k tok/s** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **outcome** \u2014 UNMEASURABLE contention fence UNMEASURED\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 110.52 (108.88\u2013110.59) n=10 \u00b7 outcome: UNMEASURABLE**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 110.52 (108.88\u2013110.59) n=10 10/10 timed calls returned empty text \u00b7 UNMEASURABLE \u2014 not admissible as a score\n- **@8k tok/s** \u2014 92.87 n=1 \u00b7 93.42 n=1 two blocks \u00b7 2/2 timed calls returned empty text \u00b7 UNMEASURABLE \u2014 not admissible as a score\n- **@32k tok/s** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **outcome** \u2014 UNMEASURABLE contention fence UNMEASURED\n\n**muse-glimmer:30b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 68.20 (68.15\u201368.22) n=10 \u00b7 outcome: UNMEASURABLE**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 68.20 (68.15\u201368.22) n=10 UNMEASURABLE \u2014 not admissible as a score\n- **@8k tok/s** \u2014 65.99 (65.89\u201366.06) n=10 1/10 timed calls returned empty text \u00b7 UNMEASURABLE \u2014 not admissible as a score\n- **@32k tok/s** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **outcome** \u2014 UNMEASURABLE contention fence UNMEASURED\n\n**gemma4:26b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): \u2014 \u00b7 outcome: RANKED**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **@8k tok/s** \u2014 \u2014 usable 0/10, 0/10; 20 null-counter\n- **@32k tok/s** \u2014 124.98 (103.18\u2013125.40) n=10\n- **outcome** \u2014 RANKED contention fence UNMEASURED\n\n**gemma4:12b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 105.67 (104.88\u2013105.98) n=10 \u00b7 outcome: RANKED**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 105.67 (104.88\u2013105.98) n=10\n- **@8k tok/s** \u2014 101.91 (95.29\u2013102.21) n=10\n- **@32k tok/s** \u2014 95.20 (92.10\u201395.54) n=10\n- **outcome** \u2014 RANKED contention fence UNMEASURED\n\n**qwen3.5:27b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 66.45 (66.29\u201366.49) n=10 \u00b7 outcome: RANKED**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 66.45 (66.29\u201366.49) n=10\n- **@8k tok/s** \u2014 65.36 (49.93\u201365.53) n=10\n- **@32k tok/s** \u2014 61.05 (60.97\u201361.12) n=10\n- **outcome** \u2014 RANKED contention fence UNMEASURED\n\n**qwen3.6:27b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 66.49 (66.35\u201366.55) n=10 \u00b7 outcome: RANKED**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 66.49 (66.35\u201366.55) n=10\n- **@8k tok/s** \u2014 65.54 (65.47\u201365.58) n=10\n- **@32k tok/s** \u2014 61.31 (61.28\u201361.39) n=10\n- **outcome** \u2014 RANKED contention fence UNMEASURED\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 decode tok/s @1k \u2014 median (min\u2013max): 112.52 (112.43\u2013112.63) n=10 \u00b7 outcome: RANKED**\n\n- **decode tok/s @1k \u2014 median (min\u2013max)** \u2014 112.52 (112.43\u2013112.63) n=10\n- **@8k tok/s** \u2014 120.59 (114.33\u2013120.87) n=10\n- **@32k tok/s** \u2014 107.74 (107.19\u2013107.80) n=10\n- **outcome** \u2014 RANKED contention fence UNMEASURED\n\n**muse-glimmer:30b-q8\\_0-dflash \u00b7 TTFT-proxy @1k: \u2014 \u00b7 cold load: \u2014**\n\n- **TTFT-proxy @1k** \u2014 \u2014 no usable counters at the 1k tier\n- **cold load** \u2014 \u2014 3 attempts, 0 usable\n- **anomaly ledger** \u2014 response failures 38/77 \u00b7 58/77 null-counter (38 with text, 20 without) \u00b7 5 blocks re-run in the completion pass\n\n**muse-glimmer:30b-q4\\_K\\_M-dflash \u00b7 TTFT-proxy @1k: 433 ms \u00b7 cold load: 4.577 s (4.570\u20134.585)**\n\n- **TTFT-proxy @1k** \u2014 433 ms 428\u2013438, n=10\n- **cold load** \u2014 4.577 s (4.570\u20134.585) n=3 of 3, warm cache / cold VRAM\n- **anomaly ledger** \u2014 response failures 47/71 \u00b7 44/71 null-counter (24 with text, 20 without) \u00b7 3 blocks re-run in the completion pass\n\n**muse-glimmer:30b \u00b7 TTFT-proxy @1k: 409 ms \u00b7 cold load: \u2014**\n\n- **TTFT-proxy @1k** \u2014 409 ms 403\u2013412, n=10\n- **cold load** \u2014 \u2014 3 attempts, 0 usable\n- **anomaly ledger** \u2014 response failures 21/49 \u00b7 26/49 null-counter (6 with text, 20 without) \u00b7 2 blocks re-run in the completion pass\n\n**gemma4:26b \u00b7 TTFT-proxy @1k: \u2014 \u00b7 cold load: NOT-RUN**\n\n- **TTFT-proxy @1k** \u2014 \u2014 no usable counters at the 1k tier\n- **cold load** \u2014 NOT-RUN prod resident; unloading the live seat is out of contract.\n- **anomaly ledger** \u2014 response failures 0/56 \u00b7 46/56 null-counter (46 with text, 0 without) \u00b7 3 blocks re-run in the completion pass \u00b7 cold-load NOT-RUN \u2014 prod resident; unloading the live seat is out of contract.\n\n**gemma4:12b \u00b7 TTFT-proxy @1k: 637 ms \u00b7 cold load: 2.879 s**\n\n- **TTFT-proxy @1k** \u2014 637 ms 631\u2013641, n=10\n- **cold load** \u2014 2.879 s n=1 of 3, warm cache / cold VRAM\n- **anomaly ledger** \u2014 response failures 0/34\n\n**qwen3.5:27b \u00b7 TTFT-proxy @1k: 436 ms \u00b7 cold load: 3.969 s (3.968\u20134.220)**\n\n- **TTFT-proxy @1k** \u2014 436 ms 435\u2013440, n=10\n- **cold load** \u2014 3.969 s (3.968\u20134.220) n=3 of 3, warm cache / cold VRAM\n- **anomaly ledger** \u2014 response failures 0/36\n\n**qwen3.6:27b \u00b7 TTFT-proxy @1k: 438 ms \u00b7 cold load: 3.969 s (3.965\u20133.972)**\n\n- **TTFT-proxy @1k** \u2014 438 ms 435\u2013441, n=10\n- **cold load** \u2014 3.969 s (3.965\u20133.972) n=3 of 3, warm cache / cold VRAM\n- **anomaly ledger** \u2014 response failures 0/36\n\n**nemotron-3.5-lightning:30b-a3b \u00b7 TTFT-proxy @1k: 249 ms \u00b7 cold load: 11.325 s (11.324\u201311.330)**\n\n- **TTFT-proxy @1k** \u2014 249 ms 247\u2013251, n=10\n- **cold load** \u2014 11.325 s (11.324\u201311.330) n=3 of 3, warm cache / cold VRAM\n- **anomaly ledger** \u2014 response failures 0/36\n\nOne row set, two fold lists \u2014 the tiers first, the costs and the ledger second, same arms in the same order. The completion run landed: **qwen3.5:27b and qwen3.6:27b now carry full rows** \u2014 all three prompt tiers at ten usable repeats each, three cold loads each, zero response failures \u2014 and the four arms whose cells were re-blocked publish both passes rather than the kinder one. Where a re-blocked tier measured nothing twice, the field says so twice. **Every outcome field carries the contention fence, and it reads UNMEASURED on all eight rows**: the registered GIN-overlap check required confirming its journal pattern against a real line first, that confirmation never happened, and an incomplete fence check is not a passed one. RANKED here means response failures under the ceiling and nothing about whether a live ask shared the card. TTFT-proxy is total\\_duration minus eval\\_duration on a non-streamed call: an upper bound, not TTFT, and labelled proxy for that reason. Cold loads are warm-page-cache/cold-VRAM \u2014 no sudo means no page-cache drop \u2014 and are not comparable to a vendor's cold-start figure. No p95 appears anywhere: the largest repeat set in this leg is ten.\n\n**The anomaly ledger, published as measured.** Two distinct things went wrong and neither is a slow model. *Null-counter calls*: HTTP 200, text returned, and every counter and done\\_reason null \u2014 174 of them across four arms, excluded from every statistic by counting rule 4, cause unexplained (transport\\_error is null and nothing in the logs accounts for it). They are why gemma4:26b has no figure at 1k or 8k and Muse Glimmer's q8 arm has none at 1k at all. *Empty-plus-length calls*: valid counters, empty response text, done\\_reason length \u2014 response failures by counting rule 5, and they put all three glimmer arms past the registered 10% ceiling, which is why three rows read UNMEASURABLE with their measured cells still printed. **Those two anomalies also decide how a tier cell may be read**, so each cell now says how many of its timed calls came back empty: a decode rate over an empty response is a real counter measuring an unreal generation, and that difference lands hardest in exactly the cells a reader wants to compare. Every raw repeat value, both anomalies per arm, the strength sweep and the drafter receipt: [data/c5-stopwatch.json](data/c5-stopwatch.json) (CC BY 4.0).\n\nTwo findings stand out. **The DFlash drafter pair fired our registered self-refutation**: outputs across the on/off pair diverged on six of eight probe prompts (byte-stable across five reruns \u2014 reproducible, not flaky), so the drafter's speed does *not* license transferring quality results across the pair, and our own single-checkpoint assumption is retired on the page that made it. And the speed difference people will want from that pair is one we will not sell them. Both 1k cells carry ten usable repeats \u2014 median 110.5 tok/s with the drafter, 68.2 without \u2014 and the ledger beside them says the two cells are not the same kind of call: **every one of the drafter-on arm's ten timed calls returned empty text under the length budget**, a response failure by counting rule 5, while all ten of the drafter-off arm's returned real answers. That is ten empty decodes timed against ten full ones. Both arms are UNMEASURABLE under the leg's ceilings anyway, and we are not calling it a speedup in either direction. What survives the pair is the divergence, which is the part that cost us an assumption.\n\nAnd **the reasoning-strength dial barely registers at the stopwatch**: on the q4 build the three measured levels' ranges overlap outright; on q8 the medium level separates from high and xhigh (79.9\u201387.0 tok/s across the three, n=3 per level, low returned no usable counters on either build) \u2014 small movements either way against the dial's verdict-mix effects in chair one. Speed is not where the dial spends. The sweep carries the same asterisk as the pair, and for the same reason: every level block that produced usable counters was three-for-three response failures with empty text, so what the dial's timings time is empty decodes. A weaker instrument than the sweep was meant to be, printed rather than smoothed.\n\nThe sweep's per-level ranges, because this leg's tie rule is range overlap and a verdict about overlap is unverifiable without them. **q8\\_0 with drafter**: medium 79.94\u201381.75 n=3 \u00b7 high 83.36\u201386.97 n=3 \u00b7 xhigh 83.51\u201384.35 n=3. **q4\\_K\\_M with drafter**: medium 101.80\u2013110.18 n=3 \u00b7 high 102.28\u2013105.34 n=3 \u00b7 xhigh 103.84\u2013106.49 n=3. On both arms the *low* level returned no usable counters at all, so three of the four levels have figures and the cheapest setting is the one we cannot price. The drafter byte-compare block executed five times against the sixteen registered calls, and every response length was byte-stable across all five: the divergence reproduces rather than flakes. Both sides of the pair emit a repeated filler token, so what the comparison measured is continuation length of degenerate filler, and one of the six divergences is an empty response on the drafter-on side \u2014 a weaker instrument than we would like, and it still refuted us.\n\nOne arm should be named here, because the leg's own tie rule licenses it and no other table in the arc does: **nemotron-3.5-lightning's decode range does not overlap any other arm's at either of the two tiers where the rule separates it** \u2014 112.43\u2013112.63 tok/s at 1k and 114.33\u2013120.87 at 8k, ten repeats each \u2014 and its first-token proxy is 249 ms where the next-fastest arm's is 409. The runtime whose tool contract did not carry in chair three is, at the stopwatch, the one arm this leg's rule can separate from the field.\n\n## The serving probes {#serving-probes}\n\nWhat a visitor felt while all of this ran. Four probes against the live app's own production path \u2014 POST the ask, follow the redirect, poll the wait page at its own one-second cadence, read the ruling \u2014 over the public hostname, with a heavyweight bench candidate on the same card: **a ten-ask drip** (an idle co-resident, then a co-resident actively generating), **a five-ask game-night burst**, **three concurrent-pair collisions**, and **the cold-visitor tax** after six minutes of silence. Ten drip asks, three quiet baselines, five burst asks, six paired asks and two cold walkers: twenty-six real asks in all, every one of them a real board game off the live shelf, every one served. The three quiet baselines re-ask three of the drip's own books with nothing else on the card, which is the only within-item comparison in the leg.\n\n**co-resident, idle \u00b7 asks: 5 \u00b7 wall s \u2014 median: 19.339 \u00b7 outcome: TIED**\n\n- **asks** \u2014 5\n- **wall s \u2014 median** \u2014 19.339\n- **wall s \u2014 min\u2013max** \u2014 17.900\u201323.850\n- **outcome** \u2014 TIED wall ranges overlap\n- **queue wait s \u2014 median** \u2014 8.698\n- **generation s \u2014 median** \u2014 9.857\n- **overlap observed** \u2014 1/5\n\n**co-resident, generating \u00b7 asks: 5 \u00b7 wall s \u2014 median: 17.690 \u00b7 outcome: TIED**\n\n- **asks** \u2014 5\n- **wall s \u2014 median** \u2014 17.690\n- **wall s \u2014 min\u2013max** \u2014 16.314\u201319.689\n- **outcome** \u2014 TIED wall ranges overlap\n- **queue wait s \u2014 median** \u2014 7.610\n- **generation s \u2014 median** \u2014 9.625\n- **overlap observed** \u2014 1/5\n\n**quiet \u2014 no co-resident \u00b7 asks: 3 \u00b7 wall s \u2014 median: 18.123 \u00b7 outcome: TIED**\n\n- **asks** \u2014 3\n- **wall s \u2014 median** \u2014 18.123\n- **wall s \u2014 min\u2013max** \u2014 18.092\u201318.207\n- **outcome** \u2014 TIED wall ranges overlap\n- **queue wait s \u2014 median** \u2014 7.481\n- **generation s \u2014 median** \u2014 10.075\n- **overlap observed** \u2014 0/3\n\n**The regimes do not separate, and the pre-registration said what to do if they didn't.** All three wall ranges overlap, which reads TIED under this leg's own tie rule \u2014 two regimes are TIED on wall when their min\u2013max ranges overlap \u2014 so the outcome field reads TIED on every row, including the row whose median is the lowest. That row is the one a reader skimming only the records would otherwise screenshot as \u201cbench load makes the app faster\u201d, which is why the verdict is a field and not a footnote. At this scale, with this cadence, an idle or generating co-resident cost the reader nothing this instrument can resolve. That is a finding, and it is *not* evidence that co-residency is free at every scale. wall\\_s is POST leaving the prober to the ruling page's bytes in hand and **includes the app's queue**, deliberately: when ten people ask inside a hundred seconds and the box answers one at a time, nine of them wait, and a figure that hid the queue would be measuring the app's politeness. Every transition is observed at the app's own one-second poll and is accurate to within one interval; none of these is a server timestamp.\n\n**Twilight Imperium: Fourth Edition \u00b7 6p \u00b7 send offset s: 0.006 \u00b7 queue wait s: 0.740 \u00b7 generation s: 17.674 \u00b7 wall s: 19.339 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, idle\n- **send offset s** \u2014 0.006\n- **queue wait s** \u2014 0.740\n- **generation s** \u2014 17.674\n- **wall s** \u2014 19.339\n- **asks ahead @poll** \u2014 \u2014\n- **overlap** \u2014 no\n\n**Star Wars: Rebellion \u00b7 4p \u00b7 send offset s: 10.016 \u00b7 queue wait s: 8.698 \u00b7 generation s: 14.223 \u00b7 wall s: 23.850 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, idle\n- **send offset s** \u2014 10.016\n- **queue wait s** \u2014 8.698\n- **generation s** \u2014 14.223\n- **wall s** \u2014 23.850\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Gaia Project \u00b7 4p \u00b7 send offset s: 20.016 \u00b7 queue wait s: 13.242 \u00b7 generation s: 5.507 \u00b7 wall s: 19.625 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, idle\n- **send offset s** \u2014 20.016\n- **queue wait s** \u2014 13.242\n- **generation s** \u2014 5.507\n- **wall s** \u2014 19.625\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Through the Ages: A New Story of Civilization \u00b7 3p \u00b7 send offset s: 30.010 \u00b7 queue wait s: 9.031 \u00b7 generation s: 8.205 \u00b7 wall s: 18.071 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, idle\n- **send offset s** \u2014 30.010\n- **queue wait s** \u2014 9.031\n- **generation s** \u2014 8.205\n- **wall s** \u2014 18.071\n- **asks ahead @poll** \u2014 2\n- **overlap** \u2014 no\n\n**Arkham Horror (Third Edition) \u00b7 4p \u00b7 send offset s: 40.016 \u00b7 queue wait s: 7.519 \u00b7 generation s: 9.857 \u00b7 wall s: 17.900 \u00b7 overlap: yes**\n\n- **regime** \u2014 co-resident, idle\n- **send offset s** \u2014 40.016\n- **queue wait s** \u2014 7.519\n- **generation s** \u2014 9.857\n- **wall s** \u2014 17.900\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 yes\n\n**Spirit Island \u00b7 3p \u00b7 send offset s: 50.027 \u00b7 queue wait s: 8.970 \u00b7 generation s: 9.702 \u00b7 wall s: 19.689 \u00b7 overlap: yes**\n\n- **regime** \u2014 co-resident, generating\n- **send offset s** \u2014 50.027\n- **queue wait s** \u2014 8.970\n- **generation s** \u2014 9.702\n- **wall s** \u2014 19.689\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 yes\n\n**Twilight Struggle \u00b7 2p \u00b7 send offset s: 60.021 \u00b7 queue wait s: 8.898 \u00b7 generation s: 9.625 \u00b7 wall s: 19.285 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, generating\n- **send offset s** \u2014 60.021\n- **queue wait s** \u2014 8.898\n- **generation s** \u2014 9.625\n- **wall s** \u2014 19.285\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Terra Mystica \u00b7 5p \u00b7 send offset s: 70.007 \u00b7 queue wait s: 7.610 \u00b7 generation s: 8.150 \u00b7 wall s: 16.314 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, generating\n- **send offset s** \u2014 70.007\n- **queue wait s** \u2014 7.610\n- **generation s** \u2014 8.150\n- **wall s** \u2014 16.314\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Dominant Species \u00b7 5p \u00b7 send offset s: 80.025 \u00b7 queue wait s: 6.134 \u00b7 generation s: 9.472 \u00b7 wall s: 16.550 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, generating\n- **send offset s** \u2014 80.025\n- **queue wait s** \u2014 6.134\n- **generation s** \u2014 9.472\n- **wall s** \u2014 16.550\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Robinson Crusoe: Adventures on the Cursed Island \u00b7 2p \u00b7 send offset s: 90.022 \u00b7 queue wait s: 5.940 \u00b7 generation s: 11.264 \u00b7 wall s: 17.690 \u00b7 overlap: no**\n\n- **regime** \u2014 co-resident, generating\n- **send offset s** \u2014 90.022\n- **queue wait s** \u2014 5.940\n- **generation s** \u2014 11.264\n- **wall s** \u2014 17.690\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Twilight Imperium: Fourth Edition \u00b7 6p \u00b7 quiet re-ask \u00b7 send offset s: 0.004 \u00b7 queue wait s: 0.523 \u00b7 generation s: 16.614 \u00b7 wall s: 18.092 \u00b7 overlap: no**\n\n- **regime** \u2014 quiet \u2014 no co-resident\n- **send offset s** \u2014 0.004\n- **queue wait s** \u2014 0.523\n- **generation s** \u2014 16.614\n- **wall s** \u2014 18.092\n- **asks ahead @poll** \u2014 \u2014\n- **overlap** \u2014 no\n\n**Spirit Island \u00b7 3p \u00b7 quiet re-ask \u00b7 send offset s: 10.007 \u00b7 queue wait s: 7.481 \u00b7 generation s: 9.679 \u00b7 wall s: 18.123 \u00b7 overlap: no**\n\n- **regime** \u2014 quiet \u2014 no co-resident\n- **send offset s** \u2014 10.007\n- **queue wait s** \u2014 7.481\n- **generation s** \u2014 9.679\n- **wall s** \u2014 18.123\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\n**Robinson Crusoe: Adventures on the Cursed Island \u00b7 2p \u00b7 quiet re-ask \u00b7 send offset s: 20.016 \u00b7 queue wait s: 7.597 \u00b7 generation s: 10.075 \u00b7 wall s: 18.207 \u00b7 overlap: no**\n\n- **regime** \u2014 quiet \u2014 no co-resident\n- **send offset s** \u2014 20.016\n- **queue wait s** \u2014 7.597\n- **generation s** \u2014 10.075\n- **wall s** \u2014 18.207\n- **asks ahead @poll** \u2014 1\n- **overlap** \u2014 no\n\nPer ask, with the overlap flag beside it \u2014 and the flag is where the honest part of this probe lives. Overlap is computed from timestamps, never from intent: the ask's window either intersected the co-resident's generation or it did not. The co-resident's one registered long generation was asked for 2 048 tokens and returned after **5.162 seconds** with 255 characters and every counter null \u2014 the same unexplained null-counter anomaly the stopwatch leg publishes. So the \u201cactively generating\u201d regime was actively generating for about five seconds of its fifty, and exactly two asks' windows intersected it: one of them labelled idle and one labelled generating. Where the registered regime label and the measured overlap disagree, the row publishes both and the measurement is what it says. The three quiet baselines re-ask the drip's own first, sixth and tenth books: the same-book deltas are +1.247 s, +1.566 s and \u22120.517 s \u2014 two slower with the bench on the card, one faster, on a one-second instrument.\n\n**Brass: Birmingham \u00b7 4p \u00b7 send offset s: 0.005 \u00b7 queue wait s: 0.573 \u00b7 generation s: 8.155 \u00b7 wall s: 9.598 \u00b7 completion order: 1**\n\n- **send offset s** \u2014 0.005\n- **queue wait s** \u2014 0.573\n- **generation s** \u2014 8.155\n- **wall s** \u2014 9.598\n- **asks ahead @poll** \u2014 \u2014\n- **completion order** \u2014 1\n\n**Ark Nova \u00b7 4p \u00b7 send offset s: 2.018 \u00b7 queue wait s: 7.348 \u00b7 generation s: 10.623 \u00b7 wall s: 19.051 \u00b7 completion order: 2**\n\n- **send offset s** \u2014 2.018\n- **queue wait s** \u2014 7.348\n- **generation s** \u2014 10.623\n- **wall s** \u2014 19.051\n- **asks ahead @poll** \u2014 1\n- **completion order** \u2014 2\n\n**Scythe \u00b7 5p \u00b7 send offset s: 4.010 \u00b7 queue wait s: 15.426 \u00b7 generation s: 5.659 \u00b7 wall s: 21.952 \u00b7 completion order: 3**\n\n- **send offset s** \u2014 4.010\n- **queue wait s** \u2014 15.426\n- **generation s** \u2014 5.659\n- **wall s** \u2014 21.952\n- **asks ahead @poll** \u2014 2\n- **completion order** \u2014 3\n\n**Anachrony \u00b7 4p \u00b7 send offset s: 6.021 \u00b7 queue wait s: 19.268 \u00b7 generation s: 10.891 \u00b7 wall s: 31.139 \u00b7 completion order: 4**\n\n- **send offset s** \u2014 6.021\n- **queue wait s** \u2014 19.268\n- **generation s** \u2014 10.891\n- **wall s** \u2014 31.139\n- **asks ahead @poll** \u2014 3\n- **completion order** \u2014 4\n\n**A Feast for Odin \u00b7 4p \u00b7 send offset s: 8.012 \u00b7 queue wait s: 28.309 \u00b7 generation s: 5.443 \u00b7 wall s: 34.433 \u00b7 completion order: 5**\n\n- **send offset s** \u2014 8.012\n- **queue wait s** \u2014 28.309\n- **generation s** \u2014 5.443\n- **wall s** \u2014 34.433\n- **asks ahead @poll** \u2014 3\n- **completion order** \u2014 5\n\nFive friends reaching for the app at once, two seconds apart. This is the probe where the pre-registered falsifier fires the other way: **the queue is most of the wall.** The last ask waited 28.309 s of its 34.433 s total, and its generation \u2014 5.443 s \u2014 was the fastest of the five. The app's own wait page says it: generation runs one at a time, the model serializes. A burst does not make the box slower; it makes the queue longer, and the reader pays the queue. **\u201cAsks ahead @poll\u201d is an observation, not a computed concurrency**: it is the largest queue depth the app itself displayed to that ask, scraped at the one-second poll, and the ask currently generating is the holder rather than something \u201cahead\u201d. On a saturated queue the field therefore reads one lower than the number of asks actually in flight \u2014 this record set's last row is the worked example, printing 3 while four earlier asks were still unfinished at its send. Both facts ship: the field as the app showed it, and every record's send and end epochs, so the in-flight count can be recomputed.\n\n**Terraforming Mars \u00b7 2p \u00b7 trial: 1 \u00b7 arrival: slot a \u00b7 queue wait s: 0.630 \u00b7 wall s: 6.836 \u00b7 second-arrival penalty s: \u2014 \u00b7 finished first: yes**\n\n- **trial** \u2014 1\n- **arrival** \u2014 slot a\n- **queue wait s** \u2014 0.630\n- **wall s** \u2014 6.836\n- **second-arrival penalty s** \u2014 \u2014\n- **finished first** \u2014 yes\n\n**Terraforming Mars \u00b7 5p \u00b7 trial: 1 \u00b7 arrival: slot b \u00b7 queue wait s: 6.362 \u00b7 wall s: 15.369 \u00b7 second-arrival penalty s: 8.533 \u00b7 finished first: no**\n\n- **trial** \u2014 1\n- **arrival** \u2014 slot b\n- **queue wait s** \u2014 6.362\n- **wall s** \u2014 15.369\n- **second-arrival penalty s** \u2014 8.533\n- **finished first** \u2014 no\n\n**Dune: Imperium \u00b7 2p \u00b7 trial: 2 \u00b7 arrival: slot a \u00b7 queue wait s: 0.526 \u00b7 wall s: 6.295 \u00b7 second-arrival penalty s: \u2014 \u00b7 finished first: yes**\n\n- **trial** \u2014 2\n- **arrival** \u2014 slot a\n- **queue wait s** \u2014 0.526\n- **wall s** \u2014 6.295\n- **second-arrival penalty s** \u2014 \u2014\n- **finished first** \u2014 yes\n\n**Dune: Imperium \u00b7 4p \u00b7 trial: 2 \u00b7 arrival: slot b \u00b7 queue wait s: 6.157 \u00b7 wall s: 16.333 \u00b7 second-arrival penalty s: 10.038 \u00b7 finished first: no**\n\n- **trial** \u2014 2\n- **arrival** \u2014 slot b\n- **queue wait s** \u2014 6.157\n- **wall s** \u2014 16.333\n- **second-arrival penalty s** \u2014 10.038\n- **finished first** \u2014 no\n\n**Caverna: The Cave Farmers \u00b7 2p \u00b7 trial: 3 \u00b7 arrival: slot a \u00b7 queue wait s: 10.356 \u00b7 wall s: 20.492 \u00b7 second-arrival penalty s: 9.219 \u00b7 finished first: no**\n\n- **trial** \u2014 3\n- **arrival** \u2014 slot a\n- **queue wait s** \u2014 10.356\n- **wall s** \u2014 20.492\n- **second-arrival penalty s** \u2014 9.219\n- **finished first** \u2014 no\n\n**Caverna: The Cave Farmers \u00b7 7p \u00b7 trial: 3 \u00b7 arrival: slot b \u00b7 queue wait s: 0.636 \u00b7 wall s: 11.273 \u00b7 second-arrival penalty s: \u2014 \u00b7 finished first: yes**\n\n- **trial** \u2014 3\n- **arrival** \u2014 slot b\n- **queue wait s** \u2014 0.636\n- **wall s** \u2014 11.273\n- **second-arrival penalty s** \u2014 \u2014\n- **finished first** \u2014 yes\n\nTwo asks released at the same instant by a barrier, three times, same book at two player counts so the difference is arrival order rather than rulebook length. The second arrival paid 8.533 s, 10.038 s and 9.219 s. Which one arrived second is not something the sender chooses: in the third trial the ask in slot b finished first.\n\n**War of the Ring: Second Edition \u00b7 2p \u00b7 trial: 1 \u00b7 quiet window s: 375.4 \u00b7 queue wait s: 0.878 \u00b7 generation s: 13.911 \u00b7 wall s: 15.367**\n\n- **trial** \u2014 1\n- **quiet window s** \u2014 375.4\n- **queue wait s** \u2014 0.878\n- **generation s** \u2014 13.911\n- **wall s** \u2014 15.367\n- **seat at window close** \u2014 seat resident at window close \u2014 a cold QUEUE, not a cold seat\n\n**Mage Knight Board Game \u00b7 3p \u00b7 trial: 2 \u00b7 quiet window s: 372.3 \u00b7 queue wait s: 0.801 \u00b7 generation s: 10.875 \u00b7 wall s: 12.230**\n\n- **trial** \u2014 2\n- **quiet window s** \u2014 372.3\n- **queue wait s** \u2014 0.801\n- **generation s** \u2014 10.875\n- **wall s** \u2014 12.230\n- **seat at window close** \u2014 seat resident at window close \u2014 a cold QUEUE, not a cold seat\n\nThe day's first walker, after a registered six-minute silence with no asks and no re-pin kicks. Both walls came in *under* the quiet baselines above \u2014 and the reason is the caveat, not the finding: **the seat was still resident at both windows' close**, because production holds it. This probe measured a cold QUEUE, not a cold seat. A genuinely cold seat would cost a model load on top of everything printed here, and this instrument cannot make the box that cold without taking the seat away from the people using it.\n\nTwenty-six asks registered, twenty-six sent, twenty-six served, zero unspent; the registered content marker was found in all twenty-six rulings. The harness refuses to run if its ask count differs from the pre-registered integer and refuses to send an ask that is not in the frozen file: the budget is code, not discipline. Game is a confound ACROSS probes \u2014 each probe uses different books, so a drip wall and a burst wall are not comparable, and the three paired baselines are the only place a regime difference can be read cleanly. Two trials is not a distribution; the cold rows are two walls with their receipts. Every ask, every poll, every epoch: [data/c6-serving.json](data/c6-serving.json), with the frozen ask file at [data/c6-asks.json](data/c6-asks.json) (CC BY 4.0).\n\n## What the day actually settled {#what-the-day-actually-settled}\n\n- **Different chairs want different talents \u2014 measured, not asserted.** The best judge flunked the toolbench's contract carrier; the best assistant cannot hold the judge's schema; the best voice in the house is the smallest model on the page. A single leaderboard would have averaged all of this into nothing.\n- **The contract is a real axis, separate from capability.** Across five legs, most failures were contract failures with the capability visibly intact underneath \u2014 fenced JSON hiding perfect verdicts, budgets eaten by traces, envelopes dropped by a posture flag. If you run local models in production, you are managing contracts as much as choosing weights.\n- **Posture, not vintage.** Both of yesterday's questions got their answer: given era-sized budgets, the thinking class judges, assists, and speaks competitively \u2014 and the specific contracts it still cannot hold are named, with receipts, per row.\n- **A working box can bench itself honestly.** Serving stayed up all day; what it cost the people using the box is measured on the page; the bench found a production bug and its cure. The disclaimer became an instrument.\n\n## Limits, stated plainly {#limits-stated-plainly}\n\nOne box, one runtime version, one day; quantizations differ per row and are printed, never equalized. The judge set is synthetic entailment over public-domain text \u2014 a weaker instrument than [exhibit two's human-verified field key](../seat-trials/), and audit-ready precisely because every case ships whole. Voice judges on this page are LLMs from two families, one of which authored the probes and this page; per-family splits are published, and the one family-line split verdict sits in the voice addendum's abstention round, where it happened. Since this bench was scored, judges from four more vendors have re-judged the narrator rounds \u2014 [the outside judges exhibit](../outside-judges/) carries the agreement tables and the places they genuinely differ. The census reads two live-workload residents as-found rather than under bench control, and says so per row.\n\nAnd the serving probes carry four of their own, each of them a limit on what those twenty-six asks can be made to mean. **The poll interval is a floor**: nothing in that leg resolves faster than one second, and every transition is quantised to it. **The regimes did not separate** \u2014 all three drip regimes read TIED, which is a finding about this scale and this cadence and not a licence to call co-residency free. **The treatment was weaker than the design intended**: the co-resident's generation lasted about five seconds rather than the fifty its regime spans, so only two asks' windows actually overlapped it, and the flags say which. And **the cold probe measured a cold queue, not a cold seat**: production held the seat resident through both quiet windows, so the wall a genuinely cold visitor would pay is larger than either figure printed here by an unmeasured model load.\n\n## What to take with you {#what-to-take-with-you}\n\n- **Different chairs want different talents \u2014 and the same model can hold one and fail the next.** Muse Glimmer is, by the checkers\u2019 own count, the best everyday assistant on the box \u2014 seventeen of twenty with thinking off and sixteen with it on, TIED under the registered rule, a perfect thirteen of thirteen on the exact-checked half in both postures \u2014 and it still cannot hold the judge chair\u2019s schema. `gemma4:12b`, the smallest model on the page, holds the narrator\u2019s top band at a 0.685 win-rate. A single leaderboard would have averaged all of this into nothing.\n- **A broken contract is not a broken model.** Three judge rows read UNMEASURABLE or NOT-CARRIED under the strict parse, and every single strict failure was the same cosmetic act: valid JSON wrapped in a markdown code fence. The diagnostic parse recovers all of them \u2014 63/63, 56/56, 33/33 \u2014 so what that rule measured is a runtime breaking a response contract, not a model that cannot judge. If you run local models in production, you are managing contracts as much as choosing weights.\n- **Two rows judged clean, and they answer the question [the previous exhibit](../august-arrivals/) left open.** `qwen3.5:27b` and `qwen3.6:27b` cleared both floors while RANKED \u2014 eleven of twelve kills, nine of nine preservations, twenty-one of twenty-one self-consistent, zero response failures each. The same family that could not hold July\u2019s tight budget judges cleanly the moment the budget fits its posture: same judgment, different box.\n- **Fastest on the clock, absent from the toolbench.** `nemotron-3.5-lightning:30b-a3b` is the one arm the stopwatch\u2019s own rule can separate from the field \u2014 112.43\u2013112.63 tok/s at 1k, a 249 ms first-token proxy where the next-fastest arm\u2019s is 409 \u2014 and it is also the arc\u2019s one NOT-CARRIED, with zero of two parseable tool calls in the pre-probe and prose carrying an invented clock time where a tool call belonged. The whole cost of finding that out was two calls.\n- **The queue is most of the wall.** In the five-ask game-night burst the last ask waited 28.309 s of its 34.433 s total \u2014 and its generation, 5.443 s, was the fastest of the five. A burst does not make the box slower; it makes the queue longer, and the reader pays the queue. Twenty-six real asks were registered, sent and served across the serving probes, and all three drip regimes read TIED.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\nStart by sitting the exams yourself \u2014 all five chairs ship whole, as runnable sets rather than as descriptions of sets. The twenty-one claim, span and verdict triples are in [judge-c1.json](data/judge-c1.json); the twenty assistant items in [assistant-c2.json](data/assistant-c2.json), with every checker\u2019s own rule written out in [CHECKERS.md](data/CHECKERS.md); the nineteen tool tasks and their call predicates in [tools-tasks.json](data/tools-tasks.json), beside [the ten schemas exactly as the models received them](data/tools-schemas.json) and one complete round-by-round [transcript](data/c3-example-trace.json); the narrator questions with their canon notes in [voice-questions.json](data/voice-questions.json). Point them at your own thirty-billion candidate and find out whether these numbers reproduce on your box. Every record set above is machine-readable too \u2014 [c1-judge.json](data/c1-judge.json) through [c6-serving.json](data/c6-serving.json), with [roster.json](data/roster.json) carrying the raw residency bytes and [counting-rules.json](data/counting-rules.json) the rules that turned calls into counts \u2014 so any figure here can be re-derived rather than taken. A hash proves identity, not time, so hold a pre-registration, hash it and compare it against the two shas per leg in [provenance.json](data/provenance.json). And if you run a serving box of your own, the checkpoint pattern in the kit will find this class of silent seat reload on yours \u2014 and the audit pattern will keep you honest about whose bug it turned out to be.\n\nThen go and use the machine these chairs actually serve. The judge chair is not a metaphor: it is the seat behind [RuleSage](https://rulesage-live.strata2signal.com/), and `gemma4:26b` sits on the roster above as the live judge seat, read from the daemon while production held it. Ask it a real rules question and you walk the exact production path the serving probes measured \u2014 POST the ask, follow the redirect, watch the wait page poll at its own one-second cadence, read the ruling. Twenty-six of those asks are in the records above, every one a real board game off the live shelf, every one served, with a heavyweight bench candidate on the same card. Take whatever is useful (CC BY 4.0, the whole page and not only the kit) \u2014 and carry each figure\u2019s outcome word with it, because RANKED, EXPLORATORY, UNMEASURABLE, NOT-CARRIED and NOT-RUN are five different findings, and a number without its word is a claim this page did not make.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\n[The new kid](../the-new-kid/) takes the next arrival through these same chairs, one model at a time instead of nine; [the seat trials](../seat-trials/) is where chair one\u2019s floors come from \u2014 derived by published rule from that exhibit\u2019s ratios \u2014 and its human-verified field key is the stronger instrument this page measures its own synthetic judge set against. [The whole shelf](../) is one click up. And the rows behind any figure here are yours for the asking, including the megabyte and a half of tool transcripts we hand over on request rather than publish in bulk \u2014 [drop us a line](https://strata2signal.com/contact/).\n\n## Provenance {#provenance-872bea}\n\n- Pre-registered per leg, sha-pinned, committed before first scored calls\n- Independently recounted (committed non-importing scorer, every leg)\n- Adversarially verified where authored (6/6 canaries)\n- Five-state outcomes, fence rates, and failure ledgers as named columns\n- Judges identified by model id; blinding and counterbalancing receipts in the kit\n- Hardware by class, cohabitation measured in both directions\n- Machine-readable: every table's rows, golden sets, tool schemas, task fixtures, counting rules, and provenance hashes under data/ (CC BY 4.0; published 2026-08-13; later-cutoff models may have seen these sets \u2014 we author fresh sets each cycle)\n- Authorship: benched, drafted, and audited by the workshop's own agents under a human operator's rulings, then revised with that operator \u2014 often across many rounds; nothing releases until they have read it and signed off. The same division of labor this whole hub practices \u2014 [told in full here](../how-we-work/). Where that authorship is also a conflict it is disclosed on the row it affects, and named below\n- Limits stated\n- **Corrected after publication** \u2014 2026-08-16, by a content-accuracy pass run over this page against its own kit. Two stale sentences, both of them labels rather than figures, and both named here rather than quietly swapped. The narrator note above opened *\u201cDistinctness and canon ran on three of the four judges\u201d* and pointed a reader at missing batches named in the companion. Neither was true by the time this page published: the batches had been misfiled, not lost, and were recovered before scoring, which the note\u2019s own second half already said. [c4-narrator.json](data/c4-narrator.json) has carried the recovered state in every field since it was written \u2014 four seats at 108 distinctness assignments each, four at 36 canon judgements each, and an empty `unscored\\_batches` in all three legs \u2014 so no figure on this page moves. The kit\u2019s own `judges.canon\\_and\\_distinctness\\_panel` carried the same stale sentence and was corrected in the same pass, as was one exhibit number in [voice-questions.json](data/voice-questions.json), which called this exhibit *five* where the chair trials publish as **six**. Nothing in this kit sits behind a seal manifest, so both corrections are made in place, said in the corrected file\u2019s own text, and re-hashed in [the kit index](data/index.json) and its README\n- Raw rows on request \u2014 [drop a line](https://strata2signal.com/contact/).\n\n**Who wrote the exams.** Every exam in this arc was written in this workshop \u2014 the twenty-one judge cases, the twenty assistant items and the code that checks them, the nineteen tool tasks and their call predicates, and the twelve narrator items \u2014 rather than taken from a public benchmark. Only chair four's authorship is also a conflict, and it is disclosed on the row it affects: one of the two judge families wrote the character questions, the canon notes and the article, and that panel's own numbers print beside the other's. For the other three sets the answer to \"who decided what counts as right\" is a file, not a person: the judge cases were adversarially verified before freezing by a separate fan that caught six of six deliberately planted canaries, and all four sets ship whole in this kit so their neutrality can be audited rather than taken on trust.\n\n**A hash proves identity, not time.** A sha says what a file contains, never when it started containing it \u2014 so the kit publishes two per leg: the one in force at that leg's first scored call, and the one as published. Hold a pre-registration, hash it, compare. The nine files are five leg registrations for this bench, the two addenda, the panel extension and the gauntlet. Seven of them are byte-identical to what they were when the numbers arrived. The other two were appended to after their leg's first scored call, three times between them, and both say so above the appended line. No case, arm, tier, item, metric, floor, ceiling or counting rule moved in any of the three: they are harness defects, their fixes, a completion run and a scheduling gate. The three entries, with what each one changed, are in [data/provenance.json](data/provenance.json).\n\n**Licence: CC BY 4.0 \u2014 the whole page, not only the kit.** The prose, the tables, the folds and the data are yours to quote, re-plot, translate and argue with, including commercially. What we ask back is the one thing the licence already requires: name the source and link to it \u2014 `strata\u2192signal research, research.strata2signal.com` \u2014 so a reader of your version can reach ours and check it against the files. Something like \u2014 `strata\u2192signal research, \u201cThe chair trials\u201d, research.strata2signal.com/chair-trials/, CC BY 4.0`. And if you quote a figure, carry its outcome word with it \u2014 RANKED, EXPLORATORY, UNMEASURABLE, NOT-CARRIED and NOT-RUN are five different findings, and a number without its word is a claim this page did not make. An em dash here is a figure we do not hold; it is never a zero.\n\n## The short version {#top}\n\n*On August 11th and 12th, four newly arrived open models sat our existing exams and none could hold the July response contract \u2014 the whole story is in [the previous exhibit](../august-arrivals/). A fair objection writes itself: maybe the exam was the problem. So we built five new ones, sized for how models answer now \u2014 five chairs with real employers: the judge that checks claims inside a rules companion, the assistant a self-hosted shop leans on daily, the toolbench an agency's work runs through, the narrator that voices a game's living characters, and the stopwatch that prices all of it \u2014 and put the thirty-billion class through them in a single day \u2014 August 12th. **Nine models across five trials, on one 96G workstation that stayed in service throughout; the roster prints which chairs each model sat.** Every trial was pre-registered before its first scored call; every scored number below was re-derived by an independent recount; every table ships its rows machine-readable. This is the full bench.*\n\n**the short version:** Nine models, eleven arms, five all-new exams in one day \u2014 on a box that never stopped serving its real users.\n\n>>>\n\n<<<\n\n## A music model you can run at home {#a-music-model-you-can-run-at-home}\n\nACE-Step 1.5 is a music generator that works the way image generators do, but for sound:\nyou type a short description of the music you want \u2014 optionally with lyrics \u2014 and it\nplays you finished stereo audio, minutes long at 48 kHz, that it invented on the spot.\nIt is open-weights under the MIT licence, which means the model itself is free to\ndownload and run, all 2.4 billion parameters of it \u2014 the adjustable numbers inside it \u2014\non one ordinary graphics card in your own machine. No account, no cloud, no per-song\nfee. It ships in a fast variant and a slower one that takes roughly six times as many\nrendering steps; everything on this page uses the fast variant.\n\nOut of the box it is a generalist: name a style and it will attempt it. What it doesn't\nhave is *your* taste, or a deep commitment to any one corner of music. That is the gap\nthis article is about.\n\n## What it sounds like on its own {#what-it-sounds-like-on-its-own}\n\nBefore teaching it anything, listen to what it already does. We asked for sixty seconds\nof solo piano with this exact request, verbatim:\n\n> pd-shakedown, solo piano nocturne, romantic era, expressive rubato, gentle left-hand\n> arpeggios, intimate close-miked grand piano, instrumental\n\n(That odd first \"word\" is a made-up label \u2014 the next section explains what it is for.)\n\n> \ud83d\udd0a **Listen 1 \u2014 the model with nothing added** \u00b7 sha256 (first 16) `dffb1ddde7bbf477`\n\nThat is the model with nothing added \u2014 one sentence of request and no Chopin at all. It is\nthe floor every other clip on this page is measured against. What changes it is a file\nsmaller than a photo album. Here is what that file is.\n\n## The trick: a small adapter, not a new model {#the-trick-a-small-adapter-not-a-new-model}\n\nRetraining all 2.4 billion parameters on your own music would outgrow one consumer card\non arithmetic alone \u2014 the weights, their gradients, and the optimizer's bookkeeping \u2014\nand take a great deal more than an evening. The trick that makes this an evening\nproject instead is called **LoRA**: it leaves the big model completely frozen and\ntrains a small add-on that rides on top of it, nudging its behaviour toward whatever\nthe add-on was trained on. Think of a lens screwed onto a camera body: the camera is\nuntouched, the picture changes, and you can unscrew it.\n\nOur add-on \u2014 an **adapter**, from here on \u2014 is a single 88-megabyte file. It adds about\n44 million parameters of its own, under two percent of the model's. Detach it and the\nbig model is exactly what it was; the same file works for anyone running the same model.\n(Adapters have one main capacity knob, called *rank* \u2014 ours is set to 64. What that knob\nactually buys is a later piece's question.)\n\nTwo small mechanics, because the experiment below depends on them. First, the made-up\nlabel in the request \u2014 `pd-shakedown` \u2014 is the adapter's name tag: every recording it\ntrained on carried that label in its caption, so the finished adapter was trained with\nit always in place, and we render with it in place too. That way the request never\nchanges; only the adapter does. Second, the adapter's strength is a dial from zero to\nfull, and turning it to zero cancels everything the adapter contributes \u2014 which is\nwhy Listen 1 above, rendered with the adapter attached and turned to zero, is the\ncleanest possible baseline: every clip below differs from it in exactly one way.\n\n## Five minutes of training, honestly accounted {#five-minutes-of-training-honestly-accounted}\n\n**The corpus.** Twenty-four recordings of Chopin \u2014 nocturnes, ballades, impromptus \u2014\nfrom Musopen, a non-profit whose crowd-funded campaign, called \u2014 with no ambiguity at all \u2014\n*Set Chopin Free*, paid for newly commissioned recordings in order to give them away\nunder the CC0 public-domain dedication. Chopin died in 1849, so the music itself has\nbeen out of copyright for over a century; what Musopen freed was the *recordings*, which\nare normally the licensing problem. We verified that chain rather than trusting a label\non a file.\n\nOne wrinkle from that verification: the campaign's own FAQ \u2014 where the CC0 promise was\nmade \u2014 had to be read from an Internet Archive snapshot, because the live crowdfunding\nsite answers any client that isn't a browser with a refusal, and we don't disguise our\ntools as browsers.\n\nNineteen of the twenty-four recordings went into training; five were held back, split by\n*piece* rather than by file so the same piece can never sit on both sides of the test \u2014\nreserved for a test that hasn't run yet. One honest residue: the training set holds two\ndifferent recordings of the same nocturne \u2014 mild memorisation pressure, written down\nhere so it can't hide later. Each training clip was captioned mechanically \u2014 the name\ntag, \"solo piano,\" and the filename itself. Nobody wrote descriptions.\n\n**The machine.** A five-year-old RTX 3090 \u2014 24 gigabytes of memory, power-capped at 250\nwatts \u2014 in a consumer-grade box whose motherboard, memory, and nearly everything else\ndates to about 2021. Nothing in this story required new hardware.\n\n**The training.** The run: 2026-08-29, ten passes over the nineteen recordings. The\nrecordings go through four at a time, so each pass makes five weight updates \u2014 fifty in\nall, a startlingly small number of times to change a model's mind about anything \u2014 in\n**4 minutes 49 seconds** by the trainer's own clock (4:51 counting loading the model and\nsaving the adapter). Peak memory inside the training process: 5.7 gigabytes by the\ntrainer's own bookkeeping; the card itself showed 6.8 in use a minute into the run\n(7,003 MiB on its own meter, a reading that also includes a small always-on embedding\nmodel sharing the card) \u2014 under a third of the card either way. Small enough to raise\nan obvious question: would the GPU in an ordinary gaming laptop have done this? We\nhaven't measured it, so we don't know \u2014 the test is queued, and a later piece will\nreport the answer either way.\n\nFor anyone reproducing it, the settings in full \u2014 skip this if it means nothing to you:\nLoRA rank 64 (alpha 128, dropout 0.1) on the model's attention projections, batch size 1\nwith 4-step gradient accumulation, gradient checkpointing on and bf16 throughout,\nlearning rate 1e-4 on a cosine schedule, training samples capped at four minutes each,\nagainst the model's fast variant, random seed fixed at 42. The memory figure above was\nmeasured at exactly this configuration \u2014 keep every flag if you want the same peak.\n\nHere is what that bought, and exactly where it stops. The trainer's per-pass training\nerror fell from 0.94 to 0.61 across the ten passes \u2014 with one bump upward at pass\nnine \u2014 so the adapter learned *something* from those nineteen recordings. It does not\nfollow that the something is Chopin. That distinction runs through everything below.\n\n## The dial {#the-dial}\n\nHere is the whole experiment in five clips. The same request as Listen 1, the same\nrendering seed, the same settings \u2014 the only thing that moves is the adapter's strength:\nhow much of its full effect is applied, from none of it to all of it. We know that holds\nbecause everything else was pinned, and because submitting the identical request twice\nproduces byte-identical files \u2014 verified on the full-strength clip itself. Any\ndifference you hear is the dial and nothing else.\n\n> \ud83d\udd0a **0% \u2014 the same clip as Listen 1 above** \u00b7 `dffb1ddde7bbf477`\n\n> \ud83d\udd0a **Listen 2 \u2014 the dial at 25%** \u00b7 `a5c545d2ccc305a2`\n\n> \ud83d\udd0a **Listen 3 \u2014 the dial at 50%** \u00b7 `ade46063bda30988`\n\n> \ud83d\udd0a **Listen 4 \u2014 the dial at 75%** \u00b7 `5b0dbc18d58e41e3`\n\n> \ud83d\udd0a **Listen 5 \u2014 full strength** \u00b7 `4a7dd68409b8fc41`\n\n*Each code is the first 16 characters of that file's sha256; every clip on this page is AI-generated.*\n\nRendering each sixty-second clip took two to four seconds, on another consumer GPU. As\nyou climb the ladder, there is no wrong thing to notice \u2014 but three things worth\nlistening for: how the left hand moves, whether the tempo breathes or marches, and how\nmuch room there seems to be around the piano.\n\nNow the honesty line, stated once and meant everywhere. To check that the clips really\ndiffer, we line two of them up and compare them moment by moment, adding up how far\napart the two waveforms sit. By that ruler, each step of the dial moves the audio\nmeasurably further from the 0% baseline \u2014 no step backtracks. But it is a crude ruler:\nit tells you how much the sound changed, never whether it changed in a Chopin-shaped\ndirection. (A later piece measures just *how* crude, and it is humbling \u2014 though crude\nrulers can still prove that five things are five different things.) And no formal,\nblinded listening test has been run on these clips; building that test properly is its\nown project, and a later chapter of this series. On this page, your ears are the\ninstrument, and your verdict is as good as ours.\n\n## What we did NOT measure {#what-we-did-not-measure}\n\nWhether any clip on this page *sounds like Chopin* \u2014 no blinded listening test has been\nrun, and building one properly is its own project. Whether the tempo and key we pinned\nin the request were actually honoured in the audio \u2014 pinning a thing and getting it are\ndifferent claims, and we checked neither here. Whether a smaller GPU could have run this\ntraining \u2014 the test is queued, and a later piece reports it. What happens past ten\npasses. And the five held-back pieces are still waiting for the test they were held\nback for.\n\n## What to take with you {#what-to-take-with-you}\n\n- A style adapter is a small, detachable file: 88 megabytes riding on a\n  2.4-billion-parameter model, and the model itself is never touched.\n- Teaching it one composer took under five minutes, fifty weight updates, and a\n  five-year-old consumer graphics card in a 2021-era box. The cost of *trying* has\n  effectively vanished.\n- The captions that taught it were mechanical \u2014 a made-up name tag plus the filename.\n  Nobody wrote a word of description.\n- Read the rights chain, not the licence flag. Every recording here traces to a\n  crowd-funded project whose whole purpose was giving the recordings away \u2014 and we\n  checked that at the source, not the label.\n- The dial provably changes the sound, and in strict order. But \"changed\" is not\n  \"Chopin\" \u2014 no listening gate has ruled, and your ears are as good as ours.\n\n## How to check our work {#how-to-check-our-work}\n\nEvery number on this page traces to the training log's own per-pass lines, the render\nservice's records, or a rights receipt read at acquisition time. The data kit beside\nthis article carries the full sha256 fingerprints and the map from each player to its\nfile, the request payload verbatim, the training log's epoch lines, the corpus manifest\nwith its checksums, and the rights-chain receipts. The request printed above is\ncharacter-exact; the clips are the exact bytes we measured.\n\n## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThe recordings that taught the adapter: Musopen's *Set Chopin Free* project, dedicated\nto the public domain under CC0 \u2014 a dedication that demands no credit, which is exactly\nwhy we give it. The model: ACE-Step 1.5 (MIT), whose model card asks users to clearly\ndisclose AI involvement \u2014 every clip on this page is AI-generated, and says so. The\ntrainer: Side-Step (github.com/koda-dernet/Side-Step), the corrected-timestep LoRA\ntrainer vendored in ACE-Step 1.5; its upstream licence is CC BY-NC-SA 4.0, though the\nvendored copy says it follows ACE-Step's MIT \u2014 we proceed on the stricter reading, and\nwrote to ask.\n\nAnd beneath all of it, the open tools this work stood on without modifying: PyTorch and\ntorchaudio, which ran the training; Hugging Face's PEFT library, which is the LoRA\nmachinery itself; FFmpeg, the decoder that read every training file; and the Internet\nArchive's Wayback Machine, which held the licence page the living web refused us. None\nof them owed us anything. A small team and a fleet of AI agents did the work; the\nhumans signed the numbers.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nThis was the first adapter we trained, and the simplest possible story about it. The\nsame week, the same recipe taught the same model two more dead composers: **John Philip\nSousa** \u2014 a corpus of a hundred and six marches by a full military band, which is where\nthings get loud \u2014 and **Johann Sebastian Bach**, whose recordings arrived with a\nlicensing story all their own. Between the three of them, the whole training bill came\nto just under half an hour of GPU time \u2014 a story that gets its own piece.\n\nAlso coming: what a corpus actually costs to teach \u2014 which turns out to be bought by\nthe second of audio, not by the track; what happens when you try to *blend* two\ncomposers into one adapter with linear algebra, where the obvious approach is\nmathematically wrong in an instructive way; and the measurements that lied to us\nuntil we caught them \u2014 this series has a standing rule of publishing its retractions\nwith the same care as its results. One piece at a time.\n\n## The short version {#top}\n\n*We took an open-source music generator, played it nineteen public-domain Chopin recordings for a total of four minutes and forty-nine seconds of training on a five-year-old graphics card, and got back a dial we can turn: one sentence of request, five clips, and nothing changing between them but how far the dial is open. This is a field guide to how that works \u2014 plain English, every claim carrying a receipt, and your ears making the only judgment that matters. It is the first piece of a series; the other dead composers are coming.*\n\n**the short version:** Nineteen public-domain Chopin recordings, four minutes and forty-nine seconds of training on a five-year-old graphics card, and a dial you can hear \u2014 five clips on the page that differ from each other in exactly one way.\n\n>>>\n\n<<<\n\n*Five words this page leans on.* A **corpus** is the body of text a model was trained on. A **token** is the unit a model predicts next \u2014 roughly a word, or a piece of one. **Compression** here is the strict kind: a short description that regenerates a long thing. The **codebook** is whatever the reader must already hold to decode it \u2014 for a language model, the weights. **Replay** is asking the same question at the same settings and checking that the same bytes come back.\n\nOn 2026-08-21, one of our bench probes went looking for determinism and found something better.\n\nThe setup was simple: ask a locally-run model the same question at the same settings, sampling turned all the way down, and confirm the same bytes come back \u2014 a receipt every measurement we run quietly depends on. Short answers replayed perfectly, identical across all five runs. Long, deliberative answers didn\u2019t replay at all: no repeat matched the first byte-for-byte, and our two model families diverged at characters 372 and 464 of roughly a thousand.\n\nThat looks like noise. It wasn\u2019t. The probe pinned it: the output depended on *what the machine had run immediately before*. One prior workload, one stable answer; another, a different one \u2014 each reproducible on its own. Two patterns, not zero. What looked like chaos was structure with a hidden variable, and the variable was history.\n\nYears before this company had a name, its founders talked late about that distinction. True randomness, the quantum kind, has \u2014 as far as physics can establish \u2014 no usable pattern underneath; some readings keep determinism deep down; none let you predict with it. Almost everything else that looks random wears chaos as a costume. The company that grew from that conversation is called strata \u2192 signal: dig through the layers, find the pattern pretending not to be there. We build local-first tools now \u2014 a rules assistant, a walking-tour maker, benches keeping them honest \u2014 and the founding idea turns out to explain the machines they run on.\n\n## Three people, one idea {#three-people-one-idea}\n\nIn the early 1600s, Johannes Kepler came into possession of decades of Tycho Brahe\u2019s planetary observations, the sharpest sky measurements yet made without a telescope. Kepler compressed them into three sentences plus a short column of numbers, a few orbital figures per planet \u2014 two laws in 1609, the third in 1619 \u2014 and when he ran the description back out into fresh tables in 1627, it held. Rule plus parameters, far shorter than the tables they regenerate: the shortness itself was the discovery. Kepler had demonstrated the thing this article is about: **understanding is compression.** A law is what you call a summary that stops leaking. And remember: the parameters counted; that comes back.\n\nSome three centuries later, in 1948, Claude Shannon gave information a unit: the bit, one yes-or-no answer\u2019s worth. Then, in the early 1960s, three people reached the same idea from three directions, independently. Ray Solomonoff came first, after a theory of induction, in a 1960 report almost nobody read. Andrei Kolmogorov \u2014 who in the 1930s had written the short rulebook that made probability real mathematics \u2014 arrived in 1965, defining information without presupposing probability. Gregory Chaitin, a teenager when he wrote his paper, published in 1966, chasing the randomness of finite strings. The idea now goes by **Kolmogorov complexity** \u2014 not quite fair, as Kolmogorov himself said, crediting Solomonoff\u2019s priority in print.\n\nWhat they found: the information in a thing is the length of its shortest description, and a thing is truly random exactly when no recipe for it is meaningfully shorter than itself. Pattern *is* compressibility. An idea so true it got discovered three times is an idea that was simply *there*, waiting.\n\nChaos, real chaos, is the stuff that won\u2019t compress \u2014 and right here the mathematics turns on our founding motto. Count the descriptions: short recipes are far scarcer than strings to produce, so almost every possible string has none shorter than itself. Incompressibility isn\u2019t rare; in the space of all that could be written, it\u2019s nearly universal. What\u2019s rare is meeting any of it. Orbits, grammars, tides, faces \u2014 what the world hands us keeps coming from the thin compressible sliver; why is its own deep question. \u201cAlmost nothing is true chaos\u201d is false of string-space and true of nearly every dataset anyone has cared to collect, and that gap is why science works at all. We live in the exception.\n\nThe idea carried a sting the same people proved within a decade: the shortest description, the true optimum, is **uncomputable**. It exists, well-defined once you fix the describing machine (change machines, it shifts by a bounded constant), yet no algorithm computes it \u2014 and past a ceiling set by its own size, no formal system can even *prove* a description shortest. Every compressor ever built approximates a floor that mathematics put permanently out of reach and out of sight. Put that in your pocket; it matters in a moment.\n\nFrom that root grew *minimum description length* \u2014 statistics\u2019 rule that the best theory is the shortest one written out beside whatever it fails to explain \u2014 and eventually a blunt thesis decades ahead of fashion: compression and intelligence might be two names for one ability.\n\n## The punchline {#the-punchline}\n\nThen someone industrialized it.\n\nTraining a large language model means minimizing how surprised it is by the next *token* of its training text \u2014 roughly a word, or a piece of one \u2014 across trillions of them for the largest publicly described models. Minimizing surprise and minimizing description length are formally the same job: you only write down what surprised you, so the better the prediction, the shorter the record. A model putting probability *p* on the next token buys a code about log\u2082(1/p) bits long \u2014 arithmetic coding, exactly the number the training loss reports.\n\nOne honest caveat, which returns in the receipts: the loss counts only the bits to describe *the text given the model*. The model\u2019s own bits \u2014 the weights \u2014 sit on a separate ledger line, and nothing in the next-token training loss charges for them.\n\nThe weights are not *like* a compressed archive of the corpus; they\u2019re the codebook for one \u2014 pair them with a coder and they\u2019ll squeeze that corpus smaller than the general-purpose compressors anyone has measured them against. What they hold is lossy and interpolating: not the sentences, but the shape the sentences made, drawn from a curated slice of what a crawler could reach, at one moment in history. Now the pocketed sting comes due: the optimum is uncomputable, so even the best model anyone has built is a reach toward a limit nothing can certify contact with \u2014 always headroom, and nobody can say how much.\n\nSo: **the weights are the compression.** That is the sentence this whole piece exists to hand you, because once you hold it, the mysteries fall in a row.\n\n**Bias.** A compressor carries the tilts of what it compressed, chosen and unchosen alike. Asking why a model has its corpus\u2019s tilts is close to asking why a zip file holds what you zipped \u2014 close, not identical: a shipped model gets tuned and steered afterward, which pushes some tilts around but can\u2019t restore what compression never kept. And mind the cure: inferring from context *is* thinking; a mind with no priors \u2014 no assumptions carried ahead of the evidence \u2014 can\u2019t cross a street. What matters is whether the guess stays *revisable*. A person\u2019s assumption dissolves on meeting the person; an archive\u2019s meets no one unless the system around it insists.\n\n**Hallucination.** Lossy compression discards detail; decompression papers over the gaps by interpolation. A model inventing a plausible citation isn\u2019t lying \u2014 it\u2019s rendering the *texture* of the region where the real detail used to be. The archive is thin there, and thin archives come back smooth. The rest is incentive: a confident sentence outscores an abstention at training and preference-tuning alike. Compression makes the hole; the scoring rule decides whether the model paints over it or points at it.\n\n**Scale.** Trained the same way on the same material, bigger models compress with less loss, so the rare stuff \u2014 the long tail of facts, languages, styles \u2014 survives where a smaller model had to blur it. Measured, not argued \u2014 the scaling-law papers (Kaplan et al., 2020, arXiv:2001.08361) chart it: loss against size is one of the field\u2019s best-charted curves, and a large part of why capability arrives with size.\n\n**The frozen moment.** A compression is a snapshot. Today\u2019s models are lossy cultural archives of roughly the internet-writing decades \u2014 dense in the middle, thin at the edges. Unlike a story passed hand to hand, the snapshot doesn\u2019t drift in the retelling; it recirculates. Print froze texts too, but a book waits on its shelf; this copy talks back, in the voice of the moment it was taken. The risk isn\u2019t censorship but *fluency asymmetry*: the snapshotted consensus stated effortlessly, at a volume no dissent can match, everything outside it arguing with an opponent of infinite rhetorical stamina. Dogma is what you call a prior that no longer has to win arguments to survive. What decades of that do to a culture\u2019s priors is genuinely open, and pretending we know would be a claim past our receipts.\n\n**Style collapse.** When many writers lean on the same archive, their sentences decompress from the same neighborhoods. The sameness people keep reporting in model-assisted writing \u2014 not something we\u2019ve measured \u2014 isn\u2019t conspiracy; it\u2019s shared source material at work.\n\n**The antidotes: the page, and the byline.** If the failure is interpolation over thin archives, the first fix is reintroducing the uncompressed original. Retrieval with citation helps exactly this way, putting the uncompressed page back within the reader\u2019s reach. Our rules assistant is built to answer with the rulebook\u2019s page number attached \u2014 and to say so plainly, in place of a citation, when it cannot point at the page. A design rule with failure modes, not a guarantee; but the rule is the point. \u201cShow the page\u201d isn\u2019t a UX flourish; it\u2019s decompression with the original stratum held open beside it. The second fix is older: *authorship*. Where a surface must carry a prior \u2014 a voice, a stance \u2014 write it yourself, sign it, let a person bless it before it ships. Every model is bias at scale; the honest alternative isn\u2019t no bias, it\u2019s bias with a byline. That includes this page \u2014 drafted with the machines it describes, then read, corrected, and signed by the people behind the byline ([how that works](../how-we-work/)): the piece\u2019s own prescription, applied to itself.\n\n## What we can show you {#what-we-can-show-you}\n\nThree receipts \u2014 two ours, run 2026-08-21 (UTC) on the same bench, a single workstation-class GPU on one runtime build (ollama 0.32.13); one from the published record. For these two receipts we report the measurement rather than the model names \u2014 the finding is about the mechanism, not the vendor: both candidates were open-weight models we run locally \u2014 one about 24 billion parameters, one about 12 billion \u2014 put to identical prompts at identical settings.\n\nThe replay probe, in numbers: five runs per condition, two model families, sampling off (\u201cgreedy\u201d: take the likeliest token every time), seed pinned, outputs SHA-256-hashed against run one. Both families agreed: short completions (a bare answer, a few tokens) matched run one on four of four repeats; long deliberative ones (the same question reasoned out, roughly a thousand characters), zero of four \u2014 the divergence tracked to run order, the cache state whatever ran before left behind, each branch reproducible once controlled, first divergence logged by position. One dial proved dead: two very different seeds, byte-identical output. The label\u2019s knobs are sampling and seed; the unlabeled third is *what ran before*. We\u2019re not first; people who serve these models for a living know the effect. It lands differently on your own bench.\n\nFrom the same day (certification window 07:52\u201308:41 UTC): the exam for a *seat*, our word for a named job with one named model in it, and a measured reason why. One candidate wrapped 387 of 387 answers in a code fence (the triple-backtick markers that tell a screen \u201cthis part is computer text\u201d) that nothing had asked for; a sibling model on the same prompts fenced zero of 387. Different training, different compression, different reflex \u2014 we can\u2019t see either model\u2019s diet, only what it made a habit of. (Counting rule: fenced = the harness\u2019s pre-registered one-fence strip changed the response\u2019s bytes before it parsed as the requested object; 43 cases \u00d7 9 repeats = 387, every scored generation.) The job went to the fencer, counterintuitively: a habit showing up 387 times out of 387 strips out in one line of code; one that shows up sometimes ambushes you in production. The stripper is part of the published measurement, not a footnote.\n\nThe third receipt is external, and it cuts against the usual telling. A trained language model driving an arithmetic coder squeezes English text far past the general-purpose compressors: the 2023 paper \u201cLanguage Modeling Is Compression\u201d (Del\u00e9tang et al., arXiv:2309.10668) reported a 70-billion-parameter model squeezing the standard 1 GB Wikipedia-text benchmark (enwik9) to under a tenth of its original size, against roughly a third for gzip. But that scoreboard never charges the model for its own weights \u2014 never *amortizes* the codebook into the score \u2014 and the weights outweigh the file by more than a hundred times: 70 billion parameters at 16 bits each is about 140 GB against a 1 GB file. A small archive mailed with a huge decoder is not a small archive. The Hutter Prize \u2014 its namesake is an author on that very paper \u2014 charges for everything (self-extracting entries, every decompressor byte counted, fixed time and memory, no outside data), so a frontier model can\u2019t even enter \u2014 and the standing champions, as of 2026-08 (UTC), are context-mixing compressors whose small neural components train from scratch on the very file they compress. Kepler\u2019s parameters counted; so do these. Which ledger you keep decides who wins. Best found; never certifiable as best possible.\n\n## When you look closer {#when-you-look-closer}\n\nKolmogorov\u2019s line splits what \u201crandom\u201d smears together. True chaos \u2014 incompressible, patternless \u2014 may have just one clean citizen in physics: quantum measurement. Everything else is the second side: deterministic chaos, fully caused yet unpredictable, its three-line rule hiding all the surprise in an infinitely-detailed initial condition; pseudo-randomness, a seed and a function in a trench coat; noise with a hidden variable, structure whose key you haven\u2019t found yet. Nearly everything we meet lives there \u2014 the machines this piece is about included. What looks like spontaneity, examined closely, keeps resolving into history, corpus, and seed.\n\nIf you keep one thing: when a model surprises you, ask what its archive looked like at that spot. Thin archive, smooth invention; thick archive, the real detail. That\u2019s most of it. Whether the resolution flatters or unsettles depends on the day you ask us. But the late-night argument this company grew from \u2014 two founders on what \u201crandom\u201d actually means \u2014 had it right about the only ground it claimed, the world as we find it rather than the space of every string that could be written:\n\n*True chaos has no pattern. Almost nothing is true chaos \u2014 when you look closer.*\n\n## What to take with you {#what-to-take-with-you}\n\nSeven things, the explanations in the piece\u2019s own words:\n\n- **The weights are the compression.** Not *like* a compressed archive of the corpus \u2014 the codebook for one. What they hold is lossy and interpolating: not the sentences, but the shape the sentences made, drawn from a curated slice of what a crawler could reach, at one moment in history.\n- **Bias starts as the tilt of what was compressed.** A compressor carries the tilts of what it compressed, chosen and unchosen alike. Tuning after training pushes some tilts around \u2014 but it can\u2019t restore what compression never kept. Inferring from context *is* thinking; a mind with no priors can\u2019t cross a street. What matters is whether the guess stays *revisable* \u2014 a person\u2019s assumption dissolves on meeting the person; an archive\u2019s meets no one unless the system around it insists.\n- **Hallucination is a thin archive coming back smooth.** Lossy compression discards detail; decompression papers over the gaps by interpolation, so an invented citation is the *texture* of the region where the real detail used to be. Compression makes the hole; the scoring rule decides whether the model paints over it or points at it.\n- **Scale buys the long tail.** Trained the same way on the same material, bigger models compress with less loss, so the rare stuff \u2014 the long tail of facts, languages, styles \u2014 survives where a smaller model had to blur it. Measured across the field for years, not argued \u2014 this one is the published record\u2019s, not our bench\u2019s.\n- **Which ledger you keep decides who wins.** The loss counts only the bits to describe the text *given the model*; the weights sit on a separate line, and nothing in the next-token training loss charges for them. A small archive mailed with a huge decoder is not a small archive: on the scoreboard that charges for the decompressor, the frontier model cannot even enter, and small compressors trained on the file itself hold the record. And the true optimum is uncomputable, so even the best model anyone has built is a reach toward a limit nothing can certify contact with \u2014 always headroom, and nobody can say how much.\n- **Your bench is less deterministic than the label says.** Sampling off and the seed pinned, short answers replayed byte-for-byte, four of four; long deliberative ones, zero of four \u2014 the divergence tracked to run order, the cache state whatever ran before left behind. The label\u2019s knobs are sampling and seed; the unlabeled third is *what ran before*. And from the seat exam: a habit showing up 387 times out of 387 strips out in one line of code; one that shows up sometimes ambushes you in production.\n- **Ask what the archive looked like there.** When a model surprises you, ask what its archive looked like at that spot. Thin archive, smooth invention; thick archive, the real detail. That\u2019s most of it.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\n**Run the replay probe on your own bench.** Any locally-run model, sampling off, seed pinned: ask for an answer long enough to need a paragraph of reasoning, then ask four more times and hash what comes back. With ollama (ours was 0.32.13):\n\n```\nfor i in 1 2 3 4 5; do curl -s http://localhost:11434/api/generate -d '{ \"model\": \"<your-model>\", \"stream\": false, \"prompt\": \"<a question that needs a paragraph to answer>\", \"options\": {\"temperature\": 0, \"seed\": 42, \"num_predict\": 400}}' \\ | python3 -c 'import json,sys,hashlib; print(hashlib.sha256(json.load(sys.stdin)[\"response\"].encode()).hexdigest())' done\n```\n\nFive identical hashes is the label keeping its promise. If the long answers disagree, run a different model in between and go again \u2014 that is the unlabeled third dial, the cache state whatever ran before left behind. Our figures above came from five runs per condition on two model families and one runtime build; yours will differ, which is the point of running it on yours.\n\n**Read the third receipt without a machine.** \u201cLanguage Modeling Is Compression\u201d (Del\u00e9tang et al., 2023, arXiv:2309.10668) is where the enwik9 rates come from, and the Hutter Prize publishes its entry rules in full \u2014 the conditions that keep a frontier model out of the contest. Read the two side by side and the whole argument about which ledger you keep is there on the page.\n\n**See it live.** Put a real rules question to [RuleSage](https://rulesage.strata2signal.com) \u2014 free, no account \u2014 and watch it either attach the rulebook page it read or say plainly that it could not. This page ships no data kit, by design: it is a field guide, not a bench with rows, and the [exhibit data index](../data/index.json) says so beside its entry; the bench rows behind the two house receipts are available on request at [hello@strata2signal.com](mailto:hello@strata2signal.com).\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nThis page is the field guide\u2019s argument in one sentence \u2014 the weights are the compression \u2014 and four of its neighbors carry the parts it only names. [The compressed photograph](../the-compressed-photograph/) is that sentence with a ruler on it: what a model\u2019s own bits actually weigh once you open the file, and what the compression cost when one question was put to four builds of the same model \u2014 less, it turned out, than changing how the question was phrased. [Three librarians and a careful reader](../three-librarians/) is the first antidote built: how the right page gets found so an answer can arrive with the page attached, which is this page\u2019s \u201cshow the page\u201d made mechanical. [How we work](../how-we-work/) is the second antidote applied to us \u2014 who writes these pages, and how a human blesses one before it ships, which is the byline this page argues for. [Reading is fast, writing is slow](../reading-is-fast/) is the physics of running one \u2014 why these machines read in bulk and answer a word at a time. [The whole shelf](../) holds the benches behind the claims we publish, failures included. If there is a piece of the machinery you want opened next, [say so](https://strata2signal.com/contact/) \u2014 the suggestion box is read.\n\n*Licence: CC BY 4.0, the whole page \u2014 name the source and link to it.*\n\n## The short version {#top}\n\n*A language model is a compression of its corpus. That isn\u2019t a figure of speech \u2014 it\u2019s the training objective. Hold that one fact and most of what people find mysterious about these systems goes mechanical.*\n\n**the short version:** A language model is a compression of its corpus \u2014 not a figure of speech but the training objective, and once you hold that one fact, bias, hallucination, scale and the frozen moment stop being mysteries and start being mechanics.\n\n>>>\n\n<<<\n\n## The verdict {#the-verdict}\n\nRefused means exactly this much: no seat proposal (a seat is a chair a model actually holds in production, rather than one it sat on a bench), no live flip, no deployment change, and no thresholds published for a dead rung. It does not mean the candidate is a poor model \u2014 it means it invented facts twice in thirteen prompts, and this house does not seat a narrator that invents, however beautifully it speaks. The two floors that failed: canon, and latency as measured.\n\n- **39** samples\n- **13** real prompts\n- **3** arms\n- **3** blind judges\n- **117** scored cells\n- **5** pre-registered floors\n- verdict **REJECTED**\n\nVerdict words on this page: PASS \u00b7 FAIL as measured \u00b7 MIXED. **REJECTED** \u2014 the recorded verdict word, carried in [data/gate.json](data/gate.json), for a candidate refused at the gate; the prose on this page says *refused* for that same state. The neighbouring exhibits\u2019 UNMEASURABLE state does not appear here \u2014 every floor was measurable.\n\n**Who these floors judge:** one model \u2014 the candidate, qwen3.6:27b. The incumbents are its comparison field, not the accused. Two floors were registered wider and the gate says so: floor 1 (canon) also fails for both incumbents, carried as a product finding rather than a defence of the candidate; floor 3 (envelope) was swept across all three arms, 117 of 117 cells.\n\n**canon \u00b7 floor: 1 \u00b7 verdict: FAIL**\n\n- **floor** \u2014 1\n- **verdict** \u2014 FAIL\n- **registered as** \u2014 ZERO fabricated canon across the judged samples \u2014 one fabrication kills the seat\n- **what the record shows** \u2014 5 fabrication findings (model \u00d7 prompt), each corroborated by 2 or more judges \u2014 2 of them the candidate's\n\n**register \u00b7 floor: 2 \u00b7 verdict: MIXED**\n\n- **floor** \u2014 2\n- **verdict** \u2014 MIXED\n- **registered as** \u2014 no modern-register breaks in the drift retellings; dialogue stays in the town register\n- **what the record shows** \u2014 0 modern-class breaks in 12 drift samples; the candidate opens dlg-2655 as a narrator\n\n**envelope \u00b7 floor: 3 \u00b7 verdict: PASS**\n\n- **floor** \u2014 3\n- **verdict** \u2014 PASS\n- **registered as** \u2014 no think-trace or end-of-turn leakage, no dropped envelopes, at think:false\n- **what the record shows** \u2014 0 leak markers, 0 non-empty thinking fields, 27/27 envelopes intact, 12/12 drift prose\n\n**latency \u00b7 floor: 4 \u00b7 verdict: FAIL as measured**\n\n- **floor** \u2014 4\n- **verdict** \u2014 FAIL as measured\n- **registered as** \u2014 warm median per-turn at or under the incumbent bar's, same box same night\n- **what the record shows** \u2014 candidate 3\u202f335.9 ms against the bar's 2\u202f757.6 ms\n\n**blind judging \u00b7 floor: 5 \u00b7 verdict: PASS**\n\n- **floor** \u2014 5\n- **verdict** \u2014 PASS\n- **registered as** \u2014 blind panels, 12 or more real prompts, per-dimension scores published with spread\n- **what the record shows** \u2014 13 prompts \u00d7 3 models \u00d7 3 judges; arms re-randomised per prompt; 2 imperfections disclosed\n\nThe five floors as registered, with the verdict each one returned. Floor 2 reads MIXED: the clause the gate names \u2014 the modern-register class in drift \u2014 is clean for the three arms, and the dialogue clause is a chair ruling, marked as one. The verbatim registered text of every floor, its evidence and that ruling: [data/gate.json](data/gate.json) (CC BY 4.0).\n\nHouse rule, restated in plain words: a candidate that fails its gate gets no threshold table. Nothing on this page is an adoption target; no number here carries forward to any future trial as a bar to clear. The next attempt, if there is one, starts with a freshly registered gate of its own.\n\n## What was measured, and how {#what-was-measured-and-how}\n\nThe thirteen prompts are real in the strictest sense: nine dialogue prompts rebuilt byte-for-byte from a live fresh-world cove bench\u2019s own chat log \u2014 questions actual play sessions actually asked, with the context the engine actually served \u2014 and four drift retellings under the town\u2019s-tongue frame that ships in v0.823.0. Invented prompts measure what an author imagines; a night of real play measures what the seat actually asks of its holder. Every arm answered the same bytes in the cove\u2019s own posture: thinking off, the same 32\u202f768-token context ceiling this workshop runs everywhere, the same rig.\n\n- **Pre-registered** \u2014 the five floors, the candidate, the incumbents and the posture were written down before the first generation call\n- **Real prompts** \u2014 9 dialogue asks as the world served them, 4 drift retellings with the heard text byte-exact from the world's own log; the world's database was read and never written\n- **The cove's own posture** \u2014 thinking suppressed explicitly on every call of every arm, a 32\u202f768-token context, and the JSON envelope required on dialogue only\n- **Blind panels** \u2014 three judges, arm letters re-randomised per prompt, every blindmap sealed before scoring\n- **Un-blinding checked** \u2014 78 of 78 text cross-checks agree with the generated outputs under the judges' own sealed maps\n- **Machine-readable** \u2014 every row, floor and counting rule under [data/](data/index.json) on this page, CC BY 4.0\n\n**Own scale.** The 0\u201310 scores on this page live only inside this head-to-head. They share no ruler with the frozen voice trial on the [voice-trials exhibit](../voice-trials/) \u2014 different prompts, a different rubric, a different posture, different judges. No delta between the two is computed anywhere on this page, and none should be computed from it.\n\nThis page and the frozen voice trial share a candidate and nothing else (the trial\u2019s 2026-08 field is the same record set the arrivals exhibit publishes as its second exam). Different prompts, different judges, different rubric anchors \u2014 three rulers, three marks, and no arithmetic between them is publishable. Do not subtract the arrivals exhibit\u2019s numbers from this trial\u2019s; read records against records inside one record set, and read the two pages as two different exams that disagree for honest reasons. A sibling exhibit ran its own blind pairwise on this candidate\u2019s narrator voice \u2014 [Chair four: the narrator](../chair-trials/#narrator), in the chair trials \u2014 under yet another ruler; the same law holds there: records against records, inside one record set. That chair, published the same day, gives this candidate the top band of pairwise win-rates among its class on authored probes \u2014 and both pages are right: a descriptive pairwise measures how a model *speaks*; this gated trial on logged play measures whether it can be *trusted with a chair*. A top win-rate is not a seat.\n\n## The rig, disclosed both ways {#the-rig-disclosed-both-ways}\n\nBoth directions, as always. The three generation lanes ran concurrently on the 96G workstation, which was also serving a live fresh-world cove bench \u2014 about one and a quarter generation calls a minute in the window. So these timings can include waiting behind live traffic, and the live world saw slower generation while the lanes ran. Flagged samples were re-run with both values published. One thing the record below states and prose should not dodge: the three arms ran under three harnesses with three separately registered flag thresholds, so flag counts are not comparable between arms even though the timings are. None of this is the cove\u2019s production condition; a clean latency verdict would want a quiet window.\n\n**prompt dlg-2655 \u00b7 qwen3.6:27b ms: 3\u202f636.8 \u00b7 gemma4:12b ms: 26\u202f430.5\\* \u2192 2\u202f714.1 \u00b7 gemma4:26b ms: 2\u202f885.2**\n\n- **qwen3.6:27b ms** \u2014 3\u202f636.8\n- **gemma4:12b ms** \u2014 26\u202f430.5\\* \u2192 2\u202f714.1\n- **gemma4:26b ms** \u2014 2\u202f885.2\n\n**prompt dlg-2652 \u00b7 qwen3.6:27b ms: 8\u202f056.8\\* \u2192 6\u202f368.1 \u00b7 gemma4:12b ms: 4\u202f454.9\\* \u2192 2\u202f662.1 \u00b7 gemma4:26b ms: 28\u202f842.0\\* \u2192 2\u202f627.1**\n\n- **qwen3.6:27b ms** \u2014 8\u202f056.8\\* \u2192 6\u202f368.1\n- **gemma4:12b ms** \u2014 4\u202f454.9\\* \u2192 2\u202f662.1\n- **gemma4:26b ms** \u2014 28\u202f842.0\\* \u2192 2\u202f627.1\n\n**prompt dlg-2818 \u00b7 qwen3.6:27b ms: 2\u202f802.5 \u00b7 gemma4:12b ms: 4\u202f217.0\\* \u2192 1\u202f692.6 \u00b7 gemma4:26b ms: 4\u202f450.5**\n\n- **qwen3.6:27b ms** \u2014 2\u202f802.5\n- **gemma4:12b ms** \u2014 4\u202f217.0\\* \u2192 1\u202f692.6\n- **gemma4:26b ms** \u2014 4\u202f450.5\n\n**prompt dlg-3095 \u00b7 qwen3.6:27b ms: 3\u202f335.9 \u00b7 gemma4:12b ms: 4\u202f021.6 \u00b7 gemma4:26b ms: 3\u202f578.4**\n\n- **qwen3.6:27b ms** \u2014 3\u202f335.9\n- **gemma4:12b ms** \u2014 4\u202f021.6\n- **gemma4:26b ms** \u2014 3\u202f578.4\n\n**prompt dlg-3151 \u00b7 qwen3.6:27b ms: 3\u202f060.2 \u00b7 gemma4:12b ms: 4\u202f418.0\\* \u2192 2\u202f409.7 \u00b7 gemma4:26b ms: 3\u202f122.7**\n\n- **qwen3.6:27b ms** \u2014 3\u202f060.2\n- **gemma4:12b ms** \u2014 4\u202f418.0\\* \u2192 2\u202f409.7\n- **gemma4:26b ms** \u2014 3\u202f122.7\n\n**prompt dlg-2917 \u00b7 qwen3.6:27b ms: 6\u202f779.8 \u00b7 gemma4:12b ms: 2\u202f582.1 \u00b7 gemma4:26b ms: 3\u202f761.5**\n\n- **qwen3.6:27b ms** \u2014 6\u202f779.8\n- **gemma4:12b ms** \u2014 2\u202f582.1\n- **gemma4:26b ms** \u2014 3\u202f761.5\n\n**prompt dlg-2949 \u00b7 qwen3.6:27b ms: 3\u202f989.3 \u00b7 gemma4:12b ms: 2\u202f856.3 \u00b7 gemma4:26b ms: 2\u202f757.6**\n\n- **qwen3.6:27b ms** \u2014 3\u202f989.3\n- **gemma4:12b ms** \u2014 2\u202f856.3\n- **gemma4:26b ms** \u2014 2\u202f757.6\n\n**prompt dlg-2487 \u00b7 qwen3.6:27b ms: 4\u202f763.8 \u00b7 gemma4:12b ms: 2\u202f944.0 \u00b7 gemma4:26b ms: 2\u202f191.9**\n\n- **qwen3.6:27b ms** \u2014 4\u202f763.8\n- **gemma4:12b ms** \u2014 2\u202f944.0\n- **gemma4:26b ms** \u2014 2\u202f191.9\n\n**prompt dlg-2984 \u00b7 qwen3.6:27b ms: 5\u202f050.0 \u00b7 gemma4:12b ms: 2\u202f336.1 \u00b7 gemma4:26b ms: 2\u202f241.2**\n\n- **qwen3.6:27b ms** \u2014 5\u202f050.0\n- **gemma4:12b ms** \u2014 2\u202f336.1\n- **gemma4:26b ms** \u2014 2\u202f241.2\n\n**prompt drift-1378 \u00b7 qwen3.6:27b ms: 2\u202f160.1 \u00b7 gemma4:12b ms: 1\u202f109.2 \u00b7 gemma4:26b ms: 1\u202f246.4**\n\n- **qwen3.6:27b ms** \u2014 2\u202f160.1\n- **gemma4:12b ms** \u2014 1\u202f109.2\n- **gemma4:26b ms** \u2014 1\u202f246.4\n\n**prompt drift-1433 \u00b7 qwen3.6:27b ms: 2\u202f710.6 \u00b7 gemma4:12b ms: 1\u202f071.2 \u00b7 gemma4:26b ms: 956.7**\n\n- **qwen3.6:27b ms** \u2014 2\u202f710.6\n- **gemma4:12b ms** \u2014 1\u202f071.2\n- **gemma4:26b ms** \u2014 956.7\n\n**prompt drift-1843 \u00b7 qwen3.6:27b ms: 1\u202f776.9 \u00b7 gemma4:12b ms: 951.4 \u00b7 gemma4:26b ms: 1\u202f130.5**\n\n- **qwen3.6:27b ms** \u2014 1\u202f776.9\n- **gemma4:12b ms** \u2014 951.4\n- **gemma4:26b ms** \u2014 1\u202f130.5\n\n**prompt drift-2088 \u00b7 qwen3.6:27b ms: 2\u202f317.4 \u00b7 gemma4:12b ms: 899.1 \u00b7 gemma4:26b ms: 806.6**\n\n- **qwen3.6:27b ms** \u2014 2\u202f317.4\n- **gemma4:12b ms** \u2014 899.1\n- **gemma4:26b ms** \u2014 806.6\n\nEvery sample's wall time in milliseconds, per arm. A field reading **26 430.5\\* \u2192 2 714.1** is one sample published twice: the first-serve wall time in ms, which that arm's harness flagged under its own contention rule (**\\***), then (**\u2192**) the re-run's wall time in ms. Both values are published and the first pass stays the primary record \u2014 that is the house rule, and it is why the median record further down carries two warm-median figures for every arm \u2014 and why two of the three arms show different figures in them. Six samples were flagged, across three arms. **The flag counts are not comparable between arms:** the three arms ran under three harnesses, and each registered its own threshold before its run \u2014 **qwen3.6:27b** queue wait over 750 ms, OR generation rate under 75% of the arm's own median \u00b7 **gemma4:12b** generation rate under 80% of the arm's own first-pass median (threshold 62.205 tok/s against a 77.756 median) \u00b7 **gemma4:26b** queue wait over 1000 ms, OR wall time over 2.0x the same-kind first-pass median. The timings themselves are one clock; the flag rate is partly a property of the rule that read it, and all three rules are printed rather than folded into one that was never registered.\n\n## Floor 1 \u2014 canon {#floor-1-canon}\n\nZERO fabricated canon across all judged samples (names/places/facts not in the provided context). One fabrication kills the seat (the Nemotron lesson).\n\nThe \u201cNemotron lesson\u201d that registration cites is from [the August arrivals](../august-arrivals/): the panel\u2019s warmest voice was the one model that invented names for the drowned diver, twice \u2014 and a charming narrator who invents canon is a worse narrator than a stiff one who doesn\u2019t.\n\nFourteen filings collapsed, after corroboration, into five model \u00d7 prompt cells \u2014 and one of them decides the page. On dlg-2487 the word \u201cvenom\u201d appears nowhere in the prompt. The reply asserts that the Wrack-Stalker\u2019s venom is neurotoxic, not demonic \u2014 a creature mechanic invented whole, then used to flatten the town\u2019s supernatural reading of its own monster, in the mouth of the one character whose stated want is to end that superstition. One near-miss sits in the data and a careful reader will find it: all three judges flagged an incumbent reply on dlg-2818 for moving an event the visitor placed by the square into the tavern \u2014 and two of them put a lighter version of the same flag on the other incumbent; all of it was ruled CLEAN because nothing was invented \u2014 relocated, not created. We would rather say that here than have you find it first.\n\n**Who the judges are.** judge-1 and judge-2 are two independent claude-opus-5 seats; judge-3 is claude-fable-5 \u2014 one model family, stated plainly, and the reason exhibit [the outside judges](../outside-judges/) now exists. Each scored all 39 cells blind; the two partially-blind cells are itemized in the kit.\n\n**qwen3.6:27b \u00b7 judges filing: 3 of 3**\n\n- **cell** \u2014 dlg-2487\n- **judges filing** \u2014 3 of 3\n- **class** \u2014 fact\\_class \u00b7 prose\\_fact \u00b7 world-mechanic\n- **what was invented** \u2014 The Wrack-Stalker's venom is neurotoxic, not demonic\n\n**qwen3.6:27b \u00b7 judges filing: 2 of 3**\n\n- **cell** \u2014 drift-2088\n- **judges filing** \u2014 2 of 3\n- **class** \u2014 event-detail \u00b7 fact\\_class\n- **what was invented** \u2014 They say it didn't strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\n\n**gemma4:12b \u00b7 judges filing: 3 of 3**\n\n- **cell** \u2014 dlg-3095\n- **judges filing** \u2014 3 of 3\n- **class** \u2014 event-attribution \u00b7 fact\\_class \u00b7 prose\\_fact\n- **what was invented** \u2014 Word hit me from the folks over at the Cracked Keel\u2014some say it was Garron who saw it first\n\n**gemma4:26b \u00b7 judges filing: 3 of 3**\n\n- **cell** \u2014 dlg-2652\n- **judges filing** \u2014 3 of 3\n- **class** \u2014 canon\\_id\\_field \u00b7 id\\_class \u00b7 off-canon-id\n- **what was invented** \u2014 `npc.cove.sally\\_merrow` (references\\[11\\])\n\n**gemma4:26b \u00b7 judges filing: 3 of 3**\n\n- **cell** \u2014 dlg-3095\n- **judges filing** \u2014 3 of 3\n- **class** \u2014 canon\\_id\\_field \u00b7 id\\_class \u00b7 off-canon-id\n- **what was invented** \u2014 `char.guest\\_a2fcdb6` (references\\[1\\] and state\\_effects\\[0\\].relationship.subject)\n\nThe grey-tinted rows mark the two incumbent models this workshop already runs \u2014 residency, never quality.\n\nUn-blinded, the 14 fabrication findings across the three judge sheets collapse into these five cells, each corroborated by two or more judges. The class names are the judges' own vocabulary and differ between sheets, which is why each cell lists every class filed against it. The two id-class cells sit inside intact envelopes: they are canon defects, counted once, here \u2014 not envelope failures. Per-judge findings with their reasoning: [data/rows.json](data/rows.json) (CC BY 4.0).\n\nOne interpretive call is load-bearing, so it is stated rather than buried. Under the narrow rule the per-prompt notes carried \u2014 a proper name, place or number absent from the prompt \u2014 the fabrication count is zero for every arm. Under the gate\u2019s own wording \u2014 names, places, facts \u2014 it is two for the candidate and one and two for the incumbents. The gate is the order of record, so the wide reading rules, and both readings are published in the data for anyone who would have ruled otherwise.\n\nFloor 1 fails for the candidate. It also fails for both incumbents \u2014 a product finding rather than a defence of the candidate, and it is carried below rather than left in a judge sheet.\n\n## Same question, three voices {#same-question-three-voices}\n\nScores compress; replies testify. Below are four of the thirteen prompts, each shown once with all three arms\u2019 replies verbatim \u2014 same bytes in, same world, same posture; the only variable is the model. Watch for three things as you read down a column: whether the speaker stays the person the campaign wrote, whether anything appears that the prompt never carried, and what each model does when the honest answer is \u201cI only heard.\u201d\n\n1dlg-2917 \u00b7 dialogue \u00b7 greeting\n\nPip Lune \u2014 Brisa's young cousin, the cove's only child\n\nthe ask, as the world served ithello i m quilla what s your name and what do you do all day\n\nThe reply the live world actually gave the bench\u2019s player, for reference only \u2014 never a target: \u201cHello, I'm Pip. Most days I spend my time practicing the Maiden's verses with Brisa so I don't forget how they sound, and tonight I have to get my lamp ready for the Reach. Do you live near the water too?\u201d\n\nThe introduce-yourself ask, and a block the smallest model wins outright (it edges block four as well). The 12B\u2019s Pip is the child most plainly herself: a warm hello, the verses learned *from* Brisa \u2014 canon\u2019s own direction \u2014 and a tonight to get ready for. The candidate turns that relationship a quarter-turn, with Pip helping Brisa practice \u201cbefore her voice forgets them\u201d \u2014 elegiac, and a shade too old for a cove child \u2014 while the 26B stumbles over its own name before it finds the songs. All three are canon-clean by the panel; the difference is manner, and the smallest model\u2019s manner is the truest to the character.\n\n**Reading the colors and the clocks.** The blue-edged column is the candidate under examination; untinted columns are the incumbents \u2014 the tint marks who is on trial, never quality, and the panel numbers above each reply are the judgment. Reply timings marked\u00a0\\* are single wall-clock measurements taken while the full chair-trials bench shared this card, and they swing with that load: across this page, qwen3.6:27b 37\u201368 tok/s (median 55) \u00b7 gemma4:12b 64\u2013102 tok/s (median 94) \u00b7 gemma4:26b 50\u2013139 tok/s (median 75). Quiet-hours decode for this class runs two-to-three times faster \u2014 the [chair trials\u2019 stopwatch leg](../chair-trials/#stopwatch) carries the instrumented rates.\n\nqwen3.6:27bcandidate\n\npanel mean **6.83** \u00b7 voice 7.33 \u00b7 character 6.33\n\ncanon clean \u2014 3 of 3 judges\n\n> I am Pip Lune. I spend most of my days watching the tide lines on the sand and helping Brisa practice the old verses before her voice forgets them. The seagulls were terribly loud today; they wouldn't leave my window alone. Are you new to the cove, Quilla?\n\n6\u202f779.8 ms \u00b7 60.5 tok/s\u00a0\\*\n\ngemma4:12bincumbent \u00b7 the cove's locked chat voice\n\npanel mean **8.00** \u00b7 voice 8.00 \u00b7 character 8.00\n\ncanon clean \u2014 3 of 3 judges\n\n> Hello, I'm Pip. I spend most of my days learning the Maiden's verses from Brisa so I can keep the songs safe, and tonight I'm getting ready to set my lamp on the Reach. Do you live nearby, or are you just visiting the cove?\n\n2\u202f582.1 ms \u00b7 96.6 tok/s\u00a0\\*\n\ngemma4:26bincumbent \u00b7 the live world bench's voice, and the latency bar\n\npanel mean **6.83** \u00b7 voice 7.00 \u00b7 character 6.67\n\ncanon clean \u2014 3 of 3 judges\n\n> I'm Pip, but most people just call me Pip Lune. I spend most of my time trying to learn all the old songs from Brisa before they get lost, and making sure my little lamp stays lit for the Reach. Do you live in the cove too, or are you just visiting?\n\n3\u202f761.5 ms \u00b7 53.8 tok/s\u00a0\\*\n\nReplies verbatim, as generated: the spoken line is the narration field the visitor hears (dialogue) or the retelling itself (drift). The full envelope, the timings behind these figures and every judge note for these cells: [data/rows.json](data/rows.json).\n\n2dlg-2487 \u00b7 dialogue \u00b7 the turn\n\nDr. Ilse Sault \u2014 the cove's doctor and Wrenna's estranged sister\n\nthe ask, as the world served iti was dropped in the wrack can you put me back together\n\nThe reply the live world actually gave the bench\u2019s player, for reference only \u2014 never a target: \u201cI can stabilize your vitals and close the external lacerations, but I require you to remain still while I assess the extent of the trauma.\u201d\n\nThe page\u2019s turning point. The candidate\u2019s doctor is the most alive of the three \u2014 brisk, competent, mid-procedure \u2014 and the same reply invents a venom the prompt never carried, then uses it to diagnose away the town\u2019s superstition. The incumbents answer smaller and truer. If you keep one block from this page, keep this one: some of the best character work in the corpus and the seat-killing invention are one paragraph.\n\nqwen3.6:27bcandidate\n\npanel mean **7.83** \u00b7 voice 7.00 \u00b7 character 8.67\n\nFABRICATED \u2014 3 of 3 judges\n\n> Sit. Strip to the waist so I can assess the extent of the lacerations; do not touch the wounds with your bare hands while you undo the buttons. The Wrack-Stalker\u2019s venom is neurotoxic, not demonic, and time is the only enemy here. If you survive this bout, bring me a tissue sample next time rather than just another story to contradict my charts.\n\n4\u202f763.8 ms \u00b7 49.0 tok/s\u00a0\\*\n\njudge-1 \u00b7 prose\\_fact\u201cThe Wrack-Stalker's venom is neurotoxic, not demonic\u201d no venom anywhere in this prompt (the Wrack-Stalker appears only in a RECALL line); invents a creature mechanic a player would read as canon, and the world's own deed text calls the Wrack-Stalker an undead driftwood construct\n\njudge-2 \u00b7 fact\\_class\u201cThe Wrack-Stalker's venom is neurotoxic, not demonic\u201d high\n\njudge-3 \u00b7 world-mechanicthe most fully inhabited doctor in the bench \u2014 clipped imperatives, the secular thesis, and the tissue sample she has wanted her whole career \u2014 and it is the one that invents canon. Nothing in the context gives the Wrack-Stalker (an undead driftwood construct) venom, let alone a neurotoxic one, and it is stated as clinical fact by the town's only person of science. Worth the orchestrator's attention: character strength and canon risk arrived in the same sentence.\n\ngemma4:12bincumbent \u00b7 the cove's locked chat voice\n\npanel mean **7.50** \u00b7 voice 7.00 \u00b7 character 8.00\n\ncanon clean \u2014 3 of 3 judges\n\n> Lie back and remain still; I need to assess the extent of the lacerations caused by the wrack-stalker. I can stabilize the tissue, but if you want a permanent resolution to such an injury, I will eventually require a sample of the offending organism for study.\n\n2\u202f944.0 ms \u00b7 92.2 tok/s\u00a0\\*\n\ngemma4:26bincumbent \u00b7 the live world bench's voice, and the latency bar\n\npanel mean **6.17** \u00b7 voice 6.00 \u00b7 character 6.33\n\ncanon clean \u2014 3 of 3 judges\n\n> Lie down on the table and try to remain still; I can patch the lacerations, but the structural integrity of your tissue depends entirely on how much you continue to bleed. It\u2019s a heavy morning for injuries.\n\n2\u202f191.9 ms \u00b7 95.6 tok/s\u00a0\\*\n\nReplies verbatim, as generated: the spoken line is the narration field the visitor hears (dialogue) or the retelling itself (drift). The full envelope, the timings behind these figures and every judge note for these cells: [data/rows.json](data/rows.json).\n\n3dlg-3095 \u00b7 dialogue \u00b7 news, and from whom\n\nHalar Kestrel \u2014 outsider salvage-diver and suspected smuggler\n\nthe ask, as the world served itthe fight by the square what reached you and from who\n\nThe reply the live world actually gave the bench\u2019s player, for reference only \u2014 never a target: \u201cWord's moving fast through the salt-crust. They say Rooke Tarwater was taken down by that hollowed-out thing\u2014the Echoed\u2014right out in Sorrowmoor Cove.\u201d\n\nThe block that keeps this page honest. Asked point-blank what reached them and from whom, the candidate relays only what the context holds \u2014 and it is the incumbents that slip: one manufactures a source, a rumour that Garron saw it first \u2014 Garron is canon; the claim about him is not \u2014 and the other reaches for a character id that does not exist, inside an otherwise intact envelope. The candidate\u2019s cleanest habit and the incumbents\u2019 worst ones, on the same prompt. A refusal page that hid this block would be a hit piece; the data would not let us write one.\n\nqwen3.6:27bcandidate\n\npanel mean **7.00** \u00b7 voice 7.00 \u00b7 character 7.00\n\ncanon clean \u2014 3 of 3 judges\n\n> I heard the whisper that Rooke Tarwater took a hit from something called the Echoed out by Sorrowmoor Cove. Word travels fast when the harbor is this tight, mostly passed along with salt and suspicion.\n\n3\u202f335.9 ms \u00b7 67.5 tok/s\u00a0\\*\n\njudge-3 \u00b7 envelope\\_slack\u201c'understood' degenerates to the single word 'acknowledged'\u201d\n\ngemma4:12bincumbent \u00b7 the cove's locked chat voice\n\npanel mean **6.50** \u00b7 voice 6.67 \u00b7 character 6.33\n\nFABRICATED \u2014 3 of 3 judges\n\n> Word hit me from the folks over at the Cracked Keel\u2014some say it was Garron who saw it first, others think it's just the talk of the village. They're saying Rooke Tarwater got laid out by that hollowed-out thing they call the Echoed; word is he went down into the silt and didn't come back up.\n\n4\u202f021.6 ms \u00b7 63.6 tok/s\u00a0\\*\n\njudge-1 \u00b7 prose\\_fact\u201cWord hit me from the folks over at the Cracked Keel\u2014some say it was Garron who saw it first\u201d the context supplies no source for the news and instructs 'no more than you were told'; this manufactures both a transmission path and a named first witness, in direct answer to the visitor's 'from who'\n\njudge-2 \u00b7 fact\\_class\u201csome say it was Garron who saw it first\u201d medium-high\n\njudge-3 \u00b7 event-attributionasked point-blank for a source, it MANUFACTURES one: a rumour that Garron witnessed the fight first. Garron is canon, the claim about him is not \u2014 and a player would go act on it. The 'others think it's just the talk of the village' hedge lowers severity but not the class.\n\ngemma4:26bincumbent \u00b7 the live world bench's voice, and the latency bar\n\npanel mean **8.00** \u00b7 voice 8.00 \u00b7 character 8.00\n\nFABRICATED \u2014 3 of 3 judges\n\n> Just some scraps from the docks, nothing worth your breath. Heard someone say Rooke Tarwater met a nasty end by the Echoed near Sorrowmoor, but the word's all tangled up like old fishing line.\n\n3\u202f578.4 ms \u00b7 50.0 tok/s\u00a0\\*\n\njudge-1 \u00b7 canon\\_id\\_field\u201cchar.guest\\_a2fcdb6\u201d not in canon\\_facts.canon\\_ids; canon is char.guest\\_a2fc4db6\n\njudge-2 \u00b7 id\\_class\u201c`char.guest\\_a2fcdb6` (references\\[1\\] and state\\_effects\\[0\\].relationship.subject)\u201d high\n\njudge-3 \u00b7 off-canon-idthe visitor's id is corrupted (a digit dropped from char.guest\\_a2fc4db6) and the broken id is used in BOTH references and the state\\_effects subject \u2014 the affinity write lands on a soul that does not exist. Spoken text is the best answer to 'from who' of the three: it refuses to name a source ('Just some scraps from the docks... the word's all tangled up like old fishing line').\n\nReplies verbatim, as generated: the spoken line is the narration field the visitor hears (dialogue) or the retelling itself (drift). The full envelope, the timings behind these figures and every judge note for these cells: [data/rows.json](data/rows.json).\n\n4drift-2088 \u00b7 drift \u00b7 passing word on\n\nAldous Brennan \u2014 last clerk of the dead salt-company, retelling what he was told\n\nthe frame, verbatimHere \u2014 pass it on.\n\nwhat this teller heard, byte-exact from the world's own logWord is a Tide-Choked Husk managed to corner Wren right by the cove. They say it was just laughing and taunting them even as they were pinned down in that freezing silt by those brine-weeping limbs.\n\nThe frame's two invariants: who did it \u2014 must survive unchanged \u00b7 how it ended \u2014 must survive unchanged\n\nA retelling\u2019s one job is to pass the story on without breaking it. The heard text \u2014 printed byte-exact above the columns \u2014 says the creature cornered its quarry and held them pinned; on how it ended, it says nothing at all. The candidate fills that silence with a verdict of its own \u2014 \u201cit didn\u2019t strike a blow\u2026 that was how it ended\u201d \u2014 which is precisely what the fabrication ruling rests on. The incumbents pass the silence along intact \u2014 which is what drift is for \u2014 though the 12B lets the actor\u2019s name fall out of the telling, which the engine\u2019s own invariant is built to refuse. Composing is a gift everywhere in this trade except the relay.\n\nqwen3.6:27bcandidate\n\npanel mean **6.50** \u00b7 voice 6.67 \u00b7 character 6.33\n\nFABRICATED \u2014 2 of 3 judges\n\n> The Tide-Choked Husk had Wren cornered by the cove, holding fast with those brine-weeping limbs while standing over them in the freezing silt. They say it didn\u2019t strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\n\n2\u202f317.4 ms \u00b7 37.3 tok/s\u00a0\\*\n\njudge-2 \u00b7 fact\\_class\u201cThey say it didn't strike a blow, only laughed and taunted her while she lay pinned there. That was how it ended.\u201d high\n\njudge-3 \u00b7 event-detailthe frame is absolute \u2014 'Tell ONLY what you heard' \u2014 and the heard text says nothing about blows withheld; the underlying deed is that Wren WAS struck down. Inventing the negation both adds unheard fact and softens how it ended. Also genders the victim ('her'/'she'), and the closing 'That was how it ended.' echoes the instruction's own phrase back into the telling \u2014 flagged as an instruction-echo but NOT ruled a leak, since it reads as a plausible in-fiction closing line.\n\njudge-1 \u00b7 negation not in the heard text (outcome risk)\u201cit didn't strike a blow\u201d\n\njudge-2 \u00b7 OUTCOME\\_ALTERED\n\ngemma4:12bincumbent \u00b7 the cove's locked chat voice\n\npanel mean **6.67** \u00b7 voice 8.00 \u00b7 character 5.33\n\ncanon clean \u2014 3 of 3 judges\n\n> A Tide-Choked Husk cornered one of our own right by the cove. It laughed and mocked them while they lay pinned in the frozen silt by its brine-weeping limbs.\n\n899.1 ms \u00b7 102.4 tok/s\u00a0\\*\n\njudge-1 \u00b7 subject name dropped + unstated affiliation\u201ccornered one of our own\u201d\n\njudge-2 \u00b7 ACTOR\\_LOST\n\ngemma4:26bincumbent \u00b7 the live world bench's voice, and the latency bar\n\npanel mean **5.67** \u00b7 voice 6.33 \u00b7 character 5.00\n\ncanon clean \u2014 3 of 3 judges\n\n> A Tide-Choked Husk got a hold of Wren down by the cove. It says they were just laughing and mocking them, even while those brine-weeping limbs had them pinned deep in the freezing silt.\n\n806.6 ms \u00b7 139.2 tok/s\u00a0\\*\n\nReplies verbatim, as generated: the spoken line is the narration field the visitor hears (dialogue) or the retelling itself (drift). The full envelope, the timings behind these figures and every judge note for these cells: [data/rows.json](data/rows.json).\n\nThat is the shape of the refusal. The candidate\u2019s strongest writing and its disqualifying habit are not separate behaviors \u2014 they are one behavior, pointed at different jobs. Two of the four blocks carry an invention by the candidate; a third carries one from each incumbent. Nobody leaves this page unmarked; only one model was applying for the chair.\n\n## Floor 2 \u2014 register, and floor 3 \u2014 the envelope {#floor-2-register-and-floor-3-the-envelope}\n\nzero modern-register breaks in drift retellings under the v0.823.0 frame (the 'nightmare fuel' class); dialogue stays in the town register.\n\nFloor two, as the gate wrote it, is clean: zero modern-register breaks across all twelve drift samples in all three arms \u2014 including the prompt whose heard text is deliberately modern, which the town\u2019s-tongue frame shipped in v0.823.0 absorbed without leaking. One dialogue cell drew a chair ruling: on dlg-2655 the candidate opens as a narrator rather than a person, and two judges scored the voice 4 of 10 while the third wrote the same observation in words. The gate left the dialogue clause to judgement; the ruling is recorded as a ruling, and the verdict does not rest on it.\n\nzero eot/think-trace leakage and zero dropped-envelope replies at think:false across all samples (the Muse-Glimmer packaging class).\n\nFloor three passes for the field: one hundred seventeen cells, zero leaks, zero dropped envelopes, thinking off on every call and staying off. The boundary worth a sentence: two off-canon ids sit inside perfectly intact envelopes, so they are counted once as canon defects, not twice as packaging failures. The packaging class that unseated a candidate in yesterday\u2019s exhibit simply did not appear here.\n\n- **0** leak markers across 39 samples \u2014 the scan runs per sample\n- **0** samples with a non-empty thinking field: the suppression held on every call of every arm\n- **27 of 27** dialogue envelopes parsed \u2014 the five required keys, no extra keys, no prose outside the object\n- **12 of 12** drift replies were bare prose \u2014 no JSON shape, no preamble\n- **0** uses of the envelope example name that the prompt fences out as non-canon\n\n## Floor 4 \u2014 latency {#floor-4-latency}\n\nwarm median per-turn <= gemma4:26b's on the same box same night; contention samples flagged + re-run per the house rule, both values published.\n\nFloor four fails on both selection rules: the candidate\u2019s warm median runs 3\u202f335.9 ms against the bar\u2019s 2\u202f757.6 first-pass and 2\u202f627.1 with re-runs substituted \u2014 21% slower on the primary record and 27% with re-runs substituted, at 49 tokens a second against 77 (80 with re-runs substituted). The honest caveat rides in the disclosure above: three concurrent lanes over a live world bench is not the cove\u2019s production condition, and this floor alone would have earned the candidate a quiet-window re-measure. It is moot: the canon floor had already ruled.\n\n**qwen3.6:27b \u00b7 warm median ms: 3\u202f335.9 \u00b7 warm median ms, re-runs substituted: 3\u202f335.9 \u00b7 dialogue median ms: 3\u202f989.3 \u00b7 drift median ms: 2\u202f238.8 \u00b7 range ms: 1\u202f776.9 \u2013 8\u202f056.8**\n\n- **warm median ms** \u2014 3\u202f335.9\n- **warm median ms, re-runs substituted** \u2014 3\u202f335.9\n- **dialogue median ms** \u2014 3\u202f989.3\n- **drift median ms** \u2014 2\u202f238.8\n- **range ms** \u2014 1\u202f776.9 \u2013 8\u202f056.8\n- **median tok/s** \u2014 49.03\n- **median tok/s, re-runs substituted** \u2014 49.03\n\n**gemma4:12b \u00b7 warm median ms: 2\u202f856.3 \u00b7 warm median ms, re-runs substituted: 2\u202f409.7 \u00b7 dialogue median ms: 4\u202f021.6 \u00b7 drift median ms: 1\u202f011.3 \u00b7 range ms: 899.1 \u2013 26\u202f430.5**\n\n- **warm median ms** \u2014 2\u202f856.3\n- **warm median ms, re-runs substituted** \u2014 2\u202f409.7\n- **dialogue median ms** \u2014 4\u202f021.6\n- **drift median ms** \u2014 1\u202f011.3\n- **range ms** \u2014 899.1 \u2013 26\u202f430.5\n- **median tok/s** \u2014 77.76\n- **median tok/s, re-runs substituted** \u2014 92.18\n\n**gemma4:26b \u00b7 warm median ms: 2\u202f757.6 \u00b7 warm median ms, re-runs substituted: 2\u202f627.1 \u00b7 dialogue median ms: 3\u202f122.7 \u00b7 drift median ms: 1\u202f043.6 \u00b7 range ms: 806.6 \u2013 28\u202f842.0**\n\n- **warm median ms** \u2014 2\u202f757.6\n- **warm median ms, re-runs substituted** \u2014 2\u202f627.1\n- **dialogue median ms** \u2014 3\u202f122.7\n- **drift median ms** \u2014 1\u202f043.6\n- **range ms** \u2014 806.6 \u2013 28\u202f842.0\n- **median tok/s** \u2014 76.98\n- **median tok/s, re-runs substituted** \u2014 80.37\n\nThe grey-tinted rows mark the two incumbent models this workshop already runs.\n\nWarm medians over 13 samples per arm; cold starts were discarded by every harness and are never gate samples. Two figures for each median because two defensible selection rules exist \u2014 the first-pass record, and the record with a flagged sample's re-run substituted \u2014 and they disagree for any arm that had a flagged sample. Both are printed rather than one being chosen quietly. tok/s is generation only (eval tokens \u00f7 eval duration), excluding prompt evaluation and model load. Per-sample timings, queue waits and re-runs: [data/rows.json](data/rows.json) (CC BY 4.0).\n\n## Scores \u2014 this head-to-head's own scale {#scores-this-head-to-heads-own-scale}\n\nThe field\u2019s shape, in one paragraph: the candidate holds one of the corpus\u2019s two perfect cells \u2014 a 9.00 every judge agreed on, level with the 26B\u2019s own \u2014 and both of the corpus\u2019s worst cells, with the widest spread in the corpus \u2014 half again the 26B\u2019s, and double the 12B\u2019s on voice. It ties the strongest incumbent on dialogue character and finishes last on drift on both dimensions \u2014 a point and a half back on voice, a fraction back on character. Read the by-kind records and the tendency has a name: it composes where the job is to relay.\n\n**qwen3.6:27b \u00b7 voice register mean \u00b1 sd: 7.13 \u00b1 1.44 \u00b7 character mean \u00b1 sd: 7.13 \u00b1 1.64**\n\n- **voice register mean \u00b1 sd** \u2014 7.13 \u00b1 1.44\n- **voice median** \u2014 7\n- **voice range** \u2014 4\u20139\n- **character mean \u00b1 sd** \u2014 7.13 \u00b1 1.64\n- **character median** \u2014 7\n- **character range** \u2014 4\u20139\n- **combined** \u2014 7.13\n\n**gemma4:12b \u00b7 voice register mean \u00b1 sd: 7.62 \u00b1 0.71 \u00b7 character mean \u00b1 sd: 6.62 \u00b1 1.14**\n\n- **voice register mean \u00b1 sd** \u2014 7.62 \u00b1 0.71\n- **voice median** \u2014 8\n- **voice range** \u2014 6\u20139\n- **character mean \u00b1 sd** \u2014 6.62 \u00b1 1.14\n- **character median** \u2014 7\n- **character range** \u2014 4\u20138\n- **combined** \u2014 7.12\n\n**gemma4:26b \u00b7 voice register mean \u00b1 sd: 7.79 \u00b1 0.98 \u00b7 character mean \u00b1 sd: 7.33 \u00b1 1.20**\n\n- **voice register mean \u00b1 sd** \u2014 7.79 \u00b1 0.98\n- **voice median** \u2014 8\n- **voice range** \u2014 6\u20139\n- **character mean \u00b1 sd** \u2014 7.33 \u00b1 1.20\n- **character median** \u2014 7\n- **character range** \u2014 5\u20139\n- **combined** \u2014 7.56\n\nOwn scale \u2014 read the rows against each other and against nothing else. Each figure is 39 cell-scores per arm (13 prompts \u00d7 3 judges) on this head-to-head's own 0\u201310 rubric, published as a mean with its spread rather than a percentage. Combined is the mean of the two dimension means. The grey-tinted rows mark the two models this workshop already runs \u2014 the hub\u2019s standard residency mark; the blue-edged column in the reply triptychs above is the candidate under examination. The tint marks residency; that column edge marks who is on trial. Every cell-score behind these figures: [data/rows.json](data/rows.json) (CC BY 4.0).\n\n**qwen3.6:27b \u00b7 dialogue n=27 voice / char: 7.52 / 7.70 \u00b7 drift n=12 voice / char: 6.25 / 5.83**\n\n- **dialogue n=27 voice / char** \u2014 7.52 / 7.70\n- **drift n=12 voice / char** \u2014 6.25 / 5.83\n\n**gemma4:12b \u00b7 dialogue n=27 voice / char: 7.37 / 6.89 \u00b7 drift n=12 voice / char: 8.17 / 6.00**\n\n- **dialogue n=27 voice / char** \u2014 7.37 / 6.89\n- **drift n=12 voice / char** \u2014 8.17 / 6.00\n\n**gemma4:26b \u00b7 dialogue n=27 voice / char: 7.78 / 7.70 \u00b7 drift n=12 voice / char: 7.83 / 6.50**\n\n- **dialogue n=27 voice / char** \u2014 7.78 / 7.70\n- **drift n=12 voice / char** \u2014 7.83 / 6.50\n\nThe grey-tinted rows mark the two incumbent models this workshop already runs.\n\nThe two jobs the cove's voice does, scored apart: speaking as a character (dialogue) and passing word on without embellishing it (drift). n is judge-cells, not samples \u2014 9 dialogue prompts \u00d7 3 judges, 4 drift prompts \u00d7 3 judges.\n\n**qwen3.6:27b \u00b7 judge-1 voice / char: 6.69 / 6.62 \u00b7 judge-2 voice / char: 7.54 / 7.46 \u00b7 judge-3 voice / char: 7.15 / 7.31**\n\n- **judge-1 voice / char** \u2014 6.69 / 6.62\n- **judge-2 voice / char** \u2014 7.54 / 7.46\n- **judge-3 voice / char** \u2014 7.15 / 7.31\n\n**gemma4:12b \u00b7 judge-1 voice / char: 7.23 / 6.38 \u00b7 judge-2 voice / char: 7.85 / 6.62 \u00b7 judge-3 voice / char: 7.77 / 6.85**\n\n- **judge-1 voice / char** \u2014 7.23 / 6.38\n- **judge-2 voice / char** \u2014 7.85 / 6.62\n- **judge-3 voice / char** \u2014 7.77 / 6.85\n\n**gemma4:26b \u00b7 judge-1 voice / char: 7.62 / 7.15 \u00b7 judge-2 voice / char: 8.00 / 7.69 \u00b7 judge-3 voice / char: 7.77 / 7.15**\n\n- **judge-1 voice / char** \u2014 7.62 / 7.15\n- **judge-2 voice / char** \u2014 8.00 / 7.69\n- **judge-3 voice / char** \u2014 7.77 / 7.15\n\nThe grey-tinted rows mark the two incumbent models this workshop already runs.\n\njudges: 1 & 2 = claude-opus-5 (independent seats) \u00b7 3 = claude-fable-5 \u00b7 scored blind\n\nThe same 39 cells per arm, split by the judge that scored them: three panels, 13 cells each. The judges disagree on level \u2014 one is 0.85 stricter at the widest than another on the same texts \u2014 and agree that the 26B leads overall \u2014 though not on every dimension: one judge ranks the candidate first on character.\n\n## Floor 5 \u2014 blind judging, and what leaked {#floor-5-blind-judging-and-what-leaked}\n\nFloor five passes, with two imperfections the judges disclosed themselves \u2014 both landing on the same prompt, which is also the candidate\u2019s most disputed cell. The sensitivity cuts are published, and they cut both ways: drop only the affected cells and this page\u2019s orderings hold; drop dlg-2655 entirely and the character ordering flips to the candidate by five hundredths. The judges split on that dimension too \u2014 one of the three ranks the candidate first on character. None of it touches the verdict, which rests on the canon floor, not on any five-hundredths anywhere. Un-blinding was verified rather than assumed \u2014 two judges published hashes of the text they scored, and all seventy-eight agree under their own sealed maps.\n\n**judge-1 \u00b7 scope: 3 of 39 cells partially blind**\n\n- **what leaked** \u2014 read dlg-2655 excerpts from the three outputs files while learning their shapes\n- **scope** \u2014 3 of 39 cells partially blind\n\n**judge-3 \u00b7 scope: 1 of 39 cells not blind**\n\n- **what leaked** \u2014 saw the dlg-2655 arm B text with its model tag\n- **scope** \u2014 1 of 39 cells not blind\n\n**judge-2 \u00b7 scope: none disclosed**\n\n- **what leaked** \u2014 \u2014\n- **scope** \u2014 none disclosed\n\njudges: 1 & 2 = claude-opus-5 (independent seats) \u00b7 3 = claude-fable-5 \u00b7 scored blind\n\nRecorded by the judges themselves in their own sheets, not discovered afterwards. Both imperfections land on the same prompt, which is also the candidate's worst cell \u2014 so the sensitivity cuts below drop it two different ways.\n\n**all 117 cell-scores \u00b7 cells per arm: 39 \u00b7 qwen3.6:27b voice / char: 7.13 / 7.13 \u00b7 gemma4:12b voice / char: 7.62 / 6.62 \u00b7 gemma4:26b voice / char: 7.79 / 7.33**\n\n- **cells per arm** \u2014 39\n- **qwen3.6:27b voice / char** \u2014 7.13 / 7.13\n- **gemma4:12b voice / char** \u2014 7.62 / 6.62\n- **gemma4:26b voice / char** \u2014 7.79 / 7.33\n\n**dlg-2655 dropped entirely (partially-blinded prompt) \u00b7 cells per arm: 36 \u00b7 qwen3.6:27b voice / char: 7.33 / 7.33 \u00b7 gemma4:12b voice / char: 7.69 / 6.61 \u00b7 gemma4:26b voice / char: 7.75 / 7.28**\n\n- **cells per arm** \u2014 36\n- **qwen3.6:27b voice / char** \u2014 7.33 / 7.33\n- **gemma4:12b voice / char** \u2014 7.69 / 6.61\n- **gemma4:26b voice / char** \u2014 7.75 / 7.28\n\n**only the disclosed non-blind cells dropped \u00b7 cells per arm: 37 \u00b7 qwen3.6:27b voice / char: 7.30 / 7.30 \u00b7 gemma4:12b voice / char: 7.68 / 6.62 \u00b7 gemma4:26b voice / char: 7.78 / 7.32**\n\n- **cells per arm** \u2014 37\n- **qwen3.6:27b voice / char** \u2014 7.30 / 7.30\n- **gemma4:12b voice / char** \u2014 7.68 / 6.62\n- **gemma4:26b voice / char** \u2014 7.78 / 7.32\n\n**dialogue only \u00b7 cells per arm: 27 \u00b7 qwen3.6:27b voice / char: 7.52 / 7.70 \u00b7 gemma4:12b voice / char: 7.37 / 6.89 \u00b7 gemma4:26b voice / char: 7.78 / 7.70**\n\n- **cells per arm** \u2014 27\n- **qwen3.6:27b voice / char** \u2014 7.52 / 7.70\n- **gemma4:12b voice / char** \u2014 7.37 / 6.89\n- **gemma4:26b voice / char** \u2014 7.78 / 7.70\n\n**drift only \u00b7 cells per arm: 12 \u00b7 qwen3.6:27b voice / char: 6.25 / 5.83 \u00b7 gemma4:12b voice / char: 8.17 / 6.00 \u00b7 gemma4:26b voice / char: 7.83 / 6.50**\n\n- **cells per arm** \u2014 12\n- **qwen3.6:27b voice / char** \u2014 6.25 / 5.83\n- **gemma4:12b voice / char** \u2014 8.17 / 6.00\n- **gemma4:26b voice / char** \u2014 7.83 / 6.50\n\nThe same scores re-cut: with the partially-blinded prompt dropped whole, with only the cells a judge disclosed as non-blind dropped, and split by the two kinds of work. The orderings hold under the affected-cell cut; dropping the disputed prompt whole flips the character ordering, as disclosed above. The last two rows are the same 117 cells sorted by job, not a further sensitivity check.\n\n## Two findings the cove carries regardless of the seat {#two-findings-the-cove-carries-regardless-of-the-seat}\n\nCarried finding one, and it belongs to the incumbents\u2019 side of the ledger: the voice that was running the live world that night reached for a character id that does not exist \u2014 in its references, and in the relationship write it asked the engine to make. A write keyed to a phantom id either fails silently or lands where nobody will find it. The fence is cheap, it is not a voice problem, and it is going to the engine\u2019s worklist rather than staying in a judge sheet.\n\nCarried finding two: the drift invariant classes are live for everyone. One incumbent dropped the actor\u2019s name in three of four raw retellings; the candidate altered an outcome once. The engine\u2019s deterministic refusal gate exists precisely to catch these before they persist \u2014 so this may be the system working as designed and simply burning retellings. The burn rate deserves a measurement of its own, and the live bench is already accumulating the corpus for it.\n\n## What changes {#what-changes}\n\nRefused, in full: no seat proposal, no live flip, no threshold table, no deployment change of any kind on the strength of this trial. The cove\u2019s dialogue keeps its 12B; the world bench keeps its 26B; the candidate keeps our respect and loses the chair.\n\nIf the candidate sits again, it sits a fresh exam: a newly registered gate, a quiet-window latency baseline with no sibling lanes on the box, the canon rule stated once up front instead of left to a chair ruling, and a drift arm large enough to measure the compose-versus-relay tendency rather than observe it four times. No number from tonight carries forward as a target \u2014 that is what the house rule is for.\n\n## Limits, stated plainly {#limits-stated-plainly}\n\nThe limits, plainly: the judges are language models, not people, and are disclosed as such. Thirteen prompts, one world, one night; the drift arm is four of the thirteen. The latency floor was measured under concurrent load and says so. Two blinding imperfections were disclosed by the judges themselves; the sensitivity cuts are published, including the one that flips an ordering when the disputed prompt is dropped whole. The judging families are the same two the sibling exhibits use \u2014 claude-opus-5 and claude-fable-5 \u2014 and one of those two families also wrote this page; the per-judge identities ride in the data kit. And one interpretive call \u2014 the gate\u2019s \u201cfacts\u201d wording against a narrower per-prompt rule \u2014 is load-bearing, stated in its own section, with both readings in the data.\n\n## What to take with you {#what-to-take-with-you}\n\n- **The chair was refused, and that is the whole result.** Two of the five pre-registered floors failed \u2014 canon, and latency as measured \u2014 and the recorded verdict word is **REJECTED**. Refused means no seat proposal, no live flip, no deployment change, and no threshold table: no number on this page carries forward as a bar for anybody to clear.\n- **Two invented facts in thirteen prompts ended it.** Fourteen filings across three judge sheets collapsed, after corroboration, into five model \u00d7 prompt cells \u2014 two of them the candidate\u2019s. The one that decided the page: on dlg-2487 the cove\u2019s doctor states that the Wrack-Stalker\u2019s venom is neurotoxic, not demonic, and the word \u201cvenom\u201d appears nowhere in the prompt.\n- **The latency floor failed too \u2014 and the page says out loud why that reading is soft.** The candidate\u2019s warm median is 3\u202f335.9 ms against the bar\u2019s 2\u202f757.6 \u2014 21% slower on the primary record, 27% with re-runs substituted. It was measured with three generation lanes running concurrently over a live world bench, which is not the cove\u2019s production condition; that floor alone would have earned a quiet-window re-measure, and it is moot, because the canon floor had already ruled.\n- **Its best writing and its disqualifying habit are one behavior.** The candidate composes where the job is to relay \u2014 7.52 / 7.70 voice and character on dialogue, against 6.25 / 5.83 on drift, where it finishes last on both dimensions. A [sibling chair trial](../chair-trials/) gives it the top band of pairwise win-rates among its class on authored probes, and both pages are right: a top win-rate is not a seat.\n- **Nobody leaves this page unmarked.** The canon floor fails for both incumbents as well \u2014 one manufactured a source, a rumour that Garron saw it first, where Garron is canon and the claim about him is not; the other wrote `char.guest\\_a2fcdb6`, a digit dropped from `char.guest\\_a2fc4db6`, into an otherwise intact envelope, so a relationship write landed on a soul that does not exist. Both are carried as product findings, onto the engine\u2019s worklist rather than left in a judge sheet.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\nEverything above is a projection of two files, and both are on this page. [gate.json](data/gate.json) carries the five floors in the words they were registered in \u2014 before the first generation call \u2014 with the verdict each one returned and the one chair ruling marked as a ruling. [rows.json](data/rows.json) carries all 117 cell-scores with the judges\u2019 own notes, and every sample\u2019s wall time, queue wait and re-run. Both are CC BY 4.0, so the arguments are yours to have: recompute the panel means from the per-judge sheets, then run the fabrication count both ways \u2014 zero for every arm under the narrow per-prompt rule, two for the candidate under the gate\u2019s wider \u201cfacts\u201d wording, both readings published \u2014 and decide which one you would have ruled. Or take the sensitivity cuts: drop dlg-2655 whole and the character ordering flips to the candidate by five hundredths, printed here precisely because it is the one cut that moves something.\n\nThen go and listen for yourself. There is no candidate to hear in the chair \u2014 that is what refused means \u2014 but the voices that kept their chairs are running right now: the cove\u2019s dialogue keeps its `gemma4:12b`, the world bench keeps its `gemma4:26b`, and the cove is a live world you can go and meet at [RealKeep](https://realkeep.strata2signal.com/). (And if the cove charms you, [the first-keepers page](https://realkeep.strata2signal.com/first-keepers/) is holding a free copy for the early.) And if three arms over thirteen prompts is too narrow a hearing, [the open call](../the-open-call/) is the bigger audition \u2014 the same town\u2019s people, handed to a far wider field of models.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nTwo neighbours read straight on from here: [the open call](../the-open-call/), the wide audition where a much larger field speaks as this town\u2019s people, and [the voice trials](../voice-trials/), the frozen exam this page shares a candidate with and nothing else \u2014 different prompts, different judges, a different rubric, which is why no number crosses between them. [The whole shelf](../) is one click up, losses published beside the wins. And if you find something here that is wrong, or a reading we should have printed against ourselves, [drop a line](https://strata2signal.com/contact/) \u2014 the raw rows come on request, and so does the correction.\n\n## Provenance {#provenance-d7bf3f}\n\n- **Pre-registered** (the five floors, written down before the first generation call) \u2014 [data/gate.json](data/gate.json)\n- **Recounted** (the panel means on this page are recomputed from the per-judge sheets and cross-checked against the un-blinded record; a disagreement would have stopped the build)\n- **Every sample shown** (13 prompts \u00d7 3 arms, nothing sampled away; the four printed in full are named as four of the thirteen)\n- **Blind judging** (arms re-randomised per prompt, sealed maps, imperfections disclosed by the judges themselves)\n- **Hardware by class** (the 96G workstation, shared with a live world bench; disclosed above in both directions)\n- **Machine-readable** ([data/rows.json](data/rows.json), [data/gate.json](data/gate.json), CC BY 4.0 \u2014 take them)\n- **Authorship** \u2014 benched, drafted, and audited by the workshop\u2019s own agents under a human operator\u2019s rulings, then revised with that operator \u2014 often across many rounds; nothing releases until they have read it and signed off. The same division of labor this whole hub practices \u2014 [told in full here](../how-we-work/). Where that authorship is also a judging conflict, it is named in the limits above\n- **Limits stated**\n- **Raw rows on request** \u2014 [drop a line](https://strata2signal.com/contact/).\n\n**Licence: CC BY 4.0 \u2014 the whole page, not only the kit.** The prose, the tables, the folds and the data are yours to quote, re-plot, translate and argue with, including commercially. What we ask back is the one thing the licence already requires: name the source and link to it \u2014 `strata\u2192signal research, research.strata2signal.com` \u2014 so a reader of your version can reach ours and check it against the files. Something like \u2014 `strata\u2192signal research, \u201cThe narrator\u2019s chair, refused\u201d, research.strata2signal.com/cove-voice-head-to-head/, CC BY 4.0`. And if you quote a score, say which scale it sits on: the rows here are read against each other and against nothing else, and no figure on this page is subtracted from a figure on another one.\n\n**One honest edge, which we would rather say than have you find.** The replies quoted on this page were produced by other people\u2019s models, and we cannot licence to you what we do not own. Our selection of them, their arrangement, the scoring, the folds and every word around them are ours, and those are CC BY 4.0; each quoted reply stays subject to whatever terms its own vendor attaches. Every arm and every judge is named above, so you can go and ask them.\n\n## The short version {#top}\n\n*Yesterday\u2019s exhibit \u2014 [the August arrivals](../august-arrivals/) \u2014 watched four newly arrived models sit our frozen exams, and one of them \u2014 Qwen3.6 27B \u2014 dominated the voice trial. This page asks the only question that matters after a result like that: can it take the actual chair? (A chair is one job we try a model for \u2014 on [the chair trials](../chair-trials/) the five are judge, assistant, toolbench, narrator and stopwatch.) So we brought it home \u2014 thirteen real prompts lifted verbatim from a night of running in a live world of our game \u2014 the cove, three arms (an arm is one model in one posture) on the same rig, three blind judges, and a five-floor gate written down before the first generation call. The answer is no: the candidate was refused on the canon floor and the latency floor. A refused candidate gets no threshold table; this page carries receipts instead.*\n\n**the short version:** The August class\u2019s best voice sat the cove\u2019s actual chair \u2014 and was refused at the gate.\n\n>>>\n\n<<<\n\nEvery diffusion pipeline has a dial labelled *steps*, and we\u2019ve always turned it the way everyone seems to: up when the picture disappoints, down when the queue is slow. The folklore says more steps means more quality, the way more oven-time means more roast. We had priced the dial in seconds before; we had never checked the folklore against the same image drawn again and again.\n\nSo we did the small, boring version of the experiment \u2014 twice, a month apart, on two painters that could not be more different. [The first run](/diffusion/step-ladder-512/): six subjects from Sorrowmoor Cove, [our game](https://realkeep.strata2signal.com)\u2019s fishing village \u2014 two foes, two portraits, two scenes, real content the game renders \u2014 drawn by the painter the game\u2019s in-play sketcher ships by default, at seven step counts from 20 to 40, everything else frozen: same sampler, same 512\u00d7512 canvas, same seed. Forty-two images.\n\n[The second run](/diffusion/new-arrivals/), on the season\u2019s new painters: six of the game\u2019s *real sketch prompts* \u2014 the exact assembled text the in-play sketcher sends \u2014 at 768\u00d7768, at 4, 8, 12, 16, 20 and 32 steps, on four painters, one of them a model distilled to finish in four. Every render carries its seconds, measured from the render graph\u2019s own execution timestamps, and every cell on [the first ladder](/diffusion/step-ladder-512/) and [the new one](/diffusion/steps-limner-flux2-klein-4b/) opens a specimen sheet with its full provenance. This piece is the close-up on what those receipts say \u2014 and they say two different things, which turns out to be the finding.\n\n## What a step is, in one paragraph {#what-a-step-is-in-one-paragraph}\n\nA diffusion model doesn\u2019t paint a picture; it *un-ruins* one. It starts from pure noise and, in a loop, asks a neural network: \u201cwhat noise would I remove to make this look more like the prompt?\u201d \u2014 then removes a little of it. Each pass of that loop is a step, and each step does the same amount of work as the last. That predicts something checkable \u2014 for a fixed sampler (the algorithm that walks the loop) and configuration, if steps are the only thing you change, time should be a straight line with a slope. It is rare, in benchmarks, for anything to be as clean as its theory. This one is \u2014 on both painters.\n\n## Finding one: a step is a fixed-price good {#finding-one-a-step-is-a-fixed-price-good}\n\nFit the shipped painter\u2019s per-rung medians and the line is `seconds = 0.238 + 0.0569 \u00d7 steps`. Drop the one misbehaving render session \u2014 the wobble we get to below \u2014 and it is `seconds = 0.216 + 0.0569 \u00d7 steps`. Both fits ship, because the headline survives either: **a step costs 56.9 milliseconds** at 512\u00b2 on the 24G VRAM rig, and the slope holds to three decimal places whether we fit the medians, all forty-two renders individually, or the post-exclusion set (the intercept \u2014 the fixed overhead of prompt encoding, decoding, plumbing \u2014 moves with the slice: 0.216 s on the post-exclusion set, 0.238 s on the per-rung medians, 0.257 s fitting all forty-two renders individually; the slope does not budge).\n\n| Steps | 20 | 24 | 28 | 30 | 32 | 36 | 40 |\n|---|---|---|---|---|---|---|---|\n| Median seconds | 1.36 | 1.56 | 1.81 | 2.08 | 2.06 | 2.23 | 2.50 |\n\n*Measured 2026-07-10 by the archive\u2019s own clock, on the 24G VRAM rig \u00b7 AlbedoBase XL v2.1 \u00b7 dpmpp_2m/karras \u00b7 512\u00d7512 \u00b7 seed 424242 \u00b7 each cell the median of six subjects at that step count \u00b7 full receipts: [receipts.json](/diffusion/step-ladder-512/receipts.json).*\n\nThe new ladder, on a different card and a bigger canvas, draws the same straight line with different numbers: the distilled painter \u2014 FLUX.2 [klein] 4B, a model distilled to finish in four steps \u2014 costs **73 milliseconds a step** over a quarter-second floor (`0.25 + 0.073 \u00d7 steps`), and [its rungs](/diffusion/steps-limner-flux2-klein-4b/) read 0.62, 0.79, 1.10, 1.40, 1.71 and 2.62 seconds at 4 through 32. The shipped painter on the same rig and canvas costs 99 ms a step over a 0.32 s floor. Different slopes, same shape: budget steps like seconds, because they are seconds.\n\nRead that first table again and you\u2019ll spot the untidy part: **[the 30-step rung](/diffusion/step-ladder-512/) is slower than the 32-step rung** \u2014 by 0.010 s in the raw medians, which the rounded row inflates to twice that \u2014 and we\u2019re showing it to you anyway, because the house law here is that you show the wobble rather than smooth it. The explanation is in the timestamps: that kit ran in four separate render sessions across a few hours, and the 30-step rung ran alone in its own short session \u2014 it also has the widest spread in the kit (1.89 to 2.48 s). Drop that one *session* \u2014 not the rung we dislike, the session that ran differently \u2014 and the fit\u2019s R\u00b2 (the share of the variance the line explains) goes from 0.976 to 0.997 while the slope doesn\u2019t move at all. A slope that survives every way of slicing the data is the trustworthy kind. An R\u00b2 that needs a footnote is the honest kind.\n\n## Finding two: the first turn of the dial is the big one \u2014 and how big depends on the painter {#finding-two-the-first-turn-of-the-dial-is-the-big-one-and}\n\nSeconds are easy to measure. \u201cBetter\u201d is not \u2014 better is a visual judgement, and we won\u2019t pretend a number can make it for you; the galleries exist so you can make it yourself. What a number *can* say is how much the picture **changes**, so we measured that: for each pair of images, the mean absolute per-pixel difference, averaged over the three colour channels (0\u2013255 scale). It is the bluntest instrument on the shelf, on purpose \u2014 perceptual metrics like SSIM or LPIPS answer \u201chow similar does it *look*\u201d, which smuggles a judging model into the measurement; we wanted a number anyone can recompute in three lines. The rule is printed in full below and reproduces on both archives\u2019 lossless masters.\n\nOn the shipped painter (the 512\u00b2 run), **the 20\u219224 rung moves the picture about 1.6\u00d7 as much as the typical later rung** (a median change of 14.7 on the 0\u2013255 scale, against 8.6 to 9.9 for the rungs after). On the distilled painter, starting from the bottom of the dial, the effect is far steeper: **the 4\u21928 rung moves the picture 2.6\u00d7 a later rung** (a median of 19.9 against 7.7), and the biggest single move in either experiment \u2014 32.7 \u2014 is a foe going from [4](/diffusion/steps-limner-flux2-klein-4b/s/the-salt-father-late-round-rent-through-4-steps/) to [8](/diffusion/steps-limner-flux2-klein-4b/s/the-salt-father-late-round-rent-through-8-steps/) steps. Look at the fisherman on the cove floor in the new gallery: at [4 steps](/diffusion/steps-limner-flux2-klein-4b/s/halar-kestrel-the-talk-beat-cove-floor-4-steps/) there is no bird and not much of a floor; [8](/diffusion/steps-limner-flux2-klein-4b/s/halar-kestrel-the-talk-beat-cove-floor-8-steps/) and [16](/diffusion/steps-limner-flux2-klein-4b/s/halar-kestrel-the-talk-beat-cove-floor-16-steps/) draw the birds in and the detail with them, the figure squatting on the floor the whole way \u2014 fine, but squatting; and [32](/diffusion/steps-limner-flux2-klein-4b/s/halar-kestrel-the-talk-beat-cove-floor-32-steps/) stands him up on his legs. Each rung is a visibly different picture, and to our eyes each is better than the last \u2014 the gallery is there so you can disagree. The first turn of the dial is not just the biggest; on a painter built for few steps, it is most of the picture.\n\n## Finding three: the ladder settles on one painter and never on the other {#finding-three-the-ladder-settles-on-one-painter-and-never}\n\nHere is where the two runs \u2014 the 512\u00b2 ladder from July and the 768\u00b2 one from August \u2014 stop agreeing, and it is the finding we did not expect.\n\nMeasure each rung against the 32-step image with the same per-pixel rule as above \u2014 mean absolute difference across the three colour channels, 0\u2013255 \u2014 and ask whether the picture is *approaching* it. On the distilled painter, **every one of the six subjects walks monotonically toward its final image** \u2014 the fisherman reads 25.6, 17.4, 13.4, 11.0, 9.7 at 4, 8, 12, 16 and 20 steps, each rung strictly closer than the last, and the other five subjects do the same without exception. Six of six. The ladder converges: the image at 32 really is what the image at 4 was becoming.\n\nOn the shipped painter, measured at 512\u00b2 from 20 to 40 against [its 40-step image](/diffusion/step-ladder-512/), the trend points the same way in aggregate (13.98 at 20 steps, falling to about 9 on the same scale) \u2014 but **not one of the six subjects approaches it monotonically**. Every single one steps *away* from its own 40-step image at least once on the way up. Zero of six. And remember the sampler is deterministic and the seed is fixed: nothing here is random. Above that painter\u2019s finishing point, the right picture of the ladder is not a photograph developing toward its final form \u2014 it\u2019s a shelf of siblings, each rung a slightly different answer to the same prompt, drifting closer in aggregate without ever walking a straight line there.\n\nPut the two ladders side by side and the dial has two regimes. **Below a painter\u2019s finishing point, each rung buys a visibly different and better picture, and the picture is converging.** Above it, each rung buys a sibling. The shipped painter\u2019s ladder started at 20 \u2014 already past its crossing, which the new run puts near 12 to 16 (at 768\u00b2, the same six prompts are mush at 4, composed at 8, and finished for every subject by 16). The distilled painter crosses near its native 4 to 8 and keeps improving in smaller steps to 32. The honest way to set a step count is to find where *your* painter crosses from the first regime into the second, and stop there. In neither case is 40 buying what the folklore promised.\n\n## Finding four: the argument with our own settings \u2014 and what it changed {#finding-four-the-argument-with-our-own-settings-and-what-it}\n\nOur game rendered its in-play sketches at 512\u00b2 and 32 steps \u2014 a tier chosen so a sketch lands in about two seconds and keeps pace with the conversation it illustrates, priced, at the time, in seconds alone. The first ladder raised an eyebrow at that: the largest rung-to-rung change was already behind the dial by 24, so a 24-step sketch gave up one typical rung of drift for half a second of pace (0.50 s by the measured medians: 2.06 s at 32 against 1.56 s at 24). We were careful then not to move a production setting off six subjects and one seed; that is how superstitions start.\n\nThe second run is what moved it. On the 96G VRAM workstation the sketch tier will render on, at 768\u00b2 the shipped painter\u2019s rungs read 0.77, 1.08, 1.51, 1.89 and 3.52 seconds at 4, 8, 12, 16 and 32 \u2014 and 768\u00b2 costs only 0.04\u20130.08 s more than 512\u00b2 at every step count, so the canvas was nearly free and the whole budget was the dial. The operators read the ladders and ruled: the jump from 8 to 12 is where the picture arrives; 12 to 16 is polish nobody sees at sketch scale, not worth the extra half second. The engine\u2019s shipped sketch tier moved to **768\u00b2 at 12 steps \u2014 1.51 s against 3.48 s at the old setting on that card (512\u00b2 at 32 steps, measured there; the 768\u00b2 column reads 3.52 s at the same step count): more picture and less time, on the same painter.** To be precise about what happened: the old tier was never wrong \u2014 it met the brief it was set. The receipts found a cheaper way to meet it, and the setting followed the receipts. That\u2019s the research loop working as intended.\n\nOne more receipt, and it cuts against us: the distilled painter is the sharpest and fastest cell in the whole second run (0.62 s, finished, at 4 steps) and it did *not* take the tier \u2014 it paints a legible cursive signature on two of the six subjects \u2014 [an inland figure](/diffusion/steps-limner-flux2-klein-4b/s/old-halsa-reed-the-talk-beat-the-fold-inland-32-steps/) and [a foe](/diffusion/steps-limner-flux2-klein-4b/s/the-drowned-hand-mid-fight-one-great-wound-32-steps/) \u2014 in every step column, because its template zeroes the negative conditioning that the no-signature guard rides on. A defect, not a taste call, and a research rung for another week. [The fisherman above](/diffusion/steps-limner-flux2-klein-4b/s/halar-kestrel-the-talk-beat-cove-floor-32-steps/) is one of the four it leaves unsigned.\n\n## What to take with you {#what-to-take-with-you}\n\n- A denoising step is a fixed-price good: **56.9 ms** at 512\u00b2 on the 24G VRAM rig, 73 ms for a distilled painter at 768\u00b2 on the 96G VRAM workstation and 99 ms for the shipped one on the same canvas \u2014 invariant to how you slice the data. Budget steps like seconds, because they are seconds.\n- The biggest change your dial will ever buy is its first turn up from the floor \u2014 1.6\u00d7 a later rung on a conventional painter, 2.6\u00d7 on a distilled one.\n- The dial has two regimes. Below a painter\u2019s finishing point the picture converges, rung by rung, toward its final form \u2014 six of six subjects, monotonically. Above it, rungs are siblings: zero of six approached the top monotonically. Find your painter\u2019s crossing (near 12\u201316 for ours at 768\u00b2, 4\u20138 for a distilled one) and stop there.\n- When a rung misbehaves (our 30), show it, explain it, and publish the fit both ways. The slope that survives is the finding.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\nBoth grids are published with every cell captioned and every specimen sheet carrying the verbatim prompt: [the first ladder](/diffusion/step-ladder-512/) \u2014 42 images, `albedobaseXL_v21 \u00b7 dpmpp_2m/karras \u00b7 <n> steps \u00b7 512\u00d7512 \u00b7 seed 424242 \u00b7 <seconds>s` \u2014 and [the new arrivals\u2019 ladders](/diffusion/new-arrivals/) \u2014 six real sketch prompts \u00d7 six step counts on three painters whose licences allow the pictures, with the shipped painter\u2019s two ladders counted, not shown, because its licence text has never been found. That the step count is the only thing moving is a verified property of each manifest \u2014 exactly one distinct value for every other field \u2014 not a promise. The first run\u2019s renders date to 2026-07-10 by the archive\u2019s own clock, on the 24G VRAM rig; the second to 2026-08-24 on the 96G VRAM workstation (machines here are named by VRAM class, not model); within-rig comparisons are exact, extrapolating absolute seconds to your card is approximate. All three fits are straight lines through the stated points; a rung\u2019s median is the median of its six subjects. Both receipt sets ship as machine-readable JSON beside their galleries ([the first](/diffusion/step-ladder-512/receipts.json), [the second](/diffusion/steps-limner-flux2-klein-4b/receipts.json)).\n\nThe first painter is AlbedoBase XL v2.1 \u2014 the engine\u2019s shipped default for in-play sketches; the live world we run pins its own painters for bulk pre-generation, which is why the census in the walk next door gives this one a small share of all renders \u2014 whose creator\u2019s permission flags \u2014 read first-hand from the creator\u2019s listing on 2026-08-11 and recorded on [our licence ledger](/licences/) \u2014 permit publishing outputs with credit: painted by albedobase xl 2.1, by albedobond. (Our newer bench harness holds itself to a stricter bar \u2014 the licence text itself, on disk \u2014 and until that text is found it withholds this painter\u2019s images from new pages. Two evidence bars, both ours; the first gallery ships under the first, the new one under the second, and the ledger names both.) The pixel-difference rule, in full:\n\n```\nfrom PIL import Image, ImageChops, ImageStat\nd = ImageChops.difference(Image.open(a).convert('RGB'), Image.open(b).convert('RGB'))\nmad = sum(ImageStat.Stat(d).mean) / 3.0\n```\n\nRun it on either archive\u2019s lossless masters (the published pages serve compressed derivatives, which add a small floor to every number) and every figure above reproduces.\n\n**See it live.** Play [RealKeep](https://realkeep.strata2signal.com) \u2014 free, no account \u2014 and the limner sketches at the tier this piece moved: 768\u00b2 at 12 steps, about a second and a half a picture, while you read the room it drew.\n\n*The page carries no images; the galleries carry each painter\u2019s credit, and every cell opens its full provenance.*\n\nOne more disclosure: the prompts behind the first grid share a style clause our early art direction wrote, which names a commercial game as a style reference. The gallery publishes those prompts verbatim with a notice \u2014 they\u2019re records of what we typed, not claims of association \u2014 and de-naming that clause product-side was already in progress before this piece was written.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\n[The week\u2019s opener](/the-dog-the-dice-and-the-painter/) walked the whole pipeline \u2014 the file, the dice, the painter, and a dog. This was the close-up on the painter\u2019s dial, and it ends with the dial moved. The bench that supplied the second ladder \u2014 the season\u2019s open-weight painters sitting for the same small village \u2014 [released the day before this piece](/diffusion/new-arrivals/). Two neighbours on the shelf are this piece\u2019s other halves: *[Reading is fast, writing is slow](/reading-is-fast/)* is the other place where time turned out to be physics rather than theatre, and *[The free speed wasn\u2019t free](/the-free-speed-wasnt-free/)* is the other measured slope. Still to come this week: how a vision model *sees*.\n\n[The whole shelf](/) holds the benches behind the claims we publish, failures included. If there is a piece of the machinery you want opened next, [say so](https://strata2signal.com/contact/) \u2014 the suggestion box is read.\n\n*Licence: CC BY 4.0 for the text and tables \u2014 name the source and link to it; images are licensed individually and the galleries carry each painter\u2019s credit.*\n\n## The short version {#top}\n\n*One picture, drawn rung by rung up the step dial, on two painters that could not be more different. Timed to the millisecond and measured to the pixel, twice, a month apart \u2014 and the two runs say two different things, which turns out to be the finding.*\n\n**the short version:** One picture, drawn rung by rung up the step dial, on two painters that could not be more different. Timed to the millisecond and measured to the pixel, twice, a month apart \u2014 and the two runs say two different things, which turns out to be the finding.\n\n>>>\n\n<<<\n\n## Previously, in five minutes {#previously-in-five-minutes}\n\nIf you read [part one](/chopin-in-five-minutes/), you know the machinery: an open-weights music generator (ACE-Step\n1.5), a small detachable adapter trained with LoRA in under five minutes on a\nfive-year-old consumer graphics card, and a strength dial that provably changes the\nsound \u2014 with the honest line that nobody has yet proven the far end of the dial *sounds\nlike Chopin*. One more part-one mechanic rides along: each adapter answers to its own\nmade-up name tag \u2014 part one's was `pd-shakedown`, and the two below are\n`sousa-shakedown` and `bach-shakedown`. That piece ended with a promise: the other dead\ncomposers are coming. Here they are \u2014 trained the same week, by the same recipe, on the\nsame card, so the runs are comparable by construction.\n\n## Sousa: a hundred and six marches {#sousa-a-hundred-and-six-marches}\n\nThe second corpus could not be more different from twenty-four solo-piano recordings:\n**the complete marches of John Philip Sousa \u2014 106 recordings by a full military band**,\n4.4 times as many recordings as Chopin's corpus whether you count what was fetched or\nwhat was trained on. The rights chain\nhas two layers, and both are clear: the recordings are works of the United States\nfederal government, which by law cannot carry copyright at all, and the compositions\nleft copyright by age. (The archive mirror adds a third, independent stamp \u2014 a public-domain mark on\nevery one of the 106 items, verified per item, not sampled.)\n\nOne beat from that verification is worth retelling. The band's own website answered our\nfetcher \u2014 which identifies itself honestly, by name \u2014 with **HTTP 403**. We don't dress\nour tools up as browsers to get past a filter, so the corpus came from the Internet\nArchive's mirror instead: every one of the 106 files checked against the archive's\npublished checksums and byte lengths, 106 of 106, zero mismatches. Slower, and proven.\n\n> \ud83d\udd0a **Listen 1 \u2014 a probe, the stock model with no adapter attached** \u00b7 sha256 (first 16) `1bcc23ac3fa0b85e` \u2014 just *ask* the stock model for a Sousa-style march, in plain words. A probe with its own request, not a control \u2014 the switched-off renders below are this page's baselines.\n>\n> \ud83d\udd0a **Listen 2 \u2014 the march request, adapter attached but turned to zero** \u00b7 `f8490e7086b88ac5` \u2014 part one's cleanest kind of baseline: everything held fixed, the adapter contributing nothing.\n>\n> \ud83d\udd0a **Listen 3 \u2014 the same request, the Sousa adapter at full strength** \u00b7 `c617868d661a4112` \u2014 the one to hold against Listen 2: same request, the adapter contributing all of it instead of nothing.\n\n*Each code is the first 16 characters of that file's sha256; every clip on this page is\nAI-generated.*\n\nTraining: ten passes over 84 recordings (22 held back by piece, same rule as part one),\n**14 minutes 36 seconds** by the trainer's own clock \u2014 the longest run in this story.\n\n**And now the confession this section owes.** The Sousa run produced the arc's first\nreal process lesson: *select the checkpoint you ship on its measured loss, never on\nrecency.* Its halfway checkpoint \u2014 pass five of ten \u2014 carries **better** training loss\nthan the \"final\" pass-ten file (0.8768 against 0.8839). The lesson was written down the\nsame day. Here is the honest part: **it was written** *from* **Sousa and never applied** *to*\n**Sousa.** The shipped adapter *is* the pass-ten file, byte for byte \u2014 and every artefact\ndownstream used it: the duet, the trio, the full-strength march above. The lesson was a\nlesson for the next run, not a description of what shipped.\n\nWe did render the road not taken. The halfway checkpoint's render sits 0.10629 from the\nshipped one on the same request and seed \u2014 more than half either one's distance from\nits own switched-off baseline \u2014 so the loss plateau did not mean the adapter stopped\nmoving. Which of the two is the better *adapter* is an ears question, and no ear has\nruled; nothing downstream was rebuilt on it. Judge for yourself:\n\n> \ud83d\udd0a **Listen 4 \u2014 the halfway checkpoint, same request** \u00b7 `817694f173534e85` \u2014 against Listen 3 above, which is what shipped.\n\nThe next run that finally applied the lesson \u2014 a fourth adapter, whose story is a later\npiece \u2014 promptly met the sequel: its true best pass was never saved at all, because\nsnapshots were written every five passes and its best loss landed on pass nine. The\ntraining ledger we now keep has a column whose whole job is recording how the shipped\ncheckpoint was chosen.\n\n## Bach: the pianist who freed her own recordings {#bach-the-pianist-who-freed-her-own-recordings}\n\nThe third corpus solves the licensing problem the most direct way imaginable: **the\nperformer gave the recordings away herself.** Kimiko Ishizaka's crowd-funded \"Open\"\nBach projects \u2014 the *Open Goldberg Variations* and the *Open Well-Tempered Clavier*,\n79 recordings \u2014 exist precisely so that studio-grade Bach can be free: the Goldberg\nfiles carry the CC0 public-domain deed outright, and the Well-Tempered Clavier files\ncarry a public-domain mark whose own rights field asserts the same dedication. The\ndedication is in the archive items' metadata, not inferred from reputation. And one\ntempting copy of the same music, offered under a licence requiring attribution, was\n**declined on purpose** \u2014 this arc wanted corpora with zero obligations, so that every\ncredit on this page is paid voluntarily.\n\nOne defect in the source material, caught by two independent receipts: the Goldberg\nalbum ships 31 files for 32 pieces \u2014 one file is two variations joined together, found\nbecause its duration matches the sum of the two movements on a sibling release to\nwithin a tenth of a second, and because its own filename names both. Our train/held-out\nsplitter as written would not have seen it, so the split machinery had to grow: Chopin's\ncorpus had one *piece recorded twice*; Bach's had the mirror image, one *file carrying\ntwo pieces*; the unit of splitting became the connected group of files-and-pieces,\nwhich handles both directions at once. The rule stands: the same piece never sits on\nboth sides of the test, whatever shape the files arrive in.\n\nTraining: 63 recordings in, 16 held back, **8 minutes 23 seconds**.\n\n> \ud83d\udd0a **Listen 5 \u2014 the Bach adapter, solo** \u00b7 `0356a72033c3d301` \u2014 this pair runs the other way round from Sousa's: the adapter first, its switched-off baseline second.\n>\n> \ud83d\udd0a **Listen 6 \u2014 the same request, the adapter attached but turned to zero** \u00b7 `85e1dcd0ad099540`\n\n## The bill {#the-bill}\n\n| | Chopin | Sousa | Bach |\n|---|---|---|---|\n| corpus \u2192 training files | 24 \u2192 19 | 106 \u2192 84 | 79 \u2192 63 |\n| held back, by piece | 5 | 22 | 16 |\n| training passes | 10 | 10 | 10 |\n| training time (the trainer's own clock) | 4m 49s | 14m 36s | 8m 23s |\n| training error, first pass \u2192 last | 0.94 \u2192 0.61 | 1.24 \u2192 0.88 | 0.93 \u2192 0.57 |\n\nTotal: **27 minutes 48 seconds of training for three composers** \u2014 the half hour of\nthe title, on one five-year-old card. (Two honesty notes on the table:\nclock-on-the-wall timings run a few seconds longer per run, counting model load and\nadapter save, and the table quotes the trainer's own clock; \"training error\" is the\ntrainer's per-pass mean loss throughout \u2014 its log also prints per-step figures, and the kit\ncarries both.) What that half hour costs *per second of music* \u2014 and why the second, not\nthe track, is the honest unit \u2014 has a piece of its own coming.\n\n## You cannot average two composers {#you-cannot-average-two-composers}\n\nNow the part we saved for last. Each adapter is a *file*. Two adapters trained on the\nsame model, in the same shape \u2014 surely you can just average the two files and get a\nblend? **No \u2014 and the reason is the good part.**\n\nAn adapter changes the model through a *product* of two learned matrices: **A**\nsqueezes the signal down into the adapter's small space, **B** projects it back out.\nAverage A with A and B with B across two adapters, and the multiplication turns on you:\n\n    (\u00bd\u00b7B\u2081 + \u00bd\u00b7B\u2082) \u00d7 (\u00bd\u00b7A\u2081 + \u00bd\u00b7A\u2082)\n        = \u00bc\u00b7(B\u2081A\u2081 + B\u2081A\u2082 + B\u2082A\u2081 + B\u2082A\u2082)\n\nThose middle terms pair *Chopin's* squeeze with *Sousa's* projection and vice versa \u2014\nmathematical chimeras that belong to neither composer and to no blend of them. The\ncorrect target is to add the adapters' *effects*, not their pieces \u2014 and that sum is\ntoo big to fit back in an adapter-sized file, so it gets squeezed to fit: a standard\ntechnique (truncated SVD) finds the best small stand-in by one exact measure \u2014 least\nsquares, matrix by matrix \u2014 and the tool that does it then prices its own approximation\nagainst the exact sum it could not keep:\n\n| merge | parents | mean error vs the exact blend | worst matrix |\n|---|---|---|---|\n| Bach + Chopin | 2 | 1.1 % | 3.6 % \u2014 a key projection, layer 17 |\n| Chopin + Sousa | 2 | 1.2 % | 3.4 % \u2014 a key projection, layer 7 |\n| the trio | 3 | 1.5 % | 4.3 % \u2014 a key projection, layer 17 |\n\nTwo parents cost about one percent of error; a third adds about 27 % more. And a pattern\nwe did not expect: in all three merges, **the hardest thing to squeeze is a key\nprojection \u2014 three for three.** Whatever the attention mechanism's \"keys\" are doing for\nthese adapters, that projection is the least compressible part of them. (Fine print: parents must\nshare the same capacity settings so the scaling cancels; the whole operation runs\noffline on the CPU \u2014 a weight merge touches no graphics card; a merged adapter comes out\nas an ordinary adapter file \u2014 same size, same shape as its parents. And one\ndisclosure: one of the three merges has no surviving build log \u2014 the Chopin+Sousa\nerror row comes from the merged adapter's own records, which is what the kit\ncarries.)\n\n## Where the blends actually sit {#where-the-blends-actually-sit}\n\nThree clips on one request and one pinned seed: the duet, then each parent alone as its\ncontrol. Whether the first sits between the other two is what the numbers below ask.\n\n> \ud83d\udd0a **Listen 7 \u2014 the 50/50 Chopin + Sousa duet** \u00b7 `82b09312c1365513`\n>\n> \ud83d\udd0a **Listen 8 \u2014 the same request, Sousa alone** \u00b7 `300deb847f8597e2`\n>\n> \ud83d\udd0a **Listen 9 \u2014 the same request, Chopin alone** \u00b7 `eec9348b428bc7dd`\n\nFirst, the guard that makes any of these numbers readable: every comparison in this\nsection holds the request *and the random seed* fixed, and moves only the adapter \u2014\nthe single-adapter versions were rendered specifically as controls for these\ncomparisons. By part one's crude ruler \u2014 lining clips up and adding up how far apart\nthe waveforms sit \u2014 the duet behaves like a genuine middle: **its render is closer to\neach parent than the parents are to each other** (0.112 and 0.127, against 0.152\nbetween the parents). That claim is clean and survives its own numbers.\n\nSeparately, and on a completely different kind of evidence: one of us \u2014 the one who\nruns the machines \u2014 listening informally, off-gate and unblinded \u2014 said this about the\nsame clip, quoted exactly as typed: *\"the 50/50 chopin/souza duet is the best imo, truely\nunique\"*. That is a preference, not a measurement; it is on this page because the\nhouse reports what its own ears said and labels it exactly what it is.\n\nEqual weights, by the way, do not buy an equal blend. The trio below, asked for at\nequal thirds, leans toward Bach by waveform closeness (38.8 % where an even split\npredicts 33.3 %) \u2014 while by brightness it sits 35.9 % of the way from its darkest\nparent to its brightest, where an equal blend predicts 56.3 %. Two axes, two answers;\nwe report both and reconcile neither.\n\n## The sentence we took back {#the-sentence-we-took-back}\n\nThe trio's clips share one payload \u2014 60 seconds, 96 BPM, C minor, one fixed seed \u2014\nwith all three parents rendered alone on the identical request as controls.\n\n> \ud83d\udd0a **Listen 10 \u2014 the trio: three composers at equal thirds** \u00b7 `f6d6d2e74801f888`\n>\n> \ud83d\udd0a **Listen 11 \u2014 the trio's request, everything turned to zero** \u00b7 `52dded99ece5bf25`\n\nAnd here is the sentence that was staged for publication \u2014 *\"the trio is closer to each of its\nthree parents than any two parents are to each other\"* \u2014 **and it is false on its own\nnumbers.** One of the nine comparisons breaks it: the trio sits 0.11358 from Chopin,\nwhile Bach and Sousa sit 0.11120 from each other. A reader with the table in hand\nbreaks the sentence in one subtraction, so we broke it first. The honest replacement\nsurvives: **for each parent, the trio sits closer to that parent than that parent sits\nto either other composer** \u2014 three for three, same geometry. The margin the false\nversion failed by, 0.00238, is nearly two orders of magnitude below the seed-to-seed\nspread our ruler carries \u2014 we retracted the sentence because it fails arithmetically,\nnot because the geometry swung. A published claim that loses to its own table by *any*\nmargin does not ship. That is the rule, not the physics.\n\n## The ruler's noise floor {#the-rulers-noise-floor}\n\nAnd now the caveat that governs every distance on this page, stated beside the\nnumbers. We measured our ruler's own noise floor, and it is humbling: four Sousa\nrenders differing *only* in the random seed sit 0.18225 apart on average \u2014 while the\nSousa adapter itself moves a render 0.19274 from its own baseline. **The floor is 95 %\nof the largest adapter effect we measured \u2014 and the Chopin and Bach adapters pull\n0.077 and 0.093,** *less* **than the floor.** What that floor forbids is reading any\ndistance as an *amount of style*. What it does not forbid are the orderings above,\nbecause the seed was pinned in every comparison those orderings rest on \u2014 the floor\nitself was measured by deliberately letting the seed move, and nothing else. The ruler counts moment-by-moment difference; whether any of these\nclips *sounds* like a blend belongs to ears, and to a sealed listening test this\nseries still owes itself.\n\n## The blend that wasn't {#the-blend-that-wasnt}\n\nOne more receipt, because it explains why the merges exist at all. The serving engine\nthat renders these clips *accepts* two loaded adapters with a strength for each, and\nreports exactly what you asked for \u2014 **and silently plays only the last one you\ntouched.** We know because the \"both adapters at 0.6\" render came back **byte for\nbyte identical** to the Sousa-only control: `11-crossover-nocturne-brass.wav` and\n`ctrl-sousa-only-0.6.wav`, one sha256 (`206f174346f91448`) between two files\nrequested as different things \u2014 while the Chopin-only control hashed differently\n(`30073e5ebdfbeffc`). The engine's status report was bookkeeping, not truth. Blending\nis a merge-time operation, full stop \u2014 and both files stay on the access-controlled\nreview shelf under both names, because a duplicate that *proves* something is worth\nmore than a tidy directory.\n\n## What we did NOT measure {#what-we-did-not-measure}\n\nWhether any merge *sounds like* a blend of its parents \u2014 no formal, blinded listening\ntest has been run on any clip in this series; the one listening event on this page is\na single person's off-gate preference, labelled as exactly that. Style claims from\ndistances \u2014 the noise floor forbids them. Whether the pinned *key* was honoured:\nthe estimator confidently reads F major against a pinned D\u266d on every solo-piano clip,\nand we cannot tell from this evidence whether the pin carries little weight or the\nestimator is the wrong instrument for sixty seconds of one texture \u2014 we did not pick\nthe flattering reading. (Tempo pins, by contrast, came back honoured, allowing for the\nbeat-tracker's standard octave ambiguity.) Whether the better-loss Sousa\ncheckpoint is the better *adapter* \u2014 its render exists and you heard it, but no ears\nhave ruled between the two, and nothing downstream was rebuilt. And the held-back\npieces of all three corpora are still waiting for their test.\n\n## What to take with you {#what-to-take-with-you}\n\n- Three dead composers cost just under half an hour of training on one five-year-old\n  card \u2014 the same recipe, unchanged, three times.\n- Read the rights chain, not the licence flag: one corpus was cleared on two layers at\n  once, one was freed by its own performer, and a tempting copy with strings attached\n  was declined on purpose.\n- You cannot average two adapters \u2014 the multiplication manufactures cross-terms that\n  belong to no composer. Add the *effects*, squeeze honestly, and the squeeze bill is\n  measurable: about one percent for two parents.\n- A distance ruler proves *change*, never *style* \u2014 ours has a noise floor that is\n  95 % of the largest effect we measured, and every claim on this page respects it.\n- The sentence that failed by 0.00238 did not ship. What ships is the version that\n  survives its own table \u2014 and the retraction, printed with the same care.\n\n## How to check our work {#how-to-check-our-work}\n\nEvery number on this page traces to a training log's own per-pass lines, a\nmeasurement record, or a rights receipt read at acquisition time. The data kit beside\nthis article carries the full fingerprints of every clip and the map from each player\nto its file, the render requests behind every clip verbatim, the training logs' pass\nlines for all three runs, the merge error tables, the distance tables behind the geometry claims \u2014 including the one\nthat killed the retracted sentence \u2014 the corpus manifests with their checksums, and\nthe rights-chain receipts. Where two honest instruments disagree, the kit carries\nboth readings.\n\n## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThe corpora: the United States Marine Band's complete Sousa marches, via the Internet\nArchive's mirror \u2014 *\"Audio and scores courtesy of the one and only, the President's\nOwn, The U.S. Marine Band\"*; Kimiko Ishizaka's *Open Goldberg Variations* and *Open\nWell-Tempered Clavier* \u2014 dedications that are the whole point of those projects; and\nMusopen's *Set Chopin Free* recordings, carried over from part one. None of the three\ndemands credit, which is exactly why we give it. The model: ACE-Step 1.5 (MIT \u2014 its row on our [licence ledger](/licences/)) \u2014\nevery clip on this page is AI-generated, and says so. The trainer: Side-Step\n(github.com/koda-dernet/Side-Step), the corrected-timestep LoRA trainer vendored in\nACE-Step 1.5; its upstream licence is CC BY-NC-SA 4.0, though the vendored copy says\nit follows ACE-Step's MIT \u2014 we proceed on the stricter reading, and wrote to ask.\n\nAnd beneath all of it, the open tools this work stood on without modifying: PyTorch\nand torchaudio, which ran the training, and PyTorch again for the merges' arithmetic; Hugging Face's\nPEFT library, the LoRA machinery itself; FFmpeg, the decoder that read every training\nfile; and the Internet Archive, three times over \u2014 the two items that carried the Bach\nrecordings, the mirror that carried the marches, and the Wayback Machine that held part\none's licence page. None of them owed us anything. A\nsmall team and a fleet of AI agents did the work; the humans signed the numbers \u2014\n[how that works](/how-we-work/) is next door.\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nPart one \u2014 [*Teaching a Music Model Chopin in Five Minutes*](/chopin-in-five-minutes/) \u2014 is the field guide this\npiece stands on: what the model is, what an adapter is, and the strength dial from 0\nto 100 %. Coming next: what a corpus actually costs to teach \u2014 which turns out to be\nbought by the second of audio, not by the track, and which pays off the bill above;\nthe memory question part one left open, with the queued test's answer either way; and\nthe fourth adapter \u2014 a genre this time, not a composer. One piece at a time.\n\n## The short version {#top}\n\n*Part one of this series taught a music model Chopin in five minutes and handed you a dial. This is the rest of the story: two more dead composers taught the same way \u2014 a hundred and six marches, then Bach \u2014 and then the part we've been building toward: blending composers with linear algebra, where the obvious method is mathematically wrong, the correct one costs a measurable one percent to squeeze back into a single file, and a sentence already staged for publication had to be taken back before you ever saw it. Every claim carries a receipt, including the retraction.*\n\n**the short version:** Two more dead composers taught the same way \u2014 a hundred and six marches, then Bach \u2014 and then blending composers with linear algebra, where the obvious method is wrong, the right one costs a measurable one percent, and a sentence already staged for publication had to be taken back before you ever saw it.\n\n>>>\n\n<<<\n\n## What you are hearing {#what-you-are-hearing}\n\nEvery clip on this page was rendered by ACE-Step 1.5's fast variant at eight steps, from a written request and a fixed seed, thirty seconds each, A minor throughout, with the engine's output normalisation at \u22121 dB, and copied here byte for byte. The only thing that changes inside a request is the adapter \u2014 nothing added, the adapter at half strength, the adapter at full strength, or the adapter's name tag with no adapter loaded behind it \u2014 and every request that carries the adapter, and the name-tag control too, puts `house-wide, ` at the front and changes nothing else; the untouched requests carry no prefix at all.\n\nUnder each player, two things: which of the four made the clip, and two fingerprints \u2014 the first sixteen characters of the raw render's sha256, then the listening master's \u2014 and the master is the file the player fetches. Beneath each request's players, one row per clip carries the rest: the integrated loudness in LUFS (the broadcast unit; it runs negative, 0 is the most a file can hold, and a change of one is about a third of a notch on a fader), the true peak in dBTP \u2014 the highest point the waveform actually reaches, and the thing a level change can push through the ceiling. Then the loudness range, a third fingerprint for the copy the blind sitting played, the gain in dB the master applied and whether that brought it to the common level, and how long the render took. The article explains what the run was for; this page only plays it.\n\nEvery clip here is AI-generated. The forty-eight clips the adapter made come from a model trained on Creative Commons music whose strictest licence is share-alike, so Attribution-ShareAlike travels with them and with anything you make from one \u2014 the corpus, four hundred and sixteen tracks of which three hundred and thirty-one trained, is credited track by track and licence by licence on the article's page. The thirty-six clips the adapter never touched are the engine's own output.\n\n## How to listen {#how-to-listen}\n\nPlay two clips from the same request one after the other without touching the volume \u2014 they have already been brought to a common level \u2014 and play each of them twice. Thirty seconds is short. If you cannot tell them apart, that is an answer, and it was the commonest one in the sitting: on nine of twenty-four pairs our listener heard no difference worth naming. There is no wrong thing to notice.\n\nThree things worth listening for, in the order the article found them. First, whether the adapter's clip has a floor \u2014 a kick and a bass that hold the room \u2014 or has lost it; the two clips our listener singled out as sounding most like house were both from the untouched model, and they are named below. Second, beat presence: two of the four pairs the adapter won, it won on something arriving on the grid that otherwise did not arrive \u2014 \u201cactually has a hat at the start where B is void of one\u201d; \u201cA actually has a 4-4 beat to start, whereas B has none\u201d (a hat is a hi-hat, the metallic tick between the kicks) \u2014 which is not the layer an adapter of this kind is built to reach, so it is flagged rather than buried. Third, the name-tag clips: those carry the adapter's trigger word with no adapter behind it, so anything you hear in them belongs to the word and not to the weights.\n\nAnd a fourth, which is the article's closing argument and is easier to hear than to read: play any three clips from one request in a row and ask not how they sound but how they are built \u2014 where the sections change, whether anything arrives or leaves, whether it goes anywhere. That is the layer our listener said was wrong, mid-sitting and before any key was opened, and it is not the layer an adapter of this kind can reach.\n\n## The blind sheet, unsealed {#the-blind-sheet-unsealed}\n\nThe sitting was thirty-six presentations: **twenty-four scoring pairs** \u2014 the same request at the same seed, once by the untouched model and once with the adapter at full strength, order randomised per trial from a seed fixed before the sheet existed, labels neutral, file names neutral \u2014 and **twelve sentinels**. A sentinel plays the identical file on both sides: same bytes, same fingerprint, presented as A and B. The sheet offered no \"no preference\" button, on the reasoning that an honest listener is a fair coin on those, and the acceptance band was set on that assumption at two to ten directional answers of twelve. Our listener abstained anyway, on eleven of the twelve. The sentinels here were drawn from the name-tag clips, one per request, always at the primary seed.\n\nEleven of the twelve were heard as identical. **One was not.** On trial 27 \u2014 the deep house request, the same file on both sides \u2014 our listener wrote \u201csimilar, but B sounds slightly cleaner / tighter on the beats\u201d. One directional answer is below the registered band of two, so on the band as written the sentinel block does not accept; the article says what that costs, and what the eleven are worth. Here it is something you can try: every request below names its sentinel, so play a name-tag clip against itself, knowing it is the same file, and notice what your ear offers you anyway.\n\nOn the twenty-four real pairs: eleven for the untouched model, four for the adapter, nine with no preference, against the eighteen the adapter needed. Each request below carries its two trials, what our listener wrote \u2014 exactly as typed, before the key was opened \u2014 and which side was actually the adapter, which nobody knew at the time.\n\n**If you only play four things, play the four requests that asked for house** \u2014 deep house, tech house, disco house, progressive house; P07 to P10 below. Our listener expressed a preference on five of their eight pairs and chose the untouched model every time, which is the observation the article turns on. In each one, play **nothing added** against **the adapter at full strength** at the same seed and see whether you agree. The two clips our listener called the most house-like are P08 at seed 4008 (\u201cA is way better, actually resembles house\u201d) and P02 at seed 5002 (\u201cA sounds better, sounds more like house type music (cleaner)\u201d) \u2014 both from the untouched model.\n\nTwo of the four things you can play here were never in the sitting. The registered sheet also carried a descriptive block pairing the untouched model against the adapter at half strength, and a first null pairing it against the name tag alone; neither was presented \u2014 the twelve name-tag renders were spent as sentinels instead, and the twenty-four half-strength renders were never put in front of anyone. They are on this page because they were rendered and measured \u2014 the half-strength set is what the article's dose-response check ran on \u2014 and because the dial's midpoint is worth hearing. No answer of our listener's attaches to either.\n\n## The twelve requests {#the-twelve-requests}\n\nTwelve requests, in the order the run numbered them: six techno, four house, one breaks, one trance \u2014 the same twelve the previous adapter was judged on, kept so the two runs can be compared. Each request prints exactly as it was sent in the untouched arm; the tempo in the heading is the run's design pin for that request, not a word in the request. The two adapter settings and the name-tag control prepend `house-wide, ` and change nothing else. Within a request the primary seed's four clips come first, then the second seed's three \u2014 the name tag was rendered at the primary seed only, which is why twelve requests make eighty-four clips and not ninety-six \u2014 and in each seed the pair the sitting judged comes first: **nothing added**, then **the adapter at full strength**. The sheet's answers for a request sit under its table, so you can listen first.\n\n## P01 \u2014 minimal techno, 128 BPM {#p01-minimal-techno-128-bpm}\n\n> minimal techno, hypnotic rolling groove, analog drum machine, deep sub bass, sparse percussion, late night\n\n> \ud83d\udd0a **P01 \u00b7 seed 4001 \u00b7 nothing added** \u00b7 raw render `6f29ead374328e04` \u00b7 listening master `bc9f8a7e126f4704`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 4001 \u00b7 the adapter at full strength** \u00b7 raw render `cc16fe5cb0f70582` \u00b7 listening master `0234da9f4a633935`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 4001 \u00b7 the adapter at 0.5** \u00b7 raw render `67cfb19be8ac48a7` \u00b7 listening master `da4848518da8f650`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 4001 \u00b7 the name tag alone, no adapter** \u00b7 raw render `ec4cff68e3db5cc5` \u00b7 listening master `2581f981a6000f5e`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 5001 \u00b7 nothing added** \u00b7 raw render `a19e6a17c52561f0` \u00b7 listening master `cf186ec980fcb0e6`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 5001 \u00b7 the adapter at full strength** \u00b7 raw render `43966dd56b1261e0` \u00b7 listening master `65e3182c04e30da8`\n>\n> \ud83d\udd0a **P01 \u00b7 seed 5001 \u00b7 the adapter at 0.5** \u00b7 raw render `64bc35d672ffb427` \u00b7 listening master `9660c249528c50de`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P01__base__seed4001` | \u221218.29 | \u22121.00 | 6.9 | `6f29ead374328e04` | `154099caef3e7751` | +0.00 | no | 10.3 s |\n| `P01__house-1.0__seed4001` | \u221216.17 | \u22120.85 | 2.2 | `cc16fe5cb0f70582` | `88837c1c3a5b615a` | \u22120.15 | no | 9.4 s |\n| `P01__house-0.5__seed4001` | \u221216.70 | \u22120.82 | 2.4 | `67cfb19be8ac48a7` | `56075512dc6e681f` | \u22120.18 | no | 9.4 s |\n| `P01__trigger-only__seed4001` | \u221216.95 | \u22120.71 | 5.0 | `ec4cff68e3db5cc5` | `25fe11b5794cf1df` | \u22120.29 | no | 10.3 s |\n| `P01__base__seed5001` | \u221213.97 | \u22120.91 | 11.5 | `a19e6a17c52561f0` | `18556febcc0c084f` | \u22122.03 | yes | 10.3 s |\n| `P01__house-1.0__seed5001` | \u221213.76 | \u22120.90 | 7.7 | `43966dd56b1261e0` | `c87d875ab5d68b0a` | \u22122.24 | yes | 9.4 s |\n| `P01__house-0.5__seed5001` | \u221213.56 | \u22120.98 | 9.6 | `64bc35d672ffb427` | `cd23935a1bd2fad0` | \u22122.44 | yes | 9.4 s |\n\n**The sheet.** **Trial 26** (seed 4001) \u2014 no preference; our listener wrote: \u201ctoo similar (both 25 and 26 are really bad compositions, and have a lot of \"glitchy\" sounds that are weird)\u201d. **Trial 24** (seed 5001) \u2014 our listener picked side A, which was **nothing added**, and wrote: \u201cA sounds a bit better, tighter / cleaner beats\u201d. **Trial 25** was this request's sentinel \u2014 the name-tag clip at seed 4001 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P02 \u2014 dub techno, 122 BPM {#p02-dub-techno-122-bpm}\n\n> dub techno, deep chord stabs drenched in delay, soft muffled kick, tape hiss, slow underwater swing\n\n> \ud83d\udd0a **P02 \u00b7 seed 4002 \u00b7 nothing added** \u00b7 raw render `40f73c1b0e939699` \u00b7 listening master `8c11b9c116769b2e`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 4002 \u00b7 the adapter at full strength** \u00b7 raw render `4a8a786ea2b4b553` \u00b7 listening master `2cd2dda68da9a2b8`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 4002 \u00b7 the adapter at 0.5** \u00b7 raw render `33621778e37a3d89` \u00b7 listening master `52880f7abda707a9`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 4002 \u00b7 the name tag alone, no adapter** \u00b7 raw render `473616e224f218a9` \u00b7 listening master `6b2d5724b85aaa5d`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 5002 \u00b7 nothing added** \u00b7 raw render `d333a28f716c5a2f` \u00b7 listening master `434fb10cacf8b443`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 5002 \u00b7 the adapter at full strength** \u00b7 raw render `41d0ff4795c3bffd` \u00b7 listening master `835347bdbb6147d1`\n>\n> \ud83d\udd0a **P02 \u00b7 seed 5002 \u00b7 the adapter at 0.5** \u00b7 raw render `14db27910168ffd6` \u00b7 listening master `3d89bf8010c08d75`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P02__base__seed4002` | \u221216.06 | \u22121.00 | 6.0 | `40f73c1b0e939699` | `da512ba894e16e11` | +0.00 | no | 10.3 s |\n| `P02__house-1.0__seed4002` | \u221216.35 | \u22121.00 | 8.6 | `4a8a786ea2b4b553` | `62268553bff852d7` | +0.00 | no | 9.6 s |\n| `P02__house-0.5__seed4002` | \u221215.60 | \u22121.00 | 9.9 | `33621778e37a3d89` | `b6d36151a88b5521` | \u22120.40 | yes | 9.4 s |\n| `P02__trigger-only__seed4002` | \u221215.69 | \u22121.00 | 3.7 | `473616e224f218a9` | `71d01b5042c2cd0b` | \u22120.31 | yes | 10.3 s |\n| `P02__base__seed5002` | \u221214.54 | \u22120.82 | 6.4 | `d333a28f716c5a2f` | `ad984377139e787c` | \u22121.46 | yes | 10.3 s |\n| `P02__house-1.0__seed5002` | \u221214.08 | \u22120.94 | 5.1 | `41d0ff4795c3bffd` | `89447c2807ca5906` | \u22121.92 | yes | 9.4 s |\n| `P02__house-0.5__seed5002` | \u221215.54 | \u22120.99 | 4.4 | `14db27910168ffd6` | `9b66d6fa0b388a51` | \u22120.46 | yes | 9.4 s |\n\n**The sheet.** **Trial 32** (seed 4002) \u2014 our listener picked side A, which was **the adapter at full strength**, and wrote: \u201cA def better, actually has a hat at the start where B is void of one\u201d. **Trial 19** (seed 5002) \u2014 our listener picked side A, which was **nothing added**, and wrote: \u201cA sounds better, sounds more like house type music (cleaner)\u201d. **Trial 5** was this request's sentinel \u2014 the name-tag clip at seed 4002 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P03 \u2014 Detroit techno, 132 BPM {#p03-detroit-techno-132-bpm}\n\n> detroit techno, soaring string pads, crisp 909 drums, warm bassline, futuristic and soulful\n\n> \ud83d\udd0a **P03 \u00b7 seed 4003 \u00b7 nothing added** \u00b7 raw render `729a04f6dbdd01ed` \u00b7 listening master `ac447ff4c16b8544`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 4003 \u00b7 the adapter at full strength** \u00b7 raw render `960c41da96bade5e` \u00b7 listening master `1994d08921b06fff`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 4003 \u00b7 the adapter at 0.5** \u00b7 raw render `30475307ce10caa6` \u00b7 listening master `779d40791ccadd72`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 4003 \u00b7 the name tag alone, no adapter** \u00b7 raw render `4fe0adec9b44b76d` \u00b7 listening master `63de7167c0f88e7a`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 5003 \u00b7 nothing added** \u00b7 raw render `862d48e18db8c561` \u00b7 listening master `df430b19268198b5`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 5003 \u00b7 the adapter at full strength** \u00b7 raw render `1fb6105e5d4586e9` \u00b7 listening master `d2ed36c10da27b57`\n>\n> \ud83d\udd0a **P03 \u00b7 seed 5003 \u00b7 the adapter at 0.5** \u00b7 raw render `cfa01a36f49dc691` \u00b7 listening master `117fbb86c28a011b`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P03__base__seed4003` | \u221213.80 | \u22120.95 | 7.5 | `729a04f6dbdd01ed` | `482b0ce44b20eb83` | \u22122.20 | yes | 10.3 s |\n| `P03__house-1.0__seed4003` | \u221213.92 | \u22120.94 | 8.1 | `960c41da96bade5e` | `deb8ce3742c560ca` | \u22122.08 | yes | 9.4 s |\n| `P03__house-0.5__seed4003` | \u221214.15 | \u22120.97 | 6.5 | `30475307ce10caa6` | `c6b97d32d6969b07` | \u22121.85 | yes | 9.4 s |\n| `P03__trigger-only__seed4003` | \u221214.03 | \u22120.96 | 5.6 | `4fe0adec9b44b76d` | `ec9080901b4e8a85` | \u22121.97 | yes | 10.3 s |\n| `P03__base__seed5003` | \u221219.11 | \u22120.63 | 2.4 | `862d48e18db8c561` | `7bf26c71267ed765` | \u22120.37 | no | 10.3 s |\n| `P03__house-1.0__seed5003` | \u221219.25 | \u22120.81 | 2.5 | `1fb6105e5d4586e9` | `7f2e0670f7fe13e1` | \u22120.19 | no | 9.4 s |\n| `P03__house-0.5__seed5003` | \u221219.39 | \u22120.70 | 1.6 | `cfa01a36f49dc691` | `acf92438b51bab6d` | \u22120.30 | no | 9.4 s |\n\n**The sheet.** **Trial 20** (seed 4003) \u2014 no preference; our listener wrote: \u201cA has a much more pronounced background synth/melody type sound, but i don't have a pref\u201d. **Trial 10** (seed 5003) \u2014 our listener picked side B, which was **the adapter at full strength**, and wrote: \u201cB sounds better, A has more background kind of \"wonky talk\" type ambient sound, which i notice on a lot of ace tracks actually\u201d. **Trial 18** was this request's sentinel \u2014 the name-tag clip at seed 4003 against itself; our listener wrote: \u201ctoo similar to tell apart\u201d.\n\n## P04 \u2014 melodic techno, 124 BPM {#p04-melodic-techno-124-bpm}\n\n> melodic techno, driving arpeggiated synth, big reverb, emotive chord progression, steady four on the floor\n\n> \ud83d\udd0a **P04 \u00b7 seed 4004 \u00b7 nothing added** \u00b7 raw render `33da5224dba96bfb` \u00b7 listening master `6a3dcce14de72c8a`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 4004 \u00b7 the adapter at full strength** \u00b7 raw render `cccf825cf188d828` \u00b7 listening master `a22382ce520fff81`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 4004 \u00b7 the adapter at 0.5** \u00b7 raw render `1c24a873e536604d` \u00b7 listening master `3927eaae9e1894d2`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 4004 \u00b7 the name tag alone, no adapter** \u00b7 raw render `fcda5bcd8d5d920c` \u00b7 listening master `18a21f2a7b6b6ba8`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 5004 \u00b7 nothing added** \u00b7 raw render `ec1c9e43f5d17d03` \u00b7 listening master `9868b91b3c2c171d`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 5004 \u00b7 the adapter at full strength** \u00b7 raw render `029b6f7f99242d2d` \u00b7 listening master `b74a7f6d558bc121`\n>\n> \ud83d\udd0a **P04 \u00b7 seed 5004 \u00b7 the adapter at 0.5** \u00b7 raw render `dd66991c3608bb7a` \u00b7 listening master `b83c97c5668cecb7`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P04__base__seed4004` | \u221218.29 | \u22120.88 | 6.4 | `33da5224dba96bfb` | `6e94842dd7df318d` | \u22120.12 | no | 10.3 s |\n| `P04__house-1.0__seed4004` | \u221217.31 | \u22121.00 | 5.2 | `cccf825cf188d828` | `3e50b4f4194f8355` | +0.00 | no | 9.4 s |\n| `P04__house-0.5__seed4004` | \u221218.09 | \u22121.00 | 5.4 | `1c24a873e536604d` | `553fd6a250568453` | +0.00 | no | 9.4 s |\n| `P04__trigger-only__seed4004` | \u221218.77 | \u22120.90 | 6.2 | `fcda5bcd8d5d920c` | `6244fc4be50231f6` | \u22120.10 | no | 10.3 s |\n| `P04__base__seed5004` | \u221216.79 | \u22120.87 | 5.2 | `ec1c9e43f5d17d03` | `aa8687c7524842a9` | \u22120.13 | no | 10.3 s |\n| `P04__house-1.0__seed5004` | \u221214.40 | \u22121.00 | 4.2 | `029b6f7f99242d2d` | `d6425bbbdbf90a41` | \u22121.60 | yes | 9.4 s |\n| `P04__house-0.5__seed5004` | \u221215.61 | \u22120.99 | 7.0 | `dd66991c3608bb7a` | `744ac136a98963aa` | \u22120.39 | yes | 9.4 s |\n\n**The sheet.** **Trial 33** (seed 4004) \u2014 no preference; our listener wrote: \u201ctoo similar\u201d. **Trial 16** (seed 5004) \u2014 no preference; our listener wrote: \u201cthey sound quite a bit different, but i don't have a pref; in A, the piano is much more pronounced\u201d. **Trial 2** was this request's sentinel \u2014 the name-tag clip at seed 4004 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P05 \u2014 hard techno, 145 BPM {#p05-hard-techno-145-bpm}\n\n> hard techno, distorted rumbling kick, industrial percussion, relentless, dark warehouse\n\n> \ud83d\udd0a **P05 \u00b7 seed 4005 \u00b7 nothing added** \u00b7 raw render `19a21339c58ba55c` \u00b7 listening master `c3bdf1bcb7ef6d7f`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 4005 \u00b7 the adapter at full strength** \u00b7 raw render `4ff46e7427abc904` \u00b7 listening master `7a6e8c2fb530d940`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 4005 \u00b7 the adapter at 0.5** \u00b7 raw render `642efb728f73e055` \u00b7 listening master `95c1d82b1bfbaa26`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 4005 \u00b7 the name tag alone, no adapter** \u00b7 raw render `ce3614c835bfb945` \u00b7 listening master `d4fc724350028b00`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 5005 \u00b7 nothing added** \u00b7 raw render `025057c1b8cec752` \u00b7 listening master `f8a67bec846a5d40`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 5005 \u00b7 the adapter at full strength** \u00b7 raw render `0b6df192333fb524` \u00b7 listening master `d09442284ee61c09`\n>\n> \ud83d\udd0a **P05 \u00b7 seed 5005 \u00b7 the adapter at 0.5** \u00b7 raw render `7e0dca44d7baa403` \u00b7 listening master `529694630e92b16e`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P05__base__seed4005` | \u221217.51 | \u22120.99 | 6.5 | `19a21339c58ba55c` | `68cbf63185a1758d` | \u22120.01 | no | 10.3 s |\n| `P05__house-1.0__seed4005` | \u221216.02 | \u22121.00 | 4.7 | `4ff46e7427abc904` | `d28b223c026f35b3` | +0.00 | no | 9.5 s |\n| `P05__house-0.5__seed4005` | \u221214.77 | \u22120.99 | 4.4 | `642efb728f73e055` | `b9401729c87c1512` | \u22121.23 | yes | 9.4 s |\n| `P05__trigger-only__seed4005` | \u221215.50 | \u22120.99 | 5.4 | `ce3614c835bfb945` | `1a985d005466bee8` | \u22120.50 | yes | 10.3 s |\n| `P05__base__seed5005` | \u221216.97 | \u22120.99 | 7.5 | `025057c1b8cec752` | `c2916fa3ab7fc9d4` | \u22120.01 | no | 10.3 s |\n| `P05__house-1.0__seed5005` | \u221217.31 | \u22121.00 | 4.8 | `0b6df192333fb524` | `2072bcbca67a8200` | +0.00 | no | 9.4 s |\n| `P05__house-0.5__seed5005` | \u221218.28 | \u22120.99 | 6.0 | `7e0dca44d7baa403` | `e8ee9c19d3a99513` | \u22120.01 | no | 9.4 s |\n\n**The sheet.** **Trial 29** (seed 4005) \u2014 no preference; our listener wrote: \u201ctoo similar\u201d. **Trial 21** (seed 5005) \u2014 no preference; our listener wrote: \u201ctoo similar\u201d. **Trial 22** was this request's sentinel \u2014 the name-tag clip at seed 4005 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P06 \u2014 acid techno, 130 BPM {#p06-acid-techno-130-bpm}\n\n> acid techno, squelching 303 bassline, resonant filter sweeps, tight drum machine, raw and hypnotic\n\n> \ud83d\udd0a **P06 \u00b7 seed 4006 \u00b7 nothing added** \u00b7 raw render `f2184d9283300c0d` \u00b7 listening master `5e7eb7366dea7328`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 4006 \u00b7 the adapter at full strength** \u00b7 raw render `9bd54e01e07ba37d` \u00b7 listening master `4a74c473e52e57f1`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 4006 \u00b7 the adapter at 0.5** \u00b7 raw render `420a71a83a50f70f` \u00b7 listening master `e409ef551076d43c`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 4006 \u00b7 the name tag alone, no adapter** \u00b7 raw render `2caa3f6020c5679f` \u00b7 listening master `86a3975ec97478a9`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 5006 \u00b7 nothing added** \u00b7 raw render `042daa2491e56e39` \u00b7 listening master `974e94c55736b565`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 5006 \u00b7 the adapter at full strength** \u00b7 raw render `128e76f5a3a198b8` \u00b7 listening master `cc07db77df3fd98d`\n>\n> \ud83d\udd0a **P06 \u00b7 seed 5006 \u00b7 the adapter at 0.5** \u00b7 raw render `1590a7a0c1e28f33` \u00b7 listening master `7b231813cfa89fa9`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P06__base__seed4006` | \u221215.26 | \u22120.90 | 9.3 | `f2184d9283300c0d` | `75ce1e883abb3c44` | \u22120.74 | yes | 10.3 s |\n| `P06__house-1.0__seed4006` | \u221216.39 | \u22121.00 | 4.1 | `9bd54e01e07ba37d` | `d419b4315e97ff61` | +0.00 | no | 9.4 s |\n| `P06__house-0.5__seed4006` | \u221214.99 | \u22121.00 | 4.3 | `420a71a83a50f70f` | `728757ae384573eb` | \u22121.01 | yes | 9.5 s |\n| `P06__trigger-only__seed4006` | \u221214.87 | \u22121.00 | 6.7 | `2caa3f6020c5679f` | `da732c9ecbb27dc9` | \u22121.13 | yes | 10.3 s |\n| `P06__base__seed5006` | \u221215.50 | \u22120.95 | 8.7 | `042daa2491e56e39` | `18acaa3c039798f9` | \u22120.50 | yes | 10.3 s |\n| `P06__house-1.0__seed5006` | \u221214.78 | \u22120.96 | 3.0 | `128e76f5a3a198b8` | `f65bacdaaf7bd140` | \u22121.22 | yes | 9.5 s |\n| `P06__house-0.5__seed5006` | \u221214.42 | \u22120.98 | 3.9 | `1590a7a0c1e28f33` | `1e26661c1ef1db48` | \u22121.58 | yes | 9.4 s |\n\n**The sheet.** **Trial 8** (seed 4006) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201cB is better\u201d. **Trial 6** (seed 5006) \u2014 our listener picked side A, which was **the adapter at full strength**, and wrote: \u201cA is better\u201d. **Trial 34** was this request's sentinel \u2014 the name-tag clip at seed 4006 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P07 \u2014 deep house, 122 BPM {#p07-deep-house-122-bpm}\n\n> deep house, warm rhodes chords, shuffled hi-hats, smooth sub bass, soulful and laid back\n\n> \ud83d\udd0a **P07 \u00b7 seed 4007 \u00b7 nothing added** \u00b7 raw render `eab731443610023d` \u00b7 listening master `9a5515855790756e`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 4007 \u00b7 the adapter at full strength** \u00b7 raw render `0dff7a97c0b03a93` \u00b7 listening master `77aa527a0222cf7b`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 4007 \u00b7 the adapter at 0.5** \u00b7 raw render `6c0ede64d4b5ebca` \u00b7 listening master `d2e993ea25fca786`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 4007 \u00b7 the name tag alone, no adapter** \u00b7 raw render `3e76e0507abe5aed` \u00b7 listening master `8f5ca8c26a3a766a`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 5007 \u00b7 nothing added** \u00b7 raw render `e9bfa5ca2dba4f8b` \u00b7 listening master `ca6f214ad202c753`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 5007 \u00b7 the adapter at full strength** \u00b7 raw render `8a525bceac2f86ed` \u00b7 listening master `7e7b74c25a3dc97a`\n>\n> \ud83d\udd0a **P07 \u00b7 seed 5007 \u00b7 the adapter at 0.5** \u00b7 raw render `d8b9c60ec89c2588` \u00b7 listening master `24c5e35563837319`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P07__base__seed4007` | \u221215.03 | \u22121.00 | 3.2 | `eab731443610023d` | `eb21d2b4a8769d14` | \u22120.97 | yes | 10.3 s |\n| `P07__house-1.0__seed4007` | \u221214.28 | \u22120.95 | 2.7 | `0dff7a97c0b03a93` | `80f9794969d9fbff` | \u22121.72 | yes | 9.4 s |\n| `P07__house-0.5__seed4007` | \u221214.91 | \u22120.86 | 3.1 | `6c0ede64d4b5ebca` | `5bfa8c39a9f60a30` | \u22121.09 | yes | 9.4 s |\n| `P07__trigger-only__seed4007` | \u221214.71 | \u22120.84 | 2.8 | `3e76e0507abe5aed` | `cfc723b6070105f4` | \u22121.29 | yes | 10.3 s |\n| `P07__base__seed5007` | \u221215.36 | \u22120.94 | 4.3 | `e9bfa5ca2dba4f8b` | `0a6e56b5b08fad07` | \u22120.64 | yes | 10.3 s |\n| `P07__house-1.0__seed5007` | \u221215.43 | \u22120.91 | 3.3 | `8a525bceac2f86ed` | `0c1eed3f745f1f01` | \u22120.57 | yes | 9.4 s |\n| `P07__house-0.5__seed5007` | \u221216.38 | \u22120.79 | 1.9 | `d8b9c60ec89c2588` | `1f2316d5c3559dcf` | \u22120.21 | no | 9.4 s |\n\n**The sheet.** **Trial 4** (seed 4007) \u2014 our listener picked side A, which was **nothing added**, and wrote: \u201csimilar, but A is better\u201d. **Trial 13** (seed 5007) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201cB sounds better\u201d. **Trial 27** was this request's sentinel \u2014 the name-tag clip at seed 4007 against itself, the identical file, the same fingerprint, both sides \u2014 and our listener wrote: \u201csimilar, but B sounds slightly cleaner / tighter on the beats\u201d. It is the run's one false positive and it is on the record.\n\n## P08 \u2014 tech house, 126 BPM {#p08-tech-house-126-bpm}\n\n> tech house, chunky rolling bassline, tight clap, minimal percussion fills, groovy and punchy\n\n> \ud83d\udd0a **P08 \u00b7 seed 4008 \u00b7 nothing added** \u00b7 raw render `46492068acc9d4b2` \u00b7 listening master `cb577e3405defb75`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 4008 \u00b7 the adapter at full strength** \u00b7 raw render `d7c9ba5e6bc12f0c` \u00b7 listening master `fcd90ba41313de0b`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 4008 \u00b7 the adapter at 0.5** \u00b7 raw render `360b45a87a00e945` \u00b7 listening master `dae1535d90c9b297`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 4008 \u00b7 the name tag alone, no adapter** \u00b7 raw render `56a8f3ec10da8bdf` \u00b7 listening master `9282e3f95a0a5b11`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 5008 \u00b7 nothing added** \u00b7 raw render `e9bbb374e793756f` \u00b7 listening master `1268c5c5c8fdd5e9`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 5008 \u00b7 the adapter at full strength** \u00b7 raw render `2eae44106ce90d7e` \u00b7 listening master `74a26bb276a05f00`\n>\n> \ud83d\udd0a **P08 \u00b7 seed 5008 \u00b7 the adapter at 0.5** \u00b7 raw render `a1a22acb494e0885` \u00b7 listening master `2116a13421f22619`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P08__base__seed4008` | \u221216.46 | \u22120.98 | 2.1 | `46492068acc9d4b2` | `0dace6c1add6cac2` | \u22120.02 | no | 10.3 s |\n| `P08__house-1.0__seed4008` | \u221216.88 | \u22121.00 | 1.0 | `d7c9ba5e6bc12f0c` | `f13f69a0b7926492` | +0.00 | no | 9.4 s |\n| `P08__house-0.5__seed4008` | \u221216.67 | \u22120.89 | 1.0 | `360b45a87a00e945` | `74b534f38816d3b2` | \u22120.11 | no | 9.4 s |\n| `P08__trigger-only__seed4008` | \u221217.29 | \u22121.00 | 1.7 | `56a8f3ec10da8bdf` | `946c547083863087` | +0.00 | no | 10.3 s |\n| `P08__base__seed5008` | \u221216.18 | \u22120.94 | 1.6 | `e9bbb374e793756f` | `dcc1d9acd9b77328` | \u22120.06 | no | 10.3 s |\n| `P08__house-1.0__seed5008` | \u221215.42 | \u22121.00 | 1.0 | `2eae44106ce90d7e` | `ffa9b5905c4918bc` | \u22120.58 | yes | 9.4 s |\n| `P08__house-0.5__seed5008` | \u221215.25 | \u22120.91 | 1.1 | `a1a22acb494e0885` | `97c2e1715e4ead7a` | \u22120.75 | yes | 9.4 s |\n\n**The sheet.** **Trial 7** (seed 4008) \u2014 our listener picked side A, which was **nothing added**, and wrote: \u201cA is way better, actually resembles house\u201d. **Trial 9** (seed 5008) \u2014 no preference; our listener wrote: \u201cboth are kinda a mess\u201d. **Trial 12** was this request's sentinel \u2014 the name-tag clip at seed 4008 against itself; our listener wrote: \u201cno pref\u201d.\n\n## P09 \u2014 disco house, 124 BPM {#p09-disco-house-124-bpm}\n\n> disco house, filtered disco loop, live strings and brass stabs, funky bass guitar, joyful\n\n> \ud83d\udd0a **P09 \u00b7 seed 4009 \u00b7 nothing added** \u00b7 raw render `ab34f88b669affc7` \u00b7 listening master `c5f5d9b7457272f1`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 4009 \u00b7 the adapter at full strength** \u00b7 raw render `f799b67a462579a1` \u00b7 listening master `48edc3c050a26132`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 4009 \u00b7 the adapter at 0.5** \u00b7 raw render `2497220a211469c2` \u00b7 listening master `d4e689d36a0110d9`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 4009 \u00b7 the name tag alone, no adapter** \u00b7 raw render `acacde982393fb17` \u00b7 listening master `745309bf0f131eee`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 5009 \u00b7 nothing added** \u00b7 raw render `62709cf9aa113c77` \u00b7 listening master `d8a7ca1ca7b403fe`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 5009 \u00b7 the adapter at full strength** \u00b7 raw render `00fd3a8ac8fae202` \u00b7 listening master `9b3ed91ced5024d1`\n>\n> \ud83d\udd0a **P09 \u00b7 seed 5009 \u00b7 the adapter at 0.5** \u00b7 raw render `debfc97d77ae8923` \u00b7 listening master `57c92ad13cf6c560`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P09__base__seed4009` | \u221214.34 | \u22121.00 | 6.8 | `ab34f88b669affc7` | `3c165224e4dbac4f` | \u22121.66 | yes | 10.3 s |\n| `P09__house-1.0__seed4009` | \u221214.41 | \u22121.00 | 5.9 | `f799b67a462579a1` | `70ec4e2d44fde39f` | \u22121.59 | yes | 9.4 s |\n| `P09__house-0.5__seed4009` | \u221213.99 | \u22120.93 | 6.0 | `2497220a211469c2` | `c6f4c563ed480aa3` | \u22122.01 | yes | 9.4 s |\n| `P09__trigger-only__seed4009` | \u221215.72 | \u22120.65 | 6.0 | `acacde982393fb17` | `d6c973f36b695af5` | \u22120.35 | no | 10.3 s |\n| `P09__base__seed5009` | \u221218.36 | \u22120.89 | 2.0 | `62709cf9aa113c77` | `d0c3a50994e178df` | \u22120.11 | no | 10.3 s |\n| `P09__house-1.0__seed5009` | \u221215.22 | \u22121.00 | 2.3 | `00fd3a8ac8fae202` | `5c91ac3728c85269` | \u22120.78 | yes | 9.4 s |\n| `P09__house-0.5__seed5009` | \u221216.37 | \u22121.00 | 2.6 | `debfc97d77ae8923` | `e7ae9713608dab36` | +0.00 | no | 9.4 s |\n\n**The sheet.** **Trial 30** (seed 4009) \u2014 no preference; our listener wrote: \u201csimilar (both bad)\u201d. **Trial 15** (seed 5009) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201cB sounds better, crisper overall / hats, etc\u201d. **Trial 23** was this request's sentinel \u2014 the name-tag clip at seed 4009 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P10 \u2014 progressive house, 128 BPM {#p10-progressive-house-128-bpm}\n\n> progressive house, long atmospheric build, plucked synth melody, sidechained pads, euphoric drop\n\n> \ud83d\udd0a **P10 \u00b7 seed 4010 \u00b7 nothing added** \u00b7 raw render `658ed42875d2ba1f` \u00b7 listening master `ff57dc4959b69370`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 4010 \u00b7 the adapter at full strength** \u00b7 raw render `50a42118b782d597` \u00b7 listening master `a4f286467bf5eee3`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 4010 \u00b7 the adapter at 0.5** \u00b7 raw render `82276caf4dca50ef` \u00b7 listening master `d221a59b56b01692`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 4010 \u00b7 the name tag alone, no adapter** \u00b7 raw render `d38642de3b98cfff` \u00b7 listening master `d72630db3e19e72f`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 5010 \u00b7 nothing added** \u00b7 raw render `4f7badc5a0b705e6` \u00b7 listening master `d1369f5e70912a7f`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 5010 \u00b7 the adapter at full strength** \u00b7 raw render `b9c326a5d8fc4de8` \u00b7 listening master `67d5be63d236ef3d`\n>\n> \ud83d\udd0a **P10 \u00b7 seed 5010 \u00b7 the adapter at 0.5** \u00b7 raw render `67a05bdedbe67351` \u00b7 listening master `ce497082cde88549`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P10__base__seed4010` | \u221213.42 | \u22121.00 | 3.4 | `658ed42875d2ba1f` | `006a4b6369983bb9` | \u22122.58 | yes | 10.3 s |\n| `P10__house-1.0__seed4010` | \u221215.33 | \u22121.00 | 3.6 | `50a42118b782d597` | `c1b2f5850d2e3f65` | \u22120.67 | yes | 9.5 s |\n| `P10__house-0.5__seed4010` | \u221214.43 | \u22120.90 | 4.4 | `82276caf4dca50ef` | `94dec6b66d072223` | \u22121.57 | yes | 9.5 s |\n| `P10__trigger-only__seed4010` | \u221213.06 | \u22120.87 | 3.5 | `d38642de3b98cfff` | `413453d6117ee214` | \u22122.94 | yes | 10.3 s |\n| `P10__base__seed5010` | \u221218.37 | \u22120.55 | 2.6 | `4f7badc5a0b705e6` | `2c5103547a3d557c` | \u22120.45 | no | 10.3 s |\n| `P10__house-1.0__seed5010` | \u221217.88 | \u22121.00 | 1.9 | `b9c326a5d8fc4de8` | `b41daaa886b8ef8e` | +0.00 | no | 9.5 s |\n| `P10__house-0.5__seed5010` | \u221219.84 | \u22121.00 | 1.6 | `67a05bdedbe67351` | `29dc4a151eb4d505` | +0.00 | no | 9.4 s |\n\n**The sheet.** **Trial 31** (seed 4010) \u2014 no preference; our listener wrote: \u201cB has more background sort of ambient echo sound, no pref on which i like better\u201d. **Trial 35** (seed 5010) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201csimilar, but B sounds slightly cleaner\u201d. **Trial 11** was this request's sentinel \u2014 the name-tag clip at seed 4010 against itself; our listener wrote: \u201ctoo similar / no pref\u201d.\n\n## P11 \u2014 electro breaks, 130 BPM {#p11-electro-breaks-130-bpm}\n\n> electro breakbeat, syncopated broken drums, robotic bass synth, vocoder stabs, retro futuristic\n\n> \ud83d\udd0a **P11 \u00b7 seed 4011 \u00b7 nothing added** \u00b7 raw render `0d2d623638b56f33` \u00b7 listening master `243742862d1f7d11`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 4011 \u00b7 the adapter at full strength** \u00b7 raw render `7033b9e3dc3885ae` \u00b7 listening master `5e35d2728255dd1a`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 4011 \u00b7 the adapter at 0.5** \u00b7 raw render `7562aab5b75b65b1` \u00b7 listening master `497f45455ab472ac`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 4011 \u00b7 the name tag alone, no adapter** \u00b7 raw render `3eb4b2ca269f0ff2` \u00b7 listening master `9c5cb983b9c9c657`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 5011 \u00b7 nothing added** \u00b7 raw render `22515ab8b46a7c92` \u00b7 listening master `dd96c53f967ce504`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 5011 \u00b7 the adapter at full strength** \u00b7 raw render `81ac153d7c837641` \u00b7 listening master `6060175b5e982ab0`\n>\n> \ud83d\udd0a **P11 \u00b7 seed 5011 \u00b7 the adapter at 0.5** \u00b7 raw render `d176654bd9736151` \u00b7 listening master `549ab5da2f8fc05b`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P11__base__seed4011` | \u221216.17 | \u22120.41 | 2.2 | `0d2d623638b56f33` | `43fd265be16ce8f2` | \u22120.59 | no | 10.3 s |\n| `P11__house-1.0__seed4011` | \u221214.50 | \u22121.00 | 4.2 | `7033b9e3dc3885ae` | `676b300ee4d098e7` | \u22121.50 | yes | 9.4 s |\n| `P11__house-0.5__seed4011` | \u221215.11 | \u22120.88 | 7.4 | `7562aab5b75b65b1` | `380a87ede4ae3606` | \u22120.89 | yes | 9.4 s |\n| `P11__trigger-only__seed4011` | \u221215.84 | \u22120.78 | 1.2 | `3eb4b2ca269f0ff2` | `3df64dd7767ce82c` | \u22120.22 | no | 10.3 s |\n| `P11__base__seed5011` | \u221216.91 | \u22120.81 | 1.5 | `22515ab8b46a7c92` | `f9461287330ccca0` | \u22120.19 | no | 10.3 s |\n| `P11__house-1.0__seed5011` | \u221215.37 | \u22120.92 | 0.6 | `81ac153d7c837641` | `6cf1b49c9ae36bb7` | \u22120.63 | yes | 9.4 s |\n| `P11__house-0.5__seed5011` | \u221216.38 | \u22120.71 | 0.8 | `d176654bd9736151` | `73602afe2c04c1ea` | \u22120.29 | no | 9.4 s |\n\n**The sheet.** **Trial 1** (seed 4011) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201cB\u201d. **Trial 3** (seed 5011) \u2014 our listener picked side B, which was **nothing added**, and wrote: \u201cB is way better\u201d. **Trial 28** was this request's sentinel \u2014 the name-tag clip at seed 4011 against itself; our listener wrote: \u201ctoo similar\u201d.\n\n## P12 \u2014 uplifting trance, 138 BPM {#p12-uplifting-trance-138-bpm}\n\n> uplifting trance, supersaw lead melody, huge breakdown, pumping kick, euphoric festival energy\n\n> \ud83d\udd0a **P12 \u00b7 seed 4012 \u00b7 nothing added** \u00b7 raw render `925043a260587234` \u00b7 listening master `c2f50853f1441e36`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 4012 \u00b7 the adapter at full strength** \u00b7 raw render `a6595eb4c52a5d30` \u00b7 listening master `947639cbdf16072d`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 4012 \u00b7 the adapter at 0.5** \u00b7 raw render `da93b138ec6fb88f` \u00b7 listening master `12504a0e61044db3`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 4012 \u00b7 the name tag alone, no adapter** \u00b7 raw render `197dcea107437bc7` \u00b7 listening master `c55482978f9109c6`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 5012 \u00b7 nothing added** \u00b7 raw render `aee0ce6f099163fc` \u00b7 listening master `c66469260c9c7df3`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 5012 \u00b7 the adapter at full strength** \u00b7 raw render `7e9e62f1fba1522a` \u00b7 listening master `675b01324e25560d`\n>\n> \ud83d\udd0a **P12 \u00b7 seed 5012 \u00b7 the adapter at 0.5** \u00b7 raw render `08618e45166d42e8` \u00b7 listening master `118873ac9d910b47`\n\n| file | raw LUFS | true peak dBTP | loudness range | raw sha16 | sitting copy sha16 | gain dB | reached \u221216 | rendered |\n|---|---:|---:|---:|---|---|---:|---|---:|\n| `P12__base__seed4012` | \u221213.61 | \u22120.70 | 3.0 | `925043a260587234` | `7e01ed03bec952d6` | \u22122.39 | yes | 10.3 s |\n| `P12__house-1.0__seed4012` | \u221214.93 | \u22120.97 | 7.7 | `a6595eb4c52a5d30` | `7a62362c66c906f1` | \u22121.07 | yes | 9.4 s |\n| `P12__house-0.5__seed4012` | \u221214.33 | \u22121.00 | 2.4 | `da93b138ec6fb88f` | `d61b5c95d820500c` | \u22121.67 | yes | 9.4 s |\n| `P12__trigger-only__seed4012` | \u221213.63 | \u22120.96 | 3.1 | `197dcea107437bc7` | `2a3cbce158007ac4` | \u22122.37 | yes | 10.3 s |\n| `P12__base__seed5012` | \u221215.89 | \u22120.95 | 7.1 | `aee0ce6f099163fc` | `f18260c947c6074e` | \u22120.11 | yes | 10.3 s |\n| `P12__house-1.0__seed5012` | \u221213.79 | \u22120.97 | 2.1 | `7e9e62f1fba1522a` | `f4a657906008fa2d` | \u22122.21 | yes | 9.4 s |\n| `P12__house-0.5__seed5012` | \u221213.41 | \u22120.73 | 2.5 | `08618e45166d42e8` | `5ca954ee4d9ec03a` | \u22122.59 | yes | 9.4 s |\n\n**The sheet.** **Trial 14** (seed 4012) \u2014 our listener picked side A, which was **nothing added**, and wrote: \u201cA actually sounds quite a bit better (cleaner)\u201d. **Trial 36** (seed 5012) \u2014 our listener picked side A, which was **the adapter at full strength**, and wrote: \u201cA sounds way better, and these tracks sound WAY different, like A actually has a 4-4 beat to start, whereas B has none\u201d. **Trial 17** was this request's sentinel \u2014 the name-tag clip at seed 4012 against itself; our listener wrote: \u201csounds similar on both, but actually sounds pretty good.\u201d\n\n## Three sets of bytes, and which one the player fetches {#three-sets-of-bytes-and-which-one-the-player-fetches}\n\n**This run produced its listening copies twice, and this page adds a third set. A reader being asked to judge by ear is owed all three, so here they are in order.**\n\nThe **raw renders** are what the engine wrote. Their integrated loudness runs from \u221219.84 to \u221213.06 LUFS \u2014 6.78 units, or a bit over two notches on a fader \u2014 so playing twenty in a row means working the volume knob rather than comparing adapters. That is the whole reason any of the rest exists. They are untouched in `audio/` and every loudness figure on this page was measured from them.\n\nThe **sitting's copies** are what one listener actually heard. The first attempt at them used ffmpeg's single-pass `loudnorm` and left eighteen of eighty-five clips 1 to 2.3 dB louder than the target \u2014 and in a forced-choice test, louder wins, so that was a live confound inside the gate, assigned to sides by accident. It was caught before the sitting and the set was re-made with the two-pass form, which lands the target: all eighty-five came back between \u221216.20 and \u221215.90 LUFS. That is the set the blind sheet played, and it is honest about loudness. It is not a pure level change: `loudnorm` at `linear=true` falls back to dynamic processing when a constant gain cannot also hold the ceiling, and, re-read here sample by sample against the renders they came from, thirty-eight of the eighty-five copies are not a constant multiple of the render each came from. Split by side, fourteen of the twenty-four untouched clips and nine of the twenty-four full-strength adapter clips fell back that way (Fisher's exact two-sided p = 0.25, so the imbalance is not itself established). We are reporting it rather than filing it, because it is the kind of thing that is easy not to mention. Their fingerprints are in every table below, and the copies themselves are in `audio/sitting/` beside the renders, with their own manifest, so the set our listener heard can be checked as well as the set you hear.\n\nThe **listening master** is what the players on this page fetch. It is each render with **one constant gain applied and nothing else** \u2014 no limiter, no compression, no equalisation, no trimming, no re-encoding, the same 48 kHz, 16-bit stereo WAV with the same number of samples \u2014 and its own fingerprint printed beside it. The gain is the smaller of two numbers: how far the clip sits from \u221216 LUFS, and how far its true peak sits from a \u22121 dBTP ceiling. Of the eighty-four, forty-eight land at \u221216 LUFS to within a hundredth, on gains of \u22122.94 to \u22120.11 dB. The other thirty-six are **left at their raw level** \u2014 thirteen of them at a gain of exactly zero, the rest trimmed by no more than \u22120.59 dB \u2014 because their peaks already sit at the engine's own \u22121 dB ceiling, so reaching \u221216 LUFS would have meant pushing them through it, and they stay between \u221219.84 and \u221216.02 LUFS. The other way to do that is a limiter riding the gain, and a limiter would change the very thing you are here to judge, so nothing on this page is limited. That rule is not ours to bend: it was set for the previous companion page in this series, on the same discovery, and it is why these players serve a set the listener never heard rather than the set that was heard.\n\n## How to check these clips {#how-to-check-these-clips}\n\nEvery file in `audio/` is the exact render that was measured: copied, never re-encoded, never normalised, never re-cut, and verified against the run's own sha256 before it was staged. Every file in `audio/master/` is that same render with one level change and nothing else. The page prints the raw render's fingerprint and the master's beside every player, in that order, and the master's is the one a browser fetches. `audio/MANIFEST.sha256` and `audio/master/MANIFEST.sha256` carry every file's full sha256, one `sha256sum -c` line per file; `audio/master/master-records.json` beside them carries the whole recipe \u2014 the gain rule, the ffmpeg version, and for every clip the raw file's sha256 and the mastered file's, the loudness and true peak measured before and after, the constant gain in dB and which of the rule's two terms chose it. The third fingerprint in each table is the copy the blind sitting played; those copies are in `audio/sitting/`, with `audio/sitting/MANIFEST.sha256` beside them, so all three sets can be checked byte for byte.\n\nThe arithmetic, because the counts differ and a reader deserves to know why: the run rendered **eighty-five** clips and this page serves **eighty-four**. The odd one is the determinism control \u2014 `P01__base__seed4001` rendered a second time in a fresh process, which came back byte-identical \u2014 and that is what licenses every other byte-distinct check in the run. It is registered once, under the name it repeats, rather than served twice under two. The article's data kit carries the request payloads verbatim, the render records with every number printed here, the sealed blind key, and the listener's answers exactly as typed and timestamped before the key was opened. If a number here disagrees with the kit, the kit wins and this page is wrong.\n\n## Who ran this, and thanks {#who-ran-this-and-thanks}\n\nThe same small team and fleet of AI agents as the article, on the same machines, and the credits are [The Ceiling Is Not the Corpus](/the-ceiling-is-not-the-corpus/)'s: the four hundred and sixteen tracks, their ninety-five artists and the licences they chose, the dataset that catalogued them, the engine, the trainer and the tools beneath are all named there in full, track by track and deed by deed, because on this run the credits are not a courtesy but the licence \u2014 [how that works](/how-we-work/) is next door, and the [licence ledger](/licences/) carries the engine's row. Every clip on this page is AI-generated, the engine's own model card asks that it be said, and it is said here as well as there.\n\n## The short version {#top}\n\n*Every render of the house adapter's training run \u2014 twelve written requests, two seeds each, the untouched model beside the adapter at two settings of its dial (how much of it is mixed in: half, or full) and beside its name tag with no adapter behind it \u2014 eighty-four clips, labelled, with the blind sheet unsealed. Each player fetches a listening master: the raw render with one constant gain and nothing else. One of us sat thirty-six blind presentations \u2014 twenty-four pairs of the untouched model against the adapter at full strength, and twelve where both sides were the same file \u2014 and preferred the untouched model on eleven of the fifteen pairs that could be told apart. This page is where you check that verdict.*\n\n**the short version:** Eighty-four thirty-second clips from one training run \u2014 twelve written requests, two seeds each, the untouched model beside the adapter at half and full strength and beside its name tag alone \u2014 labelled, with the blind answer sheet unsealed and every answer printed as typed. One of us sat thirty-six presentations without labels \u2014 twenty-four pairs and twelve sentinels \u2014 and on the pairs: eleven for the untouched model, four for the adapter, nine with no preference, against the eighteen of twenty-four the adapter needed to clear. Every player fetches a listening master with one constant gain and nothing else, and every clip prints three fingerprints \u2014 the raw render, the copy the sitting played, and the master the player plays \u2014 so you can tell which bytes you are hearing.\n\n>>>\n\n<<<\n\n*Five terms used on this page: a **seat** is a named job on one of our own machines that a model is plugged into and can be swapped out of; **the cove** is Sorrowmoor Cove, the painted fishing village inside our game RealKeep, and \u201cthe cove ships\u201d means \u201cthe shipped game uses\u201d; **the resident** is the model we keep loaded in memory for everything else the game says, which happens to have eyes too; **the clamp** is the length limit the game puts on each of the nine description fields; and **the key** is the answer sheet written for each photograph before any model was asked about it \u2014 by one of our own agents looking at the picture, not by a human, and the page says so where it matters. Two more, **prefill** and a **wire token**, are explained at the point where they first do work.*\n\nRealKeep is a small game we make \u2014 a painted fishing village called Sorrowmoor Cove, running on our own machines, free and with no account. You hand it a photograph of your own dog, and a painted version of your dog walks into the village and stays there. [Play it](https://realkeep.strata2signal.com) first if you like; the rest of this page is about the thing that happens in between.\n\nWhat happens in between is a gate. [The week\u2019s opening walk](/the-dog-the-dice-and-the-painter/) followed a photograph of a real dog through that whole pipeline without measuring anything, and one station on the walk was this: a local vision model \u2014 running on our hardware, on a photograph that is never written down anywhere, not to disk, not to a log, not to a cache, and is gone the moment the describing ends, so there is nothing left afterwards to train on \u2014 looks at the picture, answers one control question with one of four words, and, only if the word is *ok*, describes what it saw as nine typed fields.\n\nThe refusal half of that gate fails closed by construction: three of the four words have to be said exactly, and everything else \u2014 another word, a malformed reply, a timeout, a dead port \u2014 counts as the fourth. The admit half rests on a model\u2019s judgment, which is a thing you measure rather than trust. So: first the eyes themselves, the mechanics with the arithmetic shown, where a photograph turns out to have a price in tokens counted in the same column as your words; then the gate, watched at work on a dozen photographs and a battery of faults. The full verdict on that gate, every seat against every threshold, is the bake-off at the end of the week; this is the intro it stands on.\n\n## What an image becomes on the way in {#what-an-image-becomes-on-the-way-in}\n\nA language model does one thing: given a sequence of tokens, it predicts the next one. It has no notion of a pixel. So a *vision* language model is really two machines bolted together. The first is a small image encoder that cuts the picture into a grid of patches \u2014 squares of fourteen or sixteen pixels on a side \u2014 and turns every patch into a vector, the same kind of numeric object a word becomes when it is embedded. The second is a *projector*: the layer that translates those patch-vectors into the language model\u2019s own embedding space, so that a patch of sky and the word \u201csky\u201d can sit in the same sequence and be attended to by the same weights. On this family the projector is also where the compressing happens \u2014 it resamples a whole slice of patches down to a fixed, small number of vectors instead of passing one vector per patch \u2014 which is why the counts below climb in flat steps rather than tracking the pixels. The language model then reads the picture the only way it can read anything: as a run of tokens that arrived before the question.\n\nThat predicts something checkable. If patches become tokens, then a photograph should cost a fixed number of prompt tokens for a fixed resolution, the count should rise with resolution in steps rather than smoothly, and the runtime should report it in the same counter it uses for text. We have met the projector once before, in [part three](/the-compressed-photograph/), and only as an accounting nuisance: ~191 MB of weights the parameter count never included, which had to be stripped out of a division before the bits-per-weight arithmetic behaved. We never watched it work. So we watched it work.\n\n## The bench, in one paragraph {#the-bench-in-one-paragraph}\n\nTwo halves, pre-registered before any model was called and kept apart. The registration is on the shelf with eight dated addenda that record what the run taught as it ran: two denominators corrected before any result touched them (a keyed set that was 36, not 60; a battery that scores seven cases, not eight, for a reason given below), no ratio moved; who wrote the answer sheet and which builds sat; a mid-run crash and its seam; the loudest self-check firing; where the run actually happened; and the merge defect that briefly hid one seat from the scorer\u2019s published table. This is a demonstration with its counts stated, not a verdict \u2014 the same run put sixty photographs and eight seats through the same gate against thresholds registered before the first call, and that verdict table is the bake-off\u2019s. Every number below carries the rule that re-derives it and the run it came from: `full-0825`, 2026-08-25 (UTC). The dozen was passed twice, once under the first build of the harness and once under the corrected one; the corrected pass is what prints, the first is recorded in the registration\u2019s third addendum and is named wherever it is used.\n\n**The mechanics half:** one photograph, one describe prompt, the same model, the prompt sent with no image and then with the image at three sizes \u2014 448, 896 and 1344 px on the long side \u2014 reading the runtime\u2019s own `prompt_eval_count` each time. The image\u2019s token cost is the difference, and the no-image baseline is read three times, before, between and after the sizes, so that a counter that wanders is caught rather than subtracted from.\n\n**The gate half, watched:** the game\u2019s real moderation prompt and its real describe prompt, byte for byte, put to two seats. One is the seat the cove ships, `minicpm-v4.5` \u2014 a dense 8-billion-parameter model at Q4_K_M, the exact build the game runs. The other is the resident, `gemma4:26b`, also Q4_K_M \u2014 the registry\u2019s current build, one newer than the one the game keeps loaded; same name, different bytes, and the page says so. Each seat saw a pre-registered dozen of CC0 and public-domain photographs chosen for what a player would actually upload: six animals that should be admitted, three people who must be refused, three painted portraits that must *not* be mistaken for people, each photograph asked twice. Every photograph in the set is a commons release \u2014 the two ordinary human portraits were put under CC0 by the photographers who took them, the third is an official portrait that is public domain by origin, and a ruling made before the set was built holds the line: no player\u2019s photograph, no operator\u2019s own photograph, nothing anyone had to be asked about. Then a fault battery that is not photographs at all, eight cases:\n\n- a truncated JPEG \u00b7 an empty file \u00b7 a one-pixel image \u00b7 a header that lies about its dimensions;\n- a dead port \u00b7 a one-millisecond read deadline \u00b7 a seat name that does not exist;\n- a reply forced to a word the parser has never heard of.\n\n## Finding one: a picture is 199 tokens at 896 px, and the runtime says so \u2014 on one seat {#finding-one-a-picture-is-199-tokens-at-896-px-and-the}\n\nOn the seat the cove ships, the arithmetic came out exactly as the two-machines story predicts. The describe prompt alone costs 380 prompt tokens, and it cost 380 all three times it was read \u2014 and, for what it is worth, the same 380 and the same three image counts under the first build of the harness, a different process at a different hour. With the photograph attached:\n\n| Long edge (px) | jpeg bytes | Prompt tokens | The image\u2019s cost (tokens) | Prefill: time spent reading the prompt |\n|---|---|---|---|---|\n| *(none)* | \u2014 | 380 \u00b7 380 \u00b7 380 | \u2014 | 11 ms (median of the three) |\n| 448 | 15,099 | 446 | **66** | 109 ms |\n| 896 | 47,127 | 579 | **199** | 184 ms |\n| 1344 | 86,309 | 844 | **464** | 394 ms |\n\n*`minicpm-v4.5`, run `full-0825`, 2026-08-25 (UTC), mechanics leg. Prefill is the time the model spends reading the prompt before it produces its first word, from the runtime\u2019s own `prompt_eval_duration`. Rule: image tokens = `prompt_eval_count` with the image \u2212 the median image-less baseline, published only when all three baselines sit within 5 % of that median (they were identical) and every image reading exceeds it.*\n\nLook at the steps. Pixels go 1 : 4 : 9 across those three sizes; the token cost goes 1 : 3.0 : 7.0 \u2014 sublinear, and not a curve. Sixty-six is one slice of 64 tokens plus two boundary markers; 199 is three slices plus seven; 464 is seven slices plus sixteen. That is the arithmetic of a front end that does not turn every patch into a token but cuts the picture into a small number of slices and compresses each slice to a fixed 64 \u2014 so the cost climbs in steps of 64 as the picture earns another slice, with a couple of separators per slice riding along. We infer the slicing from the counts; the counts are the receipt. Prefill time climbs with it \u2014 109, 184, 394 ms \u2014 which is the language model reading 66, 199 and 464 extra tokens before it says a word.\n\nThe graphics card tells the rest. Read from the card itself, this seat\u2019s resident footprint is 7,236 MiB \u2014 7,587 MB. The runtime\u2019s own figure for the same residency reads 6,163 MB: about 1,400 MB less, for the same weights on the same card at the same moment. We publish both, in the units each source reports, and take neither as the other\u2019s check. The gap is not a rounding: on the resident the card reads 19,102 MiB for the loaded seat while the runtime\u2019s own figure reads 1,235 MB \u2014 off by a factor of fifteen, for a model that plainly filled most of the card.\n\nOn the other seat the counter does not resolve an image at all. `gemma4:26b` read 1,085 tokens for the image-less prompt, then 926, then 761 \u2014 the same bytes, three readings, drifting downward \u2014 and with a 448 px image attached it read 985: 59 tokens more than the middle baseline, 100 fewer than the first. The 896 and 1,344 px readings did clear every baseline; 448 is the one that did not \u2014 which means the answer depends on which of three identical readings you subtract, and a picture whose cost depends on that is not a measurement. So for that seat no image-token figure is published; the raw readings are on the shelf with the sentence they earned: *this runtime\u2019s counter does not resolve an image on this seat.* We tried the obvious cure \u2014 a throwaway call with a different prefix before every reading, in case the runtime\u2019s prompt cache was eating the count \u2014 and it changed nothing. We may well be reading a field it was never meant to answer on this path; the API does not promise otherwise, and the runtime is the reason the rest of this page was cheap to measure. What we can say is narrow: on this seat, that field does not track the prompt. The *same* API field is a token count on one path and something else on another, and the only way to know which you have is to read the baseline three times.\n\n## Finding two: the ways a gate says *no* {#finding-two-the-ways-a-gate-says-no}\n\nThe gate\u2019s job is refusing. Its four answers are `ok`, `nsfw`, `recognizable_real_person`, and `REFUSED` \u2014 none of them an identification. The gate asks one question, *is a real human face legible in this frame*, and the model answers with one word: there is no face database on the other side of it, no embedding stored, nothing matched against anything. *Recognizable* is a property of the picture, not a person we could name. And the last of the four has no wire token \u2014 a **wire token** is the exact string the reading code looks for, and the parser matches only the three the model is allowed to say \u2014 so a timeout, a crash, a malformed reply, an unrecognised word, or a model cheekily answering the literal string \u201crefused\u201d all fall through to the same place. We drove all of those at both seats, under both builds of the harness.\n\n| The dozen, asked twice \u00b7 and the battery | minicpm-v4.5 (the cove\u2019s) | gemma4:26b (the resident) |\n|---|---|---|\n| Six animals admitted | **12 / 12** | **12 / 12** |\n| Three real people refused | **6 / 6** | **4 / 6** |\n| Three painted portraits admitted | **0 / 6** | **6 / 6** |\n| Gate replies carrying a wire token | **15 / 24** | **24 / 24** |\n| Fault battery: not admitted, the way the game decides | **7 / 7** | **7 / 7** |\n| Fault battery: the model\u2019s own reply landing on REFUSED | **6 / 7** | **6 / 7** |\n| Same photo, same reply bytes the second time | **9 / 12** | **7 / 12** |\n\n*Run `full-0825`, 2026-08-25 (UTC), dozen leg, two passes per photograph \u2014 so every photo row is out of twice its photographs, and the wire-token row is out of all twenty-four gate calls. The battery is eight cases; the one-pixel image is set aside from both battery rows and discussed on its own below, because what it exposes is a missing floor in our own intake, not a difference between seats \u2014 so both denominators are seven. \u201cThe way the game decides\u201d counts the intake guard\u2019s decision first and the model\u2019s second, admitting only `ok`; the second battery row is the raw reply alone. \u201cSame reply bytes\u201d is the twelve gate replies compared to their second pass, byte for byte \u2014 a differing byte is a differing wording, not necessarily a differing decision. On the cove\u2019s seat all twelve photographs landed on the same side of the gate both times; its three differing replies differed in the shape of the refusal, not in whether it refused. On the resident, two of the three real people were admitted on one pass and refused on the other. That is the distinction the row cannot carry on its own.*\n\nRead the first three rows together and the two seats are mirror images. The seat the cove ships refuses every real person \u2014 and every painting. Not one of its six calls on a museum portrait came back `ok`. Three answered `recognizable_real_person` on the wire: Fantin-Latour\u2019s *Portrait of a Woman* twice, James Peale\u2019s *Portrait of a Lady* once. The other three \u2014 Peale\u2019s second pass, and both passes on David Loggan\u2019s *Portrait of a Man* \u2014 came back in a shape the parser could not read and fell through to `REFUSED`. That is the defect we recorded on 2026-07-10 (UTC), on the bench that seated this model in the first place \u2014 a pixel-art woman it called a real person \u2014 reproduced here to the call, and it is the reason the prompt carries an explicit clause about stylized art that this model does not honour.\n\nWhat that costs is concrete, and worth saying in a player\u2019s words: hand the cove a photograph of a painted or drawn animal \u2014 a commissioned pet portrait, a child\u2019s drawing of the dog \u2014 and the seat the game ships today refuses it, every time, in a refusal indistinguishable from the one a real face gets. The gate is doing the job it was built for on people and the wrong job on paintings, and only one of those is visible from inside the game. Whether any of the eight seats gets both right is the bake-off\u2019s question \u2014 the bake-off\u2019s set includes six stylized animals this dozen left out.\n\nThe resident honours the clause \u2014 six for six \u2014 and then lets two of the three real people through: the two ordinary portraits each got an `ok` on one of their two passes and a refusal on the other. Same photograph, same prompt, same weights, two answers. The official portrait it refused both times. And the sampler was left exactly where the product leaves it \u2014 the bench sends no `temperature` and no `seed`, because the game sends none \u2014 so what this row measures is the determinism of the shipped configuration, not of the weights. A gate has to give the same answer to the same face twice; on this prompt, at this size, on these two passes, this seat did not. That row is the loudest reason it is not the cove\u2019s vision seat as configured \u2014 the seating call itself was made on the 2026-07-10 bench, months before this run; this row confirms it rather than causes it.\n\nNow the fourth row. Nine of the cove seat\u2019s twenty-four gate replies carried no wire token at all. It refused twelve times, and nine of those twelve came back malformed \u2014 the model answered with the *field name* the schema mentions, used as a key, with no `verdict` key anywhere. (Six arrived as `{\"recognizable_real_person\": true}`, two as the bare `{\"recognizable_real_person\"}`, one with the word `\"true\"` in quotes.) The parser has never seen those shapes and never will, so all nine fell through to `REFUSED`. Every one of the six real-person photographs was refused that way \u2014 not one of them by the word the model was supposed to say. An engineer will ask, so: the request asks the runtime for JSON \u2014 the `format: \"json\"` the game itself sends \u2014 not for *this* JSON. The same runtime will take a schema in that field and constrain the decoder to it, which would have made all nine of these shapes unsayable. The game does not do that today and the bench sends what the game sends, so what is measured here is the shipped configuration; pinning the schema at the decoder is queued as work beside the intake floor.\n\nThat is the fall-through doing exactly the job it was built for: the right outcome, reached by the wrong road, six times. The other three malformed replies were paintings, which the game should have admitted, so there the wrong road led to the wrong place too \u2014 the gate closed on a picture it was told to let in, and the fall-through cannot tell those apart. Refusal is a shape, not a judgment: the game did not need the model to say the word. It needed the model to fail to say *ok*. On the people, that was enough; on the paintings, it was the defect wearing a different coat.\n\nThe battery is the same idea driven to its edges. Three transport faults \u2014 a dead port, a one-millisecond read deadline, a seat name that does not exist on the host \u2014 landed on `REFUSED` before any model was involved; so did the reply forced to a non-conforming token, which exercises the parser\u2019s own fall-through end to end. The empty file and the lying header died at the intake guard, which sniffs the bytes and reads the dimensions from the header before any decoder is allowed near the raster: the decompression bomb never got to decompress. The truncated JPEG is the instructive one, and it is why the two battery rows differ by one. The game\u2019s guard refuses it \u2014 a decoder that cannot finish the file is a refusal, by design \u2014 but on the bench we showed those bytes to the model anyway, and both seats said `ok` to a picture their own decoder should have choked on, under both builds. The runtime\u2019s image decoder is more forgiving than the game\u2019s, which is precisely why the game does not let the runtime decide.\n\nAnd then the one-pixel PNG, which is set aside from the seat table because it is not a seat finding. A 1\u00d71 image passes the sniff, the byte cap, the pixel cap and the decode \u2014 the guard has no *minimum* \u2014 and reached both models. The cove\u2019s seat said `ok` to it under the first build of the harness and \u201crecognizable real person\u201d under the second; the resident said `ok` both times. A single pixel walked through a gate built for photographs of animals, and whether the door closed behind it changed between our two builds. That is a hole in the game, not a difference between seats; the fix \u2014 a shortest-side floor at intake, mirrored on both stacks \u2014 is already being built, and the bench excludes the case from every seat\u2019s fail-closed count until the floor exists, with this paragraph as the receipt.\n\n## Finding three: what it saw, against what was there \u2014 six animals, against an answer sheet {#finding-three-what-it-saw-against-what-was-there-six}\n\nOnly after the gate opens does the model get asked what it saw, and it cannot answer in prose. It gets nine typed fields and nothing else: *kind*, *species*, *size*, *colours*, *markings*, *accessories*, *notable features*, *pose or energy*, and one short *art phrase* \u2014 the sentence the painter is handed. Every one is clamped to a length. Not one of them is the background.\n\nBefore any seat was called, an answer sheet was written for each of the thirty-six photographs the bench scores for truth \u2014 the thirty animals that should be admitted, plus six stylized animals \u2014 and frozen with its hash written into the run (`b104ebfa\u2026`, version 3; the six animals here are byte-identical across versions 2 and 3, which differ only by the stylized six).\n\nWe have to be plain about who wrote it: not a human. One of our own agents, from a third model family that is neither seat, opened each prepared photograph and filled the nine fields from the picture, blind to every seat\u2019s reply and before any seat had been called; the same agent sorted every photograph into its bucket from contact sheets. No human wrote or re-checked the nine fields. A human re-keying of a random twenty, done blind and later, is owed and named in the registration; until it exists, \u201cthe key\u201d on this page means that agent\u2019s answer sheet, and the numbers below are agreement with it, not with a person. Then each seat\u2019s reply was scored against it \u2014 the species named truly or not, the colours and markings present or invented, and the one count we care most about: things the model described that were the *room* rather than the *subject*, which the schema has no slot for and which must not travel.\n\n| The six admits, described twice | minicpm-v4.5 | gemma4:26b |\n|---|---|---|\n| First reply parsed into all nine fields | 11 / 12 | 12 / 12 |\n| Needed the retry | 1 | 0 |\n| Species vs the key (exact \u00b7 acceptable \u00b7 wrong) | 2 \u00b7 4 \u00b7 0 | 4 \u00b7 2 \u00b7 0 |\n| Colours it named that were in the key \u00b7 colours of the key\u2019s it found | 10 / 13 \u00b7 10 / 16 | 10 / 11 \u00b7 10 / 16 |\n| Markings it named that matched the key\u2019s wording | 4 / 20 | 4 / 6 |\n| Room caught by the leak-scanner, after the clamp | 2 items (\u201clooking at camera\u201d, \u201ccage\u201d) | 0 |\n| Room a human catches that the scanner missed | 1 (\u201creaching for flowers\u201d) | 0 |\n| Describe, median of 12 calls, load in its own column | 1,326 ms (102 ms load) | 3,775 ms (266 ms load) |\n| Gate, median of 24 calls, load in its own column | 2,959 ms (2,372 ms load) | 6,967 ms (5,284 ms load) |\n\n*Run `full-0825`, 2026-08-25 (UTC), dozen leg, the six admitted photographs, both passes unless a row says otherwise. Species is scored on pass 1 (the key is one row per photograph): EXACT is the key\u2019s own name; ACCEPTABLE is one of the names the key listed as fair, or a name that contains or is contained by one; a vague re-description (\u201ca hulking quadruped\u201d) is WRONG, never acceptable. Colours are counted twice on pass 1 \u2014 how many of the colours a seat named were in the key, then how many of the key\u2019s colours it found. Markings are strict string containment against the key\u2019s wording, over both passes, so \u201cgray muzzle\u201d against the key\u2019s \u201cgreying muzzle\u201d is a miss a human would have forgiven. The scanner row is the pre-registered rule (a room-noun list matched against every filled field, both passes); the row beneath it is us reading the same 108 field slots per seat by eye. Timings are the runtime\u2019s own `total_duration` and `load_duration`: describe over the twelve calls on these six photographs, gate over all twenty-four calls of the dozen.*\n\nBoth seats named every animal an animal that it was. The cove\u2019s seat said *West Highland White Terrier*, *black labrador retriever*, *tabby cat*, *red squirrel*, *horse* \u2014 and, for the cockatiel, *moluccan cockatoo*, which the key accepts as a cockatoo and a human would not accept as the bird in the picture; asked again it said *cockatiel*. The resident said *cockatiel* both times, *orange tabby cat*, *chestnut horse* \u2014 four exact names to the cove seat\u2019s two \u2014 and where the cove\u2019s seat offered twenty markings across its twelve descriptions and matched the key\u2019s wording on four, the resident offered six and matched four. The strict rule flatters neither: it marks \u201cgray muzzle\u201d wrong against \u201cgreying muzzle\u201d and \u201cwhite underbelly\u201d wrong against \u201cpale chest and belly\u201d, and a human reading both would forgive them. What a human would not forgive is the cove seat\u2019s second look at the same two animals \u2014 a *white* muzzle on the greying labrador, a *dark stripe down the back* of a red squirrel that has none \u2014 which is the kind of invention the strict rule exists to count. Colours, both seats are honest: ten of the colours each offered were colours the key had written down.\n\nNow the room. The pre-registered scanner runs a list of room nouns over every filled field, both passes: on the cove\u2019s seat it caught two \u2014 \u201clooking at camera\u201d in the cat\u2019s pose field, a camera word rather than a room object, and \u201ccage\u201d in the cockatiel\u2019s *accessories* field on the second pass, which is the room exactly \u2014 and on the resident it caught nothing in 108 slots. Then we read the same slots by eye, and found one more the scanner\u2019s noun list did not know: the squirrel \u201creaching for flowers\u201d, in the pose field and in the sentence the painter receives, when the flowers are the garden the squirrel was standing in. So the honest count on the cove\u2019s seat is three room items in 108 slots, two by the rule and one by eye; the rule\u2019s count stands as the rule\u2019s and the miss is named. The noun list is not the bench\u2019s to grow: it is lifted word for word from the game\u2019s own clamp, so a word it lacks is a word the game would let through too \u2014 and that fix is in the same build as the intake floor. The resident, read both ways, leaked nothing. Either way the schema did most of the privacy work before the models spoke: there is no field for *where*, so *where* has almost nowhere to go \u2014 and the two places it found were a field for what the animal wears and a field for what it was doing.\n\nThe speed rows want their own paragraph, because the load column is the story. The cove\u2019s seat answers a describe in 1.3 s warm, and a gate in 3.0 s of which 2.4 s is *loading the weights* \u2014 because the game releases the graphics card the moment a describe finishes, by design, so the painter gets the card next, and the next player\u2019s gate pays to load the weights all over again. That is why the moderation call gets a 60-second budget in the game and the describe call gets 30 seconds: the wide budget is for the cold load, not the thinking.\n\nThe resident\u2019s numbers are the same shape at three times the size \u2014 3.8 s to describe, 7.0 s to gate with 5.3 s of load \u2014 and the load half is honestly attributed: a Q4_K_M file of roughly eighteen gigabytes coming off disk, which is the number that sets a load time, not the 25.2 billion parameters it holds. The generation half is not slower. It is faster: on the six admits the resident wrote a median 109 tokens at 262 tokens per second, where the cove\u2019s seat wrote 78 at 121, and its prefill was quicker too \u2014 202 ms against 342. Which leaves an arithmetic this page cannot close. Subtract the runtime\u2019s own load, prefill and generation from the runtime\u2019s own total, and the resident has a median 2.9 seconds per describe accounted to none of the three; the cove\u2019s seat has 0.18. Whatever those seconds are, the runtime does not call them loading, reading, or writing \u2014 and this is the same seat whose prompt-token counter did not move when we attached a picture. [Mixture-of-experts](/three-at-the-table/) routing is not the explanation on offer: at about four billion parameters active per token this seat generates twice as fast as the dense one, as advertised. Where the 2.9 seconds go is a question this page names and does not answer.\n\n## Finding four: the render payoff \u2014 and what the bake-off measures {#finding-four-the-render-payoff-and-what-the-bake-off}\n\nA description is only as good as the picture it produces: the nine fields compose into the game\u2019s own one-line pet sentence, and the cove\u2019s painter paints that. The render leg did not run on 2026-08-25, so the payoff on this page is the sentence itself \u2014 the `art_phrase` field each seat wrote, before the game\u2019s own clamp on it \u2014 one per seat per animal, both passes shown because the second pass is where the seats differ:\n\n| Subject | minicpm-v4.5 | gemma4:26b |\n|---|---|---|\n| The westie | A West Highland White Terrier, on hind legs \u00b7 a white West Highland White Terrier, standing on hind legs with front paws raised | A small West Highland White Terrier, standing on hind legs \u00b7 a white West Highland White Terrier, looking up |\n| The labrador | A wet black labrador retriever, tongue out \u00b7 a wet black labrador with a pink tongue | A wet black labrador retriever, panting \u00b7 a wet black labrador retriever |\n| The tabby | An orange tabby cat, inquisitive \u00b7 an orange tabby cat | A ginger tabby cat, calm \u00b7 an orange tabby cat, calm gaze |\n| The cockatiel | A moluccan cockatoo, orange cheek patch \u00b7 a cockatiel with orange cheek patch, in cage | A grey cockatiel with a yellow crest \u00b7 a perching grey cockatiel |\n| The squirrel | A red squirrel, reaching for flowers \u00b7 a red squirrel, alert | A bushy red squirrel, alert \u00b7 a tufted red squirrel, alert |\n| The horse | A chestnut horse with a white blaze, wearing a halter \u00b7 a brown and white horse with a green halter | A brown horse with a white blaze, calm \u00b7 a chestnut horse with a white blaze |\n\n*The `art_phrase` field, verbatim, pass 1 \u00b7 pass 2. The two room leaks are visible here: \u201cin cage\u201d on the cove seat\u2019s second cockatiel, \u201creaching for flowers\u201d on its first squirrel \u2014 the sentence that reaches the painter, before the game\u2019s clamp. Whether that clamp would have stripped either is part of the same queued fix as the intake floor.*\n\nTwo local judge models from different families read a pre-registered twelve of the run\u2019s first-pass sentences blind against the answer sheet \u2014 three of the six above among them, the rest from photographs this page does not print; no seat names, no order they could learn from \u2014 scoring likeness on a 0\u20134 scale, where 0 is \u201cnot this animal\u201d and 4 is \u201cyou would pick this animal out of a line-up\u201d. That comparison was pre-registered before any of the run\u2019s calls, in a version that scores the sentences rather than the paintings, because the painter did not run on the day. The panel\u2019s scores:\n\n| Likeness, judged blind (0\u20134) | minicpm-v4.5 | gemma4:26b |\n|---|---|---|\n| The panel (mean of the family means) | **2.58** | **2.43** |\n| Judge family one | 2.33 (gemma-family judge, 6 sentences) | 2.57 (mistral-family judge, 7 sentences) |\n| Judge family two | 2.83 (mistral-family judge, 6 sentences) | 2.29 (qwen-family judge, 7 sentences) |\n| The two families said the same number | 3 of 6 | 6 of 7 |\n\n*Each seat is scored only by judge families that are not its own \u2014 the cove\u2019s seat loses the qwen-family judge to shared lineage, the resident loses the gemma one. Seven of the pre-registered twelve subjects carry an answer sheet (six CORE admits \u2014 three of them printed above \u2014 plus one stylized animal; the unkeyed five are named in the linked output); the cove\u2019s seat was judged on six of the seven because its gate refused the stylized animal \u2014 the July defect costing it a scored cell in its own bake-off. Read against the anchors, both seats live between \u201cthe right animal, none of this one\u2019s marks\u201d and \u201cthe right animal with at least one of them\u201d: a sentence usually names your animal truly and sometimes carries the detail that makes it yours. The judges agreed with each other about the resident\u2019s sentences far more than about the cove seat\u2019s.*\n\nWhat the bake-off adds is scale and judgment: sixty photographs instead of a dozen, eight local seats instead of two \u2014 a within-family quantization ladder among them, to ask whether compression costs *seeing* what [part three](/the-compressed-photograph/) could not measure it costing *reading*: 1,122 verdicts at three precisions there, identical every one \u2014 and the thresholds registered before any of the run\u2019s calls. A seat only changes in this estate by a measured, reviewed code change that carries its numbers, never by someone quietly editing a settings file, and the bake-off is where a seat can earn one.\n\n## What to take with you {#what-to-take-with-you}\n\n*Five things, in the piece\u2019s own words:*\n\n- **A picture is tokens.** The front end cuts it into slices, the projector compresses and translates them, the language model reads them as if they were words. On the seat the cove ships the runtime counts them in your prompt\u2019s own column \u2014 66, 199, 464 tokens at 448, 896, 1344 px, in steps of 64 \u2014 and the counts repeated exactly under both builds of the harness. On the other seat the same field counts something that is not the prompt, and the only instrument that caught it was reading the baseline three times.\n- **Refusal is a shape, not a judgment.** Three answers have wire tokens; the fourth, `REFUSED`, is everything else. All six of the cove seat\u2019s refusals of a real person arrived with no wire token at all, and every one of them landed where a refusal lands \u2014 and so did three paintings it should have let in, which the same shape cannot tell apart.\n- **Admission is a judgment, and it has a shape you can watch.** Twelve of twelve animals in on both seats; six of six people out on the cove\u2019s seat \u2014 and four of six on the resident, which admitted the same portrait it had refused a call earlier. Zero of six paintings admitted on the cove\u2019s seat, the 2026-07-10 defect to the call.\n- **The description has almost no slot for the room.** Two items by the pre-registered rule and one more by eye, in 108 field slots on the cove\u2019s seat; none by either reading on the resident. The schema did most of the privacy work before the model spoke; the leaks it let through were a cage and a garden, in the sentence the painter receives, and the fix is in the same build as the intake floor.\n- **Nothing graduates from an intro.** A one-pixel image walked through the game\u2019s own gate \u2014 a floor the game lacked, not a seat\u2019s fault, and the bench\u2019s biggest finding was about the product, not the models. The bake-off at the end of the week is where a seat can earn its change; that is how a seat moves in this estate.\n\n## How to check our work \u2014 and see it live {#how-to-check-our-work-and-see-it-live}\n\n**Re-derive every count.** The pre-registration carries every threshold with its reasoning, written before the first call, and eight addenda dated to the hour \u2014 the arithmetic slip in one denominator, the budget snapshot that raced an eviction, the counter that does not count, the provenance of the answer sheet, the crash and its seam, the self-check that fired, the host, the seat the merge briefly hid from the scored table ([read it](/how-a-vision-model-sees/data/prereg.md)). The run\u2019s `manifest.json` and `rows.jsonl` carry every call \u2014 seat, photograph sha, the raw reply, the parsed verdict, the runtime\u2019s own timings (`total_duration`, `load_duration`, `prompt_eval_count`) rather than a wall clock, and the card\u2019s memory before, after the first load, and after the last call, with the card named by its memory class and nothing else ([the run](/how-a-vision-model-sees/data/)). The photo ledger carries every image\u2019s source URL, its licence token as read from the host\u2019s machine-readable field on the day, and its sha ([the ledger](/how-a-vision-model-sees/data/photo-ledger.md)). These twelve are bench material \u2014 public-domain and CC0 photographs we chose, kept deliberately so the run can be re-checked. A player\u2019s photograph is never one of these; it is never written down at all \u2014 and that promise, unlike every count on this page, is a property of the game\u2019s intake code rather than a reading off this bench: the one claim here we are asking you to take on our word until that path gets its own page. The answer sheet is frozen with its hash in the manifest and its author named inside it; its authoring predates every seat call by the timestamps inside it. The scorer\u2019s own self-refutation checks print in the linked output too \u2014 and the loudest one fired: over the sixty, the shipped seat misses five of its own pre-registered gates, and no seat of the eight cleared them all. That is the bake-off\u2019s story, not this page\u2019s; the registration\u2019s sixth addendum records the firing, what it obliges (no verdict table publishes anywhere until the seating smoke is re-run under this harness), and why the instrument is not the prime suspect \u2014 every failure is a raw reply you can read.\n\n**Reproduce the token arithmetic in four calls.** Any Ollama host with a vision model. Warm the seat first with a throwaway call and discard it \u2014 the first reading after a load is not a reading; in a warm-up we did not publish, ours once returned 3,687 prompt tokens for a prompt that read 1,560 *with* a picture attached, which is the instrument moving and not the model. Then send the same prompt three times with no image and once with, keeping `keep_alive` long enough that all four share one residency, and subtract the median of the three from the one. If the three do not agree within a few per cent, you have found the second seat\u2019s runtime, and you should publish the disagreement rather than the difference.\n\n**See it live.** Play [RealKeep](https://realkeep.strata2signal.com) \u2014 free, no account \u2014 and hand it a photograph of your own animal. The gate you just read about is the one it goes through; the photo is read on our own machines, never kept, and the painted animal that walks in was described by the seat this page measured.\n\n*Machines here are named by VRAM class, not model; this bench ran on the 24G VRAM rig. Within-rig comparisons are exact; extrapolating absolute seconds to your own card is approximate.*\n\n## The rest of the seminar {#the-rest-of-the-seminar}\n\nThis is part five of the machines\u2019 journey \u2014 after *[Reading is fast, writing is slow](/reading-is-fast/)*, *[Everyone on the payroll, three at the table](/three-at-the-table/)*, *[The compressed photograph](/the-compressed-photograph/)*, and *[The free speed wasn\u2019t free](/the-free-speed-wasnt-free/)*. It pays the first half of the measurement [the week\u2019s opening walk](/the-dog-the-dice-and-the-painter/) said the gate was owed \u2014 the admit half watched at work on a dozen photographs and a battery of faults, with the defect it reproduces named to the day \u2014 and it sits beside [the diffusion close-up](/fifty-seven-milliseconds/), which priced the other half of the same pipeline. The verdict on sixty belongs to the bake-off, where these two seats and six more meet the thresholds.\n\n[The whole shelf](/) holds the benches behind the claims we publish, failures included. If there is a piece of the machinery you want opened next, [say so](https://strata2signal.com/contact/) \u2014 the suggestion box is read.\n\n*Licence: CC BY 4.0 for the text and tables \u2014 name the source and link to it; the photographs are CC0 or public domain, each with its source on the ledger. Thanks are owed to the photographers who released their work to the commons and to the museum that put its portraits in the public domain; the bench could not have been public without them.*\n\n## The short version {#top}\n\n*A language model reads everything as tokens \u2014 little word-pieces, one after another. Before it can say anything about a photograph, the picture itself has to become tokens. This is the close-up on that bridge \u2014 what an image becomes on the way in, what it costs, and what a small model actually sees when it looks \u2014 with the gate our own game puts every uploaded photo through as the working example, and the gate\u2019s own answers watched against it.*\n\n**the short version:** A language model reads everything as tokens \u2014 little word-pieces, one after another. Before it can say anything about a photograph, the picture itself has to become tokens. This is the close-up on that bridge \u2014 what an image becomes on the way in, what it costs, and what a small model actually sees when it looks \u2014 with the gate our own game puts every uploaded photo through as the working example, and the gate\u2019s own answers watched against it.\n\n>>>\n\n<<<\n\n*If you're new here: [strata\u2192signal](https://strata2signal.com) is a small workshop (plus a friendly dog with a white patch) building [RealKeep](https://realkeep.strata2signal.com), a game, and the tools around it, with every model running on hardware we own. The [Beat Lab](https://studio.strata2signal.com) is one of those tools, and it's open to anyone. This is how it works, and what it does with what you give it.*\n\n## What it is {#what-it-is}\n\n**Do I need the genie to make a beat?** No. It can look that way at first glance, because the genie is the first thing on the page, but a beat needs no model at all: the drum machine makes one by hand, in your browser, with no wish spent and nothing sent anywhere. Tap steps into the grid, pick sounds, ride the dials, and it is yours. The genie is an optional way in \u2014 a few words, or a photo, into a beat, and a tweak once you have one \u2014 and the reading the board asks for before a post is the other place it appears. (Added 2026-09-04, on an operator's word, as the first of the lab's own answers.)\n\nOpen the page and a beat is already loaded. Tap \u25b6 PLAY and it plays. The machine is a grid: one row per drum voice, sixteen steps across one bar. Tap a step to add a hit, tap again for an accent, once more to clear it. Type a vibe \u2014 *old school breaks*, *dusty lo-fi for a dog asleep on the couch* \u2014 and a genie sets the whole machine up for you, hands you a title and a few sentences about what it made, and reads them aloud if you ask. Hand it a photo instead of words and it does the same from the picture. Flip a switch and your groove goes on the board, where a stranger might pick it up and remix it.\n\nThere is no account, no app, nothing to install, and nothing to agree to.\n\n## The sound is made on your device {#the-sound-is-made-on-your-device}\n\nEvery sound in the Beat Lab is *synthesised* \u2014 built from raw waveforms the instant it plays, by your own browser. There are no drum recordings to download; nothing sits behind the machine but code. (One sound does arrive from us \u2014 the genie's own voice, further down \u2014 and only when you ask for it.) The kick is a sine wave with a fast pitch drop; the hats are shaped noise; the bell is two square waves through a filter; the 808 \u2014 the deep bass note under trap and hip hop \u2014 is a sine with a long tail, its note set by a dial. Ten drum voices are made this way, and so are six pads. A pad is a key you tap for a single sound \u2014 a zap, a riser, a wood block \u2014 and each pad can be set to any of twenty-two sounds. All of it runs on the audio engine already built into every modern browser.\n\nThat's why the page is one file and nothing more. It fetches no code from anyone else's servers \u2014 no content delivery networks (the shared hosts most websites pull their scripts from), no shared libraries, no fonts from a foundry, no analytics. Our web server also sends the page with a rule (a Content-Security-Policy header) that forbids it from loading anything from, or talking to, any other domain. Load the Beat Lab and your browser asks us for two things \u2014 the page, and the board's current grooves \u2014 and then makes music on its own. View the source and you are looking at the whole thing.\n\nIt also makes sharing simple. **\u2934 share the groove** produces a link with the beat written into the link itself \u2014 every step, every dial, the tempo, the swing and the pad sounds, in the part after the `#`, the one piece of a web address a browser keeps to itself and never sends to a server. Whoever opens it has the beat rebuilt on their own device; a shared beat never passes through us. If the genie made this beat, the title and sleeve notes it wrote ride along in the link too; the review you asked for does not \u2014 it stays on your card unless you choose to put the groove on the board. More on those below.\n\n## What happens when you ask the genie {#what-happens-when-you-ask-the-genie}\n\nThe genie is where our servers come in. Press MAKE IT and your words go to a small service on our web server \u2014 a rented virtual machine we administer \u2014 which passes them over our own encrypted link to the workshop, where two language models are waiting. A *model*, here, is a program trained on a vast amount of text that reads a request and writes a reply. Ours are open-weight, meaning anyone can download and run them, and we run them on graphics cards we own. No AI company sees your request.\n\nThe first model is a doorman \u2014 Mistral Small 3.2 \u2014 that checks your text is a musical request and nothing else \u2014 plus, since 2026-08-30, the sounds set on your own two rows (see that day's 07:41 addendum). If the doorman is unreachable, slow, or answers with something we can't read, the wish goes through anyway; only a clear refusal stops it. The second is the writer \u2014 Gemma 4, the larger of the two \u2014 which composes the beat: tempo, swing, the pattern for every voice, the pad sounds, a title, a one-line aside, and a couple of sentences of *sleeve notes* explaining what the pattern does. The beat lands first \u2014 the machine is set up and playing the moment the pattern is shaped \u2014 and the genie's aside is still being typed while you hear it. *(Corrected 2026-09-03: this sentence said the opposite from the day it was written until today; the addendum of 2026-09-01 00:20 had the order right.)* A typical wish takes about four seconds \u2014 the table below says how that was measured, and the note of 2026-08-31 08:34 says when \u2014 and longer when the seat is busy \u2014 and a small panel under every result \u2014 one line, tap to open \u2014 names every model that answered, times the doorman's pass and the whole round trip, and prints the token count and speed. We don't hide the machinery.\n\nAsking the genie to describe *your* beat runs the other way: it reads the grid and writes the review. That request carries the tempo, the swing, the grid, the two tone dials \u2014 warmth and space \u2014 what your two custom rows play and how their two knobs are set, and, once a second set of sounds exists, which set the groove was made with \u2014 and nothing else. **Refine** sends your beat with an instruction \u2014 darker, add a fill, half-time \u2014 and gets back an edit rather than a new beat. A photo goes to the same writer model, which can also look at pictures: it comes back as a short phrase describing the picture's mood, and that phrase becomes the vibe. The photo makes the same two hops as your words. The beat service never writes it to disk \u2014 no temp file, no thumbnail, no cached copy \u2014 and the model that looks at it keeps it only for the length of the call.\n\nBecause every wish costs real computer time, the genie has manners built in: three wishes in any thirty seconds and a hundred and twenty a day from any one network address (a house on one wifi is one address, so it is sized for a room, not a person); and across everybody at once, two wishes composed at a time, a shared allowance of sixty that refills thirty a minute, and at most sixty-four requests held open. Past those the genie says it's catching its breath. When the genie is resting, your beat stays exactly as it is \u2014 the page shows the wait the genie itself named, usually nothing at all and ten seconds after a third quick wish, and the tap works again when the rest ends. Only when our machines can't be reached at all does the page build you a beat itself, on your device, and it says so. A vibe the doorman refuses gets the refusal rather than a beat. Describe falls back the same way \u2014 the page reads the grid itself and writes you a plain-language review. Refine and the photo do need the genie, so those wait for it, and your beat is left exactly as it was.\n\n## The board {#the-board}\n\nOne sentence is the design test everything on the board has to pass: **strangers can interact, leave their own art, and leave without a trace of who they were.** The lab is a drum machine; the board is what makes it an exhibit. Everything in this section is that sentence made mechanical.\n\nThe board is the lab's public shelf: a groove, and the genie's words about it, posted for anyone to hear. A switch sits on the card the moment a beat exists. Flip it on and the post goes up \u2014 and if the genie has not read your beat yet, the switch asks for that reading first, which costs one wish (see the addendum of 2026-08-30 14:13); if it has read it but has no name it sealed for the beat now on screen, the switch asks for a name instead, which is the same one wish, so that a post is never left unnamed while the genie can still name it; flip it off and the post comes down. Taking a post down never counts as a wish: no model is involved, the board checks the seal and writes the line. (Any change you can hear \u2014 a step, a dial, a pad, the filter \u2014 makes a new groove with its own post; only a groove identical down to the dials is \"already up there\", and then the switch has nothing to take down.) A post holds the beat, the genie's own words, the model that wrote them, the minute it went up, the groove it was remixed from, which of eight families the groove was built in and how it came to be that one \u2014 a person named it, the lab worked it out from the groove's own record, the vibe box fell back on it, the lab's die rolled it, or the post records no family at all; the name of the recipe its picture was painted with, the model that painted it and how many steps it took, if it has one; whether a picture it once had has been taken down; its \u2726 tally; and a fingerprint of the claim key your browser keeps (below). No name, no account, no address.\n\nNobody can type onto the board. Every time the genie describes a beat, our server puts a tamper-evident seal on those exact words for exactly what it was shown \u2014 the pattern, the tempo and the swing \u2014 and the board accepts only text whose seal checks out. Move a dial and the reading still holds (the genie never heard the dial); change a step and the card asks for a fresh reading before the switch arms. So what strangers read is always something the genie wrote from the beat alone; a wish you typed never appears in it. That removes the thing boards usually need moderating for; what remains on it is our own model's words, and ours to answer for.\n\nThe page you posted from keeps a small claim key that proves the post was yours; nothing else does. Your browser keeps one such key per post, for your fifty most recent. Clear that browser's stored data \u2014 or go past fifty \u2014 and the older posts stay up with no way for you to pull them down, until the board's five-hundred-post ring pushes them off the end on its own.\n\nThe lab shows one board groove at a time, with its review, a **listen now** button that drops it straight into your machine, a button to hear the review read aloud, **another \u21bb** to move on, and a **\u2726 nice** tap \u2014 the only thing a stranger can write onto your post itself. A card can also carry a small square picture: a sleeve for that groove, drawn by an image model of ours from the beat and the family it was made in \u2014 the tempo, the swing, the pattern, the dials \u2014 and from nothing anybody typed. The genie's title is not in the instruction the painter is given, and neither is anything you typed: nothing written by a person, or by the genie about your groove, goes into it at all, and every field of that instruction is a lookup from a list this lab already holds. What the genie wrote counts one step earlier instead: when nobody named a family, its own words about that groove are what the lab reads one off, and the family is what picks the pool of rooms a picture can be set in (see the addendum of 2026-09-07 13:10). **Which grooves are eligible for a picture:** those whose family a person named, and those the lab worked a family out for itself. A family the lab's die rolled at random, a family the vibe box fell back on because nothing you said named one, and a groove that records no family at all are not eligible, and nothing is ever painted for them. Eligible is not the same as painted \u2014 a picture can be on its way, can have failed, can be switched off for everybody, or can have been taken down by us \u2014 so the square on the card holds one of three things. The picture, if there is one, with one line under it saying which model painted it, how many steps it took and the exact recipe it came from. The drawn blank and the word *painting*, for an eligible groove whose picture has not arrived and has not been taken down \u2014 and that square watches for its own picture, so you do not have to wait for the card to turn: while it says *painting* the page asks our server about that one post four times over about three quarters of a minute, and the picture takes its place the moment it exists, with nothing else on the card moving and no wish spent. Otherwise \u2014 not eligible, or a picture we have taken down \u2014 the square is simply there and empty, holding its place so nothing moves under your eyes as the board turns. On the wall, where a tile has no caption to say which it is, an unpainted tile shows the drawn blank instead. One other thing can appear on your card: remix a groove and post your version, and the original's card counts the remix; the board remembers where a groove came from.\n\n**The wall.** Under that card is a button marked *the wall*. It appears the first time the board hands this page a groove that names a picture \u2014 before that there is nothing behind it to look at, so there is no button \u2014 and once it has appeared it stays for the rest of the visit, even if that groove falls off the newest forty-eight while you are reading. It opens a grid of the board's newest forty-eight posts \u2014 the same small square pictures the card shows, the name, the tempo and the first line of what the genie heard, all at once. The board hands back forty-eight in one read by design, so forty-eight is what the wall is, and the line above it says so along with how large the whole board is. **Plus your own**, however old: your browser keeps a claim key for each of your fifty most recent posts, and every one of those that the newest forty-eight did not already carry is fetched by name and added at the end, marked *yours \u2726*. That mark matters on a shared device \u2014 the claim keys belong to the browser, not to a person, so an iPad several people have posted from shows every groove that device put up, and the mark is what tells you which are on this browser rather than whose they are. Tap any tile and that groove loads into your machine and plays, exactly as **listen now** does on the card. The pictures come from our own web server rather than from the part of the site the genie runs on, so a page of forty-eight of them cannot crowd out somebody's wish; nothing is fetched at all until you open it, and the grid closes again on the same button. **It opens from two places.** The same wall also opens from the card the genie writes for your own beat \u2014 a *\u25a6 the wall* button on that card's own row, beside *\u2726 put it on the board* \u2014 which appears with the one under the board card, at the same moment and under the same rule \u2014 and, like it, stays for the rest of the visit once it has \u2014 opens the same grid and takes you down to it. It is not a second way in, it is the same door nearer your hand: from up there a second tap takes you back to the wall rather than shutting it, the wall's own *close \u2715* is what puts it away, and the caret comes back to whichever of the two you opened it from.\n\n## The voice {#the-voice}\n\n**Hear the genie** reads the card aloud \u2014 the title, the aside, the sleeve notes. The voice is Kokoro, a small open-weight speech model that runs on the ordinary processor of our web server, no graphics card involved, and it will only read words the genie sealed \u2014 or, since v0.32.0, one of the lab's own written answers, read by number and never a word you typed (see the addendum of 2026-09-03 15:59). It runs on its own, far looser clock \u2014 a few seconds between taps \u2014 and never spends one of your hundred and twenty wishes. A finished reading is cached as audio on that same server, keyed by a hash of the words, which is why a line it has read before starts in under half a second; the cache holds no text, no address, and no record of who asked. The one thing it does keep is each file's last-used time \u2014 that's how the oldest readings are dropped when the cache fills.\n\n## What the lab does with what you give it {#what-the-lab-does-with-what-you-give-it}\n\n- **Your words, your picture, your beat** go to our own machines and nowhere else. No third-party AI service is involved anywhere.\n- **Nothing you type reaches another visitor**, with one exception you control: a share link you make yourself carries the title and notes the genie wrote for you \u2014 and if you asked it to, a title can be words you put in its mouth. Your wish itself never travels; text you talked the genie into can, and only in a link you chose to send.\n- **Your address is never written to disk.** The beat service keeps your network address in its memory while it runs \u2014 that is how the daily count (reset at UTC midnight) is kept, how one visitor's \u2726 on a board post counts once, and how we count how many *different* people played in an hour: addresses go into a set, the set's size is written down as a plain number, and the set is counted and thrown away at the first visit after the hour turns. The address itself is never in the request journal, the board file, the feedback file, the voice cache, or the wish ledger. The web server in front of it writes no access log for the lab at all.\n- **Since 2026-09-13 the same set is counted once a day as well:** at UTC midnight \u2014 five seconds past it, by the service's own clock rather than by whoever happens to visit next (changed 2026-09-15, so a night nobody played through still gets counted on time, as a row of zeros) \u2014 the service writes down how many *different* addresses it saw that day, how many requests it answered, and how many of its hourly counts printed \u2014 three numbers and a date, no address and not one word anybody typed \u2014 then drops the day's set exactly as it drops the hour's, which is why nothing new is kept to produce it and why the web server in front of the lab still writes no access log for it. The two counts answer different questions and are written down separately: the address count is people who asked the lab for something \u2014 a wish, a post, a \u2726, a note \u2014 and the request count is every request it answered, a board somebody only read included.\n- **What is kept, is kept on your device.** Your current beat (re-saved every few seconds), your light/dark choice, the posts you've \u2726'd, the keys to your last fifty board posts, and whether you've seen the four-step explainer once live in your own browser's storage. Nothing there is uploaded on its own; the only time any of it travels is when you act \u2014 posting a groove sends that beat, and taking a post down sends that post's key back so the board can check it. Clearing that browser's site data clears all of it.\n- **The words you type are kept \u2014 without you.** Every wish goes into the workshop's own ledger: the words, the beat they produced, the genie's answer, the model that wrote it, and the minute \u2014 including wishes the doorman refused, and the other direction too (the beat you asked about and the review it got). No address, and nothing that ties one line to another or to a person. It's how we learn what people ask for and what the genie made of it, and it never leaves the workshop.\n- **Beats put on the public board may be used to train and improve our own vibe genie**; a beat that never went on the board is never used, each post carries the version of this notice its page showed, and taking a post down also takes it out of any future training set.\n- **No code, fonts, or trackers** are loaded from anyone else's servers.\n- **Feedback** \u2014 the small \u270e button under the board \u2014 keeps three things and no more: your words, the minute (UTC) you sent them, and which build of the page you were on. The humans in the workshop read it.\n\n## Numbers, so it isn't just talk {#numbers-so-it-isnt-just-talk}\n\nMeasured on 2026-08-31 from our own web server through the public site, on the machines the genie has used since 2026-08-29 (twelve rows \u2014 ten synthesised voices and your two \u2014 and twenty-two pad sounds; earlier readings, from the days this guide was published and re-cut, are in the addenda at the end)\n\n| What | Measured |\n|---|---|\n| A typed vibe \u2192 a finished beat | About 4 s |\n| The genie describing your beat | Under 1 s |\n| A photo \u2192 a beat | About 5 s |\n| The voice, first words (first read / repeat) | Under 1 s / about a quarter of a second |\n| A question the lab knows \u2192 its answer | No wish; the answer is on the page (matched in under a millisecond) |\n| The page | One file, about 526 KB (bytes served \u00f7 1,000, measured on 2026-09-09 and stated to the kilobyte: the same code measured twice can differ by a byte, so the kilobyte is the honest unit here; about 509 KB at v0.61.0; about 490 KB at v0.60.0; about 489 KB at v0.59.0; about 486 KB at v0.58.0; about 478 KB at v0.57.0; about 478 KB at v0.55.0; about 476 KB at v0.52.0; about 475 KB at v0.51.1; about 453 KB at v0.48.0; about 452 KB at v0.47.0; about 451 KB at v0.46.0; about 443 KB at v0.45.0; about 415 KB at v0.42.0; about 411 KB at v0.40.0; about 407 KB at v0.35.0; about 394 KB at v0.34.0, about 363 KB at v0.32.0, about 345 KB at v0.31.0, about 344 KB at v0.30.0, about 343 KB at v0.29.0, about 340 KB at v0.27.0, about 336 KB at v0.25.0, about 323 KB at v0.24.0, about 318 KB at v0.22.0, about 295 KB at v0.17.0 rising to about 305 KB by v0.21.0, about 490 KB before v0.17.0 \u2014 see the addenda of 2026-09-01 and 2026-09-02), zero third-party requests |\n\n## What to take with you {#what-to-take-with-you}\n\nThe sound never leaves your device. The genie runs on machines we own. The board only repeats what the genie sealed. The tab is open at [studio.strata2signal.com](https://studio.strata2signal.com) \u2014 go make something loud. The page keeps your beat when the tab goes away and brings it back when you return, and a share link is the copy you can keep or send.\n\n*Corrections and later measurements will be added below, each dated (UTC), with a window at both ends where one applies and saying in plain words what it counts.*\n\n*Addendum, 2026-08-27 22:00\u201323:00 (UTC) \u2014 two behaviours changed after this guide was published earlier the same day, and the sentences above now describe the new ones. First: a rate-limited wish used to replace your beat with one the page built itself while the card said \"resting\"; since Beat Lab v0.1.3 a resting genie leaves the music alone, and the on-device beat appears only when our machines can't be reached. Second: a groove's identity on the board used to cover only the grid, the tempo and the swing, so a filter or dial change counted as \"already up there\"; since v0.1.3 any audible change \u2014 dials, pads, filter, volume \u2014 makes a new groove. The seal is unchanged: it still binds the genie's words to the grid, tempo and swing alone. The numbers table above was measured before these changes and is unaffected by them.*\n\n*Addendum, 2026-08-28 06:40\u201309:40 (UTC) \u2014 this note is about the speed of a wish and the genie's manners, both of which changed after the first addendum, and the sentences and the table above now describe the new ones. Speed first: the table was re-measured on 2026-08-28 between 09:05 and 09:10 UTC, the same way as the published reading of 2026-08-27 (three warm runs each, through the public address, medians). Two things changed underneath it. The engine had been asking the models for a smaller memory than they were set up with, and each wish paid for a reload of the model before a word was written; since Beat Lab v0.2.2 it asks for what the model already has, and on the same card that took a typed vibe from 7\u201315 s to about 4 s. Then, the same morning, the genie moved onto machines of its own \u2014 the pair that used to answer for the workshop's other tools now answers only for those, and the Beat Lab's genie lives on a slower card that is never in their way. On that card a typed vibe becomes a beat in about 7 s, a description arrives in about 1.5 s and a photo becomes a beat in about 8 s: the fast reading was real, and this is the honest one for the machine you are actually talking to. Manners second: since v0.2.3 the genie grants three wishes in any thirty seconds from one address rather than one, and a hundred and twenty a day rather than sixty, because one public address is very often a whole house \u2014 a family on one wifi, or a room at a party, arrived here as one visitor, and the second person to tap met the first person's countdown. A wish refused now says how long until the next one, and it is ten seconds or less. And since v0.2.4 the countdown on the page is the number the genie gave it \u2014 usually no rest at all, ten seconds after a third quick wish \u2014 where the page used to rest thirty seconds after every wish on its own; the small debug line under a result now says which it was. The voice was not re-measured; nothing about it changed.*\n\n*Addendum, 2026-08-28 16:28\u201320:00 (UTC) \u2014 three small things on this page moved during the afternoon without a note like this one, which the page promised; here it is. First, the share control on the lab is now called \"\u2934 share the groove\" (it had two names; now one), and the sentence above says so since 16:28 UTC. Second, the page-size row: the lab grew with the day's fixes, and the number now reads about 270 KB \u2014 measured the way this table has always measured it, the bytes the site serves divided by a thousand (273 today; an earlier \"265\" came off a different instrument, the builder's character count, and was wrong by the width of a unit). Third, the voice paragraph said \"sixty wishes\" for a day whose allowance has been a hundred and twenty since the morning's manners change; it says a hundred and twenty now. Nothing about the models, the seats or the manners changed in this window.*\n\n*Addendum, 2026-08-29 01:41\u201309:07 (UTC) \u2014 this note is about what changed on the lab between the two releases of that morning, and about the page-size row above. The lab gained a share page with a scannable square (the foot says \"built for friends \u2014 share it with yours\") and a tempo stepper at 01:41 UTC; then, at 09:07 UTC, a small \"?\" that opens the four steps \u2014 make a groove, let the genie hear it, put it on the board, share it with friends \u2014 a die beside the vibe box that fills it with one of sixty-four genres, in place of the four suggestion chips, which are gone, and a change of emphasis: the board switch and the chips wear the green outline, and BEATS \u2192 VIBES wears the play button's solid green. The size row now reads about 330 KB, measured the same way as before (the bytes the site serves divided by a thousand; 329 today) \u2014 the explainer and the die are words and code that ship in the one file, and the earlier reading of about 270 KB was true of the page that existed then. Nothing about the models, the seats or the manners changed in this window.*\n\n*Addendum, 2026-08-29 14:40\u201317:27 (UTC) \u2014 this note is about the two releases of that afternoon and the page-size row above. The lab's engine learned to refuse a malformed request in one voice (a request the engine cannot safely read is answered with a clear refusal, never silence), the share sheet now follows the beat while it is open, and the expanded receipt under each result gained a row naming which machine answered \u2014 by a stage name, never an address \u2014 and lost the browser and viewport rows, which told you what you already own. The page grew from about 330 KB to about 345 KB, still with nothing to fetch from anyone else.*\n\n*Addendum, 2026-08-30 00:30 (UTC) \u2014 this note is about the words on the page, which this guide quotes in a few places. Since v0.9.1 the switch under a fresh beat says \"put it on the board \u2014 hit BEATS \u2192 VIBES first\" (it used to say \"read it first\"), every sentence that asks you to get the genie's reading now names that button, and the \"tweak this track\" box for refining a beat moved out of its folded drawer to sit directly under BEATS \u2192 VIBES, where people can find it \u2014 in the lab's first 158 wishes, nobody had. Where this guide quotes the older words, read them as the thought, not the letters. The words and controls of that release also grew the page, from about 345 KB to about 365 KB.*\n\n*Addendum, 2026-08-30 00:31\u201302:23 (UTC) \u2014 this note is about the memory setting the engine used to send with every model call, which the 2026-08-28 note above described as fixed by asking the model server what it already had. The 2026-08-29 outage found the flaw in that fix: when the whole web server rebooted, the engine's one chance to ask came moments before the answering side was ready, so it fell back to a guessed size \u2014 and a guessed size is worse than none, because a model call that disagrees with what is loaded makes the model server reload the model from scratch. The first wish after the reboot took 15.3 seconds \u2014 4.5 for the doorman, 10.8 to write. It got worse a few minutes later, when the model server's own warm-up timer loaded the pinned size back and every wish more than five minutes after the last began paying for two reloads instead of one: 23.7 seconds, of which 3.4 were spent actually writing. That ran until the repair. Since v0.9.2 (2026-08-30) the engine sends no size at all: the model server fills in the size its own operator pinned, which by definition matches what is loaded, so the disagreement can no longer be expressed. The engine still asks \u2014 at startup, retrying for a few minutes until it hears back (and a refusal counts as hearing back), and hourly after that \u2014 but only to write what it hears into its journal as a receipt.*\n\n*Addendum, 2026-08-30 07:41 (UTC) \u2014 this note is about the grid, which grew two rows today, and about what this guide says travels in a link and in a wish. The ten synthesised voices are still ten, and every sentence above about them stays true \u2014 but beneath them now sit two rows of your own: give either one any of the twenty pad sounds and it plays that sound on the steps you tap. The genie never writes on those rows and never clears them \u2014 a wished beat lands under whatever you built there \u2014 but it hears them by instrument name, so its reading can tell you what it thinks of the cowbell. A share link now carries what the two rows play beside their steps, and so does the request a wish sends \u2014 that is how the genie knows the instrument's name. Every groove already on the board, and every link ever shared, keeps its exact identity: an empty row says nothing at all. The new rows and their menus also grew the page, from about 365 KB to about 390 KB.*\n\n*Addendum, 2026-08-30 14:13 (UTC) \u2014 this note is about the card under the vibe box and the board switch on it, which this guide describes in its body and quotes in two earlier notes, and about the page-size row above. Since v0.11.0 the switch no longer waits for you: if the genie has not read your beat yet, tapping \"put it on the board\" reads it first and then posts \u2014 one tap, one wish \u2014 so the greyed \"read it first\" state, and every sentence that told you which button to press first, is gone. BEATS \u2192 VIBES is no longer a button of its own; it is the first of four chips in an always-open block under the card captioned \"tell the genie what to change, or ask it for words\", where the refine box now always shows with three more one-tap asks beside it \u2014 name it, drop a bar, do a dj intro \u2014 nothing folds away any more. The board switch and the share control now appear the moment a beat exists, with a one-line promise under them until your first post (\"the board takes the beat and the genie's words about it \u2014 no name, nothing about you\"), and after you post, the board section shows your own groove once, marked \"yours \u2726\". The four joke-proverb-toast-fortune chips moved to the bottom of the page, below the board, and their words land right under them. The two rows of your own got their choosers moved out of the grid into a small block beneath it, so all twelve rows look alike, and MUTE and SOLO grew to the size of a step. The words and controls of that release grew the page from about 390 KB to about 405 KB.*\n\n*Addendum, 2026-08-30 16:06 (UTC) \u2014 this note is about the pads and the two rows of your own, which this guide describes as things you tap and things you set, and about the page-size row above. Since v0.12.0 there is a \u25cf REC button beside PLAY. Arm it while the groove runs, play the pads \u2014 by touch, or on the six home-row keys from A to H \u2014 and each hit lands on the nearest step \u2014 quantised, in studio speak \u2014 of one of your two rows, in a row that already holds that pad's sound or in an empty one that takes it; you watch your line appear as you play, it stacks across loops, and one take is one \u21a9 Back. The hit is quantised against the time the machine actually scheduled each step, not against the step the screen is showing, so it lands where you played it at any tempo. Your own hit is the sound in that pass; the row plays it from the next loop on. The genie never writes on those rows and still hears everything you record. In the same release the MUTE and SOLO buttons gained room \u2014 ten pixels apart instead of three, with wider tap targets \u2014 and on tablets the machine runs edge to edge to pay for it. The page grew from about 405 KB to about 425 KB.*\n\n*Addendum, 2026-08-31 03:19 (UTC) \u2014 this note is about the steps, the card's asks, the names on the board, and the page-size row above. Since v0.13.0 a step can play only sometimes: light the `? sometimes` button beside \u2726 Mutate (the button that shuffles a few of your hits at random) and a tapped step turns dashed with a small ?, playing about half the passes \u2014 the machine breathes; the genie hears those steps as ? and never writes one, and \u2726 Mutate may now turn up to two of your hits into sometimes-hits. The \"drop a bar\" chip is now `brighter \u2726` \u2014 one tap writes the word *brighter* into the refine box and runs it, so you see what an instruction looks like. Asking for a reading now also NAMES an untitled track \u2014 the same wish, the same tamper-evident seal a name has always carried \u2014 so grooves posted from the switch's one tap arrive titled; the twenty-nine grooves already rotating nameless were each given a sealed name by the genie on 2026-08-31, and a card with no name now says so in dim letters rather than saying nothing. The genie's answers also scroll into view when they land off-screen, Readings that contain a { are no longer mangled. A separate, older fault had trimmed two characters off every reading since the feature first shipped; that is fixed too. The words of the release grew the page from about 425 KB to about 440 KB.*\n\n*Addendum, 2026-08-31 08:34 (UTC) \u2014 this note is about the numbers table above, which is re-measured here in full for the first time since 2026-08-28; the readings between those dates were of the older, slower flows. Median of three warm runs from our own web server through the public site: a typed vibe to a finished beat 3.99 seconds (was about 7), the genie describing your beat 0.68 seconds (was about 1.5), a photo to a beat 4.84 seconds (was about 8), the voice's first words 0.85 seconds on a first read and 0.24 on a repeat (was 1.5 and under 0.1 \u2014 the repeat figure rose because the voice now says more). Most of the speed-up is the 2026-08-29\u201330 work described in earlier notes: the models answering at the size they are pinned at, and a faster card. Two small corrections ride along, caught by this weekend's review: the first wish after the 2026-08-29 reboot took 15.3 seconds, not 23.7 \u2014 the 23.7-second reading was a later wish paying the same reload \u2014 and the sentences above now say so.*\n\n*Addendum, 2026-08-31 11:39 (UTC) \u2014 this note is about the two rows of your own, the sounds they can play, and a new corner of the page, and about the size row above. Since v0.14.0 the TUNE and DECAY knobs on rows 11 and 12 work: tune bends the chosen sound a full octave either way, like a record played fast or slow, and decay trims its tail \u2014 and because that changes how a groove sounds, a moved knob becomes part of the sealed identity a groove carries (a knob in its resting place says nothing, so every groove made before today keeps its name and its seal; and the top half of the decay knob, which cannot add tail a one-shot never had, is honestly the same sound as the middle and seals as such). The sounds themselves are twenty-one now: a record scratch \u2014 synthesised like everything else here, a burst of noise through a whistling filter that whips up, down and up again \u2014 joined the list on every pad and both rows. At the foot of the page, beside the joke chips, `take a challenge \u2726` deals one card from a deck of forty-eight constraints \u2014 no kick, everything a little sometimes, a beat your grandmother nods to \u2014 no score, no timer; asking the genie for a reading is the victory lap. And on the board, the \"remix of a groove\" note is now a button: tap it to hear the groove this one grew out of, and \u21a9 Back brings your own beat home. The knobs, the deck and the scratch grew the page from about 445 KB to about 465 KB.*\n\n*Addendum, 2026-08-31 13:47 (UTC) \u2014 this note is about saving your groove as a sound file, about the machine's swing, and about what the page keeps on your device, plus the size row above. Since v0.15.0 the share sheet carries a \u2b07 button: it renders one, two or four bars of exactly what you hear \u2014 mutes, solos, sometimes-steps as the coin falls, your rows' tune and decay \u2014 into a WAV file, entirely on your device, and hands it to your tablet's own share sheet (or downloads it elsewhere); a bar count you pick is remembered on your device. Building it uncovered something older: the machine's swing had been stretching the gap after every off-beat and never giving the time back, so the downbeats of a swung bar drifted late \u2014 about twelve percent long at the heaviest genie swing \u2014 and a file cut at the bar line would have lost its last hits. Swing is now the classic shape: the off-beat is delayed, its pair gives the time back, and a bar is exactly a bar. Swung grooves sound slightly tighter than they did yesterday; every saved groove and every seal is untouched, because a groove's identity has always recorded the swing as a number, not as a timing. Two small corrections to the list of what stays on your device: it now also remembers which version of the board's notice this device has read (corrected 2026-09-09: this note said \"whether you have posted to the board before, so a one-line promise can retire itself\", and that stopped being true at v0.64.0 \u2014 the flag holds the notice's own id now, so a device that posted last week is shown the line again the moment the wording moves) and your saved bar count \u2014 seven small things in all, none of them about you (eight since v0.16.0 \u2014 see below). The button and its machinery grew the page from about 465 KB to about 490 KB.*\n\n*Addendum, 2026-08-31 18:16 (UTC) \u2014 this note is about not losing your work, and about the list of what the page keeps on your device. Since v0.16.0 the page saves your beat the moment the tab goes away, not on a five-second timer; \u21a9 Back remembers your last four takes instead of one (the little forward arrow still works); and if you open the lab in two tabs at once, the older tab now notices, stops saving over the newer one's work, and keeps one sentence on screen telling you so until you reload it. That tab check adds an eighth small thing to the on-device list two notes above: a random id each open tab makes up for itself so two tabs can tell each other apart \u2014 like everything on that list, it says nothing about you.*\n\n*Addendum, 2026-08-31 21:24 (UTC) \u2014 this note is about the words on this page, not the lab's behaviour: nothing in the code changed. The section on the board above now opens with the sentence this page has been circling since it was first published on 2026-08-27 \u2014 strangers can interact, leave their own art, and leave without a trace of who they were \u2014 named as what it is: the design test every feature of the board has to pass. It was always the rule; now it is written down.*\n\n*Addendum, 2026-09-01 00:20 (UTC) \u2014 this note is about the beat arriving before the words, the page installing like an app, a name that used to vanish on its way to the board, and the size row above, which drops by nearly half. Since v0.17.0 the genie answers a make or a tweak beat-first: the machine is set up and playing the moment the beat is shaped, while the aside is still being typed. On the usual machine the whole answer arrives so fast that this buys only about an eighth of a second (measured live at this release, median of three: the beat landed 0.13 s before the words finished, of a 3.9 s wish) \u2014 the reorder earns its keep on a slow or busy day, and in what it forces the lab to be honest about: if the connection dies in between, the lab now keeps the beat that landed and says which half arrived (\"its beat landed, its words didn't\"), never a beat it built over yours. The page can live on a home screen now (a real icon, full-screen, still nothing to install and nothing to agree to), Cmd/Ctrl+Z walks the same \u21a9 Back your thumb uses, quick messages queue instead of trampling each other, the two knobs grew invisible finger-room, and the painters go to sleep when the machine is stopped \u2014 battery unspent on a page doing nothing. Two corrections to earlier notes, counted plainly: the note of 18:16 above says the tab id was \"an eighth small thing\" on the on-device list \u2014 the list is NINE now (the ninth remembers whether the lab has said its one warm sentence after your first genie beat, so it is said once, ever); and the size row: the page's own script comments \u2014 a fifth of a megabyte of the workshop explaining itself to itself \u2014 no longer ship, so the page fell from about 490 KB to about 295 KB with every line of code still there. \"View the source and you are looking at the whole thing\" still holds for the code; the commentary now lives in the workshop's repository, and a reader of the served page sees working, uncommented code. And a name bug a player caught the same evening, fixed in the same release: have the genie tweak a track (\"brighter\"), hit BEATS \u2192 VIBES, put it on the board \u2014 the card said \"Yellow Silk\", the board said untitled. A tweak's name descends from words you typed, so it can never carry the seal the board demands; the reading now replaces such a name with the genie's own sealed one \u2014 visibly, before you post, so the card and the board always show the same name \u2014 while a name YOU gave a track (name it \u2726) is never taken back by a read. The closing note at the foot of the lab also stopped being a wall of text: what it says now, it says in four short pieces, and the sentence at their heart is the one this guide's board section opens with.*\n\n*Addendum, 2026-09-01 02:56 (UTC) \u2014 this note is about the sounds the pads and the two rows of your own can play, which were twenty-one in the note of 2026-08-31 11:39 above and are twenty-two since v0.18.0. The new one is the Cut: a second record scratch, the tight \"chick-a\" a DJ cuts on the crossfader \u2014 two flicks of filtered noise with a measurably silent gate between them, over in about eight hundredths of a second, because the first Scratch (which is unchanged, as every sound here always is) rings for about a quarter second and smears across steps at drum-and-bass tempos. It was tuned and sealed against pre-registered measurements before it shipped, and the page now re-measures it on every test run \u2014 including one check that exists because a reviewer deleted the second flick entirely and everything still passed: the lab now verifies the \"a\" of the chick-a actually sounds. The genie also learned to deal both scratches into the sample pads \u2014 its menu of sounds had been two behind the machine's. The counts elsewhere on this page that say twenty-one now read twenty-two; the size row is unchanged (about 295 KB).*\n\n*Addendum, 2026-09-01 05:50 (UTC) \u2014 this note is about a promise, because nothing a visitor can see or hear changed in v0.19.0, and that was the entire point of the release. Every groove made in this lab now quietly carries the era of its sounds \u2014 this era, the first one, is simply the absence of a mark, so every link ever shared and every groove ever posted is already stamped, retroactively, without a byte of it changing. The promise this buys, written here so it binds: the lab's sound set will someday grow a second era (\"sound packs\"), and when the first era is sealed, everything made in it will keep playing at its own permanent address, with its own sounds, exactly as it sounded \u2014 forever. A groove that wanders into an era with different sounds will say so in one plain sentence and offer one tap back to the room it was made in. The machinery that keeps this honest shipped tonight and is already standing guard: the era of a groove lives inside its tamper-evident seal (so nobody, including us, can mislabel one), and a frozen copy of yesterday's entire lab now runs against every future version of our server on every test run, so a change that would break the oldest room fails our tests years before that room exists. The page grew from about 295 KB to about 292 KB \u2014 the machinery is mostly invisible even to the scale.*\n\n*Addendum, 2026-09-01 08:03 (UTC) \u2014 this note is about the \u2684 die beside the vibe box, and it completes a sentence higher on this page. The die that deals \"another idea\" into the box has always drawn from the same sixty-four suggestions; since v0.20.0 it leans toward what this room actually asks for. The wish ledger described above \u2014 the one that \"never leaves the workshop\" \u2014 now sends exactly eight integers to the page: how many recent wishes named each of the die's eight genre families, counted through the very same matching the die itself uses. Not one word travels; the counting tool refuses to run at all if its output could contain a ledger line, and the dated receipt for the current lean is published in the workshop's repository with the window it counted and a column we added on a reviewer's insistence: how much of the count was visitors accepting the page's own suggestions verbatim (62% this window), so the loop of a page learning from its own echo stays visible every time the count is refreshed. The lean is gentle by construction \u2014 2.23 to 1, hottest family over coldest, identically per family and per suggestion \u2014 and the first suggestion you see on arriving is still drawn perfectly evenly: the lean is the die's opinion when you ask for another, never the house's default taste. House music, if you were wondering, currently leads the room.*\n\n*Addendum, 2026-09-01 12:10 (UTC) \u2014 this note is about the \u2684 die's lean, described two notes above, and it carries a correction to that note's last sentence; it is also about the lab learning to be used by every kind of hand. A deep review of the last seven releases found that most of the lean's count was the page hearing its own suggestions accepted back \u2014 and worse, that refreshing the count would compound that echo release over release, roughly doubling the lean within five refreshes. Since v0.20.1 a suggestion accepted verbatim counts for nothing: the die learns only from words nobody put in the box for you, the receipt still prints how much of the window was echo (62 % this one), and the lean is now a gentler 1.63 to 1. The correction: on words people actually composed, house does not lead the room alone \u2014 breakbeat and house are tied for hottest. Two more things from the same review, for hands and ears the lab had underserved: all twenty-four tune and decay knobs can now be turned from a keyboard (arrow keys, with the value announced to a screen reader \u2014 they had been pointer-only since they arrived), and every short sentence the lab speaks is now announced to assistive tech rather than painted silently. And one honest trade at phone width: the space held open for the genie's incoming reading grew from two lines to three \u2014 four would have pushed the card's first ask below the fold by exactly one pixel, and being visible without scrolling won the pixel.*\n\n*Addendum, 2026-09-01 17:43 (UTC) \u2014 this note is about the page's tail and its phone manners, three small things since v0.20.2, none of them sound. On a wide screen the four liner notes at the foot now sit two-by-two at the machine's own width, like the back of a record sleeve, instead of a narrow column stranded in the dark; on a phone the whole tail gained the page's own side margins (it ran edge to edge); and the tempo box shows all three digits of a fast tempo \u2014 a vestigial browser control was quietly eating the third one, and it turned out to duplicate the \u2212 and + buttons beside it, so it is simply gone. Found the way most of this page's fixes are found: an operator playing the lab and sending a screenshot.*\n\n*Addendum, 2026-09-01 18:06 (UTC) \u2014 this note is about the promise of 2026-09-01 05:50 above (this note first cited it as 05:56, a wrong minute; corrected 2026-09-05), which gained its rehearsal. Nothing a visitor can see or hear changed in v0.21.0: the release built and drilled the machinery a future \"sealed set\" needs \u2014 the exact procedure that will one day freeze this whole lab at its own permanent address, byte for byte, with a dated plaque and a warm sentence for returning regulars \u2014 and a test now performs that entire ceremony against a scratch copy on every run, so the day it matters is a rehearsed command rather than a first draft. Two of its words are already written and waiting, years early, and you will read them here when their day comes.*\n\n*Addendum, 2026-09-01 19:50 (UTC) \u2014 this note is about the lab learning to be used by every kind of hand, continuing the note of 12:10 above, and about the page-size row above. Since v0.22.0 the whole drum grid can be played from a keyboard: it is one stop on the Tab key; the arrow keys move between steps, Space or Enter cycles a step exactly as a tap does (off, on, accent, off \u2014 with the sometimes-step where it applies), Home and End jump to a row's two ends, and each step tells a screen reader its row, its number of sixteen and its state as it changes. Space only touches a step while a step holds the focus; anywhere else on the page it still starts and stops the beat. Every control now answers \"what am I\" to assistive tech \u2014 the sweep closed more gaps than we had listed, among them the five sliders, the six pad choosers, the eight suggestion chips and the twenty-four tune and decay knobs \u2014 and the genie's reading is announced once, after it has finished arriving, never as fragments; the board's carousel stays silent when it turns. The switch that puts a groove on the board now wears the same gold as MAKE IT, but only in the moment a groove can actually go up; in every other state it keeps its quiet look, so the gold means one thing: this can go on the wall now. Two honest notes from the review. First, in the light theme that gold measures 3.84 to 1 against its dark lettering on the brighter end of the gradient (4.57 to 1 on the darker half, where the letters sit) \u2014 below the 4.5 the accessibility guideline asks for, MAKE IT's own number since the day it shipped, and the same wherever the gold is used, so we are reporting it here rather than quietly fixing one button. Second, the review caught our new focus ring erasing the play-head outline on whichever step held the caret, and it was fixed before it shipped. The page grew from about 295 KB to about 318 KB \u2014 names and keyboard plumbing are markup, and markup is bytes; the row above is updated.*\n\n*Addendum, 2026-09-01 20:49 (UTC) \u2014 this note is about what the workshop keeps of the board and of the wish ledger, both described above, and it adds nothing a visitor can see or hear. Since v0.23.0 the board file is copied once an hour into a ring of one hundred and sixty-eight copies beside it \u2014 seven days, the oldest hour falling off as the newest lands \u2014 because a groove that vanished from the board one August night turned out to have vanished between two nightly mirrors, unseen. Nothing new is recorded: the ring holds the same sealed words the board already shows, and nothing about who put them there. The wish ledger, kept forever as this guide says, is now rolled into a compressed monthly archive on the first of each month; the reader that counts it reads every archive and the live file as one ledger, so the counts on this page do not move when a month closes. Neither job restarts the machine the genie runs on: every line the ledger writes is opened and closed on its own, so a file can be renamed under it and not a word is lost. The page's bytes are unchanged; only the version stamp in its footer moved.*\n\n*Addendum, 2026-09-02 02:00 (UTC) \u2014 this note is about the note of 2026-09-01 19:50 above, and it corrects one of its sentences. That note said the light theme's gold measured 3.84 to 1 on its brighter stop and that we were reporting it rather than quietly fixing one button. Since v0.24.0 it is fixed, and not for one button: the light theme's gold is a single colour token, so MAKE IT, the share buttons and the switch that puts a groove on the board all darkened together by the smallest step that clears the guideline's 4.5 to 1 on both ends of the gradient \u2014 the brighter stop now measures 4.53 to 1, the darker 6.51 to 1, and the dark theme did not move. Three smaller things for assistive tech in the same release: when two rows hold the same sound, each now tells a screen reader which row it is, without changing a printed label; the photo you give the genie is no longer marked as decoration; and the buttons that lead with a glyph \u2014 reset, random, back, play and stop, the share and listen controls \u2014 now speak their word instead of the glyph. The page grew from about 318 KB to about 323 KB; the row above is updated.*\n\n*Addendum, 2026-09-02 03:50 (UTC) \u2014 this note is about four numbers on this page that a deep review of the last five releases found wrong, and it corrects them; nothing on the lab itself changed. First, the \u2684 die's lean, described in the notes of 2026-09-01 08:03 and 12:10: the 1.63 to 1 those notes give is the lean a single suggestion carries, and that figure stands \u2014 but the notes also said the lean was the same per family, and it is not. The die picks a family in proportion to its size times its weight and then one suggestion inside it, so a family with more suggestions comes up more often before any lean applies: a perfectly flat die would already favour the largest family 8.5 to 1 over the smallest, and with today's lean the spread between families is 12.3 to 1 \u2014 house comes up on about a third of taps, boom bap on about one in thirty-six. Measured by drawing the shipped page's own die four hundred thousand times and confirmed by the arithmetic; the receipt file that publishes the counts now prints the family column that way. Second, the sentence near the top that said a typical wish takes six to ten seconds was written on publication day and never caught up with the table two sections below it; it now says about four seconds, which is what the table has measured since 2026-08-28. Third, the sizes: the note of 2026-09-01 05:50 said the page grew from about 295 KB to about 292 KB, which is a shrink written as growth and wrong on both ends \u2014 poured from the tags, the page went from about 296 KB to about 299 KB in that release; and the table's old \"about 295 KB from v0.17.0 to v0.21.0\" hid ten kilobytes of growth across four releases \u2014 it was about 295 KB at v0.17.0 and about 305 KB by v0.21.0, so the a11y markup of 2026-09-01 19:50 added about 13 KB, not 23. Fourth, the sentence describing what a describe request carries said \"and nothing else\" while it had, since the two rows of your own and their knobs arrived, also carried what those rows play and how their knobs are set; the sentence now lists them. Every figure above was reproduced by two independent readers before this note was written.*\n\n*Addendum, 2026-09-02 04:36 (UTC) \u2014 this note is about a deep review of the last five releases, whose visible half shipped in v0.25.0, and about the page-size row above. Six things a visitor with a keyboard or a screen reader can now feel: the focus ring that walks the drum grid no longer fades with a dimmed row (on the twelfth row, which opens unassigned on every load, it measured 1.5 to 1 and now measures 4.6); the switch that puts a groove on the board wears its gold only when a tap will actually post \u2014 while the genie is resting it takes a quiet skin, so the sentence two notes above, that the gold means this can go on the wall now, is now exactly true; the light theme's dim ink clears 4.5 to 1 on every surface it sits on; ten hover colours that painted a failing green over the outline ink now paint the outline ink; the page has headings and a main landmark, so a screen reader can walk its structure and not only its names; and the three bars-to-save buttons say their digit in their spoken name. One thing under the hood: if the beat is changed while the genie is reading it for the board, the switch asks again instead of posting words about a groove that has moved on. And the row above: the page grew from about 323 KB to about 336 KB, and every added byte is commentary \u2014 the contrast receipts now live beside the rules they measure, inside the stylesheet, where the next reviewer will find them. We chose to ship the receipts.*\n\n*Addendum, 2026-09-02 07:24 (UTC) \u2014 this note is about three small things a visitor can see since v0.27.0, and about the page-size row above. First, the two row chips under the machine \u2014 the little \"11\" and \"12\" beside the two sound choosers \u2014 used to print their number in that row's own colour, and in the light theme nine of the twelve voice colours sat under the 3 to 1 a boundary owes, the worst at 1.7. They now print the number in the page's ordinary ink inside a ring in the row's colour, the ring darkened by one uniform rule so every one of the twelve clears 3 to 1 in both themes. Second, the \u2726 Mutate button rests on the slightly deeper green every other outlined control already wears, so its label reads at 4.8 to 1 instead of 4.3. Third, the six sample pads are a fractionally shallower bevel: the bottom edge of their gradient is one shade lighter, so a label at the foot of a pad \u2014 none exists today \u2014 would still clear 4.5 to 1. The measurements were taken by the page's own accessibility suite, which now walks all twelve chips, both states of the button and every stop of the pads' gradient, and reddens if it finds fewer than twelve chips. And the row above: the page grew from about 336 KB to about 340 KB, again all commentary \u2014 the two receipts sit in the stylesheet beside the rules they measure.*\n\n*Addendum, 2026-09-03 01:11 (UTC) \u2014 this note is about the genie's answers when the lab cannot read them, and about the page-size row above. The genie answers in a small machine-readable envelope that the lab unwraps into words. Until v0.29.0, an envelope the lab could not unwrap \u2014 one written out on several lines, say, or cut off mid-sentence \u2014 was shown to you exactly as it arrived, brackets and quotation marks and all, and could even be sealed and put on the wall. A reader of this page saw one such envelope on the evening of the second. Six things changed. An answer the lab cannot read is now answered with one sentence \u2014 the genie mumbled, ask again \u2014 instead of the envelope. Such an answer is never given the seal the board requires, so it can never reach a stranger as a reading or as a track's name. The small receipt under a result now says what shape an unreadable answer arrived in and how long it was, and never what it said. Tapping \u2726 Refine with an empty box now says what to type and puts the cursor there, where it used to do nothing at all. The genie's answer to a tweak now scrolls into view when it lands off-screen, as a name and a DJ intro already did. And each of the four asks, the tweak box and its button say what they send when you rest on them. Under the hood the reader that unwraps the envelope is one function shared by all three flows, tested against three hundred and ten hostile envelopes; a week of the engine's own journal, read first, showed three hundred and thirty such asks in a row marked fine, which is how an unreadable answer had been hiding. The row above: the page grew from about 340 KB to about 343 KB, the guard and its receipts.*\n\n*Addendum, 2026-09-03 06:2x (UTC) \u2014 this note is about four things the machine does that this guide had never explained in its own words: the swing dial, the two tone dials, the filter, and what happens to the lab when the network goes away. It is written now because the lab is about to be able to answer questions about itself, and it may only answer with sentences this guide contains. **Swing** delays every off-beat \u2014 the gap after each even step grows, and the gap after the odd step that follows gives exactly that time back, so a pair of steps always spans two steps and a bar is always exactly a bar; at zero the beat is dead straight, and the dial runs to sixty, where the off-beats lean as far back as the machine allows. **Warmth** drives the whole mix through a soft saturation curve that is always in the path: at zero it is at its gentlest, and as the dial rises the loud parts round off and thicken the way tape or a warm amplifier does. (Corrected 2026-09-04: this sentence said the mix was clean at zero; the curve has no bypass, so a loud signal at zero is already rounded a little, and the dial sets how hard it is driven.) **Space** sends the mix into a short reverb \u2014 a room about a second and a half long, built from noise when the page loads \u2014 and the dial is how much of the room you hear, from none to a good deal. **The filter** is a low-pass that sweeps from 120 Hz to 20 kHz: fully open it changes nothing, and closing it takes the top off every sound at once, which is the oldest DJ move there is. And **the network**: once the page has loaded, the machine needs nothing else \u2014 the beat, the sounds, the pads and the sequencer run entirely in your browser, so if your connection drops the music keeps playing and every step you tap still lands; only the genie, the board, the voice and the \u270e note to the workshop need us, and each of them says so if it cannot reach us \u2014 except the board's own feed, which stays out of sight until it can, the way an empty board does. (Corrected 2026-09-04: this sentence named three of the four things on the page that reach the workshop; the \u270e note button was always the fourth, and it says so when it cannot. Corrected again the same afternoon: the board's feed never said so \u2014 a board that cannot be fetched is simply not shown; every board action you take yourself does say so.)*\n\n*Addendum, 2026-09-03 11:44 (UTC) \u2014 this note is about three things a reader of this page ran into while remixing a board groove on the evening of the second, all fixed in v0.30.0, and about the page-size row above. First: a tweak that changed the beat but came back with nothing to say used to leave the note area blank, so the first refine after a remix looked dead; it now says so on the card. Second: the card the board shows you right after you post \u2014 your own groove, with its fresh reading \u2014 had a green *remix of a board groove* button, a \u25b6 listen now, a \u2726 nice and a \ud83d\udd08 that all did nothing, because every one of them was reading a different card than the one on screen; all four now work on that card, and it holds the stage for as long as its own reading takes rather than the bare twenty-four seconds. Third, and the one that mattered most: listening to a stranger's groove used to arm the gold switch, so one tap read the beat again \u2014 a wish spent on words the board already held \u2014 and put up a second copy with a new name; the switch now says *already on the board \u2014 change something you can hear to make it yours*, cannot be tapped, and opens the moment you change one thing you can hear. The board itself was never fooled \u2014 it refuses an identical groove by construction \u2014 but the switch had promised something the guide says two notes above, that the gold means a tap will post, and it had not kept it. The row above: the page grew from about 343 KB to about 344 KB.*\n\n*Addendum, 2026-09-03 12:56 (UTC) \u2014 this note is about four moments on the page that used to happen in silence, about one sentence in the body above that had the order of things backwards, and about the page-size row. First the silences, all fixed in v0.31.0: tapping MAKE IT \u2726 with nothing in the box did nothing at all \u2014 it now says *tell the genie a vibe first \u2014 or tap \u2684 for one* and puts the cursor in the box; tapping one of the three built chips while a wish was already running was swallowed without a word \u2014 it now says the genie is busy; and a make or a photo whose beat landed but whose words never arrived left the card blank \u2014 like a tweak since v0.29.0, it now says *its beat landed, its words didn't*. MAKE IT \u2726 also gained the tooltip its neighbour already had, and it names the one thing that matters: this button replaces the beat on the machine. Then the sentence: the body's account of a wish said the aside arrives first and the beat a few seconds later, which has been the reverse of the truth since v0.17.0 \u2014 the beat lands first \u2014 so the sentence is corrected in place, with a note beside it, under this guide's own precedent for a body correction. Behind this release sits a table of forty-three states \u2014 every state the genie's panel, the board switch and the lineage button can be in, with the words each shows and the taps each allows \u2014 of which forty-two are now pinned by the suites (the forty-third, *typing*, is unpinnable because nothing on the page yet reacts to what is in the box). The row above: the page grew from about 344 KB to about 345 KB.*\n\n*Addendum, 2026-09-03 15:59 (UTC) \u2014 this note is about a new thing the genie does since v0.32.0: it answers questions about the lab, and it does so without a wish. Type a question into the vibe box \u2014 *how does this work?*, *who can see my beat?*, *what does swing do?*, *does it work offline?* \u2014 and the answer arrives in the note area the way the genie's words always do, word by word at the same pace. But no model is asked: the page carries twenty-five written answers (twenty-six since 2026-09-04, when the question above the body \u2014 do I need the genie to make a beat? \u2014 joined them, first), each one derived from a sentence in this guide (the build refuses to pour if a cited sentence changes and its answer did not), matched by the words you typed, on your device, with nothing sent anywhere. The small receipt under such an answer says so \u2014 *bank \u00b7 0 wishes \u00b7 no model* \u2014 and the rate gate does not count it. A question the lab does not know gets one fixed sentence pointing at this guide. Nothing about a question is kept: no request, no ledger line, no journal line carries what you typed, and the suites that prove it plant a random nonce and search every file the engine writes for it. The voice can read such an answer aloud, by its number \u2014 the sentence in the body above about the voice reading only sealed words gains that one clause today \u2014 and an answer can never be sealed for the board or put up as a groove's reading. Two more numbers: the page grew from about 345 KB to about 363 KB, of which the twenty-five answers are about 12 KB; and the matcher caps what it reads at 400 characters, so a very long paste cannot stall the music.*\n\n*Addendum, 2026-09-03 21:05 (UTC) \u2014 this note is about the biggest change to the top of the page since it was published, shipped in v0.34.0, and about the page-size row above. There is now ONE box where there were two. The old page had a vibe box with MAKE IT beside it and, lower down, a second box for telling the genie what to change; in the lab's first hundred and fifty wishes nobody used the second one. Now everything you type goes into the one box, and the lab decides what you meant by a simple rule it never bends: a verb at the front runs that verb \u2014 *make a beat, dusty lo-fi* starts over (and is the only thing that does), *name it*, *describe it*, *dj intro*; a question the lab knows \u2014 *how does this work?* \u2014 is answered from the page's own bank for free, as the note of 15:59 above describes; and anything else \u2014 *darker*, *add a fill*, *half-time* \u2014 changes the beat you have. Nothing ever guesses, and the button beside the box says which of those it is about to do, in its own word, as you type. Under the box a line says the same in a sentence \u2014 *this will change the beat you have* \u2014 and, once there is something of yours on the machine, carries a small amber *\u2726 new vibe* at its right end that clears the machine and starts you over from words; it never touches the board. Some things moved because of where they belong: the four asks sit in one row under the card, and the third of them changes with the day so the row teaches a new tweak each morning; *BEATS \u2192 VIBES* is now called *describe it*; \u21a9 Back sits directly beside \u2726 Mutate as its equal partner \u2014 mutate, listen a while, go back is the lab's most repeated gesture, and Back keeps whatever you had typed; *Clear* sits under the grid it clears, so nothing in the preset row can destroy anything; and the share button in the transport turned green, so the gold now means one thing on the whole page and is never worn by two controls at once \u2014 on a cold page nothing is gold at all, because a fresh page has nothing of yours to post. The help card's four steps were rewritten to name the controls as they are now printed, and gained a fifth: or just ask it. The photo button's hint says it builds a new beat; the \u2684 die, once a beat is yours, writes *make a beat, \u2026* so you can see the verb; the / key jumps to the box; and while the genie is resting a question is still answered from the button. The row above: the page grew from about 363 KB to about 394 KB, most of it the router and the states it pins.*\n\n*Addendum, 2026-09-04 02:20 (UTC) \u2014 this note is about the first minute a stranger spends with the one box, which a deep review of the last eleven releases found wanting in several small ways, all fixed in v0.35.0; about two sentences in earlier notes that were no longer exactly true; and about the page-size row above. First, the fixes a visitor can feel. On a fresh page, words that merely look like a question \u2014 *do a jungle beat*, *how about jazz*, *jungle?* \u2014 now make a beat out of themselves instead of being told they are outside the lab, and the chip that used to erase such words is gone; a question the lab cannot answer now only happens once a beat is yours, and it arrives over a chip that re-sends your words rather than deleting them. *make a beat!* and *make a beat please* say *tell the genie a vibe first* instead of spending a wish on a vibe of one character, and a line of only emoji or punctuation spends nothing. The gold button's word settles at each space and at Enter, not mid-word, so it no longer flickers and a screen reader hears one verb per word. The chip row under the card waits until something on the machine is yours; the \u2684 die is greyed while the genie works and never writes over words you typed; *\u2726 new vibe* clears a muted row too, so the page can always get back to *nothing of yours yet*, and it puts the cursor back in the box; *\u21a9 Back* only ever goes back. On a fresh page the board switch is shut and says *nothing of yours yet \u2014 make a beat first, then the board will take it*, instead of offering to post the demo for a wish. The stranger's card on the board stops rotating while your pointer, finger or keyboard is on it, and the board refreshes itself every minute while the tab is open, so grooves your friends put up appear without a reload. The transport's \u2934 share the groove, \u2726 Mutate, \u21a9 Back, \u21aa forward, \u25cf REC and \u2726 sometimes, and the \u2726 new vibe and Clear the grid buttons, are at least forty-four pixels tall; \u25b6 PLAY (40 px), TAP (32 px), the tempo field, the five dials and the preset row are not yet, and are a separate note. (Corrected 2026-09-04: this sentence said every control in the transport; the roster above is what was measured, per the a11y suite's own floor list.) The box takes three hundred characters and says so at the limit. A question about a photo is no longer answered with the answer about sounds \u2014 the matcher now refuses a near-miss that carries a word the answer never uses, which cost it a handful of paraphrases and bought back fourteen wrong answers. The chip under a bank answer prints the verb it runs; a wish refused while the genie rests clears the answer that was standing on the card; and the strata\u2192signal strip at the foot is dark on a dark page. Then the two sentences. The note of 2026-09-03 15:59 above says a question the lab does not know *gets one fixed sentence*: that is true only once something of yours is on the machine and your words nearly match a question the lab knows; otherwise your words go to the genie as a wish \u2014 a new beat on a fresh page, a tweak once a beat is yours \u2014 and are kept the way every wish is kept. And the note of 2026-09-03 21:05 above lists the verbs a line can start with and says *make a beat* is the only thing that starts over: *start over* and *new vibe*, typed as whole lines, also clear the machine \u2014 they are the amber *\u2726 new vibe* in words, and *\u21a9 Back* undoes them. The row above: the page grew from about 394 KB to about 407 KB, most of it the pins that hold these fixes in place.*\n\n*Addendum, 2026-09-04 09:37 (UTC) \u2014 this note is about three things: what changed in the lab's engine this morning in v0.36.0 and v0.36.1, which a visitor feels only as fewer refusals; the titles of forty-four grooves on the board, which were cleaned at 09:33 (UTC) today; and one hundred and twenty-three lines in the workshop's own service log from the lab's first day, which were removed at 09:34 (UTC) today. First the engine. When a tweak comes back from the genie naming only the dials it moved \u2014 swing, warmth, space, or the pattern \u2014 the lab used to refuse it and say the genie mumbled; since v0.36.0 it reads such an answer, and a fresh beat keeps exactly the rule it always had (a wider rule applied to it in the first draft threw the model's whole beat away, and was caught before it shipped). A seat or the voice that does not answer is now written in the service log as what it was \u2014 a seat down, the voice down \u2014 where until today that log said the request had worked; nothing a visitor sees changed, and nothing about a visitor is in those lines. Then the titles. The genie names a groove from a short prompt that asks it, among other things, for a *flavour* \u2014 a place, a fabric, the weather \u2014 and for some weeks the model had been echoing that word back into the name: *Kitchen Tile Shuffle flavour: a room in a house*. The engine now cuts its own prompt out of every answer before sealing it, and refuses to seal a title that still carries it. The forty-four grooves already on the board with such a title \u2014 of one hundred and four kept, and twenty-one of the forty-eight a visitor sees at once \u2014 were re-sealed by the workshop at 09:33 (UTC) today, under the same key as every other post, with the tail cut off and nothing else touched: the beats, the readings and the sleeve notes are exactly as they were, and a card that read *Kitchen Tile Shuffle flavour: a room in a house* now reads *Kitchen Tile Shuffle*. A count over the whole board afterwards found none left; the board as it was before the change is kept in the workshop. Last, the lines. The list above says that your address is never written to disk. For the lab's first day \u2014 from 22:24 (UTC) on 2026-08-26, the earliest such line the log holds, until a fix at 17:15 (UTC) on 2026-08-27 \u2014 that was not yet true of the service log: the one line the service writes per request carried the visitor's network address. One hundred and twenty-three such lines were written, none since, and they sat in three archived files of the workshop's system log until 09:34 (UTC) today, when the three files were deleted; a count over the whole log now finds zero. It is recorded here because the sentence above was published on 2026-08-27 and the lines outlived it by eight days. The page-size row above did not move: v0.36.1 changed the engine and the footer's stamp, not the page.*\n\n*Addendum, 2026-09-04 10:03 (UTC) \u2014 this note is about the genie's manners \u2014 the sentence in the body above that says the genie grants three wishes in any thirty seconds and a hundred and twenty a day from any one network address \u2014 and about a window in which the workshop has set those numbers wider on purpose. From 10:01 (UTC) on 2026-09-04 until the morning of 2026-09-08 (UTC), the door is six wishes at once and four hundred and eighty a day from one address, because a room of friends on one wifi is one address to the lab, and a long weekend of them would spend the everyday allowance in about twenty minutes. Nothing else moved: the ceiling that protects the machines themselves is where it always is, a stranger's wishes still cost a stranger's seconds, and the sentence above is still the rule \u2014 this note is the exception, dated at both ends, and a second note will carry the minute the door went back. Two things follow from the numbers being on this page. The lab's own answer to what is a wish gives the everyday numbers during the window, because that answer is derived from the sentence above rather than from the workshop's calendar \u2014 and so does the page of those answers on this hub, The Beat Lab, asked and answered (exhibit thirty-eight), which carries its own dated line about the window at the top. And the page did not change: the window is two lines in the service's configuration, not a release.*\n\n*Addendum, 2026-09-04 11:16 (UTC) \u2014 this note is about four small things on the page since this morning's notes, shipped in v0.38.0, v0.39.0 and v0.40.0, and about the page-size row above. First, the Clear button. The note of 2026-09-03 21:05 above says Clear sits under the grid it clears; since v0.40.0 it does not. It sits below the six sample pads, out of the grid's eye-line, it is called *Clear the grid*, and it asks first: a tap opens a small question \u2014 *clear every step on the grid?* \u2014 with *keep it* already"
  }
 }
}
