diff --git a/README.md b/README.md index 34e9d64..29f4bac 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,10 @@ Missing pulse width still requires explicit resolution before executable import. The offline M1 reuse proofs now pass as one consolidated acceptance checkpoint: the Rayforge/MeerK40t path has deterministic mock encoding, fail-closed JCZ profile and parameter gates, list buffering, cancellation/recovery, layer and -recipe semantics, and a transport-free workflow preview. A reviewed Windows GTK -runtime and the packaged no-device workflow test remain outstanding. See the +recipe semantics, and a transport-free workflow preview. The Windows build +environment is installed and the pinned package has passed non-executing +verification; the packaged no-device workflow test remains outstanding. See the +[Windows build record](docs/research/windows-build-environment-2026-10-28.md), [Phase 0 status](docs/status/phase-0.md) and [Rayforge GUI preflight](docs/research/rayforge-windows-gui-preflight.md). @@ -85,8 +87,8 @@ release gate, not an architecture-decision gate; see The initial offline architecture spikes have passed. The next work remains hardware-free: -1. obtain or produce a reviewed Windows Rayforge build artifact without - installing a toolchain through this repository; +1. prepare the checksummed acceptance kit for the built and verified Windows + Rayforge artifact; 2. run and record the packaged no-device desktop interaction checklist; 3. promote only evidence-backed vector MOPA imports through the existing fail-closed review boundary; diff --git a/docs/CODEX_HANDOFF.md b/docs/CODEX_HANDOFF.md index 776fb6f..1521397 100644 --- a/docs/CODEX_HANDOFF.md +++ b/docs/CODEX_HANDOFF.md @@ -1,12 +1,20 @@ # Codex continuation brief -- Updated: 2026-10-26 -- Current focus: produce and accept the packaged Windows M1 checkpoint +- Updated: 2026-10-28 +- Current focus: accept the built and verified packaged Windows M1 checkpoint - Hardware access: prohibited - Automatic toolchain installation: prohibited ## Verified checkpoint +The operator-authorized local Windows build environment is now installed. +The pinned Windows checkpoint build and non-executing artifact verification +passed, as did consolidated M1 automated acceptance using UCRT64 Python. +The portable ZIP, installer, license sidecar and manifest are in ignored +`.build/artifacts/`. Packaged desktop interaction remains untested. See +[the build record](research/windows-build-environment-2026-10-28.md) for hashes, +runtime versions and unresolved dependency/image-format warnings. + The complete public unit-test suite and public-repository guard pass at this checkpoint. The offline Rayforge/MeerK40t evidence covers addon lifecycle, MOPA settings and units, layer and recipe semantics, JCZ record/list encoding, @@ -74,9 +82,8 @@ checkpoint; see M1 is not yet a packaged desktop checkpoint. Only these two result-oriented gates remain: -1. A Windows artifact for the pinned Rayforge revision must be produced on a - reviewed build runner, verified without execution, and pass the manual - no-device desktop checklist. +1. The locally built Windows artifact has passed non-executing verification; + it must still pass the manual no-device desktop checklist. 2. The known-working private JPT `.lbrn2` serialization and unit-contract gates are met for LightBurn 2.1.03 vector settings. Promotion still requires explicit resolution of absent pulse width, image equivalence and complete diff --git a/docs/research/windows-build-environment-2026-10-28.md b/docs/research/windows-build-environment-2026-10-28.md new file mode 100644 index 0000000..74ed105 --- /dev/null +++ b/docs/research/windows-build-environment-2026-10-28.md @@ -0,0 +1,77 @@ +# 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.