mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-01 21:10:13 +00:00
7.4 KiB
7.4 KiB
Pulse v6 Release Promotion Policy
This document defines how Pulse v6 and later releases move from development to customer-facing availability. It is the release-trust contract for Pulse Pro, Cloud, and self-hosted production users.
Goals
- Stable customers must not become the first test cohort for new changes.
- Development speed must stay decoupled from customer exposure.
- Every broad rollout must have explicit validation and rollback rules.
Channel Contract
stable- Default for new installs.
- The only recommended channel for paid and production environments.
- Publishes only non-prerelease tags.
- The only channel eligible for unattended broad rollout.
rc- Opt-in preview channel for internal use, staging-like environments, and explicitly willing preview users.
- Publishes prerelease tags such as
6.0.0-rc.1. - Must never be the default channel.
- In v6,
rcaffects manual and in-app update selection; unattended systemd auto-updates remainstable-only.
- Source builds
- Are not a customer-facing release channel.
- Remain reserved for development, debugging, and branch validation.
Development Model
- Use short-lived feature branches and feature flags for incomplete or risky work.
- Do not move directly from "issue fixed" to "all customers updated".
- Channel promotion is the primary customer-safety boundary.
- Branch topology may change over time; the
stableversusrccustomer contract must not. - The active release profile in
docs/release-control/control_plane.jsonowns the governed prerelease and stable release branches for the current line; release automation must resolve branch requirements from that file instead of assumingmain.
Prerelease Rules
- Every candidate intended for broad customer use must ship to
rcbefore it is eligible forstable. - Each published prerelease must have:
- Targeted automated checks for touched release surfaces.
- A smoke install on a fresh or staging-like environment.
- Release notes plus the rollback target and exact reinstall command recorded before publish.
- At least one live run of the release pipeline for the prerelease tag itself, not only structural workflow validation.
- A governed prerelease publication record; an accidental git tag by itself does not count as a shipped prerelease.
- Failed prereleases are fixed forward and replaced with a new prerelease. They are never
promoted as-is to
stable.
v5 Maintenance Policy
- When Pulse v6 reaches
stable, Pulse v5 immediately enters maintenance-only support. - The maintenance-only window lasts 90 calendar days from the v6 GA or stable release date.
- During that window, v5 fixes are limited to:
- critical security issues
- critical correctness or data-loss issues
- migration blockers that prevent customers from reaching a safe v6 path
- v5 will not receive:
- new features
- normal bug-fix backports
- pricing-model exceptions
- entitlement-model parity work introduced for v6
- After the 90-day window ends, v5 may continue running for users who choose to stay on it, but it is unsupported.
- The v6 GA announcement must publish the exact v5 end-of-support date calculated from the GA publication date.
- Before GA promotion is actually cleared, release notes may keep placeholder dates for the GA notice; those placeholders do not satisfy the promotion gate by themselves.
V5_MAINTENANCE_SUPPORT_POLICY.mdis the canonical source for this policy and the required GA release notice.
Stable Promotion Rules
- A stable tag must be promoted from a commit that has already been exercised as a published prerelease.
- A prerelease git tag counts as stable-promotion lineage only if that prerelease was actually published through the governed prerelease path; accidental or abandoned git tags do not satisfy the stable-promotion requirement.
- For v6 GA, do not promote to
stableuntil the active control-plane target is the GA-promotion target and satisfies itsrelease_readycompletion rule. - Every stable promotion requires:
- Applicable items in
PRE_RELEASE_CHECKLIST.mdcomplete. - Applicable entries in
HIGH_RISK_RELEASE_VERIFICATION_MATRIX.mdcleared. - No known unresolved high-severity regressions in touched release surfaces.
- The previous stable rollback target and exact reinstall command recorded.
- A live release-pipeline exercise already completed for the promoted prerelease tag, not only YAML lint or static workflow validation.
- The locked 90-day v5 maintenance-only policy in
V5_MAINTENANCE_SUPPORT_POLICY.mdand the exact end-of-support notice ready to publish with the promotion.
- Applicable items in
- Normal stable promotions require a minimum 72-hour prerelease soak after the candidate is available to internal or staging-like users.
- Hotfix exception:
- A shorter soak is allowed only for narrowly scoped fixes to active customer harm.
- The exception plus the rollback target and exact reinstall command must be recorded in the release notes or release ticket before promotion.
Rollout Rules
- Default installs stay on
stable. - Broad customer announcements and unattended updates target
stableonly. rcenrollment must be explicit and reversible.- Paid production tenants should remain on
stableunless they are knowingly participating in preview validation.
Rollback Rules
- Never delete or rewrite shipped tags to hide a bad release; supersede them with a newer release and explicit guidance.
- If a prerelease is bad, hold it in
rc, fix forward, and cut the next prerelease. Do not promote it. - If a stable release is bad:
- Pause further promotion or auto-update exposure.
- Direct affected users to the prior stable pin.
- Cut and validate a hotfix or rollback release.
- The previous stable version must remain installable by exact version pin until the replacement stable release is trusted.
Required Release Artifacts
- Release notes.
- Rollback target version and exact pin command.
- Checklist evidence and gate status.
- Staging or internal validation note.
- v5 maintenance-only support policy and end-of-support note for the GA cutover.
- Exact v6 GA and v5 end-of-support dates locked before GA publish and then published in the GA release notes.
- Prerelease-to-GA rehearsal record plus the machine-generated
rc-to-ga-rehearsal-summaryartifact, including the GitHub Actions run URL for the non-publish dry run and the canonical promotion metadata envelope: candidate stable tag, promotion channel, promoted prerelease tag, rollback target, exact rollback command, planned GA date, and planned v5 end-of-support date. - The pushed governed release-branch copy of
.github/workflows/release-dry-run.ymlmust already accept that stable rehearsal metadata envelope throughworkflow_dispatch, and the local release branch must matchoriginbefore dispatch, because GitHub executes the selected remote ref and does not see local-only governance state.
Authority
If conflicts appear:
SOURCE_OF_TRUTH.mdowns the locked decision that this policy is mandatory.status.jsonowns whether the decision is open or resolved and whether the active target is release-ready.PRE_RELEASE_CHECKLIST.mdandHIGH_RISK_RELEASE_VERIFICATION_MATRIX.mdown execution proof for a specific promotion.