---
name: mk:jira-bulk
description: "Bulk JIRA operations on 10+ issues via the jira-as wrapper: bulk transition / assign / set-priority / clone / delete. Dry-run is MANDATORY first. Triggers: 'bulk update N issues', 'mass transition', 'transition 50+ issues to Done', 'bulk-clone', 'bulk-delete'. NOT for single-issue ops (mk:jira-issue / mk:jira-lifecycle)."
phase: on-demand
source: local
keywords: [jira, jira-bulk, bulk-transition, bulk-assign, bulk-delete, bulk-clone, dry-run]
when_to_use: "Use for any operation touching 10+ Jira issues at once. Dry-run is MANDATORY first. NOT for individual issue ops."
user-invocable: true
context: fork
agent: jira-bulk
---

# mk:jira-bulk

Forks to the `jira-bulk` agent. The agent enforces a hard dry-run-first rule at runtime.

## Dry-Run Workflow (MANDATORY)

```
Step 1: invocation + --dry-run
Step 2: agent shows would_* JSON keys + impacted-count
Step 3: explicit user "yes" → re-invoke without --dry-run
```

Skipping Step 1 is a hard violation. The agent will refuse if asked to skip the dry-run.

## Triggers

- "bulk update N issues"
- "mass transition"
- "transition 50+ issues matching JQL to Done"
- "bulk-clone all PROJ stories tagged 'epic-x' into PROJ2"
- "bulk-delete tickets older than 2 years matching JQL"

## Examples

- Mass transition: "transition all PROJ tickets in 'In Progress' for >30 days to Stalled"
- Reassignment: "reassign all open PROJ tickets from alice@ to bob@"
- Cleanup: "delete spam tickets matching JQL 'reporter = ext-bot AND created < -1y'" (dry-run + 2-step confirm)

## See also

- Agent: `../../agents/jira-bulk.md`
- Shared: `../jira/references/{install-and-auth,cli-idioms,safety-framework}.md` (Tier 4 enforcement lives in safety-framework.md)
- Domain refs:
  - `references/safety-checklist.md` — pre-flight checklist for any bulk operation >50 issues
  - `references/checkpoint-guide.md` — checkpoint + resume strategy for 500+ issue ops
- **Workflow cache (read for accurate dry-run output)**:
  - `tasks/jira-workflows/<workflow-slug>.md` — discovered statuses + transitions (run `bash $CLAUDE_PROJECT_DIR/.claude/skills/jira/scripts/fetch-workflow.sh <KEY>` if absent; see `jira-lifecycle/references/workflow-discovery.md`)
  - For `bulk transition --to "<Status>"`, validate the target status name exists in the cache; for `--id <N>`, validate the transition ID exists. Mismatch → reject before exec.
- Peer leaves: `mk:jira-search` (JQL author + `bulk-update` overlap — same dry-run discipline), `mk:jira-lifecycle` (single-issue transitions; same cache), `mk:jira-relationships` (`bulk-link` is here)

## Gotchas

- (none yet)
