Skip to content

feat: refuse to run without UIAccess, with a message that says how to fix it (#460) - #461

Merged
Maxaubert merged 1 commit into
mainfrom
feat/require-uiaccess
Oct 13, 2026
Merged

Maxaubert merged 1 commit into
mainfrom
feat/require-uiaccess

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Fixes #460.

What changes

  • Wind refuses to run without UIAccess. Before the single-instance claim, so a refused start never evicts a working Wind, it reads its token's UIAccess bit. When the bit is off, it shows "Wind can't start" with the fix (run Setup again, then start Wind from the Start menu), logs it and exits.
    • The decision lives in pure src/uiaccess_gate.h, with doctests.
  • Setup reports signing failures. On either local-signing failure path, it shows an error, unticks "start Wind" and doesn't launch Wind. Silent installs take the default answer (/SD IDOK).
  • Developer override: WIND_ALLOW_NO_UIACCESS=1 or WIND_SELFTEST=1 runs a plain build as before and logs a warning.
  • Docs: CLAUDE.md (build.bat no longer "runs anywhere"), chapter 11, installer/README.md.
  • Unchanged: builds signed with a real certificate, WindTray, WindConfig.

Verified

  • build.bat test: 629/629 (3 new).
  • Plain build: the "Wind can't start" dialog appears, and no UIAccess: refusing to start is logged.
  • Plain build with WIND_ALLOW_NO_UIACCESS=1: runs, and logs the override warning.
  • Signed UIAccess deploy (status=Valid): runs normally (token UIAccess=1), no refusal.
  • makensis /WX installer\wind.nsi with the LOCAL_SIGN branch compiled: exit 0.
  • Not tested: the signing-failure dialog at install time, because it needs signing to actually fail.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

… fix it (#460)

Without UIAccess Wind ran degraded (transform hover dead zones, no
magnifying over the shell or elevated windows) and only a log line said so.
Wind now reads its token's UIAccess bit before the single-instance claim and,
when it is off, shows "Wind can't start" with the fix and exits.
WIND_ALLOW_NO_UIACCESS=1 or WIND_SELFTEST=1 still run a plain dev build.

Setup's local-signing failure paths now say so and skip launching Wind,
instead of silently keeping a standard build that would not start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
@Maxaubert
Maxaubert merged commit 79bccb1 into main Oct 13, 2026
1 check passed
@Maxaubert
Maxaubert deleted the feat/require-uiaccess branch October 13, 2026 04:16
Maxaubert added a commit that referenced this pull request Oct 13, 2026
Setup no longer installs a build without UIAccess when local signing fails
(#460/#461): it stops with a message and Wind refuses to start. README,
release notes, installer README and both manifest comments now say so.
README Development gains WIND_ALLOW_NO_UIACCESS=1 and the UI test commands;
installer README lists user-localappdata.ps1 and notes the placeholder clip;
LICENSE names both installer filenames.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
Maxaubert added a commit that referenced this pull request Oct 13, 2026
… docs/history) (#466)

* docs: drop the no-UIAccess fallback promise, document dev runs

Setup no longer installs a build without UIAccess when local signing fails
(#460/#461): it stops with a message and Wind refuses to start. README,
release notes, installer README and both manifest comments now say so.
README Development gains WIND_ALLOW_NO_UIACCESS=1 and the UI test commands;
installer README lists user-localappdata.ps1 and notes the placeholder clip;
LICENSE names both installer filenames.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs: engines switch live, no restart

Since #455 both engines are always built and `model` applies on the config
reload; Wind relaunches only when one engine failed to init. Fix ch 01, 02
and 08, the VERIFICATION items (plus a new one for the UIAccess refusal
dialog) and rewrite the HITCH-FINDINGS configuration table to the current
pick rules. The mpoNearestGuard comment said "restart to apply", but the key
is read on every config load.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs(09): complete the bridge table, drop the dead MPO paragraph and mock hooks

Add openRepo and restartFailed from HandleWebMessage, remove the highres
mpoLive/mpoStaged paragraph (that UI is gone since #369/#454), and replace the
mock hooks that no longer exist with the ones the specs use. Drop the
hard-coded spec count and the stale "CI runs only doctest" claim.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs: source map, key reference and tools index catch up with the code

Ch 01 source map gains uiaccess_gate.h, render_params.cpp, upscale_*,
mpo_boot_logic.h, game_cursor.h and pan_glide.h. Ch 08 gains trackMarginPct,
zoomTrace, mpoNearestGuard (hot) and recenterMods. Ch 12 lists
mag_formula_probe.ps1, mag_trackmode_probe.ps1 and upscale_testcard.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs: move closed investigations to docs/history

NATIVE-MAGNIFIER-STOMP, PERF-ACRYLIC-PARITY-2026-08-21, POINTER-HITTEST-FINDINGS
and SHELL-PANEL-CURSOR-FINDINGS are closed; they move to docs/history/ with a
one-line index. Every link (chapters, the docs index, code comments) is
repointed. SHELL-PANEL-CURSOR-FINDINGS now opens as a historical record
instead of describing the removed freeze in the present tense. The
architecture README explains the missing chapter 10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs: frozen-history rule for specs and design, trim unreferenced mockups

CLAUDE.md now says new plans are not committed and docs/specs, docs/design and
docs/history are frozen history cited from code; docs/specs gets a README
saying so. The pure-test rule in CLAUDE.md matches doc 11 (straddle files,
thin Win32 I/O headers), and doc 11 lists tray_pin_logic and drops its stale
spec count. Delete the 17 docs/design PNGs nothing references, and drop the
-light.png mentions (light mode was removed in #325) from the two specs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

* docs(notices): add NSIS and its LZMA compression module

The setup stub and its plug-ins ship inside Wind-Setup-x64.exe. NSIS is
zlib/libpng; its LZMA module is CPL 1.0 with a linking exception (per NSIS's
COPYING), derived from the public-domain LZMA SDK.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.

Refuse to run without UIAccess, with a message that says how to fix it

1 participant