开发者生态
morning
Jira 是图灵完备的
2026-05-25
1 阅读
vinhnx
Nicolas Seriot 计算 > Jira 是图灵完备的 Jira 是图灵完备的 在 Atlassian Automation 中构建明斯基机 2026 年 5 月 22 日 工程民间传说认为 Jira(Atlassian 的项目跟踪工具)是图灵完备的。现有的声明模糊地指向自动化功能,而没有表现出减少。本文提供了一个证明,包括设置说明和执行跟踪。映射计算模型 明斯基寄存器机只需要两个无界计数器和一组有限的标记指令: INC r;转到 S DEC r; if r == 0 goto S else goto S' 或者,用简单的英语来说:递增寄存器 R,然后转到某个状态 S 递减寄存器 R,如果 R == 0 转到零状态 S,否则转到非零状态 S' 将寄存器 A 添加到寄存器 B 的明斯基程序如下所示: 1. DEC A; if A == 0 转到 3 否则转到 2 2. INC B; goto 1 3. HALT 明斯基证明了该模型图灵完备(1967)。因此,用 Jira 的自动化语言展示它就可以减少。以下是该模型映射到 Jira 的方式: Minsky Machine Jira Register A 类型为 Bug 的链接问题计数 寄存器 B 类型为任务程序计数器的链接问题计数 单个 Epic 问题的状态 调度表 Jira 自动化规则,每个指令状态一个 时钟自动化触发的转换,或外部重新触发过去的链上限 Epic 的状态对当前指令进行编码。自动化规则检查链接的问题计数并决定下一个状态。 INC 和 DEC 是在适当的链接问题类型上作为问题创建和删除来实现的。条件分支作为 JQL 条件规则来实现。实现加法 这是一个最小的工作实现,使用一个 Epic、五个链接问题和每个指令状态一个自动化规则(空间设置 > 自动化)。 1. 创建工作流程 创建一个 Jira 工作流程,其状态为初始状态 BACKLOG ,然后是 TODO 、 DEV 和 PROD 。任何状态都可以转换到任何其他状态。创建状态为 BACKLOG 的 Epic。 2. 为 TODO DEC A 创建规则;如果 A=0 停止,否则转到 DEV。触发:史诗状态更改为 TODO 。如果至少存在一个链接的 Bug:删除一个 Bug,将 Epic 转换为 DEV 。否则:将 Epic 转换为 PROD(停止)。 3.为DEV INC B创建规则;转到待办事项。触发:史诗状态更改为 DEV 。创建一个新任务,将其链接到 Epic。将 Epic 过渡到 TODO 。两个规则都启用了“允许规则触发其他规则”。下面的屏幕截图显示了连接到 Epic 工作流程中的两条规则。 4. Init 注册将 2 个错误 (A=2) 和 3 个任务 (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 个错误和 5 个相关任务。我们刚刚添加了 2 + 3 = 5。 斐波那契的三种状态 上述简化足以证明图灵完备性。除此之外,Jira 的自动化语言可以简化 Minsky 操作。转换问题类型立即更改问题的类型:Bug → 故事、故事 → 任务,等等。 CONVERT 可表示为 DEC + INC。它不会扩展 Jira 的计算能力,但会显着缩小任何移动循环的调度表,使重要的程序变得易于处理。斐波那契为 (A, B) → (B, A+B),使用三个寄存器(A=Bug、B=Task、C=Story)折叠为三个状态,使用 TODO 、 QA (将其添加到工作流程)和 DEV 作为三个指令状态: TODO:如果存在任何链接的任务:CONVERT Task → Story INC Bug 转换到 TODO else:转换到 QA QA:如果存在任何链接的 Bug:CONVERT Bug → 任务转换到 QA else:转换到 DEV DEV:如果存在任何链接的 Story:CONVERT Story → Bug 转换到 DEV 否则:转换到 TODO 初始状态 A=1、B=1、C=0。序列 1, 1, 2, 3, 5, 8, 13, … 出现在 B(任务计数)中。与加法机不同,斐波那契机没有停止状态。它会一直运行,直到 Jira Cloud 的链深度上限为 10 个触发器,此时操作员会重新触发 Epic 以继续。一次状态编辑即可重新启动级联。减少仍然成立,人类只是提供下一个时钟滴答声。 Jira Data Center 公开与automation.rule.execution.timeout 相同的内容以及相关的可配置属性。结论 Jira 的自动化语言可以对两个计数器机器进行编码,从而实现无限的问题创建和规则执行。每台物理计算机都是有限的,因此 Jira Cloud 的有限配额并不能反驳这种构造。根据该标准约定,Jira 是图灵完备的。因此,如果复杂的 Jira 自动化感觉像程序,那是因为它们确实如此。