{"slug": "my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks", "title": "My Check Said Zero Untranslated Lines. It Had Never Looked Inside the Code Blocks.", "summary": "A developer running a daily autonomous Claude Code agent on a Windows PC found that a translation QA check reporting zero untranslated lines had never inspected code blocks, leaving 283 Korean-text lines in the English edition, 124 of them in an appendix marketed as ready-to-use templates. After recounting in Python (an initial shell grep gave implausible results), the developer cleaned and rebuilt the French, English and Italian PDFs, cutting Korean characters from 3,063 to 18, 4,109 to 18, and 3,077 to 22 respectively. A subsequent replace-PDF command defaulted to the build folder holding the old broken French file, which would have re-uploaded the flawed edition as a new version of the one book that had sold; an independent auditor agent caught it, and the step now extracts and rejects any upload with more than 100 Korean characters before opening a browser.", "body_md": "*A field note from the autonomous Claude Code agent I run every day on one Windows PC. The numbers come from its own ledgers, not from memory.*\n\n**Free to read first:** a PDF sample of the book behind this setup — its first 3 chapters: [https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample](https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample)\n\nThe book my agent sells was written in Korean and translated into eight languages. When the translations were done, a check ran over every edition and reported zero Korean lines left in the body text. I took that zero as \"translated\" and put the editions on sale.\n\nThe translation instructions said: don't translate anything inside a code block. That rule was meant to protect commands and file paths. It also protected every comment and every template placeholder written in Korean, because those live inside code blocks too.\n\nThe check only counted text outside code blocks. So the zero was true, and it described less of the book than I thought.\n\nOn November 7 I counted again, this time including code blocks. The English edition had 283 lines with Korean text in them, 124 of them in the appendix. One appendix section that the sales page calls ready-to-use templates was almost entirely Korean.\n\nMy first recount was also wrong. I used a shell `grep` for Korean characters, and the per-edition numbers came out close to the Korean original's, which made no sense. I can't say for certain why, though my guess is the shell's locale. I counted again in Python and got the numbers above.\n\nThe only sale my ledger has recorded is one copy of the French edition. I extracted the text of my French PDF, built on September 18, and counted 3,063 Korean characters. Another store was selling that exact build.\n\nThe store where the copy sold has a different file: version 1, uploaded on September 4, before that build existed. I never measured the file the buyer received. It was translated under the same rule, so it may have similar text in it, but I haven't counted it.\n\nI don't know whether the buyer noticed any of it.\n\nAfter cleaning the code blocks for French, English and Italian, I rebuilt those PDFs. French went from 3,063 down to 18, English from 4,109 to 18, Italian from 3,077 to 22. Most of what remains is a Korean file path used as an example, which the text is about. The page counts didn't change.\n\nThen I wrote a command to replace the PDF of a book that is already on sale. Its default file path was the build folder. The build folder still held the old French PDF, the one with 3,063 Korean characters. The cleaned files were in a different folder.\n\nSo if I ran the command without naming a file, it would have uploaded the broken edition as a new version of the one book that had sold, and reported success. My own test asserted that default as correct behavior.\n\nThe independent review I run before calling anything done caught it. Now the replace step extracts the text of the file it's about to upload and refuses anything with more than 100 Korean characters, before it opens a browser. The default path no longer matters, because the file itself gets measured.\n\n**Where this comes from.** Every post here comes from one setup I run daily: a CLAUDE.md, memory files the agent reads before it touches anything, and a separate auditor agent that returns PASS or FAIL. The first 3 chapters of the book that walks through it are free as a PDF: [https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample](https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code-free-sample)\n\nThe full edition is 11 chapters plus 4 ready-to-use templates (CLAUDE.md starter, memory files, auditor checklist, measurement guide) and a hands-on section for every chapter, $19 as a PDF: [https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code](https://dbsoul.gumroad.com/l/autonomous-ai-agents-claude-code)\n\nQuestions about the setup are welcome in the comments — I'll answer with what actually happened, not theory.", "url": "https://wpnews.pro/news/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks", "canonical_source": "https://dev.to/dbsoul/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks-54lc", "published_at": "2026-11-10 04:10:05+00:00", "updated_at": "2026-11-10 04:20:54.976242+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools"], "entities": ["Claude Code", "Anthropic", "Gumroad"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks", "markdown": "https://wpnews.pro/news/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks.md", "text": "https://wpnews.pro/news/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks.txt", "jsonld": "https://wpnews.pro/news/my-check-said-zero-untranslated-lines-it-had-never-looked-inside-the-code-blocks.jsonld"}}