ProjectionMapper Native 0.97.0 - trust overhaul + workflow reorganization Built by Instinct Windows 10/11, 64-bit. Free for personal use. WHAT'S NEW IN 0.97.0 This release is a ground-up trust rework of everything that measures, checks, and replaces your mapping, plus the 0.96.8 feature batch it absorbs. The rule everywhere: your current mapping wins every tie, failure, or doubt - a new one replaces it only on fresh measured evidence. The app is reorganized around the real workflow - The sidebar now follows the actual order of work: 1 Set up, 2 Map the room, 3 Line it up, 4 Measure (scan), 5 Refine, 6 Build the show, 7 Showtime. Every page is still there - the navigation is grouped by the job, not by the mechanism. The Guided setup home is now an honest state board: a step only goes green on real evidence (a calibration VERIFIED on fresh probes), and says review-needed, unverified, optional or blocked out loud. The Go buttons only take you to the page - they never start a capture or the show. Fifth review round, part 2 - combined-warp honesty - Showtime and the stepper go green only when the global mapping AND every active per-surface mapping carry current passing evidence - one stale or legacy surface fit keeps the honest "unverified" state. - A surface's evidence is now also bound to the room's light-blocking geometry: a new or moved occluder invalidates it (its probes were planned around the old exclusions), while another surface's own fit never does. - The late camera-resolution deactivation now holds the app's transition lock without a gap, from the idle check through the save. Fifth review round - evidence that survives the publish - Verification records now carry the fingerprint of the configuration AS PUBLISHED, so a mapping that earned its place reads verified afterwards - and a failed publish can never leave the old mapping looking verified. Global and per-surface evidence are independent: re-doing one surface never un-verifies the others. - Scan wording is exact: "passes measured-marker checks for this camera mode; physical rig position must be unchanged" - a camera name is not a rig guarantee. Implausible recorded numbers are discarded. - The late camera-resolution check now uses the app's real transition lock, remembers the exact project and mapping it started from, waits for a running camera job to finish, and only then deactivates the proven mismatch - it can no longer touch the wrong project or a changed mapping. Fourth review round - measured is not verified - A scan's saved verify result is now treated as a MEASUREMENT with conservative acceptance: all 12 markers, average error within 3 projector px, worst within 10, measured on the CURRENT camera and projector - one marker at any error, partial coverage, high error, an unknown camera, or a carried scan all read "accuracy not established" instead of green. - "Line it up" no longer greens on a "kept" check - keeping the current mapping is not proof it passed. Only a promoted verdict bound to the exact active mapping and the CURRENT rig (the camera must actually be running) counts. - Every verification fingerprint now covers the FULL mapping: global pairs, local weighting, per-surface pairs, outlines and scan identity - any change breaks the bind. The publish rechecks it again under the final write lock and rolls the file back if the room moved mid-write. - Per-surface check records are bound to the exact pairs they scored - an old "promoted" record never verifies different pairs. - The late camera-resolution recheck is now scoped to the project that launched it and never touches a mapping while a camera job runs. Third review round - verification now means THIS mapping, THIS rig - The stepper's green states are bound to evidence, not files: "Line it up" is green only when the fresh-probe verdict names the EXACT active mapping and the current rig/outlines; reloads, carries, resets, mode changes or outline edits break the bind and the step honestly says "saved alignment; verification not established". Refine is green only for per-surface fits verified against their current outline and rig. Showtime says "Window open; alignment unverified" instead of claiming ready from file existence. - Verify the scan now SAVES its result onto the scan, so "scan verified" survives restarts and a re-scan clears it. - A global calibration check now scores BOTH sides as the full mapping the show would draw (your per-surface fits included on both sides) - the measured candidate is exactly what gets published. The check also freezes the room + rig at probe start and discards the result if anything changed before publish. - Per-surface mappings survive a global update across restarts (no more timestamp trick); they reload as VERIFIED only with a bound check record, otherwise honestly UNVERIFIED, and proven rig mismatches are refused. Corrupt mapping/stats files now stop the publish instead of being erased. Second review round - more trust fixes - A saved calibration is now checked BEFORE it activates: every refusal (camera, camera resolution, projector resolution) runs before anything is applied, and if your camera's resolution only becomes known after the map loads, the app re-checks then and deactivates a proven mismatch. - A new whole-map calibration is compared against what the show ACTUALLY uses - including your per-surface fits - and when it wins, those fits are kept (they re-verify on their own checks) instead of being cleared on a global-only score. - Before overwriting, your previous calibration is backed up to a real file next to the project; rollback restores missing files as missing instead of leaving empty corrupt ones, and says exactly what it could not restore. - Probes are filtered by their full footprint, not just their center - a dot next to a mirror or blocked area is never shot. Footprint sizes come from the local geometry at each probe, safe under skew. - An outline or light-blocked area the mapping cannot place, or a shape that is invalid, now FAILS the check honestly instead of being silently probed around. - If a surface is deleted or the room setup changes while its check runs, the result is discarded - before anything is written, and again before it publishes. - Comparison scores now always describe the exact same probes on both sides; if the current mapping cannot predict an observed probe, nothing promotes and the log says why. - The before/after check picture: amber and green are offset so both show when they match, the caption always keeps the decision and scores, and the in-app view carries its own true scale label. Calibrations publish transactionally - A new global calibration is prepared completely before anything changes; your previous calibration, per-surface mappings, and live mapping are snapshotted first. If any save fails halfway, the app restores the previous state - files AND the running show - and says so. The verdict record is written only after the publish fully lands, so the log never claims a success that did not happen. Per-surface promotion already worked this way; now the global one does too. New calibrations must earn their place - or say UNVERIFIED - With a previous calibration to beat: both are scored on the SAME fresh probes (never on training dots), and the new one must be clearly better past repeatability noise. The incumbent wins every tie or failure. - With NO previous calibration (first run, reset, unreadable file, different camera, different projector resolution, degenerate saved fit): the new one must pass absolute fresh-probe checks - enough probes seen, covering the frame, under a hard error ceiling - and it is saved marked UNVERIFIED until a future comparison, instead of pretending it beat something. Carry-over after re-detect asks you first - Re-detecting the room still carries your calibration and wall scan so "nothing lines up" does not come back - but 0.97.0 carries them as candidates. When the new map loads, the app asks: keep ONLY if the camera and projector did not move. A proven mismatch (different camera, camera resolution, or projector resolution) refuses before anything applies - same-name hardware alone is never treated as proof. The carried scan waits for the same yes as the calibration (earlier builds attached it silently). Outline edits mid-check invalidate the check - If you edit a surface outline while its calibration is being validated, the result is discarded and your previous mapping stays - the probes were shot against the old shape, so publishing them would be a lie. Wall scan owns the warp - honestly - While a Gray-code scan is attached to the map, calibration comparisons step aside with an explicit message instead of pretending to measure what the show does. To change the mapping, re-run the scan (or remove it to recalibrate). Probe planning got honest - Probes cover the inside AND the boundary ring with a bounded budget; one side running short hands its budget to the other. - Probes inside light-blocked areas (mirrors and your blocked regions) are never shot - they could only come back as fake evidence. - Probes whose dot would be clipped by the camera frame are skipped as misses, not measured. - Ambiguous bright blobs are rejected even inside the predicted window - an expected position never makes competing light safe. - A check passes only if observed probes cover enough of the planned area (regions + spread), not just "some dots somewhere". - Dot size and margins scale with your projector resolution - safe at 4K. The rig-move warning actually runs now - It could silently never fire before (it gated on the wrong state). It now checks when the camera starts idle and the show is not live, and a mismatch pops a dialog instead of only logging. The match case now says honestly: this is a coarse check - small moves can slip through. Before/after picture after every check - in the app - The Calibrate page shows the latest check: amber spokes = your current mapping's error, green = the candidate's, shorter is better, red tip = the error runs past the spoke. FIXED scale across all checks (8 screen px = 1 projector px), so two pictures compare directly. Amber always paints over green - the defender is never hidden. The caption carries the scores and the decision. The same picture is still saved as a PNG under native-maps. Also in this build (the 0.96.8 batch) - Verify the scan works again (0.96.7's zero-marker bug was ours, not your camera - three coordinate bugs, fixed and regression-tested). - Auto setup starts fresh every time, QUICK (12 dots) or EXTENSIVE (30 dots + full scan); your previous rig state is archived, never deleted. - Indoor phone scans (.glb): floor/ceiling planes set aside so the wall fits. - Re-detect carries calibration + scan as candidates (see above). - Outline editor: delete a shape, walls stay behind everything, live preview docks in the corner, mute no longer double-fires. - Friendlier house-scan errors, progress percents, show pauses while AI video generates. TESTED - Full Go test suite passes (Linux cross-check): calibration gates, carry decisions, coverage/occluder planning, transactional publish, revert safety, check-picture renderer, and the 0.96.8 batch. - Race-detector run on the calibration decision tests: clean. - Windows amd64 build verified; version string checked in the binary. - Source zip verified: the packaged tree itself passes the same test suite and Windows vet (no new warnings). - Verify-the-scan fix: synthetic rig sees 12/12 markers with ~0 px error. - Rig-change detection: lighting-only change does NOT trigger; a 4-pixel camera shift DOES. UNTESTED / HONEST LIMITS - The new Calibrate-page check picture is a layout addition I could not pixel-verify (no display in the build environment). If it overlaps anything on your screen, tell me and I will move it. - The carry-confirm dialog and rig-check dialog are standard topmost Windows dialogs; their flow is code-reviewed and compile-verified, not click-tested here. - Everything camera/projector-facing is verified by synthetic rigs and logic tests; the first live calibration on YOUR rig is the real proof. Run Auto setup (QUICK) once after updating and watch the check picture. KNOWN LIMITS (unchanged) - No calibration, no alignment: a show on an uncalibrated map will not line up. The app says so when you start one. - The accuracy ceiling is set by the camera view, room darkness, and rig stability. Lens-distortion correction and a guided stereo-intrinsics mode are researched and QUEUED - not in this build. - A Gray-code scan freezes geometry until you re-scan; holes and disputed pixels stay dark by design. - Safe mode reduces procedural effect speed/intensity within tested bounds; it is not a photosensitivity guarantee. Install: replace ProjectionMapperNative.exe with this one. Your projects, calibrations, scans, and content stay put. The previous version's exe is backed up automatically on update.