|
| 1 | +# v0.16.0 Rollout Checklist |
| 2 | + |
| 3 | +Step-by-step playbook for the v0.16.0 release. Each phase must complete before advancing to the next. |
| 4 | + |
| 5 | +## Phase 0: Pre-flight (before tagging) |
| 6 | + |
| 7 | +- [ ] Verify all package versions are `0.16.0`: |
| 8 | + - `apps/server/package.json` |
| 9 | + - `apps/desktop/package.json` |
| 10 | + - `apps/web/package.json` |
| 11 | + - `apps/mobile/package.json` |
| 12 | + - `packages/contracts/package.json` |
| 13 | +- [ ] Verify iOS `MARKETING_VERSION` matches in `project.pbxproj`. |
| 14 | +- [ ] Confirm `CHANGELOG.md` has `## [0.16.0] - 2026-04-05` entry. |
| 15 | +- [ ] Confirm `docs/releases/v0.16.0.md` exists with Summary, Highlights, Upgrade sections. |
| 16 | +- [ ] Confirm `docs/releases/v0.16.0/assets.md` exists with all artifact tables. |
| 17 | +- [ ] Confirm `docs/releases/README.md` includes v0.16.0 row. |
| 18 | +- [ ] Run the pre-release validator: |
| 19 | + ```bash |
| 20 | + node scripts/pre-release-validate.ts 0.16.0 |
| 21 | + ``` |
| 22 | +- [ ] Confirm the working tree is clean (`git status --porcelain` is empty). |
| 23 | +- [ ] Confirm you are on the `main` branch. |
| 24 | + |
| 25 | +### Secrets verification |
| 26 | + |
| 27 | +- [ ] Apple signing certificate (`CSC_LINK`, `CSC_KEY_PASSWORD`) is current and not expired. |
| 28 | +- [ ] Apple notarization API key (`APPLE_API_KEY`, `APPLE_API_KEY_ID`, `APPLE_API_ISSUER`) is valid. |
| 29 | +- [ ] Windows Azure Trusted Signing secrets are configured: |
| 30 | + - `AZURE_TENANT_ID`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET` |
| 31 | + - `AZURE_TRUSTED_SIGNING_ENDPOINT`, `AZURE_TRUSTED_SIGNING_ACCOUNT_NAME` |
| 32 | + - `AZURE_TRUSTED_SIGNING_CERTIFICATE_PROFILE_NAME`, `AZURE_TRUSTED_SIGNING_PUBLISHER_NAME` |
| 33 | +- [ ] iOS signing (`IOS_CERTIFICATE_P12`, `IOS_CERTIFICATE_PASSWORD`, `IOS_PROVISIONING_PROFILE`) is valid. |
| 34 | +- [ ] `NODE_AUTH_TOKEN` (npm) is active. |
| 35 | +- [ ] `RELEASE_APP_ID` and `RELEASE_APP_PRIVATE_KEY` (GitHub App for finalize) are set. |
| 36 | + |
| 37 | +### Quality gates |
| 38 | + |
| 39 | +All seven gates must pass with zero warnings: |
| 40 | + |
| 41 | +- [ ] `bun run fmt:check` |
| 42 | +- [ ] `bun run lint` |
| 43 | +- [ ] `bun run typecheck` |
| 44 | +- [ ] `bun run test` |
| 45 | +- [ ] `bun run --cwd apps/web test:browser` |
| 46 | +- [ ] `bun run test:desktop-smoke` |
| 47 | +- [ ] `bun run release:smoke` |
| 48 | + |
| 49 | +## Phase 1: Cut the RC |
| 50 | + |
| 51 | +- [ ] Run the release preparation script: |
| 52 | + ```bash |
| 53 | + node scripts/prepare-release.ts 0.16.0-rc.1 \ |
| 54 | + --full-matrix \ |
| 55 | + --summary "Right-panel diff review, editable code previews, stronger branch handling, and a more stable release train" |
| 56 | + ``` |
| 57 | +- [ ] Verify the `v0.16.0-rc.1` tag was created and pushed. |
| 58 | +- [ ] Verify `release.yml` workflow was triggered: |
| 59 | + - Actions URL: https://github.com/OpenKnots/okcode/actions/workflows/release.yml |
| 60 | +- [ ] Monitor the six-job pipeline: |
| 61 | + 1. `Preflight` — quality gates |
| 62 | + 2. `Desktop macOS arm64` — signed/notarized DMG |
| 63 | + 3. `Desktop Linux x64` — AppImage |
| 64 | + 4. `Desktop Windows x64` — signed NSIS installer |
| 65 | + 5. `iOS TestFlight` — archive and upload |
| 66 | + 6. `Publish CLI` — npm publish with `next` tag |
| 67 | + 7. `Publish GitHub Release` — prerelease with all artifacts |
| 68 | + 8. `Finalize` — version bump commit to main |
| 69 | + |
| 70 | +### Artifact verification (RC) |
| 71 | + |
| 72 | +- [ ] macOS arm64: Download DMG, verify Gatekeeper opens it without warning. |
| 73 | +- [ ] Linux x64: Download AppImage, verify it launches. |
| 74 | +- [ ] Windows x64: Download installer, verify it installs and launches. |
| 75 | +- [ ] CLI: `npx okcodes@0.16.0-rc.1 --version` returns `0.16.0-rc.1`. |
| 76 | +- [ ] CLI: `npx okcodes@0.16.0-rc.1 --help` renders help text. |
| 77 | +- [ ] CLI: `npx okcodes@0.16.0-rc.1 doctor --help` renders doctor help. |
| 78 | +- [ ] iOS: TestFlight build appears in App Store Connect within 30 minutes. |
| 79 | +- [ ] GitHub Release: Prerelease flag is set, "latest" flag is not set. |
| 80 | +- [ ] GitHub Release: All expected artifacts are attached (DMGs, AppImage, EXE, YMLs, blockmaps, docs). |
| 81 | + |
| 82 | +## Phase 2: RC Soak (48 hours) |
| 83 | + |
| 84 | +Start: ____-__-__T__:__Z |
| 85 | +End: ____-__-__T__:__Z |
| 86 | + |
| 87 | +### Soak exit criteria |
| 88 | + |
| 89 | +- [ ] No Sev-1 or Sev-2 issues filed during soak period. |
| 90 | +- [ ] No crash-on-launch on macOS arm64, Windows x64, or Linux x64. |
| 91 | +- [ ] Updater verification: Install v0.15.0 desktop app, verify it detects and applies the v0.16.0-rc.1 update. |
| 92 | +- [ ] TestFlight install succeeds on at least one device. |
| 93 | +- [ ] `npx okcodes@0.16.0-rc.1 --version` still works at end of soak. |
| 94 | + |
| 95 | +### Feature-specific soak testing (v0.16.0) |
| 96 | + |
| 97 | +These checks validate the high-risk surface area introduced in this release: |
| 98 | + |
| 99 | +- [ ] **Right-panel diff viewer**: Open a thread with file changes, verify diffs render in the right panel. Toggle between files. Verify panel defaults and opening behavior. |
| 100 | +- [ ] **Editable code preview**: Open a code preview, make edits, verify autosave persists. Reload the app, verify edits survived. |
| 101 | +- [ ] **Rebase-before-commit flow**: Create a branch that has diverged from main. Trigger commit with rebase enabled. Verify conflicts are surfaced if they exist. Verify clean rebase completes. |
| 102 | +- [ ] **GitHub repo cloning**: Clone a public repo via the entry point. Clone a private repo (verify auth flow). Verify the cloned repo opens in a thread. |
| 103 | +- [ ] **Provider session restart on CWD change**: Start a session, then switch the active worktree. Verify the provider session restarts cleanly without user intervention. |
| 104 | +- [ ] **Shell env sanitization**: Set unusual environment variables (e.g., modified `PATH`, `NODE_OPTIONS`). Launch an agent session. Verify the session starts without inheriting unsafe env. |
| 105 | +- [ ] **Build metadata**: Verify the web UI displays the correct build version and commit hash. Verify the server reports matching metadata. |
| 106 | + |
| 107 | +### iOS TestFlight device checks |
| 108 | + |
| 109 | +Run on two devices: one current-generation and one older-generation supported device. |
| 110 | + |
| 111 | +Device 1: ______________ (iOS __.__) |
| 112 | +Device 2: ______________ (iOS __.__) |
| 113 | + |
| 114 | +- [ ] Pair the mobile companion with a desktop/server instance. |
| 115 | +- [ ] Restore a previously saved pairing. |
| 116 | +- [ ] Open a thread and send a follow-up message. |
| 117 | +- [ ] Approve an action and answer a user-input request. |
| 118 | +- [ ] Background the app, wait 30 seconds, foreground it. |
| 119 | +- [ ] Receive a notification and tap it to return to the thread. |
| 120 | + |
| 121 | +### If soak fails |
| 122 | + |
| 123 | +If any blocker is found during the soak period: |
| 124 | +1. Fix the issue on `main`. |
| 125 | +2. Cut `v0.16.0-rc.2` with the fix included. |
| 126 | +3. Restart the 48-hour soak from the beginning. |
| 127 | +4. Do NOT promote a failed RC to stable. |
| 128 | + |
| 129 | +## Phase 3: Promote to Stable |
| 130 | + |
| 131 | +Only after the 48-hour soak completes with all exit criteria met. |
| 132 | + |
| 133 | +- [ ] Verify the RC commit is the same commit that will be promoted (no new commits needed). |
| 134 | +- [ ] Run the promotion: |
| 135 | + ```bash |
| 136 | + node scripts/prepare-release.ts 0.16.0 \ |
| 137 | + --full-matrix \ |
| 138 | + --summary "Right-panel diff review, editable code previews, stronger branch handling, and a more stable release train" |
| 139 | + ``` |
| 140 | +- [ ] Verify the `v0.16.0` tag was created on the same commit as `v0.16.0-rc.1`. |
| 141 | +- [ ] Monitor all six workflow jobs to completion. |
| 142 | + |
| 143 | +### Artifact verification (stable) |
| 144 | + |
| 145 | +- [ ] macOS arm64 DMG: Launches, Gatekeeper passes. |
| 146 | +- [ ] Linux x64 AppImage: Launches. |
| 147 | +- [ ] Windows x64 installer: Installs and launches. |
| 148 | +- [ ] CLI: `npm install -g okcodes@0.16.0` succeeds. |
| 149 | +- [ ] CLI: `okcodes --version` returns `0.16.0`. |
| 150 | +- [ ] iOS: New TestFlight build appears. |
| 151 | +- [ ] GitHub Release: "latest" flag is set, prerelease flag is not set. |
| 152 | +- [ ] GitHub Release: Release notes body matches `docs/releases/v0.16.0.md`. |
| 153 | +- [ ] Updater: v0.15.0 desktop app detects and applies the v0.16.0 stable update. |
| 154 | + |
| 155 | +## Phase 4: Post-release |
| 156 | + |
| 157 | +- [ ] Verify `finalize` job pushed version bump commit to `main`. |
| 158 | +- [ ] Verify `main` branch has `chore(release): prepare v0.16.0` commit. |
| 159 | +- [ ] Trigger Intel compatibility build (optional, non-blocking): |
| 160 | + ```bash |
| 161 | + gh workflow run release-intel-compat.yml -f version=0.16.0 |
| 162 | + ``` |
| 163 | +- [ ] Update any external documentation or announcements referencing the new version. |
| 164 | +- [ ] Close any GitHub issues resolved by this release. |
| 165 | +- [ ] Monitor error reporting and community channels for 24 hours post-release. |
| 166 | + |
| 167 | +## Timeline |
| 168 | + |
| 169 | +| Phase | Duration | Starts after | |
| 170 | +| ----- | -------- | ------------ | |
| 171 | +| Pre-flight | ~30 min | Decision to release | |
| 172 | +| Cut RC | ~45 min | Pre-flight passes | |
| 173 | +| RC Soak | 48 hours | All RC artifacts verified | |
| 174 | +| Promote to stable | ~45 min | Soak exit criteria met | |
| 175 | +| Post-release monitoring | 24 hours | Stable artifacts verified | |
| 176 | + |
| 177 | +Total time from decision to stable: ~3 days minimum. |
0 commit comments