Agent skill

Saleor Port Changes

by saleor in saleor/saleor

Forward-ports or backports a single PR or branch onto the currently checked-out Saleor branch, handling GraphQL version markers and migration numbering along the way.

BSD-3-ClauseAuto-check passedDevelopment

Install Saleor Port Changes

skills CLI
$ npx skills add saleor/saleor --skill port-changes -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install saleor/saleor port-changes --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/saleor/saleor.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/port-changes .claude/skills/port-changes && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
port-changes
GitHub stars
23k
Token cost
~969 tokens
SKILL.md length
538 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

Forward-ports or backports a single PR or branch onto the currently checked-out Saleor branch, handling GraphQL version markers and migration numbering along the way.

  • Works in 5 steps: Establish source and direction → GraphQL: pin to the oldest version that… → Migrations: keep the oldest branch's… → …
  • Backporting a merged main-branch change to an earlier release branch
  • SKILL.md covers 1. Establish source and…, 2. GraphQL: pin to the oldest…, 3. Migrations: keep the oldest… and 4. CHANGELOG: only on the…, plus 1 more section
  • Calls gh, git and python

What it does

One run ports one change onto the branch already checked out; the skill never switches, creates or renames branches, and a multi-hop port such as 3.22 to 3.23 to main is done as separate runs on separate workspaces. It establishes the source PR or branch and compares it with the destination branch to decide whether the port is UP, moving an older change to a newer branch, or DOWN, moving a newer change to an older one, stating the inferred direction up front so a wrong guess is caught early.

For GraphQL fields it pins the ADDED_IN marker to the version that first shipped the field rather than the branch being edited now, asking the user when the introducing version is ambiguous instead of guessing. For migrations it keeps the file name and number a migration already has on the oldest branch that ships it, resolving a numbering collision on an upward port with a merge migration, and on a downward port it tells the user which name the newer branches need to reuse.

When your agent uses it

  • Backporting a merged main-branch change to an earlier release branch
  • Forward-porting a fix from an older Saleor branch onto main
  • Resolving a GraphQL version marker or migration number conflict during a port

Example prompts

  • “Port this pull request onto the 3.23 branch I have checked out.”
  • “Backport the discount fix from main down to 3.22.”
  • “Forward-port this branch's change and tell me if it needs a merge migration.”

Requirements

  • git
  • The gh CLI for reading PR metadata
  • Django for regenerating migrations

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Establish source and direction
  2. GraphQL: pin to the oldest version that ships it
  3. Migrations: keep the oldest branch's identity, merge on top
  4. CHANGELOG: only on the branch that introduces the change
  5. Before finishing

What it can do on your machine

Read from SKILL.md and the folder at commit 782a751. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • python
    • pytest

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Saleor Port Changes loads about 969 tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 538 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~65
When it runs · the whole SKILL.md, loaded when a task matches
~969

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from saleor/saleor at commit 782a751, republished under its BSD-3-Clause licence (© saleor). 538 words, ~969 tokens.

Download SKILL.mdSave it as .claude/skills/port-changes/SKILL.md (or your agent's skills folder).
name
port-changes
description
Port a change (PR or branch) onto the currently checked-out Saleor branch — forward-port UP (3.22 → 3.23 → main) or backport DOWN (main → 3.23 → 3.22). Use when asked to port, forward-port, backport, or cherry-pick a change to this branch/version.

Porting a change onto this branch

One run = one port, onto the branch already checked out. The current branch is the destination — never switch, create, or rename branches, and never chain hops. A multi-hop port (3.22 → 3.23 → main) is separate runs on separate workspaces; if the user asks for more than one hop, do the one that matches this branch and tell them to ask again on the next branch.

1. Establish source and direction

  • The user points at a PR (gh pr view <n> --json baseRefName,files, gh pr diff <n>) or a branch.
  • Source = where the change was originally authored (PR base). Destination = the current branch (git branch --show-current; main is the next unreleased version — check # 3.X.0 [Unreleased] at the top of CHANGELOG.md).
  • UP (forward-port): source older than destination (3.22 → 3.23/main).
  • DOWN (backport): source newer than destination (main → 3.23).
  • State the direction you inferred in your first message, so a wrong guess is caught early.

2. GraphQL: pin to the oldest version that ships it

The ADDED_IN_* marker names when the field/mutation first became available, not which branch you are editing. Constants live in saleor/graphql/core/descriptions.py.

  • A change first released in 3.22 keeps ADDED_IN_322 here too, even on main.
  • A DOWN port to a version older than the marker makes the field ship earlier than the marker claims — use the older version's marker here, and tell the user the source branch's marker needs the same correction (don't go edit it yourself).
  • If the introducing version is ambiguous, ask the user. Don't guess.
  • Regenerate saleor/graphql/schema.graphql — see saleor-graphql-api-change.
Show full SKILL.md (282 more words)Show less

3. Migrations: keep the oldest branch's identity, merge on top

Migration numbering diverges per branch, so a straight cherry-pick produces a broken graph.

  • The migration keeps the file name and number it has on the oldest branch that ships it — never renumber or rewrite a migration that already shipped.
  • On an UP port, if that number now collides with migrations that landed only here, resolve the two leaves with a merge migration (python manage.py makemigrations --merge) — see existing *_merge_*.py files for the shape.
  • On a DOWN port where this branch is now the oldest to ship it, pick the number that fits here and tell the user the newer branches must reuse this name.
  • Zero-downtime rules still apply: CREATE INDEX CONCURRENTLY in its own atomic = False migration, schema and data migrations split. See saleor-migrations.

4. CHANGELOG: only on the branch that introduces the change

  • Edit CHANGELOG.md only if this branch is the first release to ship the change.
  • UP port of something already released in 3.23 → no CHANGELOG edit here; it was already announced.
  • DOWN port → add the entry here (this release now introduces it) and tell the user to drop it from main's [Unreleased] section.
  • main's CHANGELOG is edited only when the change debuts in [Unreleased] and is not backported.

5. Before finishing

  • Tests for the ported code pass (pytest --reuse-db <paths>, see pytest-runner).
  • Schema file regenerated if GraphQL changed; pre-commit clean.
  • If this branch lacks a dependency the source relied on, stop and report it — don't invent a partial port.
  • Report anything the user must fix on the other branches (marker corrections, migration names, CHANGELOG moves) — you are not touching those branches.

Do not push. Commit only if explicitly asked.

© saleor, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/port-changes of saleor/saleor.

Open the folder on GitHubat commit 782a751

Compare with similar skills

Saleor Port Changes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Saleor Port Changes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Saleor Port Changes this skillsaleor/saleor23k—~969Automated safety check: PassBSD-3-Clause
LangBot Core Developmentlangbot-app/LangBot18k—~1.4kAutomated safety check: NotesApache-2.0
Mastering Python SkillSpillwaveSolutions/agent-brain119—~1.4kAutomated safety check: NotesMIT
Flowfile Debugging PlaybookEdwardvaneechoud/Flowfile385—~6.3kAutomated safety check: PassMIT
Migrate Internal Package into GhostTryGhost/Ghost56k—~3.8kAutomated safety check: PassMIT
Senior Architect Toolkitmaslennikov-ig/claude-code-orchestrator-kit2608 repos~1.2kAutomated safety check: NotesCustom licence

Similar skills

  • LangBot Core Development

    langbot-app/LangBot

    Covers developing the LangBot core backend and web UI: dev setup, repo layout, API auth types, adding endpoints, migrations and keeping the MCP server in step.

    18k GitHub stars~1.4k tokensUpdated yesterday
    DevelopmentAuto-check: notes
  • Mastering Python Skill

    SpillwaveSolutions/agent-brain

    Modern Python coaching covering language foundations through advanced production patterns.

    119 GitHub stars~1.4k tokensUpdated 21 days ago
    DevelopmentAuto-check: notes
  • Flowfile Debugging Playbook

    Edwardvaneechoud/Flowfile

    Symptom-to-cause triage playbook for Flowfile (core/worker/kernel/frontend/AI) — covers "no such table" DB cascades (two distinct causes), import-time Alembic migration corruption, silent…

    385 GitHub stars~6.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Moves a package from another TryGhost repository into Ghost as an internal workspace package while keeping its Git history, with checkpoints for the steps that need an administrator.

    56k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Senior Architect Toolkit

    maslennikov-ig/claude-code-orchestrator-kit

    Comprehensive software architecture skill for designing scalable, maintainable systems using ReactJS, NextJS, NodeJS, Express, React Native, Swift, Kotlin…

    260 GitHub starsUsed in 8 repos~1.2k tokens
    DevelopmentAuto-check: notes
  • Kedro Babysit

    kedro-org/kedro

    Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…

    11k GitHub stars~4k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from saleor/saleor

All 8 skills in this repo
  • Benchmarks Django ORM filters in Saleor by generating bulk data, extracting the SQL and running EXPLAIN ANALYZE to check index usage.

    23k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Commits changes in the Saleor codebase and works through pre-commit hook failures from ruff, mypy, the GraphQL schema check and the migrations check.

    23k GitHub stars~575 tokensUpdated yesterday
    Auto-check passed
  • Generates and splits Django schema migrations for Saleor with manage.py makemigrations, enforcing one new model or one field change per migration file.

    23k GitHub stars~1k tokensUpdated yesterday
    Auto-check passed
  • Rules for writing Django migrations in Saleor that avoid long table locks and stay compatible with zero-downtime rolling deploys.

    23k GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Pytest Runner

    saleor/saleor

    Run pytest tests with automatic virtual environment activation. Use this skill whenever running tests, executing pytest, or when asked to "run tests", "test…

    23k GitHub stars~251 tokensUpdated yesterday
    Auto-check passed
  • Checklist for adding, changing, deprecating or removing Saleor GraphQL fields, mutations, enums and webhook event types so the change passes review first time.

    23k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Saleor Port Changes

What does Saleor Port Changes do?

Forward-ports or backports a single PR or branch onto the currently checked-out Saleor branch, handling GraphQL version markers and migration numbering along the way. 23 to main is done as separate runs on separate workspaces. It establishes the source PR or branch and compares it with the destination branch to decide whether the port is UP, moving an older change to a newer branch, or DOWN, moving a newer change to an older one, stating the inferred direction up front so a wrong guess is caught early.

When should I use Saleor Port Changes?

Saleor Port Changes fits situations like: backporting a merged main-branch change to an earlier release branch; forward-porting a fix from an older Saleor branch onto main; resolving a GraphQL version marker or migration number conflict during a port.

How do I install Saleor Port Changes in Claude Code?

Run `npx skills add saleor/saleor --skill port-changes -a claude-code`. Or copy the skill folder (.claude/skills/port-changes in saleor/saleor) into .claude/skills/port-changes in your project. Claude Code loads it when a task matches its description.

How do I install Saleor Port Changes in Codex?

Run `npx skills add saleor/saleor --skill port-changes -a codex`. Or copy the skill folder (.claude/skills/port-changes in saleor/saleor) into .agents/skills/port-changes in your project. Codex loads it when a task matches its description.

Can I use Saleor Port Changes in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add saleor/saleor --skill port-changes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/port-changes, .gemini/skills/port-changes, .github/skills/port-changes and .opencode/skills/port-changes in your project.

What does Saleor Port Changes need to run?

Going by SKILL.md and its folder, Saleor Port Changes needs the command-line tools its instructions call (gh, git, python and pytest). Our summary lists: git; The gh CLI for reading PR metadata; Django for regenerating migrations.

Does Saleor Port Changes access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Saleor Port Changes safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Saleor Port Changes use?

Saleor Port Changes is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Saleor Port Changes use?

About 969 tokens (SKILL.md is roughly 3.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Saleor Port Changes?

Skills that share tags, products or a category with Saleor Port Changes: LangBot Core Development (langbot-app/LangBot, 18k stars), Mastering Python Skill (SpillwaveSolutions/agent-brain, 119 stars), Flowfile Debugging Playbook (Edwardvaneechoud/Flowfile, 385 stars) and Migrate Internal Package into Ghost (TryGhost/Ghost, 56k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Saleor Port Changes?

saleor (a GitHub organization) maintains it in saleor/saleor, which has 23,428 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.

Source: saleor/saleor on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.