T
traeai
登录
返回首页
Hacker News Best

Jira Is Turing-Complete

8.5Score
Jira Is Turing-Complete

TL;DR · AI 摘要

Jira 的自动化功能可以实现图灵完备性,通过构建 Minsky 机器证明其计算能力。

核心要点

  • Jira 通过自动化规则实现了 Minsky 机器的图灵完备性。
  • 使用一个 Epic 和多个链接问题来模拟 Minsky 机器的寄存器和程序计数器。
  • Fibonacci 序列可以通过简化 Minsky 操作在 Jira 中实现。

结构提纲

按章节快速跳转。

  1. 介绍 Jira 被认为是图灵完备的,并提供证明。

  2. 将 Minsky 机器映射到 Jira 自动化功能。

  3. 展示如何在 Jira 中实现简单的加法操作。

  4. 说明如何使用简化操作在 Jira 中实现 Fibonacci 序列。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Jira 图灵完备性

金句 / Highlights

值得收藏与分享的关键句。

#Jira#Turing-complete#Minsky Machine#Automation
打开原文

Nicolas Seriot

#### Computation> Jira is Turing-Complete

_Building a Minsky Machine in Atlassian Automation_

_22nd May 2026_

Engineering folklore holds that Jira (Atlassian's project-tracking tool) is Turing-complete. Existing claims point vaguely at automation features without exhibiting a reduction. 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 S_
  • _decrement register R, if R == 0 goto zero-state S, else goto nonzero-state S'_

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

code
1. DEC A; if A == 0 goto 3 else goto 2
2. INC B; goto 1
3. HALT

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

| Minsky Machine | Jira | | --- | --- | | Register A | Count of linked issues of type Bug | | Register B | Count of linked issues of type Task | | Program Counter | Status of a single Epic issue | | Dispatch Table | Jira Automation rules, one per instruction state | | Clock | Automation-triggered transitions, or external re-triggering past chain caps |

The Epic's status encodes the current instruction. Automation rules inspect the linked-issue counts and decide the next status. INC and DEC are implemented as issue creation and deletion on the appropriate linked-issue type. 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. 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.

Image 1

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:

code
(2,3) TODO → 
(1,3) DEV  → 
(1,4) TODO → 
(0,4) DEV  → 
(0,5) TODO → 
(0,5) PROD

Video 3 _Recorded on a real *.atlassian.net instance._

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

Fibonacci in Three States

The reduction above suffices to prove Turing-completeness. In addition to that, Jira's automation language can simplify Minsky operations. _Convert Issue Type_ changes an issue's type instantly: Bug → Story, Story → Task, and so on.

CONVERT is expressible as DEC + INC. It doesn't extend Jira's computational power, but it shrinks the dispatch table dramatically for any move-loop, making non-trivial programs tractable.

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

code
TODO:
    if any linked Task exists:
        CONVERT Task → Story
        INC Bug
        transition to TODO
    else:
        transition to QA

QA:
    if any linked Bug exists:
        CONVERT Bug → Task
        transition to QA
    else:
        transition to DEV

DEV:
    if any linked Story exists:
        CONVERT Story → Bug
        transition to DEV
    else:
        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. It runs until Jira Cloud's chain-depth cap of 10 triggers, at which point the operator re-triggers the Epic to continue. A single status edit restarts the cascade.

The reduction still holds, the human just supplies the next clock tick. 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. Every physical computer is finite, so Jira Cloud's finite quotas do not refute the construction. Under that standard convention, Jira is Turing-complete.

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

AI 可能会生成不准确的信息,请核实重要内容

Jira Is Turing-Complete | Hacker News Best | traeai