Skip to main content
Version: Next (unreleased)

Jira state movements — how a card's status gets moved

A card moves through four anchor statuses — <STATUS_TODO>, <STATUS_IN_PROGRESS>, <STATUS_IN_REVIEW>, <STATUS_DONE> — and four mechanisms can move it: the three skills, this repo's GitHub Actions workflows, a Jira automation app (GitHub for Jira or your own rules), and direct REST calls. This hub is the overview of which mechanism does what; each one has its own detailed doc, cited in the sections below.

The four <STATUS_*> are configurable tokens you map onto your board's real status names in .jst/jira-sdlc-tools.env.

Who can move a card where — at a glance

✅ does it · ⚠️ only with your confirmation · ❌ never

Who<STATUS_TODO><STATUS_IN_PROGRESS><STATUS_IN_REVIEW><STATUS_DONE>
You✅ anytime — usually just the creation default✅ anytime✅ anytime✅ anytime — jira.sh issue transition <KEY> --to …, or drag the card
jira-task-assigner❌ it creates the issue and lets your workflow's creation default stand❌ transitions nothing at all — issues, branches and worktrees only
jira-task-executor✅ step 3, when it picks the issue up✅ step 11, right after it opens the PR❌ step 11 explicitly leaves Done to the merge, whoever does it
jira-task-reviewer✅ step 3d, on a CHANGES REQUESTED verdict — sub-task or single-step only, never the multistep parent on a 5b reject❌ it only reads this status, to pick which sub-tasks to review⚠️ step 7 asks once at the end of a run, for approved issues only, and moves nothing you don't confirm
GitHub Actions❌ none shipsjira_issue_transition_on_branch.yml — on create of a feature/*/hotfix/* branch, and only from <STATUS_TODO>jira_issue_transition_on_pr_open.yml — on PR opened/reopened, skipped if already In Review or Donejira_issue_transition_on_merge.yml — on PR closed-as-merged, skipped if already Done
Jira Automation (incl. GitHub for Jira)✅ possible (a rule on issue create), rarely needed✅ possible — e.g. the dev-panel branch created trigger✅ possible — e.g. the pull request created trigger✅ the common one — pull request merged, or all sub-tasks Done → close the parent

The GitHub Actions row is this repo's own CI (.github/workflows/), not files the plugin installs — a marketplace install copies only plugins/jira-sdlc/. Copy the three workflows into your project to get that row.

Read the three skill rows down a column for that state's whole skill-side story; read across to compare the four mechanisms. The sections below hand off to each mechanism's detailed doc.

Moving inside the skills

The three skills make three transitions themselves and ask about one: the executor to In Progress (on pickup, step 3) and In Review (right after opening the PR, step 11); the reviewer back to In Progress on a CHANGES-REQUESTED verdict (step 3d); and the reviewer's end-of-run question about whether to close an approved issue (step 7). The assigner transitions nothing — issues, branches, and worktrees only. Full detail — which step, what each state means, what no skill does — is in JIRA-STATES.md.

Moving with GitHub Actions

Three workflows move an issue from git events with no skill running — jira_issue_transition_on_branch.yml (branch create → In Progress, only from <STATUS_TODO>), jira_issue_transition_on_pr_open.yml (PR opened → In Review), and jira_issue_transition_on_merge.yml (PR merged → Done). Each re-reads the issue first and stands down rather than regressing it, so they're safe to run alongside the skills. Copying them in, the secrets, the status-name literals, and the guards are documented in Driving Jira state from GitHub Actions.

GitHub for Jira

The GitHub for Jira app links your branches and PRs to issues and can drive automations — including the common pull request merged → move to <STATUS_DONE> and all sub-tasks Done → close the parent rules — with the least setup of any mechanism. It's recommended, not required: the skills work without it; what you lose is the automatic linking. Connection and automation-rule setup is in Installing GitHub for Jira.

API

jira.sh (POSIX) / jira.ps1 (Windows) is this plugin's own bundled Jira REST client — what every skill and workflow above calls under the hood. It authenticates per request as a role (--role executor|assigner|reviewer, no login step), and a transition is one call: jira.sh --role <role> issue transition <KEY> --to "<STATUS>", which resolves the status name to the transition id for you. Full detail — the command surface, auth, ADF/comment mechanics, and the git/branch conventions — is in JIRA-REST.md (the detailed companion) and the lean runtime reference jira-api-reference.md.

External tools (not used)

acli and jira-cli are Jira CLI alternatives this project deliberately does not use to move state. The toolkit's earlier acli usage was replaced by the bundled jira.sh REST client above; jira-cli has project-specific failures jira.sh gets right — notably that it silently drops the parent on sub-task create. The full reasoning is in rest-client-design.md (why jira.sh exists in place of acli) and JIRA-REST.md §11 (the jira-cli cross-reference).