v4.6.0 - fix v4.5.0 boot deadlock (non-ASCII .ps1), add make lint/format v4.5.0's scripts/acquire_lock.ps1 carried em-dashes in string literals with no UTF-8 BOM. Windows PowerShell 5.1 reads .ps1 as ANSI, mangled them, and the script stopped parsing. Because it signalled "lock held" with exit 1 -- the same code PowerShell uses for a parse error -- start.bat concluded the lock was taken and bailed on every boot, deadlocking the stack exactly as before the lock rewrite. acquire_lock.ps1 is now pure ASCII, and its exit codes are unambiguous: 0 acquired, 10 held, anything else means the helper failed, in which case start.bat and install.bat fall back to a plain mkdir lock rather than refusing to boot. New make lint runs in a throwaway Docker image and gates .ps1 on pure ASCII, a parse check and PSScriptAnalyzer, plus shellcheck and shfmt on the shell scripts. It self-tests its own non-ASCII detector so it cannot silently rot into passing everything. make format applies shfmt through the same file selection. make lint and make test both pass.