{
 "about": "ONE TABLE, READ BY ALL THREE. The planner reads the values and the stages from it at each plan, orrery bakes it in for the explanations and the queue's reasons, and the lab report draws its figures from it. A word changed here changes everywhere, so a screen and the report cannot tell two stories. Keep it to characters the console's fonts have (ASCII, and the arrow).",
 "values": [
  {
   "key": "ease_now",
   "attr": null,
   "label": "Ease now",
   "default": 2.6,
   "min": 0.0,
   "max": 3.0,
   "step": 0.05,
   "unit": "errors",
   "what": "How far every pass bar sits under z 3 right now. Held z = 3 less this. Changing it moves the bar once; each generation then takes the step below off it.",
   "up": "generations come sooner, more of them truly worse",
   "down": "generations come later, each worth more"
  },
  {
   "key": "ease_max",
   "attr": "EASE_MAX",
   "label": "Ease ceiling",
   "default": 2.75,
   "min": 0.0,
   "max": 3.0,
   "step": 0.05,
   "unit": "errors",
   "what": "The easiest a dry spell may make the bars. 1 November: 1.5, after a day of generations on noise. Each step down is a bar never lower.",
   "up": "a dry spell ends sooner, on noise",
   "down": "a dry spell lasts longer, and passes on evidence"
  },
  {
   "key": "harden",
   "attr": "HARDEN",
   "label": "Harder each generation",
   "default": 0.05,
   "min": 0.0,
   "max": 0.5,
   "step": 0.01,
   "unit": "errors",
   "what": "What each generation takes off the ease.",
   "up": "the bar climbs fast, then a dry spell brings it back",
   "down": "the bar stays put; 0 is a fixed bar"
  },
  {
   "key": "dry_min",
   "attr": "DRY_MIN",
   "label": "Dry before easing",
   "default": 240,
   "min": 30,
   "max": 1440,
   "step": 30,
   "unit": "min",
   "what": "How long with no generation before the bars ease. Paul set four hours.",
   "up": "the fleet waits longer on a hard bar",
   "down": "the bar gives up sooner"
  },
  {
   "key": "ease_step",
   "attr": "EASE_STEP",
   "label": "Easing step",
   "default": 0.25,
   "min": 0.05,
   "max": 1.0,
   "step": 0.05,
   "unit": "errors",
   "what": "What a dry spell adds to the ease, at once and again each interval below.",
   "up": "a dry spell ends in fewer steps",
   "down": "a dry spell ends gently"
  },
  {
   "key": "dry_again_min",
   "attr": "DRY_AGAIN_MIN",
   "label": "Easing again every",
   "default": 60,
   "min": 10,
   "max": 480,
   "step": 10,
   "unit": "min",
   "what": "After the first easing, how long before the next.",
   "up": "slower to reach the ceiling",
   "down": "quicker to reach the ceiling"
  },
  {
   "key": "keep_ease",
   "attr": "KEEP_EASE",
   "label": "Read-on bars eased at most",
   "default": 0.5,
   "min": 0.0,
   "max": 2.0,
   "step": 0.25,
   "unit": "errors",
   "what": "How far the keep-reading bars may fall with the rest. Simulated, more than 0.5 buys no gain a day and spends lanes on what is dropped later.",
   "up": "more trials read on, fewer new trials",
   "down": "more new trials, each read less"
  },
  {
   "key": "held_z",
   "attr": "HELD_Z",
   "label": "Proof bar",
   "default": 3.0,
   "min": 2.0,
   "max": 5.0,
   "step": 0.25,
   "unit": "z",
   "what": "How far past main the carried line must read to go on main. The ease is taken from this for a generation, and nothing is taken for main. Moving it also moves the generation bar.",
   "up": "main moves rarely and surely",
   "down": "main moves often, and a false line can reach players"
  },
  {
   "key": "proof_every_min",
   "attr": "PROOF_EVERY_MIN",
   "label": "Line against main every",
   "default": 60,
   "min": 15,
   "max": 720,
   "step": 15,
   "unit": "min",
   "what": "How often the line gets its 800 seeds against main.",
   "up": "more lanes left for trials",
   "down": "main catches up sooner, at a cost in lanes"
  },
  {
   "key": "anchor",
   "attr": "ANCHOR",
   "label": "Anchor reads back",
   "default": 3,
   "min": 1,
   "max": 12,
   "step": 1,
   "unit": "generations",
   "what": "How many generations back each new generation is read against, to catch slow drift.",
   "up": "catches slower drift, on an older baseline",
   "down": "catches only recent drift"
  },
  {
   "key": "queue_per_machine",
   "attr": "QUEUE_PER_MACHINE",
   "label": "Queue depth a machine",
   "default": 4,
   "min": 1,
   "max": 12,
   "step": 1,
   "unit": "jobs",
   "what": "How many jobs wait for each CPU machine. The queue is first come, so depth is how long a finding waits.",
   "up": "no lane starves between plans",
   "down": "a finding is read sooner"
  },
  {
   "key": "carry_max",
   "attr": "CARRY_MAX",
   "label": "Passes carried a generation",
   "default": 3,
   "min": 0,
   "max": 10,
   "step": 1,
   "unit": "trials",
   "what": "How many trials that passed on the old defaults get one more read on the new ones when a generation lands. 0 throws them away, as it was.",
   "up": "fewer finds are lost, more lanes go to re-reads",
   "down": "more lanes go to new trials"
  },
  {
   "key": "generation_every_min",
   "attr": "GENERATION_EVERY_MIN",
   "label": "Between generations",
   "default": 30,
   "min": 0,
   "max": 240,
   "step": 5,
   "unit": "min",
   "what": "A generation does not land sooner than this after the last. What passes meanwhile waits and lands together. 0 lands each as it passes, as it was.",
   "up": "fewer reads overtaken, larger and less separately read batches",
   "down": "finds reach the line sooner, more reads lost to the generation after"
  },
  {
   "key": "min_gain",
   "attr": "MIN_GAIN",
   "label": "Least gain to land",
   "default": 0.25,
   "min": 0.0,
   "max": 3.0,
   "step": 0.05,
   "unit": "points",
   "what": "A generation must gain this much a seat, however many errors it clears. A change that barely plays differently has a tiny error, and passes on nothing. 0 is no floor, as it was.",
   "up": "fewer generations, each worth more",
   "down": "small real gains land, and so does noise"
  },
  {
   "key": "settle_gens",
   "attr": "SETTLE_GENS",
   "label": "Generations to settle",
   "default": 2,
   "min": 0,
   "max": 20,
   "step": 1,
   "unit": "gens",
   "what": "A dial or switch moved in this many latest generations moves again only at the proof's z, so nothing wanders on luck. 0 lets it move at any time, as it was.",
   "up": "dials hold still longer",
   "down": "a dial may be tuned step on step"
  },
  {
   "key": "give_built",
   "attr": "GIVE_BUILT",
   "label": "Building given up, at most",
   "default": 0.1,
   "min": 0.01,
   "max": 1.0,
   "step": 0.01,
   "unit": "share",
   "what": "A candidate or a proof that builds less than the other teams by more than this share of what they build, and by two errors, is weighed by the trade rule: within Trade allowed times this floor it goes on, past it it is refused (Paul, 4 November: \"ajust your floors, keep what we got, maybe normalize some\"): a share, so a floor means the same on a map of small bases as of large. The score weighs building at half a kill since LR 139; the guard holds what the score still trades.",
   "up": "more goes through that builds less",
   "down": "more waits for a person"
  },
  {
   "key": "give_road",
   "attr": "GIVE_ROAD",
   "label": "Road given up, at most",
   "default": 0.1,
   "min": 0.01,
   "max": 1.0,
   "step": 0.01,
   "unit": "share",
   "what": "The same floor for road laid, a share of what the other teams lay.",
   "up": "more goes through that lays less road",
   "down": "more waits for a person"
  },
  {
   "key": "give_kd",
   "attr": "GIVE_KD",
   "label": "Fights given up, at most",
   "default": 0.1,
   "min": 0.05,
   "max": 99.0,
   "step": 0.05,
   "unit": "kd/seat",
   "what": "The same floor, for kills less deaths a seat.",
   "up": "more goes through that fights worse",
   "down": "more waits for a person"
  },
  {
   "key": "trade_times",
   "attr": "TRADE_TIMES",
   "label": "Trade allowed, times its floor",
   "default": 2.5,
   "min": 1.0,
   "max": 10.0,
   "step": 0.5,
   "unit": "times",
   "what": "A candidate or the line that gives up building, road or fights past its floor goes on by itself while the loss is at most this many times the floor (2.5: a quarter of what the other teams build or lay, or 0.25 kills less deaths a seat), and is refused by itself past it. The score counts building since SCORE_VERSION 1, so a read that clears the bar has paid for what it gave up. Nothing waits for a person (Paul, 4 November: \"automate this please\"). 1 refuses every trade past its floor."
  },
  {
   "key": "pause_resume_min",
   "attr": "PAUSE_RESUME_MIN",
   "label": "A pause of auto promotion lasts",
   "default": 60,
   "min": 5,
   "max": 1440,
   "step": 5,
   "unit": "min",
   "what": "When two promotions of different candidates fail in a row, auto promotion pauses this long, or until main moves, then sets both candidates aside and goes on by itself; their logs say what failed (Paul, 4 November: \"automate this please\")."
  },
  {
   "key": "long_on_fast",
   "attr": "LONG_ON_FAST",
   "label": "Long reads, fast machines",
   "default": 1,
   "min": 0,
   "max": 1,
   "step": 1,
   "unit": "on",
   "long": true,
   "what": "Held-out reads and proofs go only to machines marked fast in config.json, 9 minutes against 41. 0 lets any machine take them. If none is fit, any does.",
   "up": "long reads finish sooner, builds reach slow machines sooner",
   "down": "more machines can take them when the fast ones are busy"
  },
  {
   "key": "memory_tau",
   "attr": "MEMORY_TAU",
   "label": "The fit forgets at",
   "default": 0.5,
   "min": 0.0,
   "max": 3.0,
   "step": 0.1,
   "unit": "a doubling",
   "what": "An older read counts for less: its error grows by this many points for each doubling the defaults have moved since it was read.",
   "up": "the fit trusts today's reads more",
   "down": "the fit leans on what it read before",
   "long": true
  },
  {
   "key": "memory_drift",
   "attr": "MEMORY_DRIFT",
   "label": "The fit looks back",
   "default": 6.0,
   "min": 0.0,
   "max": 20.0,
   "step": 0.5,
   "unit": "doublings",
   "what": "A read is not used once the defaults have moved this far since it, a switch counting as one, and never across a game. 0 is today's reads alone, as it was.",
   "up": "more reads, older and less like today",
   "down": "fewer reads, each more like today",
   "long": true
  },
  {
   "key": "far_share",
   "attr": "FAR_SHARE",
   "label": "Looking far",
   "default": 0.25,
   "min": 0.0,
   "max": 1.0,
   "step": 0.05,
   "unit": "of a top-up",
   "what": "Under each new game, every dial is read alone at a quarter and four times today's value, this share of each top-up until they are done.",
   "up": "the far read finishes sooner, fewer lanes for the fit",
   "down": "more lanes for the fit, a stale dial stands longer",
   "long": true
  },
  {
   "key": "temper_every",
   "attr": "TEMPER_EVERY",
   "label": "Read the temperament",
   "default": 12,
   "min": 0,
   "max": 100,
   "step": 1,
   "unit": "generations",
   "long": true,
   "what": "Every this many generations, each entry of the waves-to-temperament matrix is read each way alone, with three reads of 400 seeds to fold. 0 never.",
   "up": "fewer lanes spent, the matrix goes stale",
   "down": "the matrix follows the brain more closely"
  },
  {
   "key": "temper_share",
   "attr": "TEMPER_SHARE",
   "label": "Temperament's share",
   "default": 0.15,
   "min": 0.0,
   "max": 1.0,
   "step": 0.05,
   "unit": "of a top-up",
   "long": true,
   "what": "How much of each top-up those trials may take until they are done.",
   "up": "a round finishes sooner",
   "down": "more lanes for the fit"
  },
  {
   "key": "temper_step",
   "attr": "TEMPER_STEP",
   "label": "How hard a wave",
   "default": 0.5,
   "min": 0.05,
   "max": 1.0,
   "step": 0.05,
   "unit": "of the dial",
   "long": true,
   "what": "Each trial sets one entry to this, plus and minus: at the wave's peak the dial moves by this share.",
   "up": "easier to see, further from what a good setting is",
   "down": "closer to a usable setting, harder to see"
  },
  {
   "key": "width_every",
   "attr": "WIDTH_EVERY",
   "label": "Test the net's width",
   "default": 20,
   "min": 0,
   "max": 200,
   "step": 5,
   "unit": "generations",
   "long": true,
   "what": "Every this many generations, counted from now, record new matches and train the same data at widths 32, 64 and 128. 0 never. It changes no net: past the bar it raises a flag for a person.",
   "up": "less machine time, a later warning",
   "down": "sooner told if the net has run out of room"
  },
  {
   "key": "width_seeds",
   "attr": "WIDTH_SEEDS",
   "label": "Seeds to record for it",
   "default": 240,
   "min": 60,
   "max": 1260,
   "step": 60,
   "unit": "seeds",
   "long": true,
   "what": "How much new data each width test records. bc2 was trained on 1,260. Too few favours the narrow net, since a wide one needs more to fit.",
   "up": "a fairer test of the wide net, hours more recording",
   "down": "a cheaper test that leans narrow"
  },
  {
   "key": "width_bar",
   "attr": "WIDTH_BAR",
   "label": "Bar to say widen",
   "default": 1.0,
   "min": 0.1,
   "max": 10.0,
   "step": 0.1,
   "unit": "points",
   "long": true,
   "what": "How much better 128 must agree than 64 on drive and gun, on held-out seeds, before it raises a flag for a person.",
   "up": "fewer false alarms, a later warning",
   "down": "sooner told, more often for nothing"
  },
  {
   "key": "gauntlet_every_h",
   "attr": "GAUNTLET_EVERY_H",
   "label": "Hours between gauntlet runs",
   "default": 24,
   "min": 0,
   "max": 168,
   "step": 6,
   "unit": "hours",
   "long": true,
   "what": "How often the gauntlet runs on this Mac: every single-decision file for the rules, the untrained net and every net in nets/, 100 seeds each, to Results, Gauntlet. 0 is off.",
   "up": "the record goes stale between runs",
   "down": "the Mac spends minutes more often on it"
  },
  {
   "key": "held_seeds",
   "attr": null,
   "label": "Seeds in a held-out read",
   "default": 400,
   "min": 100,
   "max": 1600,
   "step": 100,
   "unit": "seeds",
   "what": "How many starting worlds a held-out read plays. The proof is two of them.",
   "up": "a read is surer and takes longer",
   "down": "a read is quicker and noisier"
  },
  {
   "key": "size_warn_gb",
   "attr": null,
   "label": "Warn when a place holds more than",
   "default": 20,
   "min": 5,
   "max": 500,
   "step": 5,
   "unit": "GB",
   "long": true,
   "what": "A place is the queue on the Mac, treadcore's build/ outside it, or one machine's ~/fleet. Over this, the Growth page says so in red and a flag goes up, again at each ten gigabytes more (Paul, 3 November: \"give warnings when sizes get above 20GB\").",
   "up": "fewer warnings, a fuller disk before one",
   "down": "earlier warnings"
  },
  {
   "key": "purge_keep_days",
   "attr": null,
   "label": "Days a purge leaves alone",
   "default": 3,
   "min": 1,
   "max": 30,
   "step": 1,
   "unit": "days",
   "long": true,
   "what": "A purge removes old commit builds, finished jobs' outputs on the machines, and census game logs (packed first), but nothing younger than this.",
   "up": "more kept for reading, less freed",
   "down": "more freed, less raw evidence at hand"
  },
  {
   "key": "power_usd_kwh",
   "attr": null,
   "label": "Electricity, a kWh",
   "default": 0.17,
   "min": 0.05,
   "max": 0.6,
   "step": 0.01,
   "unit": "$",
   "long": true,
   "what": "What a kilowatt-hour costs here, for the Timeline's fleet watts and each job's energy (tools/power.py). 0.17 is the US average residential price of 2025, a guess until it is set.",
   "up": "every watt costs more on the page",
   "down": "every watt costs less on the page"
  },
  {
   "key": "keep_recordings",
   "attr": null,
   "label": "Keep every recording",
   "default": 0,
   "min": 0,
   "max": 1,
   "step": 1,
   "unit": "on",
   "long": true,
   "what": "A behaviour-cloning recording's shards go once the job they were made for is done, their recipe kept in the archive: the binary and the seeds remake every shard byte for byte. 1 keeps every run's shards, for debugging (Paul, 4 November: \"I like the idea of a mechanism to debug if necessary\"); one run is kept alone by Keep for analysis on the Recordings page.",
   "up": "every recording stays on the store",
   "down": "shards dropped once read, the recipe kept"
  },
  {
   "key": "clone_every_h",
   "attr": "CLONE_EVERY_H",
   "label": "Clone the rules at most every",
   "default": 12,
   "min": 0,
   "max": 168,
   "step": 1,
   "unit": "h",
   "long": true,
   "what": "When main moves, the rules are recorded at the new commit, cloned on the GPU from scratch, and the clone judged against the shipped Scholar (style 6) by a census and the gauntlet; it ships into nets/scholar.bin when it holds. At most one round in this many hours (Paul, 4 November: \"Re-clone the rules\"). 0 turns the stage off.",
   "up": "fewer rounds: less GPU and CPU time, a Scholar further behind the rules",
   "down": "a round each time main moves"
  },
  {
   "key": "montage_every",
   "attr": "MONTAGE_EVERY",
   "label": "A montage every",
   "default": 5,
   "min": 0,
   "max": 50,
   "step": 1,
   "unit": "milestones",
   "long": true,
   "what": "A film of crucible's world duels is made by itself when the world ladder has gained this many milestones since the last film (Paul, 4 November: \"Every 5 new milestones\"); Results, Montage plays it. 0 leaves it to the Make montage button.",
   "up": "fewer films, each of more generations",
   "down": "a film sooner after each few milestones"
  }
 ],
 "stages": [
  {
   "id": "search",
   "col": 0,
   "row": 0,
   "track": "dials",
   "title": "Propose a trial",
   "input": "the ledger of every census; RANGES; the defaults",
   "output": "trial.weights",
   "simulates": "Nothing: this is arithmetic. suggest.py fits the ledger and draws from what it does not yet know; A/B flips each switch and each choice; wide trials look far from today.",
   "why": "A trial is a question about one set of dials. Every later step only answers it, so better questions are cheaper than more seeds.",
   "adds": "The source of every number the game's bots run on.",
   "queued": "A new question: nothing else makes the search look anywhere new.",
   "screens": "Results/Found"
  },
  {
   "id": "first",
   "col": 1,
   "row": 0,
   "track": "dials",
   "title": "First read, 55 seeds",
   "input": "trial.weights; today's binary",
   "output": "pooled.txt: d +/- se, each map",
   "simulates": "Bots only. Each seed is one starting world on one of eleven maps, played three times so that each team takes the trial seat once: 15 minutes of game time and three respawns, the trial brain against the baseline.",
   "why": "The cheapest honest read. Half of all trials stop here, and that is what pays for the long reads.",
   "adds": "Nothing yet: it spends lanes so the long reads go to what might be real.",
   "queued": "First read: drops the hopeless for the price of 55 seeds.",
   "screens": "Pipeline/Flow"
  },
  {
   "id": "read",
   "col": 2,
   "row": 0,
   "track": "dials",
   "title": "Read on, stage by stage",
   "input": "pooled.txt so far",
   "output": "pooled z at 82, 124, 187, 275, 418 seeds",
   "simulates": "The same census on fresh seeds. Reads pool by inverse variance, and a trial leaves as soon as its z says keep, drop or pass.",
   "why": "A sequential test: seeds go where the answer is still open. Simulated, this read 40% more real finds a seed than a fixed count.",
   "adds": "Nothing yet: it decides which few earn a held-out read.",
   "queued": "Still undecided: more seeds settle it, and it holds no bar yet.",
   "screens": "Pipeline/Flow"
  },
  {
   "id": "held",
   "col": 3,
   "row": 0,
   "track": "dials",
   "title": "Held-out read, 400 seeds",
   "input": "a trial past the read-on bar",
   "output": "held d +/- se",
   "simulates": "The census on seeds no search has seen, from 60,000,000 up. Selection has picked out lucky first reads, and only unseen seeds can say so.",
   "why": "This is the read that makes a generation. High priority: it decides, and it once waited seven hours behind what did not.",
   "adds": "The evidence every generation's commit message carries.",
   "queued": "Decides a generation: unseen seeds are the only fair read of a selected trial.",
   "screens": "Results/Candidates"
  },
  {
   "id": "families",
   "col": 4,
   "row": 0,
   "track": "dials",
   "title": "Families hold their floors",
   "input": "a candidate's weights",
   "output": "plan/families.json: pass or fail by family",
   "simulates": "Set pieces, not whole matches: a raid on a guarded base, a dodge, a kite. Each scenario has a floor a brain must keep.",
   "why": "An average can rise while a skill is lost. The families are what the census cannot see, and they caught it on 5899e8e.",
   "adds": "Keeps the behaviours a person notices when the score alone would trade them away.",
   "queued": "A candidate waits on this: it must not lose a skill the average hides.",
   "screens": "Results/Candidates"
  },
  {
   "id": "promote",
   "col": 5,
   "row": 0,
   "track": "dials",
   "title": "Tests, then the line",
   "input": "a candidate that held",
   "output": "a commit: weights.rs and tactics.rs",
   "simulates": "No match: the brain's own unit tests on a branch. set-defaults.py rewrites the defaults, and if they pass the commit joins the local line.",
   "why": "This turns numbers into code, and it is the only step that writes to treadcore. A test that pins a default it does not name stops the line here.",
   "adds": "The generation itself: new defaults in the brain's source.",
   "queued": "Writes the generation: tests on a branch, then the commit the fleet builds next.",
   "screens": "Settings/Commits"
  },
  {
   "id": "build",
   "col": 6,
   "row": 0,
   "track": "dials",
   "title": "Every machine builds it",
   "input": "the line's commit",
   "output": "census-bin at the commit, on each machine",
   "simulates": "Nothing: a cargo build per machine. A read counts only on today's defaults and today's game, so this resets what is asked next.",
   "why": "The next generation starts from this one. This is how weights are carried: the search never looks for them again.",
   "adds": "Makes the new brain the baseline everything is read against.",
   "queued": "The new generation's baseline: nothing can be read on it until this finishes.",
   "screens": "Settings/Commits"
  },
  {
   "id": "anchor",
   "col": 5,
   "row": 1,
   "track": "guards",
   "title": "Anchor: back three",
   "input": "the defaults of three generations ago",
   "output": "a trial read as any other",
   "simulates": "The census with the old values against today's. If the old read better, drift is undone by the same road a find takes.",
   "why": "Generations pass at a low bar, so some are truly worse. This is the correction for what the ratchet lets through.",
   "adds": "Undoes slow losses.",
   "queued": "Catches drift: reads today against three generations back.",
   "screens": "Results/Candidates"
  },
  {
   "id": "proof",
   "col": 6,
   "row": 1,
   "track": "guards",
   "title": "The line against main",
   "input": "main's values; the line's commit",
   "output": "2 x 400 seeds: z of line over main",
   "simulates": "The census with main's values against the line, on fresh seeds from 700,000,000 up. All the generations' noise is in one read and cannot pass it by luck.",
   "why": "Generations are unproven on purpose. This is the single gate between a fast search and what players get.",
   "adds": "Decides what reaches the game on origin/main.",
   "queued": "The gate to main: nothing reaches a player until the line reads past it.",
   "screens": "Pipeline/Board"
  },
  {
   "id": "main",
   "col": 7,
   "row": 1,
   "track": "game",
   "title": "Main: the game's brain",
   "input": "a proved line",
   "output": "origin/main; every player's bots",
   "simulates": "Nothing: a push. Every machine fetches it, and a release carries it to players.",
   "why": "This is where the fleet's work becomes the game.",
   "adds": "All of it: Commander, tactics, crew and fleet read these defaults in every match.",
   "queued": "Pushes the proved line.",
   "screens": "Settings/Commits"
  },
  {
   "id": "transform",
   "col": 1,
   "row": 2,
   "track": "transform",
   "title": "Transform: learned override",
   "input": "the senses, the rules' answer, the biorhythm",
   "output": "patches/theta.json: 942 numbers",
   "simulates": "The same census with the patch switched on, SPSA moving all 942 numbers by one noisy read a step. All zeros is the brain as it was.",
   "why": "The rules decide and a small net may move their answer if it is confident. This is the first learned part with a path to one brain.",
   "adds": "The file style 5 ships. The search still will not promote one by itself.",
   "queued": "Learned override: one more SPSA step on a net the rules can fall back from.",
   "screens": "Results/Algorhythm"
  },
  {
   "id": "slot",
   "col": 5,
   "row": 2,
   "track": "transform",
   "title": "The game reads a slot",
   "input": "a transform's file",
   "output": "nets/patches/1.bin, in the game as style 5",
   "simulates": "Nothing here: a file shipped in the binary. Under a census it is read from the queue, as before.",
   "why": "Now a learned improvement can ship and a person can choose it. Off unless chosen.",
   "adds": "Style 5, Overrider: the rules, with the transform moving their answer when it is sure.",
   "queued": "",
   "screens": "Pipeline/Board"
  },
  {
   "id": "islands",
   "col": 1,
   "row": 3,
   "track": "gpu",
   "title": "GPU islands: crucible",
   "input": "champions from the other islands; the ladder",
   "output": "champ.bin, gens.tsv, exam.tsv",
   "simulates": "Crucible's arena on the card: 2,048 small nets duelling, 128 episodes, 50 generations a segment. Since 3 November under the game's own rules, read from treadcore's rules.rs at the fleet's commit: its tank, its gun, eyes of ten tiles, four neutral pillboxes; no map, no economy.",
   "why": "It is the only use of the GPUs, and it is very fast. It learns to duel under the game's rules, which is a part of the game, not all of it.",
   "adds": "Champions; each new milestone the bridge reads in the game as style 17, Gladiator.",
   "queued": "GPU search: keeps the island's population moving between exams.",
   "screens": "Results/Algorhythm"
  },
  {
   "id": "bridge",
   "col": 3,
   "row": 3,
   "track": "gpu",
   "title": "Bridge: crucible to treadcore",
   "input": "each new milestone of the world islands, 20,944 bytes (55-48-48-4)",
   "output": "a read in the game against the shipped Gladiator; when it holds, Ship: nets/gladiator.bin, style 17",
   "simulates": "Real matches, every map: the Gladiator's team against today's defaults, the candidate's champion by GLADIATOR=file and the shipped one, on the same 48 seeds and one machine. Its 55 inputs are built from what a tank sees: crucible's rays and yardstick, the pillboxes that would fire on it, its shells and reload.",
   "why": "This is what lets GPU work reach the game. The world islands train under the game's own rules, so their champion is read where it would play; style 7 keeps the hybrid.",
   "adds": "Style 17, Gladiator; a champion shipped is a commit, so a person presses Ship.",
   "queued": "two censuses a new world milestone, on the first fast machine",
   "screens": "Pipeline/Board"
  },
  {
   "id": "brain",
   "col": 7,
   "row": 3,
   "track": "game",
   "title": "One brain, by name",
   "input": "main, a slot, a champion",
   "output": "bot styles 0 to 7, chosen a team at a time",
   "simulates": "A real match: any mix of rules, dials, transform, net and champion on one map.",
   "why": "A person can now ask for a kind of mind by name.",
   "adds": "The menu's team rows, and --bots.",
   "queued": "",
   "screens": "Pipeline/Board"
  },
  {
   "id": "clone",
   "col": 6,
   "row": 2,
   "track": "gpu",
   "title": "The rules cloned on the card",
   "input": "the rules at the fleet's newest commit: 120 matches recorded, sixteen seats, five samples a second",
   "output": "a fresh clone; when it holds, nets/scholar.bin, style 6",
   "simulates": "The recording plays real matches of the scripted brain; the judge plays the clone and the shipped Scholar as a whole trial team against today's defaults on the same 48 seeds, and both on every gauntlet.",
   "why": "The Scholar imitates the rules, and the rules move with every promotion: a clone of last week's rules imitates a brain the game no longer plays.",
   "adds": "Style 6, Scholar, kept a clone of today's rules; the recordings dropped once read, their recipe kept.",
   "queued": "a record run, a training job on the GPU store, two censuses and a gauntlet on one fast machine",
   "screens": "Pipeline/Board"
  }
 ],
 "edges": [
  [
   "search",
   "first",
   "trial.weights"
  ],
  [
   "first",
   "read",
   "z at 55"
  ],
  [
   "read",
   "held",
   "a pass"
  ],
  [
   "held",
   "families",
   "a candidate"
  ],
  [
   "families",
   "promote",
   "its floors"
  ],
  [
   "promote",
   "build",
   "a commit"
  ],
  [
   "build",
   "search",
   "new baseline"
  ],
  [
   "promote",
   "anchor",
   "each generation"
  ],
  [
   "anchor",
   "first",
   "old values"
  ],
  [
   "build",
   "proof",
   "the line"
  ],
  [
   "proof",
   "main",
   "z past 3"
  ],
  [
   "main",
   "brain",
   "defaults"
  ],
  [
   "transform",
   "slot",
   "theta"
  ],
  [
   "slot",
   "brain",
   "style 5"
  ],
  [
   "islands",
   "bridge",
   "champions"
  ],
  [
   "bridge",
   "brain",
   "style 17"
  ],
  [
   "build",
   "clone",
   "a new commit"
  ],
  [
   "clone",
   "brain",
   "style 6"
  ]
 ],
 "methods": [
  {
   "name": "The dial search",
   "state": "live",
   "stage": "search",
   "job": "w, e, h",
   "what": "Fit, draw, read: suggest.py over the ledger, then the sequential census.",
   "gives": "about 120 numbers in weights.rs and tactics.rs",
   "reaches": "the game, through main",
   "report": "difficulty-lab-report.html"
  },
  {
   "name": "A/B versions",
   "state": "live",
   "stage": "search",
   "job": "w",
   "what": "Every switch flipped and every choice's other versions, each generation.",
   "gives": "which functions run: 18 switches and each choice",
   "reaches": "the game, through main",
   "report": "brain-versions-lab-report.html"
  },
  {
   "name": "Families",
   "state": "live",
   "stage": "families",
   "job": "f",
   "what": "Set pieces with floors, for each candidate.",
   "gives": "a veto",
   "reaches": "the game, by what it refuses",
   "report": "fleet-orchestration-lab-report.html"
  },
  {
   "name": "Anchors and the proof",
   "state": "live",
   "stage": "proof",
   "job": "w, pv",
   "what": "Today read against three back, and the line read against main.",
   "gives": "corrections and the gate",
   "reaches": "the game, through main",
   "report": "difficulty-lab-report.html"
  },
  {
   "name": "The transform (SPSA over 942)",
   "state": "live",
   "stage": "transform",
   "job": "r-k",
   "what": "A residual net over the rules' answer, moved by one census a step.",
   "gives": "patches/theta.json",
   "reaches": "the game as style 5, chosen by a person",
   "report": "algorhythm-lab-report.html"
  },
  {
   "name": "Crucible's GPU islands",
   "state": "live",
   "stage": "islands",
   "job": "x",
   "what": "Populations of nets duelling on the card, swapping champions.",
   "gives": "champions",
   "reaches": "the game as style 7, chosen by a person",
   "report": "cuda-hybrid-lab-report.html"
  },
  {
   "name": "Imitation: record, train, school, gauntlet",
   "state": "dormant since 30 Oct",
   "stage": "islands",
   "job": "r",
   "what": "Recorded matches teach a net to play as the rules do, then it is examined.",
   "gives": "nets/bc2.bin, the learned tank, about 20 a seat under the rules",
   "reaches": "the game as style 6, chosen by a person",
   "report": "cuda-node-lab-report.html"
  },
  {
   "name": "Whole-brain sweeps: switches, parts, census, round robin",
   "state": "dormant since 29 Oct",
   "stage": "first",
   "job": "r",
   "what": "Each switch or part alone against the defaults.",
   "gives": "a reading of what each part is worth",
   "reaches": "people, and the fit through the ledger",
   "report": "fleet-orchestration-lab-report.html"
  },
  {
   "name": "Older searches: SPSA and tune on dials",
   "state": "dormant since 29 Oct",
   "stage": "search",
   "job": "r-k, r-g",
   "what": "Gradient and evolution over a chosen few dials, a run at a time.",
   "gives": "trials, by way of the same census",
   "reaches": "the game, had they found anything the fit did not",
   "report": "fleet-orchestration-lab-report.html"
  }
 ],
 "screens": [
  {
   "key": "Machines",
   "does": "Adds a computer to the fleet: probe it, apply a recipe, join it.",
   "ties": "The very start of the line. No machine, no lane, no reads.",
   "drawn": "A list with one step lit, because a setup is a sequence and the next step is what matters.",
   "look": "A machine stuck on a step, or a recipe that says ready to run.",
   "sim": "Nothing runs here. It only makes a machine able to run the census and build the brain.",
   "helps": "More lanes means more seeds an hour, and that is the only currency the search spends."
  },
  {
   "key": "Media",
   "does": "The cards and images the machines were made from.",
   "ties": "Before the line: how a machine came to exist.",
   "drawn": "A ledger of cards, because a card has no other record.",
   "look": "A card whose image is older than the fleet's.",
   "sim": "Nothing runs here.",
   "helps": "Only indirectly: it lets a dead machine come back the same as it was."
  },
  {
   "key": "Storage",
   "does": "The fleet's disks and shares: survey, share, mount.",
   "ties": "Where results and snapshots could live. The training record is stored apart, by fleet-archive.py.",
   "drawn": "A patch bay, because a share is a connection between two machines.",
   "look": "A disk filling up, or a 10 Gb link not plugged in.",
   "sim": "Nothing runs here.",
   "helps": "Indirectly: nothing learned is worth much if the record of it is lost."
  },
  {
   "key": "Projects",
   "does": "Says which machine works on what: treadcore or crucible.",
   "ties": "Sets which lanes feed the dial track and which feed the GPU track.",
   "drawn": "A grid of machines by projects, because that is the only question it answers.",
   "look": "A machine on no project, or a project paused and forgotten.",
   "sim": "Nothing runs here. It chooses who runs what.",
   "helps": "Directly: CPU lanes on treadcore can reach the game, and GPU lanes on crucible cannot yet."
  },
  {
   "key": "Queue/Fleet",
   "does": "Each machine, its job now, and its buttons.",
   "ties": "Every stage of the line, seen by machine.",
   "drawn": "A row a machine with a lamp, because the question is whether anything is idle.",
   "look": "A lamp not lit under a full queue, or one machine on old work.",
   "sim": "Whatever each machine shows: mostly the census, 15-minute matches of bots on eleven maps.",
   "helps": "An idle lane is lost seeds. This is where you see that first."
  },
  {
   "key": "Queue/Runs",
   "does": "Asks for a one-off run, cancels one, accepts one.",
   "ties": "A side door into the line: what a person asks goes before the standing search.",
   "drawn": "A list by run, newest first, because a run is a thing someone asked for.",
   "look": "A run failed or left running with no lanes.",
   "sim": "Whatever the run is: a census, a sweep, a recording.",
   "helps": "Only when a person has a question the search would not ask."
  },
  {
   "key": "Pipeline/Board",
   "does": "The whole line as tasks: order, machines, expected time, and the next essential task.",
   "ties": "This is the line. Each bar is a stage.",
   "drawn": "A Gantt for order and time, and a Kanban for state. Arrows are dependencies, and the red box has most depending on it.",
   "look": "Red: the biggest blocker. NOT BUILT: a gap in the road to one brain.",
   "sim": "Nothing itself. It reports the medians the fleet measured in the last day.",
   "helps": "It says which single thing would free the most work."
  },
  {
   "key": "Pipeline/Flow",
   "does": "How data moves: what each stage takes in and gives out, and one real trial traced through.",
   "ties": "All of it, by the files that pass between stages.",
   "drawn": "Boxes and arrows with the file named on each arrow, because the question is what connects to what.",
   "look": "How far each trial got, and where the road stops: a red box means data goes no further.",
   "sim": "Each box says what it simulates. Pick a trial below to see its reads.",
   "helps": "It shows which work reaches treadcore and which does not yet."
  },
  {
   "key": "Pipeline/Timeline",
   "does": "Every machine: what it did, what it does now, and what it will do next, at six zooms from the hour to three months.",
   "ties": "All stages, by when and by whom; the milestones of the line, the game and the GPU islands as lines through them.",
   "drawn": "A row a machine with now as a line: left is measured, right is a forecast from the medians. Colour is the stage. The hour and the six hours draw each job; a day and longer draw bins of the event log, each column filled by the share of it each stage took.",
   "look": "Gaps on the left are lost time. Green marks are generations. A lane of one colour shows where the fleet spends itself. Point at a block and its chain lights: every job of the same trial, run or island, framed in amber wherever it ran, an arrow from each to the next, the rest stepped back. A click keeps it lit. Lines with tags mark a generation, the line on main, a candidate stopped, the game's rules, a GPU milestone and a net shipped into the game; on the GPU rows a box says when the island next hands the game anything. Under the rows, the fleet's watts at the wall, blue to white to purple to yellow to red as it nears full tilt, with what they cost; each row's foot is its own watts.",
   "sim": "Bars are mostly the census. Crucible's arena on the -cuda rows: a duel of tanks and pillboxes built with sixteen of treadcore's rules, not its economy or its score.",
   "helps": "It shows the shape of the spending, which is the easiest place to find waste."
  },
  {
   "key": "Pipeline/Queued",
   "does": "What is waiting and running, each with why it is there.",
   "ties": "Each row names its stage in the line.",
   "drawn": "A list in queue order, because that is the order things will happen.",
   "look": "Priority work behind a long queue, or one kind crowding out the rest.",
   "sim": "Each row says which: a census, a family, a build, the GPU arena.",
   "helps": "It lets you judge whether the fleet is asking the right questions."
  },
  {
   "key": "Pipeline/Values",
   "does": "The numbers that set how hard a generation is. Change them here and the next plan uses them.",
   "ties": "The bars of Read on, Held-out and the Proof.",
   "drawn": "One row a value with its default and range, so nothing can be set past what it was tried at.",
   "look": "A value away from its default, and whether the generation gap on the Board answers.",
   "sim": "Nothing itself. tools/plans/difficulty-sim.py simulates what a value buys.",
   "helps": "Too easy and the line fills with noise. Too hard and nothing is carried."
  },
  {
   "key": "Pipeline/Lineup",
   "does": "Every chain in its own rows, a Gantt chart each: a trial, a run, a build, an island, the line's proof. Named for The Lineup (1954): each one stands in its own row.",
   "ties": "The Timeline's jobs, regrouped by the chain each is a link of; the planner says how each chain ended.",
   "drawn": "A head row a chain with how it ended or where it stands; under it its jobs where they ran, each block its machine and its job; a fork (jobs of it that ran at once, a held-out read's pieces) on sub-rows of its own, open as an accordion; an arrow from each job to the next. The hour and the six hours share the Timeline's clock; each its own stretches every chain across the width.",
   "look": "A red wall is a dead end: a trial dropped after its reads, a held-out read that did not pass, a promotion that failed. Green is won: promoted, built, shipped. Amber is still going, with hollow blocks for what the forecast deals it next.",
   "sim": "The census's reads, the held-out reads in their pieces, the tests, the builds and the GPU segments, as the Timeline has them.",
   "helps": "It untangles the Timeline's arrows: each chain's road from its first read to its end, every dead end and every success in one place."
  },
  {
   "key": "Pipeline/Hit Parade",
   "does": "The tally of every job handed off: each machine a row, each kind of job a column, counted. Named for Your Hit Parade, the countdown of the 1950s. Approved by Von Glurt.",
   "ties": "Each job as the keeper hands it off, counted by the planner a day at a time and kept.",
   "drawn": "A wall of counters, because the question is how much and how well, machine by kind: each the jobs done, the share that came back done, the rate an hour and the energy a job. Beside it each machine's rate by kind as one bar; under it a bar a day.",
   "look": "A share under 99% in amber or red, a machine whose rate falls behind its kind's, and the energy a job of the slow servers against the fast machines'.",
   "sim": "Nothing itself: it counts what the other pages show.",
   "helps": "It shows which machine does which work best, and what each job costs, over today, a week, or everything."
  },
  {
   "key": "Pipeline/Blame",
   "does": "Every machine at a round table: who it waits on, and the help it takes from the queue while it does. Beside it, each machine's own queue, folding by a click.",
   "ties": "The Timeline's forecast deals each queued job to a machine; what holds the job is its turn there, its build, a job another machine runs, or the planner.",
   "drawn": "Machines round the edge and the queue in the middle, because a wait is between two parties and a ring puts every pair in reach of an arrow. Red between machines, amber to the planner, a loop for a machine's own queue, green for its help.",
   "look": "A red arrow is the only real blame: work standing while another machine finishes. Amber that stays is a chain handed back to the planner. A busy share under 90% is time to find. Point at a machine, or at a job in its queue: its jobs are laid out at the table in the order they will run, an arrow from each to the job it waits on, red when that job is another machine's; a click keeps it, and the pane under the queues says what it is.",
   "sim": "The census and the GPU arena, as the other pages; here only who waits on whom.",
   "helps": "It shows whether the fleet's waiting is a bottleneck or a buffer, and where the spare time goes: into the small returnable reads of the standing search."
  },
  {
   "key": "Results/Candidates",
   "does": "Trials past their held-out read: a list of what may become a generation.",
   "ties": "Between Held-out and Tests.",
   "drawn": "A filterable list, because the questions are which are current and which promoted.",
   "look": "Current ones waiting, and the same one failing tests twice.",
   "sim": "The rows are census reads. The seeds are unseen by the search.",
   "helps": "These are the finds. Everything before exists to fill this page with few true ones."
  },
  {
   "key": "Results/Found",
   "does": "Each improvement read, by dial and by machine.",
   "ties": "Search and First read: the ticker of what was tried.",
   "drawn": "Rows by dial, because the fit learns by dial and you may want to see what it is learning.",
   "look": "A dial that keeps coming up, or one machine reading differently from the others.",
   "sim": "First reads: 55 seeds, 15-minute matches, on all eleven maps.",
   "helps": "It is what the fit reads next. A machine reading oddly poisons it, as the Mac's one-map bug did."
  },
  {
   "key": "Results/Net",
   "does": "The learned tank's net: its weight matrices.",
   "ties": "The imitation method, dormant since 30 October.",
   "drawn": "Matrices as heat maps, since a net has no other shape to look at.",
   "look": "Dead rows or columns: a sense or action nothing reaches.",
   "sim": "Nothing runs here. Its training imitated recorded rule-brain matches.",
   "helps": "It is the net the census can seat. No player meets it yet: the game's client does not load a net."
  },
  {
   "key": "Results/Flags",
   "does": "What needs a person, and what progress was made.",
   "ties": "Every stage can raise one.",
   "drawn": "A list you can acknowledge, because a flag should be answered once.",
   "look": "Red, unacknowledged; or the same flag rising again.",
   "sim": "Nothing runs here.",
   "helps": "It keeps the line automatic: the fleet asks only when it must."
  },
  {
   "key": "Results/Algorhythm/Patch",
   "does": "The brain as a patch: dials, switches and the transform, in order.",
   "ties": "Search and Transform: where each number acts.",
   "drawn": "A signal path, because the brain is rules, then dials, then an override.",
   "look": "Stages at zero: they cost nothing and do nothing.",
   "sim": "Nothing runs here. It maps what the census simulates.",
   "helps": "It shows which stage of the brain a search can move."
  },
  {
   "key": "Results/Algorhythm/Terrain",
   "does": "Each dataset's reads as a landscape over two dials, with its local maxima and what works on each.",
   "ties": "Search: where the fleet has looked, and what it has not. Select a region to send it trials.",
   "drawn": "A surface, because peaks read at a glance, and the same ground flat, because a region and a job can be placed there. Red flags have nothing on them.",
   "look": "Places to look, never results. A peak on thin support is one lucky read, and 'read' means seeds stood there, not that it won.",
   "sim": "Past censuses, moved to today's defaults by a small fit of the dials since moved. Only reads that moved one of the two dials count.",
   "helps": "It shows whether every maximum in every dataset is being worked on, and asks for work on those that are not."
  },
  {
   "key": "Results/Algorhythm/Spectrum",
   "does": "How the GPU champions' nets change over time.",
   "ties": "GPU islands.",
   "drawn": "A spectrogram of singular values, because it shows a net's structure growing without reading weights.",
   "look": "New bright rows: new directions. Flat means the island has stopped learning.",
   "sim": "Crucible's arena, not the game.",
   "helps": "It tells you whether GPU work is still moving, even before it can reach the brain."
  },
  {
   "key": "Results/Algorhythm/Matrices",
   "does": "Tables of each layer of the shipped net.",
   "ties": "The imitation method.",
   "drawn": "Numbers for rank and norm, and a map from senses to outputs.",
   "look": "Low stable rank: the net uses little of its size.",
   "sim": "Nothing runs here.",
   "helps": "It tells you how big a slot needs to be."
  },
  {
   "key": "Results/Algorhythm/Senses",
   "does": "Which senses the net listens to, drawn round the tank.",
   "ties": "The imitation method, and the transform's inputs.",
   "drawn": "A disc with forward at the top, since most senses are compass sectors.",
   "look": "A dark channel: a sense nobody uses, and a candidate to remove.",
   "sim": "Nothing runs here.",
   "helps": "Fewer senses mean a faster census and a smaller transform."
  },
  {
   "key": "Results/Algorhythm/Temper",
   "does": "What tanks do at each wave's high against its low, and the matrix of how far waves move temperament.",
   "ties": "Search: the census folds its behaviour over each seat's waves, and the matrix's dials go by the ordinary road.",
   "drawn": "A grid, waves by behaviours, each cell the difference with its error, because three waves are three separate questions.",
   "look": "The waves driving nothing first: that row is what chance looks like. A cell past two errors in the others, more than in that one.",
   "sim": "Real matches, read from the census logs. It shows waves changing behaviour, and only a census says if it wins.",
   "helps": "It says if a wave reaches a tank's behaviour at all before anything is built on it."
  },
  {
   "key": "Results/Algorhythm/Fleet",
   "does": "The road from trial sources to main, with live counts.",
   "ties": "All of the dial track.",
   "drawn": "Boxes and arrows with counts. Pipeline/Flow is the fuller one, with files named.",
   "look": "A count that stops rising.",
   "sim": "It reports census counts.",
   "helps": "A quick read of whether the road is moving."
  },
  {
   "key": "Lab",
   "does": "The room of machines: a live tile for each.",
   "ties": "Beside the line: any machine, any time.",
   "drawn": "Tiles, because a room is looked round, not read.",
   "look": "A dark tile, or a machine hot under load.",
   "sim": "What the screen shows, or a terminal.",
   "helps": "Only when something is wrong and you need to see for yourself."
  },
  {
   "key": "Sessions",
   "does": "Terminals for each machine, kept alive in tmux.",
   "ties": "Beside the line: hands on a machine.",
   "drawn": "A grid of terminals, for watching several things at once.",
   "look": "A build error or a stack trace nothing reported.",
   "sim": "Whatever you run.",
   "helps": "It is how a person fixes what the keeper cannot."
  },
  {
   "key": "Orchestrate",
   "does": "Who may command the fleet, what each machine is, and the verbs.",
   "ties": "Beside the line: the authority over machines. Its certificate decides whether Orrery can reach them.",
   "drawn": "Machines by question, because you select by what is true of them, then act.",
   "look": "A certificate near expiry, or a machine answering differently.",
   "sim": "Nothing runs here.",
   "helps": "It keeps the machines up, updated and alike, so reads can be compared."
  },
  {
   "key": "Chat",
   "does": "One room to talk with each machine, kept on the machine.",
   "ties": "Beside the line.",
   "drawn": "A transcript, as a chat is.",
   "look": "A machine that stopped answering.",
   "sim": "Nothing runs here.",
   "helps": "Not directly. It is for asking a machine a plain question."
  },
  {
   "key": "Settings/Keeper",
   "does": "Is it running as it should: the keeper's checks, and its buttons.",
   "ties": "Under the whole line.",
   "drawn": "Checks with lamps, because the only question is what is amber or red.",
   "look": "An amber or red lamp, above all search, difficulty and starving lanes.",
   "sim": "Nothing runs here.",
   "helps": "A keeper down means every lane stops within a job."
  },
  {
   "key": "Settings/Long run",
   "does": "The work that repeats over many generations: its options, and what it last found.",
   "ties": "Search: looking far, remembering, the temperament matrix, the width test.",
   "drawn": "Rows of options as on Values, with each watch's last result above them.",
   "look": "A width test past its bar, and rounds that have stopped finishing. An option at 0 means that work is off.",
   "sim": "Nothing runs here. A press is live at the next plan, about a minute.",
   "helps": "Long jobs are set once and read from time to time, without being asked for again."
  },
  {
   "key": "Results/Personas",
   "does": "The roster of styles and personas: what each plays, the dials its profile sets over today's defaults, and its last census read here.",
   "ties": "Bot styles 0 to 7 and the personas 8 to 15 of styles.rs; a persona's census is its certificate (the plan, chapter 10).",
   "drawn": "A row a slot: a lamp coloured by its read, the name, the read with its error and seeds, what it plays; the dials on hover.",
   "look": "A persona still unread, or one reading under today's defaults by two errors.",
   "sim": "Nothing runs here. A read is asked for with `new census \"trial=bot_style = K\"`.",
   "helps": "A person can see which named mind is proven and which is a hypothesis before putting it on a side."
  },
  {
   "key": "Results/Gauntlet",
   "does": "The single-decision tests' last record: a row a gauntlet, a column a brain (the rules, the untrained net, every net in nets/), the share of seeds passed.",
   "ties": "The gauntlet of 27 October and the three escort gauntlets of 2 November; the nightly job on this Mac writes the record.",
   "drawn": "A grid of shares; red under the file's floor, green at or over it; the error, the runs and the reaction's median on hover.",
   "look": "A red cell for the rules, which is a finding about the scripted brain; a net under the rules on a decision it should have learned.",
   "sim": "Nothing runs here. The job runs once a day (gauntlet_every_h on Long run); `make gauntlet` runs it by hand.",
   "helps": "Whether a brain can make each single decision is read apart from whether it wins a match."
  },
  {
   "key": "Settings/Ranges",
   "does": "The brain's RANGES: every number's limits, today's default between them, the kind, the reason, and the decrees marked.",
   "ties": "Physical constraints first (the plan, chapter 9): the search moves inside a range; a decree, min = max, is Paul's alone.",
   "drawn": "A row a range: name, min, today, max, the file's section as its kind, the reason; a red lamp on a decree.",
   "look": "A default at an edge of its range, which means the search wants past it, and a decree the search is still asked about.",
   "sim": "Nothing runs here, and nothing here moves a number: the file is edited by hand.",
   "helps": "What was a constant in all but name is now written down with its reason, in one place a person can read."
  },
  {
   "key": "Settings/Commits",
   "does": "The line the fleet builds, newest first, with the defaults each changed.",
   "ties": "Tests, Build and Main: the generations themselves.",
   "drawn": "A list by commit, because each generation is exactly one commit.",
   "look": "How often a commit is a generation, and whether a machine is behind.",
   "sim": "Nothing runs here. The census read each commit's values before it was written.",
   "helps": "This is the brain's history, number by number."
  },
  {
   "key": "Results/Growth",
   "does": "Crucible's generations, a sample a segment: fitness, yardstick, exam, and the champion's matrices; the sizes every place the fleet's generations fill; Measure and Purge.",
   "ties": "The islands of the GPU lanes (Pipeline, islands) and their ladder (Projects). The sizes are the queue on the Mac and each machine's ~/fleet; the purge packs into fleet-archive's packs before it removes a log.",
   "drawn": "Small multiples, one line an island in one colour throughout, because the finding is how the measures move together; the inspector is the sample under the cursor's generation. The sizes are bars against one limit mark, so a full disk is a red bar past the line.",
   "look": "A norm that keeps climbing while the exam falls: the net is saturating, not learning. A red bar: a place over the limit, and the purge's list of what it would free.",
   "sim": "Crucible's arena on each card: duels of two tanks, under the game's rules when the island is a world island.",
   "helps": "A champion is worth carrying into the game only if it grew; and nothing learned survives a full disk."
  },
  {
   "key": "Results/Recordings",
   "does": "Every behaviour-cloning recording: its shards on the store, its recipe (the binary and seeds that make it again), who still reads it; Keep for analysis, Drop, Re-record, and a seed read a tank at a time.",
   "ties": "The record runs the planner asks (the shape watch, the rotation) and fleet-record.sh's; their shards on the GPU store; the recipes in archive/recordings; Settings, Long run, Keep every recording.",
   "drawn": "A row a run, its state in words and its size now, because the question is what each costs and whether losing its shards loses anything. The reader: the tanks of one seed down the left, the bot's choices in words, the compass as a grid a sector a column, the other senses as bars.",
   "look": "A run on the store with a complete recipe and no reader: the sweep drops it within six hours. A recipe not complete: its binary was rebuilt or lost, and its shards stay.",
   "sim": "Real matches of the scripted brain, 16 seats, five samples a second a living tank: the senses a net would see and what the brain did.",
   "helps": "Training data that costs nothing to keep, since the recipe remakes it byte for byte; and a way to see what the scripted brain did, a fifth of a second at a time, when a net learns the wrong thing."
  },
  {
   "key": "Results/Montage",
   "does": "The generations since the last film, as a film: each new milestone's champion in crucible's world duels, kill shots and pillbox fights cut 1 s before and 0.5 s after, the camera on its best won duel and every other duel a ghost; Make, the newest frame while it is made, Play.",
   "ties": "The world home's ladder (Projects, crucible) and its growth record (Growth); crucible --trace on a GPU island; orrery's own flowchart, history, terrain and spectrogram as the story between the chapters; the films kept in archive/montages.",
   "drawn": "A film a row, and for the one chosen its chapters, each with a bar of wins, losses and draws from one start against the same opponents, because that bar is the comparison the film makes.",
   "look": "The won share of the bar growing chapter on chapter: the champions grew. A chapter of draws: a champion that waits rather than fights.",
   "sim": "Crucible's world arena under treadcore's rules, four neutral pillboxes, a duel of 1,200 steps of 0.1 s; one start, the dice choosing each duel's opponent.",
   "helps": "Seeing what a generation learned, not only its number: the shot it takes, the pillbox it crosses or takes."
  },
  {
   "key": "Results/Videos",
   "does": "The films in orrery's output folder, newest first, as a list with their data: when each was made, its length, size, chapters and the generations it covers; the one chosen with its title, description, chapter marks and path. Open plays it in this machine's own player; Show finds it in the file browser.",
   "ties": "tools/montage.py copies every film it makes into output/ (or ORRERY_OUTPUT) with a .txt of its title, description and chapter marks; a montage's length and chapters come from its summary in the archive (Results, Montage), any other film's from ffprobe, once.",
   "drawn": "A list and not a player (Paul, 4 November: \"its just a list with data, not a player\"): a person picks the file to upload or show, and the machine's own player plays it.",
   "look": "The newest film at the top, its length and chapters; the chapter marks under it are the lines to paste into a video site's description.",
   "sim": "Nothing: these are the montage's finished films, crucible's world duels filmed from one start.",
   "helps": "The film leaves the fleet: the generations shown to someone who has not seen the console."
  }
 ]
}
