Code of Conduct
What article on docs.github.com is affected?
Managing releases in a repository, the note under "Editing a release".
What part(s) of the article would you like to see updated?
The note reads:
If you have enabled immutable releases for your repository, you can only edit the title and release notes after a release is published.
prerelease and make_latest are editable too, so the allowlist is wrong. It also contradicts Immutable releases, which lists the enforced protections as exactly two: Git tags cannot be moved, and release assets cannot be modified or deleted.
Measured on a repository with immutable releases enabled, against a published prerelease carrying one asset:
| Action |
Result |
PATCH /repos/{owner}/{repo}/releases/{release_id} with prerelease=false and make_latest=legacy |
accepted; the release stays "immutable": true, is no longer a prerelease, and make_latest is honored |
| edit the title and notes |
accepted |
| upload an asset |
422 Cannot upload assets to an immutable release |
| delete an asset |
Cannot delete asset from an immutable release |
| move the tag |
[remote rejected] push declined due to repository rule violations |
Read literally, the note says a published prerelease can never be promoted to stable under immutable releases. That would rule out publishing a prerelease, verifying the published assets by downloading them the way a user does, and only then clearing the prerelease flag — a draft release is not public, so the download path a consumer uses cannot be exercised before publication. The note discourages a release process that immutability in fact supports.
Suggested wording, a denylist matching the concepts page:
If you have enabled immutable releases for your repository, you cannot add, replace, or delete assets, or move the tag, after a release is published. Other details can still be edited, including the title, the release notes, and whether the release is a prerelease or the latest release.
Additional information
To reproduce: enable immutability on a throwaway repository with gh api repos/OWNER/REPO/immutable-releases -X PUT, publish a prerelease with an asset, then attempt each action above.
Scope of the measurement: name, body, prerelease and make_latest were tested. I did not test tag_name, target_commitish, draft or discussion_category_name on an immutable release.
Code of Conduct
What article on docs.github.com is affected?
Managing releases in a repository, the note under "Editing a release".
What part(s) of the article would you like to see updated?
The note reads:
prereleaseandmake_latestare editable too, so the allowlist is wrong. It also contradicts Immutable releases, which lists the enforced protections as exactly two: Git tags cannot be moved, and release assets cannot be modified or deleted.Measured on a repository with immutable releases enabled, against a published prerelease carrying one asset:
PATCH /repos/{owner}/{repo}/releases/{release_id}withprerelease=falseandmake_latest=legacy"immutable": true, is no longer a prerelease, andmake_latestis honoredCannot upload assets to an immutable releaseCannot delete asset from an immutable release[remote rejected] push declined due to repository rule violationsRead literally, the note says a published prerelease can never be promoted to stable under immutable releases. That would rule out publishing a prerelease, verifying the published assets by downloading them the way a user does, and only then clearing the prerelease flag — a draft release is not public, so the download path a consumer uses cannot be exercised before publication. The note discourages a release process that immutability in fact supports.
Suggested wording, a denylist matching the concepts page:
Additional information
To reproduce: enable immutability on a throwaway repository with
gh api repos/OWNER/REPO/immutable-releases -X PUT, publish a prerelease with an asset, then attempt each action above.Scope of the measurement:
name,body,prereleaseandmake_latestwere tested. I did not testtag_name,target_commitish,draftordiscussion_category_nameon an immutable release.