What problem does it solve? Codebases that mix French and English identifiers become hard to search, publish, and maintain, and naive regex-based renaming silently breaks code — private members become public, object shorthands rebind to the wrong declaration, and string-keyed data contracts break without any compiler error. This Skill provides a language gate that finds remaining French identifiers and a rename protocol that proves no symbol drifted and no displayed string changed. ## Core Features & Use Cases - Language gate: Scans production TypeScript, JavaScript, shell, and template files for French identifiers using a hand-built discriminating dictionary, with declared exceptions, a false-positive benchmark against third-party English code, and 72 tests. - AST-safe mass renaming: Renames symbols through the TypeScript LanguageService from a JSON plan (never regex), with collision guards, private-member (#name) handling, and dry-run counting. - Drift and literal proof: Post-rename controls compare results against the plan binding-by-binding and verify no user-facing string changed, closing the gaps a green typecheck cannot see (dynamic imports, any access, code inside strings, hand-typed test casts). - Use Case: Before publishing a package, run the gate to list remaining French identifiers, write a per-batch rename plan, apply it, then prove completeness with drift checks, literal checks, root-level typecheck, and a repo-wide search for the old names. ## Quick Start Ask the AI to run the identifier language gate on the repository and list which French identifiers remain to be translated, then plan a safe rename for one batch.