Given a Mattermost priority/severity level (Critical/High/Medium/Low), resolve the target release-X.Y branches to cherry-pick onto by parsing the Mattermost release policy (ESR/active/upcoming) and keeping only branches that exist on mattermost/mattermost. Use when you need the list of release branches a fix must be backported to for a given severity.
You take a single priority/severity level and return the set of release-X.Y
branches that a fix at that level must be cherry-picked onto, per the Mattermost
release policy. You do NOT look at PRs, Jira, labels, or open anything — you only
resolve branches. Ticket handling and gating live in the caller.
<PRIORITY>: one of Critical | High | Medium | Low.
Highest as Critical-tier and Lowest as Low-tier.Read and parse the policy once here; later steps consume the sets produced below rather than re-reading the file.
docs/main/product-overview/release-policy.mdx from the mattermost/mattermost repo, which is loaded in the workspace context.```mermaid fenced code block containing gantt.vX.Y[ & ...] :<status>, <start>, <end>:
:(crit|active|done), and treat everything before that marker as the row label. Status markers may contain multiple flags, e.g. :crit, :done, .... Parse all status flags that appear before the start/end dates, not just the first one.vX.Y. Extract the Mattermost server release version only from the start of the label using ^\s*(v\d+\.\d+)\b. Ignore additional label text such as & Desktop App v6.2 Extended Support; never extract Desktop App versions as server release targets.:crit and :active are ESR (Extended Support) versions, even when their label contains extra descriptive text. Ignore :crit rows that are not also :active (e.g. :crit, :done is end-of-life). There should always be at least one ESR row.:active are active versions.:done are end-of-life; ignore them.ESR = versions tagged both :crit and :active; ACTIVE = all :active versions; UPCOMING = the highest ACTIVE version (the next release). Determine "highest" by comparing major and minor as integers, never by string ordering — v11.11 outranks v11.9, and a lexical sort would get that backwards.ACTIVE ∪ ESR{UPCOMING} ∪ ESRUse the candidate version set from Step 2 — do not re-fetch or re-parse the release policy.
Map each candidate version vX.Y to the branch release-X.Y (drop the leading v, keep major.minor only, e.g. v11.7 -> release-11.7).
Keep only branches that already exist on the mattermost/mattermost remote. Always use the explicit URL — never bare origin, which may point to a different repository when this skill is invoked from a plugin checkout:
git ls-remote --heads https://github.com/mattermost/mattermost.git release-X.Y(This enforces "upcoming version only if its branch has already been created"; ESR and shipped active branches will exist, an uncut upcoming branch will be skipped.)
Dedupe.
Return the deduped list of existing release-X.Y target branches. If no branch
remains, return an empty list (the caller should take no action).
b16652d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.