140 active-vocab cards — the gap was connectors and retrieval, not word count
Owner asked how many words he needs to speak actively and for a vocabulary list. The honest answer: functional fluency is ~2,000–3,000 active word families he mostly already knows passively — the real gap is active retrieval under pressure and the connective tissue that keeps speech flowing. Added 140 native-verified high-leverage cards (connectors, hedges, flexible/ownership verbs, engineering collocations) instead of a rare-word list.
The owner said his vocabulary was too weak and asked how many words he needs to be able to speak actively. The honest framing matters more than a list: native active vocabulary is ~15–20k word families, but functional spoken fluency at work is ~2,000–3,000 — and he already knows most of those passively. His actual problems are active retrieval under pressure (the word is in there, it won't come out while speaking) and the connective tissue that lets you keep talking without freezing. So a rare-word list would have been wasted effort.
What helps continuous speech is the glue: connectors (so, which means, the thing is, that said, on top of that, the way I see it), hedges that buy a second instead of freezing (off the top of my head, I'd say, let me think), the high-frequency flexible and phrasal verbs engineers live on (ship, roll back, spin up, boils down to), the ownership power verbs that make you sound like you drove the work (own, unblock, de-risk, push back, surface), and the engineering collocations he may not pair naturally even when he knows the nouns (root cause, edge case, blast radius, source of truth).
So the build was 140 cards across those seven buckets, generated then rewritten by an independent picky-native pass to strip any textbook usage, and taught as word-in-context: the word itself, a Korean meaning, a natural example sentence he can say, one or two reuse variants, and a common non-native misuse to avoid. Two new categories (connector, verb) make the glue findable on its own. Validated for fields, unique ids, and no collision with existing cards before insertion; tsc clean.
The drill that actually closes the continuous-speech gap isn't reading these — it's forcing every sentence in /talk to start with a connector, so when the next thought isn't ready, "the thing is..." bridges to it instead of a silence. The cards are the parts; the reps are the muscle.
One tooling note worth keeping: the bulk-insert script ran more than once during integration, and because it validates id-collision-against-the-existing-file first and aborts on collision, the re-run was a safe no-op instead of a double insert.