ThePirateRay/docs/research/windows-build-environment-2026-10-28.md

3.8 KiB

Windows build environment, 2026-10-28

Scope

The operator explicitly authorized installing the Windows build environment. MSYS2 was installed at C:\msys64 through the MSYS2.MSYS2 winget package (installer version 20260927). The MSYS2 base was updated, including restarting the shell after the core runtime update. No controller interaction or packaged desktop acceptance was performed as part of this setup.

The source was fetched with scripts/prepare_rayforge_build.ps1 and verified against Rayforge commit c28918c87f8273dd1d244f5a057addc192807fa5. The pinned upstream scripts/win/win_setup.sh was reviewed and explicitly run in a UCRT64 shell. Repository scripts still do not install a toolchain implicitly.

Installed runtime

  • Python 3.14.9
  • GTK 4.24.1 and Libadwaita 1.10.0
  • GCC 16.2.0 and Rust 1.99.1
  • PyInstaller 6.22.3 and NSIS 3.13
  • Raygeo 1.66.0 and Raydriver 0.3.0, compiled locally
  • Cairo 1.18.4-4, selected by the pinned upstream setup script

The setup installs the upstream system-package set and its Python dependencies. Run shell-based setup and build commands with MSYSTEM=UCRT64 and CHERE_INVOKING=1; run them from the repository root to preserve the working directory. Source and outputs remain in the ignored .build cache.

Observations and validation

  • The 152 repository unit tests and public-repository guard passed before installation using a writable temporary directory.
  • The consolidated run_m1_no_device_acceptance.py report passed using the newly installed UCRT64 Python and the pinned Rayforge checkout.
  • Direct imports succeeded for GTK4, Libadwaita, Raygeo, Raydriver, Vtracer, Zeroconf, OpenCV, NumPy, SciPy, PyMuPDF and PyVips. This is an import check, not a successful desktop interaction test.
  • pip check exited with status 1, reporting that the Raygeo and Raydriver distributions are not supported on this platform. Both locally compiled modules imported successfully; the metadata/platform warning remains unresolved and must not be represented as a clean dependency check.
  • VIPS warned that its HEIF and ImageMagick modules could not load. Coverage of these image formats has not been established.
  • PyInstaller warned about missing scipy.special._cdflib; successful bundle creation alone does not establish coverage of that module.

The first package download hit a connection reset and succeeded on retry. The first Python wheel-build batch ran out of disk space while building Zeroconf. Temporary build cleanup allowed the automatic retry to complete. The new installation's downloaded pacman package cache was subsequently removed; installed packages were retained. Allow substantial temporary disk headroom beyond the roughly 5 GiB system-package installed-size estimate.

Produced checkpoint

scripts/build_rayforge_windows_checkpoint.ps1 completed successfully using the pinned source and staged no-device addon. Outputs under .build/artifacts/:

  • rayforge-vpirateray-c28918c87f82.zip: 354,161,221 bytes, SHA-256 8640244f54aebe5d043f33db2949842fa9cb5e14e74dd75ec91af4f6873f274c
  • rayforge-vpirateray-c28918c87f82-installer.exe: 258,711,163 bytes, SHA-256 a74620b3869803c755a9ffc20c35772e57ea2fef62bcf323ac971ae4a2aa8d5a
  • Rayforge-LICENSE.txt and rayforge-windows-checkpoint.json

The non-executing checkpoint verifier passed, including the exact 12-file addon set, ZIP path checks, license notices and artifact hashes. Its local report is rayforge-windows-verification.json. Binaries and local reports remain outside version control. No packaged application was launched.

Next gate

Prepare the checksummed acceptance kit from the passing verification report and checkpoint manifest, then complete the isolated no-device desktop checklist described in m1-no-device-acceptance.md. Neither setup nor automated acceptance closes the manual packaged-app gate or authorizes hardware access.