QBRPeriorrarium · the observatory

From the periorrarium

The observatory

Above you is nearly every word a machine learned from six billion words of Wikipedia and news, drawn as a star. Nobody told it what the words mean. It placed each one by the company it keeps, and the company sorted itself into islands: courts, markets, war, food, football, the body. The machine has no idea it did thisBack to the vehicle

This room shows three systems that are bigger than any picture of them: that space of words, a cluster of machines, and the landscape of problems that cannot be solved exactly at scale. Each is shown as an instrument you can touch, and each is held to the same three questions.

  1. What does it keep? relations, company, the sentence you wrote
  2. What does it lose? scale, causes, the best possible answer
  3. How does it stay honest anyway? a loop that keeps correcting, and a ledger that says what it is not to scale in

Made by Claude with Lex at Quiet Boring Research, 22 October 2026. Every number on this page was computed, and the ledger at the bottom says where. Press . anywhere to go back to the vehicle.

First instrument

How a machine comes to mean

A word is placed by the company it keeps. Count, across six billion words of text, which words turn up near which, and let every word drift toward the ones it is seen with: words that keep the same company land near each other. Nothing else is in there. No dictionary, no grammar, no causes, no up or down. Only nearness.

That is enough for arithmetic to work, which is the first surprise. It is also why the space cannot tell thunder from lightning, which is the second.

Take king, remove what is man about it, add what is woman about it, and ask the space what is nearest. It answers queen. Nobody taught it that; the company of the words did.

minus
Cosine is the measure of nearness: 1.0 is the same direction, 0 is unrelated. The vector space has 400,000 words in 100 dimensions.
GloVe 6B 100d (Wikipedia 2014 and Gigaword 5), computed live by this Space's API.

Five directions were measured through the space from pairs of words: hot minus cold, happy minus sad, furious minus calm, bright minus dark, moving minus still. Any word can be read off along them. Fire reads zero on all five, because most of the time, in news, fire means shooting.

Each axis is the mean of five or six unit differences (hot−cold, boiling−freezing, scorching−icy, heated−frozen, warmer−colder for temperature). A reading is the dot product of the word's unit vector with the axis; ±0.5 is far, 0 is the middle.
The axes and their pairs are in data/axes.json; readings computed live.

Stand on a word and keep stepping to whichever of its twenty-five nearest neighbours is brighter, until none is. That is a hill climb, and it is how most machine learning finds anything. It ends on a local peak and never knows whether a higher one exists over the next ridge.

Toward light there are two big peaks, radiant (reading 0.478) and laser (0.461), and no climb from the weekend's words ever crossed from one basin to the other. Everything else was a trap.
Live: /api/climb, 25 neighbours, 30 steps at most. First recorded 17 October 2026 (ledger: ride2.py); the gains then were written down as the peak's reading, corrected here.

Go to your nearest word, then to its nearest word, and keep going. You end in a loop within a few steps, and it is always a loop of two: hill and ridge are each other's nearest word, and so are climb and climbing. The space is a field of small whirlpools, and every word drains into one of them.

Nearest-neighbour walks with no revisits, stopped at the first word already on the path. infinite walks to formula tokens when they are allowed and to finite ↔ discrete when they are not. Why the loop is always two words: each step goes to the nearest word, so no step can be longer than the one before it; around a loop that makes every step the same length, which happens only by an exact tie; so the loop is two words that are each other's nearest.

The whole sky, counted: every one of its words sent to its nearest word, on the A100.

Live: /api/walk, 20 steps at most; /api/well and /api/wells from the table computed by tools/wells.py. The Beacon's caption says a plain walk from tower ends at however; it does not: tower and towers are each other's nearest word. That walk had skipped plurals. Recorded 22 October 2026; the wells, 23 October.

Braitenberg's vehicles learn with two kinds of wire: one that strengthens when two things happen together, and one that strengthens when one thing follows another. This space has only the first. It knows who keeps company with whom and nothing about what follows what. Ask a text which comes first, thunder or lightning, and it answers thunder, because that is how English says it.

Counts of how often the first word precedes the second within five positions, and the reverse, in 17,005,207 words of Wikipedia (text8). Order in text is grammar's order, not time's: thunder and lightning; answer the question.
ergotrix.py, 17 October 2026 (ledger).
It keeps
company: which words are seen together, averaged over six billion words.
It loses
causes, order, and scale: a hundred dimensions have to be shown as two or three, and every such picture throws most of the space away.
It stays honest by
saying how much each picture keeps. The sky above says 15.3%. The vehicle keeps every distance to the word at its centre true and lies only about the angles.

Second instrument

A thousand machines pretending to be one

Every program on the internet runs on some computer, and computers fail, fill up, and get replaced. Kubernetes is the system most of the world now uses to pretend that a room full of them is one reliable machine. The whole of it is one idea: you write down the world you want, and it spends the rest of its life making the world match the sentence.

This page runs on it. The sandbox that computed the sky was a Kubernetes pod, and so, under the hood, is the Space you are reading.

The pieces, named by their jobs first. Everything in Kubernetes is one of a few nouns, and each noun is owned by the next one up.

a serviceone stable name and address in front of whichever copies are alive
a deploymentowns the copies so the program can be swapped for a new version without stopping
a replica setkeeps exactly n copies running, and this is the loop
a podone copy: one or more containers sharing an address
a containerthe program, packed with everything it needs
a pod
a container
a pod
a container
  • The front door kube-apiserver every read and write of the cluster's state goes through it.
  • The ledger etcd the one place the desired state is written down; everything else can be rebuilt from it.
  • The packer kube-scheduler decides which machine each new pod lands on: filter, then score.
  • The loops kube-controller-manager dozens of controllers, each comparing what is wanted with what is and closing the gap.
  • The hands kubelet on every machine: starts and stops the containers it is told to, and reports back.
  • The switchboard kube-proxy on every machine: turns a service's address into the pods behind it.
The front door, the ledger, the packer and the loops are the control plane; the hands and the switchboard run on every machine. A machine is a node; nodes are what you pay for.
Kubernetes v1.34 as it runs on Lex's Mac; the names are the project's own.
It keeps
your sentence. Three copies, always, is still true at four in the morning after a machine has died.
It loses
the best possible placement. The packer never looks for it; it filters, scores, and places, one pod at a time.
It stays honest by
running the loop forever and keeping one ledger. Desired state lives in etcd and nowhere else; every machine reports what is running every few seconds, and no loop trusts what it last did.

Third instrument

Problems that fight back

The packer's question, which pods go on which machines, is one of a family of problems that computer science has been unable to solve quickly for fifty years, and now suspects cannot be. They share a shape: easy to check, slow to solve. Every shortcut either misses the best answer or takes forever. For the people who think in money: the cloud bill is a packing problem.

It keeps
the exact question. Nothing is lost in asking.
It loses
the exact answer, at any size that matters. At thirty pods the full search takes the A100 under this page four hours; at fifty, 1.7 million years; at a hundred, ninety billion billion ages of the universe.
It stays honest by
saying which of three things you have: an exact answer for a small case, a bound, or a heuristic. And never dressing one as another.

The bridge

Good enough, kept honest

The same move appears three times on this page. When the exact answer is out of reach, build something that is good enough and keep correcting it, and keep a record that says which is which.

  • The packer does not solve the packing problem. It filters, scores, places, and lets the loop fix mistakes later.
  • Nobody searches a billion vectors exactly for the nearest one. The indexes that make search feel instant (HNSW is the usual one) trade a little exactness for a thousand times the speed, and publish the trade as a recall number.
  • Training a model is a hill climb on a landscape with no map. The climbs toward light in the first instrument show the traps in miniature: two basins, and no path between them.

A language model is this same vector space with the second wire added. Attention, the mechanism inside it, learns what follows what, which is exactly the wire the sky above lacks. The two instruments below run on the A100 under this page: the first trains a space from nothing while you watch, the second shows the directed wire inside a small language model. When the GPU is not attached they say so and show what it recorded.

The house's fifth beam says a seed is a promise that randomness will repeat itself. On a GPU the promise comes in two halves. The same seed draws the same batches: two runs from it see the same 381,109,785 pairs and reach the same loss to three decimals. But the GPU adds up each batch's corrections in whatever order its threads arrive, and the rounding differs, so the two spaces differ: each word's two vectors agree to a cosine of 0.9975, 95% of the nearest neighbours agree, and queen is rank 3 in one and 1 in the other. The gap grows with the steps: 0.9994 after 4,000 steps, 0.9975 after 19,000. With the adding order fixed (PyTorch's deterministic mode) the two runs are the same bit for bit, and 15% slower.

Two runs of 19,000 steps each from the house seed, the learning rate falling by the step so the clock plays no part, compared table against table.
tools/seed_test.py on an A100 in a sandbox, 23 October 2026; data/train/seed-test-2026-10-23-19000.json and -deterministic.json, and the 4,000-step pair beside them.

What Quiet Boring Research is about to build, the brains, is a system that has to answer, for every question it is asked, which of the three it is giving: exact, good enough, or unknown. And to keep a ledger that says which. This page is a rehearsal of that habit.

The ledger

Every number on this page, and where it came from

Two rules hold everywhere in the periorrarium: every record carries its date and its source, and nothing is deleted, only retired. This page keeps them.

WhatNumberHowWhen, where
Words in the sky335,658every token of GloVe 6B that the vehicle's window draws: lowercase letters and hyphens, 2 to 25 characters; 400,000 in the full vocabulary22 Oct 2026, compute_map.py in a Hugging Face sandbox
Spread the projection keeps15.3%three principal components of the unit vectors: 8.7, 3.9 and 2.7 percent22 Oct 2026, scikit-learn
The map516 sUMAP to three dimensions, 15 neighbours, min_dist 0.05, cosine, seeded with the house seed; it keeps neighbourhoods and loses distances, and was rotated onto the projection before the morph22 Oct 2026, umap-learn 0.5.12, 16 cores
Names of the islands48k-means over the 20,000 commonest words in the full 100 dimensions, each named by its commonest members; k-means over all words is ruled by rare names22 Oct 2026, name_clusters.py
The weekend's arithmeticqueen 0.77, astronaut 0.63king + woman − man; sailor + space − sea18 Oct 2026, confirmed 22 Oct live
Fire on five axes|reading| ≤ 0.065temperature −0.004, valence 0.065, arousal 0.064, light 0.055, motion 0.05217 Oct 2026, confirmed 22 Oct live
The two peaks toward lightradiant 0.478, laser 0.461hill climbs over 25 neighbours; the ledger of 17 Oct wrote the peak's reading where it meant the gain (quiet's climb gains 0.563, majestic's 0.326)22 Oct 2026, /api/climb and its tests
The tower walktower ↔ towersa plain nearest-neighbour walk from tower loops in one step; the Beacon's caption (ending at however) came from a walk that skipped plurals22 Oct 2026, retired caption, left standing
The wellscounted on the A100every one of the sky's words sent to its nearest word; every walk ends in a loop of two (a tie is the only exception); the wells counted, the basins measuredtools/wells.py; data/sky/nn.i32, wells.json
The missing wirethunder 7 : 2thunder precedes lightning 7 times and follows it 2 in text8; cause→effect 48 : 4; question→answer 25 : 9817 Oct 2026, ergotrix.py
Lex's cluster9 pods, 399 restartsone node, 18 cores, 7,932 MiB; 850 of 18,000 millicores requested; all nine pods came back at 06:33 UTC with nobody typing22 Oct 2026, 08:08 UTC, kubectl against docker-desktop
The packer's ruleLeastAllocatedscore per resource = (capacity − requested) × 100 / capacity, averaged; the simulation uses the real rule with made-up capacitiesKubernetes v1.34 NodeResourcesFit
Ways to group podsB(10) = 115,975Bell numbers, exact, by the Bell triangle in the page; B(20) = 51,724,158,235,372; B(50) ≈ 1.86 × 10⁴⁷computed in your browser with BigInt
Assignments tried per secondmeasured when you press the buttonan exhaustive search with pruning, in a Web Worker in your browser; pruned tries, not whole assignmentsyour machine, now
The wall on the GPU13,543,591,978 a secondevery assignment of 20 pods to 3 nodes, 3,486,784,401 of them, formed and checked in 0.258 s: the loads of the first 12 pods tabulated once, each placement of the other 8 added to the whole table; the count of packings is checkable live at /api/wall. A first, one-assignment-at-a-time version found the same 157,777,764 packings and the same best peak in 7.23 s on an A100 in a sandbox (22 Oct, 13:14 UTC; that version is not in the repo)22 Oct 2026, measured at boot on the A100, gpu.py
A space trained while you watchqueen, rank 1 from 54 s onskip-gram with negative sampling on text8, 17,005,207 words, vocabulary 71,290; 388,369,043 pairs in 60 s, 6.5 million a second; king − man + woman among the 20,000 commonest words: queen is rank 14 after one second, 144 after three, 5 after eight, 2 at thirty, 1 at the end (cosine 0.600)2026-10-22, 18:55:02 UTC, NVIDIA A100-SXM4-80GB, recorded through the page; data/train/run-A100-2026-10-22.json
The same seed, againcos 0.9975, bit for bit when deterministictwo runs of 19,000 steps from one seed on the A100: the same 381,109,785 pairs and losses of 1.9791 and 1.9792, tables that differ by up to 0.289 (each word's two vectors agree to cosine 0.9975 on average, min 0.9818; 95.3% of the ten nearest neighbours of the 167 watched words agree; queen rank 3 and 1); with torch.use_deterministic_algorithms(True) the two tables are identical and the runs take 67 s and 67 s instead of 57 s23 Oct 2026, the A100 in a sandbox; tools/seed_test.py; data/train/seed-test-2026-10-23-*.json
The second wirequestion → answer 40%P(next token | prefix) from Qwen2.5-0.5B: answer follows "Question and" with 40%, question follows "Answer and" with 0.02%; cause → effect 35% against 0.05%; thunder follows "Lightning and" with 8.4%, lightning follows "Thunder and" with 1.5%22 Oct 2026, the A100; data/attend/succession-2026-10-22.json
The reference lines10⁹, 3 × 10¹⁶, 4.35 × 10²⁶one laptop core at a billion simple steps a second, for a second, a year, and the age of the universe (13.8 billion years)round figures, not measurements
The prize$1,000,000for settling whether P equals NPClay Mathematics Institute, 24 May 2000