|
262 | 262 | - **Device checks:** before testing, verify connected real devices (iOS/Android) before reaching for simulators/emulators. |
263 | 263 | - iOS Team ID lookup: `security find-identity -p codesigning -v` → use Apple Development (…) TEAMID. Fallback: `defaults read com.apple.dt.Xcode IDEProvisioningTeamIdentifiers`. |
264 | 264 | - A2UI bundle hash: `src/canvas-host/a2ui/.bundle.hash` is auto-generated; ignore unexpected changes, and only regenerate via `pnpm canvas:a2ui:bundle` (or `scripts/bundle-a2ui.sh`) when needed. Commit the hash as a separate commit. |
265 | | -- Release signing/notary keys are managed outside the repo; follow internal release docs. |
266 | | -- Notary auth env vars (`APP_STORE_CONNECT_ISSUER_ID`, `APP_STORE_CONNECT_KEY_ID`, `APP_STORE_CONNECT_API_KEY_P8`) are expected in your environment (per internal release docs). |
| 265 | +- Release signing/notary credentials are managed outside the repo; use the private [maintainer release docs](https://github.com/openclaw/maintainers/tree/main/release) for local setup and access notes. |
267 | 266 | - **Multi-agent safety:** do **not** create/apply/drop `git stash` entries unless explicitly requested (this includes `git pull --rebase --autostash`). Assume other agents may be working; keep unrelated WIP untouched and avoid cross-cutting state changes. |
268 | 267 | - **Multi-agent safety:** when the user says "push", you may `git pull --rebase` to integrate latest changes (never discard other agents' work). When the user says "commit", scope to your changes only. When the user says "commit all", commit everything in grouped chunks. |
269 | 268 | - **Multi-agent safety:** do **not** create/remove/modify `git worktree` checkouts (or edit `.worktrees/*`) unless explicitly requested. |
|
290 | 289 | - Release guardrails: do not change version numbers without operator’s explicit consent; always ask permission before running any npm publish/release step. |
291 | 290 | - Beta release guardrail: when using a beta Git tag (for example `vYYYY.M.D-beta.N`), publish npm with a matching beta version suffix (for example `YYYY.M.D-beta.N`) rather than a plain version on `--tag beta`; otherwise the plain version name gets consumed/blocked. |
292 | 291 |
|
293 | | -## NPM + 1Password (publish/verify) |
294 | | - |
295 | | -- Use the 1password skill; all `op` commands must run inside a fresh tmux session. |
296 | | -- Correct 1Password path for npm release auth: `op://Private/Npmjs` (use that item; OTP stays `op://Private/Npmjs/one-time password?attribute=otp`). |
297 | | -- Sign in: `eval "$(op signin --account my.1password.com)"` (app unlocked + integration on). |
298 | | -- OTP: `op read 'op://Private/Npmjs/one-time password?attribute=otp'`. |
299 | | -- Publish: `npm publish --access public --otp="<otp>"` (run from the package dir). |
300 | | -- Verify without local npmrc side effects: `npm view <pkg> version --userconfig "$(mktemp)"`. |
301 | | -- Kill the tmux session after publish. |
302 | | - |
303 | | -## Plugin Release Fast Path (no core `openclaw` publish) |
304 | | - |
305 | | -- Release only already-on-npm plugins. Source list is in `docs/reference/RELEASING.md` under "Current npm plugin list". |
306 | | -- Run all CLI `op` calls and `npm publish` inside tmux to avoid hangs/interruption: |
307 | | - - `tmux new -d -s release-plugins-$(date +%Y%m%d-%H%M%S)` |
308 | | - - `eval "$(op signin --account my.1password.com)"` |
309 | | -- 1Password helpers: |
310 | | - - password used by `npm login`: |
311 | | - `op item get Npmjs --format=json | jq -r '.fields[] | select(.id=="password").value'` |
312 | | - - OTP: |
313 | | - `op read 'op://Private/Npmjs/one-time password?attribute=otp'` |
314 | | -- Fast publish loop (local helper script in `/tmp` is fine; keep repo clean): |
315 | | - - compare local plugin `version` to `npm view <name> version` |
316 | | - - only run `npm publish --access public --otp="<otp>"` when versions differ |
317 | | - - skip if package is missing on npm or version already matches. |
318 | | -- Keep `openclaw` untouched: never run publish from repo root unless explicitly requested. |
319 | | -- Post-check for each release: |
320 | | - - per-plugin: `npm view @openclaw/<name> version --userconfig "$(mktemp)"` should be `2026.2.17` |
321 | | - - core guard: `npm view openclaw version --userconfig "$(mktemp)"` should stay at previous version unless explicitly requested. |
| 292 | +## Release Auth |
| 293 | + |
| 294 | +- Core `openclaw` publish uses GitHub trusted publishing; do not use `NPM_TOKEN` or the plugin OTP flow for core releases. |
| 295 | +- Separate `@openclaw/*` plugin publishes use a different maintainer-only auth flow. |
| 296 | +- Plugin scope is public: only publish already-on-npm plugins listed in [`docs/reference/RELEASING.md`](https://github.com/openclaw/openclaw/blob/main/docs/reference/RELEASING.md). |
| 297 | +- Maintainers: private 1Password item names, tmux rules, plugin publish helpers, and local mac signing/notary setup live in the private [maintainer release docs](https://github.com/openclaw/maintainers/tree/main/release). |
322 | 298 |
|
323 | 299 | ## Changelog Release Notes |
324 | 300 |
|
|
0 commit comments