- fingerprint.py: audit_device() crashed with "cannot unpack non-iterable
bool" because of a stray `webrtc_ok, _ = ... and True or False` line.
Replaced with a proper Chrome+Edge registry probe using _WEBRTC_*
module constants.
- ProxyChainManager.spec: removed the hardcoded absolute run.py path,
resolve everything relative to SPECPATH so the spec is portable on any
machine / CI runner. Bundled signup_extension/ and world_map.png as
data files (these were missing — the runtime would fall back to drawn
landmasses and the signup browser extension would 404 in the frozen
build). Added PIL._tkinter_finder hidden import for safety.
- scripts/setup_and_build.ps1: build now uses the spec file instead of
re-deriving CLI flags. The old `--onefile --windowed --collect-all
customtkinter` invocation IGNORED the spec and silently dropped the
bundled data files. Also added explicit $LASTEXITCODE check.
Verified end-to-end: clean PyInstaller build produces a 32MB exe with
signup_extension (8 TOC entries), world_map.png (4), customtkinter
(365) all present.
Co-authored-by: Cursor <cursoragent@cursor.com>