This guide describes how to maintain a shipped OpenHive release while main
continues moving toward the next version.
The goal is simple:
- keep released versions stable
- keep
mainfree to evolve - move bug fixes between those lines in a controlled way
Use these branch types consistently:
main— active development for the next minor or major versionrelease/0.9-preview— maintenance branch for all shipped0.9.xpreview patcheshotfix/0.9.1-preview-<short-name>— short-lived bug-fix branch cut fromrelease/0.9-preview
For OpenHive, main is expected to carry larger runtime, sandbox, memory, and
platform changes that are not safe to push into a shipped patch release.
Treat the released line and the active development line separately.
- Fix released-user bugs on the release branch first
- Then forward-port the fix to
main - Do not merge
mainback intorelease/0.9-preview
This matters especially in OpenHive because main can contain unfinished
architecture work that should not leak into a patch release.
git checkout main
git pull --ff-only
git tag 0.9.0-preview
git push origin main
git push origin 0.9.0-previewgit checkout -b release/0.9-preview
git push origin release/0.9-previewAfter this point:
maincontinues toward1.0+release/0.9-previewreceives only patch-safe fixes
When a shipped 0.9.x preview bug is reported:
git checkout release/0.9-preview
git pull --ff-only
git checkout -b hotfix/0.9.1-preview-fix-<short-name>A patch release should prefer:
- regression tests
- bug fixes
- doc corrections
- tiny compatibility fixes
Avoid bundling:
- refactors
- schema churn
- new features
- broad runtime or policy changes
git checkout release/0.9-preview
git merge --no-ff hotfix/0.9.1-preview-fix-<short-name>
git push origin release/0.9-previewgit tag 0.9.1-preview
git push origin 0.9.1-previewAfter the release-branch fix is merged, copy it into main.
Prefer cherry-pick over merging the whole maintenance branch:
git checkout main
git pull --ff-only
git cherry-pick -x <fix-commit-sha>
git push origin mainWhy cherry-pick -x:
- it moves only the bug fix
- it avoids pulling release-only decisions into
main - it leaves a trace back to the original commit
The -x flag records the source commit in the message so later audits are easy.
Sometimes a bug is discovered and fixed on main first.
Only backport that fix to release/0.9-preview if all of the following are true:
- the bug affects shipped
0.9.xpreview users - the fix does not depend on unreleased architecture
- the fix can land without bringing in risky behavior changes
If those conditions hold, use:
git checkout release/0.9-preview
git pull --ff-only
git cherry-pick -x <main-fix-commit-sha>If the main fix depends on broader unreleased work, do not force it into the
release branch. Instead, implement a smaller release-safe fix directly on
release/0.9-preview.
Ask two questions:
- Does this affect the shipped release?
- Can it be fixed safely on the old code path?
Use this matrix:
- Yes / Yes — fix
release/0.9-previewfirst, then forward-port tomain - No / n/a — fix only
main - Yes / No — create a smaller release-safe fix on
release/0.9-preview, keep the broader solution onmain
Allowed:
- bug fixes
- regression tests
- documentation corrections
- tiny build or packaging fixes
Not allowed unless there is a release-blocking reason:
- new features
- API contract changes
- broad refactors
- sandbox/runtime architecture work
- container-orchestration or multi-IM expansion work
For OpenHive's current preview line, this means issues in the active runtime
and sandbox tracks stay on main unless they directly block a 0.9.x
preview patch.
For every patch fix:
- note whether it targets the
0.9.xpreview line,main, or both - link the bug report or issue
- state whether the change still needs a forward-port or backport
- include the regression test when practical
Useful conventions:
- PR title:
hotfix: fix preview dashboard login redirect - Branch:
hotfix/0.9.1-preview-fix-login-redirect - Follow-up PR:
forward-port: login redirect fix from release/0.9-preview
Before tagging a 0.9.x preview patch:
- relevant regression tests pass
cd web && npm testpasses if the fix touches dashboard codecd web && npm run buildpasses if the fix touches dashboard code- docs are updated if operator behavior changed
- the same fix has a tracked plan for
main
Avoid these:
- merging
mainintorelease/0.9-preview - letting hotfix branches accumulate unrelated cleanup
- delaying the forward-port until the context is forgotten
- backporting a large
mainrefactor just to get one small fix
# release branch hotfix
git checkout release/0.9-preview
git pull --ff-only
git checkout -b hotfix/0.9.2-preview-fix-build-docs
# edit, test, commit
git commit -m "Fix preview docs and dashboard build workflow"
git checkout release/0.9-preview
git merge --no-ff hotfix/0.9.2-preview-fix-build-docs
git tag 0.9.2-preview
git push origin release/0.9-preview
git push origin 0.9.2-preview
# forward-port to main
git checkout main
git pull --ff-only
git cherry-pick -x <hotfix-commit-sha>
git push origin main