# Release Checklist Copy this into the release PR/issue and tick every box before promoting a draft release to `latest`. The goal: no broken build ever reaches users on either platform. See `RELEASE_RUNBOOK.md` for the how; this is the gate. ## Pre-build - [ ] `dev` is green and dogfooded; the release commit is chosen. - [ ] `electron/package.json` `version` bumped per semver (CONTRIBUTING.md). - [ ] `backend/requirements.lock` regenerated if `requirements.txt` changed, and committed alongside it. - [ ] Both `package-lock.json` files committed (frontend + electron). ## Build (both platforms, same commit) - [ ] macOS DMG built from the release commit (`bash publish.sh`), signed + notarized, both arches (arm64 + x64). - [ ] Windows EXE built from the same commit (push `v*` tag → CI, or `pwsh publish-win.ps1`), signed. - [ ] Provenance matches: launch each artifact, Settings → About → **Build** sha equals `git rev-parse HEAD` of the release commit (and they equal each other). ## Artifacts + feeds (promotion gate) - [ ] GitHub draft release for `v` has: `OpenSwarm-Setup-x64.exe`, `OpenSwarm-arm64.dmg`, `OpenSwarm-x64.dmg`, `latest.yml`, `latest-mac.yml`. - [ ] Promotion gate passes: `node scripts/release/verify-release.js --dir --expect-version --base-url https://github.com/openswarm-ai/openswarm/releases/download/v` (both feeds present, versions agree with each other and with package.json, every asset HEAD-resolves to 200). ## Dogfood on real target OSes (in production, signed) - [ ] Windows 11 x64: fresh install of the signed EXE, no SmartScreen block after signing, app boots, backend reaches ready, send one agent message (gets a response). Check `backend.log` `[provenance]` + `[perf]` lines. - [ ] Windows 10 x64: same. - [ ] macOS Apple Silicon (arm64), macOS 12+: fresh DMG install, no Gatekeeper block, boots, backend ready, one agent turn. - [ ] macOS Intel (x64), macOS 12+: same. - [ ] Auto-update: previous stable installed → this release detected, downloads, installs on quit, relaunches on the new version. Verify on both platforms. - [ ] Widevine DRM: in a Browser card open a Spotify playlist (or any DRM title) and confirm a track plays PAST the ~10s encrypted boundary and auto-advances, with no `[drm-diag] License response 500` in the logs. A signed-but-not-VMP build boots fine and only fails here, so this box catches it. Both platforms. ## Promote - [ ] All boxes above ticked. - [ ] Remove the draft flag (publish the release) — this is the only manual promote step; nothing auto-promotes. - [ ] Confirm `latest.yml` / `latest-mac.yml` are live (HEAD 200) post-publish. ## Rollback (if a regression surfaces post-promote) - [ ] Re-publish the previous release's feeds as latest, or cut a patch. - [ ] Tags are immutable (ruleset) — never move `v`; ship a new version.