Jira Is Turing-Complete

beefburger1 pts0 comments

Jira is Turing-Complete

Nicolas Seriot

Computation > Jira is Turing-Complete

Jira is Turing-Complete

Building a Minsky Machine in Atlassian Automation

May 2026

Engineering folklore holds that Jira (Atlassian's project-tracking tool) is Turing-complete.<br>Existing claims point vaguely at automation features without exhibiting a reduction.<br>This article supplies a proof, with setup instructions and execution trace.

Mapping the Computational Model

A Minsky register machine needs only two unbounded counters and a finite set of labeled instructions:

INC r; goto S

DEC r; if r == 0 goto S else goto S

Or, in plain English:

increment register R, then goto some state

decrement register R, if R == 0 goto some state, else goto some other state

A Minsky program that adds register A into register B looks like:

1. DEC A; if A == 0 goto 3 else goto 2<br>2. INC B; goto 1<br>3. HALT

Minsky proved this model Turing-complete (1967).<br>Exhibiting it in Jira's automation language therefore establishes the reduction.<br>Here is how the model maps onto Jira:

Minsky Machine<br>Jira

Register A<br>Count of linked issues of type Bug

Register B<br>Count of linked issues of type Task

Program Counter<br>Status of a single Epic issue

Dispatch Table<br>Jira Automation rules, one per instruction state

Clock<br>Automation-triggered transitions, or external re-triggering past chain caps

The Epic's status encodes the current instruction.<br>Automation rules inspect the linked-issue counts and decide the next status.<br>INC and DEC are implemented as issue creation and deletion on the appropriate linked-issue type.<br>Conditional branching is implemented as a JQL-conditioned rule.

Implementing Addition

Here is a minimal working implementation using one Epic, five linked issues, and one Automation rule per instruction state (Space Settings > Automation).

1. Create Workflow

Create a Jira Workflow with statuses initial state BACKLOG, then TODO, DEV and PROD.<br>Any state can transition to any other.

Create an Epic in status BACKLOG.

2. Create Rule for TODO

DEC A; if A=0 halt, else goto DEV.

Trigger: Epic status changed to TODO.

If at least one linked Bug exists: delete one Bug, transition Epic to DEV.

Else: transition Epic to PROD (halt).

3. Create Rule for DEV

INC B; goto TODO.

Trigger: Epic status changed to DEV.

Create a new Task, link it to the Epic.

Transition Epic to TODO.

Both rules have "Allow rule to trigger other rules" enabled.

The screenshot below shows the two rules wired into the Epic's workflow.

Recorded on a real *.atlassian.net instance.

4. Init Registers

Link 2 Bugs (A=2) and 3 Tasks (B=3) to the Epic.

5. Bootstrap the Machine.

Transition the Epic to TODO to start the cascade. Five transitions:

(2,3) TODO →<br>(1,3) DEV →<br>(1,4) TODO →<br>(0,4) DEV →<br>(0,5) TODO →<br>(0,5) PROD

The Epic lands in PROD with 0 Bugs and 5 Tasks linked. We've just added 2 + 3 = 5.

Fibonacci in Two States

The reduction above suffices to prove Turing-completeness.<br>Jira's automation language makes non-trivial programs tractable by using Convert Issue Type.

Jira's Convert Issue Type action changes an issue's type instantly: Bug → Story, Story → Task, and so on.<br>A single Convert merges DEC-on-one-register with INC-on-another into one atomic operation.<br>It doesn't extend Jira's computational power (a Convert is expressible as DEC + INC) but it shrinks the dispatch table dramatically for any move-loop.

Fibonacci as (A, B) → (B, A+B) collapses to two states with three registers (A=Bug, B=Task, C=Story), using TODO and QA (add it to the workflow) as the two instruction states:

TODO:<br>if any linked Bug exists:<br>Convert Bug → Story<br>INC Task<br>transition to TODO<br>else:<br>transition to QA

QA:<br>if any linked Story exists:<br>Convert Story → Bug<br>transition to QA<br>else:<br>transition to TODO

Initial state A=1, B=1, C=0. The sequence 1, 1, 2, 3, 5, 8, 13, … appears in B (Task count).

Unlike the addition machine, the Fibonacci machine has no halt state.<br>It runs until Jira Cloud's chain-depth cap of 10 triggers, at which point the operator re-triggers the Epic to continue.<br>A single status edit restarts the cascade.<br>The reduction still holds, the human just supplies the next clock tick.<br>Jira Data Center exposes the same as automation.rule.execution.timeout and related, configurable properties.

Conclusion

Jira's automation language can encode a two-counter machine given unbounded issue creation and rule execution.<br>Every physical computer is finite, so Jira Cloud's finite quotas do not refute the construction.<br>Under that standard convention, Jira is Turing-complete.

So, if complex Jira automations feel like programs, it is because they literally are.

jira epic todo automation goto state

Related Articles