Skip to content

Release Contract

.version is the human-maintained stable semantic version. The project version and remote_ssh_mcp.__version__ are exact mirrors. CHANGELOG.md contains one dated section for the current version with at least one entry. Ordinary post-release changes belong in Unreleased; they do not change any version mirror and do not invoke release publication.

For a released-product change, update .version, run make version-sync, and add the matching changelog section. make version-check rejects drift, duplicate or missing sections, malformed dates, and repository metadata mismatches. make release-notes renders the exact release body with a tag-stable link to this repository.

When a pull request changes CHANGELOG.md, repository automation copies the newest level-two section containing a bullet entry into one managed block in the pull-request body. Contributors may freely edit text outside the marker block; malformed or duplicate markers fail instead of replacing manual text.

On a direct push to main that changes .version, the release workflow first determines whether that commit already has an exact release. A new release reuses the complete CI workflow. A push that changes only source, tests, automation, documentation, or Unreleased notes cannot run publication. Only the final publication job receives contents: write; it creates or validates one exact-version tag and non-draft, non-prerelease release.

The release contains exactly the remote-ssh-mcp-linux-amd64 and remote-ssh-mcp-linux-arm64 executables produced and smoke-tested natively by the Ubuntu 26.04 CI jobs, plus SHA256SUMS.txt. Publication stages an exact draft, verifies uploaded sizes and hashes, and only then makes it public. A rerun may recover only a byte-identical draft; an unexpected asset, tag target, checksum, or release body fails closed.