Release Checklist¶
This checklist is intended for the first public tagged releases and later release dry runs.
Reference workflows in the repository root:
.github/workflows/ci.yml— lint, typecheck, tests, audit, docs build, macOS unpackaged + packaged smoke validation, macOS/Linux packaging validation..github/workflows/docs.yml— strict MkDocs build + GitHub Pages deploy..github/workflows/release.yml— tag-driven release, signing preflight, checksums, provenance..github/workflows/monthly-maintenance.yml— monthly drift checks for dependencies and SDK compatibility.
Before tagging¶
Repository quality¶
-
pnpm test -
pnpm test:renderer -
pnpm typecheck -
pnpm lint -
pnpm perf:check - perf baseline environment is intentional; refresh
benchmarks/perf-baseline.jsonon the target CI runner withpnpm perf:baselineafter Node, runner OS, or workload changes -
git diff --check - working tree is clean
Documentation¶
-
mkdocs build --strict - published docs site reflects the latest merged docs changes
- README matches current product behavior
- config docs match
open-cowork.config.json - packaging and release docs match the workflows
-
docs/architecture.mdOpenCode SDK versions matchapps/desktop/package.json -
SECURITY.mdandSUPPORT.mdare current - medium-severity
pnpm audit --prodoutput has been reviewed manually if CI stayed green
Desktop app¶
- packaged app launches cleanly from a fresh build
- startup window appears reliably
- login/setup flow works
- home page loads (composer-first welcome surface)
- automations page loads (overview, create flow, inbox/runs visible when present)
- Pulse dashboard loads (runtime pills, metric cards, usage)
- charts render in packaged builds
- sandbox artifacts work
- custom MCP add/test flow works
- custom agent flow works
- Linux smoke walkthrough has been run locally or covered by CI for this release
Release configuration¶
- version numbers are correct across all workspace
package.jsonfiles - repository metadata and remotes point at the intended public
open-coworkrepo - first public release history-reset/squash decision is complete before making the repo public
- release workflows point at the correct package names and scripts
- macOS and Linux packaging scripts still match Electron Builder config
- release workflow is still tag-driven only
- signing/notarization configuration is present for the public release repo, or this is the explicitly documented unsigned
v0.xpublic preview withOPEN_COWORK_ALLOW_UNSIGNED_RELEASESenabled for that tag only - if
OPEN_COWORK_ALLOW_UNSIGNED_RELEASESwas enabled for an unsigned preview tag, the repository variable is scheduled to be unset immediately after the GitHub Release publishes - the release repo or fork has the signing inputs expected by the release workflow (
MAC_CERTIFICATE_P12_BASE64,MAC_CERTIFICATE_PASSWORD,APPLE_ID,APPLE_APP_SPECIFIC_PASSWORD,APPLE_TEAM_ID); a firstv*tag intentionally fails without those inputs unless the unsigned preview override is enabled - Linux artifacts are either signed with the current release policy or explicitly documented as unsigned and verified through
SHA256SUMS.txtplus GitHub provenance - release assets still include
SHA256SUMS.txt,THIRD_PARTY_NOTICES.md,THIRD_PARTY_LICENSES/, SBOMs, and provenance attestation - docs drift is acceptable for this release: the published Pages site tracks
master, not immutable versioned docs; decide on versioned docs before v0.2.0 - every
[Unreleased]changelog bullet has been checked against the app before moving it into the tagged release section -
CHANGELOG.md: rename the[Unreleased]heading to[X.Y.Z] - YYYY-MM-DDwith the tag version (without the leadingv) and tag date, then add a fresh empty[Unreleased]section above it for the next cycle -
CHANGELOG.mdrelease date equals the tag date - release notes drafted from the
[X.Y.Z]block (Added / Changed / Fixed / Removed)
Tagged release¶
- Create a version tag:
- Wait for the
Releaseworkflow to finish. - Verify the GitHub Release contains:
- macOS zip artifacts
- macOS dmg artifacts
- Linux AppImage artifacts
- Linux deb artifacts
SHA256SUMS.txt- Smoke-test at least one macOS build and one Linux build.
After release¶
- sanity-check downloads from the GitHub Release page
- verify checksums against
SHA256SUMS.txt - disable the
OPEN_COWORK_ALLOW_UNSIGNED_RELEASESrepository variable if it was enabled for an unsigned preview release - update any milestone or release tracking issue
- document known caveats if signing/notarization is still pending
Rollback and hotfix¶
If a public release goes out with a blocking issue:
- Edit the GitHub Release and mark it as a pre-release or delete the affected binary assets so new users stop downloading them.
- Add a short notice to the release body explaining the affected version, platforms, and workaround.
- Open a hotfix branch from
master, apply the smallest fix, and run the release validation commands from this checklist. - Bump to the next patch tag. Do not rewrite or re-push the broken public tag once users may have fetched it.
- Publish the patch release, verify checksums and provenance, then update the broken release body to point users at the fixed version.
- If the issue is security-sensitive, follow
SECURITY.mdfor advisory handling before posting public details.