# AirDesk 0.9.2 validation · 31 August 2026

This is a development prototype, not a validated accessibility or workshop deployment. Version 0.1's main UI and live front-camera preview were visually confirmed during installation. The user's subsequent cursor/reach feedback motivated version 0.2. Synthetic tests cannot establish live accuracy or comfort.

## Version 0.9.2 practice release fix

A provider-to-practice regression reproduced the reported failure: a gradual fist-to-point-to-open transition releases safely on its first intermediate frame, but the lesson previously discarded that drop. Practice now remembers a tracked release position for up to 700 ms and accepts the following fresh open palm. It never delays or repeats OS input, retains a held drag after Release, or credits a later pointer position. Invalid/stale/gapped tracking, calibration and warning frames cancel confirmation. A missed drop explains how to retry.

Practice target diameter is doubled, with drawing and scoring using the same radius. During confirmation, the next target stays hidden. The reference shows applicable enabled major actions and the reserved open-hand let-go/rest illustration; that sign is emphasized during dragging and release. The lesson and images derive their scope from the same function catalog; no new settings, images, inference models or runtime dependencies were added.

**102 portable regression checks passed**, without camera access or OS input. Added coverage reproduces gradual opening through the real provider/feed path, rejects unsafe or late confirmations, preserves the release position despite hand/mouse movement, verifies complete practice references with remapped/disabled actions, and checks enlarged target geometry across preview aspect ratios. Existing immediate-release, tracking-loss, watchdog and practice-isolation checks remain passing. These checks do not establish live recognition accuracy or comfort.

The installed Practice view was visually checked with a live camera: all default gesture cards and the added let-go/rest transition were visible, with the enlarged target in the camera preview. This exposed a separate high-DPI drawing defect: the fill's clip region used logical coordinates even though GDI expects device pixels, hiding its white background and fill. A new off-screen GDI test reproduced the defect at 150% scaling. The shared circle renderer now converts the clipping bounds through the current transform. Nine rendering cases cover empty, half-filled and confirmed circles at 100%, 150% and 200%, without camera or OS input. Live physical drag/drop accuracy remains unverified; the reproduced gradual-opening regression is synthetic.

All nine rendering cases passed after the DPI correction. An intermediate native visual review confirmed the larger target and all five default practice cards fit cleanly. The user then requested transparent target centres instead of the white background. The shared renderer now leaves the unfilled area untouched, while retaining animated progress and the green completion check. All nine updated rendering cases verify backdrop preservation, partial fill and completion at each display scale; all 102 gesture/safety checks still pass. The target radius, scoring and release behavior are unchanged. The corrected executable is 1,021,952 bytes.

The earlier installed startup smoke passed: 19 runtime files hash-verified, preferences preserved, local models ready, camera/control off, safety hotkey and mouse hook registered, decoded images and page bounds valid. One startup observation recorded 59,445,248 bytes of working memory and a 703 ms model wait; this is not a performance benchmark. Transparent-centre rendering is verified by the off-screen pixel checks; live physical gesture accuracy is not established by these checks.

## Version 0.9.1 changes and checks

Home now has a read-only gesture reference, grouping shared poses once. Editing is confined to Settings → Gestures. General removes the separate Comfortable reach section and duplicate scrolling checkbox; optional manual setup appears only in Fixed distance mode. Existing preferences and assignments are retained, including migration of an older disabled scroll toggle into its assignment.

One reference renderer and cached image catalog serve Home and an optional translucent desktop strip. The desktop window is nonactivating, click-through, hides during pause/practice, and fades on pointer proximity. It adds no model, runtime dependency or cloud service. Home practice guides users through enabled major actions and open-hand rest, independently of the Settings editor selection. Disabled actions are skipped; mouse clicks, pickup alone and cleanup events cannot complete a lesson step.

Validation covers free/targeted practice isolation and the guided major-action sequence, confirmation timing, complete drag/drop, skipping disabled actions and rejecting stale/gapped rest observations. These checks do not measure live hand accuracy, user comfort, glove performance or industrial fitness. Industrial deployment remains unvalidated, and this prototype is not a machinery control or safety system.

The final build passed **97 portable regression checks** without camera access or OS input, producing a **1,018,880-byte executable**. Existing gesture recognition, framing, adaptive reach, dwell, startup and safety checks remain passing. No new inference model or runtime dependency was added.

The installed startup check passed with camera and desktop control off, local models ready, the pause hotkey and physical mouse hook registered, all four image sheets decoded, and all controls inside their page bounds. Home exposes three controls; General exposes ten (eleven for Fixed distance); Gestures exposes nine. The 19 runtime manifest files were SHA-256 verified and existing preferences retained. One startup observation used 56,504,320 bytes of working memory and a 766 ms model wait; this is not a performance benchmark.

Native visual review confirmed the Home reference, the regrouped General page and three-image Gestures editor. Changing the click assignment updated Home immediately; the original assignment was restored. F1 correctly opens Gestures from a focused child control. Live camera inspection was interrupted by Windows inspection-helper timeouts, including after recovery; the final guided camera screen and desktop-reference fade/click-through were not fully visually verified. Synthetic lesson checks do not replace live hand testing.

## Version 0.9 changes and checks

Practice now renders targets and recognized landmarks in the home camera preview; the separate guide and full-screen practice windows are removed. One function selector and three image buttons use the same catalog as recognition and persisted assignments. Eleven functions include six optional common shortcuts. Open palm remains reserved for rest/drop. Conflicting assignments are resolved in one binding model, with notices; scrolling latches until the pose changes and cannot also click when it stops.

Automatic distance learns bounded image-space hand scale while starting/resting and freezes mapping throughout active input. Fixed distance retains the saved reach. Both retain the existing broad framing limits; they do not require one precise hand size. Neither optical zoom, physical distance measurement nor recognition outside the camera view is claimed.

**94 portable regression checks passed**, without a camera or OS input. New coverage checks catalog validity and three alternatives, conflicting/corrupt bindings, remapped click, thumb/index-little recognition, custom actions, safe return from menu gestures, shared preview geometry, selected-function practice, partial keyboard cleanup, automatic adaptation and its active-input freeze, and reasonable synthetic hand-scale variation. The complete native build passed with a **1,010,176-byte executable**, without new runtime/model dependencies.

The installed native startup check passed: models initialized, camera/control remained off, emergency hotkey and physical-mouse hook registered, all nine home and ten Settings controls fit their page, four image sheets decoded for six assignable poses, and noninteractive feedback was created with no learning window. All 19 runtime files matched the SHA-256 manifest and installation preserved preferences. This startup observed 1375 ms of model waiting and a 56,885,248-byte working set; these are individual startup observations, not latency guarantees.

Computer Use visually verified the installed home, three image choices, Settings, Automatic/Fixed selection, and practice inside the live camera preview. Clicking a preview target produced a check and advanced the target while hand hits stayed at zero. Fixed persisted as DistanceMode=1, then Automatic was restored and persisted as 0. Assigning Thumb up to Copy updated its selected card, enabled Practice and persisted Gesture8=5; turning it off restored 0. No shortcut was emitted to another app. Camera/control were left off, and no live camera screenshot was saved as a project asset.

These checks do not establish live hand comfort, recognition accuracy, accidental-action rates, distance in centimetres or end-to-end latency. No hand was present during the native visual check. Earlier camera performance observations below are historical, not new 0.9 measurements. The public package contains runtime files and required third-party notices only; original application source remains private.

## Version 0.8 changes and checks

Settings replaces the reach dropdown with **Adjust to me**. Five deliberate one-finger holds learn centre, left, right, up and down reach without sending desktop input. Each step remains visible for at least 1500 ms, and the hold averages 900 ms of stable samples. An incomplete, cancelled, stale or timed-out request cannot overwrite prior personal reach. The committed area has a small inset so screen edges do not require reproducing the exact maximum movement. Camera identity and mirror direction bind persisted calibration, and the capture aspect is checked before use. Pointing, preview and palm-driven dragging consume the same mapping.

The camera format policy can select bounded extra native detail at approximately 30 fps and the baseline aspect ratio, with a format/conversion fallback. It does not use hardware zoom or change the crop-to-screen mapping during use. Minimum palm detail is now max(24 pixels, 3.5% of the shorter image dimension), maximum bounding span is 96%, and the edge reserve is 0.5%. These expanded image-space limits retain full landmark visibility, confidence, freshness and deliberate rearming checks. Physical distance, lighting and sensor field of view still limit usability.

**81 portable regression checks passed**. Fifteen new scenarios cover a complete comfortable sweep, stationary/wrong-direction input, tremor, missing/stalled frames, changing hand scale, cancellation through a new request, timeout, invalid saved areas, capture-aspect fallback, safe calibration observations, capture format choices and closer/farther synthetic hand framing. An integrated synthetic hand completes calibration and then points/clicks at all four display corners without clipping. No test sends OS input or accesses the camera. These results do not establish live recognition accuracy, comfort, battery cost or a guaranteed working distance.

The guide now opens with pointing and resting; a native **More gestures** button reveals the existing illustrated advanced gestures. No runtime dependency, model or cloud service was added. Target magnetism and practice-driven preference tuning remain later work, as does eye tracking.

The camera availability/shutdown diagnostic completed all three cycles. This device selected **640×480** in both baseline and detail policies: no larger mode met the conservative aspect/rate rules. Short two-second observation windows delivered 12, 20 and 32 distinct frames, with maximum delivery gaps of 313, 297 and 188 ms respectively. Shutdown took 2797, 375 and 578 ms. These cold-start observations confirm capture and cancellation, not stable 30 fps, end-to-end pointer latency or an improvement from higher resolution on this device. Variable capture delivery and real hand comfort require further live evaluation; safety still rejects stale input.

The final native build and startup smoke check passed with a **1,005,056-byte executable**. It initialized the local models, left camera and control off, exposed Start control, registered the safety controls, verified four home controls and nine Settings controls within the window, decoded all guide assets and created the noninteractive click feedback. The build-directory run observed a 4938 ms model-startup wait and 53,469,184-byte working set; these are individual startup observations, not product performance guarantees.

## Version 0.7 changes and checks

A new integrated test first failed against 0.6: broader, smoothly varying camera-space tremor (±14 px horizontally and ±9 px vertically) repeatedly prevented a practice hit. The revised provider/feed path now reaches all five targets with that sequence. The bottom practice targets moved from 60% to 57% height to retain wrist clearance during the larger wobble; framing safety thresholds were not relaxed.

Steady now uses a 0.18 response and an estimate of signed velocity averaged over 120 ms, so alternating hand shakes do not repeatedly boost sensitivity. The dwell hold radius increased from 28 to 48 DIP. After settling, brief excursions within twice that radius pause progress for up to 140 ms and keep the original aim; progress resumes only on valid return. Large motion unlocks immediately, and sustained departure resets. The full click delay, repeat block, invalid-pose cancellation, freshness checks and physical-mouse override remain in effect.

One GuidanceStabilizer serves the main preview, practice and desktop hint. Routine text requires 600 ms of consistency and at least 1500 ms of reading time; actual completed actions may interrupt. Persistently alternating warning reasons yield a calm generic framing hint instead of retaining a misleading instruction. The stabilizer affects presentation only. The router still sees raw tracking eligibility, and safety cancellation is immediate. Short capture hiccups do not replace text until 1200 ms, while input still rejects frames older than 250 ms.

The same circle renderer now provides a moving fill surface, bold progress arc, larger green completion check and one 700 ms outward pulse. It interpolates only reported progress over 80 ms, never predicts success, and immediately clears cancellation. Desktop feedback grows from 24 to 30 DIP radius. Practice retains the accepted-hit check for 1100 ms and avoids duplicate confirmation circles at the same target. Representative fill and completion states were rendered offscreen through the production renderer and visually inspected at practice and desktop sizes; no camera images were involved.

**66 portable regression checks passed**, without camera access or OS input. New cases cover broader tremor across all targets, two-axis wobble across DPI scales, short overshoot/resumption, sustained departure, an almost-full countdown outside the hold area, tremor filtering, stable messages, persistent warning fallback, immediate safety release despite delayed text, progress interpolation and confirmation-only pulses. Additional checks keep a nearby next target reachable and prevent a brief post-click shake from arming another click: departure uses a separate 45 DIP threshold with 140 ms persistence; large movement leaves immediately. These synthetic cases and renderer checks do not establish individual comfort, live recognition accuracy or accidental-click rates.

The final native 0.7.0 build passed, producing a 985,088-byte executable. No runtime dependency, vision model or setup control was added.

**The installed 0.7.0 startup check passed.** It initialized the local models, left camera and desktop control off, exposed Start control, registered the pause shortcut and physical-mouse hook, verified both page layouts and all guide images, and created the feedback windows. This run observed a 687 ms model-startup wait, 58,884,096-byte working set and 61,665,280-byte peak; these are startup observations, not latency guarantees. All 18 installed release files matched their SHA-256 manifest, and existing preferences were preserved.

The final live screen inspection was blocked by Computer Use reporting `GetCursorPos failed: Access is denied (0x80070005)`. A fresh window lookup found no AirDesk window after that unsuccessful helper launch. The app was then started normally as the final installation step. Production-renderer samples were inspected separately, but live animation, real hand comfort and live gesture accuracy were not verified in the installed UI during this update.

## Version 0.6 changes and checks

The main page now has one preview and four persistent controls: Start control, Practice, Finger guide and Settings. Camera/display selection and hand adjustments live on the Settings page in the same native window. A contextual Stop camera button appears only while previewing with desktop control paused. Settings edits use the existing Profile and save immediately. Opening Settings pauses input; Done does not resume it or reset preferences.

The last two guide cards now use generated raster illustrations: closed right fist → open right palm for grab/drop, and index/middle/ring raised for double-click. All four cards use one image-sheet/caption catalog and one renderer. Images were visually inspected; one targeted edit corrected the open palm's handedness. Each sheet is decoded once and cached at up to 320 pixels per column. No runtime dependency, network call, or vision-model change was added.

**52 portable regression checks and the native build passed**, without camera access or OS input. The existing integrated practice/jitter, gesture, dwell, mapping, startup and safety coverage remains passing. The executable is 977,920 bytes. The new native startup check exercises both pages' visibility and bounds, verifies all three image sheets for four gesture cards, and retains safe-off/default/safety checks. Generated illustrations and these checks do not establish live hand recognition accuracy or comfort.

**The installed 0.6.0 startup check passed.** Home exposes four controls and Settings exposes nine; inactive-page controls are hidden, and every visible control fits the client area on both pages. All three image sheets decoded for all four guide cards. Model initialization, camera/control-off defaults, Start availability, pause hotkey, physical-mouse hook and noninteractive feedback creation passed. This run observed 578 ms of model-startup waiting after window creation, a 59,633,664-byte working set and a 62,218,240-byte peak; these are startup observations, not latency benchmarks. All 18 installed release files were checked against the SHA-256 manifest; installation preserved settings.

**Computer Use visually verified the installed main page, Settings and all four illustrated guide cards at the device's 200% scaling.** Text, images and controls were readable without clipping. A temporary change from Steady to Balanced updated its explanation and immediately persisted PointerFeel=1; Done/reopening Settings retained it. Steady was then restored. Check camera returned to the preview with control paused and exposed Stop camera; Stop camera returned to the four-control idle page. Live preview briefly displayed a detected pointing hand, but this spot check did not measure live click accuracy, gesture reliability, fatigue or latency. Camera/control were left off, with Finger guide open. No live camera image was saved as a project asset.

## Version 0.5 changes and checks

The top toolbar and its mode-selection callbacks are removed. Actions now come entirely from hand poses: one finger clicks, two held still right-click, two moving scroll, three held still double-click, closed fist grabs after aiming, and open palm drops/rests. A filled circle and persistent confirmation check replace the thin countdown ring. The ambiguous numeric slider is replaced by Steady/Balanced/Direct choices with a short explanation. Upgraded installs default to Steady and a one-second fill; camera/display/reach choices remain unchanged.

Two failures were reproduced against 0.4 before editing, without using a camera or emitting OS input. A synthetic upright hand aimed at the first practice target produced **zero tracked frames and zero clicks over 150 frames** because the target forced part of the hand outside the image. At a central target, modest alternating camera-space jitter (±6 px horizontal, ±4 px vertical) produced **150 tracked frames but zero countdown progress and zero clicks** with the prior response setting. Those observations identify concrete failure modes, not a measurement of the user's actual camera stream.

Practice now starts with large targets within comfortable hand reach. Small shakes are tolerated and the pointer locks to the click anchor during the fill. The practice model scores fresh events when they arrive; the UI reads a snapshot, so delayed redraws cannot expire an already accepted hit. Mouse and hand scores remain distinct. Point-and-wait over Close practice exits without OS input.

**52 regression checks and the native build passed.** New integrated coverage drives HandGestures → PracticeFeed through all five targets with the jitter above and verifies five hand hits with no OS events. Additional checks cover held-pose right/double click, scrolling without accidental right-click on stopping, fist pickup without contraction drift, palm-motion dragging, explicit open-palm drop, safe releases, cursor locking, all click delays, short-pose flicker without invalid-frame clicks, repeated-click prevention, delayed repaint survival, arrival-time freshness checks, separate scores and finger-driven practice exit. Mapping/startup/physical-input/failure safety coverage remains included. The executable is 975,360 bytes; no runtime or vision-model dependency was added.

**The final installed 0.5.0 native startup test passed.** It confirmed safe camera/control-off defaults, the available Start button, registered shortcut/mouse hook, guide decoding, all main controls inside the client area, and creation of the noninteractive circle/guidance windows. This run observed a 672 ms model-startup wait after window creation and 57,630,720-byte working set; those observations are not end-to-end latency benchmarks. Saved preferences confirm Steady and a 1000 ms fill, with prior camera/display/reach values retained.

These tests do not establish live recognition accuracy for fist/three-finger poses, long-session comfort, real camera latency, or accidental activation rates. The entire screen remains mapped, but reaching its extremes still requires keeping the hand visible; the comfortable practice sequence is not a proof of ergonomic edge reach. Try practice before manipulating valuable content.

The installed 0.5 interface was inspected with Computer Use: the toolbar is absent, one large practice target is shown, and a physical mouse click advanced target 1 to target 2 with Mouse clicks = 1 and Hand clicks = 0. The main screen showed Steady, its explanation, and the one-second delay without clipped controls. Camera-only capture and Stop camera were verified. No hand was present during this visual check, so it does not validate live hand recognition. Inspection also caught an undersized finger guide at 200% display scaling; its window size now scales with the owner's DPI.

## Version 0.4 changes and checks

Point-and-pause replaces pinch selection. Desktop and practice share the capture-timestamp-driven dwell controller, fixed click anchor, visible progress, repeat block, and explicit right-click/double-click/drag modes. Right-click, double-click, and completed drag return to normal Click. Framing guidance is conditional and selection stops while the hand is too small, too large, or clipped. The main window removes persistent gesture cards and performance statistics; instructions remain available through Finger guide.

**49 portable regression checks passed**, without camera access or system input. They cover default dwell timing, jitter, cumulative drift, movement/pose cancellation, repeat prevention, timestamp discontinuity, explicit pickup/drop, mode-change release, one-shot action reset, toolbar intents without OS clicks, DPI tolerance, whole-display mapping, partial right-click failure cleanup, invalid-coordinate rejection, framing categories, practice event preservation and scoring, and startup/safety behavior. Old pinch success assertions were replaced with the new behavior; pinching is now tested as cancellation, not selection.

**The native 0.4.0 build and installed startup smoke test passed.** The installed executable is 979,968 bytes, with the existing runtime and model dependencies unchanged. Startup verified model initialization, camera/control off, available Start control, registered shortcut/mouse hook, decoded guide, all main controls within client bounds, and creation of the native action bar/countdown/guidance windows. This run observed a 55,615,488-byte working set and 14,437 ms model-startup wait under current machine load; it is not a performance benchmark. Existing camera, display, reach, and response preferences were retained, with the new dwell delay defaulting to 700 ms. A backup of the previous executable and settings was retained locally before replacement.

Distance hints use image-space heuristics: a palm below max(18 px, 6.5% of the shorter frame dimension), a hand box over 82% of width/height, or landmarks within 1.5% of an image edge. They do not measure actual distance. Their thresholds, dwell comfort, and accidental activation rate still need hands-on evaluation under varied lighting and camera positions. Synthetic tests do not establish real hand recognition, OS click delivery, or commercial usability.

## Version 0.3.2 changes

Practice previously polled only the newest tracking result, so an intervening pointer frame could overwrite a one-frame pinch-release click. It also ignored ordinary mouse clicks on targets. A bounded click mailbox now preserves discrete events until the practice UI consumes them, and mouse clicks use the same target geometry with a separate score. Hits flash a check mark; misses show a message; hovering with the hand ring highlights the active target.

Six regression cases cover clicks retained across skipped redraws, chronological delivery and duplicate suppression, closed-session isolation and bounded storage, stale/future-event rejection with no OS input, separate mouse/hand scores, and matching visual/hit-test geometry across screen sizes. Synthetic delivery checks cannot establish live pinch recognition accuracy.

**All 33 regression checks and the installed native startup smoke test passed.** The latter verified model readiness, safe off-state, the enabled Start control button, shortcut/hook registration, guide decoding and control bounds. The executable is 964,608 bytes with no new runtime dependency. The previous installed app closed normally before replacement.

## Version 0.3.1 changes

The working box is centred in both directions and enlarged for all three reach presets (95%, 85%, and 75% of camera width and height). Preview and desktop input continue to use one shared transform. Existing reach, camera, display and response preferences are preserved.

The previous test that assumed an upper working box with wrist clearance has been replaced by the new centring requirement across landscape, portrait and widescreen frames, both mirror states, and all reach presets. Edge-to-desktop tests now use the enlarged bounds. Actual whole-hand visibility at the lower edge depends on camera distance and pose; the former upper-box ergonomic assumption is no longer claimed.

**27 regression checks and the installed native startup smoke test passed.** Startup confirmed local model loading, camera/control off by default, Start control enabled without a preview, safety shortcut and mouse hook registration, guide image decoding, and all controls inside the window. Live gesture accuracy with the larger box still requires hands-on use.

## Version 0.3 checks

- **27 portable regression tests passed.** Four new tests cover startup waiting for the model and a fresh frame, one-time activation, cancellation before readiness, camera/model failure and timeout without automatic retry, and practice never requesting desktop control. The previous 23 gesture, mapping and safety cases remain passing.
- The primary action is now a large green **Start control** button, enabled at launch. It starts the camera and requests desktop control in one step. The revised main window and successful transition to **Control on** were visually verified in the installed app.
- Testing **Stop control** exposed an unresponsive camera-shutdown path in the synchronous capture implementation. The affected app process was force-closed. Capture was changed to an asynchronous callback mailbox that can cancel its wait; the capture thread owns reader/source cleanup. A new `--camera-test` mode checks actual camera start/stop/restart without saving images or emitting desktop input.
- **The revised capture passed three live camera cycles:** each received a frame, then stopped successfully. Stop times were 515, 563 and 562 ms on this device. These observations do not guarantee timings for other camera drivers. Final native executable size is 956,416 bytes, with no additional runtime dependency.
- Actual finger-to-pointer accuracy and long-session stability remain unverified; seeing **Control on** and live video does not validate gesture performance.

## Version 0.2 checks

- **23 portable regression tests passed.** The original 15 safety/gesture cases remain covered. New cases check all four screen boundaries for every reach preset and mirror setting; bottom-screen reach with an upright hand and wrist still in frame; preview/inverse-transform agreement; negative monitor origins and virtual-desktop endpoints; direct following without accumulated filter lag; adaptive response during deliberate movement; pinch target latching; and preview-only practice without replayed or stale clicks.
- The three generated pose illustrations were visually inspected: point, pinch, and two-finger scroll. The guide and main window use one sprite sheet and the same caption catalog. No user camera images were used to create the illustration.
- **Native 0.2 build passed:** executable 949,248 bytes; unchanged bundled ONNX Runtime and models, with no new runtime dependency.
- **Native startup smoke test passed:** local models initialized; camera and desktop input off; Enable control disabled without preview; pause hotkey and dedicated physical-mouse hook registered; interactive controls inside the client area; gesture image decoded successfully. Model startup wait after window creation was 515 ms. Camera-off working set was approximately 54.9 MiB, peak 57.6 MiB. This is one startup observation, not a latency guarantee.
- **Installed copy passed the same startup test**, with all 16 installed files verified against the package SHA-256 manifest. That run reported 3.25 seconds for model startup, approximately 52.3 MiB working set and 55.1 MiB peak. Startup time varies; these two observations are not a benchmark or a guarantee.
- The original 0.1 process did not respond to normal shutdown and was force-closed during the update. The revised native router moves the mouse hook to an independent message thread and publishes physical input through an atomic timestamp instead of acquiring the input mutex inside the hook callback. This removes a potential input/hook/UI lock cycle; live long-running camera and gesture use still needs testing.
- The Windows automation helper continued timing out, so **the revised main window, full-screen practice and live gesture accuracy have not been visually verified through that helper**. The generated poses themselves were inspected, and startup/layout bounds passed native checks. Real-world jitter, accuracy, fatigue, camera buffering and motion-to-cursor latency still require hands-on evaluation.

## Baseline 0.1 results (historical, not new 0.2 measurements)

- Native C++17 Windows x64 release build: `AirDesk.exe`, 930,816 bytes. No browser, Python, or .NET runtime is used by the app.
- **15 gesture and safety tests**, all passing. They use a recording sink and synthetic hand coordinates, without camera access or OS input injection. Coverage: neutral arming; returning already pinched; single click; short pinch noise; drag/release; tracking loss; two-finger scrolling; preview-only suppression; pause release; stalled-pipeline watchdog; in-flight result rejection; physical-mouse override; old frame rejection; partial input failure cleanup; invalid coordinates.
- **Native startup smoke test:** window creation, local model loading, registered pause hotkey and physical-mouse hook, camera off, desktop control off, Enable control disabled without preview, and every interactive control inside the client area. This was performed with the window hidden and without opening the camera or emitting mouse actions. It checks native startup/layout bounds, not visual appearance or interaction quality.
- **Model checks:** pinned tensor names/shapes matched. All 15 blank frames were rejected as no hand. Three cameras enumerated, none opened.
- **Reference footage:** the actual palm/landmark inference pipeline ran over 70 frames of the upstream OpenCV Zoo palm demo GIF and returned a valid hand for 44 frames. This is a functional smoke test, **not a labelled accuracy score** or a live control test. It does not establish that all true hands were found or that false positives are absent.
- Bundled palm/hand SHA-256 values match `DEPENDENCIES.md`. ONNX Runtime's DLL has a valid Microsoft signature. AirDesk's own executable is unsigned.

## Baseline 0.1 measurements on the development machine

| Measurement | Observed value |
|---|---:|
| Working set after models loaded, camera off | 53.4 MiB |
| Peak working set during that startup | 55.7 MiB |
| Blank-frame palm inference, warm mean | 51.9 ms |
| Valid-hand reference frames, median processing after first frame | 18.9 ms |
| Valid-hand reference frames, 95th percentile after first frame | 34.8 ms |
| Valid-hand reference frames, maximum after first frame | 97.0 ms |

Inference values exclude camera exposure/capture latency, display latency, and interaction confirmation time. The valid-hand statistics include 43 reference frames after the initial frame and omit frames that did not return a valid hand. They cannot establish sustained live FPS or end-to-end responsiveness. CPU use, active-camera memory, battery drain, and long-session stability have not been benchmarked. An earlier concurrent run had larger timing spikes; the values above come from the final sequential diagnostic run.

## Still requires hands-on verification

1. Optionally use Camera only; verify the selected camera, correct orientation, hand overlay, lighting, and mapping region.
2. Start with Full-screen practice. Verify one click per point-and-pause, no repeat until movement, cancellation on movement/relaxing the hand, explicit right/double clicks, pickup/drop, scrolling, framing hints, and recovery after hand loss. Then test desktop control over a disposable document.
3. Check that Ctrl+Alt+Space pauses and the physical mouse overrides hand control. Registration and policy behavior are tested, but real gesture-driven OS event delivery is not yet tested end to end.
4. Unplug/reconnect the camera, change display layouts, test multiple monitors/scaling, suspend/resume, and verify no held buttons remain. Automated policy tests cover releases; they cannot reproduce every OS/driver failure.
5. Test gloves and real workshop conditions before claiming that use case works. Current models should first be evaluated with bare hands.
6. Compare performance and error rates on the target hardware over an extended session. Do not test against important files or machinery.

## Tool limitation

The desktop inspection helper intermittently timed out during the 0.2 work, then recovered during 0.3 verification. The app's built-in native smoke test checks startup and geometry only; it is not a substitute for visual or live hand testing. The earlier camera preview inspections do not validate gesture accuracy.

## Reproduction

`build.ps1` runs the portable gesture/safety tests. The executable supports `--diagnostics <report.txt>`, `--test-image <image> <report.txt>`, and `--smoke-test <report.txt>`. These diagnostic modes never send desktop input. The smoke test constructs a hidden native window, tests startup, and exits; it requires the pause shortcut to be free and no other AirDesk instance running.

The future eye module has a separate milestone/test plan in `docs/EYE-EXTENSION.md`. It is not implemented in this release.
