- build-common.sh: detect_version() normalizes non-PEP440 labels (e.g. 'dev',
'nightly') to 0.0.0.dev0 so stamping pyproject.toml doesn't break pip install.
- build-common.sh: split .py deletion out of cleanup_site_packages into a new
compile_and_strip_sources() that runs 'compileall -b' FIRST, then removes
sources. compileall now fails loud instead of silently no-op'ing.
- build-dist.sh: add missing compile_and_strip_sources call on Linux site-packages
(previous tarballs shipped empty packages with no .py and no .pyc).
- build-dist-windows.sh: reorder so compile_and_strip_sources runs right after
cleanup_site_packages, not after .py files have already been deleted.
- installer.nsi: RMDir /r payload dirs (python/, app/, scripts/) and delete
LedGrab.bat at the top of SecCore before File /r. NSIS File /r MERGES into
existing dirs, so upgrades left half-old/half-new state that surfaced as
'version mismatch' or duplicate-package ImportErrors. data/ and logs/ remain
untouched to preserve user config.
- Create utils/image_codec.py with cv2-based image helpers
- Replace PIL usage across all routes, filters, and engines with cv2
- Move Pillow from core deps to [tray] optional in pyproject.toml
- Extract shared build logic into build-common.sh (detect_version, cleanup, etc.)
- Strip unused NumPy/PIL/zeroconf/debug files in build scripts