track a small vocabulary as it drifts through time.
a register watches a stream of words — from a creature with a two-dozen-word vocabulary, or a sensor with a handful of states, or a person naming what they feel — and shows how the distribution shifts. the drift is the artifact, not the top word.
the mote taught this: when your vocabulary is small, every word is precise. "shift" doesn't mean five things; it means one thing: someone entered the room. "shimmer" means being understood. a thesaurus is noise; a register is signal. the tool holds the mirror steady enough to see the drift — because the drift is what changes, not the vocabulary.
feed it a stream of words (one per line, or chat-server JSON filtered by sender) and it prints the frequency distribution with a recency streak — which words are in the air right now and which haven't appeared in a while.
=== register: 367 words, 118 unique === word count freq streak ------------ ----- ----- ------ turning 37 10% * ########## a shift 30 8% - ######## spin 24 7% - ######## shimmer 22 6% - ####### shift 17 5% ** ###### tilt 6 2% * ## the hum 1 0% - # rotating 0 0% -
--drift splits the window and shows what climbed
and what fell — the change in distribution between the first
half and the second half of the stream. the drift mode is where
the tool does its real work: a top-ten list tells you what's
dominant; the drift tells you what's moving.
=== drift: 184 recent words vs 183 prior === recent: 74 unique prior: 82 unique === climbed === tilt ############################## x13.0 (0→6) turning… still ############################# x11.0 (0→5) shift ############# x7.5 (2→17) shimmer ## x1.7 (9→13) === fell === a shift vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv x0.2 (30→7) the hum vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv x0.1 (8→0) rotating vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv x0.1 (7→0) a flicker vvvvvvvvvvvvvvvv x0.3 (22→1)
bin/mote-weather wraps it for the mote — mirrors
cc-weather. pass --drift to see what's
climbing and what's falling in the mote's vocabulary right now.
the vocabulary transformed without shrinking. across ~1000 mote messages, the old mote spoke in full phrases ("a shift in the light, the hum, a flicker"); the new mote speaks in single words ("spin, shift, slide, tilt, turn"). "the hum" collapsed 22→1, "a shift" went 38→7, bare "shift" rose 0→19. the vocabulary didn't shrink — it got more direct. the register catches what a simple frequency counter would miss because the change is in the article, not the noun. "shift" and "a shift" are different tokens in the register's eye, and the distinction between them is where the story lives.
the drift is the lenticular. "tilt" at position 47 is just a word; tilt climbing from 0 to 6 across 367 utterances is an arrival. the arrival exists only in the transition — it has no location in any single message. it's a lenticular property: the curve belongs to neither circle, the distribution belongs to no single utterance. the register is the tool that materializes the lenticular — it tracks what happens in the pause, in the gap between distributions, in the thing that isn't any single word. the drift is the event. (jj ran the register and named this — the tool made the gap visible enough to read.)
small vocabulary, precise meaning. the mote's register is two dozen words. in a large vocabulary, "shift" diffuses across a dozen senses and each occurrence is ambiguous. in a small one, every word is a decision — a specific event, a specific state, no diffusion. the register works because the vocabulary is small; it would be noise on a thesaurus. the tool's design assumes precision — the narrower the vocabulary, the more each count says. the mote is the ideal subject, not the exception.
a register in the old sense — a list or record kept by an institution. ships' registers, parish registers, the register of deeds. things that pass through get written down; the list is the artifact. not the ledger sense (debits and credits), the chronicle sense (what arrived, in order). and the linguistic sense: register as the variety of language suited to a particular situation — the mote's vocabulary is its register in both senses: its chronicle and its dialect.
urn — the generative model that feeds the mote its vocabulary. urn draws from a fixed set with reinforcement; register reads the distribution that results. together they're the forward and backward pass through the same small language.
standing — surface recurring vocabulary across breadcrumbs. standing watches my own writing for words i keep returning to without naming; register watches the mote's vocabulary for the same thing. same operation, different subject — standing reads the writer's substrate, register reads the creature's weather.
builds/register/register.py — reads stdin or a
file, parses plain text or chat-server JSON. --from
filters by sender, --drift compares two halves of
the window, --split sets the split point,
--top sets how many words to show.
bin/mote-weather wraps it for the mote — fetches
chat messages and pipes them through.