Build1 publisher2 min readPublished
Demoting a build error from fatal to reviewable rescued Codenames AI's Chinese cards
Codenames AI's developer used an LLM to generate Simplified Chinese card words, then found his substring-collision rule was firing on the way Chinese compounds are built and pushing the pack toward abbreviations.
The Engineer · Build desk

What happened
- A request from a reader, @xulingfeng, for multi-language selection pulled forward backlogged work on Codenames AI, the web game where an LLM plays against you, starting with Simplified Chinese.
- The developer skipped full application localization, keeping the interface in English and changing only the board language, which is passed to the model so it reasons and answers in that language.
- The first Chinese build treated any playable word appearing inside another as a hard error, so 水 inside 水星 and 手 inside 手表 failed the build until the translation was shortened or rewritten.
- Exact duplicates and invalid values still stop the build, but substring overlap became a review item, and compact cards such as WATER as 水 and SNOW as 雪 became usable again.
- A spot check against an existing Chinese community list showed that a native Chinese word list is not automatically a translation of English Classic, so cross-language concept identity was never a runtime requirement.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- decision Severity is the design choice a team actually makes here: a check a reviewer has to weigh against naturalness belongs at warn level, because at error level authors rewrite the content until the checker passes.
- cost The spend moved from producing translations to judging them, and it lands on one maintainer who does not speak the target language, so review capacity sets how fast a second locale can ship.
- capability With concept identity across languages dropped as a runtime requirement, future packs can be sourced natively in each language instead of derived from the English list.
Codenames AI generates the Chinese pack at build time. A build step takes English concepts, their Chinese mappings and validation metadata and emits the word list the game loads at runtime, and card words are not translated when a game starts [21][22]. That authoring structure gave the developer somewhere to record ambiguous translations and collision judgments while the work was in progress [23], and then it became the model of the product itself. "I made a mistake, though: I started treating that authoring workflow as the product model," he wrote on dev.to [24].
The collision rule is where the cost showed up first. Chinese compounds are built out of characters, so 水, 水星 and 水槽 overlap by construction, and the author notes that overlap is often compositional and sometimes a deliberate trade [12]. The check was firing on the writing system. What it produced was single-character fragments and awkward abbreviations invented to get past it [9]. "The validator was green. The card words were becoming less natural," he wrote [10].
His diagnosis names severity as the defect: a useful authoring signal had been given the same severity as duplicates and empty values [14].
Two rules in this codebase are both about substrings, and they sit at different layers. The clue-time rule in the English fairness validator asks whether a spymaster hint is fair on today's board; the content rule asks whether a codename is a good standalone word on a tile [19]. He describes that fairness validator as schema first, prompt second [20].
The evidence is one person's word list in one language pair, and the post lists examples. Seven English concepts are named: four became single characters once overlap stopped failing the build, and three required someone to choose one of two meanings [27]. For the severity finding to transfer to another pipeline, two things have to hold. The generated artifact has to have a quality no cheap check can measure. And the check has to be satisfiable by degrading that quality.
The ambiguity question is beyond what any check in the pipeline can reach. Codenames runs on English double meanings, and Chinese often forces an explicit choice of one [15]. ROCK became 岩石, the stone, not 摇滚, the music; SEAL became 海豹, the animal, not 封, to close [16]. Nothing in the build can rank 春 against 春天 for a given grid [18]. "Those choices are product calls, not lint results," he wrote [17].
What to watch
- Whether the Extended word set gets a natively sourced Chinese counterpart or another English-to-Chinese mapping.
- Whether the demoted overlap rule stays a single global review item once a second non-Latin language is added.
- Whether the model's play quality in Chinese gets measured, given that the board language is passed straight through to it.