# Windows Stage 7 unsigned-alpha release runbook Stage 7 produces one canonical Windows x64 payload distributed through a portable ZIP, a self-contained per-user EXE installer, WinGet manifests that point to that exact EXE, and npm. Every channel consumes the payload byte-for-byte; none rebuild it. The canonical payload includes the `skills/adh` agent reference skill. ZIP and installer, WinGet, ZIP, and npm consumers receive the same skill files covered by the payload manifest and SBOM; `scripts\windows\refresh.cmd` installs the verified payload to the stable product root. The payload also includes the Stage 8 daemon-owned persistent worker and native noninteractive CLI fast path. Package verification must exercise separate CLI processes that preserve the same session, worker generation, and globals. Authenticode is explicitly on hold for this alpha. The payload manifest records `code_signing.required=false` and the actual `signed` or `unsigned` state of every ADH executable. An unsigned payload is allowed, but mixed or invalid signing states are rejected. SHA-256 checksums, the payload manifest, SBOM, pinned runtime inputs, and clean-VM installation tests remain mandatory. Required release inputs: - Visual Studio Build Tools and Windows SDK for x64 - repository Rust toolchain and fixed `native/windows/target` - locked CPython/base-package cache, or network access to the pinned checksummed artifacts - Node.js 24 with npm 11 - a clean interactive Windows 11 24H2/build 26100 x64 VM with fixed `en-US`, 100% DPI, and an unlocked desktop No certificate or signing environment variables are required for the unsigned alpha. Build, verify, and package: ```powershell scripts/release/build-windows.ps1 -Offline scripts/release/verify-windows.ps1 scripts/release/package-windows.ps1 ``` The existing `scripts/release/sign-windows.ps1` is retained for later. When Authenticode resumes, configure the certificate, publisher, and RFC 3161 timestamp URL, run the signing step before verification, and use `verify-windows.ps1 -RequireAuthenticode` plus `package-windows.ps1 -RequireAuthenticode` to restore the fail-closed signed-release gate. Outputs: ```text dist/release/windows/x64/ canonical unsigned-alpha payload dist/release/windows/x64/skills/adh/ agent reference skill dist/release/symbols/windows/x64/ private PDB artifact dist/release/github/*.zip deterministic Windows ZIP dist/release/github/adh-windows-x64-installer.exe fixed-name self-contained per-user installer dist/release/github/adh-windows-x64-installer.exe.sha256 installer SHA-256 sidecar dist/release/github/install.ps1 checksummed download/install bootstrap dist/release/github/checksums.txt ZIP, installer, and bootstrap SHA-256 checksums dist/release/winget/manifests/ WinGet multi-file manifests dist/npm-staging/adh/ npm staging tree dist/release/npm/*.tgz exact tested/published npm package ``` The self-contained installer stores the canonical payload in bundle schema v2 with deterministic per-file raw DEFLATE compression. The manifest records each file's compressed size, uncompressed size, and SHA-256; the native installer bounds the declared total size, streams decompression into the staging directory, rejects trailing or truncated compressed data, and verifies every uncompressed file before activation. Compression changes only the delivery artifact, not the canonical installed payload. The local interactive gate is `scripts/e2e/windows-package-gate.ps1`. It checks release-mode Doctor readiness, first-usable conformance, canonical smoke cases, install-root immutability, native install/upgrade/uninstall rollback boundaries, running-process refusal, and npm lifecycle behavior. On a tag, the workflow publishes the tested assets as a prerelease candidate; a second clean VM downloads and executes the candidate's fixed-name `install.ps1`, which verifies the installer sidecar before installation, exercises the remote lifecycle, validates the WinGet manifests, and installs the same candidate through `winget install --manifest`. Only after both remote paths pass does the workflow promote the candidate to a normal latest release. The native installer defaults to per-user `%LOCALAPPDATA%\Programs\ADH`, writes only an `install.json`, `adh-uninstall.exe`, and the immutable canonical payload, and registers an HKCU uninstall entry. User data remains in `%LOCALAPPDATA%\ADH` and is never removed by uninstall. Release maintainers submit the generated version directory under `dist/release/winget/manifests/a/ADHProject/ADH/` to `microsoft/winget-pkgs` only after the remote candidate gate passes; once accepted, users install with `winget install --id ADHProject.ADH --exact`.