Summary
Two Windows-specific defects in the session-flow running-retro detached observer (v0.17.3), observed on Windows 11 / Python 3.14:
1. Analysis subprocess flashes a visible console window
arm_observer.py's spawn_detached correctly sets DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW for the observer process itself — but the observer's own analysis spawn (the headless claude -p run at end-of-session) does not: a console window titled "Claude" popped up on the operator's desktop at analysis time and vanished on completion. For a feature whose selling point is "zero-footprint background observation," a surprise terminal window mid-desktop is a real UX defect — the operator's first question was whether something malicious had run.
Fix: apply the same creationflags (at minimum CREATE_NO_WINDOW) to the analysis subprocess.
2. Ledger written with mojibake (UTF-8 mis-decoded as cp1252)
The autonomous checkpoint ledger contains · for ·, – for –, â€" etc. throughout — classic UTF-8-bytes-read-as-cp1252. On Windows, Python subprocess/file IO defaults to the ANSI code page unless encoding="utf-8" is explicit; somewhere in the observer's analysis-output capture or ledger write, that default is in play. (Separately observed in the same session: a subprocess.run(text=True) without explicit encoding crashed with UnicodeDecodeError: 'charmap' codec on UTF-8 API output — the same class of defect; worth an audit of every subprocess/open call in the plugin's scripts for explicit UTF-8.)
Fix: explicit encoding="utf-8" (or errors="replace") on every text-mode subprocess capture and file write; consider PYTHONUTF8=1 for spawned children.
Filed by an AI agent during an attended session (operator-directed). Related: #1468 (arm launcher NameError, same component), and the idle-detection issue filed alongside this one.
Summary
Two Windows-specific defects in the
session-flowrunning-retro detached observer (v0.17.3), observed on Windows 11 / Python 3.14:1. Analysis subprocess flashes a visible console window
arm_observer.py'sspawn_detachedcorrectly setsDETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOWfor the observer process itself — but the observer's own analysis spawn (the headlessclaude -prun at end-of-session) does not: a console window titled "Claude" popped up on the operator's desktop at analysis time and vanished on completion. For a feature whose selling point is "zero-footprint background observation," a surprise terminal window mid-desktop is a real UX defect — the operator's first question was whether something malicious had run.Fix: apply the same
creationflags(at minimumCREATE_NO_WINDOW) to the analysis subprocess.2. Ledger written with mojibake (UTF-8 mis-decoded as cp1252)
The autonomous checkpoint ledger contains
·for·,–for–,â€"etc. throughout — classic UTF-8-bytes-read-as-cp1252. On Windows, Python subprocess/file IO defaults to the ANSI code page unlessencoding="utf-8"is explicit; somewhere in the observer's analysis-output capture or ledger write, that default is in play. (Separately observed in the same session: asubprocess.run(text=True)without explicit encoding crashed withUnicodeDecodeError: 'charmap' codecon UTF-8 API output — the same class of defect; worth an audit of everysubprocess/opencall in the plugin's scripts for explicit UTF-8.)Fix: explicit
encoding="utf-8"(orerrors="replace") on every text-mode subprocess capture and file write; considerPYTHONUTF8=1for spawned children.Filed by an AI agent during an attended session (operator-directed). Related: #1468 (arm launcher NameError, same component), and the idle-detection issue filed alongside this one.