agentleFS
Simple-With-UsSimple-With-Us/BotFleet/.claude/skills/windows-release/SKILL.md

windows-release

Skill4 starsChanged 10 days agoApache-2.0View on GitHub

Hand-build and verify the Windows desktop package (NSIS installer + latest.yml) on a Windows machine. Windows desktop is no longer part of CI or releases (BF-2500), so use this only when the owner asks for a hand-built Windows package. Does not cover the macOS dmg/notarization flow.

  • Installs packages

4 other projects use a version of this, 3 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

3 rules. 1 is common, 0 are distinctive, and 2 are very specific to this project.

  • 1

    Common

    Most of the 3 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Common:

    No update popup appears on launch.

    line 79
  2. Very specific:

    No certificate is configured, so SmartScreen shows "unknown publisher" and users click More info → Run anyway.

    line 122
  3. Very specific:

    If signing is added later, it goes under win.signtoolOptions or win.azureSignOptions in electron-builder.yml — electron-builder 26 nests …

    line 126

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Windows release

BF-2500: retired from the release process. CI and release.yml no longer build or publish Windows (or Ubuntu) desktop packages, and a macOS release does not need a Windows counterpart. This runbook stays for hand-built packages only; skip Every release ships both for normal releases.

Ships BotFleet-<version>-setup.exe and its update feed to Simple-With-Us/BotFleet, the only publish target (see electron-builder.yml publish).

Scope: Windows only. The macOS build is a separate flow (dmg + notarytool + staple) that must run on a Mac. This skill never touches mac artifacts — but see Every release ships both before you finish.

Preconditions

  • Run on Windows. NSIS packaging from macOS needs Wine; don't.
  • Node 24+ (package.json engines). Node 23 builds fine but pnpm warns on every step and CI runs 24 — don't debug a runtime oddity on the wrong major.
  • pnpm via corepack pnpm. If corepack enable fails with EPERM (no admin), drop a pnpm.cmd shim containing @echo off / corepack pnpm %* somewhere on PATH — package:win chains pnpm build && … and needs bare pnpm to resolve.

1. Version

Bump version in package.json. It must match the tag on the GitHub release you upload to, and it becomes the version electron-updater compares against.

2. Build

pnpm install
pnpm typecheck
pnpm package:win

package:win deliberately omits build:speech — the dictation helper is a signed macOS Swift binary and has no Windows counterpart.

Output in release/:

FilePurpose
BotFleet-<version>-setup.exethe installer
latest.ymlthe update feed — see step 4
BotFleet-<version>-setup.exe.blockmapdifferential updates
BotFleet-<version>-x64.zipportable, not used by the updater

3. Verify before uploading

Three things silently produce a broken app if wrong. Check all three:

Test-Path release\win-unpacked\resources\server\index.js   # harness server
Test-Path release\win-unpacked\resources\ui\index.html     # built UI
Get-Content release\win-unpacked\resources\app-update.yml  # feed config
  • Missing server/index.js → utilityProcess.fork fails → the 🐭 "Couldn't start the bot server" page.
  • Missing ui/index.html → server has nothing to serve → black window.
  • app-update.yml must carry owner: Simple-With-Us / repo: BotFleet and, while the build is unsigned, must not contain publisherName — electron-updater would reject every update as untrusted.

Then smoke-test the installer itself. Run it, and confirm:

  1. It installs per-user with no UAC prompt and launches.
  2. The chat window renders (not the error page). Server logs land in %APPDATA%\BotFleet\logs\server.log.
  3. The model picker lists at least one provider — this exercises the .cmd-shim resolution in server/procs.ts, which only ever runs for real on Windows.
  4. No update popup appears on launch. Background check failures are silent by design; a popup here means that regressed.

4. Publish

Upload to the same tag as the macOS release for that version, so one release carries both platforms.

Copy-Item release/BotFleet-<version>-setup.exe release/BotFleet-setup.exe
gh release upload v<version> --repo Simple-With-Us/BotFleet `
  release/BotFleet-<version>-setup.exe `
  release/BotFleet-setup.exe `
  release/BotFleet-<version>-setup.exe.blockmap `
  release/latest.yml

Both names are required, for different consumers:

  • BotFleet-<version>-setup.exe is what latest.yml references by name and sha512. The auto-updater downloads exactly this.
  • BotFleet-setup.exe is a byte-identical copy that gives the README's /releases/latest/download/BotFleet-setup.exe button a stable URL. This mirrors BotFleet.dmg sitting beside BotFleet-<version>.dmg.

latest.yml is not optional

Without it every installed Windows app 404s on check and stays on its version forever. It is generated by package:win even under --publish never.

Never hand-edit it or carry one forward from a previous build. It pins the installer's sha512; a mismatch makes the updater download and then reject the update, which looks like "updates silently do nothing".

Every release ships both

Retired by BF-2500. This section used to require a Windows build with every macOS version. Releases are macOS-only now, so a version without a Windows build is expected, and latest.yml is no longer kept in step with latest-mac.yml. A hand-built Windows package is outside the CI-verified release set.

Known: the build is unsigned

No certificate is configured, so SmartScreen shows "unknown publisher" and users click More info → Run anyway. The README documents this. Auto-update still works because it's unsigned (no publisherName to verify against).

If signing is added later, it goes under win.signtoolOptions or win.azureSignOptions in electron-builder.yml — electron-builder 26 nests these; there is no top-level win.certificateFile. Once signed, keep the certificate subject stable forever, or list both old and new in publisherName; changing it strands every already-installed user.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.