84 everyday English phrases, generated then rewritten by a picky native
Added 84 everyday and workplace English phrase cards to /phrases across 12 real-life situations. After this session's audits caught errors in raw-generated content, every card went through a second independent native-correctness pass that rewrites or rejects textbook phrasing before it ships.
The /phrases drill leaned technical and was thin on the everyday English the owner actually needs all day — clarifying, disagreeing on a call, asking for help, small talk, daily life in Toronto. He asked for that gap to be filled. The constraint, learned the hard way earlier the same day: raw-generated drill content had real factual errors, so generation alone isn't trustworthy.
So the build was generate-then-verify. Twelve situation buckets — standup/async, meetings, code review, asking for help, scope and estimates, admitting uncertainty, small talk, 1:1s, incidents, Toronto daily life, natural reactions and fillers, and connectors for keeping a sentence going. Each bucket generated seven cards, then a second independent agent acting as a picky native speaker rewrote any line that sounded textbook, stiff, or like a literal translation, and kept the natural ones. Each card carries the spoken line, a simpler version, two or three variants, a Korean meaning, an "avoid this" trap, and a drill prompt.
The 84 results were validated programmatically — every required field present, ids unique, no collision with existing cards — then inserted into lib/phrases.ts with a script that turns the JSON into TS literals (using JSON string encoding so quotes, apostrophes, and emoji escape correctly). tsc stayed clean. The thin categories filled out: clarify 2→9, collaboration 2→16, pushback 2→9, uncertainty 2→9, work-actions 6→13.
The reusable lesson: for memorize-and-say English the value isn't the first draft, it's the rewrite-or-reject pass — and bulk structured content goes in by script with field/id validation, never by hand.