In Codenames, one player sees a board of 25 words, secretly knows which belong to their team, and has to get a partner to pick exactly those, with a single clue word and a number. Say “ocean 3” and your partner picks the three words they think you meant.

Your team can hold up to nine of the board’s words, so the dream first move is one clue that points at all nine and wins on the spot. I wanted to know whether that clue exists.

It mostly doesn’t, and the reason is specific.

Under a fixed vocabulary of 7,009 common English words and a standard embedding-similarity reader, a single legal word pins down all nine of your cards on only 0.286% of boards. Fewer than three in a thousand, by exact count over 202 million assignments. The realistic ceiling is about six. And what blocks it is the vocabulary: the geometry permits the separation, but no common word realizes it.

Pick four words from one concept and a real clue appears; select all nine and it hits the wall, with the intruding word flagged red.

There’s a stranger second result, on thinner evidence: the clues that do satisfy the reader mostly fail on an actual reader. More on that below.

How I measured it

The reader is the obvious one. Embed the clue and every board word as a vector, rank the board words by cosine similarity to the clue, take the top k. A clue “recovers” a k-word target set when the top k are exactly those words. Vectors are 300-dimensional GloVe; the legal clue list is 7,009 WordNet lemmas over a Brown-corpus frequency floor, so every clue is a word someone would actually say.

Nine is hard before you measure anything. Naming an arbitrary 9 of 25 cards takes about 21 bits; one word out of 7,009 carries about 12.8. So no single word can be a universal nine-card clue: by counting alone, one symbol can’t separate two million target sets. That kills the universal version and says nothing about a specific board. The real question is per-board. For these nine cards, does some legal clue work? That you enumerate, and I did.

The ceiling is about six

Run every legal clue through the decoder on each board and collect the sets it recovers, and you get an exact count, every clue enumerated. At nine targets, coverage is 0.286%. For a random nine-card key, the largest subset you can exactly recover lands like this:

best exact count share of boards
≥ 6 64%
≥ 7 22%
≥ 8 3.8%
= 9 0.3%

Expected best is 5.87. Five or six is routine, seven happens, eight is rare, nine almost never.

Take the board in the explorer above, with targets {barn, builder, call, colonel, educator, pit, product, specialist, wood}. The decoder’s best legal clue still ranks a non-target above one of the nine. No legal word separates that set; there’s no clue to find.

The wall is in the words

The natural guess is that 25 points are too crowded to separate. The opposite holds. In 300 dimensions, 25 vectors in general position split any way you like: for essentially every nine-card subset, some direction ranks those nine above the other sixteen. I checked general position on 100 boards per pack; it held every time.

So the separating direction almost always exists. The legal words just don’t point that way. The gap between “a direction that works” and “a word whose vector realizes it” is the whole result. Tighten the vocabulary toward more natural words and coverage drops monotonically, which is what a coverage problem looks like. You can’t transform your way out while the clue has to be a real word.

The part I’m less sure about

Thinner evidence here, so I’ll fence it. I took the clues the decoder certifies as perfect and gave them to language-model readers standing in for a human partner, alongside ordinary control clues like “animal 3” and “vehicle 4.” Controls recovered 23 of 24. Decoder-certified clues recovered 0 of 44. Twenty more at the decoder’s negative margin also went zero. Stronger reader models reproduced the zeros, and one blinded human pass reproduced the pattern stratum by stratum.

A clue that maximizes a cosine margin is exploiting how one ranking algorithm orders words. A reader who works by meaning doesn’t recover it. The explorer’s second tab replays this: a decoder-certified clue, the set it “perfectly” recovers, then what a real reader picked. vain is certified to recover nine specific words; the reader gets none.

What does carry is a clean separating concept. When the nine cards share a sharp category with no same-category distractor on the board, recovery jumps from zero to about a third, even at high counts. Add one same-category distractor and exact recovery collapses while partial recognition fades slowly. What decides readability is whether a clean concept exists; the count barely matters once one does.

That section is preliminary: a small audit, readers mostly language models, the one human pass a single hypothesis-aware labeler. A real human panel is the test it needs and hasn’t had. I’m reporting observed counts; don’t read them as population rates.

Why this matters past the game

Cosine similarity between embeddings is a standard proxy for “this word communicates this concept.” The measurement says the proxy is unsafe exactly where it’s most tempting: many targets, thin margins. A system that picks clues, captions, or category labels by maximizing an embedding score is optimizing a target the human on the other end doesn’t share, and the failure is largest where the score still looks confident.

The clean version needs no caveats: a single word from a shared, finite vocabulary can’t reliably indicate an arbitrary nine-of-twenty-five set; the limit is projecting an ideal meaning onto a real word; and the count matters less than whether a clean concept names them. The dissociation on top is the part I’d most like a human panel to confirm or break.

Full paper · Code and data