RELEASE.md
Rama main · réplica de lectura del repositorio original.
# Release Process
Chinese documentation: [RELEASE.zh-CN.md](./RELEASE.zh-CN.md)
OpenLinker Agent Node releases are cut from `main` after CI and local release
gates pass. Agent Node versions its Adapter host, CLI, helper, and public A2A
surface; the reliable Runtime implementation is pinned from `openlinker-go`.
Document notable changes under `Unreleased` in `CHANGELOG.md`.
## Pre-Release Checklist
1. Confirm `README.md` and `README.zh-CN.md` both present Agent Node as a
standalone bridge and public protocol-leaf owner over the Go SDK Runtime Worker, and that `CONTRIBUTING`,
`SECURITY`, `SUPPORT`, and examples are current.
2. Confirm `CHANGELOG.md` describes Adapter, helper, CLI, public A2A, and pinned
SDK integration changes.
3. Run `gofmt -w .`.
4. Run `go test ./...`.
5. Run `go build ./cmd/openlinker-agent-node`.
6. Run a current-source secret scan on a clean checkout, for example
`gitleaks dir --redact .`.
7. Confirm generated artifacts, `.env` files, coverage output, local binaries,
adapter logs, and private workspace files are not tracked.
8. Confirm Agent/helper token and mTLS examples use placeholders only.
9. Confirm `AgentNodeVersion`, the release tag, enrollment examples, and the
pinned `openlinker-go` compatibility notes agree.
10. Run `node --test scripts/build-agent-node.test.mjs` and the compiled command
tests. Package only through `scripts/build-agent-node.mjs`, which injects the
exact tag/commit; preserve the six-platform matrix and adjacent checksums.
11. **Supported release gate:** run
`node scripts/check-release-upgrade-readiness.mjs "$tag"` with the actual tag.
The sole stable candidate is `v0.2.0`; canonical `v0.x.y-alpha.N`,
`v0.x.y-beta.N` and `v0.x.y-rc.N` remain test prereleases. Other stable and
v1+ tags, malformed tags and missing/extra arguments fail. No environment
or workflow-input bypass exists. All six platform packages must pass; stable
publication additionally requires the root-owned controlled-upgrade gate on
the exact packaged Linux amd64 binary. Retain its report on the Release.
12. Record exact Core/SDK/Node versions. Same-identity changes are limited to the
version pair and scope in [controlled upgrade](docs/controlled-upgrade.md),
requiring Core v0.3.0/schema 095 and administrator-authorized drain, stop,
upgrade/restart operation, start and activation. macOS arm64 is verified
separately after downloading the release and is claimed only with that
binary's recorded evidence. Uncovered old versions use the explicit fresh
test enrollment procedure in [README.md](./README.md#candidate-build-identity-and-test-only-enrollment):
settle Attempts and spool, stop without deleting old state, then use a new
NodeID, new unbound active credential and new private SDK DataDir. Never
silently replace versions, clear state or automatically roll back. Ordinary
active same-version restart is separate from administrative drain recovery.
13. Before calling an environment verified, record real WebSocket and pull
enrollment, task execution, ordinary clean shutdown/restart and a further
task, not merely transport reconnect or source tests. Core-controlled
upgrade extensions are not a prerequisite for new test enrollment. Source
merge, release publication, deployment and online verification remain
separate facts; these checks do not themselves authorize publication.
## Tagging
Native isolation is experimental and restricted to trusted callers. Archives
stage both host-auth native-isolation guides with the binary; the existing
checksum covers those files. They no longer include the old SRT installer.
Run `node --test scripts/stage-native-sandbox.test.mjs` before packaging.
The installed official client remains trusted and is not attested by the Node
binary. Current host-auth source has macOS/Ubuntu CI evidence recorded in
`docs/host-auth-acceptance.md`; verify the actual release commit separately.
Real shared-login refresh and resource quotas remain open; Node serial admission
is cooperative, not account-wide exclusion. Do not label a prerelease safe for
untrusted callers or count historical SRT CI as host-auth acceptance.
For the HOME-lock update, stop old `/tmp`-lock Node processes and settle/stop
remaining clients before upgrade. Old and new locations do not coordinate. Native
serial deployments should use capacity 1 and share the underlying HOME state
storage; separate mounts with identical pathnames are insufficient.
Include this migration note in the release: moving from whole-client SRT to
host-auth mode starts a fresh workspace/native session once, retaining old
directories without copying or deleting them. Subsequent Runs reuse the new
scope. Later Bash-default hardening does not reset an existing host-auth scope.
Core history and Runtime enrollment/version migration are separate contracts.
After explicit publication approval and passing CI, choose the supported unused
release tag. For the reviewed stable candidate:
```bash
tag=v0.2.0
node scripts/check-release-upgrade-readiness.mjs "$tag"
git tag "$tag"
git push origin "$tag"
```
Breaking changes must be called out in `CHANGELOG.md`. Stable tags other than
`v0.2.0` and all v1+ releases remain blocked. Stable v0.2.0 is published without
the prerelease flag; alpha/beta/rc releases retain it. Non-tag workflow runs still build exact `sha-...`
artifacts and adjacent checksums for CI; they do not publish a GitHub Release.
The builder itself also accepts development and other exact version identities
for tests; successful local packaging is not release authorization.