LaunchAgent now uses launch-wrapper.sh which does git pull + cargo build
before exec-ing the binary, so every restart picks up the latest code.
Eliminates the drift where a rebuilt binary doesn't take effect until
the old process is manually killed.
New scripts:
- launch-wrapper.sh: auto-pull, rebuild, exec (used by LaunchAgent)
- upgrade.sh: manual pull, rebuild, restart LaunchAgent
Tests (12 total, all passing):
- Pool camera-only invariants: empty pool returns error (no CSPRNG
fallback), push/pull round-trip matches exactly, pool empty after
drain (no synthetic fill), extract_entropy and fill_entropy fail
without camera data, partial pull is all-or-nothing, stats track
only camera bytes.
- Conditioning tests: deterministic output, varies with frame index,
correct SHA-256 output size, 8:1 ratio, LSB masking to 0-3 range.
Refactored pool.rs into pool/mod.rs + pool/tests.rs to stay under
400-line file limit.
Co-authored-by: Cursor <cursoragent@cursor.com>