Skip to content

[INSTALL-08] [P2] Publish Semaprax to WinGet using the existing portable Windows ZIP #558

Open

Description

@wsdt

Goal

Windows developers should be able to use winget install, upgrade and uninstall for the released CLI/daemon without manually extracting archives.

Priority: P2 · Classification: New package-manager distribution channel

Reviewed baseline: main 56ad6438653f, 6 October 2026. Published distribution inspected: v0.8.0 (CLI build commit 615e501). Recheck these installation surfaces against the current branch before implementing.

Current behavior and evidence

The existing Windows x64 release ZIP already contains both executable files. No WinGet manifest or supported WinGet command was found in the Semaprax source/docs or the complete GitHub issue inventory.

WinGet supports a ZIP whose nested executable entries are portable commands. That offers a small path to a managed installation using the existing distribution; a separate MSI wizard is not required for this scope.

Marketplace publication of the VS Code extension is a separate held issue and must not be mixed with Windows CLI package registration.

Implementation scope

  1. Verify a canonical publisher/package identity, proposed Wavect.Semaprax, against the current community repository before registering it. Add maintainable manifest generation to the Semaprax release tooling.
  2. Use the current WinGet ZIP/portable manifest schema. Map the real archive-relative semaprax.exe and semapraxd.exe paths to their command aliases, retain the required package files, and pin the exact versioned ZIP URL and InstallerSha256.
  3. Declare the tested minimum Windows version and x64 architecture. Prefer user scope where supported and do not claim native ARM64 support from x64 compatibility/emulation alone.
  4. Validate and install the manifest locally, then complete the community repository submission and verify that the normal public command can resolve it. A local YAML file or submitted PR by itself is not public availability.
  5. Automate generation/update from each successfully published release's canonical metadata. Keep a clear pending/accepted state for externally reviewed channel updates; do not publish README instructions for a version the public index cannot install.
  6. Document winget install --id Wavect.Semaprax --exact, the corresponding upgrade and uninstall commands, using the actually accepted identity. Let WinGet own lifecycle management and keep a bootstrap/manual install from overwriting its files.
  7. Preserve the paired CLI/daemon version and make command alias/PATH behavior work in a new terminal. An install test must check that both executable targets refer to the same package version.

Acceptance criteria

  • A fresh supported Windows x64 account can install with the public exact-ID command after the manifest is accepted/indexed.
  • The package validates under the selected current WinGet schema and installs both portable commands from their actual nested ZIP paths.
  • new/check/test/run succeeds with result 42 from an arbitrary user directory, and the daemon is present and usable through its supported invocation.
  • Upgrade and uninstall behave correctly; no stale command alias points at the previous version.
  • The manifest uses a fixed version URL and matching checksum, with minimum OS/architecture claims backed by testing.
  • Until public availability is verified, channel status remains pending and the existing manual/PowerShell route stays the documented working alternative.

Verification

  • Run winget validate, local-manifest installation in Windows Sandbox or an equivalent clean account, meaningful starter-project checks, upgrade and uninstall.
  • Inspect both command aliases and installed payload paths; test a path with spaces and a prior manual installation.
  • After publication, verify the public package source resolves the exact accepted ID/version without relying on a local manifest.

Existing issues and boundaries

  • No WinGet issue/PR body was found in the complete reviewed inventory.
  • #253 remains held and is unrelated to this CLI package distribution.
  • INSTALL-03 is a complementary PowerShell route, not a prerequisite for a portable WinGet manifest; both must preserve the same release payload.

Delivery notes

Implement in the existing owning modules and test harnesses. Follow AGENTS.md and the relevant release/editor contracts. Keep fixes focused, preserve unrelated behavior, and attach the actual verification results. Do not replace existing signing, publication, project generation or harness setup with a second system.

Activity

  1. wsdt commented on Oct 6, 2026

    @wsdt
    MemberAuthor

    Progress (issue stays open until the public index serves the package): generator fixes in main (quoted ShortDescription; no Scope for portable). Wavect.Semaprax 0.8.0 manifests validated on windows-2025 (https://github.com/wavect/semaprax/actions/runs/37454638162): winget validate clean; install from manifest verified the hash and created both portable aliases resolving into the same v0.8.0 package directory; from a directory with spaces semaprax new/check/test/run printed 42; semapraxd answered JSON-RPC over --stdio; uninstall removed both aliases; --location with spaces works. Submitted: microsoft/winget-pkgs#447495 (awaiting Microsoft validation/review and the CLA). Remaining: once indexed, verify winget install/upgrade/uninstall --id Wavect.Semaprax --exact from the public source, then mark packaging/channels.json winget published and add the guide section.

  2. wsdt commented on Oct 11, 2026

    @wsdt
    MemberAuthor

    Updated the existing submission to v0.9.0: microsoft/winget-pkgs#447495 (head 7cce7c45fdb03ad5543458df3bc0808df4994d68). All local-manifest Windows validation, v0.8.0-to-v0.9.0 upgrade, both portable alias identities, installed starter result 42, daemon stdio and receipt-owned removal passed in https://github.com/wavect/semaprax/actions/runs/38156173827. The public Microsoft package path remains unavailable, so this issue and packaging/channels.json stay pending. After acceptance/indexing, the public exact-ID install/upgrade/uninstall must still be verified before closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions