Jira 是图灵完备的
摘要
本文通过使用 Jira 问题和自动化规则实现明斯基寄存器机,证明了 Jira 的自动化功能是图灵完备的。
<a href="https://lobste.rs/s/6rwldo/jira_is_turing_complete">评论</a>
查看缓存全文
缓存时间: 2026/05/23 20:48
# Jira 是图灵完备的
来源:https://seriot.ch/computation/jira.html
### Nicolas Seriot
#### 计算理论 (https://seriot.ch/computation/index.html)\> Jira 是图灵完备的
*在 Atlassian Automation 中构建明斯基机* *2026 年 5 月 22 日*
工程界传闻 (https://news.ycombinator.com/item?id=17689446) 认为 Jira (https://www.atlassian.com/software/jira)(Atlassian 的项目跟踪工具)是图灵完备的 (https://esolangs.org/wiki/Turing-complete) 。现有的说法模糊地指向自动化功能,但没有展示出归约。本文提供一个证明,包含设置说明和执行跟踪。
### 映射计算模型
明斯基寄存器机 (https://esolangs.org/wiki/Minsky_machine) 只需要两个无界计数器和一组带标签的有限指令:
- `INC r; goto S`
- `DEC r; if r == 0 goto S else goto S`
或者用通俗的话说:
- *递增寄存器 R,然后跳转到某个状态*
- *递减寄存器 R,如果 R == 0 则跳转到某个状态,否则跳转到另一个状态*
一个将寄存器 A 加到寄存器 B 的明斯基程序如下:
``
1. DEC A; if A == 0 goto 3 else goto 2
2. INC B; goto 1
3. HALT
``
明斯基 (https://en.wikipedia.org/wiki/Marvin_Minsky) 证明了该模型是图灵完备的(1967 年)。因此在 Jira 的自动化语言中展示该模型,就建立了归约。以下是模型如何映射到 Jira:
明斯基机 | Jira
--- | ---
寄存器 A | 类型为 **Bug** 的关联问题数量
寄存器 B | 类型为 **Task** 的关联问题数量
程序计数器 | 单个 **Epic** 问题的状态
调度表 | Jira 自动化规则,每条指令状态对应一条规则
时钟 | 自动化触发的转换,或链上限后的外部重新触发
Epic 的状态编码当前指令。自动化规则 (https://support.atlassian.com/cloud-automation/docs/create-and-edit-jira-automation-rules/) 检查关联问题数量并决定下一个状态。`INC` 和 `DEC` 通过在相应关联问题类型上创建或删除问题来实现。条件分支通过基于 JQL 条件的规则 (https://support.atlassian.com/cloud-automation/docs/jira-automation-conditions/) 来实现。
### 实现加法
以下是一个最小工作实现,使用一个 Epic、五个关联问题和每条指令状态对应一条自动化规则(空间设置 > 自动化)。
**1. 创建工作流**
创建一个 Jira 工作流,状态为初始状态 `BACKLOG`,然后是 `TODO`、`DEV` 和 `PROD`。任意状态都可以转换到其他任何状态。
创建一个状态为 `BACKLOG` 的 Epic。
**2. 为 TODO 创建规则**
`DEC A; if A=0 halt, else goto DEV。`
- 触发器:Epic 状态更改为 `TODO`。
- 如果至少存在一个关联 Bug:删除一个 Bug,将 Epic 转换为 `DEV`。
- 否则:将 Epic 转换为 `PROD`(停止)。
**3. 为 DEV 创建规则**
`INC B; goto TODO。`
- 触发器:Epic 状态更改为 `DEV`。
- 创建一个新的 Task,关联到该 Epic。
- 将 Epic 转换为 `TODO`。
两条规则都启用了“允许规则触发其他规则”。
下面的截图显示了这两条规则如何连接到 Epic 的工作流中。
[](https://seriot.ch/resources/jira_tc/addition_rules.png)
**4. 初始化寄存器**
关联 2 个 Bug(A=2)和 3 个 Task(B=3)到该 Epic。
**5. 启动机器。**
将 Epic 转换为 `TODO` 来触发级联。五次转换:
``
(2,3) TODO →
(1,3) DEV →
(1,4) TODO →
(0,4) DEV →
(0,5) TODO →
(0,5) PROD
``
*记录在真实的 `*.atlassian.net` 实例上。*
Epic 最终状态为 `PROD`,关联了 0 个 Bug 和 5 个 Task。我们刚刚计算出了 2 + 3 = 5。
### 两个状态下的斐波那契
上述的归约足以证明图灵完备性。Jira 的自动化语言通过使用“转换问题类型”使得非平凡程序易于处理。
Jira 的“转换问题类型”操作能立即更改问题的类型:Bug → Story,Story → Task,等等。一次转换将对一个寄存器的 DEC 和对另一个寄存器的 INC 合并为一个原子操作。它并没有扩展 Jira 的计算能力(一次转换可以表示为 DEC + INC),但大大减少了任何移动循环的调度表。
斐波那契序列 `(A, B) → (B, A+B)` 可以简化为两个状态,使用三个寄存器(A=Bug,B=Task,C=Story),并使用 `TODO` 和 `QA`(将其添加到工作流中)作为两个指令状态:
``
TODO:
if any linked Bug exists:
Convert Bug → Story
INC Task
transition to TODO
else:
transition to QA
QA:
if any linked Story exists:
Convert Story → Bug
transition to QA
else:
transition to TODO
``
初始状态 A=1,B=1,C=0。序列 1, 1, 2, 3, 5, 8, 13, ... 出现在 B(Task 数量)中。
与加法机器不同,斐波那契机器没有停止状态。它一直运行直到 Jira Cloud 的链深度上限(10 个触发器),届时操作员重新触发 Epic 以继续。单次状态编辑即可重新启动级联。该归约仍然有效,只是由人来提供下一个时钟滴答。Jira Data Center 暴露了相同的 `automation.rule.execution.timeout` 及相关可配置属性。
### 结论
给定无限的问题创建和规则执行,Jira 的自动化语言可以编码一个双计数器机器。每台物理计算机都是有限的,因此 Jira Cloud 的有限配额并不否定该构造。按照这一标准约定,Jira 是图灵完备的。
所以,如果复杂的 Jira 自动化感觉像程序,那是因为它们本质上就是程序。
相似文章
既然Jira可以挂上MCP,为什么还要在代码中保留测试计划?
文章认为,通过MCP工具(如查询Jira)让AI代理访问数据,与拥有像代码文件那样的原生结构化上下文是不同的。它强调,真正的理解需要的不仅仅是API访问,类似于拥有借书卡与真正读过书之间的区别。
我们在公司内部署了AI代理,包括Jira中的自主支持。AMA。
一家公司在整个组织中部署了AI代理,用于Jira中的自主支持、内部知识辅助和文档编写,在重复性工单上实现了70%以上的自动解决率和更快的响应时间。
jank 现已拥有自己的自定义 IR
jank 是一种 Clojure 方言,现已引入一种在 Clojure 语义层面设计的自定义中间表示,以实现更好的优化并与 JVM 竞争。
RAI研究所 | 抛接
RAI研究所展示了一个机器人进行抛接,展示了实时物体操控和协调方面的进步。
@nikunj: 老兄,/goal 就是 AGI,如果有合适的工具的话…… 你说什么?你遍历了整个包含两千多个条目的数据库……
一位用户描述了一个AI代理,它自主修复了数据库中的产品图片、前端错误和描述,使用了浏览器自动化和网络搜索,并在用户与创始人会面的两小时内运行,突显了令人印象深刻的类似AGI的能力。