What this is
A Windows-native install path for weighted-compact: a WinGet manifest pointing at a PyInstaller-built portable executable, with a Windows Scheduled Task XML mirroring the systemd timer for the nightly REM pass. Docker (docs/docker-install.md) remains an option; this issue adds a no-Docker path.
Architectural answer (pre-set)
Primary target: WinGet
- A WinGet manifest (
manifests/z/zzallirog/weighted-compact/) that references a GitHub release artifact: weighted-compact.exe built by PyInstaller from the PyPI package.
- PyInstaller produces a single-file portable executable (
--onefile). It bundles the Python runtime and all deps except sentence-transformers model weights (those download on first use to the user's cache dir — this is existing behavior, not new).
- The executable is released via GitHub Actions on each tagged release and attached to the GitHub release as an asset. The WinGet manifest references the asset URL + SHA256.
MSI: secondary, optional. If a contributor wants to add a WiX-based MSI wrapping the same exe, that's welcome but not required for the initial cut.
Scheduled Task XML:
<Task>
<Triggers><CalendarTrigger><StartBoundary>2026-01-01T04:00:00</StartBoundary><ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay></CalendarTrigger></Triggers>
<Actions><Exec><Command>weighted-compact.exe</Command><Arguments>rem-pass</Arguments></Exec></Actions>
</Task>
Installed via schtasks /create /xml in the install instructions, not auto-created by the installer. The user runs the command explicitly.
%APPDATA%\weighted-compact\ is the Windows equivalent of $XDG_DATA_HOME/weighted-compact/. config.py must map APPDATA on Windows — confirm this is handled or add it as part of the PR scope.
Open question for the contributor
- Bundle Python or require it in PATH: PyInstaller
--onefile bundles everything (~50–80 MB for the base package without model weights). The alternative is requiring python >= 3.11 in PATH and installing via pip. PyInstaller removes the Python prerequisite entirely and is more beginner-friendly. Recommend a choice and justify in the PR description.
config.py Windows path mapping: does config.py currently handle APPDATA / LOCALAPPDATA on Windows, or does it only handle XDG? If not, this issue must include the fix. Check config.py and report in your first comment on this issue before implementing.
- GitHub Actions builder: the PyInstaller build should run in a Windows runner (
windows-latest) in CI on tag push. Adding this workflow is in scope for this issue.
Where to start
weighted_compact/config.py — check XDG fallback behavior on non-Linux platforms.
pyproject.toml — deps that PyInstaller needs to bundle.
systemd/ — the timer unit to mirror as a Scheduled Task XML.
- WinGet manifest spec — the YAML format.
docs/docker-install.md — the existing alternative install path, for contrast.
What NOT to do
- Do not add telemetry, crash reporting, or auto-update mechanisms to the installer.
- Do not auto-create the Scheduled Task — require explicit user opt-in.
- Do not add a network listener or cloud sync path to the Windows build.
- Do not bundle model weights in the installer — let them download on first use to the user's cache.
Skill level
Medium — Windows packaging (PyInstaller, WinGet manifests) + GitHub Actions experience. The Python code needs a small config.py patch for the Windows data path; everything else is packaging infrastructure.
What this is
A Windows-native install path for weighted-compact: a WinGet manifest pointing at a PyInstaller-built portable executable, with a Windows Scheduled Task XML mirroring the systemd timer for the nightly REM pass. Docker (
docs/docker-install.md) remains an option; this issue adds a no-Docker path.Architectural answer (pre-set)
Primary target: WinGet
manifests/z/zzallirog/weighted-compact/) that references a GitHub release artifact:weighted-compact.exebuilt by PyInstaller from the PyPI package.--onefile). It bundles the Python runtime and all deps exceptsentence-transformersmodel weights (those download on first use to the user's cache dir — this is existing behavior, not new).MSI: secondary, optional. If a contributor wants to add a WiX-based MSI wrapping the same exe, that's welcome but not required for the initial cut.
Scheduled Task XML:
Installed via
schtasks /create /xmlin the install instructions, not auto-created by the installer. The user runs the command explicitly.%APPDATA%\weighted-compact\is the Windows equivalent of$XDG_DATA_HOME/weighted-compact/.config.pymust mapAPPDATAon Windows — confirm this is handled or add it as part of the PR scope.Open question for the contributor
--onefilebundles everything (~50–80 MB for the base package without model weights). The alternative is requiringpython >= 3.11in PATH and installing viapip. PyInstaller removes the Python prerequisite entirely and is more beginner-friendly. Recommend a choice and justify in the PR description.config.pyWindows path mapping: doesconfig.pycurrently handleAPPDATA/LOCALAPPDATAon Windows, or does it only handle XDG? If not, this issue must include the fix. Checkconfig.pyand report in your first comment on this issue before implementing.windows-latest) in CI on tag push. Adding this workflow is in scope for this issue.Where to start
weighted_compact/config.py— check XDG fallback behavior on non-Linux platforms.pyproject.toml— deps that PyInstaller needs to bundle.systemd/— the timer unit to mirror as a Scheduled Task XML.docs/docker-install.md— the existing alternative install path, for contrast.What NOT to do
Skill level
Medium — Windows packaging (PyInstaller, WinGet manifests) + GitHub Actions experience. The Python code needs a small
config.pypatch for the Windows data path; everything else is packaging infrastructure.