meta: Release schedule doc #1981

Open
nex wants to merge 2 commits from nex/meta/release-schedule into main
Owner

Considering we've always had a rocky relation with actually making releases properly, and continue to do so inconsistently, this PR introduces a document that outlines a standard release schedule and policy. This document will help the team stick to a consistent schedule and process, and also communicates expectations to downstream users and package maintainers.

Details in this doc are free to change based on feedback. I doubt the first draft will be perfect.

Note

This document will only take effect after the next release is made, in case it is merged earlier.

Considering we've always had a rocky relation with actually making releases properly, and continue to do so inconsistently, this PR introduces a document that outlines a standard release schedule and policy. This document will help the team stick to a consistent schedule and process, and also communicates expectations to downstream users and package maintainers. Details in this doc are free to change based on feedback. I doubt the first draft will be perfect. > [!NOTE] > This document will only take effect after the next release is made, in case it is merged earlier.
nex self-assigned this 2026-07-14 03:49:36 +00:00
meta: Release schedule doc
All checks were successful
Auto Labeler / Apply labels based on changed files (pull_request_target) Successful in 2s
Checks / Prek / Check changed files (pull_request) Successful in 4s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Documentation / Build and Deploy Documentation (pull_request) Successful in 1m0s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
72b605710e
fix: list indentation
All checks were successful
Checks / Prek / Check changed files (pull_request) Successful in 4s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Documentation / Build and Deploy Documentation (pull_request) Successful in 59s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m7s
5f1b68c8de
@ -0,0 +15,4 @@
release candidate should be tagged and released as a pre-release. This means there can be between 1 and 6
release candidates for a given release.
On the last day of the final week of the month, if there are no outstanding serious bugs, the full release should be
Member

Are you here considering "final week of the month" the final full week? What happens if the 31st falls on a monday, therefore leaving no days for extra bugfixing and rc releases as described below

Are you here considering "final week of the month" the final full week? What happens if the 31st falls on a monday, therefore leaving no days for extra bugfixing and rc releases as described below
Author
Owner

Final 7 days of the month yes, regardless of start day. The specific days for the release schedule aren't relevant, hence why they're only referred to in generic ways (e.g. week 1, day 2)

Final 7 days of the month yes, regardless of start day. The specific days for the release schedule aren't relevant, hence why they're only referred to in generic ways (e.g. week 1, day 2)
Member

I think it would be more clear if written down as the final 7 days instead of final week

I think it would be more clear if written down as the final 7 days instead of final week
Contributor

I believe the "week at end of month" rule is a bit arbitrary/rigid and can confuse people's expectations if signalled in this manner. I think it's best to let maintainers to stabilize features and tag a new branch on any day of the month. Then, after the RC cycle and somewhen towards the end of the month, a regular release is made. This would work more flexibly I think, especially if you're doing a bimonthly/trimonthly release schedule.

Not sure how this could best be explained in text though

I believe the "week at end of month" rule is a bit arbitrary/rigid and can confuse people's expectations if signalled in this manner. I think it's best to let maintainers to stabilize features and tag a new branch on any day of the month. Then, after the RC cycle and somewhen towards the end of the month, a regular release is made. This would work more flexibly I think, especially if you're doing a bimonthly/trimonthly release schedule. Not sure how this could best be explained in text though
@ -0,0 +22,4 @@
bugs are fixed. Additionally, another release candidate should be tagged for at least 24 hours after the patch is
released, to allow for testing and verification of the fix. Only then can the final release be made.
This means a release timeline MIGHT look like:
Author
Owner

As I was mentioning in the dev room, this might be too frequent.

  • Releases are stressful
  • There's always a period of time after each release where we have to spend time doing support for people encountering new issues during/after upgrading
  • The team spends a lot of time working on other parts of the Matrix ecosystem too, including laborious spec work that can take days at a time
  • Do we even make enough meaningful changes for monthly to make sense?

I think bi-monthly (every 2 months) or maybe even quarterly (every 3 months) might make more sense. The latter would probably want some sort of schedule for alphas though, since we don't want deployments to fall too far behind main

As I was mentioning in the dev room, this might be too frequent. - Releases are stressful - There's always a period of time after each release where we have to spend time doing support for people encountering new issues during/after upgrading - The team spends a lot of time working on other parts of the Matrix ecosystem too, including laborious spec work that can take days at a time - Do we even make enough meaningful changes for monthly to make sense? I think bi-monthly (every 2 months) or maybe even quarterly (every 3 months) might make more sense. The latter would probably want some sort of schedule for alphas though, since we don't want deployments to fall too far behind `main`
Author
Owner

Not to state the obvious but we can also just change the release schedule if whatever we land ends up not working out as desired, perfection doesn't have to be achieved first time

Not to state the obvious but we can also just change the release schedule if whatever we land ends up not working out as desired, perfection doesn't have to be achieved first time
Member

I think every two months is a good schedule for releases

I think every two months is a good schedule for releases
Crazy_Nicc approved these changes 2026-07-14 14:12:56 +00:00
@ -0,0 +16,4 @@
release candidates for a given release.
On the last day of the final week of the month, if there are no outstanding serious bugs, the full release should be
tagged and released.
First-time contributor

I don't know if this document is the right place to put it, but the Release Announcement should ideally be made after the binaries are done compiling, otherwise people might be confused why only the Source Code is attached.

I don't know if this document is the right place to put it, but the Release Announcement should ideally be made after the binaries are done compiling, otherwise people might be confused why only the Source Code is attached.
@ -0,0 +8,4 @@
## Schedule
The release `YY.MM` should be forked from the `main` branch on the first day of the final week of the month.
Contributor

s/The release YY.MM/The tag YY.MM/

s/The release `YY.MM`/The tag `YY.MM`/
@ -0,0 +35,4 @@
- Day 5: If there are bugfixes, tag `YY.MM.0-rc.5`
- Day 6: If there are bugfixes, tag `YY.MM.0-rc.6`
- Day 7: If there are no serious bugs, tag `YY.MM.0` and release.
Contributor

The release candidate does not need to match the day number right? I guess the example could be modified to reflect that, as well as same-day RCs with bumped RC versions

The release candidate does not need to match the day number right? I guess the example could be modified to reflect that, as well as same-day RCs with bumped RC versions
Author
Owner

that's too complex for an illustrative example

that's too complex for an illustrative example
nex marked this conversation as resolved
@ -0,0 +1,77 @@
# Releasing
Continuwuity is rapidly evolving software that needs to keep up with an ecosystem that demands equally faced paced
Member

s/faced /fast-/

s/faced /fast-/
@ -0,0 +47,4 @@
### Security releases
Following the [security policy](../security.mdx), security releases might be made off-cycle, and may even require
Contributor

s/might/may

s/might/may
@ -0,0 +53,4 @@
there is no "pre-release" system for security releases - security patches always go straight to release.
Not all security fixes require a new release. If there are several low-severity security problems that are awaiting
an upstream merge, they should instead wait for the next scheduled release, unless they are critical enough to warrant
Contributor

s/release, unless.*/release./

A bit redundant

s/release, unless.*/release./ A bit redundant
Author
Owner

This feels like an important distinction to me, it explicitly communicates that we may make a security release off-cycle without typical restriction mentioned prior

This feels like an important distinction to me, it explicitly communicates that we may make a security release off-cycle without typical restriction mentioned prior
@ -0,0 +56,4 @@
an upstream merge, they should instead wait for the next scheduled release, unless they are critical enough to warrant
an immediate release.
Security patches should NEVER be pushed to the public repository when a release is not planned to be made very soon
Contributor

s/should NEVER/MUST NOT/

s/should NEVER/MUST NOT/
Author
Owner

This is not a MUST NOT, it is a SHOULD NOT (ever)

This is not a MUST NOT, it is a SHOULD NOT (ever)
nex marked this conversation as resolved
@ -0,0 +61,4 @@
### Release candidates
Release candidates are the primary form of pre-release - they imply a feature freeze, which allows maintainers and
Contributor

The paragraph may be simplified as:

Release candidates are pre-releases with a feature freeze. They allow maintainers and contributors to fix bugs and stabilize new features before the ultimate release. This is a necessary step in the release pipeline, as tracking the main branch can be infeasible for many deployments.

The paragraph may be simplified as: > Release candidates are pre-releases with a feature freeze. They allow maintainers and contributors to fix bugs and stabilize new features before the ultimate release. This is a necessary step in the release pipeline, as tracking the main branch can be infeasible for many deployments.
@ -0,0 +67,4 @@
so release candidates are a necessary step in the release process.
Release candidates should be announced in the same way any other release is (ping in the announcements room,
announcement sent out via the checker, etc), but should be clearly marked as a pre-release. Extra attention to detail
Contributor

Perhaps indicate that the release notes and changelogs are of equal standards to regular releases?

Perhaps indicate that the release notes and changelogs are of equal standards to regular releases?
Author
Owner

They aren't

They aren't
All checks were successful
Checks / Prek / Check changed files (pull_request) Successful in 4s
Required
Details
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 5s
Required
Details
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Required
Details
Documentation / Build and Deploy Documentation (pull_request) Successful in 59s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m7s
Required
Details
This pull request is blocked because it's outdated.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin nex/meta/release-schedule:nex/meta/release-schedule
git switch nex/meta/release-schedule
Sign in to join this conversation.
No reviewers
continuwuation/Owners
continuwuation/Package-Maintainers
No milestone
No project
No assignees
5 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
continuwuation/continuwuity!1981
No description provided.