fd452e26e3
NFC/NFD, narrow no-break space (U+202F), and curly quotes render identically in a terminal — a model retyping a visually-correct path gets 'file not found' and can never discover the byte mismatch on its own. On not-found, canonicalize the requested name and compare against directory entries; exactly ONE equivalent spelling reads transparently with an explanatory note. Zero or several matches (homoglyph twins) fall through — never guess between collisions. Also: difflib.SequenceMatcher >=0.8 fallback in _suggest_similar_files catches near-miss typos (AGENT.md -> AGENTS.md) that substring scoring misses entirely. Measured (file-only arm, 3 reps, control=guard-only vs feature): unicode task qwen3.8-max 31k->16k tok (-48%), turns 6.7->3.7; opus-4.8 57k->33k tok (-42%), turns 8.3->5.0; accuracy held 1.00. near-miss: opus mildly better, qwen flat, no regressions.