Skip to content

fix(engines,track): review findings: crop debt, non-primary transform, device-lost failover, Java bridge, capture retries (#497) - #503

Merged
Maxaubert merged 6 commits into
mainfrom
fix/review-engines
Oct 16, 2026
Merged

Maxaubert merged 6 commits into
mainfrom
fix/review-engines

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #497. Fixes from the 2026-10-16 full code review (research/wind/2026-10-16-full-code-review.md), each finding adversarially verified, each diff reviewed by a second agent with follow-ups applied.

Commits:

Gates: build.bat check, build.bat test, Playwright and test:rules pass on this branch and on the combined test build (669 unit tests, 212 Playwright). Combined build deployed signed for owner testing.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

Maxaubert and others added 6 commits October 16, 2026 03:58
… drain by time (#497)

- A cropped near-full repaint left the cache outside the view stale once the screen settled:
  the next uncropped frame now copies in full, and a screen quiet for 250 ms with debt owed
  gets a fresh grab (review #5).
- A duplication that cannot be created is no longer fatal at initialize (only a missing output
  is), so a start during UAC or with the duplication slots taken keeps the render engine
  (review #20).
- capture() retries a failed duplication 250 ms doubling to 2 s and logs only power-of-two
  failures, instead of every frame (review #21).
- The fresh-grab drain stops 12 ms after the first copy, not only after 40 attempts, which ran
  ~110 ms on 360-500 Hz panels (review #36).

Pure policies in src/render/capture_policy.h, tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…ssion on device-lost failover (#497)

- Transform's visual offsets are monitor-local while its input mapping adds the origin, so a
  non-primary pick (protected, excluded, rotated or pinned) magnified the wrong region. Every
  pick off the primary is now render (except while the render device is lost), and a session
  only moves to a non-primary monitor when the render engine took the retarget
  (MayRetargetSession). No origin offset was added: nothing in the repo proves the DWM
  coordinate convention there (review #11).
- The device-lost failover now runs TeardownSession for any active render session (a 1x
  Inspect one included) and clears prevActive/prevInspect, so the overlay is hidden and the
  next active tick enters a fresh transform session (review #8).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…arets off (0,0), retry failed folders (#497)

- LoadVerified reads the bridge DLL's import and delay-import tables (pure PeImportNames) and
  requires a valid signature on every DLL the loader would take from its folder,
  transitively; a fixed list of four CRT names missed e.g. MSVCR100.dll (review #15).
- Java carets are converted both around the monitor origin (JDK 17+ and JBR per-monitor user
  space) and around (0,0); the one inside the Java window wins (JavaPickCaretPx), fixing scaled
  monitors away from (0,0) (review #16).
- A folder whose bridge did not load is retried after a 5 s to 5 min backoff instead of being
  written off for the session (review #31).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…ange (#497)

publish() deduped against the last snapshot across focus generations, so a keyboard return to
the same control after an unpublished focus (a skipped container) never reached
StepViewOwner. The dedupe now holds within one focus generation only (TrackPublishIsRepeat,
tested) (review #30).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…k to identity (#497)

CursorCrashFilter restored cursor, clip and scheme but left an enabled MagSetInputTransform in
the system-wide slot. It now disables it when the last Wind publish was enabled and the crash
is on the thread that owns the Magnification runtime (calls are thread-affine); an off slot is
left alone, as it may belong to native Magnifier. Startup still makes no Magnification calls
(review #37).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…ttle recreate, folder-only bridge cap, focus dedupe bypass only after a miss (#497)

- render: a pointer-only Desktop Duplication frame (LastPresentTime 0, or no texture) counts as a
  quiet screen, so a crop-debt refresh also fires while panning; the refresh's duplication
  re-create logs no settle diagnostics (refreshSdrWhite still runs).
- java bridge: the dependency cap counts only DLLs opened from the bridge folder (refused above
  32); API-set and system names no longer count.
- focus tracking: the publish dedupe is bypassed only when a focus change since the last publish
  resolved to nothing published (skipped container, unanswered lookup) or after activation, so
  repeat focus events on the same control no longer take the view from the mouse.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
@Maxaubert
Maxaubert merged commit 6aee711 into main Oct 16, 2026
1 check passed
@Maxaubert
Maxaubert deleted the fix/review-engines branch October 16, 2026 02:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(engines,track): review findings 8, 11, 12, 14, 15, 25-30

1 participant