Files
searchi/docs/WINDOWS-FIRST-RELEASE.md
T

125 lines
6.7 KiB
Markdown
Raw Normal View History

# First usable Windows build
Status: first Windows installer and portable package built and locally installed;
unsigned initial release, not production certification.
Other-platform and million-record benchmarks are deferred at Karl's request.
The normal Windows x64 distribution includes the same hardware-detecting native
Google worker, optimized/baseline CPU modules, Vulkan provider and loader, and
app-local Microsoft C++ runtime. It is not a special CPU distribution. VM
inference and WebView rendering checks force CPU/software operation. Real GPU
execution and clean-machine/older-CPU compatibility remain unexecuted.
## Build procedure
The checked-in Tauri bundle setting remains unchanged. An ignored temporary
override enables NSIS and the silent WebView2 download bootstrapper:
```json
{"bundle":{"active":true,"windows":{"webviewInstallMode":{"type":"downloadBootstrapper","silent":true}}}}
```
From `apps/desktop`, with one Cargo job:
```powershell
$env:CARGO_BUILD_JOBS = '1'
$env:SEARCHI_FORCE_CPU = '1'
$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--disable-gpu --disable-accelerated-video-decode'
npm run tauri -- build --features custom-protocol --bundles nsis --config ../../.searchi/qa/windows-first-release-config.json
```
The explicit `custom-protocol` feature is essential: this CLI invocation did
not add it automatically, and the first attempt correctly failed the release
guard before packaging. The successful artifact must contain the embedded
frontend rather than depend on a development server.
The portable ZIP is prepared from that same executable using
`python tools/package_windows.py`, which verifies normal CPU/GPU dependency
inventory, architecture, pinned decoder provenance and file hashes. Models,
personal settings and indexes are excluded. Managed Google assets download on
first use; cached, hash-verified assets are reused.
## Evidence to record before publication
- [x] Completed embedded-frontend Release build and source/frontend/executable hashes.
- [x] Portable ZIP member integrity and pinned decoder startup.
- [x] Extracted normal worker auto-to-CPU query and baseline-only fallback.
- [x] Extracted app starts outside the source checkout with isolated data and
model cache, and genuine local Google readiness/index generation.
- [x] Installer bytes/hash and generated resource mapping inspected.
- [ ] Execute installation/upgrade/uninstallation on a clean Windows machine.
## Executed Windows VM evidence, 2026-10-13
Source commit: `5eeba29`. The embedded frontend bundle is
`index-CtE-o2qW.js`, SHA-256
`deb3cdbeb4c4d34f17c0249674b37f7fd5cbdf7a01fef50c76d2eb50870817c5`.
Release compilation completed in 1m58s after dependencies were built.
| Artifact | Bytes | SHA-256 |
| --- | ---: | --- |
| Portable ZIP | 145,419,558 | `dbab40f77902a5183d986222fadd8417aa46f053ee6066d73a06e7f893692060` |
| Embedded-frontend executable | 23,950,336 | `9f9243e15dc7fc907c44af37e45226a24eed642a32e5dc82959fab92516ff564` |
| NSIS x64 installer | 98,894,969 | `1494372cfd9b87dd4de38fd347fe0d18f886a51542e2f49218699aa84979bb3d` |
The ZIP contains 39 individually hash-verified application/resource files. No
models, user settings or indexes are included. The normal worker SHA remains
`c01cb3ec13cfca722ee768e8350e1399a8b9a4d14a24a35adc3473a5cfc82a73`.
The real extracted worker ran its query role with 512 tokens, `device=auto`
and a child-only disabled Vulkan provider. It selected CPU, loaded no Vulkan
module and returned a finite normalized 768-dimensional Google code-query
vector. Optimized `ggml-cpu-cascadelake.dll` and baseline-only `ggml-cpu-x64.dll`
both passed, including a Unicode relocation directory. Startup/query/exit took
1.722s and 1.844s respectively; these are not warm-search or first-UI-input
benchmarks. The packaged pinned FFprobe helper also started successfully.
The extracted desktop launched outside the source tree with isolated settings,
data and hardlinked hash-verified Google assets. Two owned text/code fixtures
were indexed through the shared engine. The app automatically published actual
Google generation 1 with two chunks and a 6,544-byte ANN blob; publication was
observed 10.106s after launch. It remained alive for another five seconds. The
owned application process tree was then deliberately terminated. This proves
native process/setup/indexing operation, not visual interaction or paint timing.
Ignored raw evidence: `.searchi/qa/windows-first-preview-worker.json`,
`.searchi/qa/windows-first-preview-baseline.json`, and
`.searchi/packages/first-preview-qa-Gemäß_日本/result.json`.
The initial NSIS attempt failed after its official ZIP was downloaded and hash
verified, during tool extraction (`access denied`). A bundle-only retry uses
the cached compiler and preserves the verified executable bytes with
`--no-binary-patching`; it does not disable OS security or clear caches.
That retry completed successfully with official NSIS 3.11. Its generated
script installs app-local worker/CPU/GPU/decoder resources and downloads the
Microsoft WebView2 bootstrapper when needed. The produced installer is
`apps/desktop/src-tauri/target/release/bundle/nsis/searchi_0.1.0_x64-setup.exe`.
No installer was executed during this evidence run: even a custom destination
registers uninstall information and creates user shortcuts. User installation
is handled separately. There is no signing, clean-machine WebView2 download,
upgrade or uninstall claim.
Native visual interaction, fresh-machine WebView2 acquisition, installer
upgrade/uninstall, SmartScreen/signing and actual GPU performance remain
separate checks. A working preview does not close those production release gates.
## Local DEV-WIN11 installation
The installer was executed on the existing Windows 11 development machine.
Installation with an explicit `C:/Users/karl/Applications/searchi` destination
returned exit code zero; uninstall registration reports version 0.1.0 at that
location. The installed executable SHA matches the packaged executable above.
An explicit destination avoids this Codex MSIX host's AppData filesystem
virtualization. Existing local searchi data was preserved in an independent
`C:/Users/karl/.searchi/desktop` profile; both genuine Google assets were
hash-verified and hardlinked into the independent managed cache. No user folder
was selected automatically. The desktop launcher sets only process-local CPU
and software-WebView flags for this VM; the distributed package remains the
normal hardware-detecting build.
The installed app was started with a native `searchi` window (PID 7716, window
handle 8324222) and its packaged query worker (PID 19864), using one CPU thread
and the independent cache. A desktop shortcut was created. This demonstrates
local installation/startup and package selection, not a clean-machine test or
native visual interaction audit. The app is left running for Karl to use.