# Text Encoding and Excel Write-Back Rules These rules are mandatory for every script, temporary repair, and manual write-back that touches Excel text fields such as customer notes, outreach status, follow-up status, Chinese summaries, or HTML previews. ## Why this exists Windows PowerShell inline scripts can corrupt Chinese text when a command contains Chinese literals inside a here-string, heredoc-like block, or inline Python source. The corrupted text appears in Excel or HTML as repeated question marks. This has already happened in the workbook notes after email status write-back, so future runs must treat encoding as a hard safety rule. ## Hard rules - Do not write Chinese customer notes, status text, field names, or HTML labels by embedding Chinese literals directly inside PowerShell inline Python scripts. - For temporary Python scripts launched from PowerShell, use one of these safe methods: - read Chinese text from an existing UTF-8 file; - build Chinese strings with Unicode escape sequences such as `\u90ae\u4ef6\u53d1\u9001\u8bb0\u5f55`; - call a shared skill script that already stores its source as UTF-8; - pass structured JSON generated by a UTF-8 script, not handwritten Chinese snippets from the shell command. - Use `encoding="utf-8"` or `encoding="utf-8-sig"` explicitly when reading or writing JSON, Markdown, HTML, CSV, or text artifacts. - Before saving Excel after any text write-back, scan the target values for repeated question marks. If found, abort the save or immediately repair before reporting success. - After saving Excel, reopen the workbook and scan all written cells for repeated question marks. Verification must include `备注`, `建联状态`, `下次跟进`, `客户属性`, `客户类型`, and generated HTML preview labels when applicable. - Do not trust a successful SMTP send, workbook save, or preview generation as proof that text is clean. Encoding verification is a separate step. - When a workbook is locked, write a pending JSON file using UTF-8 and do not handwrite Chinese additions later from PowerShell. The later write-back must consume the pending JSON or a UTF-8 script. ## Required verification snippets Every write-back report should include these counts: - `question_mark_cells`: number of workbook cells containing repeated question marks after save. - `question_mark_note_rows`: number of note rows containing repeated question marks after save. - `html_question_mark_groups`: number of repeated-question-mark groups in generated HTML previews. If any count is greater than zero, the task is not complete. ## Recommended note construction For email write-back notes, prefer structured data first: ```json { "event": "email_sent", "sent_at": "2026-07-29 12:40:58", "template_kind": "auto_channel_partner", "emails": ["example@company.com"], "send_log": "runs/YYYYMMDD//send-log.jsonl" } ``` Then render the Chinese note inside a UTF-8 Python module or via Unicode escapes. Do not render it inside a PowerShell command containing raw Chinese. ## Standard clean Chinese phrases Use these meanings consistently when rendering from safe code: - email send record: `邮件发送记录:... 已按...模板发送至 ...;发送日志:...。` - email status repair: `邮件状态修复:发送日志确认已于 ... 向 ... 发送邮件;原状态为 ...。` - wait for reply: `等待回复` - sent email status: `已发送邮件` ## Failure handling If repeated question marks appear: 1. Stop further write-back or sending-related status updates. 2. Backup the workbook before repair. 3. Reconstruct the affected notes from source JSON/send logs, not from the corrupted text. 4. Save and rescan the entire workbook. 5. Only report completion when `question_mark_cells = 0`.