Projection Mapper Native 0.87.0 - smart setup: reuse what's installed, skip what's done, never duplicate NEW IN 0.87.0 Wade's directive: setup should be intelligent about what is already on the machine - never uninstall and reinstall something that is already installed, configure itself for whichever models it finds, and never download duplicate files or programs. 1. Package-level skip (Detection AI setup): the setup now probes the Python sandbox ONCE for the installed version of every pinned package (and PyTorch's CUDA build tag), then runs ONLY the steps whose pins are not already satisfied. A fully set-up sandbox now logs "every package already matches the pins - nothing downloaded, nothing reinstalled" and skips straight to models - no more 2.75 GB PyTorch step re-running on every press. A CPU-only PyTorch still fails the pin and gets the CUDA build restored. A probe failure runs every step (pip itself then no-ops on satisfied pins) - skipping never happens on a guess. The pip self-upgrade step can no longer block a satisfied setup. 2. Model auto-config for person detection (0.86.0 feature): the scare-gate sidecar now looks for YOLO weights already on the PC - ProjectionMapper's AI folder first, then Frontyard Mapper's - in preference order (yolo11n, yolo26n, yolov8n) and passes the found file to the detector. Only when no usable weights exist anywhere does yolo11n.pt download (once, ~6 MB, by the ultralytics library itself). The venv picker also now probes which sandbox can actually import ultralytics and uses that one; if a venv exists but lacks ultralytics, the log says exactly which button fills the gap instead of failing silently. 3. Model auto-config for Detect: if your picked detector model is not downloaded but another one IS fully set up on this PC, Detect uses the installed one and logs exactly what it did and how to make it permanent in the dropdown - no download, no weaker fallback path. 4. The setup dialog text now states the skip/reuse rules plainly. Already true before this build (unchanged): model downloads land in the shared Hugging Face cache that other AI programs reuse; content packs verify a local zip by SHA-256 before downloading and skip files already in the pictures folder; nothing is ever uninstalled or deleted silently. STILL TRUE - Windows 10/11 64-bit. No install: run the exe, it lives in %APPDATA%\ProjectionMapperNative. - Auto-update and the automatic log file work as before. - Safe mode reduces procedural effect speed/intensity within tested bounds - it is not a guarantee. - Control socket and the person-detector sidecar: localhost-only. TESTED (build machine) - Full Go test suite passes, including new smart-setup tests: version comparison (incl. +cu128 local tags), pin satisfaction (exact pins, ranges, presence-only, CUDA-build requirement - a CPU torch build must fail), probe JSON parsing, YOLO weights preference ordering (own folder first, then Frontyard's, none found = download path). - Windows cross-build (GOOS=windows) green; go vet clean. UNTESTED (needs Wade's rig) - The venv probe end to end on the real sandbox (package metadata names are the standard ones; a wrong name fails SAFE - the step runs and pip no-ops). - The ultralytics import probe timing (first import loads torch - slow once, cached afterwards). - YOLO weights discovery against Frontyard's actual folder layout (checks its ai/ root for the three known file names; unknown layouts fall back to the one-time download). JUDGMENT CALLS - Pip probes fail CLOSED toward running the step (pip no-ops on satisfied pins) - a skipped step never rests on a guess. - The torch repair safety net (force-reinstall of the CUDA build when a dependency clobbered it) stays: it is conditional repair, not a routine reinstall, and the pin gate now makes it nearly unreachable anyway. - Model fallback in Detect prefers the detector list order (Florence-2 base first - the one proven on this PC) and always logs the substitution. - Person-gate weights search covers the three nano models in the two known AI folders only - no whole-disk scanning. Gemini calls this build: 0.