Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions docs/decisions/0011-frontend-branching-strategy.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
###########################################
Frontend Branching and Publication Strategy
###########################################

Status
======

Proposed

Context
=======

Developers need a rallying point for integration of new, untested features.
Consider design tokens being developed concurrently with frontend-base. It
would've been desirable to have a public, protected branch that evolved
linearly (no rebases) and included the latest version of both features not only
so their developers could have the time to make them work well with each other,
but where they had enough leeway to push the envelope and fix bugs without
having to immediately ship the code to thousands of users.

This branch is commonly called "master" or "main" for repositories that follow
the "main is unstable" development strategy, but this is not universal: many
projects call this branch "next", "develop", or "alpha". What is almost
universal, however, is the existence of at least one branch that serves this
purpose.

In the Open edX org, main branches have been, historically, deemed stable:
every single commit that lands has to be deemed production ready. This is
counter to the "main is unstable" strategy. Furthermore, there is no "next"
branch in most projects, either. This needs to be addressed.

Decisions and Consequences
==========================

1. "main is unstable"
---------------------

From this point onwards, frontend repositories' default branches (main or
master) are deemed unstable. This has two major consequences:

1. Using the main branch in production is not supported. In fact, we recommend against it!
2. The DEPR process, fast or slow, does not apply to it; breaking changes can
and will land with no warning.

Notably, though, the main branch retains the following properties:

1. New features should be developed for and merge to it before any other
branches;
2. To facilitate collaboration, the branch is never rebased.
Comment on lines +45 to +49
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this, but it'd be good to include a "how we handle bug fixes" part. In Paragon's README we have the Contributing section which includes

The branch to target with your PR depends on the type of change you are contributing to Paragon.

Branch to Target Type of Change Documentation Site
release-22.x Bug fix/security patch https://paragon-openedx-v22.netlify.app/
release-23.x Bug fix/security patch/new (non-breaking) feature https://paragon-openedx-v23.netlify.app/
next Breaking change https://paragon-openedx.netlify.app/

which can be simplified to

Branch to Target Type of Change
previous release Bug fixes/security patches only
current release Bug fixes/security patches/new (non-breaking) features
next Breaking changes

which doesn't quite match the strategy here. My understanding is that the strategy here is instead

Desired Branch for feature/fix Type of Change Where to target PR
previous release Bug fixes/security patches only main first, backport after? open 2 PRs?
current release Bug fixes/security patches/new (non-breaking) features main first, backport after? 2 PRs?
main Bug fixes/security patches/new (non-breaking) features/breaking changes main

It'd be nice to add a little clarify to that flow that accounts for scenarios such as "we need to get this non-breaking feature into the version that's going out with the release that's being cut next week," or "this is a critical fix that needs to get out to people using a published version ASAP"



2. Publication of the "main" branch
-----------------------------------

A repository's main branch will be published semantically to NPM with on an
"alpha" prerelease tag, with a monotonically incremented version number. For
Copy link
Contributor Author

@arbrandes arbrandes Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not married to "alpha". It could be "main", or "next", or anything else, really (as long as every frontend app repo follows the same pattern, of course).

instance:

frontend-base@2.0.0-alpha4
frontend-app-authn@2.0.0-alpha2


3. Creation and publication of release branches
-----------------------------------------------

When the main branch of a given frontend repository is deemed ready for
widespread use, a new "n.x" branch is cut from it, where "n" is the next major
version of the package. The ".x" is literal. For instance:

1.x
2.x

These branches are also published to NPM semantically, with no breaking changes
being introduced:

frontend-base@1.0.5
frontend-app-authn@1.4.3
Loading